1. 고정 할당 방식(Fixed Allocation)
- 각 프로세스에게 고정된 갯수의 페이지 프레임을 할당하는 방식
- OPT(Optimal) 알고리즘
- 앞으로 가장 오랫동안 교체되지 않을 page를 교체하는 최적의 기법
- page reference string을 미리 알고있지 않으면 불가능한 방법
- 현실적으로 사용 불가능한 기법이지만 교체 알고리즘의 성능 평가를 위해 사용됨
- Random 알고리즘
- 무작위로 교체할 page를 선택
- 오버헤드가 없으며 정책도 없음
- Random 알고리즘보다 성능이 나쁜 알고리즘이라면 고려할 가치가 없음(성능평가의 기준)
- FIFO(First In First Out) 알고리즘
- 가장 오래된 page를 교체
- page가 적재된 시간을 알아야함
- Locality를 고려하지 않은 알고리즘이기에 좋은 성능을 보이긴 어려움
- 메모리를 더 많이 할당했는데도 page fault 발생률이 증가할 수도 있음
- LRU(Least Recently Used) 알고리즘
- 가장 오래동안 참조되지 않은 page를 교체
- 각 페이지를 마지막으로 참조한 시간을 기록해야함(오버헤드 있음)
- Locality를 고려한 알고리즘이기에 OPT 알고리즘에 근접하는 성능을 보임
- 실제로 가장 많이 사용되는 기법
- 문제점
- 반복적으로 참조되는 page 갯수보다 할당받은 page frame 수가 적을 경우
사실상 FIFO와 같아져 성능이 급격히 하락 - 할당 전략에서 충분한 메모리를 할당하는 것으로 해결 가능
- 반복적으로 참조되는 page 갯수보다 할당받은 page frame 수가 적을 경우
- LFU(Least Frequently Used) 알고리즘
- 참조된 횟수가 가장 적은 page를 교체
- 각 페이지를 참조할 때 마다 참조횟수를 증가시켜야함(오버헤드 있음)
- 최근에 적재된 page의 경우 참조횟수가 적어 이후에 참조될 가능성이 높음에도 교체될 수 있음
- NUR(Not Used Recently) 알고리즘
- 유사 LRU 알고리즘
- Bit Vector를 사용하는 방식
- 참조 비트(Reference Bit)와 갱신 비트(Update Bit)를 참조하여 최근에 참조되지 않은 비트일수록,
참조 여부가 같다면 최근에 수정되지 않은 비트일수록 교체 우선도를 높게 본다. - Bit Vector의 주기적인 초기화가 필요
- 참조 비트(Reference Bit)와 갱신 비트(Update Bit)를 참조하여 최근에 참조되지 않은 비트일수록,
- 유사 LRU 알고리즘
- Clock 알고리즘
- NUR을 현실적으로 구현한 예시
- Reference Bit를 사용하지만 주기적인 초기화는 필요하지 않음
- page frame을 순차적으로 가리키는 pointer(시계바늘)를 사용하여 교체될 페이지를 결정
- 동작 방식
- 시계바늘이 특정 page의 reference bit를 체크했을 때 1이라면 0으로 초기화
- 0이라면 그 페이지를 교체
- Second Chance 알고리즘
- Clock 알고리즘과 유사
- Clock 알고리즘에서 Update Bit을 추가적으로 고려하는 방식
- 참조나 수정 전적이 둘 중 하나라도 있다면 한번의 기회를 더 주는 알고리즘
- 동작 방식
- 시계바늘이 특정 page의 reference bit, update bit 쌍을 확인하여 (0, 0)이라면 교체
- (0, 1)이라면 write back 하여 변경사항을 반영한 뒤 (0, 0)으로 초기화
- (1, 0)이라면 (0, 0)으로 초기화
- (1, 1)이라면 (0, 1)로 초기화
2. 가변 할당 방식(Variable Allocation)
- 프로세스에게 할당하는 메모리 크기가 변할 수 있는 경우
- WS(Working Set) 알고리즘
- 현재 작업에 필요한 페이지의 집합 => 프로세스가 특정 시점에 자주 참조하는 page의 집합
- working set의 페이지들을 메모리에 적재된 상태로 유지하는 방식
- 시간적 지역성(locality)에 기반한 방식이기에 page fault 발생률이 감소하며 시스템 성능 향상을 기대할 수 있음
- working set의 크기는 시간에 따라 변하지만 window_size 는 고정된 값을 가짐
- window_size가 커질수록 working set의 크기도 커진다.(프로그램이 참조하는 페이지의 갯수 이하)
- window_size를 적절한 크기로 설정하는 것이 working set 알고리즘의 성능에 큰 영향을 미침
- 메모리의 반납이 새로운 page의 적재와는 관계없이 이루어짐(window의 상태에 따라 이루어짐)
- page fault가 없더라도 working set을 지속적으로 관리해야한다는 오버헤드가 존재함
- W(current_time, window_size)
- current_time - window_size 부터 current_time 까지 참조된 페이지의 집합
- current_time - window_size 부터 current_time 까지 참조된 페이지의 집합
- Working Set Transition
- loop중에는 working set이 loop에 필요한 만큼으로 유지
- loop를 빠져나오는 순간에는 working set이 일시적으로 증가하는 경향을 보임(새로운 페이지를 참조하기 때문)
- 성능평가
- 단순히 page fault만 보기엔 할당한 페이지 프레임의 수가 다름
- page fault의 처리비용과 page frame 할당 및 관리 비용을 복합적으로 고려하여 평가해야함
- PFF(Page Fault Frequency) 알고리즘
- Working Set 알고리즘의 단점인 page fault가 발생하지 않아도 지속적으로 working set을 관리해야하는
오버헤드를 해결하기 위한 알고리즘 - working set의 크기를 page fault 발생률에 따라 조정
- page fault 발생률이 높다면 working set의 크기를 증가, 낮다면 working set의 크기를 감소
- page fault 발생률이 높다면 working set의 크기를 증가, 낮다면 working set의 크기를 감소
- page fault가 발생할 때만 working set을 갱신하고 메모리를 할당하기 때문에 오버헤드가 적음
- page fault 간의 발생시간이 일정 수치를 넘어서면 page fault 발생률이 적다고 판단하고
반대로 일정 수치보다 낮다면 page fault 발생률이 높다고 판단한다.
- Working Set 알고리즘의 단점인 page fault가 발생하지 않아도 지속적으로 working set을 관리해야하는
- Variable OPT 알고리즘
- 가변 할당 방식에서의 최적 알고리즘
- 평균 메모리 할당량과 page fault 발생 횟수를 모두 고려한 최적
- 고정 할당방식의 OPT 알고리즘과 마찬가지로 page reference string을 미리 알고있어야 사용 가능하기에
현실적으로 구현 불가능한 방식 - current_time 부터 current_time + window_size 까지의 page reference string에서 참조되지 않는 page를
메모리에서 해제하고 참조되는 page만을 유지하는 방식 - window_size의 최적값?
- window_size가 커지면 page fault 발생률은 줄어들지만 메모리 유지비용이 증가한다.
- window_size가 작아지면 page fault 발생률은 늘어나지만 메모리 유지비용은 감소한다.
- (page fault 처리비용 / 단위 시간당 메모리 관리비용) 으로 정하는 것이 효율적
- 실현 불가능한 알고리즘이지만 페이지 교체 알고리즘의 성능 평가를 위해 사용할 수 있음
- 가변 할당 방식에서의 최적 알고리즘
'CS > 운영체제' 카테고리의 다른 글
#19 파일 시스템(File System) (0) | 2022.01.28 |
---|---|
#18 디스크 시스템(Disk System) (0) | 2022.01.27 |
#16 가상 메모리 관리(Virtual Memory Management) (0) | 2022.01.19 |
#15 가상 메모리(Virtual Memory) - 하이브리드(Hybrid) (0) | 2022.01.18 |
#14 가상 메모리(Virtual Memory) - 세그멘테이션(Segmentation) (0) | 2022.01.17 |