1. [OS] Chapter 09. 가상 메모리의 관리
누워서보는 운영체제 이야기 - 김주균 교수님
1.1. # 9.1 하드웨어의 사용
▶ 가상 메모리를 효율적으로 운영하기 위해서는 먼저 사상에 걸리는 시간을 최소화해야 함
- TLB라는 추가의 하드웨어를 사용하는 방법
- 페이지 테이블을 캐시와 같은 좀 더 빠른 기억 장치에 저장하는 방법
- 페이지 테이블의 일부분을 저장할 수 있는 다수의 레지스터를 사용하는 방법
▶ 페이지를 효율적으로 관리하기 위해 참조비트(Reference Bit)와 갱신 비트(Modified Bit)등을 두기도 함
- 참조 비트: 해당 페이지가 참조되었는가를 나타내는 비트
- 갱신 비트: 페이지의 변경 여부를 나타내는 비트
1.2. # 9.2 관리를 위한 다양한 기법들
* 메모리 관리
- Fetch
- Placement
- Replacement
- Allocation
* 특별한 언급이 없으면 페이징 시스템
1.2.1. 1) 적재 정책(Fetch Strategy)
▶ 실행에 필요한 페이지를 언제 메모리에 적재할 것인가를 결정하는 정책
▶ 요구 적재와 예측 적재가 있음
▶ 요구 적재(Demand Paging)
- 요구페이징(Demand Paging)이라고도 함
- 페이지가 참조될 때 적재하는 기법
- 적재해야 할 요구가 있을 때 하겠다는 기법
- 참조하는 페이지들만으로 메모리를 사용하게 되므로 메모리에 관한 한 오버헤드가 없음
- 참조 시 페이지 부재일 경우, 페이지가 적재될 때까지 해당 프로세스를 대기 상태로 만드는 문맥교환과 디스크와의 입출력 부담 존재
▶ 예측 적재(Anticipatory Fetch)
- 선페이징(Prepaging)이라고도 함
- 예측을 통해 확률적으로 참조될 가능성이 높다고 판단되는 페이지를 미리 적재시키는 기법
- 예측이 잘 될 경우 페이지 부재 빈도를 낮출 수 있으나, 반대의 경우에는 예측을 위한 오버헤드와 참조되지 않을 페이지를 적재해야 하는 메모리 낭비 발생
▶ 주로 요구 적재를 사용
1.2.2. 2) 배치 정책(Placement Strategy)
▶ 디스크로부터 가져온 페이지를 메모리의 어디에 적재할 것인가를 결정하는 정책
▶ 페이징을 사용하는 시스템에서는 빈 프레임만 발견되면 어떤 프레임에 적재하든 문제가 없음
▶ 세그먼테이션을 사용할 경우에는 세그먼트의 크기가 얼마든지 다를 수 있으므로, 다양한 크기의 세그먼트를 수용할 수 있는 배치 정책(최초, 최적, 최악, next fit 등)이 요구됨
1.2.3. 3) 할당 정책(Allocation Strategy)
▶ 프로세스들에게 메모리를 얼마만큼씩 줄 것인지 결정하는 정책
- 개수의 변동이 없도록 운영한다면 고정 할당(Fixed Allocation)이라 부름
- 실행 도중에 프로세스에 부여된 프레임의 수에 변동이 있도록 한다면 가변 할당(Variable Allocation)이라함
▶ 페이징의 경우 각 프로세스에게 메모리 프레임을 몇 개 사용할 수 있도록 해 줄 것인가를 결정하는 정책
▶ 해당 프로세스에게 할당된 프레임들 중에서 교체될 페이지를 선택하게 하면 지역 교체(Local Replacement)라 하고, 메모리의 모든 프레임이 대상이 되면 전역 교체(Global Replacement)라 함
- 고정 할당을 한다는 것은 전역 교체를 하지 않는다는 의미
- 전역 교체는 가변 할당을 사용함을 의미
- 할당된 프레임의 수를 변경이 가능하도록 하되, 교체의 대상은 자신의 프레임 내에서 선택하도록 하는 가변할당/지역교체는 가능함

