์šด์˜์ฒด์ œ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๋ฉ”๋ชจ๋ฆฌ๋Š” CPU ์ž์›๋งŒํผ ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋งค์šฐ ์ค‘์š”ํ•œ ์ž์› ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด์ „์—๋Š” ์šด์˜์ฒด์ œ์—์„œ CPU ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜๊ณ , ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค. ํŠนํžˆ, ๊ณผ๊ฑฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งค์šฐ ๋น„์‹ผ ์ž์›์ด์—ˆ๊ณ  ํฌ๊ธฐ ๋˜ํ•œ ์ž‘์•˜๊ธฐ ๋•Œ๋ฌธ์—, ์šด์˜์ฒด์ œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๊ฐ€ ์ง€๊ธˆ๋ณด๋‹ค ๋” ์ค‘์š”ํ•˜์˜€๋‹ค.

ํ˜„์žฌ์—๋Š” ๊ณผ๊ฑฐ๋ณด๋‹ค ํ›จ์”ฌ ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ €๋ ดํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์ง€๊ธˆ๋„ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ถ€์กฑํ•˜๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ ธ์˜จ ๋งŒํผ ํ”„๋กœ๊ทธ๋žจ์˜ ํฌ๊ธฐ์™€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋Š” ๊ทธ๋ณด๋‹ค ๋”์šฑ ๋น ๋ฅธ ์†๋„๋กœ ์ปค์ ธ์™”๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ˜„์žฌ์—๋„ ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋“ค์ด ์—ฐ๊ตฌ๋˜๊ณ  ์žˆ๊ณ , ์šด์˜์ฒด์ œ ๊ธฐ๋Šฅ์—์„œ๋„ ๋งค์šฐ ์ค‘์š”ํ•œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

1. ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ๊ทธ๋žจ ํ• ๋‹นํ•˜๊ธฐ

๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ **์ฃผ์†Œ(Address)**์™€ **๋ฐ์ดํ„ฐ(Data)**๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค. CPU๋Š” ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์š”์ฒญ์„ํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ์ฃผ์†Œ์— ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋Š” ์š”๊ตฌํ•˜๋Š” ์ฃผ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ CPU์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

1.1 ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๋Š” ๊ณผ์ •

ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๋Š” ๊ณผ์ •์€ ์†Œ์ŠคํŒŒ์ผ, ๋ชฉ์ ํŒŒ์ผ, ์‹คํ–‰ํŒŒ์ผ ์ˆœ์„œ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

  1. ์†Œ์ŠคํŒŒ์ผ(Source file)
    • ๊ณ ์ˆ˜์ค€์–ธ์–ด ๋˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด
  2. ๋ชฉ์ ํŒŒ์ผ(Object file)
    • ์ปดํŒŒ์ผ ๋˜๋Š” ์–ด์…ˆ๋ธ” ๊ฒฐ๊ณผ
  3. ์‹คํ–‰ํŒŒ์ผ(Executable file)
    • ๋งํฌ ๊ฒฐ๊ณผ

์œ„ ๊ทธ๋ฆผ์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

  1. ์†Œ์ŠคํŒŒ์ผ์€ ์ปดํŒŒ์ผ๋Ÿฌ(compiler)์— ์˜ํ•ด ์ปดํŒŒ์ผ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋กœ ๋ชฉ์  ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.
    • ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ๊ฐ€ ์–ด์…ˆ๋ธ”์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด์„œ ์™ธ๋ถ€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ๋นˆ๋ฒˆํ•œ๋ฐ, ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ๋Š” ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉ์ ํŒŒ์ผ์—๋Š” ์ด์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๋‹ค.
  2. ๋งํฌ ๋‹จ๊ณ„์—์„œ ํ•˜๋“œ๋””์Šคํฌ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ถ”๊ฐ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.
    • ๋งํฌ ๋‹จ๊ณ„๋Š” ๋ง์ปค(linker)๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ๋กœ๋”(loader)์— ์˜ํ•ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์€ code, data, stack ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ƒ์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์—๋Š” code์™€ data์˜์—ญ๋งŒ ์กด์žฌํ•œ๋‹ค. ์‹ค์ œ๋กœ ์‹คํ–‰์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ์•„์˜ฌ return address ๋“ฑ์„ ์ €์žฅํ•˜๋Š” stack๋„ ํ•„์š”ํ•˜๋‹ค.

