본문 바로가기

운영체제/Demand Paging

Demand Paging - (1) Demand Paging이란?

Demand Paging - (1) Demand Paging이란?

Demand Paging
- 메모리 관리 메커니즘(Memory management, MMU 메커니즘)을 사용해서 여러 프로세스가 시스템의 메모리를 효율적으로 공유할 수 있도록 하는 기술.

Q. 프로그램이 필요로 하는 모든 메모리(Code segment, Data segment, Stack segment)가 physical memory에 있어야 하는가?
- 그렇지 않다. 왜냐하면 프로그램은 Locality를 가지고 있기 떄문이다.
- Locality 특성을 이용해서 프로세스가 그 때 필요로 하는 Page를 physical memory에 로드하고 사용하지 않는 Page는 디스크에 적재함으로써 적은 량의 메모리로 큰 효율을 나타낼 수 있었다
- 이를 위해 나타난 것이 virtual address(= virtual address space)이다.

<그림 1:virtual address>

Principle of Locality(Locality of Reference)란?
- 프로그램이 가장 최근에 접근했던 데이터를 다시 접근(Temporal Locality)하거나 최근에 참조했던 데이터 근처의 주소를 참조(Spatial Locality)하는 경우가 있음.

* 90/10 Rule
- 불과 10%이 코드가 프로그램 총 수행시간의 90%를 차지함.

<그림 2: Disk swapping>

Swap Area(=Swap device)란?
- physical memory에 저장되지 못한 page들을 저장하는 디스크 공간으로 File에 비해 운영체제가 직접 빠르게 전달할 수 있음. 예외적으로, swap device가 가득 차는 경우엔 file을 만들어서 page들을 저장할 수 있다.

Q. physical memory에서 swap device로 write-back하는 일은 언제 발생하는가?
- 새로운 page를 physical memory에 저장해야 하는데 빈 공간이 없고, physical memory에서 쫓아내려는 page가 Dirty page인 경우.

이러한 swap-in, swap-out의 disk를 access하는 연산은 시간 비용이 매우 크게 발생한다.
따라서, Demand paging은 physical memory와 swap device 사이의 데이터 전송을 최소화하는 것을 목적으로 만들어졌다.

어쩔 수 없이 disk access operation이 빈번하게 발생한다면 어떤 문제가 생길까?
-> Thrashing이 발생한다.

Thrashing이란?
- 프로세스들이 사용하는 Page들의 크기보다 사용가능한 physical memory의 크기가 작을 때, 사용하려고 swap-in하는 page에 의해 앞으로 사용할 page가 swap-out되면서 반복적으로 page fault가 일어나는 현상.

Demand paging은 page fault 발생빈도를 줄여 disk access operation을 감소시켜 성능을 향상시키고, thrashing을 방지하는 기법이다.
- 어떻게 프로세스가 향후 사용할 page만 main memory로 로드시킬 수 있을까?
- optimal한 방법은 미래를 예측하여 필요한 page만 로드하는 것. 불가능 하므로 다양한 policy가 등장함

이상적인 Demand Paging의 동작
- 앞으로 사용될 페이지와 사용되지 않을 페이지를 미리 알아서 physical memory로 불러들이거나 swap device로 내보내는 것 < 불가능 >

Page Table의 Residence bit
- Page table entry에는 Frame# + page property가 저장되어 있다.
- page property은 ( dirty bit, residence bit ...)을 포함

Residence bit
- 접근하고자 하는 페이지가 physical memory에 있는 지 혹은 swap device에 있는 지를 표시하는 page table의 플래그

접근하고자 하는 페이지가 swap-devce에 존재하면 "Page fault"가 발생한다.


Page fault란?
- virtual address가 가르키는 page가 physical memory에 없어서 프로세스가 더 이상 진행할 수 없는 상태를 운영체제에게 알려주는 s/w interrupt(=trap, fault)이다.

Page fault handler의 동작
0. page fault가 발생한 프로세스는 wating state로 state transition이 일어남.
1. DMA Controller에게 해당 Page의 주소를 전달
2. DMA Controller는 해당 Page를 physical memory로 로드
3. DMA Controller의 작업이 끝나면 인터럽트 발생
4. 운영체제는 Page fault를 일으킨 프로세스의 수행을 재개

Q. Page fault의 처리가 다른 인터럽트에 비해 어려운 이유는 무엇일까?
- 수행 중인 instruction에 의해 변화된 상태를 되돌렸다가 page fault 처리가 끝난 후 해당 instruction을 재개해야 하기 때문 ( 일반적으로 interrupt가 발생하더라도 진행중인 instruction은 모두 수행을 끝마치고 interrupt를 처리한다. 그런데, page fault는 instruction수행 중 접근하고자 하는 address가 main memory에 존재하지 않는다는것을 깨달으므로 이에 따른 상태저장에 대한 처리가 복잡해 지는 것임)
- ex. MOVE (SP)+, -(R2)

Q. 어떻게 하면 Page fault를 최소화 할 수 있을까?
- Demand paging의 다양한 policy 등장.

그러나, hard disk가 아닌 SSD(solid state drive)에서는 swapping기능을 사용하지 않음. 왜냐하면, SSD는 Erase count가 존재하는데 swapping과 같은 매우 빈번한 쓰기/읽기 작업이 읽어나면 SSD가 정상수명을 갖기 힘드므로.