16. ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜

16.1 ๋ฒ ์ด์Šค ๋ฐ”์šด๋“œ์˜ ์ผ๋ฐ˜ํ™”

์ง€๊ธˆ ๊ฐ€์ •์˜ ๋‹จ๊ณ„์—์„œ ๋‚ด๋ถ€๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์š”์ธ์€ ์Šคํƒ๊ณผ ํž™ ์‚ฌ์ด์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์€ 60๋…„๋Œ€์— ์ด๋ฏธ ์‚ฌ์šฉ๋˜๋˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ด๋‹ค.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์€ ์„ธ๊ทธ๋จผํŠธ๋งˆ๋‹ค ๋ฒ ์ด์Šค์™€ ๋ฐ”์šด๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ์„ธ๊ทธ๋จผํŠธ๋ž€ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„์ด๋‹ค. (์Šคํƒ, ํž™, ๋ฐ์ดํ„ฐ์˜์—ญ, ์ฝ”๋“œ์˜์—ญ ๋“ฑ)

  • ์ฆ‰ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์„ธ๊ทธ๋จผํŠธ(๋…ผ๋ฆฌ์  ๋‹จ์œ„)์— ๊ฐ๊ฐ ๋ฒ ์ด์Šค์™€ ๋ฐ”์šด๋“œ๋ฅผ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

segmentation

  • ๊ทธ์™ธ์—๋Š” ๋ฒ ์ด์Šค ๋ฐ”์šด๋“œ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๊ฐ€์ƒ์ฃผ์†Œ๊ฐ€ 100, ๋ฒ ์ด์Šค๊ฐ€ 50, ๋ฐ”์šด๋“œ๊ฐ€ 110์ด๋ผ๋ฉด, ๋ฒ ์ด์Šค ์ฃผ์†Œ์ธ 50์œผ๋กœ ๊ฐ€์„œ 100์„ ๋”ํ•˜๋ฉด 150์ด ๋˜๋Š”๋ฐ, ์ด๋Š” ๋ฐ”์šด๋“œ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (๋˜‘๊ฐ™์Œ)

์ฐธ๊ณ ๋กœ ๋ฒ ์ด์Šค + ์˜คํ”„์…‹(๊ฐ€์ƒ์ฃผ์†Œ)์ด ๋ฐ”์šด๋“œ๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๊ฑธ Segment Fault๋ผ๊ณ  ํ•œ๋‹ค.

‘์ผ๋ฐ˜ํ™”’ ๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋ญ”๊ฐ€ ๋ฌ˜ํ•˜๊ฒŒ ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์•ฝ๊ฐ„ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์–ด๋ ค์šด ๋‚ด์šฉ์€ ์•„๋‹ˆ๋‹ค.

16.2 ์„ธ๊ทธ๋จผํŠธ ์ข…๋ฅ˜์— ๋Œ€ํ•œ ํŒŒ์•…

๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋ญํ•˜๋‚˜ ์ž๋™์œผ๋กœ ๋˜๋Š”๊ฑด ์—†๋‹ค. ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฐธ์กฐํ–ˆ์„๋•Œ ์ด ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์–ด๋–ค ์ข…๋ฅ˜์ธ์ง€๋„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์กฐ์น˜ํ•ด์•ผํ•œ๋‹ค.

  • ์ฒ˜์Œ์—๋Š” ๋„คํŠธ์›Œํฌ์—์„œ ํ—ค๋” ๋ถ™์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฃผ์†Œ๊ฐ’์— ์ตœ์ƒ์œ„ ๋ช‡ ๋น„ํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌ๋ถ„ํ–ˆ๋‹ค.
Segment = (VirtualAddress & SEGMENT_MASK) >> SEGMENT_SHIFT

Offset = VirtualAddress & OFFSET_MASK

if Offset > SegmentSize[Segment] then
  Raise Exception(SEGMENTATION_FAULT)
else
  PhysicalAddress = Base[Segment] + Offset
  Register = Memory[PhysicalAddress]

ํ•ด์„

์—ฌ๊ธฐ์„œ ๋ชฉํ‘œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Œ

๊ฐ€์ƒ ์ฃผ์†Œ: 1100 0101 0010 1101 1010 1111 0001 0011 (32๋น„ํŠธ)
์„ธ๊ทธ๋จผํŠธ ๋ฒˆํ˜ธ: 1100 (์ƒ์œ„ 4๋น„ํŠธ)
์˜คํ”„์…‹: 0101 0010 1101 1010 1111 0001 0011 (ํ•˜์œ„ 28๋น„ํŠธ)

