오늘은 Virtual Memory를 활용한 Paging 기법인 Demand Paging에 대해서 알아봅시다.
Demand Paging
이전 시간에 다룬 Virtual Memory와 Paging 기법을 동시에 활용한 방법입니다. 즉, 필요한 페이지만을 메모리에 로드하고 그 때, 그 때 교체하는 방식입니다.
Demand Paging에서는 Logical Address를 Logical Address로 변환하기 위해 아래와 같은 메커니즘으로 작동합니다.
Logical Address에 해당하는 페이지를 먼저 찾아야합니다. 그러기 위해서 PCB에 저장되어 있는 Page Table의 주소를 알아야합니다. 그래야 해당 프로세스의 Page table을 찾아가서 Logical Address에서 나타내는 page의 index를 가져오고 그 인덱스에 해당하는 메모리 주소에서 offset만큼 뛰어넘어 Physical Address를 가져올 수 있으니 말이죠.
그렇다면 우리는 수많은 Logical Address를 Physical Address로 변환하는 과정을 거치기에 memory를 read하는 연산이 매우 많아집니다. 기본적으로 메모리에 있는 instruction을 수행하기 위해 physical Address를 읽어오는 과정 뿐만 아니라, PCB에서 page table의 위치를 가져오기 위해 read를 한번 더 하기 때문이죠.
따라서 이러한 연산 과정을 줄이기 위해서 CPU 내에 Page Table Base Register가 존재하여 해당 레지스터에 프로세스의 page table의 위치를 저장해둡니다. 이렇게 되면 빠른 속도로 page table의 주소를 읽어올 수 있으니 효율적으로 작동합니다.
이 후에는 기존과 동일한 방식으로 Logical Address를 Physical Address로 변환합니다.
Page Table Entry
페이지 테이블을 떠올려봅시다. 페이지 테이블에는 하나의 row가 존재합니다. 우리는 이 row를 page table entry라고 합니다. paging 기법에서 자세하게 생각해보면 알 수 있는 것이 한 가지 있습니다.
우리가 32비트 컴퓨터에서 demand paging을 이용한다고 해봅시다. 통상 페이지 하나는 4K의 크기를 갖습니다. 그러면 offset이 12비트가 필요하겠죠. 즉, 우리는 20비트를 page number로 사용할 것입니다.
그렇다면 Page table entry에는 사실 20비트만 필요합니다. 이것은 Address Binding 과정을 생각해보면 알 수 있는데, Logical Address에서 offset 부분은 실제로 메모리에서 얼마나 떨어져있는 지를 결정하기 때문에, Logical Address의 하위 12비트는 실제 Physical Address를 계산하는데 사용됩니다. 그러니까 결국 page table entry에서는 20비트만 나타내면 되는 것이죠.
이에 page table entry에 12비트는 다른 용도로 사용할 수 있게 되었습니다. 현재 운영체제에서는 프로세스의 상태를 나타내는 데에 12비트를 사용하게 됩니다.
Control Information
우리는 이 12비트에 프로세스에 대한 정보들을 저장합니다. 크게 6가지만 다뤄봅시다.
P : present bit
1로 세팅되어 있다면 해당 페이지가 메인 메모리에 로드된 상태를 의미합니다.
M : modified bit
1로 세팅되어 있다면 해당 페이지가 수정되었음을 의미합니다. 이 비트를 통해서 만약 해당 페이지가 swap-out될 때, 덮어써야할지 아니면 버려도 되는 지를 확인합니다. 만약 해당 페이지가 수정되었다면 덮어쓰는 과정을 거쳐야하고, 수정되지 않았다면 바로 버리면 됩니다.
R : reference bit
1로 세팅되어 있다면 이 페이지에 접근한 적이 있음을 의미합니다. 이 비트를 통해서 최근 사용된 페이지를 판단하고 어떤 페이지를 swap-out할 지를 결정합니다.
U : user mode
1로 세팅되어 있다면 유저 모드에 있음을 의미합니다.
W : writable
1로 세팅되어 있다면 해당 페이지에 write가 가능합니다.
COW : Copy-On-Write mode
1로 세팅되어 있다면 해당 페이지는 부모와 공유되고 있다는 것을 의미합니다. COW에 대한 개념은 해당 글을 참고해주세요.
지금까지 Demand Paging에 대해서 알아봤습니다. 감사합니다.
'CS > OS' 카테고리의 다른 글
[운영체제] TLB(Translation Lookaside Buffer) (1) | 2023.12.09 |
---|---|
[운영체제] 다계층 페이지 테이블 (0) | 2023.12.09 |
[운영체제] Virtual Memory (1) | 2023.12.08 |
[운영체제] Paging (3) | 2023.12.08 |
[운영체제] Address Binding (0) | 2023.11.28 |