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가지가 있다.
http://kerneltrap.org/node/2450
|
When the wind is great, bow before it; when the wind is heavy, yield to it. |











![[http]](/imgs/http.png)