๊ทผ๋ฐ ์šฐ๋ฆฌ๋Š” ์•„๋‹ˆ๊นŒ ์•ž์— 4๋น„ํŠธ๋ฅผ ๋–ผ์–ด๋‚ด์„œ ์„ธ๊ทธ๋จผํŠธ ๋ฒˆํ˜ธ๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ปดํ“จํ„ฐ๋Š” ๋ฉ์ฒญํ•ด์„œ ๊ทธ๊ฒŒ ์•ˆ๋œ๋‹ค.

์ฒซ์ค„์€ ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„๋ ค๊ณ  SEGMENT_MASK๋กœ &์—ฐ์‚ฐ์„ ํ•ด์„œ ์„ธ๊ทธ๋จผํŠธ ๋ฒˆํ˜ธ๋ฅผ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ

SEGMENT_MASK: 1111 0000 0000 0000 0000 0000 0000 0000 (32๋น„ํŠธ)
VirtualAddress: 1100 0101 0010 1101 1010 1111 0001 0011
SEGMENT_MASK:   1111 0000 0000 0000 0000 0000 0000 0000
๊ฒฐ๊ณผ:            1100 0000 0000 0000 0000 0000 0000 0000

์—ฌ๊ธฐ์„œ ๊ฒฐ๊ณผ๊ฐ’์— ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์œผ๋กœ ๋‹ค ๋ฐ€์–ด๋ฒ„๋ฆฌ๋ฉด ์„ธ๊ทธ๋จผํŠธ ๋ฒˆํ˜ธ๊ฐ€ ๋‚˜์˜จ๋‹ค.

๋น„์Šทํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ ์˜คํ”„์…‹์„ ๊ตฌํ•œ๋‹ค.

Base[Segment] : ํ•ด๋‹นํ•˜๋Š” ์„ธ๊ทธ๋จผํŠธ์˜ ๋ฒ ์ด์Šค ์ฃผ์†Œ, ์—ฌ๊ธฐ๋‹ค ์˜คํ”„์…‹์„ ๋”ํ•˜๋ฉด ๋ฌผ๋ฆฌ์ฃผ์†Œ๊ฐ€ ๋‚˜์˜จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ธฐ!

๋ฌธ์ œ์ 

  • ๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ตœ๋Œ€ ์„ธ๊ทธ๋จผํŠธ์˜ ํฌ๊ธฐ์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ‘๊ณ ์ •’์ด๊ณ , ‘์•ฝ์†’์ด ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ!

  • ๋˜ํ•œ ์œ„์— ์ฃผ์†Œ ๋น„ํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์“ฐ๋Š”๊ฒƒ๋„ ์ƒ๊ฐ๋ณด๋‹ค ๋” ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.

  • ์˜ˆ๋ฅผ๋“ค์–ด ์•ž์— ๋„ค ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ offset์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋น„ํŠธ๊ฐ€ 2^4๋งŒํผ ์ค„์–ด๋“ ๋‹ค.

  • 16์–ต๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์„๊ฑด๋ฐ ๋น„ํŠธ ๋„ค๊ฐœ๋ฅผ ๊นŒ๋ฒ„๋ฆฌ๋ฉด 1์–ต๊ฐœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

16.3 ์Šคํƒ

์Šคํƒ์ด๋ผ๊ณ  ์†Œ๊ฐœ๋ฅผ ํ•˜์ง€๋งŒ, ์‚ฌ์‹ค ์„ธ๊ทธ๋จผํŠธ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ด€๋ฆฌ์™€ ํ–‰๋™์ด ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ

  • ์Šคํƒ์ด๋ผ๋Š” ์„ธ๊ทธ๋จผํŠธ๋Š” ์ฃผ์†Œ๊ฐ€ ์Œ์˜ ์„ฑ์žฅ์„ ํ•œ๋‹ค. ์ด๊ฑฐ cpp๋ณด๋ฉด ์ง„์งœ ๊ทธ๋Ÿผ

  • ์ด์   ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด์•ผํ•œ๋‹ค.

  • ๊ทธ๋ž˜์„œ ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ์—๋Š” ๋ฐฉํ–ฅ ๋น„ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์–ด๋Š ๋ฐฉํ–ฅ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š”์ง€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

