
์ฃผ์ ๋ณํ
๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ CPU ๊ฐ์ํ์ ๋น์ทํ๊ฒ ์ ํ์ ์ง์ ์คํ(Limited Direct Execution; LDE) ์ ๋ต์ ๋ฐ๋ฆ ๋๋ค.
ํจ์จ์ฑ๊ณผ ์ ์ด๋ฅผ ๋์์ ๋ฌ์ฑํ๊ธฐ ์ํด ํ๋์จ์ด์ ๋์์ ๋ฐ์ต๋๋ค. (๋ ์ง์คํฐ, TLB, ํ์ด์ง ํ ์ด๋ธ....)
์ฃผ์ ๋ณํ์ ํ๋์จ์ด๊ฐ ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. (์ค์ ๋ฐ์ดํฐ๋ ๋ฌผ๋ฆฌ ์ฃผ์์ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ)
OS๋ ์ฃผ์ ์์ ์ ๊ฐ์ ํด ํ๋์จ์ด๋ฅผ ์ธํ ํด์ฃผ์ด, ์ด๋ค ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ์ฌ์ฉ์ค์ด๊ณ , ์ด๋ค ์์ญ์ด ๋น์ด์๋์ง๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ค๋ช ์ ๋จ์ํ ํ๊ธฐ ์ํด 3๊ฐ์ง ๊ฐ์ ์ ์ค์ ํ๊ณ ์งํํ๊ฒ ์ต๋๋ค.
- ์ฌ์ฉ์ ์ฃผ์ ๊ณต๊ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ๋ฐฐ์น๋จ
- ์ฃผ์ ๊ณต๊ฐ ํฌ๊ธฐ๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ์์
- ๋ชจ๋ ์ฃผ์ ๊ณต๊ฐ์ ์ ํํ ๊ฐ์ ํฌ๊ธฐ์
์ฃผ์ ๋ณํ ์์
void func()
int x;
....
x = x + 3
์ด ์ฝ๋๋ ์ด์ ๋ธ๋ฆฌ๋ก ์๋์ ๊ฐ์ด ๋ณํ๋ฉ๋๋ค.
128 : movl 0x0(%ebx), %eax ; load 0+ebx into eax
132 : addl $0x03, %eax ; add 3 to eax register
135 : movl %eax, 0x0(%ebx) ; store eax back to mem

์คํ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋ฉด
- ์ฃผ์ 128์ ๋ช ๋ น์ด๋ฅผ fetch → execute (์ฃผ์ 15KB์์ ๊ฐ์ load)
- ์ฃผ์ 132์ ๋ช ๋ น์ด๋ฅผ fetch → execute (๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ์์, ๋ ์ง์คํฐ ์ฐ์ฐ๋ง)
- ์ฃผ์ 135์ ๋ช ๋ น์ด๋ฅผ fetch → execute (์ฃผ์ 15KB์ ๊ฐ์ store)
์ด๋ 128, 132, 135๋ ๋ชจ๋ ๊ฐ์ ์ฃผ์์ ๋๋ค.
์ฃผ์ ๊ณต๊ฐ ์ฌ๋ฐฐ์น (Relocation)
OS๋ ํ๋ก์ธ์ค๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ 0์ด ์๋ ๋ค๋ฅธ ๊ณต๊ฐ์ ๋ฐฐ์นํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. (0๋ฒ์ง์๋ ๋ณดํต ์ด์์ฒด์ ๊ฐ ์์ด์)

์ด๋ฅผ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ ์ ์ฌ๋ฐฐ์น (Static Relocation)

