OS - Virtual memory

Bomin Seo·2022년 8월 8일
0
post-custom-banner

Demand paging

  • Page-level swapping을 하는 paging system
    • 할당한 page(frame)을 secondary storage로 보내고 page(frame)이 필요할 때 physical memory로 page를 보내는 방식
  • Cf) swapping : 프로세스 단위로 바꾸는 방식
  • 운영체제는 메인 메모리를 프로세스에 의해 할당된 데이터의 cache처럼 사용한다
    • 초기에 physical memory frames로부터 pages가 할당된다.
    • Physical memory가 가득 차면, 새로운 page를 할당하기 위해 다른 page를 제거해야 한다.
    • 제거 대상의 page는 memory에서 disk로 이동한다.

동작 방식

  • 모든 entries를 invalid로 두고 메모리에 올리지 않은 상태에서 시작한다
  • 페이지가 참조되는 시점에 메인 메모리로 page를 올려 사용한다.

Demand paging이 효율적인 이유 : locality

  • Temporal locality : 최근에 참조된 영역은 곧 다시 참조되는 경향이 있다
  • Spatial locality : 최근 참조된 영역의 주변 영역은 참조될 가능성이 높다.
  • 오래 실행된 physical memory에 남아있는 page : 자주 참조되는, locality가 높은 page

Valid-invalid bit in demand paging

  • If valid-invalid bit == v
    • 참조할 수 있는 영역이면서 page가 memory에 있는 경우
  • If valid-invalid bit == i
    • 참조할 수 없는 영역(protection fault)이거나
    • 참조할 수 있는 영역이지만 메모리에 없고 secondary storage에 있는 경우 (page fault)

다음과 같은 상황이 발생하는 경우

  • 초기에 0, 2, 5번 page가 참조되는 경우
  • 프로세스가 오래 실행된 경우 0, 2, 5번 page가 locality가 높은 경우

Page fault

  • CPU가 Store, load등의 메모리 명령어를 실행할 때 메모리를 참조한다.

  • 메모리를 참조할 때 TLB에 없는 경우 Page table을 참조하며 page table에서 해당 영역이 invalid상태라면 OS를 호출하기 위하여 Page fault를 발생시킨다.

  • Protection fault 혹은 page fault인지의 여부는 OS가 호출된 후 판단되므로 두 가지를 합쳐서 Page fault라고 지칭한다.

  • OS가 호출된 후 참조할 수 있는 영역이라면 Secondary storage의 page를 free frame으로 보내고 Page table을 reset한 후 명령어를 재실행한다.

Copy-on-write

  • UNIX/LINUX의 Demand-paging 구현 방식

  • Fork()로 같은 프로세스를 복제하여 같은 physical memory를 가리킨다.

  • Page에 write하는 시점에 page를 복제하여 수정내용을 기재한다.

    • Resource를 공유하다 수정 상황이 생기면 복제본을 만들어 수정사항을 기재하고 포인터만을 바꾸어 사용함으로써 메모리 효율을 높였다.

Page Replacement

  • Page fault가 발생한 경우 secondary memory로부터 메모리로 올려야 하는데 free frame이 없는 경우
  • Locality를 고려하면 오래 사용되지 않은 page를 secondary memory를 내린다.

Page Replacement Algorithms

  • Goal: lowest page-fault rate
  • 메모리를 참조하는 특정한 string에 알고리즘을 적용하여 낮은 page-fault rate를 찾는다.

FIFO

  • 가장 오래전에 메모리에 올라온 Page를 victim으로 선정한다.
  • Belady’s Anomaly : locality를 고려하지 않고, 메모리가 커질수록 낮은 성능을 나타낸다.
  • 초기 상태에서는 page fault가 발생한다.

Optimal Algorithm

  • 참조될 메모리를 미리 알 수 없기 때문에 이전의 참조 기록을 보고 locality를 고려하여 가장 오래 사용되지 않은 것을 내린다. >> LRU

LRU (Least Recently Used) Algorithm Implementation

Timestamp implementation
  • page별로 counter를 가진다.
  • Page가 참조될 때마다 clock이 counter에 복사된다.
Stack implementation
  • Page number의 stack을 관리한다.
  • 참조된 메모리를 stack의 가장 위로 올리며 포인터를 변경한다
    - 오버헤드가 너무 크다
Approximation
  • Timestamp를 정확하게 기재하는 것은 비싼 작업
  • Reference bit를 두어 참조되었으면 1, 참조되지 않았으면 0을 사용하여 효율을 높인다. (1bit)
  • 순서에 상관하지 않고 랜덤하게 0의 값을 가지는 비트를 내린다.

Second chance (LRU Clock)

  • Reference bit가 1인 bit를 만나면 0으로 setting 후 다음 bit를 검사하면 0인 bit를 만나면 victim으로 선정한다.

Not Recently Used (NRU) : 현재 사용하는 방법

  • R : reference READ
  • M : modify / WRITE
  • Modify bit는 NRU 알고리즘에 적용하는 것 외에도 Cache memory관리를 위해 유지하여야 한다.
  • Victim 선정 순서 : class 0 → class 1 → class 2 → class 3

Least Frequently Used (LFU)

  • Counting-based page replacement
    • 가장 적제 참조된 것을 counter로 관리하여 victim으로 선정한다.
    • Cf ) MFU : 가장 많이 참조된 것을 내린다. Count가 적은 메모리는 최근에 올라온 메모리일 수 있기에

Allocation of frames (free frame을 어떤 process에 할당할지)

Allocation algorithm

  • Equal allocation
  • Proportional allocation
  • Priority-based allocation

Page replacement

  • global replacement
  • Local replacement
  • Page-fault rate를 관찰 후 upper, lower bound 내에서 발생하도록 frame 수를 조정한다.

Thrashing ~= a process is busy swapping pages in and out

  • 프로세스가 많아지면 locality가 높은 page들이 많아져 swapping / Disk I/O만 수행함으로써 CPU utilization이 떨어지는 현상
  • 메모리에 비해서 프로세스의 수가 많다는 의미

해결법

  • 메모리 추가
  • 프로세스의 수를 줄인다

Working-Set Model

  • Working set : 자주 사용되는 page/ locality의 크기, 델타 시간안에 사용된 페이지의 크기

Prepaging

  • Fault가 발생한 page의 인근에 위치한 page도 미리 fault처리하여 디스크에서 미리 읽어온다.

Page size selection

  • Internal fragmentation을 고려하여 page size를 작게 한다.
  • Page table size를 고려하면 page size를 크게 한다.
  • I/O Overhead의 seek time을 고려하여 page size를 크게 한다.
  • Locality를 고려하여 page size를 크게 한다.

TLB Reach

  • TLB가 커버하는 영역의 크기
  • TLB Reach = TLB size * Page size : page size가 크면 클수록 좋다.

Program structure

program 구조에 따라 page fault의 수가 차이 난다.

I/O Interlock

  • DMA와 같이 하드웨어가 직접 메모리를 사용할 수 있다.
    • LOCK을 걸고 하드웨어가 독점적으로 사용한다.
    • 연속적인 Physical memory를 할당 받아서 쓰면 free frame으로 사용하면 안된다.
profile
KHU, SWCON
post-custom-banner

0개의 댓글