1.2 MMU(Memory Management Unit)

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด์ฃผ๋Š” OS ์„œ๋น„์Šค

๊ทธ๋ ‡๋‹ค๋ฉด, ํ”„๋กœ๊ทธ๋žจ์„ ์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ข€ ๋” ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ๋จผ์ €, ์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋ฉ”๋ชจ๋ฆฌ์— ๋ช‡ ๋ฒˆ์ง€์— ํ• ๋‹น๋ ๊นŒ? ๋งŒ์•ฝ ์šด์˜์ฒด์ œ๊ฐ€ ์—†๋‹ค๋ฉด, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์šด์˜์ฒด์ œ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ด๋ฅผ ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋Š” ์ฃผ์†Œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.(๊ณ ์ˆ˜์ค€์–ธ์–ด์—์„œ๋Š” ์ง์ ‘ ์ฃผ์†Œ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.)

๋˜ํ•œ, ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ณ  ๋‚ด๋ ค๊ฐ€๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ํ”„๋กœ๊ทธ๋žจ์€ ๊ณ ์ •์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿฌํ•œ ์—ฌ๋Ÿฌ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ „์—๋„ ์‚ดํŽด๋ดค๋˜ **MMU(Memory Management Unit)**์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  MMU์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ฃผ์†Œ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๋ฐฐ์น˜ ๋ ˆ์ง€์Šคํ„ฐ(Relocation register)๊ฐ€ ๋ณ„๋„๋กœ ์กด์žฌํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ MMU์˜ ๋ชจ์Šต์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ž‘์ฃผ์†Œ๊ฐ€ 0๋ฒˆ์ง€๋ผ๊ณ  ํ•  ๋•Œ, ์‹ค์ œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ํ• ๋‹น๋˜๋Š” ์ฃผ์†Œ๊ฐ€ ์œ ๋™์ ์ด๊ธฐ ๋•Œ๋ฌธ์— 0๋ฒˆ์ง€์ด๋ผ๋Š” ์ฃผ์†Œ๋ฅผ ์‹ค์ œ ํ• ๋‹น๋œ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ ์žฌ๋ฐฐ์น˜ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

๋งŒ์•ฝ, ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ 500๋ฒˆ์ง€์— ํ• ๋‹น๋˜์–ด ์žฌ๋ฐฐ์น˜ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’์ด 500์œผ๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๋ฉด, CPU์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ 0๋ฒˆ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ MMU๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ์žฌ๋ฐฐ์น˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์˜ํ•ด 500๋ฒˆ์ง€๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ CPU๋Š” 0๋ฒˆ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” MMU์— ์˜ํ•ด 500๋ฒˆ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. CPU๋ฅผ ์†์ธ๋‹ค.

MMU(Memory Management Unit)์˜ ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด๋ฉด, ์ด์ „์— ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด base์™€ limit ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด๋Š” CPU์—์„œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด ์ฃผ์†Œ๊ฐ€ ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์˜ base๋‚˜ limit ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค.

MMU๋Š” ์ด ๊ธฐ๋Šฅ ์ด์™ธ์—๋„ ์žฌ๋ฐฐ์น˜ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋Š ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์‹ค์ œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก address translation ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฆ‰, CPU๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์„ค์ •๋œ ์ฃผ์†Œ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ๋ช…๋ น์„ ๋ณด๋‚ด์ง€๋งŒ, MMU์— ์˜ํ•ด ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ํ”„๋กœ๊ทธ๋žจ์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ์œ„์น˜๋Š” CPU์— ์ „ํ˜€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

MMU์— ์˜ํ•ด ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ฃผ์†Œ๋Š” ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. **CPU์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์†Œ๋Š” ๋…ผ๋ฆฌ ์ฃผ์†Œ(logical address)**๋ผ๊ณ  ํ•˜๊ณ , **๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์†Œ๋Š” ๋ฌผ๋ฆฌ ์ฃผ์†Œ(physical address)**๋ผ๊ณ  ํ•œ๋‹ค.

2. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋ฐฉ์ง€

์šด์˜์ฒด์ œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

