๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] 8. Memory Management

by nitronium102 2023. 1. 8.

Logical vs Physical Address

1) Logical Address(virtual address)

- ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฐ€์ƒ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„ (CPU๊ฐ€ ๋ณด๋Š” ์ฃผ์†Œ)

- ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค 0๋ฒˆ์ง€๋ถ€ํ„ฐ ์‹œ์ž‘

 

2) Physical Address

- ๋ฉ”๋ชจ๋ฆฌ์— ์‹ค์ œ ์˜ฌ๋ผ๊ฐ€๋Š” ์œ„์น˜

 

* ์ฃผ์†Œ ๋ฐ”์ธ๋”ฉ

- ํŠน์ • ์‹œ์Šคํ…œ์˜ Logical Addr๋ฅผ Physical Addr๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ

(Symbolic addr(๋ณ€์ˆ˜/ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ) -> Logical addr -> Physical addr)

 

์ฃผ์†Œ ๋ฐ”์ธ๋”ฉ(Address binding)

์ฃผ์†Œ ๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง€๋Š” ์‹œ๊ธฐ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜

1) Compile time binding

- ์ปดํŒŒ์ผ ์‹œ ์ฃผ์†Œ ๋ณ€ํ™˜(Logical addr์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ) -> ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฆ˜์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

- ์ ˆ๋Œ€ ์ฝ”๋“œ : ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์œผ๋ฉด ์ปดํŒŒ์ผ ๋‹ค์‹œ ํ•ด์•ผ ํ•จ

2) Load time binding

- ์‹คํ–‰ ์‹œ์ž‘ ์‹œ ์ฃผ์†Œ ๋ณ€ํ™˜

- ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅ ์ฝ”๋“œ

3) Execution time binding(Runtime binding)

- ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์ค‘์—๋„ ์ฃผ์†Œ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ

- ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅ ์ฝ”๋“œ

- CPU๊ฐ€ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋งˆ๋‹ค binding์„ ์ ๊ฒ€ํ•ด์•ผ ํ•จ -> HW์ ์ธ ์ง€์›์ด ํ•„์š”

 

MMU(Memory-Management Unit)

2๊ฐœ์˜ register๋ฅผ ์ด์šฉํ•ด logical addr -> physical addr๋กœ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ์ œ๊ณตํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์œ ๋‹›

1) relocation register(base register) : ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ์ตœ์†Ÿ๊ฐ’

-> (base register + ์‹œ์ž‘ ์œ„์น˜)๋ฅผ ํ†ตํ•ด ์‹ค์ œ physical memory์˜ ์ฃผ์†Œ ์ œ๊ณต

2) limit register : ์•…์„ฑ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ณต๊ฒฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๋…ผ๋ฆฌ์  ์ฃผ์†Œ์˜ ๋ฒ”์œ„๋ฅผ ์ฒดํฌ

 

Terminologies

1) Dynamic Loading

ํ”„๋กœ์„ธ์Šค์˜ ๋ฃจํ‹ด์ด ํ˜ธ์ถœ๋  ๋•Œ์— ๋ฉ”๋ชจ๋ฆฌ์— loadํ•˜๋Š” ๊ฒƒ

- ๊ฐ€๋”์”ฉ ์‚ฌ์šฉ๋˜๋Š” ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์œ ์šฉ(์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด)

- memory utilization์˜ ํ–ฅ์ƒ

- ์šด์˜์ฒด์ œ์˜ ํŠน๋ณ„ํ•œ ์ง€์› ์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์—์„œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ(OS๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ ๊ฐ€๋Šฅ)

cf) ์šด์˜์ฒด์ œ์˜ paging ๊ธฐ๋ฒ•

 

2) Dynamic Linking

Linking์„ ์‹คํ–‰ ์‹œ๊ฐ„execution time๊นŒ์ง€ ๋ฏธ๋ฃจ๋Š” ๊ธฐ๋ฒ•

- Static LInking : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํŒŒ์ผ ์ฝ”๋“œ์— ํฌํ•จ๋จ

