10. 요구 페이징, 페이지 교체, 페이지 교체 알고리즘
발표자: 박광수
요구 페이징(Demand Paging)
요구되는(현재 필요한) 페이지만 메모리 상에 올려주는 것
Page table : 현재 읽으려는 페이지가 어디에 있는 지를 저장함
Valid bit (실제 적재 되어있는지를 체크하는 비트)
Page fault
페이지가 메모리에 올려지지 않은 상태. (페이지 부재)
page fault 발생 시 CPU에 interrupt 발생 → OS가 인터럽트 처리 루틴 실행 → 페이지 올림
→ Valid 상태로 바뀜 → 다시 페이지 읽음
유효 접근 시간
메모리의 영역이 얼마나 빠르게 읽혀 지는가 를 평균 낸 것
페이지 폴트 일어날 확률 (P : page fault rate)
페이지 폴트 없을 때 걸리는 시간 (Tm) - DRAM 200nsec
페이지 폴트 시 걸리는 시간 (p) - Seek time >> + rotational Delay + transfer time 8msec
주로 시간은 페이지 폴트 발생 시 걸림(HDD reading).
페이지 폴트 발생은 매우 오래 걸리므로 최소화 하는게 좋음 (SSD는 상대적으로 빠름)
지역성 (Locality of Reference)
메모리 접근은 시간, 공간적 지역성을 가짐
실제 cpu는 비슷한 공간, 시간에서 읽을 가능성이 높다는 뜻.
실제 페이지 부재 확률은 매우 낮음
Block 단위로 가져올 수 있기 때문 (필요한 수행에 대해)
다른방법
HHD 보다는 SSD 혹은 저가 DRAM 사용 : 발생 시 시간 최소화
페이지 교체 (Page Replacememt)
여러 프로그램 실행 시 요구 페이지가 가득 차게 됨
P1, P2, P3 동시 실행 P4가 들어갈 자리 없음
Backing store로 하나 몰아냄 (Page Out) → Victim Page
P4 적재 (Page In)
Victim Page : 어떤 페이지를 몰아낼 것인가?
ㄴ 내용을 HDD에 기록해야 하나?
ㄴ변경이 되지 않을 명령문은 Write 필요 없음
ㄴ CPU의 연산에 의해 바뀌면 Write
가능하면 Write 안된 것을 빼는 것이 좋음 (I/O 시간 절약)
1bit 추가 → modified bit ( V + M ) = dirty bit
이 중 누가 Victim 일까?
Random
First in First Out (FIFO)
→ 페이지 교체 알고리즘
Page Reference String
(page num / displacement) → main memory 주소 (page)
EX) page 100byte → 1페이지 : 100~199 가져옴
CPU 주소 100 101 102 432 612 103 104 611 612…
페이지 : 1 1 1 4 6 1 1 6 6
prs : 1 4 6 1 6
페이지 번호 중 연속되는 것을 지워 만들어진 열
페이지 교체 알고리즘
1.FIFO
메모리에 먼저 올라온 것을 Victim으로 삼음
이 알고리즘을 수행하기 위해서 각 페이지가 올라온 시간을 페이지에 기록 하거나, 페이지가 올라온 순서를 큐(Queue)에 저장 하는 방식 등을 사용
장점
가장 간편한 방법
대부분 초기화 목적인 것들 (1번 실행) 이 있음
ㄴ 이 후에 잘 쓰이지 않을 것이라 예상.
단점
페이지를 계속해서 교체한다면 페이지 부재율이 높아지고 실행속도가 떨어질 위험 있음 (Belady’s Anomoly)
2.OPT(Optimal)
앞으로 가장 오랫동안 사용되지 않을 페이지를 교체
가장 이상적인 알고리즘
프로세스가 앞으로 사용할 페이지를 미리 알아야 한다 (불가능 한 조건)
3. LRU(Least-Recentely Used)
가장 오래 사용되지 않은 페이지를 교체
장점
최적 알고리즘의 방식과 비슷한 효과를 낼 수 있는 방법
LRU 알고리즘은 많은 운영체제가 채택하는 알고리즘이며, 좋은 알고리즘이라고 평가
단점
프로세스가 주기억장치에 접근할 때마다 참조된 페이지에 대한 시간을 기록해야함. 큰 오버헤드가 발생
Replacement 방식
Global replacement
메모리 상의 모든 프로세스에서 Victim을 선택
Local replacement
페이지가 요구되는 프로세스에서 Victim을 선택
- 메모리 사용 효율측면에서는 일반적으로 Global Replacement가 효율적임
계수-기반(Counting-Based) 페이지 교체
LFU(least-frequently-used)
참조 횟수가 가장 작은 페이지를 교체하는 알고리즘이다. 만약 교체 대상인 페이지가 여러 개 일 경우, LRU 알고 리즘을 따라 가장 오래 사용되지 않은 페이지로 교체한다.
LFU 알고리즘은 초기에 한 페이지를 집중적으로 참조하다가 이후 다시 참조하지 않는 경우 문제가 될 수 있다. 앞으로 사용하지 않아도 초기에 사용된 참조횟수가 높아 메모리에 계속 남아있기 때문이다. 아래의 그림의 그 예시다.
초기에만 쓰인 7이 메모리에 잔존해 낭비가 일어난다
MFU(most-frequently-used)
LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체하는 알고리즘이다. 참조 횟수가 적은 페이지가 최 근에 사용된 것이기 때문에 앞으로 사용될 가능성이 높다는 판단이다.
LFU와 MFU는 실제 사용에 잘 쓰이지 않는다.
구현에 상당한 비용이 들고,
최적 페이지 교체 정책을 (LRU 만큼) 제대로 유사하게 구현해내지 못하기 때문이다.
프레임 할당
CPU utilization VS degree of multiprogramming
프로세스 갯수가 많아질 수록 CPU 성능이 떨어지는 이유
Demand Paging 에 따른 저하가 발생
Threshing : I/O 시간 증가 → CPU 활동 멈춤(요구페이징 기간동안)
Threshing 은 Local replacement가 좋을 수 있음
프로세스당 적절한 수의 메모리 할당 (프레임 할당)
적절한 것은??
정적인 방법 : 처음부터 프로세스 크기에 맞춰 할당
equal allocation - 동일 할당 (1 : 1: 1)
proportional allocation - 프로세스 크기에 따라 적절한 비율로 할당 (5:2:3)
정적인 방식은 잘 사용하지 않는
동적인 방법
Working set model : 시간에 따라 주로 참조하는 페이지를 계산
Page-Fault Frequency(PFF) : Page fault인 페이지 결함의 발생 비율을 측정하여 프레임을 할당
Last updated