2.1. ๋™์  ์ ์žฌ(Dynamic Loading)

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ํ•˜๋Š”๋ฐ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ฃจํ‹ด/๋ฐ์ดํ„ฐ๋งŒ ์ ์žฌ(load)ํ•˜๋Š” ๊ฒƒ

ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ์ฝ”๋“œ์—์„œ ๋ชจ๋“  ๋ฃจํ‹ด์ด ๋‹ค ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์ด๋‹ค. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์€ if๋ฌธ๊ณผ ๊ฐ™์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งŒ ํ•ด๋‹น ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋™์  ์ ์žฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜ ๊ตฌ๋ฌธ์„ ์ œ์™ธํ•˜๊ณ  ์ ์žฌํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํƒœ์—์„œ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ๋•Œ ํ•ด๋‹น ์˜ค๋ฅ˜ ๊ตฌ๋ฌธ์„ ์ฐพ์•„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ๋‹ค.

๋ฐ์ดํ„ฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํŠนํžˆ ๋ฐฐ์—ด๊ณผ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋‘๊ณ , ์‹คํ–‰ ๋„์ค‘ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ฐพ์•„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์ค€๋‹ค.

๋ฐ˜๋Œ€๋กœ, ๋ชจ๋“  ๋ฃจํ‹ด๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜๋Š” ๊ฒƒ์„ ์ •์  ์ ์žฌ(static loading)์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ˜„๋Œ€ ์šด์˜์ฒด์ œ๋Š” ๋Œ€๋ถ€๋ถ„ ๋™์  ์ ์žฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

2.2. ๋™์  ์—ฐ๊ฒฐ(Dynamic Linking)

๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ•˜๋‚˜๋งŒ ์˜ฌ๋ฆฌ์ž.

๋™์  ์—ฐ๊ฒฐ์€ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์— ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ค‘๋ณต์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•˜๋‚˜๋งŒ ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ์˜ P1, P2 ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

// P1
int a = 1;
int b = 2;
printf("%d\n", a + b);
// P2
int a = 1;
int b = 2;
printf("%d\n", a * b);

์ด ๋‘ ์†Œ์ŠคํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๋ฉด ๋ชฉ์ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•˜์—ฌ ์‹คํ–‰ํŒŒ์ผ์„ ๋งŒ๋“  ๋‹ค์Œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•œ๋‹ค. ๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์žฌ๋˜์—ˆ์„ ๋•Œ, printf() ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ค‘๋ณต๋˜์–ด์„œ ์ ์žฌ๋˜์–ด์žˆ๋‹ค.

์ด์™€ ๊ฐ™์ด, ๋˜‘๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•˜๋‚˜๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ ํ›„, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋„๋ก ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๋™์  ์—ฐ๊ฒฐ์€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ค‘๋ณต์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ํ›„์— ๋งํฌ(link) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ธฐ์กด์—๋Š” ์‹คํ–‰ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์— ๋งํฌ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜์˜€๋Š”๋ฐ, ์ด๋ฅผ ์ •์  ์—ฐ๊ฒฐ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ์˜ˆ์ œ์—์„œ ์‚ดํŽด ๋ณธ P1, P2 ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์  ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(printf() ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ ์—ฐ๊ฒฐํ•œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ Linux์—์„œ๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Shared Library), Windows์—์„œ๋Š” **๋™์  ์—ฐ๊ฒฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Dynamic Linking Library, DLL)**๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

2.3 Swapping