- Dynamic Linking : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ ์‹œ stub์„ ํ†ตํ•ด Linkํ•จ (shared-ilbrary/dml ํŒŒ์ผ)

 

3) Overlays(manual overlay)

๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค์˜ ๋ถ€๋ถ„ ์ค‘ ์‹ค์ œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ

- ํ”„๋กœ์„ธ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํด ๋•Œ ์œ ์šฉ

- ์šด์˜์ฒด์ œ์˜ ํŠน๋ณ„ํ•œ ์ง€์› ์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž์ฒด์—์„œ ๊ตฌํ˜„(์ดˆ์ฐฝ๊ธฐ -> ๋ณต์žกํ•˜๋‹ค)

 

4) Swapping

- Swapping : ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ backing store๋กœ ์ซ“์•„๋‚ด๋Š” ๊ฒƒ

- Backing store(swap area) : ๋””์Šคํฌ

- Swap In/Swap out : ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ swapper์— ์˜ํ•ด ์„ ์ •

--- priority-based CPU scheduiing algorithm

--- execition time binding์ด ์ง€์›๋˜๋ฉด ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

--- swap time์€ ๋Œ€๋ถ€๋ถ„ transfer time์— ๋น„๋ก€(swap๋˜๋Š” ์–‘์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„)

 

Allocation of Physical Memory

* ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๊ตฌ๋ถ„

1) OS ์ƒ์ฃผ ์˜์—ญ : ๋‚ฎ์€ ์ฃผ์†Œ ์˜์—ญ

2) ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ์˜์—ญ : ๋†’์€ ์ฃผ์†Œ ์˜์—ญ

 

* ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ์˜์—ญ์˜ ํ• ๋‹น ๋ฐฉ๋ฒ•

1) Contiguous allocation : ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฐ์†์ ์ธ ๊ณต๊ฐ„์— ์ ์žฌ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ

- Fixed partition allocation(๊ณ ์ • ๋ถ„ํ•  ๋ฐฉ์‹)

- Variable partition allocation(๊ฐ€๋ณ€ ๋ถ„ํ•  ๋ฐฉ์‹)

2) Noncontiguous allocation : ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ์˜์—ญ์— ๋ถ„์‚ฐ๋˜์–ด ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Œ

- Paging

- Segmentation

- Paged segmentation

 

1. Contiguous Allocation 

- Fixed partition allocation(๊ณ ์ • ๋ถ„ํ•  ๋ฐฉ์‹) : internal/external fragmentation ๋ฐœ์ƒ

- Variable partition allocation(๊ฐ€๋ณ€ ๋ถ„ํ•  ๋ฐฉ์‹) : external framentation ๋ฐœ์ƒ

 

- external fragment (ํ”„๋กœ๊ทธ๋žจ ํฌ๊ธฐ > ๋ถ„ํ• ์˜ ํฌ๊ธฐ) : ํ”„๋กœ๊ทธ๋žจ์ด ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์—†๋Š” ์ž‘์€ ๋ถ„ํ•  ํ†ต์งธ

- internal fragment (ํ”„๋กœ๊ทธ๋žจ ํฌ๊ธฐ < ๋ถ„ํ• ์˜ ํฌ๊ธฐ) : ํ•˜๋‚˜์˜ ๋ถ„ํ•  ๋‚ด๋ถ€์—์„œ ๋‚จ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ

 

 

์ค‘๊ฐ„์ค‘๊ฐ„์— Hole(๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค

 

* Dynamic-Storage-Allocation-Problem

๊ฐ€๋ณ€ ๋ถ„ํ•  ๋ฐฉ์‹์—์„œ size n์ธ ์š”์ฒญ์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ hole์„ ์ฐพ๋Š” ๋ฌธ์ œ

 

1) โœ…first-fit : size n ์ด์ƒ ์ค‘ ์ตœ์ดˆ๋กœ ์ฐพ์•„์ง€๋Š” hole์— ํ• ๋‹น (low overhead)

2) โœ…best-fit : size n ์ด์ƒ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ hole์— ํ• ๋‹น (good for future)

