안녕하세요.
리눅스 초짜입니다. 최근 모기향 책을 사서 훑어(?)보고 있는데요...
14장 kmap_init() 이 부분의 설명중에 마지막 PMD가 high memory를 관리한다고 써있는데요..
이것은 모든 유저 프로세스는 위의 PMD 만을 참조하여 PTE에 접근후 메모리를 사용 한다는 뜻인가요?
책의 내용이 뭔가 부족하다는(?) 저만의 생각이 들어 이렇게 질문드립니다.
답변주시면 대단히 감사하겠습니다.
.
안녕하세요.
리눅스 초짜입니다. 최근 모기향 책을 사서 훑어(?)보고 있는데요...
14장 kmap_init() 이 부분의 설명중에 마지막 PMD가 high memory를 관리한다고 써있는데요..
이것은 모든 유저 프로세스는 위의 PMD 만을 참조하여 PTE에 접근후 메모리를 사용 한다는 뜻인가요?
책의 내용이 뭔가 부족하다는(?) 저만의 생각이 들어 이렇게 질문드립니다.
답변주시면 대단히 감사하겠습니다.
.
프로세스공간과 커널공간은 기본적으로 3G:1G로 나눠집니다 (32비트기준).
커널은 시스템의 모든 물리메모리를 접근하고 제어할 수 있어야하는데, 물리메모리가 2G라면, 커널공간은 1G으로 제한되어 있으니 커널공간으로 물리메모리를 매핑할 경우 1G만 직접매핑할 수 있어 나머지 1G는 사용할 수 없게됩니다. 이 문제를 해결하기위해서 커널은 896MB까지만 직접매핑(ZONE_NORMAL)합니다. 나머지 영역(ZONE_HIGHMEM)은 필요할 때만 커널공간 주소와 매핑해서 사용합니다. 그때 그때 상황에 따라 매핑해서 사용하려면, 페이지테이블(PTE)이 필요하게되는데 그곳을 가르키는 녀석이 PMD(=PGD in ARM)로 보시면 되겠습니다. (202페이지에 알아봅시다! 하이메모리 영역에 설명이 조금 되어있긴 한데...부족한부분이 많네요.)
도움이될만한 링크:
http://unix.stackexchange.com/questions/5124/what-does-the-virtual-kernel-memory-layout-in-dmesg-imply
https://kldp.org/node/73455