운동하는 공대생

[OS(운영체제)] Paging 본문

OS

[OS(운영체제)] Paging

운동하는 공대생 2024. 8. 26. 13:11
728x90
반응형

1. Review

Segmentation : 가상 메모리에서 물리적 메모리로 데이터를 메핑 할 때 데이터의 제일 앞에 있는 2개의 비트를 데이터의 종류를 구분하는 용도로 사용을 하였다.

하지만 여기서의 문제는 사진에서 보여지듯이 External Fragmentation 즉 데이터를 분류하면서 데이터들 간의 작은 공간의 발생으로 메모리 낭비가 발생하는 문제가 있다. 

 

이런 문제를 해결하기 위해서 Segmentation 에서는 데이터의 종류에 따라서 고정되지 않는 사이즈로 물리적 메모리에 적재했다면 Paging은 고정된 사이즈로 주소를 정해둔다.

 

이것은 나눠진 부분을 Page frame이라고 무르며 이것의 사이즈는 2의 제곱 형식으로 사이즈가 구성된다. 여기서 Page와 Frame의 블록의 크기는 같다.

 

2. Paging

2.1 Address Translation 

기존의 방식과는 다르게 2비트만을 참고하는 게 아니라 VPN(Virtual Page Number) 과 Offset으로 데이터가 구성되어 있고 VPN을 통해서 Page Table의 인덱스로 참조하고 Page Table에서는 PFN(Page Frame Number)를 지정해주고 이것은 물리적 메모리에 참조를 하기 위한 주소로 구성된다. 아래의 그림처럼 보통 VPN의 사이즈가 조금 더 크다.

Page Table은 OS에 의하여 관리되며 하나의 Virtual address가 하나의 Page Table의 요소와 매핑되며 이는 PTE(Page Table Entry) 라고 이야기를 한다.

 

여기서 문제는 VPN이 20개의 비트로 구성이 된다면 Page Table은 $2^20$ 개의 엔트리로 구성이 되며 PTE가 4바이트로 구성된다면 $2^20 entries * 4 Bytes per page table entry = 4MB$ 가 나온다. 그래서 각 프로세스당 4MB는 매우 크다. 

 

즉 각각의 프로세스당 Page Table이 메모리에 저장이 되어야 한다. 그리고 이것은 page table base register 에 의하여 관리된다.

 

2.2 Protection

  • Page Table 분리

페이지 테이블이 프로세스마다 분리되어 존재함으로 다른 프로세스가 물리적 메모리에 접근 하는게 불가능하다. 또한 MMU가 context swtich를 하게 된다면 기존 주소를 지정한다.

  • Page-level Protection

각각의 PTE에 valid/Invalid bit 가 존재하여서 페이지가 현재 프로세스가 사용되고 있으며 물리적 주소에 잘 매핑이 되어 있는지를 표시한다.

 

2.3 PTE(Page Table Entry)

 

2.4 Demand Paging

OS에서 필요한 프로세스만을 RAM에 올리고 프로그램 구동에 필요하지 않는 프로세스는 디스크에 두는 방식을 말한다. 이는 MMU를 통해서 구동된다.

 

장점

- I/O 가 적다

- 메모리가 많이 필요 없다

- 빠른 응답

 

2.5 Page Fault

Page Fault 상황은 PTE 가 invalid 할때 즉 물리적 메모리 RAM에 Page가 올라와 있지 않은 상황을 이야기한다. 그래서 추가적으로 디스크에 저장이 되어있는 Page를 읽어 와야 하고 추가적인 disk I/O가 발생한다. 이런 조건에 따라 Page Faulst의 종류가 달라진다.

 

- Major page faults : 물리적 메모리에 Page가 존재하지 않을때 발생하며 디스크에 접근이 필요한다.

- Minor page faults : 메모리에는 page가 올라와 있지만 Page table 이 매핑되지 않을 때

- Invalid page faults : 페이지가 사용되지 않을 때

 

 

2.6 Paging Pros and Cons

Pros

  • Exteranl Fragmentation이 없다. 하지만 고정된 상태에서만 
  • 고정된 사이즈로 메모리에 올리고 free가 편하다.
  • 메모리에서 디스트로 Page out 이 쉽다.
  • 보안과 page share이 쉽다.

Cons

  • Internal Fragmentation 이 발생한다.
  • 메모리를 참조하는 overhead가 발생한다.
  • Page tables을 저장하는 storage가 필요하다.

 

3. Advanced VM Functionality

  •  Shard Memory

구현 방식은 먼저 PTE가 같은 물리적 메모리의 frame을 가리킨다. 각각의 PTE는 다른 보호 value를 가진다.

 

  • Copy-on-Write

Page를 똑같이 복사를 하는 게 아닌 Page를 복사를 하고 같은 물리적 주소의 frame에 같이 매핑된다. 그리고 공유된 Page는 읽기만을 위하여 활용된다.  새로운 데이터는 이 Page에 적어지며 이전 포스팅에서 설명했던 fork()가 그 예시이다.

  • Memory-Mapped File

직접 파일을 메모리에 매핑하는 방식이다. 즉 복사를 하거나 하는 것이 아니라 프로세스를 메모리의 파일을 가지고 있는 부분에 직접 매핑하여 구현된다. 이는 일관된 접근 방식, 메모리 복사 감소, 공유 가능 등의 장점을 가지고 있다. 이는 여러 작업으로 추가적으로 하지 않고 직접 매핑하는 방식을 활용하여서 표율적으로 큰 파일을 읽을 때 메모리에 접근을 가능하게 한다. 

 

하지만 이것은 데이터가 이동하면서 세밀하게 제어하는 게 어렵고 한번 지나가는 I/O 즉 streamed I/O에 적합하지 않다.

 

728x90
반응형
Comments