1.2.4. 4) 교체 정책(Replacement Strategy)
▶ 메모리에 빈 프레임이 없을 때 적재될 페이지를 위해 적재된 페이지 중 하나는 자신이 차지한 프레임을 비워주어야 하는 교체 대상이 되어야 할 텐데, 이때 어떤 페이지를 선택할 것인가를 결정하는 정책
▶ 이 절에서는 고정 할당 기법
▶ 최적 기법, FIFO(First In First Out) 기법, LRU(Least Recently Used) 기법, Second-chance(Clock) 기법, 개선된 Second-chance(NUR) 기법, LFU(Least Frequently Used)와 MFU(Most Frequently Used) 기법, 페이지 버퍼링(Page Buffering) 기법 등
■ 최적(Optimal 또는 MIN) 기법
- 현 시점에서 앞으로 가장 오랫동안 참조되지 않을 페이지 즉, 미래에 참조될 때까지의 시간이 가장 긴 페이지를 선택하여 교체하는 기법
- 페이지 부재를 최소로 해주지만, 프로세스들이 앞으로 어떤 페이지들을 참조할지 미리 알 수는 없으므로 현실적으로 구현 불가능
- 다른 기법들과의 성능 평가를 위해 사용

참조 열: 프로그램의 실행 과정에서 참조될 페이지들의 순서
■ FIFO(First In First Out) 기법
- 적재된 지 가장 오래된 페이지를 교체하는 기법
- 적재된 시간이나 순서를 알아야 하므로 두 가지의 구현 방법 존재
- 시간 기록 기법(Time Stamping): 각 페이지가 적재될 때의 시간을 기록한 후, 교체 시 이 시간이 가장 오래된 페이지를 선택하는 방식
- 큐를 사용하여 큐에서 상대적인 위치가 적재된 순서를 나타내는 것으로 교체의 대상은 항상 큐의 맨 앞이 되도록 유지, 관리하는 기법 → 큐 내에서 페이지들이 적정 위치에 있도록 자리를 잡아주는데 걸리는 오버헤드가 발생

연결리스트처럼 헤더 포인터를 이동시키는 것이 아닌,
실제 요소의 자리를 모두 변경해주는 과정이 필요하기 때문에 오버헤드 발생
'→' 문자는 헤드 포인터의 위치를 나타냄
- FIFO 모순(Belady's Anomaly)
- FIFO에서 부재율을 낮추기 위해 프레임을 더 주었을 경우, 오히려 부재율이 올라가는 현상이 발생할 수 있음
- ex) 참조 열이 1,2,3,4,1,2,5,1,2,3,4,5일 경우 프레임 3개가 주어졌을 때 9번의 부재가 발생하는데 반해, 4개의 프레임을 할당했을 경우에는 오히려 10번의 부재 즉, 부재가 한 번 더 발생하는 것을 알 수 있음

■ LRU(Least Recently Used) 기법
- 참조된 시간이 가장 오래된 페이지를 교체 대상으로 하는 기법
- 적재된 페이지들의 참조된 시간 또는 순서를 알아야 하므로 두 가지의 구현 방법이 존재
- 시간 기록 기법을 사용하여 페이지들이 적재될 때의 시간을 기록한 후, 이 페이지가 메모리에 있는 동안 참조될 때마다 가장 최근의 참조 시간으로 갱신해 놓으면, 가장 오래된 시간이 기록되어 있는 페이지가 교체 대상
- 스택(Stack)을 사용하는 방법으로, 스택의 가장 밑(Bottom)에 있는 페이지가 교체 대상이 되도록 스택에서의 위치가 상대적인 참조 순서를 나타내도록 관리하는 방법

'→' 표시: 스택의 가장 밑 즉, 교체될 페이지를 나타냄
- LRU는 최근데 자주 참조된 페이지가 앞으로도 당분간 자주 참조될 것이라는 판단에 근거한 기법
- 대부분의 시스템에서는 LRU 또는 LRU의 변형을 사용
■ Second-chance(clock) 기법
- 이 기법은 FIFO의 변형 또는 LRU에 근접하는 기법
- FIFO는 참조 패턴과 상관없이 단순히 적재된 지 가장 오래된 페이지를 교체함으로써, 계속해서 참조될 페이지를 교체시켜 버릴 수 있는 약점을 가진다는점
- 적재된 후, 한번이라도 더 참조된 페이지를 바로 교체시키지 않고 한번 더(Second) 메모리에 머무를 수 있는 기회(Chance)를 주는 기법
- 적재된 페이지에 참조 비트를 두어 교체 대상인 페이지의 참조 비트가 0이면 바로 교체되고, 1로 되어 있을 경우 즉, 적재 후에 한번 이상 참조된 경우 이 비트를 0으로 만들면서 큐의 맨 뒤로 보냄으로써 메모리에 머무를 기회를 한 번 더 주는 것