Swapping์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘์—์„œ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ”„๋กœ์„ธ์Šค ์ด๋ฏธ์ง€ ํ˜•ํƒœ๋กœ ๋งŒ๋“  ํ›„ ํ•˜๋“œ๋””์Šคํฌ(Backing store)์— ๋‚ด๋ ค๋ณด๋‚ธ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์—์„œ Backing store๋กœ ๊ฐ€๋Š” ๊ฒƒ์„ swap-out, ๋‹ค์‹œ Backing store์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€๋Š” ๊ฒƒ์„ swap-in์ด๋ผ๊ณ  ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ, ํ”„๋กœ์„ธ์Šค ์ด๋ฏธ์ง€๋Š” ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ํ›„ ์‹คํ–‰๋˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๋ฐ, ํ˜„์žฌ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๋ฅผ ํ”„๋กœ์„ธ์Šค ์ด๋ฏธ์ง€๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด๋Š” ๋‹จ์ˆœํžˆ, ํ•˜๋“œ๋””์Šคํฌ์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ(exeํŒŒ์ผ)๊ณผ๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ, ๋”ฐ๋กœ ์ €์žฅํ•ด์•ผํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ swapping ๊ณผ์ •์œผ๋กœ ์ธํ•œ ํ”„๋กœ์„ธ์Šค ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋“œ๋””์Šคํฌ์˜ ์ผ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋ฅผ backing store ๋˜๋Š” swap device๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Backing store์˜ ํฌ๊ธฐ๋Š” ๋Œ€๋žต ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ์ •๋„๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ซ“๊ฒจ๋‚œ๋‹ค๊ณ  ํ•ด๋„ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋„˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ํฌ์ง€ ์•Š๋Š” PC๋‚˜ ์Šค๋งˆํŠธํฐ์€ ํ•˜๋“œ๋””์Šคํฌ์˜ ์ผ๋ถ€๋ฅผ backing store๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ํฌ๋‹ค๋ฉด ๋”ฐ๋กœ ํ•˜๋“œ๋””์Šคํฌ ์ž์ฒด๋ฅผ backing store๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

Swap-out๋œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์‹œ swap-in์„ ํ•  ๋•Œ, ์ด์ „์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด ์ฃผ์†Œ ๊ณต๊ฐ„์œผ๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋Š” ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ backing store์— ์žˆ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ด๋‹น ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” MMU์˜ ์žฌ๋ฐฐ์น˜ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ธํ•ด ์–ด๋””์— ์ ์žฌ๋˜๋Š”์ง€ ์ƒ๊ด€์—†์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜„์žฌ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ , ํ•˜๋“œ๋””์Šคํฌ๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ์†๋„๋ฉด์—์„œ ๋งค์šฐ ๋Š๋ฆฌ๋ฏ€๋กœ swapping ๋™์ž‘์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ํฌ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋กœ ์ธํ•ด ์–ป๋Š” ์ด๋“์ด ๋” ๋งŽ์œผ๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„ ์šด์˜์ฒด์ œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , ์†๋„๊ฐ€ ์ค‘์š”ํ•œ ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๋‚˜ ์Šˆํผ ์ปดํ“จํ„ฐ๋Š” backing store๋ฅผ ํ•˜๋“œ๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ ์ข€ ๋” ๋น ๋ฅธ ์ €์žฅ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

3. ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(Contiguous Memory Allocation)

๊ณผ๊ฑฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์˜ฌ๋ผ๊ฐ€๋Š” ํ˜•ํƒœ์˜€๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์žฌ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์ด ๋˜์—ˆ๋‹ค.

๋ถ€ํŒ… ์งํ›„์— ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ์šด์˜์ฒด์ œ๋งŒ ํ• ๋‹น๋˜์–ด ์žˆ๊ณ  ๋น„์–ด์žˆ๋Š” ์ƒํƒœ์ผ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์„ hole ์ด๋ผ ๋ถ€๋ฅธ๋‹ค. ์ฆ‰, ๋ถ€ํŒ… ์งํ›„์—๋Š” ์šด์˜์ฒด์ œ์™€ big single hole์ด ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒํ•˜๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด, ์—ฌ๋Ÿฌ ๊ณณ์— ์„œ๋กœ ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ํ™€(hole)์ด ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํƒœ๋ฅผ scattered holes๋ผ๊ณ  ํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ๋ถ€ํŒ… ์งํ›„ ์ƒํƒœ์—์„œ ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜๋ฉด์„œ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ƒ์„ฑ, ์ข…๋ฃŒ๋ฅผ ๋ฐ˜๋ณตํ•œ ํ›„์˜ ์ƒํƒœ์ด๋‹ค. ์ด์™€ ๊ฐ™์ด hole๋“ค์ด ๋ถˆ์—ฐ์†ํ•˜๊ฒŒ ํฉ์–ด์ ธ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”(Memory fragmentation) ๋ผ๊ณ  ํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋กœ ์ธํ•ด์„œ ์—ฌ๋Ÿฌ ๊ณณ์— hole์ด ํฉ์–ด์ ธ ์žˆ๋Š” ์ƒํƒœ์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๋ คํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, hole์ด 3๊ฐœ๊ฐ€ ์žˆ๊ณ  ๊ฐ ํฌ๊ธฐ๋Š” 50byte, 50byte, 80byte์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ• ๋‹นํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํฌ๊ธฐ๋Š” 150byte์ด๋‹ค. ๊ฐ hole๋“ค์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋ฉด 230byte๋กœ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์‹ค์žฌ๋กœ๋Š” ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ํ• ๋‹น๋˜์ง€ ๋ชปํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ์™ธ๋ถ€ ๋‹จํŽธํ™”(External fragmentation) ๋ผ๊ณ  ํ•œ๋‹ค. ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ค ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ?

