Search
Duplicate

가상 λ©”λͺ¨λ¦¬

Demand Paging

β€’
ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ κ·Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬μ„±ν•˜λŠ” μ£Όμ†Œκ³΅κ°„μ˜ νŽ˜μ΄μ§€λ₯Ό μ „λΆ€ λ©”λͺ¨λ¦¬λ₯Ό ν•œκΊΌλ²ˆμ— μ˜¬λ¦¬λŠ” 게 μ•„λ‹ˆλΌ demand paging 기법을 μ‚¬μš©
β€’
μš”μ²­μ΄ 됐을 λ•Œ λ©”λͺ¨λ¦¬μ— μ˜¬λ¦°λ‹€.
β€’
IO μ–‘μ˜ κ°μ†Œ
β—¦
ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” μ£Όμ†Œκ³΅κ°„ μ€‘μ—μ„œ μ‹€μ œλ‘œ 빈번히 μ‚¬μš©λ˜λŠ” 뢀뢄은 μ§€κ·Ήνžˆ μ œν•œμ 
β—¦
쒋은 μ†Œν”„νŠΈμ›¨μ–΄μΌμˆ˜λ‘ 방어적인 μ½”λ“œκ°€ λŒ€λΆ€λΆ„
β—¦
이런 방어적인 μ½”λ“œλ₯Ό ν•œλ²ˆμ— 올리면 λ©”λͺ¨λ¦¬ λ‚­λΉ„
β€’
물리 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ κ°μ†Œ
β€’
λΉ λ₯Έ 응닡 μ‹œκ°„
β€’
더 λ§Žμ€ ν”„λ‘œκ·Έλž¨ 수용 κ°€λŠ₯
β€’
우츑의 원톡은 λ””μŠ€ν¬(swap area)
β€’
valid/invalid bit 의 μ‚¬μš©
β—¦
invalid
β–ͺ
μ‚¬μš©λ˜μ§€ μ•ŠλŠ” μ£Όμ†Œ μ˜μ—­
β–ͺ
νŽ˜μ΄μ§€κ°€ 물리적 λ©”λͺ¨λ¦¬μ— μ—†λŠ” 경우
β—¦
μ²˜μŒμ—λŠ” λͺ¨λ“  page entry κ°€ invalid 둜 μ΄ˆκΈ°ν™”
β—¦
address translation μ‹œ invalid bit 이 set λ˜μ–΄μžˆμœΌλ©΄ page fault
β€’
μ˜ˆμ‹œ
β—¦
1번 νŽ˜μ΄μ§€μ— μ ‘κ·Όν•˜λ €κ³  λ³΄λ‹ˆ page table μ—μ„œ invalid bit 이닀. 그러면 이 νŽ˜μ΄μ§€κ°€ λ©”λͺ¨λ¦¬μ— μ—†λ‹€λŠ” 뜻
β—¦
λ””μŠ€ν¬μ—μ„œ λ©”λͺ¨λ¦¬λ‘œ μ˜¬λ¦°λ‹€. β†’ IO μž‘μ—… β†’ μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€κ°€ 직접 λͺ»ν•˜λŠ” 일
β—¦
page fault
β—¦
그러면 CPU λŠ” 운영 μ²΄μ œμ— λ„˜μ–΄κ°„λ‹€.
β—¦
운영 μ²΄μ œλŠ” fault λ‚œ νŽ˜μ΄μ§€λ₯Ό λ©”λͺ¨λ¦¬μ— μ˜¬λ¦°λ‹€.

page fault

β€’
invalid page λ₯Ό μ ‘κ·Όν•˜λ©΄ MMUκ°€ trap 을 λ°œμƒμ‹œν‚΄
β€’
kernel mode 둜 λ“€μ–΄κ°€μ„œ page fault handler κ°€ invoke 됨
β€’
page fault 처리 루틴
1.
invalid reference 인지 확인(bad address, protection violation) β†’ process λ₯Ό abort ν•œλ‹€.
2.
λΉ„μ–΄μžˆλŠ” page frame 을 κ°€μ Έμ˜€κ³  빈 νŽ˜μ΄μ§€κ°€ μ—†μœΌλ©΄ μ«“μ•„λ‚΄κ³  λΊμ–΄μ˜¨λ‹€.
3.
ν•΄λ‹Ή νŽ˜μ΄μ§€λ₯Ό disk μ—μ„œ memory 둜 μ½μ–΄μ˜¨λ‹€.
a.
disk IO κ°€ λλ‚˜κΈ°κΉŒμ§€ 이 ν”„λ‘œμ„ΈμŠ€λŠ” CPU λ₯Ό 선점당함(block)
b.
disk read κ°€ λλ‚˜λ©΄ page table entry λ₯Ό κΈ°λ‘ν•˜κ³  valid 둜 λ°”κΎΌλ‹€.
c.
ready queue 에 process λ₯Ό insert ν•œλ‹€.
β€’
emtry frame 이 μ—†λŠ” 경우 page replacement λ₯Ό ν•΄μ•Όν•˜κ³  replacement algorithm 으둜 page fault rate 을 μ΅œμ†Œν™”ν•œλ‹€.