그림 9.4는 FIFO와 동일한 환경을 Second-chance 기법으로 운영한 것이며,
적재된 페이지에서 '/' 다음의 1은 적재 후 한 번 이상 참조된 페이지임을 나타냄

그림 9.5는 네 번째부터 여섯 번째 참조까지를 순환 큐로 구현 → clock 기법
즉, 큐를 사용하여 페이지들의 위치는 그대로 둔 채 포인터를 변경하면서 교체 대상을 지정함
■ 개선된 Second-chance (또는 NUR, Not Used Recently) 기법
- Clock 기법에 갱신 비트를 추가하면 보다 나은 교체 정책을 만들 수 있다는 생각으로 출발한 기법
- 갱신 비트가 1이란 말은 이 페이지가 적재 중 변경되었다는 것을 의미
- 교체가 될 경우 변경된 내용을 디스크에 기록을 해주어야 하는 부담이 있으므로 가급적 교체를 미루어 디스크에 대한 쓰기 작업을 줄이고자 하는 의도
- 참조 비트와 갱신 비트 값의 조합은 네 종류로서 참조도 변경도 되지 않은 경우부터 참조되고 변경까지 된 경우
참조 비트(R) | 갱신 비트(M) | 운영 방식 |
0 | 0 | 1단계. 현재 포인터 위치에서 포인터를 이동하여 (0, 0)인 페이지를 찾아 교체 |
0 | 1 | 2단계. 1단계에서 찾지 못하면 (0, 1)인 페이지를 찾아 교체. 이때, 포인터를 이동하면서 모든 프레임의 참조 비트를 0으로 변경 |
1 | 0 | 2단계에서 교체 대상을 찾지 못한다면, 모든 프레임의 참조 비트는 0으로 변경되며 (1, 0), (1, 1)은 각각 (0, 0), (0, 1)로 바뀌어지며 다음 순회에서 교체 대상이 될 수 있음 |
1 | 1 |
- NUR에서 참조 비트를 주기적으로 0으로 만들어주는 과정은 2단계임
- 참조하지 않고 갱신하는 것은 불가능. BUT, 2단계 과정에서 참조 비트를 0으로 만들면서 (0, 1)의 경우가 생기는 것
- 1단계, 2단계에서도 교체 페이지를 찾지 못하면 다시 1단계부터 시도
■ LFU(Least Frequently Used) MFU(Most Frequently Used) 기법
- 적재되어 있는 동안 참조된 횟수를 누적하여 기록한 후, 그 값으로 교체 대상을 선택하는 기법
- 참조된 횟수를 누적하기 위해서는 여러 비트를 사용해야 함
- LFU는 많이 참조된 페이지는 앞으로도 참조될 확률이 높을 것이란 판단에 근거하여 값이 가장 작은 페이지를 선택
- MFU는 많이 참조된 페이지는 충분히 참조가 이루어졌으므로 더 이상 참조되지 않을 것이란 판단에 근거하여 값이 가장 큰 페이지를 선택
- 두 기법 모두 편향된 시각에 근거함으로써 실제 구현되는 경우는 매우 드뭄
■ 페이지 버퍼링(Page Buffering) 기법
- 단순한 교체 기법과 함께 사용되어 페이징의 성능을 향상시킬 수 있는 장점
- 적재가 가능한 가용(Available) 프레임 몇 개를 풀(Pool)로 유지하면서 부재가 생긴 경우 적재될 페이지는 바로 풀의 한 프레임으로 가져오고, 교체 대상으로 선택된 페이지는 변경된 경우에 한해 디스크로 쓰여지고 난 후 풀에 보태짐. 변경되지 않은 페이지는 그냥 풀에 넣어둠
- 교체 대상으로 선택된 페이지가 갱신된 경우, 그 내용을 디스크에 쓰고 난 다음 프레임에 적재시키는 시간적인 순서를 지키지 않아도 되므로 빠른 응답을 기대할 수 있음
- 교체될 페이지들을 가능한 메모리(가용 프레임 풀)에 남겨두어 디스크 입출력 횟수를 줄이고, 동시에 이 페이지가 다시 참조될 경우 바로 사용할 수 있다는 점이 장점 → pool을 끊어내고 해당 페이지가 저장된 프레임을 재사용하기 때문에 디스크에서 다시 가져올 필요가 없음

