리눅스의 메모리 모델(페이징)에 대한 질문
글쓴이: seungrye / 작성시간: 화, 2007/12/11 - 4:17오후
직접적으로 프로그래밍과는 관련이 없지만.. 어쨌든 질문 올려 봅니다.
실제, 저는 지금 윈도우에서 메모리 모델에 대해서 책을 보고 있습니다.
맨땅에 헤딩하는 식으로 보고있는지라 상당히 개념이 덜 잡혀 있는 상태 입니다.
인터넷을 다니다가.. 리눅스의 페이징은 3단계 페이징을 사용한다는 글(및 그림)을 보았습니다.
반면.. 윈도우는 확실히 2단계 페이징 기법을 사용하지요.
자 결정적 질문! 그렇다면 페이징은 OS차원에서 해 주는건가요-.-?
인텍 아키텍쳐 책을보면 당당하게 2레벨 페이징에 대해서 나와있는데.. 인텔 아키텍쳐 책 이라면 CPU 내부 동작에 대해 나와있는 것 일텐데.. 이렇게 생각하면 CPU차원에서 페이징을 해 주는것 같기도 하고 말이죠..
관련 링크나 간단한 힌트(라고 말하지만.. 답을 원함)좀 주시면 감사하겠습니다.(__)
PS. 영어가 약해서..ㅠ_ㅜ.
Forums:
3단계 페이징은 이미
3단계 페이징은 이미 pentium classic때부터 추가되어 있습니다.
그리고 3단계 페이징과 더불어서 4M 대형페이지도 지원됩니다.
3단계 페이징 사용시 2단계에서 바로 나오는 페이지가 4M 페이지입니다.
리눅스는 커널 기능추가가 빠르기 때문에 여기에 대한 지원이 빨리 되서 3단계를 쓸 뿐입니다.
486 이하로 맞춰놓고 쓰면 2단계 페이징 씁니다.
컴퓨터구조 좀 알고, x86 아키텍쳐 전부 다 파보고 싶다면 영어이긴 하지만 인텔 프로세서 매뉴얼을 권합니다.
서점 책들은 최신 하드웨어에 대해서는 반영이 된게 별로 없습니다.
http://www.intel.com/products/processor/manuals/index.htm
basic architecture, system programming guide, instruction set manual(양이 많아서 두개로 나뉘었죠)만 보시면 될겁니다.
그리고 페이징을 이용하기 위해서는 CPU, OS 양쪽 다 지원을 해 줘야 합니다.
cpu는 페이징 관리체계를 제공하죠. 앞에서 말한 2단계나 3단계 관리체계라든가,
페이지 사용빈도수 기록 등도 들어가고, 가상주소를 실 주소로 변환하는것도 들어갑니다.
하지만 이 관리체계를 운용하는 것은 OS의 몫입니다. 실 메모리를 어떤 식으로 나눠쓸것이며
메모리 부족시 어느 페이지를 swapping할 것인가 등을 결정하고 처리하는거죠.
한마디로 cpu가(정확히 말하자면 메모리 관리체계겠죠) 기관차라면 그 기관차 모는건 OS죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
정말 간단히 말하면
cpu 에서는 virtual address가 physical address 로 translation 되는 부분이 hardware(mmu)로 구현되어 있고,
실제로 중요한 page frame/table 할당/삭제등은 os 에서 하고 있습니다.
아마 적으신 분이 궁금하신건 os 쪽 내용이겠죠.
댓글 달기