가상메모리 관련 / 커널 관련 질문.
글쓴이: happyKYS / 작성시간: 목, 2012/03/08 - 1:41오후
가상 메모리가 페이지 테이블을 참고하여 물리메모리로 변환이 되는것으로 알고 있고, 이것은 가상메모리를 기반으로 하여 3단계 혹은 4단계의 페이지 디렉토리와 테이블을 거쳐 완료가 되는것으로 알고 있습니다.
여기서 질문
1. 가상 메모리 주소를 기반으로 하여 물리메모리를 구한다면, 어떤 코드가 물리메모리로 로드될때 위치하는 물리메모리 주소는 항상 고정적이지 않은가요?(어떤 코드의 가상 메모리 주소는 고정이므로) 이러면 효율성이 떨어지는 것 같은데 제 착각인지요.
2. 리눅스 커널 공간에서 3기가바이트의 유저스페이스를 지나 1기가바이트의 커널공간이 있는 것으로 알고 있습니다. 이때 1기가바이트라는 구조때문에 직접엑세스할 수 있는 물리주소의 영역은 896메가바이트 미만으로 한정된다고 하는데, 왜 이런지 이해가 가지 않습니다. 이게 구조때문인가요?? 가상메모리주소만 가지고 있으면 물리메모리 주소는 페이지 테이블을 통해 어느곳이나 접근이 가능하지 않은가요?
Forums:
1번에서 페이지테이블을 포인터의 배열로 생각하시면
1번에서 페이지테이블을 포인터의 배열로 생각하시면 생각하시기 쉽습니다. 포인터의 값이 변하면 다른 메모리주소를 가리키지만 포인터가 위치하고 있는 메모리주소는 일정하죠.
요즘의 PE32-COFF파일은 실행파일이 로드되는 가상메모리주소도 변합니다.
2번에서는 다음과 같이 생각하시면 편합니다. 가상메모리주소 0xc0000000에서 0xf7ffffff까지는 물리메모리주소 0x0에서 0x37ffffff까지이다.
1. 유저 코드의 물리주소는 로드될 때 마다 다를 수
1. 유저 코드의 물리주소는 로드될 때 마다 다를 수 있습니다.
하나의 유저 코드를 실행하는 측면으로 볼 때, 물리으로 당연히 '손해'일지 모르겠지만,
가상메모리 시스템을 사용하는 시스템에서는 이러한 방식으로
전체 메모리 사용에 대한 이득을 더 얻을 수 있기 때문이라고 생각합니다. :)
ps. 사실 위의 '손해'라는 부분도...
물리주소가 달라지므로 인해 발생하는 오버헤드는 TLB miss 나 Cache miss 정도의
손해 밖에 없다고 생각됩니다.
Swap 등의 이유로 발생하는 메모리 복사는 물리주소가 같다고 해서 줄어드는 것이 아니며,
물리주소가 고정된다면 오히려 Swap 자체가 더 많아 질것이라 생각됩니다..
2. http://stackoverflow.com/questions/8252785/why-linux-kernel-zone-normal-is-limited-to-896-mb
저도 설명을 써보려 정리했는데, 글로 정리가 잘 안되어 구글 검색으로 위의 스레드를 얻었습니다.
괜찮은 설명인 것 같아 공유합니다.
댓글 달기