요구 페이징 (Demand Paging)
메모리 낭비를 방지하기 위해 필요한 부분만 메모리에 적재
기존의 페이지 테이블에 추가로 valid bit가 있어 현재 메모리에 해당 페이지가 존재하는지 여부를 표시한다.
현재 메모리에 없는 페이지에 접근하면 CPU에 인터럽트 신호를 발생하여 운영체제 내부의 ISR로 점프하고 해당 페이지를 메모리에 할당한다.
페이지 부재 (Page Fault)
CPU가 접근하려는 페이지가 물리 메모리에 없는 경우
Page Fault 발생시 처리 과정
- 해당 페이지가 메모리에 있는지 valid bit를 확인한다.
- valid bit가 0이라면 CPU에 인터럽트 신호를 보내어 운영체제 내부 해당 ISR로 점프한다.
- 해당 ISR에서 backing store(디스크)를 탐색하여 해당 프로세스의 페이지를 찾는다.
- 해당 페이지를 비어있는 프레임에 할당한다.
- 페이지 테이블을 갱신한다.(프레임 번호 설정, valid bit 1로 변경)
- 다시 명령어로 돌아가서 실행한다.
Pure Demand Paging vs Prepaging
Pure Demand Paging
- 프로세스가 최초로 실행될 때에 아무 페이지도 올리지 않고 시작
- 필요한 페이지만 메모리에 적재
- 장점
- 효율적인 메모리 사용
- 단점
- page fault로 인한 속도 저하
Prepaging
- 필요할 것이라 판단되는 페이지를 미리 메모리에 적재
- 장점
- page fault가 발생할 확률이 적어 속도 빠름
- 단점
- 메모리 낭비의 가능성
Swapping vs Demand Paging
공통점
- 메모리와 Backing Store 사이를 오고 가는 기능 수행
차이점
- Swapping : 프로세스 단위
- Demand Paging : 페이지 단위
유효 접근 시간
p: 페이지 부재 확률(probability of a page fault = page fault rate)
Tm: 메모리를 읽는 시간
Tp: Page fault가 발생했을 때 소요되는 시간(대부분 backing store(하드디스크)를 읽는 시간이 차지한다.)
T = (1-p) * Tm + p * Tp
지역성의 원리 (Locality of reference)
- 시간적 지역성
- CPU는 어느 메모리 공간을 읽은 후, 시간이 지나도 그 공간을 다시 읽을 확률이 매우 높다.
- ex) 반복문
- 공간적 지역성
- CPU가 메모리 공간을 읽을 때는 인접한 범위 내에서 읽는다는 의미이다.
페이지 교체 (Page Replacement)
Demand Paging을 하는 과정이 지속되면 이미 메모리에 있는 페이지 중 하나를 다시 backing store에 보내고(page-out), 새로운 페이지를 메모리에 올려야한다.(page-in)
여기서 backing store로 page-out이 된 페이지를 victim page 라고 한다.
희생양 페이지 (Victim Page)
👉 희생양 페이지 선택 기준은?
CPU에 수정(modify)되지 않는 페이지
- (page-out될 때 backing store에 쓰기 연산을 할 필요가 없기 때문에)
- 이를 위해 Modified Bit(=Dirty Bit)를 추가하여 검사