Replace Algorithm

optimal algorithm

β€’
κ°€μž₯ λ¨Ό λ―Έλž˜μ— μ°Έμ‘°λ˜λŠ” page λ₯Ό replace
β€’
μ–΄λ–€ νŽ˜μ΄μ§€κ°€ 참쑰될 지 μ•ˆλ‹€λŠ” 가정이 μžˆμ–΄μ•Ό ν•œλ‹€.
β€’
κ·Έλž˜μ„œ μ‹€μ œλ‘œ μ μš©ν•˜μ§€λŠ” λͺ»ν•œλ‹€.
β€’
μ‹€μ œ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•˜λŠ” λ‹€λ₯Έ μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯에 λŒ€ν•œ upper bound λ₯Ό μ œκ³΅ν•œλ‹€.

FIFO algorithm

β€’
κ°€μž₯ λ¨Όμ € λ“€μ–΄μ˜¨ 것을 replace
β€’
λ©”λͺ¨λ¦¬ 크기λ₯Ό λŠ˜λ¦¬λŠ”λ° μ„±λŠ₯이 λ‚˜λΉ μ§€λŠ”(fault λ₯Ό 더 많이 냄) 특이점이 μžˆλ‹€.

Least Recently Used algorithm

β€’
κ°€μž₯ 였래 전에 참쑰된 것을 replace

Least Frequently Used algorithm

β€’
μ°Έμ‘° νšŸμˆ˜κ°€ κ°€μž₯ 적은 νŽ˜μ΄μ§€λ₯Ό replace
β€’
μ΅œμ € μ°Έμ‘° νšŸμˆ˜κ°€ μ—¬λŸ¬κ°œμΈ 경우
β—¦
LUF μžμ²΄μ—μ„œλŠ” μž„μ˜λ‘œ μ„ μ •
β—¦
μ„±λŠ₯ ν–₯상을 μœ„ν•΄ μ—¬λŸ¬ νŽ˜μ΄μ§€ 쀑 PRU μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„ κ°€λŠ₯
β€’
μž₯단점
β—¦
μž₯기적인 μ‹œκ°„ 규λͺ¨λ₯Ό 보기 λ•Œλ¬Έμ— page 의 인기도 반영
β—¦
μ΅œκ·Όμ„± 반영 λΆˆκ°€
β—¦
LRU 보닀 κ΅¬ν˜„μ΄ 볡작

LRU vs LFU

LRU λŠ” 리슀트둜 κ΅¬ν˜„ν•œ 경우 μ‹œκ°„ λ³΅μž‘λ„κ°€ O(1)
LFU λŠ” 리슀트둜 κ΅¬ν˜„ν•˜λ©΄ O(N) μ‹œκ°„ λ³΅μž‘λ„
LFU λ₯Ό νž™μœΌλ‘œ κ΅¬ν˜„ν•˜λ©΄ O(logN)
CPUκ°€ μš”μ²­ν•œ νŽ˜μ΄μ§€ μˆœμ„œ
1,1,1,1,2,2,3,3,2,4,5
β€’
LRU λŠ” κ°€μž₯ 였래 전에 μ°Έμ‘°ν•œ νŽ˜μ΄μ§€λ₯Ό μ‚­μ œ - 1번 νŽ˜μ΄μ§€(λ„λ‘‘μ§ˆ μ˜ˆμ‹œ)
β€’
LFU λŠ” κ°€μž₯ μ°Έμ‘° νšŸμˆ˜κ°€ 적은 νŽ˜μ΄μ§€λ₯Ό μ‚­μ œ - 4번 νŽ˜μ΄μ§€(λ„μ„œκ΄€ μ±… λŒ€μΆœ μ˜ˆμ‹œ)
β—¦
κ°„κ³Όν•˜λŠ” 것은 μ‹œκ°„μ— λ”°λ₯Έ 예츑이 λΆ€μ‘±

λ‹€μ–‘ν•œ 캐싱 ν™˜κ²½