3.1. ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹

์™ธ๋ถ€ ๋‹จํŽธํ™”์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ธฐ ์ „์— ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹์„ ๋จผ์ € ์‚ดํŽด๋ณด์ž. ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹์—๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. First-fit, Best-fit, Worst-fit ์ด ์žˆ๋‹ค.

  1. First-fit(์ตœ์ดˆ ์ ํ•ฉ)
    • ์ตœ์ดˆ ์ ํ•ฉ์€ ํ• ๋‹นํ•  ํ”„๋กœ์„ธ์Šค ํฌ๊ธฐ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ hole์„ ํƒ์ƒ‰ํ•˜๋Š” ์ˆœ์„œ ์ค‘์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์ฐพ์€ hole์— ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  2. Best-fit(์ตœ์  ์ ํ•ฉ)
    • ์ตœ์  ์ ํ•ฉ์€ ํ• ๋‹นํ•  ํ”„๋กœ์„ธ์Šค ํฌ๊ธฐ์™€ hole ํฌ๊ธฐ์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ hole์— ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค.(holeํฌ๊ธฐ๋Š” ํ”„๋กœ์„ธ์Šค ํฌ๊ธฐ๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ์ปค์•ผ ํ•œ๋‹ค.)
  3. Worst-fit(์ตœ์•… ์ ํ•ฉ)
    • ์ตœ์  ์ ํ•ฉ๊ณผ ๋ฐ˜๋Œ€๋กœ, ํ• ๋‹นํ•  ํ”„๋กœ์„ธ์Šค ํฌ๊ธฐ์™€ hole ํฌ๊ธฐ์˜ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ํฐ hole์— ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์ œ

Hole idHoleSizeProcess NameSize
1100kbP1212kb
2500kbP2417kb
3600kbP3112kb
4300kbP4426kb
5200kb

First-fit

Best-fit

Worst-fit

๊ฐ 3๊ฐ€์ง€ ๋ฐฉ์‹๋Œ€๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด Best-fit์€ 4๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋‚˜๋จธ์ง€ 2๊ฐœ๋Š” ๋งˆ์ง€๋ง‰ P4๋ฅผ ํ• ๋‹นํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋ชจ๋“  hole์„ ํ•ฉ์น˜๋ฉด P4๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, hole๋“ค์€ ๊ฐ๊ฐ ๋‚˜๋ˆ ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค.(์™ธ๋ถ€ ๋‹จํŽธํ™”)

๊ฐ ํ• ๋‹น ๋ฐฉ์‹์˜ ์ผ๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•ด๋ณด๋ฉด, ์†๋„๋ฉด์—์„œ๋Š” first-fit์ด ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ด์šฉ๋ฅ ๋ฉด์—์„œ๋Š” first-fit, best-fit์ด ๋น„์Šทํ•œ ์„ฑ๋Šฅ์„ ๋‚ธ๋‹ค๊ณ  ์•Œ๋ ค์ ธ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์‹คํ—˜์„ ํ†ตํ•ด best-fit์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์™ธ๋ถ€ ๋‹จํŽธํ™”๋กœ ์ธํ•ด ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ์˜ 1/3 ์ •๋„๋ฅผ ๋‚ญ๋น„ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ด๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” Compaction ์ด๋‹ค. compaction์€ ์—ฌ๋Ÿฌ ๊ณณ์— ํฉ์–ด์ ธ์žˆ๋Š” hole๋“ค์„ ๊ฐ•์ œ๋กœ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ hole์„ ์˜ฎ๊ธฐ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ณ , hole๊ณผ process ๋‘๊ฐœ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ์˜ฎ๊ฒจ์•ผ ๋น ๋ฅด๊ฒŒ ํ•ฉ์น  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํฐ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

Reference