์ํํธ์จ์ด ๊ธฐ๋ฐ์ ์ฌ๋ฐฐ์น ๋ฐฉ์์ ๋๋ค.
- OS๊ฐ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ธฐ ์ ์ ํ๋ก๊ทธ๋จ์ ์ฌ์์ฑ(rewrite)ํฉ๋๋ค.
- ์ ์ ๋ฐ์ดํฐ์ ํจ์์ ์ฃผ์๋ฅผ ์ ๋ถ ์ ์์น์ ๋ง๊ฒ ์์ ํฉ๋๋ค.
์ฅ์
- ๋ณ๋์ ํ๋์จ์ด ์ง์์ด ํ์ํ์ง ์์ต๋๋ค.
๋จ์
- ๋ณดํธ๊ฐ ์ ํ ๋์ง ์์ต๋๋ค. ํ ํ๋ก์ธ์ค๊ฐ OS๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง๊ฐ๋จ๋ฆด ์ ์์ต๋๋ค.
- ํ๋ผ์ด๋ฒ์๊ฐ ์์ด ์ด๋ค ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ์ฝ์ ์ ์์ต๋๋ค.
- ํ ๋ฒ ๋ฐฐ์นํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฎ๊ธธ ์ ์์ต๋๋ค.
- ์ธ๋ถ ๋จํธํ๋ก ์ธํด ์ ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ์ง ๋ชปํ ์ ์์ต๋๋ค.
๋์ ์ฌ๋ฐฐ์น (Dynamic Relocation)
- MMU(Memory Management Unit)์ด ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ช ๋ น์ ๋ํด ์ฃผ์ ๋ณํ์ ์ํํฉ๋๋ค.
- ํ๋์จ์ด๊ฐ ๋ณดํธ๋ฅผ ๊ฐ์ ํด์, ๊ฐ์ ์ฃผ์๊ฐ ์ ํจ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด MMU๊ฐ ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค.
- OS๋ ํ์ฌ ์คํ์ค์ธ ํ๋ก์ธ์ค์ ์ ํจํ ์ฃผ์ ๊ณต๊ฐ ์ ๋ณด๋ฅผ MMU์ ์ ๋ฌํฉ๋๋ค.

$$Physical\,addresss=Virtual\,address + base$$
$$0 <= virtual\,address < bounds$$

ํ๋ก๊ทธ๋จ์ด ์์๋ ๋, OS๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋์ ๋์ ์ง ๊ฒฐ์ ํ๊ณ , base ๋ ์ง์คํฐ์ ์์ ์ฃผ์๋ฅผ ์ธํ ํฉ๋๋ค.
๋ชจ๋ ๊ฐ์ ์ฃผ์๋ bounds ๋ณด๋ค ์๊ณ , ์์ ๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
์์ )

์ฃผ์ ๊ณต๊ฐ์ด ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ 32KB ์ง์ ์ ๋ฐฐ์น๋์ด ์๋ค๋ฉด (base=32KB)
128 : movl 0x0(%ebx), %eax
- ๊ฐ์ ์ฃผ์ 128๋ฒ์ง์ ๋ช ๋ น์ด๋ฅผ fetch -> ์ค์ ๋ก๋ 128 + 32KB = 32896 ๋ฒ์ง์์ fetch
- ๊ฐ์ ์ฃผ์ 15KB์์ ๊ฐ์ load -> ์ค์ ๋ก๋ 15KB + 32KB = 47KB๋ฒ์ง์์ load
OS๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ฅผ ์ํด ํด์ผ ํ ์ผ
base-and-bounds ๋ฐฉ์์ ๊ตฌํํ๊ธฐ ์ํด OS๋ ์ธ ๊ฐ์ง ์ค์ํ ์์ ์ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
- ํ๋ก์ธ์ค๊ฐ ์์๋ ๋
- OS๋ ์ ์ฃผ์๊ณต๊ฐ์ด ๋ค์ด๊ฐ ๊ณต๊ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐพ์์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด Free List๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ๋
- OS๋ ํ๋ก์ธ์ค๊ฐ ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ Free List๋ก ๋ฐํํด์ผ ํฉ๋๋ค.
- context switch๊ฐ ๋ฐ์ํ ๋
- OS๋ ํ์ฌ ํ๋ก์ธ์ค์ base-and-bounds ์์ ์ ์ฅํ๊ณ , ๋ค์ ํ๋ก์ธ์ค์ ๊ฐ์ ๋ณต์ํด์ผ ํฉ๋๋ค.
- ์ด ์ ๋ณด๋ PCB(Process Control Block)์ ์ ์ฅ๋ฉ๋๋ค.
'๐ฅCS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์ด์์ฒด์ ] Virtual Memory (0) | 2026.04.21 |
|---|---|
| [์ด์์ฒด์ ] Multi-Level-Feedback Que (0) | 2026.04.21 |
| [์ด์์ฒด์ ] ์ค์ผ์ค๋ง (0) | 2026.04.20 |
| [์ด์์ฒด์ ] ํ๋ก์ธ์ค (0) | 2026.04.20 |
| [์ด์์ฒด์ ] Limited Direct Execution (0) | 2026.04.20 |
์ฌ์ฐ๋น์ ๊ฐ๋ฐ ๋ธ๋ก๊ทธ
https://www.youtube.com/watch?v=SVGTzOL357Y&list=RDSVGTzOL357Y&start_radio=1