* 지역성(Locality)
- 시간적 지역성(Temporal Locality): 최근에 참조된 기억 장소가 가까운 미래에도 계속 참조될 가능성이 높음 ex) 반복문, 스택, 서브루틴 등
- 공간적 지역성(Spacial Locality): 하나의 기억 장소가 참조되면 그 근처의 기억장소가 계속 참조되는 경향이 있음 ex) 배열
* 스레싱(Thrashing): 빈번한 페이지의 부재
- 시스템의 성능을 현저히 떨어뜨림
- 주로, 잘못된 교체 정책과 프로세스에 할당된 프레임수가 너무 작음으로써 발생
- 지역성을 잘 고려하면 스레싱 발생 확률을 낮출 수 있음

1.2.5. 5) Working set이론과 PFF(Page Fault Frequency)
▶ 지역성을 고려한 가변 할당 이론으로, 지역 교체를 하면서 가변할당을 해보자는 이론
▶ working set
- 프로세스가 특정 시점에서 집중적으로 참조하는 페이지들의 집합
- 메모리에 적재되도록 함으로써 페이지 부재를 최소화함
▶ working set은 시간에 따라 변하게 되는데 이를 공식적으로 정의하면 다음과 같음
- 시점 t에서 프로세서의 working set, W(t,△t)는 해당 프로세스가 [t - △t, t]시간 동안 참조한 페이지들의 집합
- △t는 일정 크기의 시간으로 윈도 크기(window Size)라 부르며, 시스템에 의해 적절한 값으로 정해짐

▶ working set이란 현 시점에서의 지역성을 표현하고, 이 페이지 집합은 앞으로도 당분간 집중적으로 참조될 것이라고 보는 것
▶ working set을 메모리에 적재되도록 하여 스레싱 때문에 겪게 될 성능 감소를 미연에 방지할 수 있음
▶ working set 이론에서 윈도 크기를 정하는 것은 중요 = size를 고정할 수 없는 이유
- 너무 크게 잡으면 지역성에 포함되는 페이지들 외에 다른 페이지들도 working set에 포함될 수 있게 되어 메모리의 낭비와 함께 다중 프로그래밍 정도를 유지하기 힘듦
- 너무 작게 잡으면 지역성에 포함되는 페이지들조차 working set에서 빠져 스레싱을 겪게 될 것이므로 시스템의 다양한 상황을 반영하여 세심하게 결정해야 함
▶ 이론적으로 윈도 크기란 순수한 시간의 크기 하지만 운영체제에 따라 약간의 변형을 두고 구현
- working set은 "현재로부터 과거 몇 개의 페이지 참조 내에 포함되는 페이지 집합"으로 정함
- 여기서 "과거 몇 개"까지가 정해진 윈도 크기가 됨
▶ 그림 9.8에 나타난 참조 열로 실행되는 프로세스의 윈도 크기가 5라고 가정

- 시점별로 변하는 working set의 크기를 쉽게 알 수 있음
- 프로그램의 실행이 시작된 후 t0부터 처음 참조되는 페이지들은 부재를 겪으며 점차 working set을 키워가다가 t1에서 최대 크기인 5가 됨
- 이후부터 지역성을 보이면서 t2에서와 같이(세 개의 페이지로 loop 1을 구성하는 동안에는) 일정한 크기(=3)으로 유지됨
- 실행이 진행되면 다음 지역성을 보이는 loop2 부분으로 넘어가면서 t3에서 5개로 증가했던 working set은 점점 줄어 t4에서와 같이 페이지 두 개로 구성되는 강한 지역성을 드러냄
▶ working set을 이용한 메모리 관리: working set을 메모리에 유지시킴
- 윈도 크기:4, 현재 working set = {a, d, e}, 직전 참조열: e, d