β€’
캐싱 기법
β—¦
ν•œμ •λœ λΉ λ₯Έ 곡간에 μš”μ²­λœ 데이터λ₯Ό μ €μž₯ν•΄ λ‘μ—ˆλ‹€κ°€ 후속 μš”μ²­μ‹œ μΊμ‹œλ‘œλΆ€ν„° 직접 μ„œλΉ„μŠ€ν•˜λŠ” 방식
β—¦
paging system 외에도 cache memory, buffer caching, web caching λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ μ‚¬μš©
β€’
μΊμ‹œ 운영의 μ‹œκ°„ μ œμ•½
β—¦
ꡐ체 μ•Œκ³ λ¦¬μ¦˜μ—μ„œ μ‚­μ œν•  ν•­λͺ©μ„ κ²°μ •ν•˜λŠ” 일에 μ§€λ‚˜μΉ˜κ²Œ λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” 경우 μ‹€μ œ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•  수 μ—†μŒ
β€’
사싀 LRU, LFU λŠ” 가상 λ©”λͺ¨λ¦¬ νŽ˜μ΄μ§• κΈ°λ²•μ—μ„œ μ‚¬μš©ν•  수 μ—†λ‹€.
β—¦
LRU, LFU λ“± 이전 μ°Έμ‘° λ‚΄μš©μ„ μ €μž₯ν•˜λ €λ©΄ ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜ 둜직이 μˆ˜ν–‰λ˜μ–΄μ•Ό ν•˜λŠ”λ°, page κ°€ 이미 λ©”λͺ¨λ¦¬μ— μžˆλŠ” κ²½μš°μ—λŠ” OS κ°€ CPU μ œμ–΄κΆŒμ„ 얻지 λͺ»ν•΄ ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜ 둜직 μˆ˜ν–‰μ„ ν•  μˆ˜κ°€ μ—†λ‹€.

Clock algorithm

β€’
LRU 근사(approximation) μ•Œκ³ λ¦¬μ¦˜
β€’
second chance algorithm, Not Used Recently λ˜λŠ” Not Recently Used λ“±μœΌλ‘œ 뢈림
β€’
β€’
reference bit 을 μ‚¬μš©ν•œλ‹€. νŽ˜μ΄μ§€ μ°Έμ‘°κ°€ λ°œμƒν•˜λ©΄ ν•˜λ“œμ›¨μ–΄μ—μ„œ ν•΄λ‹Ή νŽ˜μ΄μ§€μ˜ reference bit 을 1둜 λ°”κΎΌλ‹€.
β€’
0 의 μ˜λ―ΈλŠ” μ‹œκ³„ λ°”λŠ˜μ΄ ν•œλ°”ν€΄ λ„λŠ” λ™μ•ˆ μ°Έμ‘°κ°€ μ—†μ—ˆλ‹€.
β€’
1 은 μ΅œμ†Œ ν•œ 번 μ°Έμ‘°κ°€ μžˆμ—ˆλ‹€. κ·Έλž˜μ„œ OS κ°€ 내쫓을 νŽ˜μ΄μ§€ 찾을 λ•Œ 1이면 0으둜 λ°”κΎΈκ³  λ‹€μŒμœΌλ‘œ λ„˜μ–΄κ°
β€’
modified bit(dirty bit) 을 ν•¨κ»˜ μ‚¬μš©ν•΄μ„œ μ°Έμ‘° 이외에도 λ³€κ²½ νŽ˜μ΄μ§€μ— λŒ€ν•΄μ„œλ„ 기둝 μ €μž₯

page frame allocation

β€’
각 ν”„λ‘œμ„ΈμŠ€μ— μ–Όλ§ˆλ§ŒνΌμ˜ page frame 을 ν• λ‹Ήν•  것인가?
β€’
allocation 의 ν•„μš”μ„±
β—¦
λ©”λͺ¨λ¦¬ μ°Έμ‘° λͺ…λ Ήμ–΄ μˆ˜ν–‰μ‹œ λͺ…λ Ήμ–΄, 데이터 λ“± μ—¬λŸ¬ νŽ˜μ΄μ§€ λ™μ‹œμ— μ°Έμ‘°
β—¦
λͺ…λ Ήμ–΄ μˆ˜ν–‰μ„ μœ„ν•΄ μ΅œμ†Œν•œ ν• λ‹Ήλ˜μ–΄μ•Ό ν•˜λŠ” frame 의 μˆ˜κ°€ 있음
β—¦
loop λ₯Ό κ΅¬μ„±ν•˜λŠ” page 듀은 ν•œκΊΌλ²ˆμ— allocate λ˜μ–΄μ•Ό 함
β—¦
μ΅œμ†Œν•œμ˜ allocation 이 μ—†μœΌλ©΄ 맀 loop λ§ˆλ‹€ page fault
β€’
equal allocation: λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ— λ˜‘κ°™μ€ 갯수 ν• λ‹Ή
β€’
proportional allocation: ν”„λ‘œμ„ΈμŠ€ 크기에 λΉ„λ‘€ν•˜μ—¬ ν• λ‹Ή
β€’
priority allocation: ν”„λ‘œμ„ΈμŠ€μ˜ priority 에 따라 λ‹€λ₯΄κ²Œ ν• λ‹Ή

global replacement

β€’
replace μ‹œ λ‹€λ₯Έ process 에 ν• λ‹Ήλœ frame 을 빼앗을 수 μžˆλ‹€.
β€’
process 별 ν• λ‹ΉλŸ‰ 쑰절 κ°€λŠ₯
β€’
working set, PFF μ•Œκ³ λ¦¬μ¦˜

local replacement

β€’
μžμ‹ μ—κ²Œ ν• λ‹Ήλœ frame λ‚΄μ—μ„œλ§Œ replacement

Thrashing