보통 프로세스마다 페이지 테이블이 하나씩 할당되는 걸로 알고있습니다. 페이지 테이블을 하나로 관리하면 동일한 가상주소인해서 충돌이 일어나기 때문에 각 프로세스마다 별도로 할당하는 걸로 알고있습니다!(역페이지 테이블은 제외)
페이지 테이블을 구성하고 있는 페이지 테이블 엔트리들은 페이지 프레임이 결정 되어야하는데..
페이지 프레임을 결정 시켜줘야하는데.. 누가 결정을 시켜주죠? 운영체제에서 별도의 자료구조로 관리해서 할당해주는게 맞는건지요..(?)
공룡책봐도 이 부분에 대한 명확하게 알수가 없더라구요! 이걸 결정시켜 주지 않으면 페이지 테이블을 별도로 관리하는게 물거품이 되버리는데..
답변 부탁드려요~
보충하자면,
MMU는 페이지 테이블을 참조해서 변환시켜 주잖아요
그러면 각 프로세스마다 페이지 테이블을 부여한다면 여러개의 페이지 테이블이 존재하게 되잖아요.
이 페이지 테이블을 구성하고 있는 녀석들이 페이지 테이블 엔트리(PTE)인데
이 PTE에는 자신들이 가르키고 있는 페이지 프레임의 번호가 들어 있잖아요.
제가 궁금한것은 이 페이지 프레임 번호를 누가 관리하는지 그게 궁금합니다~
페이지 테이블을 구성하고 있는 페이지 테이블 엔트리들은 페이지 프레임이 결정 되어야하는데..
페이지 프레임을 결정 시켜줘야하는데.. 누가 결정을 시켜주죠? 운영체제에서 별도의 자료구조로 관리해서 할당해주는게 맞는건지요..(?)
공룡책봐도 이 부분에 대한 명확하게 알수가 없더라구요! 이걸 결정시켜 주지 않으면 페이지 테이블을 별도로 관리하는게 물거품이 되버리는데..
답변 부탁드려요~
보충하자면,
MMU는 페이지 테이블을 참조해서 변환시켜 주잖아요
그러면 각 프로세스마다 페이지 테이블을 부여한다면 여러개의 페이지 테이블이 존재하게 되잖아요.
이 페이지 테이블을 구성하고 있는 녀석들이 페이지 테이블 엔트리(PTE)인데
이 PTE에는 자신들이 가르키고 있는 페이지 프레임의 번호가 들어 있잖아요.
제가 궁금한것은 이 페이지 프레임 번호를 누가 관리하는지 그게 궁금합니다~
육하원칙 좀
MMU말이냐?
PCB안에있는 origin register가 PMT(Page Mapping Table)를 포인터하고 있음. process생성할때 PCB 생기는건알지?
그게 왜 궁금한 사항인지 이해가 안간다. 당연히 커널이 관리하지. 그럼 그걸 응용 프로그램이 관리하겠냐?
프로세스 마다, 페이지 디렉토리(CR3라는 레지스터가 가르킴)가 생성되고, 페이지 디렉토리의 엔트리는 페이지 테이블을 가리키고 페이지 테이블이 또한번의 페이지 테이블을 가리키고, 거기서 가르키고 있는 주소가 물리 주소의 4KB단위의 주소
맞나 ?
32bit 주소값 따지면, 10 / 10 / 12 총 3개의 비트로 쪼개서 각각, 첫번째 10bit는 페이지 디렉토리에서의 인덱스 두번째 10은 페이지 디렉토리가 가르키는 페이지 테이블에 인덱스 마지막 12bit는 페이지 테이블이 가르키는 물리주소의 offset
CR3 -> 페이지 디렉토리 -> 페이지 테이블 -> 물리주소
이게 맞는거 같은데 .
마지막 offset이 12bit로 쓰이는 이유는, 페이지의 크기가 4kb이기 때문.
그리고 프로세스마다 하나의 페이지 디렉토리가 만들어 지고, 페이지 테이블의 경우에는 필요한 경우에만 만들어지며, 해당 페이지 테이블은
swap in - out 이 되며, 페이지 디렉토리는 항상 램에 존재 ?
-_- 기억이 가물하다 .