- ๋งŽ์€ ์ˆ˜์˜ ์•„์ฃผ ์ž‘์€ hole์ด ์ƒ์„ฑ

3) worst-fit : ๊ฐ€์žฅ ํฐ hole์— ํ• ๋‹น

- ์ƒ๋Œ€์ ์œผ๋กœ ์•„์ฃผ ํฐ hole๋“ค์ด ์ƒ์„ฑ

 

* Compaction

external fragment๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ•œ ๋ฐฉ๋ฒ•

์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ•œ ๊ตฐ๋ฐ๋กœ ๋ชฐ๊ณ , hole์„ ๋‹ค๋ฅธ ํ•œ ๊ณณ์œผ๋กœ ๋ชฐ์•„ ํฐ block์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

- ๋งค์šฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ฐฉ๋ฒ•

- execution time binding์ด ์ง€์›๋˜์–ด์•ผ๋งŒ ๊ฐ€๋Šฅ

 

2. Noncontiguous Allocation 

1) Paging

: ํ”„๋กœ๊ทธ๋žจ์˜ virtual addr๋ฅผ ๋™์ผํ•œ ์‚ฌ์ด์ฆˆ์˜ page ๋‹จ์œ„๋กœ ์ž˜๋ผ์„œ ์˜ฌ๋ฆผ

- page table์„ ํ†ตํ•ด logical addr(page) -> physical addr(frame)๋กœ ๋ณ€ํ™˜

 

(+) hole ์ƒ์„ฑ ๋“ฑ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋จ

(-) ๋ณต์žกํ•œ ์ฃผ์†Œ ๋ณ€ํ™˜, internal addr ๋ฐœ์ƒ ๊ฐ€๋Šฅ

page ๋‚ด์—์„œ์˜ offset ๋ถ€๋ถ„์€ ์˜ํ–ฅ ์—†๋‹ค(์ƒ๋Œ€์œ„์น˜)

* Implementation of Page Table

- Page-table base resigster(PTBR) : page table์˜ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ด

- Page-table length register(PTLR) : table ํฌ๊ธฐ๋ฅผ ๋ณด๊ด€(limit)

 

- page table์€ main memory์— ์ƒ์ฃผ

-> ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์—ฐ์‚ฐ์—๋Š” 2๋ฒˆ์˜ memory access ํ•„์š” : page table 1๋ฒˆ, ์‹ค์ œ data/instruction ์ ‘๊ทผ 1๋ฒˆ

-> ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด associative register, ์ฆ‰ TLB๋ผ๋Š” ์บ์‹œ๋ฅผ ์‚ฌ์šฉ

 

* Associative Register(TLB)

- page table ์ค‘ ์ผ๋ถ€๋งŒ ์กด์žฌ

- ๋ชจ๋“  TLB๋ฅผ ์‚ดํŽด๋ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— parallel search๊ฐ€ ๊ฐ€๋Šฅ

- ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค TLB์˜ ์ •๋ณด๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— context switch ๋•Œ flushํ•ด์•ผ ํ•œ๋‹ค

 

* Effective Access time

 

Two-Level Page Table

address space๊ฐ€ ๋งค์šฐ ํฌ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ ์ฃผ์†Œ ๊ณต๊ฐ„ ์ค‘ ์ง€๊ทนํžˆ ์ผ๋ถ€๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋งŽ์€ ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋จ

-> 2-level์˜ ๊ฒฝ์šฐ ๋‚ญ๋น„๋˜๋Š” ๊ณต๊ฐ„์˜ entry๊ฐ€ NULL๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ์ฃผ์†Œ ๊ณต๊ฐ„ ์ค„์ธ๋‹ค(์•ˆ์ชฝ page table ์‚ฌ์šฉ X)

 

* inner page table์˜ ํฌ๊ธฐ๋Š” page ํ•œ ๊ฐœ์™€ ๊ฐ™๋‹ค

- page(4KB=2^12B)

- entry(4B) : 1K(2^10B)๊ฐœ

 

* logical address(32-bit machine with 4K page size)

- page offset : 12 bit (2^12B ๊ตฌ๋ถ„)

