diff --git "a/\354\236\204\354\235\200\354\247\200.8\354\236\245-\352\260\200\354\203\201\353\251\224\353\252\250\353\246\254.10\354\233\224 24\354\235\274.md" "b/\354\236\204\354\235\200\354\247\200.8\354\236\245-\352\260\200\354\203\201\353\251\224\353\252\250\353\246\254.10\354\233\224 24\354\235\274.md"
new file mode 100644
index 0000000..3767052
--- /dev/null
+++ "b/\354\236\204\354\235\200\354\247\200.8\354\236\245-\352\260\200\354\203\201\353\251\224\353\252\250\353\246\254.10\354\233\224 24\354\235\274.md"
@@ -0,0 +1,222 @@
+# 가상메모리
+: 프로그램이 물리적 메모리를 고려할 필요 없이 자시 자신만이 메모리를 사용하는 것처럼 가정해 프로그램을 지원하는 것. 즉 `가상메모리`는 프로세스마다 각각 0번지부터의 주소 공간을 가지게 되며, 이들 공간 중 일부는 물리적 메모리에 적재되고 일부는 디스크의 스왑 영역에 존재하게 된다.
+
+프로세스의 주소 공간을 메모리로 적재하는 단위에 따라 가상메모리 기법은 `요구 페이징` 방식, `요구 세그먼테이션` 방식으로 구현될 수 있다.
+#### 요구 페이징
+- 대부분의 경우에는 요구 페이징 방식 사용
+- 세부적인 구현에서는 요구 페이징 기법만이 사용
+#### 요구 세그먼테이션
+- 대게 하나의 세그먼트를 여 러 개의 페이지로 나누어 관리하는 페이지드 세그먼테이션 기법을 사용하는 경우
+
+## 1. 요구 페이징(demand paging)
+: 프로그램 실행 시 당장 사용될 페이지만을 올리는 방식
+- 메모리 사용량이 감소하고, 프로레스 전체를 메모리에 올리는 데 소요되는 입출력 오버헤드도 줄어든다.
+- 응답시간을 단축시킬 수 있으며, 시스템이 더 많은 프로세스를 수용할 수 있게 해준다.
+- 프로그램을 구성하는 페이지 중 일부만을 메모리에 적재하게 되므로 물리적 메모리의 용량보다 큰 프로그램도 실행할 수 있다.
+### Valid/Invalid bit 사용
+프로세스가 실행되기 전에는 모든 페이지는 invalid으로 초기화 되어 있다.
+#### Valid bit
+- 특정 페이지가 참조되어 메모리에 적재되는 경우
+#### Invalid bit
+- 페이지가 현재 메모리에 없는 경우
+- 그 페이지가 속한 주소 영역을 프로세스가 사용하지 않는 경우
+
+
+
+#### page fault
+: address translation 시에 invalid bit가 set 되어 있는 것
+ => CPU가 참조하려는 페이지가 현재 미모리에 올라와있지 않아 무효 비트가 무효로 세팅되어 있는 경우
+ - page fault 발생 시 CPU는 자동적으로 운영체제에게 넘어가게 된다.
+ - `page trap`이 걸렸다고도 하며 일종의 소프트웨어의 인터럽트
+
+### 1) Page fault
+- CPU가 invalid page에 접근하면 MMU가 page fault trap을 발생시키게 된다.
+- Kernel mode로 전한이 되고 `page fault hander`가 invoke 된다.
+ - page fault handler : page fault를 처리하는 코드
+#### page fault 처리 루틴
+1. 해당 페이지에 대한 접근이 적법한지 체크한다.
+- 잘못된 주소, 접근 권한 위반(protection violation)
+ => abort process (프로세스 종료)
+2. 물리적 메모리에서 free frame을 할당받아 그 공간에 페이지를 읽어 온다.
+- 만약 empty free frame이라면 기존에 메모리에 올라와 있는 페이지 중 하나를 디스크로 쫓아낸다. (= swap out)
+3. 해당 페이지를 디스크에서 메모리로 읽어 온다.
+- Disk I/O가 끝날 때까지 이 프로세스는 CPU를 preempt(빼앗기고) block 상태(봉쇄 상태)가 된다.
+- Disk I/O가 끝나면 page tales entry를 기록하고 valid/invalid bit는 valid로 설정한다.
+- block 상태였던 프로세스를 ready queue로 이동시킨다.
+4. 이 프로세스가 CPU를 할당받고 이전에 중단되었던 instruction부터 실행 재개
+
+
+
+### 2) 요구 페이징의 기능
+: Page fault가 일어나면 디스크로부터 메모리로 읽어오는 막대한 오버헤드가 발생한다. 요구 페이징의 성능은 다음과 같이 `유효 접근시간`으로 측정한다.
+- Effective Access Time (유효 접근시간)
+= (1 - p) x memory access
+ + p x (OS & HW page fault overhead
+ + [swap page out if needed]
+ + swap page in
+ + OS & HW restrat overhead)
+ - (1 - p) 는 page fault가 안나는 비율이며 안나는 만큼 메모리 접근 시간만 걸리게 된다.
+ - OS & HW page fault overhead : 페이지 부재 발생 처리 오버헤드
+ - [swap page out if needed] : 메모리에 빈 프레임이 없는 경우 스왑 아웃 오버헤드
+ - swap page in : 요청된 페이지의 스왑 인 오버헤드
+ - OS & HW restrat overhead : 프로세스의 재시작 오버헤드
+
+- Page Fault Rate 0 ≤ p ≤ 1.0 (페이지 부재 발생 비율)
+ - if p = 0 on page fault : 0이라면 page fault가 절대 발생되지 않고 메모리에서 다 참조되는 경우
+ - if p = 1 : 매번 메모리를 참조할 때마다 page fault가 발생한다.
+
+실제로 page fault 비율은 0.0에 가깝게 나오게 되어 대부분의 경우는 page fault가 발생되지 않아 메모리로부터 직접 주소변환을 할 수 있다.
+***
+## 2. 페이지 교체
+#### Page replacement
+: Free frame이 없는 경우 메모리에 올라와 있는 페이지 중 하나를 디스크로 쫓아내 메모리에 빈 공간을 확보하는 작업
+- 어떤 frame을 빼앗아올지 결정해야 한다.
+- 곧바로 사용되지 않을 page를 쫓아내는 것이 좋다
+- 동일한 페이지가 여러 번 메모리에서 쫓겨났다가 다시 들어올 수 있다.
+
+
+
+#### Replacement Algorithm
+: Page replacement시 어떤 frame을 쫓아낼 것인지 결정하는 알고리즘
+- page fault rate를 최소화하는 것이 목표
+- 알고리즘의 평가
+ - 주어진 `page reference stirng`에 대해 page fault를 얼마나 내는지 계산한다.
+ - page reference stirng(페이지 참조열) : 시간 순서에 따라서 페이지들에게 서로 다른 순서를 붙여놓고 페이지들의 참조된 순서를 나열해 놓은 것
+ - 해당 번호의 페이지가 이미 올라와 있으면 메모리에서 hit(적중)되었다 하고, 메모리에 없는 경우에는 page fault가 발생했다고 말한다.
+
+### 1) 최적 페이지 교체
+#### Optimal Algorithm(MIN,OPT,Belady's Optimal Algorithm)
+: page fault rate를 최소화하기 위해 페이지 교체 시 물리적 메모리에 존재하는 페이지 중 가장 먼 미래에 참조될 페이지를 쫓아낼 수 있게 하는 것.
+
+
+- 어떤 알고리즘을 쓰더라도 6 page faults 이하로 할 수 없다.
+
+- 미래의 참조를 어떻게 아는가?
+: Offline algoritym
+ - 가장 먼 미래에 참조되는 페이지를 미리 다 안다고 **가정**하는 것, 실제 온라인에서 사용할 수는 없다.
+- 실제 시스템에서 사용하는 다른 알고리즘의 성능에 대한 upper bound(상한선) 제공
+ - 아무리 좋은 알고리즘을 만들어도 Optimal Algorithm보다 좋을 수 없다.
+### 2) FIFO(First In First Out : 선입선출) Algorithm
+: 페이지 교체 시 물리적 메모릴에 가장 먼저 올라온 페이지를 우선적으로 내쫓는다.
+- FIFO anomaly(FIFO의 이상현상) : 메모리를 증가시켰음에도 불구하고 페이지 부재가 오히려 늘어나는 상황
+
+
+### 3) LRU (Least Recently Used) Algorithm
+가장 오래 전에 참조된 것을 지운다.
+
+### 4) LFU (Least Frequently Used) Algoritym
+: 과거의 regerence count(참조 횟수)가 가장 적은 페이지를 지운다.
+- 최저 참조 횟수인 page가 여럿 있는 경우
+ - LFU algorithm 자체에서는 여러 page 중 임의로 선정한다.
+ - 성능 향상을 위해 가장 오래 전에 참조된 page를 지우게 구현하는 것이 효율적이다.
+
+페이지의 참조 횟수를 계산하는 방식에 따라 두 가지로 나뉜다.
+- Incache-LFU
+: 페이지가 물리적 메모리에 올라온 후부터의 참조 횟수를 카운트 하는 방식
+: 페이지가 메모리에서 쫓겨났다가 다시 들어온 경우 참조 횟수는 리셋된다.
+- Perfect-LFU
+: 메모리에 올라와 있는지의 여부와 상관없이 그 페이지의 과거 총 참조 횟수를 카운트 한다.
+#### 장단점
+- LRU처럼 직전 참조 시점만 보는 것이 아니라 장기적인 시간 규모를 보기 때문에 page의 인기도를 좀 더 정확히 반영할 수 있다.
+- 이전 참조 기록까지 모두 보관하고 있어야 하므로 오버헤드가 상대적으로 더 크다.
+- 참조 시점의 최근성을 반영하지 못한다.
+- LRU보다 구현이 복잡하다.
+
+
+
+### 5) Clock Algoritym
+: 하드웨어적인 지원을 통해 이와 같은 알고리즘의 운영 오버헤드를 줄인 방식
+- LRU를 approximation(근사)시킨 알고리즘으로 NUR(Not Used Reccently) 또는 NRU(Not Reccently Used) 알고리즘 또는 Second chance 알고리즘으로도 불린다.
+- LRU처럼 가장 최근에 참조되지 않은 페이지를 대상으로 선정한다는 점에서 LRU와 유사하지만 교체되는 페이지의 참조 시점이 가장 오래되었다는 것을 보장하지는 못한다.
+- Reference bit를 사용해서 교체 대상 페이지를 선정한다.
+- Reference bit가 0인 것을 찾을 때까지 포인터를 하나씩 앞으로 이동
+- 포인터를 이동하는 중에 reference bit 1은 모두 0으로 바꾼다.
+- Reference bit가 0인 것을 찾으면 해당 페이지를 교체한다.
+- 한 바퀴 되돌아 와서도(=second chance) 0이면 그때에는 replace 당한다.
+- 자주 사용되는 페이지라면 second chance가 올 때 1이다.
+
+
+#### Colck algorithm의 개선
+- reference bit과 modified bit(dirty bit)를 함께 사용한다.
+- reference bit = 1
+: 최근에 참조된 페이지
+: modified bit = 0
+: 최근에 변경된 페이지 (I/O를 동반하는 페이지)
+***
+## 3. 페이지 프레임의 할당
+: 프로세스가 여러 개가 동시에 수행되는 상황에서 각 프로세스에 얼마만큼의 메모리 공간을 할당할 것인인가?
+#### Allocation의 필요성
+- 메모리 참조 명령어 수행시 명령어, 데이터 등 여러 페이지를 동시 참조할 수 있다.
+ - 명령어 수행을 위해 최소한의 할당되어야 하는 frame의 수가 있다.
+- Loop를 구성하는 page들은 한꺼번에 allocate 되는 것이 유리하다.
+ - 최소한의 allocation이 없으면 매 loop 마다 fage fault가 발생하게 된다.
+### Allocation Scheme
+#### Equal Allocation(균등할당)
+: 모든 프로세스에게 페이지 프레임을 균일하게 할당하는 방식
+#### Proportional Allocaiton(비례할당)
+: 프로세스의 크기에 비례해 페이지 프레임을 할당하는 방식
+#### Priority Allocation(우선순위 할당)
+: 프로세스의 우선순위에 따라 페이지 프레임을 다르게 할당하는 방식
+***
+## 4. 전역교체와 지역교체
+#### Global replacement(전역교체)
+: 모든 페이지 프레임이 교체 대상이 될 수 있는 방법
+- Replace 시 다른 프로세스에 할당된 프레임을 빼앗아 올 수 있다.
+- 프로세스별 할당량을 조절하는 또 다른 방법이 될 수 있다.
+- FIFO,LRU,LFU 등의 알고리즘을 global replacement로 사용사에 해당한다.
+- Working set, PFF 알고리즘을 사용한다.
+#### Local replacement(지역교체)
+: 현재 수행 중인 프로세스에세 할당된 프레임 내에서만 교체 대상을 선정할 수 있는 방법
+- 자신에게 할당된 프레임 내에서만 선정하기 되는 것이다.
+- FIFO,LRU,LFU 등의 알고리즘을 프로세스별로 운영할 때 사용된다.
+***
+## 5. 스레싱
+: 집중적으로 참조되는 페이지들의 집합을 메모리에 한꺼번에 적재하지 못하면 page fault rate가 크게 상승해 CPU utilization이 급격히 떨어지는 현상
+- 프로세스의 원활한 수행에 필요한 최소한의 page frame 수를 할당 받지 못한 경우에 발생된다.
+- OS는 `MPD`를 높여야 한다고 판단하게 된다.
+ - MPD (Multiprograming degree) : 다중 프로그래밍의 정도
+- 그러면 또 다른 프로세스가 시스템에 추가된다. (higher MPD)
+- 프로세스 당 할당된 프레임의 수가 더욱 감소된다.
+- 프로세스는 페이지의 swap in/swap out를 지속적으로 발생시킨다.
+- 대부분의 시간은 일을 하지 않게 된다.
+
+=Thrashing
+
+
+### 1) Woking-set Algorithm
+#### Woking-Set Model
+- Locality of reference
+ - 프로세스는 특정 시간동안 일정 장소만을 집중적으로 참조한다.
+ - 집중적으로 참조되는 해당 page들의 집합을 `locality set`이라고 한다.
+- Woking-set Model
+ - Locality에 기반하여 프로세스가 일정 시간 동안 원활하게 수행되기 위해 한꺼번에 메모리에 올라와 있어야 하는 page들의 집합을 `Working Set`이라 정의한다.
+ - Working Set 모델에서는 프로세스의 working set 전체가 메모리에 올라와 있어야 수행되고 그렇지 않을 경우 모든 frame을 반납한 후 swap out 시킨다.
+ - Thrashing을 방지한다.
+ - MPD를 조절한다.
+#### Working-set의 결정
+- Working-set window를 사용한다
+- window size가 Δ인 경우
+ - 시각 t₁에서의 working set WS(t₁)
+ - Thime interval[t₁-Δ,t₁] 사이에 참조된 서로 다른 페이지들의 집합
+ - Working set에 속한 페이지는 메모리에 유지하고 속하지 않은 것은 버린다. (즉, 참조된 후 Δ 시간 동안 해당 페이지를 메모리에 유지한 후 버린다.)
+
+
+#### Working-Set Algorithm
+- 프로세스들의 working set size의 합이 page frame의 수보다 큰 경우
+ - 일부 프로세스를 swap out 시켜 남은 프로세스들의 working set을 우선적으로 충적시켜 준다. (MPD를 줄임)
+-Working set을 다 할당하고도 page frame이 남는 경우
+ - swap out 되었던 프로세스에세 working set을 할당 (MPD를 키움)
+#### Window size Δ
+- Working set을 제대로 탐지하기 위해서는 window size를 잘 결정해야 한다.
+- Δ 값이 너무 작으면 locality set을 모두 수용하지 못할 우려가 있다.
+- Δ 값이 너무 크면 여러 굼의 locality set을 수용할 수 있다.
+- Δ 값이 ∞이면 전체 프로그램을 구성하는 page를 working set으로 간주한다.
+### 2) Page Fault Frequency : PFF (페이지 부재 빈도 알고리즘)
+#### PFF Scheme
+- page fault rate의 upper bound(상한값)과 lower bound(하한값)을 둔다.
+ - page fault rate이 upper bound가 넘으면 frame을 더 할당한다.
+ - page fault rate이 lower bound가 이하이면 할당 frame 수를 줄인다.
+- 빈 frame이 없으면 일부프로세스를 swap out 시켜 프로세스의 수를 조절한다.
+
+
+
diff --git "a/\354\265\234\354\247\200\354\227\260.8\354\236\245-\352\260\200\354\203\201\353\251\224\353\252\250\353\246\254.10\354\233\224 24\354\235\274.md" "b/\354\265\234\354\247\200\354\227\260.8\354\236\245-\352\260\200\354\203\201\353\251\224\353\252\250\353\246\254.10\354\233\224 24\354\235\274.md"
new file mode 100644
index 0000000..405c08e
--- /dev/null
+++ "b/\354\265\234\354\247\200\354\227\260.8\354\236\245-\352\260\200\354\203\201\353\251\224\353\252\250\353\246\254.10\354\233\224 24\354\235\274.md"
@@ -0,0 +1,214 @@
+### Demand Paging : 요청이 있으면 -> page를 메모리에 올린다
+- 실제로 필요할 때 page를 메모리에 올리는 것
+\- I/O 양의 감소 (거의 사용되지 않는 방어적인 코드는 메모리에 올리지 않게됨)
+\- Memory 사용량 감소
+\- 빠른 응답 시간 (system-wide 관점)
+\- 더 많은 사용자 수용 (더 많은 프로그램이 동시에 메모리에 올라갈 수 있음)
+
+- Valid/Invalid bit의 사용
+\- Invalid의 의미 : `사용되지 않는 주소 영역인 경우` , `페이지가 물리적 메모리에 없는 경우`
+\- 처음에는 모든 page entry가 invalid로 초기화
+\- address translation 시에 invalid bit이 set되어 있으면 => `page fault` 현상 발생
+
+
+
+### Page Fault
+- invalid page를 접근하면 MMU가 `trap` 을 발생시킴 (page fault trap)
+- kernel mode로 들어가서 page fault handler가 invoke됨
+- 다음과 같은 순서로 page fault를 처리한다.
+1. Invalid reference? (eg. bad address, protection violation) => `abort process`
+2. Get an empty page frame (if no empty page frame -> `replace`)
+3. 해당 페이지를 disk에서 memory로 읽어온다.
+ 1) disk I/O가 끝나기까지 이 프로세스는 CPU를 preempt 당함 (block)
+ 2) Disk read가 끝나면 page tables entry 기록, valid/invalid bit = "valid"
+ 3) ready queue에 process를 insert -> dispatch later
+4. 이 프로세스가 CPU를 잡고 다시 running
+5. 아까 중단되었던 instruction을 재개
+
+> **그림으로 살펴보자!**
+```
+1. 주소변환을 하려고 page table을 봤더니, invalid로 표시되어 있다. 즉, 해당 페이지가 메모리에 올라와있지 않음
+2. trap 발생하여 CPU가 운영체제에게 자동으로 넘어감
+3. 해당 page는 현재 backing store에 있음
+4. 운영체제가 해당 page를 물리적인 메모리로 올려놓음
+5. 물리적인 메모리의 frame number를 엔트리에 적어넣고, invalid -> valid로 바꿈
+6. 이후 CPU를 다시 얻어서 주소 변환을 하면 valid로 되어 있기 때문에 주소 변환이 정상적으로 이루어져 물리적인 메모리의 page frame에 접근할 수 있다.
+```
+
+page fault가 났을 때, 디스크에 접근하는 것은 오래 걸리는 작업이기 때문에 `page fault가 얼마나 나느냐` 에 따라서 메모리 접근 시간이 크게 달라진다.
+> Page Fault Rate 0 ≤ p ≤ 1.0
+\- if p = 0 no page faults
+\- if p = 1l, every reference is a fault
+
+
+> **Effective Access Time**
+```
+= (1 - p) x memory access
++ p(OS & HW page fault over head // os로 CPU가 넘어가서 하드웨어적으로 page fault처리
+ + [swap page out if needed] // 메모리에 빈 공간이 없으면 페이지 쫓아내야함
+ + swap page in // 디스크에서 읽어온 페이지 올려놓기
+ + OS & HW restart overhead)
+```
+
+#### Free frame이 없는 경우
+`Page replacement`
+- 어떤 frame을 빼앗아올지 결정해야 함
+- 곧바로 사용되지 않을 page를 쫓아내느 것이 좋음
+- 동일한 페이지가 여러 번 메모리에서 쫓겨났다가 다시들어올 수 있음
+
+`Replacement Algorithm`
+- page-fault rate을 **최소화** 하는 것이 목표
+- 알고리즘의 평가
+\- 주어진 page reference string에 대해 page fault를 얼마나 내는지 조사
+\* reference string : page들이 참조된 순서대로 나열해 놓은 것
+- reference string의 예
+1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
+
+#### Optimal Algorithm
+(미래에 참조되는 page들을 미리 다 안다고 가정)
+- Belady's optimal algorithm, MIN, OPT 등으로 불림
+- MIN(OPT) : 가장 먼 미래에 참조되는 page를 replace
+\- 의미 : 실제 사용은 불가능하지만, 다른 알고리즘의 성능에 대한 `upper bound` 제공
+
+#### FIFO(First In First Out) Algorithm
+먼저 들어온 것을 먼저 내쫓음
+- FIFO Anomaly (Belady's Anomaly)
+more frames =/=> less page faults (프레임 수의 증가가 page fault의 감소를 보장하지 않음)
+
+#### LRU(Least Recently Used) Algorithm
+가장 오래 전에 참조된 것을 지움
+(= 최근에 참조된 page가 다시 참조되는 성향이 높다)
+
+
+#### LFU(Least Frequently Used) Algorithm
+LFU : 참조 횟수(reference count)가 가장 적은 페이지를 지움
+- 장점 : LRU처럼 직전 참조 시점만 보는 것이 아니라 장기적인 시간 규모를 보기 때문에 page의 인기도를 좀 더 정확히 반영할 수 있음
+- 단점 : 참조 시점의 최근성을 반영하지 못함. LRU보다 구현이 복잡함
+
+
+#### LRU와 LFU 알고리즘의 구현
+
+
+- LRU
+메모리 안에 있는 페이지들을 참조 시간 순서에 따라서 줄 세움(LinkedList 형태)
+O(1) complexity
+- LFU
+메모리 안에 있는 페이지들을 참조 횟수 순으로 줄 세움
+- LinkedList 형태로 구현한다면, LRU와 달리 특정 페이지의 참조 횟수가 바뀌었을 때 어느 위치에 줄 세울지 결정하기 위해 다른 페이지와의 1:1 비교 과정이 필요함
+O(n) complexity
+- Heap으로 구현시, O(log n) complexity
+
+------
+
+### 다양한 캐슁 환경
+`caching 기법`
+- 한정된 빠른 공간(=캐쉬)에 요청된 데이터를 저장해 두었다가 후속 요청시 캐쉬로부터 직접 서비스하는 방식
+- paging system 외에도 cache memory, buffer caching, Web caching(동일한 url에 대해 다시 요청을 할 경우, 내 컴퓨터에 이미 읽어온 웹 페이지를 저장해두었다가 화면에 보여줌) 등 다양한 분야에서 사용
+
+`캐쉬 운영의 시간 제약`
+교체 알고리즘에서 삭제할 항목을 결정하는 일에 지나치게 많은 시간이 걸리는 경우 ㅣㄹ제 시스템에서 사용할 수 없음
+- Buffer caching이나 Web caching의 경우
+\- O(1)에서 O(log n) 정도까지 허용
+- Paging system인 경우
+\- page fault인 경우에만 OS가 관여함
+\- 페이지가 이미 메모리에 존재하는 경우 참조시각 등의 정보를 **OS가 알 수 없음**
+\- O(1)인 LRU의 list 조작조차 불가능
+
+결론 : paging system에서는 LRU, LFU 사용할 수 없다.
+(그럼 왜 배웠나..? pagign system 외에도 다양한 캐슁 환경이 있다니까~)
+
+### Clock Algorithm
+LRU의 근사 알고리즘. Second chance algorithm, NUR(Not Used Recently), NRU(Not Recently Used) 이라고도 불림
+- `Reference bit` 을 사용해서 교체 대상 페이지 선정(circular list)
+- reference bit가 0인 것을 찾으면 그 페이지를 교체
+- **한 바퀴 돌아와서도(=second chance) 0이면 그때에는 replace 당함**
+- 자주 사용되는 페이지라면 second chacne가 올 때 1
+
+\+ `Clock algorithm의 개선`
+\- reference bit와 `modified bit(dirty bit)을 함께 사용
+\- reference bit = 1 : 최근에 참조된 페이지
+\- modified bit = 1 : 최근에 변경된 페이지 (I/O를 동반하는 페이지)
+
+
+#### Page Frame의 Allocation
+- `Allocation problem` : **각 process에** 얼마만큼의 page frame을 할당할 것인가?
+- Allocation의 필요성
+\- 메모리 참조 명령어 수행시 명령어, 데이터 등 여러 페이지 동시 참조
+명령어 수행을 위해 최소한 할당되어야 하는 frame의 수가 있음
+\- Loop를 구성하는 page들은 allocate 되는 것이 유리함
+(최소한의 allocation이 없으면 매 loop마다 page fault)
+
+- Allocation Scheme
+\- Equal allocation : 모든 프로세스에 `똑같은 개수` 할당
+\- Proportional allocation : 프로세스 `크기` 에 비례하여 할당
+\- Priority allocation : 프로세스의 `priority` 에 따라 다르게 할당
+
+#### Global vs Local Replacement
+**Global replacement**
+- Replace시 다른 process에 할당된 frame을 빼앗아 올 수 있다
+- Process별 할당량을 조절하는 또 다른 방법임
+- FIFO, LRU, LFU 등의 알고리즘을 glocal replacement로 사용시에 해당
+- Working set, PFF 알고리즘 사용
+
+**Local replacement**
+- 자신에게 할당된 frame 내에서만 replacement
+- FIFO, LRU, LFU 등의 알고리즘을 process별로 운영시
+
+#### Thrashing
+
+프로세스의 원활한 수행에 필요한 **최소한의 page frame 수를 할당받지 못한 경우** 발생
+- Page fault rate이 매우 높아짐
+- CPU utilization이 낮아짐
+- OS는 MPD(Multiprogramming degree)를 높여야 한다고 판단
+(CPU가 놀고있다고 생각해서 프로그램을 더 메모리에 올려야겠다고 판단함)
+- 또 다른 프로세스가 시스템에 추가됨(higher MPD)
+- 프로세스 당 할당된 frame의 수가 더욱 감소
+- 프로세스는 page의 swap in/swap out으로 매우 바쁨
+- 대부분의 시간에 CPU는 한가함
+- low throughput
+
+Thrashing을 막기 위해서는 **동시에 메모리에 올라가 있는 프로세스의 개수(multiprogramming degree)** 를 조절해주어야 한다. 각 프로세스가 어느 정도 메모리를 확보할 수 있도록!
+-> 그것을 해주는 알고리즘 : `Working-Set Algorithm`, `PFF(Page-Fault Frequency) Scheme`
+
+### Working-Set Model
+> **Locality of reference**
+- 프로세스는 특정 시간 동안 일정한 장소만을 **집중적으로** 참조한다.
+- 집중적으로 참조되는 해당 page들의 집합을 **locality set** 이라 함
+
+`Working-set Model`
+- Locality에 기반하여 프로세스가 일정 시간 동안 원활하게 수행되기 위해 한꺼번에 메모리에 올라와 있어야 하는 page들의 집합을 Working Set이라 정의함
+- Working Set 모델에서는 process의 working set 전체가 메모리에 올라와 있어야 수행되고 그렇지 않을 경우 **모든 frame을 반납한 후 swap out (`suspend`)**
+ex) 프로그램 A의 Working Set은 페이지 5개로 구성되는데 해당 프로그램에게 페이지를 3개밖에 줄 수 없는 상황 -> "3개 필요없고, 5개 줄 때까지 하나도 안받을게~"
+- Thrashing을 방지함
+- Multiprogramming degree를 결정함
+
+#### Working-Set Algorithm
+`Working-Set의 결정`
+- 프로그램이 과거 Δ시간(window) 동안 참조한 페이지들을 Working-Set이라고 간주
+- window size가 Δ인 경우
+\- 시각 ti에서의 working set WS(ti)
+Timeinterval[ti - Δ, ti] 사이에 참조된 서로 다른 페이지들의 집합
+\- Working-Set에 속한 page는 메모리에 유지, 속하지 않은 것은 버림
+(즉, 참조된 후 Δ 시간 동안 해당 page를 메모리에 유지한 후 버림)
+
+#### PFF(Page-Fault Frequency) Scheme
+page-fault rate의 상한값과 하한값을 둔다
+- 어떤 프로그램의 page-fault rate이 상한값보다 높음(지나치게 빈번)
+-> Working-Set 보장이 안 된 상황으로 간주하여, 해당 프로그램에게 page 수를 더 늘려줌
+- 어떤 프로그램의 page-fault rate이 하한값보다 낮음
+-> 필요 이상으로 메모리를 가지고 있다고 간주하여, 해당 프로그램으로부터 메모리를 빼앗음
+- 빈 frame이 없으면 일부 프로세스를 swap out
+
+### Page Size의 결정
+`Page size를 감소시키면`
+- 페이지 수 증가
+- 페이지 테이블 크기 증가 (더 많은 수의 엔트리 필요)
+- Internal fragmentation 감소
+- Disk transfer의 효율성 감소
+\- Seek/rotation vs transfer
+> - Seek 시간 : 오래걸림
+따라서, 가능하면 한 번 디스크 head가 이동해서 많은 양의 데이터를 읽어서 메모리에 올리는 것이 좋다.(=페이지가 큰 것이 좋다.) 페이지 크기가 작으면 Disk head가 비교적 자주 이동해야함
+- 필요한 정보만 메모리에 올라와 메모리 이용이 효율적
+\- Locality의 활용 측면에서는 좋지 않음
+
+\* page size를 키우는 것이 요즘의 추세이다.