[OS] Operating System(9-1): Main Memory - Contiguous Memory Allocation
๐ ์ด์์ฒด์ ์ ๊ณต ์์ ์ ๋ฆฌ
ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด์ ๋์คํฌ์์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ํ๋ก๊ทธ๋จ์ ๋ถ๋ฌ๋ค์ฌ์ผํจ(ํ๋ก์ธ์ค ํํ๋ก ์กด์ฌ)
- Main memory and register: CPU๊ฐ ์ง์ ์กฐํํ ์ ์๋ ์ ์ผํ ์ ์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋: ๋ ์ง์คํฐ ์ ๊ทผ์ one CPU clock (or less)๋ก ์๋ฃ๋จ โ ๊ต์ฅํ ๋น ๋ฆ, ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ๋ฌ ํด๋ญ ํ์(
stall
๋๋ฌธ!) Cache์ ์ญํ : ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ CPU register ์ฌ์ด์ ์๋ ์ฐจ์ด๋ฅผ ์ค์ด๋ ์ค๊ฐ ์ ์ฅ์
- Memory unit์ ์ญํ :
- addresses + read requests
- addresses + data and write requests
Protection
๋ฉํฐ ํ์คํน ํ๊ฒฝ์์ ๊ฐ ํ๋ก์ธ์ค๋ ์์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ ธ์ผ ํ๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ํจ๋ถ๋ก ์ ๊ทผ X. ์ด๋ฅผ ์ํด Base and Limit register ๋ฐฉ์ ์ฌ์ฉ
- Base and Limit register: ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ์ฅํ๋ ค ํ ๋
base(์์์ )
์limit(ํฌ๊ธฐ)
๋ฅผ ์ ํด์ ์ ์ฅํจBase register
: ํ๋ก์ธ์ค๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์Limit register
: ํ๋ก์ธ์ค๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ- ์ ํจ ์ฃผ์ ๋ฒ์:
Base โค ์ฃผ์ < Base + Limit
์์ Process๋ ์ฃผ์ 300040๋ถํฐ ์์
์ ๊ทผ ๊ฐ๋ฅํ ์ต๋ ์ฃผ์ 420940
Hardware address Protection
CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ค๋ฉด address๊ฐ base
์ limit
์ฌ์ด์ ์๋ ๊ฐ์ด์ด์ผ ํจ
address โฅ base
์กฐ๊ฑด ํ์ธ
address < base + limit
์กฐ๊ฑด ํ์ธ
- ๋ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ฉด โ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํ์ฉ
- ํ๋๋ผ๋ ์๋ฐํ๋ฉด โ ์ด์์ฒด์ ๋ก ํธ๋ฉ(trap) ๋ฐ์
- Base and Limit ๋ ์ง์คํฐ ์ค์ ์ privilege instruction
- ์ด ๋ ์ง์คํฐ๋ฅผ OS๋ ์ค์ ๊ฐ๋ฅํ์ง๋ง, ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝ X
Address Binding
๐Address Binding: ํ๋ก๊ทธ๋จ์ ์ฃผ์๋ฅผ ๊ณ์ฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ์ฐ๊ฒฐํ๋ ๊ณผ์
โ ์ฃผ์์ ์งํ ๊ณผ์ :
- Source code: symbolic address(๋ณ์๋ช , ํจ์๋ช )
- Compile code: relocatable address(์๋์ ์์น)
- symbolic๋ ์ฐ๊ธด ์
- Linker or loader: absolute addresses ์ฌ์ฉ (๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์ฃผ์ ์ง์ )
ํ๋์๋ ์ค์ ๋ก ์ฌ์ฉํ๊ฒ ๋ ๋ ์ฃผ์๋ฅผ ํ ๋นํ๊ฒ ๋จ
โ Binding์ด ๋ฐ์ํ๋ 3๊ฐ์ง ์์ :
- Compile time
- ๋ฉ๋ชจ๋ฆฌ ์์น๊ฐ ๋ฏธ๋ฆฌ ์๋ ค์ง ๊ฒฝ์ฐ
- absolute code ์์ฑ
- ์์ ์์น๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ฌ์ปดํ์ผ ํ์
- Load time
- ์ปดํ์ผ ์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ
- relocatable code ์์ฑ
- loader๊ฐ ์ต์ข ์ฃผ์ ๊ฒฐ์
- Execution time(ํ๋ ๋ฐฉ์)
- ์คํ ์ค ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ๋ก ์ด๋ ๊ฐ๋ฅ
- swapping, paging ์์คํ ์์ ์ฌ์ฉ
- ํ๋์จ์ด ์ง์(๊ฐ์๋ฉ๋ชจ๋ฆฌ ๊ฐ๋ )์ด ํ์ํจ(MMU - Memory Management Unit)
๐์ฒ๋ฆฌ ๋จ๊ณ๋ณ ์ค๋ช :
- Compile Time
- ์์ค ํ๋ก๊ทธ๋จ โ ์ค๋ธ์ ํธ ๋ชจ๋ ๋ณํ
- ์ปดํ์ผ๋ฌ/์ด์ ๋ธ๋ฌ๊ฐ ์ํ
- ์ฌ๋ณผ๋ฆญ ์ฃผ์๋ฅผ ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ์ฃผ์๋ก ๋ณํ
- Load Time
- ๋งํค์ง ์๋ํฐ: ์ฌ๋ฌ ์ค๋ธ์ ํธ ๋ชจ๋์ ๊ฒฐํฉํ์ฌ ๋ก๋ ๋ชจ๋ ์์ฑ
- loader: ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฐํฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
- ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ์ฃผ์๋ฅผ ์ ๋ ์ฃผ์๋ก ๋ณํ
- Execution Time
- Dynamic Linking: ํ์ํ ๋๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋
- ์คํ ์ค ์ฃผ์ ๋ณํ (๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์คํ )
Logical vs Physical Address Space
- Logical address: CPU์ ์ํด ์์ฑ๋จ โ main memory์ ์ฃผ์๊ฐ ์๋! ์ฆ, ๊ฐ์์ฃผ์๋ผ๋ ๋ป
- ํ๋ก๊ทธ๋๋จธ์ ํ๋ก๊ทธ๋จ์ด ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์
- Physical address: ์ค์ ๋ฉ๋ชจ๋ฆฌ ํ๋์จ์ด๊ฐ ๋ณด๊ณ , RAM์์ ์ค์ ๋ก ์ฌ์ฉ๋๋ ์ฃผ์
- memory unit์ด ๋ณด๋ ์ฃผ์
์๋๋ ๋ ผ๋ฆฌ์ ์ธ ์ฃผ์์ ์ค์ ์ฃผ์๊ฐ ๊ฐ์ง๋ง(compile/load time) ๊ทธ๋ฐ๋ฐ ์คํํ๊ฒ ๋๋ฉด ๋ ผ๋ฆฌ ์ฃผ์์ ๋ฌผ๋ฆฌ ์ฃผ์๊ฐ ๋ฌ๋ผ์ง
Memory-Management Unit(MMU)
๐MMU: ๋ ผ๋ฆฌ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ
ํ๋ก์ธ์ค A์ Relocation Register = 14000
ํ๋ก์ธ์ค B์ Relocation Register = 30000ํ๋ก์ธ์ค A ์คํ ์ค:
CPU ์์ฑ ๋ ผ๋ฆฌ ์ฃผ์: 346
MMU ๋ณํ: 346 + 14000 = 14346 (๋ฌผ๋ฆฌ ์ฃผ์)ํ๋ก์ธ์ค B ์คํ ์ค:
CPU ์์ฑ ๋ ผ๋ฆฌ ์ฃผ์: 346 (๊ฐ์ ๋ ผ๋ฆฌ ์ฃผ์!)
MMU ๋ณํ: 346 + 30000 = 30346 (๋ค๋ฅธ ๋ฌผ๋ฆฌ ์ฃผ์)
โก ๊ฐ์ ๋ ผ๋ฆฌ ์ฃผ์๊ฐ ๋ค๋ฅธ ๋ฌผ๋ฆฌ ์์น๋ฅผ ๊ฐ๋ฆฌํด (ํ๋ก์ธ์ค ๋ ๋ฆฝ์ฑ)
Dynamic Loading
์ ์ฒด ํ๋ก๊ทธ๋จ์ด ํ๋ฒ์ ํ์ํ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ผ๋ ํ๋ฒ์ ๋ชจ๋ memory์ ํ ๋นํ ํ์ X
๐Dynamic Loading: ํ์ํ ๋๋ง ํ๋ก๊ทธ๋จ ์ผ๋ถ๋ถ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๊ธฐ๋ฒ
- ์ ์ฒด ํ๋ก๊ทธ๋จ์ ๋ฏธ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ X
- Routine์ด ํธ์ถ๋ ๋๋ง ํด๋น ๋ฃจํด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
- ๋ชจ๋ routine์ ๋์คํฌ์ relocatableํ ํํ๋ก ์ ์ฅ
โ ์ฅ์ :
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ
- ๋์ฉ๋ ํ๋ก๊ทธ๋จ ์ง์
Dynamic Linking
๐Dynamic Linking: ํ๋ก๊ทธ๋จ ์คํ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฒ loadํ ๋ฐ์ด๋๋ฆฌ ์์ ๋ด๊ฐ ๋ง๋ค์ง ์์ ์ฝ๋๋ฅผ ํ์ฉํ๊ฒ ํ๋ ๊ฒ(ex: library)
- Static linking: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์คํ ํ์ผ์ ํฌํจ
Dynamic linking: ์คํ ์์ ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
- stub code: ์์ ์ฝ๋ ์กฐ๊ฐ, ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ โ๋๋ฆฌ์ธโ ์ญํ
- ํ๋ก๊ทธ๋จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ํธ์ถํ๋ฉด stub์ด ์ค์ ํจ์์ ์์น๋ฅผ ์ฐพ์ ์ฐ๊ฒฐํจ
OS๋ dynamic linking์์ ์ฃผ์ ๊ณต๊ฐ ๊ด๋ฆฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ฉ, ์ฃผ์ ์ฐ๊ฒฐ์ ๋ด๋น
- Dynamic linking = shared libraries
- ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ๊ฐ๋ฅ Dynamic loading๊ณผ ๋ฌ๋ฆฌ dynamic linking๊ณผ shared libraries๋ OS์ ๋์์ด ํ์
Contiguous Memory Allocation
๐Contiguous Memory Allocation: ํ๋ก์ธ์ค๋ฅผ ํ์ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ํด ์ชผ๊ฐ์ง ๊ฒ์ด ์๋๋ผ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ฒ
โ Main memory๋ ๋๊ฐ์ง๋ก ๊ตฌ๋ถ๋จ:
- Low memory: ์ด์์ฒด์ ๊ฐ ์์น(interrupt vector ํฌํจ)
- High Memory: ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ค์ด ์์น
- ๊ฐ ํ๋ก์ธ์ค๋ single contiguous section์ ๋ฐฐ์น
- ๋ ผ๋ฆฌ์ ์ผ๋ก๋ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ์ด์ง๋ง ๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ๊ทธ๋ ์ง ์์ ์๋ ์์
- ๊ฐ ํ๋ก์ธ์ค๋ single contiguous section์ ๋ฐฐ์น
ํ๋ ์ฌ์ฉ ํํ๋ ์๋
- Relocation Register
- ํ๋ก์ธ์ค์ ์์ ๋ฌผ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅ
- ๋
ผ๋ฆฌ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํ:
physical address = logical address + Relocation Register
- Limit Register
- ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ ์ ์๋ ์ต๋ ๋ ผ๋ฆฌ ์ฃผ์ ์ ์ฅ
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋ณดํธ:
logical address < Limit Register
Varible Partition
partition์ ๊ฐ์ ๋๋ฌธ์ ๋์ ์คํ ๊ฐ๋ฅํ ํ๋ก์ธ์ค ์๊ฐ ์ ํ๋๋ค ๋ ๋ง์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ค๋ฉด ๋ ๋ง์ ํํฐ์ ํ์!
๊ทธ๋์ ํจ์จ์ฑ์ ์ํด ๊ฐ ํ๋ก์ธ์ค์ ์ค์ ํฌ๊ธฐ์ ๋ง์ถฐ partition ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋๊ฒ Varible Partition
โ ๋์ ์๋ฆฌ:
- Hole ๊ด๋ฆฌ
- Hole: ์ฌ์ฉ ๊ฐ๋ฅํ memory block, ๋ค์ํ ํฌ๊ธฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ์ฒด์ ๋ถ์ฐ๋์ด์์
- ๋์ ํ ๋น: ํ๋ก์ธ์ค ๋์ฐฉ ์ ์ถฉ๋ถํ ํฐ hole์์ ํ์ํ ๋งํผ๋ง ํ ๋น
- ์๋ ๊ฒฐํฉ: ํ๋ก์ธ์ค ์ข ๋ฃ ์ ์ธ์ ํ ๋น ํํฐ์ ๋ค์ด ์๋์ผ๋ก ํ๋์ ํฐ hole๋ก ํตํฉ
- OS์ ์ญํ
- allocated Partiion: ๊ฐ ํ๋ก์ธ์ค์ ์์น, ํฌ๊ธฐ, ID ์ ๋ณด ๊ด๋ฆฌ
- free partitions(Hole): ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์์น์ ํฌ๊ธฐ ์ ๋ณด ๊ด๋ฆฌ
process 8์ด ์ข ๋ฃ(hole๋ก ๋ณํ)๋ ํ 9๋ฒ์ด ์์ฒญ๋๊ณ ๋ค์ด์ด
๊ทธ ๋ค์ 5๋ฒ์ด ์ข ๋ฃ๋จ(new hole)
์ฌ๋ฌ ๊ฐ์ hole์ด ๋ถ์ฐ ์กด์ฌ
๊ทธ๋ผ ๋จ์ hole๋ค์ ํ๋ก์ธ์ค๋ฅผ ์ด๋ป๊ฒ ํ ๋นํด์ผ ์ข์๊น?
๐๊ทธ ๋ฐฉ์์๋ 3๊ฐ์ง๊ฐ ์๊ณ ๋ฆฌ์ฆ ์กด์ฌ:
- First-FIt: ์ฒซ ๋ฒ์จฐ๋ก ์์ฒญ ํฌ๊ธฐ๋ณด๋ค ํฐ hole์ ๋ฐ๊ฒฌํ๋ฉด ์ฆ์ ํ ๋น
- Best-FIt: ํ ๋นํ์ ๋ ๋จ๋ ์กฐ๊ฐ์ด ๊ฐ์ฅ ์์ ๊ณณ๋ถํฐ ํ ๋นํด์ค
- Worst-FIt: ๊ฐ์ฅ ํฐ ๊ณณ์์ ์๋ผ์ค์ ํ ๋น
์ผ๋ฐ์ ์ผ๋ก๋ First, Best Fit๋ง ์ฌ์ฉํ๊ณ worst๋ ๋น๊ต๋ฅผ ์ํด ์กด์ฌ First-Fit์ด ๊ฐ์ฅ ๋น ๋ฆ
์์ ์์์ ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ Hole์ด ์ฐ์์ ์ด์ง ์๊ณ , ๊ตฌ๋ฉ์ด ๋์๋ ํํ๋ฅผ ๋ค๋ค.
ํจ์จ์ฑ์ ์ํด hole๋ค์ ์ฐ์์ ์ผ๋ก ๋ง๋ค์ด์ผํ๋๋ฐ ์ด๋ป๊ฒ ํด์ผํ ๊น?
Fragmentation
- External Fragmentation: ๋น ๊ณต๊ฐ์ด ์ถฉ๋ถํ์ง๋ง ๋๋ฌด ์๊ณ ์ฐ์์ ์ด์ง ์์์ ๋ชป์ฐ๋ ๊ณต๊ฐ
- Variable partition์์ ํ๋ก์ธ์ค๋ค์ด ์ข ๋ฃ๋๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ๊ณณ๊ณณ์ ์์ hole๋ค์ด ๋ถ์ฐ
- Internal Fragmentation: ์ํ๋ ๋งํผ ํ ๋นํด์คฌ๋๋ฐ ๋ค ํ์ฉํ์ง์๊ณ ๋
๋๋ ๊ณต๊ฐ(200์์ฒญ ํ 100๋ง ์ฌ์ฉ)
- ํํฐ์ ๋ด๋ถ์์ ์ฌ์ฉ๋์ง ์๋ ๊ณต๊ฐ
- 50-percent rule:
First-Fit
์ N๊ฐ์ ๋ธ๋ก์ด ํ ๋น๋์๋ค๋ฉด ํ๊ท 0.5N๊ฐ์ ๋ธ๋ก์ด ์กฐ๊ฐ๋์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ถ์์ด ์กด์ฌ ์ด๋ ๊ฒ ๋๋ฉด ์ ์ฒด์์ 0.5N/(N+0.5N) = 1/3 = 33%์ ์์ค๋ฅ ๋ฐ์
external fragmentation์ ์ค์ด๊ธฐ ์ํด compaction์ ํด์ผํจ
- Compaction: ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ ์ฌ๋ฐฐ์น
- ๋ชจ๋ ๋น ๊ณต๊ฐ์ ํ๋์ ํฐ ๋ธ๋ก์ผ๋ก ํตํฉ
- ํ๋ก์ธ์ค๋ค์ ๋ฉ๋ชจ๋ฆฌ ํ์ชฝ ๋์ผ๋ก ์ด๋
- โ ์ฐ์๋ ํฐ ์ฌ์ ๊ณต๊ฐ ํ๋ณด
โ์ ์ฝ ์กฐ๊ฑด ์กด์ฌ
- ๋์ ์ฌ๋ฐฐ์น ํ์
- Static relocation: ์ปดํ์ผ ์ ์ฃผ์ ๊ณ ์ โ Compaction X
- Dynamic relocation: ์คํ ์ ์ฃผ์ ๋ณํ โ Compaction O
- ์คํ ์์ ์ ์ฝ
- Compaction์ ์คํ ์ค์๋ง ์ํ ๊ฐ๋ฅ(load ์์ ์๋ ์ํ X)
- I/O ๋ฌธ์
- I/O ์งํ ์ค์ธ ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ ๋ถ๊ฐ
- I/O๋ฅผ ์คํ ์ค์ ์กฐ๊ฐ๋ชจ์์ ํ๊ฒ ๋๋ฉด ๋ฒํผ์ ์์น๊ฐ ๋ณ๊ฒฝ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์
- ํด๊ฒฐ์ฑ 1: I/O ์ค์ธ job์ ๋ฉ๋ชจ๋ฆฌ์ latch (๊ณ ์ )
- ํด๊ฒฐ์ฑ 2: I/O๋ฅผ OS ๋ฒํผ๋ก๋ง ์ํ
- main memory ๋ง๊ณ ๋ backing store๋ ๋์ผํ ๋จํธํ ๋ฌธ์ ๊ฐ ์กด์ฌ