질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

[질문] 커널 메모리 매핑 관련 질문입니다.

작성자 정보

  • 누키드 작성
  • 작성일

컨텐츠 정보

본문

안녕하세요. 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
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  72 명