16.4 ๊ณต์œ  ์ง€์›(Support for Sharing)

์—ฌ๊ธฐ๋Š” ๋ฒˆ์—ญ์ด ๋„ˆ๋ฌด ์ด์ƒํ•˜๋‹ค. ์˜ˆ์‹œ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋ถ€์กฑํ•œ๋ฐ ๊ฐ‘์ž๊ธฐ ๋ณดํ˜ธ๋น„ํŠธ ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์™€์„œ ๋‹นํ™ฉํ•˜์Šค๋Ÿฌ์›€..

  • ๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” ์ผ๋‹จ, ํŠน์ • ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ณต์œ ํ•˜๋Š”๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ƒ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ‘code’๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ๊ฐ€์žฅ ์ง๊ด€์ ์œผ๋กœ ๋น„์œ ํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€ ๊ฒƒ์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.(์ •ํ™•ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ c๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฟ์ธ๋ฐ, stl์„ ์—ฌ๋Ÿฌ๊ฐœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆด ์ด์œ ๊ฐ€ ์—†์Œ!)

  • ์ด๊ฑด ์ง„์งœ ์ข‹๊ธด ํ•˜์ง€๋งŒ ์œ„ํ—˜ํ•˜๋‹ˆ๊นŒ, ๊ณต์œ ๋ฅผ ์œ„ํ•ด ๋ณดํ˜ธ ๋น„ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ณต์œ ํ•œ๋‹ค๋Š”๊ฒŒ ์ฃผ์š” ๋‚ด์šฉ์ด๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. segmentation

16.5 ์†Œ๋‹จ์œ„๋Œ€ ๋Œ€๋‹จ์œ„ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜

  • ์ง€๊ธˆ์€ ๋Œ€๋‹จ์œ„ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์„ ํ•œ๋‹ค. (์Šคํƒ, ํž™, ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ) ์š”์ •๋„๋กœ๋งŒ ํฌ๊ฒŒํฌ๊ฒŒ ๋‚˜๋ˆ ์„œ ๋Œ€๋‹จ์œ„๋ผ๊ณ ํ•จ

  • ๊ทธ๋Ÿฐ๋ฐ ํ•„์š”์„ฑ์— ๋”ฐ๋ผ์„œ, ๋” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  • ์ด๋ ‡๊ฒŒ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ค„์ด๊ณ  ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ์„ธ๊ทธ๋ฉ˜ํŠธ ํ…Œ์ด๋ธ” ๊ฐ™์€ ์ƒˆ๋กœ์šด ํ•˜๋“œ์›จ์–ด ์ง€์›์ด ํ•„์š”ํ•˜๋‹ค.

