이전 글들에서 OS가 메모리를 관리하기 위한 방법 중 하나인 Segementation에 대해 알아봤다.
하지만 Segementation은 다양한 크기의 chunk로 나누어지기 때문에 Segmentation와 free space를 관리하는데 있어서 어려움이 있었다.
OS가 메모리를 관리하기 위한 첫번째 방법이 Segementation이었고 두번째 방법도 존재한다.
바로 Paging이라 불리는것이다. OS는 variable size로 메모리를 나누는 것이 아닌 fixed-size로 메모리를 나누고, 이것을 page라고 부른다. physical memory를 page frames이라고 불리는 고정된 크기의 slot 배열이라고 생각하는 것이다.
그럼 Paging은 정확히 어떤 장점이 있을까?
첫번째로, flexibility가 좋다.
프로세스가 address space를 어떻게 사용하든, heap과 stack이 다른 방향으로 grow하는것을 신경쓰지 않고, address space를 효율적으로 추상화 할 수 있다.
두번째로, Simplicity가 좋다.
OS는 free list에 free page들을 모두 저장하고, 할당해야할 때 처음 찾은 페이지를 할당하면 된다.
How to translate
address space의 virtual page를 저장하기 위해서는, OS가 프로세스마다 page table을 관리해야한다.
그리고 virtual address를 Virtual Page Number(VPN)과 Offset으로 나눠 표현한다.
예를 통해 자세히 알아보도록 하자.
virtual address 010101을 physical memory로 translate해야한다.
먼저, Vitual Page Number(VPN)를 Physical Frame Number(PFN)으로 변환한다.
왜냐하면 우리가 프로세스마다 Address Space를 가상화 하여,
실제로 physical memory의 다른 부분에 위치해 있더라도 주소 0에서 부터 연속된 공간을 갖고 있다고 추상화한것과 같다.
프로세스는 연속된 숫자의 Virtual Page를 사용하지만, 실제로는 physical memory의 다른 page frame들에 저장된다.
이 예에서 VPN 1은 PFN 7에 해당하는 것을 알 수 있다.
그러므로 virtual address를 physical address로 translate하면 결과는 다음과 같다. (Offset은 전과 마찬가지로 page에 찾는 데이터가 있는 위치의 offset이다.)
What's Actually In the Page Table?
Page table은 Virtual Page Number은 Physical Frame Number에 매핑하기 위한것이다.
가장 간단한 형식은 Linear page table로 배열 형태이다.
Page Table은 Virtual Page Number를 index하고 있고, PFN을 찾기 위해 Page Table Entry(PTE)를 look up 하는 형태이다.
PTE에는 PFN뿐만 아니라 추가적인 정보가 담겨 있는데 몇가지만 살펴보자
- Valid bit
translation이 유효한지 체크하는 비트이다. 예를 들어 stack과 heap 사이의 사용되지 않는 공간은 valid bit이 invalid로 마킹되어 있을 것이다. 그리고 만약 프로세스가 이 메모리에 접근하려 한다면 오류가 발생할 것이다.
- Protection bit
페이지가 read only인지 read, write가 가능한지 등등을 체크하는 비트이다.
- Present bit
페이지가 physical memory에 존재하는지, 아니면 swapped out되어 disk에 존재하는지에 대한 비트이다.
(이는 후속 글에서 상세하게 다룰 것이다.)
Where Are Page Tables Stores
Page table은 Segmentation을 위해 필요했던 base/bound register보다는 매우매우 큰 메모리를 요구한다.
예를 들어, 4KB페이지를 가진 32bit 주소 공간에서는 20bit는 VPN을 12bit는 offset을 표현할 것이다.
그리고 20bit VPN은 OS가 각 프로세스당 2^20개의 virtual page를 관리해야한다는 말이다. PTE가 4byte라고 했을때 Page Table당 4MB이다. 엄청나지 않은가..?
그래서 이를 MMU에 저장하기엔 너무 크다. 따라서 각 Process table을 memory에 저장하고 있고 상세한 것은 후에 다룰것이다!
'운영체제 > Operating Systems in Three Easy Pieces' 카테고리의 다른 글
14. Virtualization) Translation Lookaside Buffers (1) | 2024.10.03 |
---|---|
12. Virtualization) Free-Space (0) | 2024.09.26 |
11. Virtualization) Segmentation (1) | 2024.09.19 |
10. Virtualization) Address Translation (3) | 2024.09.08 |
9. Virtualization) Address Spaces (0) | 2024.04.07 |