페이징의 실제 구현과 작동?
글쓴이: syia / 작성시간: 금, 2006/03/17 - 6:09오후
페이징을 이론적으로 아무리 공부해도 해결되지 않은 몇가지 의문이 있어 질문으로 올려봅니다 ^.^;
1. 페이징은 적어도 두단계 이상의 연산(page directory 에서 table주소 get, table주소에서 page block의 첫 주소 get) 이 필요한데 이는 모두다 하드웨어로 이루어 지는가? 하드웨어에서 이루어 진다면 파이프라이닝의 fetch decode 등의 과정중에 이루어지는가?
2. 페이징에 필요한 최소의 정보는 page directory 1개 와 page table들이다.. 그러다면 page table들은 프로세스에서 필요한만큼만 만들고 더 필요하거나 할때 추가적으로 생성하는가? (미리 다 만들어두려면 4M가 필요)
3. 보통 리눅스나 윈도우에서는 프로세스마다 4G의 독립된 가상주소공간을 가진다. 그렇다면 프로세스마다 별도의 page directory와 page table들을 가지는가? 그렇다면 이것은 어디에 저장되는가?
이상 3가지 입니다.
여러문서나 참고서적을 뒤져바도 저정도로 자세히는 안나와있더군요;
kldp의 고수님들이라면 알고계실듯해서 ^.^ 부탁드립니다.
Forums:
1번은
1번은 소프트웨어적으로 구현하더군요.
2번은 커널이 필요에 따라서 만들수 있게 설계 하면 됩니다.
3번은. 기억이 안나는군요.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
1번이 소프트웨어적으로 가능한가요?
음.. 예를들어 유저 프로세스의 뭔가가 실행중이라 하면
이건 local address로 되어있을텐데,
그 프로세스가 cpu를 사용중에 어떻게 physical address로 번역이 될까요?
해당 프로세스에 번역기능이 달린것도 아니고, 매번 메모리 참조때마다 소프트웨어적으로 번역이 되는건가요?
1번은..
1번은..
메모리 주소 계산시 페이징에 따른 주소변환은 하드웨어에서 모두 처리해 줍니다.
(이거 안해준다면 성능 데미지 엄청나죠. 그렇게 간단한 작업이 아니니)
다만 이 페이지를 관리하는 방식은 운영체제에서 구현을 해 줘야 합니다.
miss 된 페이지(프로세스는 사용하고 있으나 실제 물리 메모리에는 없는
페이지 접근시)를 처리하는 경우나 메모리 할당 해제시 사용 메모리 영역에
따른 주소 변환 등이 해당되죠.
2번은.. 당연히 최소로 만듭니다. 아마 x86에서는 page directory가 4k고
page table 1개가 4k 정도 크기를 가질겁니다. 물론 page directory를 다 꽉
채우지 않아도 상관없습니다. 다만든다면 데미지가 크죠.
3번의 경우는 각 프로세스별로 가상메모리와 물리메모리 대응을 다르게
해 주면 됩니다. 공유메모리같은 특정 영역을 제외한 나머지에 대해서
물리메모리를 전혀 다르게 대응시켜주면 프로세스간에 메모리 침범안하게
할 수 있죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기