16.6 ์šด์˜์ฒด์ œ์˜ ์ง€์›

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

  1. ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์•ผ๊ธฐํ•˜๋Š” ๋ฌธ์ œ
  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ์‹œ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ ๊ด€๋ฆฌ ๋ฌธ์ œ
    • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์˜ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ์‹œ ์šด์˜์ฒด์ œ๊ฐ€ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•ด์•ผ ํ•œ๋‹ค.(์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์ง€๊ฒ ์ง€!)
  • ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ ๋ณ€๊ฒฝ ์‹œ์˜ ๋ฌธ์ œ
    • ํ”„๋กœ๊ทธ๋žจ์ด malloc()์„ ํ˜ธ์ถœํ•  ๋•Œ, ๊ธฐ์กด ํž™์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉด ํž™ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ปค์ ธ์•ผ ํ•œ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํž™์„ ํ™•์žฅํ•˜๊ณ , ์šด์˜์ฒด์ œ๋Š” ํž™์„ ํ™•์žฅํ•˜์—ฌ ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์„ฑ๊ณต์„ ์•Œ๋ฆฐ๋‹ค.
    • ์šด์˜์ฒด์ œ๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด๋ฏธ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋นˆ ๊ณต๊ฐ„ ๊ด€๋ฆฌ ๋ฌธ์ œ
    • ์ƒˆ๋กœ์šด ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ƒ์„ฑํ•  ๋•Œ ์šด์˜์ฒด์ œ๋Š” ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
    • ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž‘์€ ๋นˆ ๊ณต๊ฐ„๋“ค๋กœ ๋‚˜๋‰˜์–ด ์ƒˆ๋กœ์šด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ์ด๋ฅผ ์™ธ๋ถ€ ๋‹จํŽธํ™”(external fragmentation)๋ผ๊ณ  ํ•œ๋‹ค.
  1. ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์•„์ง ํ•ด๊ฒฐ ๋ชปํ•œ ๋ฌธ์ œ
  • ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ
    • ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๊ฐ€๋ณ€ ํฌ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž‘์€ ์กฐ๊ฐ๋“ค๋กœ ๋‚˜๋‰˜์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋œ๋‹ค.
  • ์™„์ „ํžˆ ์ผ๋ฐ˜ํ™”๋œ ํฌ๋ฐ•ํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„ ์ง€์› ๋ถ€์กฑ ๋ฌธ์ œ
    • ํฐ ๋…ผ๋ฆฌ์  ์„ธ๊ทธ๋จผํŠธ(์˜ˆ: ํฌ๋ฐ•ํ•œ ํž™)๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์™„์ „ํžˆ ์ƒ์ฃผํ•ด์•ผ ํ•œ๋‹ค.
    • ์ฃผ์†Œ ๊ณต๊ฐ„ ์‚ฌ์šฉ ๋ชจ๋ธ์ด ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์„ค๊ณ„ ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์ด ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  1. ์šด์˜์ฒด์ œ๊ฐ€ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ฉ”๋ชจ๋ฆฌ ์••์ถ• ๋ฐฉ๋ฒ• ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌํ•˜๊ณ , ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๋ฌผ๋ฆฌ์  ์œ„์น˜๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํฐ ๋นˆ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์••์ถ•์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.
  • ์ž์œ  ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์œ ์ง€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ์ž์œ  ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” best-fit, worst-fit, first-fit, buddy algorithm ๋“ฑ์ด ์žˆ๋‹ค.

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

17. ๋นˆ ๊ณต๊ฐ„ ๊ด€๋ฆฌ

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

  • ๋ฌธ์ œ๋ฅผ ๋„ˆ๋ฌด ์ž˜ ์š”์•ฝํ•ด์„œ ์ฑ…์„ ๋ฐœ์ทŒํ•˜๋ฉด, ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ณต๊ฐ„์ด ๊ฐ€๋ณ€ ํฌ๊ธฐ์˜ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋Š” ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค.

17.1 ๊ฐ€์ •

์ด ๋…ผ์˜์˜ ๋Œ€๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž ์ˆ˜์ค€์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฐœ์ „ ์—ญ์‚ฌ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ๋‹ค. (malloc()๊ณผ free()๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ํž™ ์„ธ๊ทธ๋จผํŠธ ๋‚ด๋ถ€์˜ ๋นˆ ๊ณต๊ฐ„์„ ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š” ์—ญํ• ์„ ํ•„์—ฐ์ ์œผ๋กœ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.)

  1. ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค.
  2. ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค.

17.2 ์ € ์ˆ˜์ค€์˜ ๊ธฐ๋ฒ•๋“ค

๋ถ„ํ• ๊ณผ ๋ณ‘ํ•ฉ ํž™ ๊ด€๋ฆฌ

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

์‚ฌ์‹ค ๋ณ‘ํ•ฉ์˜ ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ‘์‹œ์ ’์— ๋นˆ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ์˜ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ๋ณ‘ํ•ฉ์‹œํ‚ค๋ฉด ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ ํฌ์ธํ„ฐ๋Š” ํ—ค๋”๊ฐ€ ์žˆ์–ด์„œ ์‹ค์ œ ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ์š”์ฒญํ•œ ๋ฉ”๋ชจ๋ฆฌ + ํ—ค๋” ํฌ๊ธฐ๋งŒํผ ํ• ๋‹นํ•œ๋‹ค.

ํž™ ๊ด€๋ฆฌ

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <unistd.h>

typedef struct __node_t {
  int size;
  struct __node_t *next;
} node_t;

#define MAGIC 1234567
typedef struct {
  int size;
  int magic;
} header_t;

node_t *head = NULL;

// ํž™ ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜
void init_heap(int size) {
  head =
      mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
  if (head == MAP_FAILED) {
    perror("mmap");
    exit(1);
  }
  head->size = size - sizeof(node_t);
  head->next = NULL;
}

// ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ•จ์ˆ˜
void *my_malloc(int size) {
  node_t *current = head;
  node_t *prev = NULL;

  while (current != NULL) {
    if (current->size >= size + sizeof(header_t)) {
      header_t *hptr = (header_t *)((char *)current + sizeof(node_t));
      hptr->size = size;
      hptr->magic = MAGIC;

      node_t *new_free = (node_t *)((char *)hptr + sizeof(header_t) + size);
      new_free->size = current->size - sizeof(header_t) - size - sizeof(node_t);
      new_free->next = current->next;

      if (prev == NULL) {
        head = new_free;
      } else {
        prev->next = new_free;
      }

      return (void *)(hptr + 1);
    }
    prev = current;
    current = current->next;
  }

  return NULL; // ํ• ๋‹น ์‹คํŒจ
}

// ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ํ•จ์ˆ˜
void my_free(void *ptr) {
  header_t *hptr = (header_t *)ptr - 1;
  assert(hptr->magic == MAGIC);

  node_t *free_block = (node_t *)hptr;
  free_block->size = hptr->size + sizeof(header_t);

  node_t *current = head;
  node_t *prev = NULL;

  while (current != NULL && current < free_block) {
    prev = current;
    current = current->next;
  }

  free_block->next = current;
  if (prev == NULL) {
    head = free_block;
  } else {
    prev->next = free_block;
  }

  // ๋ณ‘ํ•ฉ
  if (free_block->next != NULL &&
      (char *)free_block + free_block->size + sizeof(node_t) ==
          (char *)free_block->next) {
    free_block->size += free_block->next->size + sizeof(node_t);
    free_block->next = free_block->next->next;
  }

  if (prev != NULL &&
      (char *)prev + prev->size + sizeof(node_t) == (char *)free_block) {
    prev->size += free_block->size + sizeof(node_t);
    prev->next = free_block->next;
  }
}

// ํž™ ์ƒํƒœ ์ถœ๋ ฅ ํ•จ์ˆ˜
void print_heap() {
  node_t *current = head;
  printf("Free list:\n");
  while (current != NULL) {
    printf("Address: %p, Size: %d\n", current, current->size);
    current = current->next;
  }
}

int main() {
  init_heap(4096); // 4KB ํž™ ์ดˆ๊ธฐํ™”

  void *a = my_malloc(100);
  void *b = my_malloc(100);
  void *c = my_malloc(100);

  print_heap();

  my_free(b);

  print_heap();

  my_free(a);
  my_free(c);

  print_heap();

  return 0;
}

17.3 ํž™์˜ ํ™•์žฅ ๊ธฐ๋ณธ ์ „๋žต

ํž™์˜ ํ™•์žฅ์€ ๋นˆ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•  ๋•Œ, ๋” ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์—†์œผ๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค -๋- ์ด ์•„๋‹ˆ๊ณ 

  • ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์ „๋žต๋“ค์ด ์žˆ๋‹ค.

1. ์ตœ์  ์ ํ•ฉ (Best-Fit)

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

2. ์ตœ์ดˆ ์ ํ•ฉ (First-Fit)

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

3. ์ตœ์•… ์ ํ•ฉ (Worst-Fit)

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

4. ๋‹ค์Œ ์ ํ•ฉ (Next-Fit)

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

5. ๊ฐœ๋ณ„ ๋ฆฌ์ŠคํŠธ (Segregated List)

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

6. ๋ฒ„๋”” ํ• ๋‹น๊ธฐ (Buddy Allocation)

  • ๋™์ž‘ ๋ฐฉ์‹:
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ํฌ๊ธฐ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ์š”์ฒญ๋œ ํฌ๊ธฐ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ํฌ๊ธฐ์˜ ๋ธ”๋ก์„ ํ• ๋‹นํ•˜๋ฉฐ, ํ•„์š” ์‹œ ๋ธ”๋ก์„ ๋ถ„ํ• ํ•œ๋‹ค.
  • ์žฅ์ :
    • ๋ฉ”๋ชจ๋ฆฌ ๋ณ‘ํ•ฉ์ด ์‰ฝ๊ณ  ๋น ๋ฅด๋ฉฐ, ๋‚ด๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ์ ๋‹ค.
  • ๋‹จ์ :
    • ํ•ญ์ƒ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ํฌ๊ธฐ๋กœ ํ• ๋‹นํ•˜๋ฏ€๋กœ, ์ผ๋ถ€ ๊ฒฝ์šฐ ์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

18. ํŽ˜์ด์ง•: ๊ฐœ์š”