▶ working set 이론 정리
- 지역성을 표현하는 working set을 메모리에 유지함으로써 스레싱을 방지하겠다는 것
- working set이 작아지면 프레임을 회수하고, 커지게 되면 그만큼 프레임을 더 할당해주는 가변 할당이 필요함
- 프로세스 하나를 메모리에 추가하는 즉, 다중 프로그래밍의 정도를 올리는 것도 그 프로세스의 working set이 메모리에 유지될 수 있느냐가 기준이 되며, 이미 메모리에 올라와 있는 프로세스도 working set이 유지되기 힘든 상황이 되면 보류 상태가 될 수 있음
▶ working set 이론의 단점
- 그림 9.8에서 지역성이 변화하는 구간처럼 working set이 언제나 그 시점의 지역성을 잘 표현하지는 못함
- 각 프로세스의 정확한 working set을 추정하고 최적의 윈도 크기를 정하는 것도 어려움
- 매 페이지를 참조할 때마다 working set을 조정하는 작업도 상당한 부담
▶ PFF(Page Fault Frequently): 최적의 윈도 크기를 추정하기가 쉽지 않은 상황에서 working set을 페이지 부재의 간격(Inter-fault Time)에 근거하여 결정하는 방법
- 페이지 부재 사이의 간격이 크다는 말은 할당된 프레임의 수가 충분하거나 경우에 따라 과도한 프레임이 주어졌다는 의미
- 페이지 부재 사이의 간격이 짧다는 말은 스레싱에 다가간다는 것으로 현재 할당된 프레임의 수가 부족하다는 의미
- 시스템에서 정한 적정 부재 간격의 크기를 초과하면 프레임을 줄이고, 더 짧은 시간 안에 부재가 나면 프레임을 늘려주도록 하여야 함
- 구현에 따라 부재 사이의 시간에 대한 상한 값과 하한 값을 두어 상한 값을 초과하면 프레임의 축소로, 하한 값을 하회하면 프레임의 증가로 대응할 수 있음

▶ PFF 관리
- 적정 부재 간격: 2 (현재의 참조부터 과거 두 개까지)

PFF는 부재 사이의 간격이라는 보다 정교하 잣대로 working set 관리 가능
위의 예시에서 알 수 있듯이 부재가 없을 경우 working set을 조정하지 않음으로써
조정의 횟수를 감소시켜 working set 기법에 비해 오버헤드가 적다는 장점이 있음
1.2.6. 6) 클리닝 정책(Cleaning Strategy)과 부하 조절(Load Control)
▶ 클리닝이란 적재 중 내용이 변경된 페이지를 언제 디스크에 기록시킬 것인가에 대한 정책
- 요구 클리닝(Demand Cleaning)은 교체 대상으로 선택되었을 때 기록
- 변경된 페이지가 교체 시기에 한 번만 기록되므로 입출력을 최소화할 수 있지만, 부재를 발생시킨 프로세스는 교체 대상 페이지의 기록을 한 후, 부재였던 페이지를 적재해야 함으로 응답성이 떨어짐 → 해결책: page buffering
- 대부분 시스템에서는 요구 클리닝을 사용함
- 예측 클리닝(선 클리닝, Precleaning)은 교체 전이라도 디스크의 부하가 적을 때 미리 기록해 두는 방식
- 기록 후에도 실제 교체 시까지 메모리에 남아있게 되고, 이 기간 동안 더 이상의 변경이 없다면 교체 시에 디스크 기록은 필요 없으므로 응답성을 높일 수 있음
- 기록 후 교체되기 전에 다시 변경된다면 먼저 했던 기록은 아무 효과 없이 입출력의 낭비가 됨
- 클리닝 정책은 고정 할당의 마지막에서 설명한 페이지 버퍼링과 함께 활용되면 상승 효과를 가져올 수 있음
▶ 부하 조절
- 다중 프로그래밍의 정도(Degree)를 결정하는 것을 말하며 메모리의 효율적인 관리와 밀접한 관계가 있음

- 너무 낮으면 메모리를 비롯한 시스템의 자원을 활용하지 못해 성능이 떨어짐
- 너무 높으면 자원에 대한 경쟁 특히, 부족한 메모리로 인한 스레싱 때문에 역시 성능이 떨어짐
- working set 이론은 프로세스들을 working set이 유지되는 한도에서 메모리에 올림으로써 자연스럽게 부하 조절과 연동되어 있음
- L=S 법칙은 부재 간격의 평균(Mean Time Between Faults, MTBF) 값과 부재의 처리에 걸리는 시간의 평균 값을 같도록 하는 것이 CPU의 활용도를 최대로 할 수 있다는 연구 결과
- 50% 규칙은 페이징 장치의 활용도를 50%가 되도록 하는 것이 CPU의 활용도를 극대화 한다는 것
- 교체 정책에서 배운 clock 기법에서 교체 대상을 찾기 위해 포인터가 이동하는 평균 횟수가 너무 적다면(주어진 프레임이 여유있는 것) 다중 프로그래밍의 정도를 올려주는 방법도 있음
1.3. # 9.3 몇 가지 고려할 점들
1.3.1. 1) 페이지의 크기
- 페이징에서 페이지의 크기는 여러 가지 측면을 고려하여 결정되며, 일반적으로 2^12에서 2^22 바이트로 사용되고 시스템에 따라 다름
- 페이지의 크기를 작게 했을 때 예측할 수 있는 점들은 다음과 같을 것이며 크게 할 경우에는 반대의 현상이 생길 것
1. 프로그램에서 페이지의 개수가 늘어나고 따라서 페이지 테이블의 엔트리 개수도 늘어나게 되어 결국 페이지 테이블의 크기가 커질 것이다. 페이지 테이블이 커질수록 이것을 메모리에 적재해야 하는 부담도 커질 것이다.
2. 프레임의 크기도 작아지므로 메모리에서 전체 프레임 개수가 늘어나게되고 결과적으로 이를 관리해야 할 커널의 부담도 커진다
3. 페이지 개수가 증가하므로 적재와 교체의 횟수를 증가시켜 잦은 입출력을 발생시킬 것이다. 다만 페이지 하나의 전송시간은 줄어들 것이다.
4. 꼭 필요한 내용을 담은 페이지들로 working set이 구성될 것이다.
5. 프로그램에서 마지막 페이지의 반은 내부 단편화를 가지는데, 페이지가 작으면 단편화의 크기도 줄어들 것이다.
- 메모리만 고려한다면 적정 페이지 크기를 판단할 수 있음

