kocw 반효경 교수님의 운영체제 강의를 수강 후 작성한 글입니다.
1. Demand Paging
Demand Paging: 실제로 필요할 때 page를 메모리에 올리는 것
- I/O 양의 감소
- Memory 사용량 감소
- 빠른 응답 시간 (메모리에서 직접 서비스하는 비율이 높아지므로)
- 더 많은 사용자 수용
Valid/Invalid bit의 사용
- Invalid의 의미
- 사용되지 않는 주소 영역인 경우
- 페이지가 물리적 메모리에 없는 경우
- 처음에는 모든 page entry가 invalid로 초기화
- address translation 시에 invalid bit이 set되어 있으면 page fault 발생
Page Fault
- Invalid page를 접근하면 MMU가 trap(sw interrupt)을 발생시킴 (page fault trap) -> CPU가 OS로 넘어감
- Kernel mode로 들어가서 page fault handler가 invoke 됨
- 다음과 같은 순서로 page fault를 처리한다.
- Invalid reference인지 확인 (eg. bad address, protection violation) -> abort process
- Get an empty page frame. (없으면 뺏어온다. replace)
- 해당 페이지를 disk에서 memory로 읽어온다.
- disk I/O가 끝나기까지 이 프로세스는 CPU를 preempt 당함 (block 상태)
- Disk read가 끝나면 page tables entry 기록, valid/invalid bit = "valid"
- 이 프로세스가 CPU를 잡고 다시 running
- 중단되었던 instruction 재개
Performance of Demand Paging
- Page fault rate 0<=p<=1.0
- if p=0, no page faults -> 메모리가 엄청 큰 경우
- if p=1, every reference is a fault -> 처음 시작할 때
- p는 일반적으로 대략 0.02
- Effective Access Time
- (1-p)*memory access + p(OS&HW page fault overhead + swap page out if needed + swap page in + OS&HW restart overhead)
Free frame이 없는 경우
- Page replacement (swapping, OS의 역할)
- 어떤 frame을 빼앗아올지 결정해야 함
- 곧바로 사용되지 않을 page를 쫓아내는 것이 좋음
- 동일한 페이지가 여러 번 메모리에서 쫓겨났다가 다시 들어올 수 있음 -> 매우 비효율적
- Replacement Algorithm
- page-fault rate을 최소화하는 것이 목표
- 알고리즘의 평가
- 주어진 page replacement string에 대해 page fault를 얼마나 내는지 조사
2. Page Replacement Algorithms
Optimal Algorithm (Belady's optimal algorithm, MIN, OPT)
MIN(OPT): 가장 먼 미래에 참조되는 page를 replacement
미래에 참조를 어떻게 아는가?
실제 s/w 작동이 불가능하고, 알고 있다는 가정 하에 paper 상에서만 가능한 알고리즘.
Offline Algorithm -> 다른 알고리즘의 성능에 대한 upper bound 제공
FIFO (First In First Out) Algorithm
FIFO: 먼저 들어온 것을 먼저 내쫓음
FIFO Anomaly (Belady's Anomaly): more frames ≠ less page faults. 원래는 frame 수가 늘어나면 메모리에 더 많이 올릴 수 있기 때문에 page fault가 줄어야 하지만, FIFO를 사용하면 page faults도 증가하는 경우가 발생함.
LRU (Least Recently Used) Algorithm
LRU: 가장 오래 전에 참조된 것을 지움
LFU (Least Frequently Used) Algorithm
LFU: 참조 횟수(reference count)가 가장 적은 객체를 지움
- 최저 참조 횟수인 page가 여럿 있는 경우
- LFU 알고리즘 자체에서는 여러 page 중 임의로 선정한다
- 성능 향상을 위해 가장 오래 전에 참조된 page를 지우게 구현할 수도 있다
- 장점
- LRU처럼 직전 참조 시점만 보는 것이 아니라 장기적인 시간 규모를 보기 때문에 page의 인기도를 좀 더 정확히 반영할 수 있음
- 단점
- 참조 시점의 최근성을 반영하지 못함
- LRU보다 구현이 복잡함
LRU와 LFU 알고리즘의 구현
LRU의 경우 swap out 시 가장 위에 있는 LRU Page를 선택하면 된다. search가 필요 없으므로 O(1) complexity를 가진다.
LFU의 경우 count 값을 증가시킨 후 연결되어 있는 노드를 이동해가며 count 값을 계속 비교하여 정렬하는 과정이 필요하므로 O(n)의 complexity를 가진다. Heap으로 구현하면 이진트리의 높이만큼만 비교하면 되므로 O(log n)이 된다.
그러나 Paging System에서 운영체제가 LRU, LFU 페이지를 알 수 있는가?
No. 프로세스가 요청한 페이지가 이미 메모리에 있는 경우, CPU가 운영체제로 넘어가지 않고 하드웨어적으로 주소변환한 후 해당 정보만 CPU가 읽어들인다. Page fault가 발생해야만 CPU가 운영체제로 넘어가고, 디스크에 있던 페이지가 메모리에 올라오는 시간 정보를 알 수 있게 된다. 즉 LRU, LFU 페이지를 카운팅하는 일은 운영체제가 해야하는 일이지만 운영체제는 그 정보를 모른다!
다양한 캐슁 환경
- 캐슁 기법
- Paging system처럼 한정된 빠른 저장 공간을 가지고 계속적으로 요청되는 새로운 객체를 저장 공간에 읽어들였다가 후속 요청 시 직접 서비스하는 방식을 캐슁(caching) 기법이라고 하고 저장 공간을 캐쉬라고 부름
- 캐슁 기법은 paging system 외에도 cache memory, buffer caching, web caching 등 다양한 분야에서 사용됨
- 캐쉬 운영의 시간 제약
- 교체 알고리즘에서 삭제할 객체를 결정하는 일에 지나치게 많은 시간이 걸리는 경우 실제 시스템에서 사용할 수 없음
- Buffer caching이나 Web caching의 경우 O(1)에서 O(log n) 정도까지 허용함
- Paging system인 경우
- page fault인 경우에만 OS가 관여함
- 페이지가 이미 메모리에 존재하는 경우 참조시각 등의 정보를 OS가 알 수 없음
- 페이지 요청이 너무 빈번하여 O(1)인 LRU 알고리즘의 list 조작도 부담
Clock Algorithm
- Clock algorithm (=Second chance algorithm, Not Used Recently 또는 Not Recently Used)
- LRU의 근사(approximation) 알고리즘
- Reference bit을 사용해서 교체 대상 페이지 선정(circular list)
- Reference bit가 0인 것을 찾을 때까지 포인터를 하나씩 앞으로 이동
- 포인터 이동하는 중에 reference bit 1은 모두 0으로 바꿈 (First chance)
- Reference bit이 0인 것을 찾으면 그 페이지를 교체(한 cycle을 돌 동안 사용되지 않는 페이지로 간주)
- 한 바퀴 되돌아와서도(=Second chance) 0이면 그때에는 replace 당함
- 자주 사용되는 페이지라면 second chance가 올 때 1로 바뀌어있음
- Clock algorithm의 개선
- Reference bit과 modified bit(dirty bit)을 함께 사용
- Reference bit = 1 -> 최근에 참조된 페이지
- Modified bit = 1 -> 최근에 변경된 페이지 (I/O를 동반하는 페이지)
- Modified bit = 0 -> 최근에 수정되지 않은 페이지. invalid로 처리 후 변경되지 않았으므로 backing store에 수정된 내용을 반영해주는 과정이 필요 없음. (백업 시간 절약)
Reference bit은 HW(MMU)가 관리해줌
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 10. File Systems (0) | 2023.01.21 |
---|---|
[운영체제] 9. Virtual Memory (2) (0) | 2023.01.13 |
[운영체제] 8. Memory Management (2) (1) | 2023.01.08 |
[운영체제] 8. Memory Management (1) (0) | 2023.01.06 |
[운영체제] 7. Deadlocks (0) | 2022.12.30 |