· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
High Memory In The Linux Kernel

Overview of Linux memory management


x86의 32bit 아키텍쳐에서는 물리 메모리를 4G까지 밖에 접근 할 수 없게 되어 있다. 게다가 MMU를 가지고 있다면 가상 주소와 물리 주소를 매핑하기 위한 페이지 테이블을 구성하여야 한다.

이 페이지 테이블은 fork를 호출하였을 때 커널에 의해 만들어지게 된다. 리눅스 커널은 4G영역을 유저를 위해 3G, 커널을 위해 1G를 할당해서 사용하고 있으며 커널 영역(3-4G)의 영역은 램의 첫 1G 영역에 매핑되게 된다. 여기서부터 문제가 발생하게 된다. 커널이 사용할 수 있는 공간은 1G 뿐이다. 커널은 커널 영역의 모든 주소를 물리 주소와 매핑하고 동작하는 데서 문제가 시작된다. 커널은 1G 밖에 메모리 공간을 접근 할 수 없지만 이 1G 안에는 앞서 언급했던 페이지 테이블공간을 저장하기 위하 128M가 있다. 그러므로 커널이 활용할 수 있는 공간은 1G - 128M이다. 즉 896M이다. 게다가 이게 또 다가 아니다. DMA를 위하여 16M까지 잡혀질 수 있다. 그러므로 커널이 활용할 수 있는 공간은 1G - 16M - 128M이다. ㅠㅠ

이 문제를 해결하기 위한 방법은 크게 3가지가 있다.

  • 2G/2G, 1G/3G로 매핑을 하는 것이다.
  • kmap과 kunmap을 통하여 메모리의 4G 까지 사용할 수 있다.
  • 인텔의 PAE(Physical Address Extension)을 이용하여 64G까지 접근할 수 있다.

[http]http://kerneltrap.org/node/2450

ID
Password
Join
You have a will that can be influenced by all with whom you come in contact.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-05-24 21:49:59
Processing time 0.0036 sec