1.3.2. 2) 프로그램의 구조
▶ 실행될 프로그램 메모리의 특성에 맞춰 잘 작성하면 더 나은 성능을 기대할 수 있음
- ex) 페이지의 크기가 128워드이고, 128*128 워드 크기의 행렬 MAT[i, j]를 0으로 초기화시키는 프로그램을 C를 사용하여 다음과 같이 작성
<cpp />
for(j = 0; j < 128 ; j++)
for(i = 0; i < 128 ; i++)
MAT[i,j]:=0;
- C언어는 행 우선(row-major)이므로 MAT의 각 행은 한 페이지에 들어가게 되는데, 프로그램은 열 단위로 초기화를 하게 되니 결과적으로 모든 초기화마다 부재가 발생하며 16384(128*128)번의 부재 발생
- 이 프로그램을 다음과 같이 바꾼다면 행 단위로 초기화가 진행되고, 한 페이지에 있는 128개는 부재 없이 진행되므로 전체 부재 횟수가 128번으로 훨씬 나은 성능을 보일 것
<cpp />
for(i = 0; i < 128 ; i++)
for(j = 0; j < 128 ; j++)
MAT[i,j]:=0;
1.3.3. 3) 프레임 잠금
▶메모리의 프레임 중 일부를 잠금으로써 교체되지 않도록 해주는 것이 요구될 때가 있음
- 부재를 처리해야하는 루틴을 가진 프레임이 교체되어 버리는 일이 생기지 않도록 하려면 커널이 자리한 프레임들은 대부분 잠금 상태를 유지해야함
- 입출력 할 페이지가 입출력 전에 교체되지 않기 위해 잠금이 필요함
- 실시간으로 처리되어야 할 영역을 가지는 프레임이 교체될 경우 겪게 될 부재와 이로 인한 시간 지연을 방지하기 위해 잠금이 필요함
1.3.4. 4) 윈도에서의 가상 메모리 관리
▶ 윈도에서의 가상 메모리는 가변 할당과 지역 교체로 관리됨
- 메모리가 충분할 경우 부재를 일으킨 프로세스에게 해당 페이지를 적재할 프레임을 하나 더 주되 상한치를 넘기지는 않으며, 메모리가 부족하면 각 프로세스의 working set을 최근에 덜 사용된 기준으로 줄여 메모리 공간을 확보한 후 일시적으로 하한치 밑으로 내려간 프로세스에게 프레임을 할당해 줌
- 즉 하한치 밑은 페이지 부재가 빈번하게 되므로 프레임을 할당해주는 것임
'Study > Computer&Operating System' 카테고리의 다른 글
[컴퓨터구조/운영체제] 컴퓨터구조 운영체제 클라우드 30분만에 이해하기 (0) | 2023.02.19 |
---|---|
[컴퓨터구조/운영체제] 컴퓨터 전공 수업 10분으로 압축 (컴퓨터구조 + 운영체제) (0) | 2023.02.17 |
[OS] Chapter 08. 가상 메모리 (0) | 2022.06.03 |
[OS] Chapter 07. 메모리 관리 (0) | 2022.06.02 |
[OS] Chapter 06. 교착 상태(Deadlock) (0) | 2022.05.07 |