· 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
When the wind is great, bow before it; when the wind is heavy, yield to it.


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.0015 sec