리눅스 커널도 하나의 프로세스이므로 총 4GByte 의 Virtual memory 를 사용하게 됩니다.

 4GByte 의 메모리는 아래와 같이 크게 두 개로 나뉘게 되며 하위 3GByte 는 user space(application) 용이며 상위 1GByte 는 kernel space 로 구분합니다. 



 위와 같이 커널 영역은 Virtual memory 4GByte 영역중에서 하위 1GByte 영역에 위치하게 됩니다.(0xc0000000 ~ 0xffffffff)

 커널 영역의 상위 8Byte 는 아래와 같이 물리 메모리와 1:1 매핑되게 됩니다.


 커널 영역의 하위 128MByte 는 아래와 같이 특수 목적을 위해 커널에서 Reserved 하여 사용하게 됩니다.(물리 메모리와는 상관 없습니다.)


 그러므로 Virtual memory 중에서 커널 영역에서 사용할 수 있는 공간은 1GByte - 128MByte = 896MByte 입니다.  


 위에 설명한 모든 내용은 PAE(Physical Address Extension) 를 사용하지 않는 32Bit CPU 일 경우에 관한 내용입니다.
 64Bit CPU 를 사용하거나 PAE 를 사용하는 경우에는 메모리 매핑하는 방법이 약간 달라집니다.

리눅스메모리모델.pptx




'development' 카테고리의 다른 글

[kernel] 커널 쓰레드  (0) 2012.01.04
[kernel] 시간지연  (1) 2012.01.02
[etc] 빌드 시스템  (0) 2011.12.23
[kernel] Thread 와 Kill  (0) 2011.11.26
[GCC] -S 옵션?  (0) 2011.11.18
블로그 이미지

김유석0

,