리눅스 분류
[질문] 커널 메모리 매핑 관련 질문입니다.
작성자 정보
- 누키드 작성
- 작성일
컨텐츠 정보
- 2,486 조회
- 0 추천
- 목록
본문
안녕하세요. x86기반 리눅스 공부하고 있습니다.
가상 메모리와 물리메모리 매핑관련해서 공부중인데요, 궁금한 것이
잇는데 정보를 찾아볼 수 없어 이렇게 질문을 올립니다!
x86기반 리눅스에서는 가상메모리 영역의 0xC0000000부터 +896MB까지가
물리메모리 0x00000000~896MB로 1:1 Direct Mapping된다고
많은 서적과 인터넷 자료에 나와잇습니다. 그리고 이부분리 Normal zone이
라는 것도 알겟고, 그래서 커널에서는 C0000000~+896MB사이의
가상메모리 주소는 메모리주소 -0xC0000000으로 물리메모리주소를
쉽게 구한다고 알고 있습니다.
하지만, cpu는 사실 이러한 사실을 모르고 mmu를 통해 변환하게
될텐데요, 그럼 결국 page table에서도 1:1 매핑을 일일히 다 해주어야
하지 않나요??
2 level page table 기법을 쓰게된다면 가상메모리주소의
상위 10bit이 pgd 인덱스고 다음 10bit이 pte 인덱스일텐데요,
0xC0000000~ 0xF8000000 을 물리메모리와 1:1매핑하려면
pgd인덱스를 보면
1100000000 ~ 1111100000 (2진)
차이는 11100000(2진) = 0xE0 = 224 이고
결국 224개의 pte가 사용되어야 한다는 소리가 됩니다.
그럼 커널이 부팅때 초기화될 때, 이만큼의 pte를 잡고 초기화해줘야
한다는 말이 되는데, 이 부분을 코드에서 찾을 수가 없습니다..ㅠ
제가 못찾는건지, 이 개념이 틀린건지 맞긴한건지 궁금하여
질문을 올립니다..
고수님들의 답변을 기다리겠습미다..ㅠ 좋은 하루되시길 바랍니다!!
관련자료
-
이전
-
다음
댓글 0
등록된 댓글이 없습니다.