- page number : 20 bit

--- page number 10 bit (2^10B ๊ตฌ๋ถ„)

--- page offset 10 bit

 

- P1 : outer page table index (10 bit)

- P2 : inner page table index (10 bit)

- D : page offset (12 bit)

 

* Memory Protection

page table์˜ ๊ฐ entry๋งˆ๋‹ค ์•„๋ž˜์˜ bit๋ฅผ ๋‘”๋‹ค

1) protection bit : page์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ - ์ฃผ๋กœ ์—ฐ์‚ฐ ๊ถŒํ•œ(read/write/read-only)

- code : read-only

- data/stack : read, write

2) valid/Invalid bit

- valid : ํ•ด๋‹น ์ฃผ์†Œ์˜ frame์— ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์œ ํšจํ•œ ๋‚ด์šฉ์ด ์žˆ๋Š” ๊ฒฝ์šฐ

- invalid : ํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ค์ง€ ์•Š๊ณ  swap area์— ์žˆ๋Š” ๊ฒฝ์šฐ

 

* Inverted page table

์‹œ์Šคํ…œ ๋‚ด๋ถ€์— page table์„ ํ•˜๋‚˜ ๋‘๊ณ , entry๋ฅผ page frame(physical memory)์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋‘ 

- pid : process id

- p : entry #(physical frame #)

- d : offset

 

(+) page table ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

(-) large overhead -> associative register๋ฅผ ๋‘์–ด parallelํ•˜๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๋„๋ก ํ•œ๋‹ค

 

* Shared Pages

1) Shared code (re-entrant code/pure code)

read-only๋กœ ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ•˜๋‚˜์˜ code๋งŒ physical space์— ์˜ฌ๋ฆผ

shared code๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ logical addr space์—์„œ ๋™์ผํ•œ ์œ„์น˜์— ์žˆ์–ด์•ผ ํ•œ๋‹ค

2) Private code

๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋…์ž์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ

 

2) Segment

: ํ”„๋กœ๊ทธ๋žจ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์˜๋ฏธ ์žˆ๋Š” ํฌ๊ธฐ(code/data/stack)๋กœ ์ž˜๋ผ์„œ ์˜ฌ๋ฆผ

- ํฌ๊ธฐ๊ฐ€ ๊ท ์ผํ•˜์ง€๋Š” ์•Š์Œ -> hole ๋ฌธ์ œ ๋ฐœ์ƒ

 

Logical Address

segment-number, offset์œผ๋กœ ๊ตฌ์„ฑ

1) segment table

- base : starting physical address of the segment 

- limit : length of the segment

2) segment-table base register(STBR) : ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์—์„œ์˜ segment table์˜ ์œ„์น˜

3) segment-table length register(STLR) : ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋Š” segment์˜ ๊ฐœ์ˆ˜

=> limit & STLR๋กœ ๋‘ ๋ฒˆ ๊ฒ€์ฆ

4) Protection

5) Sharing : shared segment / same segment number

=> segment๋Š” ์˜๋ฏธ ๋‹จ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ , ๋ณด์•ˆ์— ์žˆ์–ด paging๋ณด๋‹ค ํ›จ์”ฌ ํšจ๊ณผ์ ์ด๋‹ค

6) Allocation : first fit / best fit -> external fragmentation ๋ฐœ์ƒ

=> segment์˜ ๊ธธ์ด๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ณ€ ๋ถ„ํ•  ๋ฐฉ์‹์—์„œ์˜ ๋ฌธ์ œ์ ์ด ๋™์ผํ•˜๊ฒŒ ๋ฐœ์ƒ

 

3) Paged segmentation

segment๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ page๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ

- segment-table entry๊ฐ€ segment๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” page table์˜ base address๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

- segment๊ฐ€ ์˜๋ฏธ ๋‹จ์œ„์˜ ์ผ์„ ์ฒ˜๋ฆฌ / page๊ฐ€ ๋‚ด๋ถ€ ์ผ์„ ์ฒ˜๋ฆฌ

- ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•œ page๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— allocation ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

๋Œ“๊ธ€