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

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

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

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

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

17.1 ๊ฐ€์ •

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

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

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

ํž™ ๊ด€๋ฆฌ

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

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

๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ ๋‚ด์žฅ

  • ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด ํ•„์š”ํ•  ๋•Œ malloc()์„ ํ˜ธ์ถœํ•จ
  • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฃจํ‹ด์—์„œ๋Š” ์ด๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ๋Œ€์‹  ๋นˆ ๊ณต๊ฐ„ ๋‚ด์— ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผํ•จ

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

...

node_t *head = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
head->size = 4096 - sizeof(node_t);
head->next = NULL;
  • ์ด๋ ‡๊ฒŒ ์ดˆ๊ธฐํ™”๋Š” ํ•ด๋‘๊ณ ,
  • ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ (์˜ˆ์‹œ 100๋ฐ”์ดํŠธ)๊ฐ€ ์š”์ฒญ๋˜๋ฉด ๋จผ์ € ์ถฉ๋ถ„ํ•œ ํฌ๊ธฐ์˜ ์ฒญํฌ๋ฅผ ์ฐพ๋Š”๋‹ค.
  • ์ง€๊ธˆ์€ 4088์˜ ํ•˜๋‚˜์˜ ์ฒญํฌ๋งŒ์ด ์กด์žฌํ•˜๋‹ˆ๊นŒ ์—ฌ๊ธฐ๊ฐ€ ์„ ํƒ๋œ๋‹ค.
  • ๊ทธ ํ›„ ํ—ค๋”๋ฅผ ํฌ์ธํ„ฐ ์•ž์— ์ ๊ณ , 100๋ฐ”์ดํŠธ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์Šคํ”Œ๋ฆฃํ•œ๋‹ค. Image
  • ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ณผ์ •
  • ๊ทธ๋ฆฌ๊ณ  ์„ธ๊ฐœ์˜ 100๋ฐ”์ดํŠธ ์ฒญํฌ๊ฐ€ ์žˆ๋‹ค๊ฐ€ ๊ฐ€์šด๋ฐ ํ•˜๋‚˜๊ฐ€ ํ•ด์ œ๋˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•œ๋‹ค. Image
  • ๊ทธ๋Ÿฌ๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋นˆ๊ณต๊ฐ„๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹น ๋ฐ˜ํ™˜๋œ ๊ณต๊ฐ„์„ ์‚ฝ์ž…ํ•œ๋‹ค. (๋‹จํŽธํ™” ๋ฐœ์ƒ)
  • ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋นˆ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ƒ๊ธด๋‹ค.
  • ์š”๊ฑธ ๋‹ค์‹œ ๋ฆฌ์ŠคํŠธ์ˆœํšŒํ•ด์„œ ์ธ์ ‘ํ•œ ๋ฆฌ์ŠคํŠธ๋ผ๋ฆฌ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ๋นˆ๊ณต๊ฐ„์œผ๋กœ ๋งŒ๋“ ๋‹ค.

ํž™ ๊ด€๋ฆฌ

#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. ํŽ˜์ด์ง•: ๊ฐœ์š”

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

ํ•ต์‹ฌ ์งˆ๋ฌธ : ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ƒํ™” ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

18.1 ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ๋ฐ ๊ฐœ์š”

Image

  • 128 ๋ฐ”์ดํŠธ์˜ (๋น„ํ˜„์‹ค์ ์œผ๋กœ ์ž‘์€) ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜ˆ์‹œ
  • ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ํŽ˜์ด์ง€๋“ค์€ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ ์ „์ฒด์— ๋ถ„์‚ฐ ๋ฐฐ์น˜๋˜์–ด์žˆ๋‹ค.
  • ์ด์ „ ๋ฐฉ์‹์— ๋น„ํ•ด ๋‹ค์–‘ํ•œ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • ์ผ๋‹จ ๋จผ์ € ์œ ์—ฐํ•˜๋‹ค. ํž™๊ณผ ์Šคํƒ์ด ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ปค์ง€๋Š”๊ฐ€, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ๊ฐ€์ •์ด ํ•„์š” ์—†๋‹ค.
    • ๋‹ค์Œ์œผ๋กœ ๋‹จ์ˆœํ•˜๋‹ค. 64๋ฐ”์ดํŠธ ์ฃผ์†Œ๊ณต๊ฐ„์„ 8ํŽ˜์ด์ง€ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐฐ์น˜ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, 4๊ฐœ์˜ ๋น„์–ด์žˆ๋Š” ํŽ˜์ด์ง€๋งŒ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.
  • ์ฃผ์†Œ๊ณต๊ฐ„์˜ ๊ฐ ๊ฐ€์ƒ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜ ๊ธฐ๋ก์„ ์œ„ํ•˜์—ฌ ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด๋ผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • ์ฃผ์†Œ๊ณต๊ฐ„์˜ ๊ฐ€์ƒํŽ˜์ด์ง€ ์ฃผ์„œ ๋ณ€ํ™˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š”๊ฒƒ์ด๋‹ค. (virtual page 1 -> physical page 7) …
  • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์กด์žฌํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ€์ƒ ์ฃผ์†Œ์˜ ๋ณ€ํ™˜์„ ์œ„ํ•ด ๋จผ์ € ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ(Virtual Page Number)์™€ ํŽ˜์ด์ง€ ๋‚ด์˜ ์˜คํ”„์…‹ 2๊ฐœ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ถ„ํ• ํ•œ๋‹ค.

๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ(VPN) ๊ณ„์‚ฐ โ€ข 0x1C34A8 = 0001 1100 0011 0100 1010 1000โ‚‚ โ€ข ์ƒ์œ„ 20๋น„ํŠธ๊ฐ€ VPN: 0001 1100 0011 0โ‚‚ = 0x1C3 โ€ข VPN = 0x1C3 (10์ง„์ˆ˜: 451)

ํŽ˜์ด์ง€ ์˜คํ”„์…‹ ๊ณ„์‚ฐ โ€ข ํ•˜์œ„ 12๋น„ํŠธ: 0100 1010 1000โ‚‚ = 0x4A8 โ€ข ์˜คํ”„์…‹ = 0x4A8 (10์ง„์ˆ˜: 1192)

ํ…Œ์ด๋ธ”์—์„œ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€ ์ฃผ์†Œ ์–ป๊ธฐ

  • 0x1C3 -> 0x2F5

๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ

๋ฌผ๋ฆฌ ์ฃผ์†Œ = (PFN « 12) | Offset = (0x2F5 « 12) | 0x4A8 = 0x2F5000 + 0x4A8 = 0x2F54A8 (10์ง„์ˆ˜: 3099432)

18.2 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์–ด๋””์— ์ €์žฅ๋˜๋Š”๊ฐ€

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

18.3 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—๋Š” ์‹ค์ œ ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€

  • ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋Š” ์„ ํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด๊ณ  ๋‹จ์ˆœํ•œ ๋ฐฐ์—ด์ด๋‹ค.
  • VPN์œผ๋กœ ๋ฐฐ์—ด์˜ ํ•ญ๋ชฉ์— ์ ‘๊ทผํ•˜๊ณ , ๊ทธํ•ญ๋ชฉ์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ(PTE)๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. (๊ณ  ๊ฐ€์ •)
  • Valid bit : ํŠน์ • ๋ณ€ํ™˜์˜ ์œ ํšจ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ ํฌํ•จ (๋ชจ๋“  ๋ฏธ์‚ฌ์šฉ ๊ณต๊ฐ„์€ invalid) ๋งŒ์•ฝ ๊ฑฐ๊ธฐ ์ ‘๊ทผํ•˜๋ฉด ์šด์˜์ฒด์ œ์— ํŠธ๋žฉ์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ๋˜ํ•œ ํ• ๋‹นํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ๊ณต๊ฐ„์ด๋ผ๋Š” ํ‘œ์‹์œผ๋กœ์จ ๊ธฐ๋Šฅํ•˜ ์‹ค์ œ ๋ฌผ๋ฆฌ ํ”„๋ ˆ์ž„์„ ํ• ๋‹นํ•  ํ•„์š”์„ ์—†์•  ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•œ๋‹ค.
  • Protection bit : ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํฌํ•จํ•˜๋Š” ๋น„ํŠธ์ด๋‹ค. ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋ฐฉ์‹์˜ ์ ‘๊ทผ์€ ํŠธ๋žฉ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • Present bit : ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š”์ง€, (ํ˜น์€ ์Šค์™‘์•„์›ƒ ๋˜์—ˆ๋Š”์ง€) ํ™•์ธํ•œ๋‹ค.
  • Dirty bit : ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ์ดํ›„ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ถ”์ ํ•œ๋‹ค.
  • reference bit : ํŽ˜์ด์ง€๊ฐ€ ์ ‘๊ทผ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ถ”์ ํ•œ๋‹ค, ์–ด๋–ค ํŽ˜์ด์ง€๊ฐ€ ์ธ๊ธฐ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋œ๋‹ค.

18.4 ํŽ˜์ด์ง•: ๋„ˆ๋ฌด ๋А๋ฆผ

movl 2l, %eax
  • ๊ฐ€์ƒ์ฃผ์†Œ (21)์„ ์ •ํ™•ํ•œ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ (117)๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•œ๋‹ค.
  • 117์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์ž…ํ•˜๊ธฐ ์ „์— ์‹œ์Šคํ…œ์€ ํ”„๋กœ์„ธ์Šค์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—์„œ ์ ์ ˆํ•œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์™€์•ผํ•˜๊ณ ,
  • ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•œ ํ›„, ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ‘์žฌํ•œ๋‹ค.
  • ํ•˜๋“œ์›จ์–ด๋Š” ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์œ„์น˜๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.
  • ๋‹น๋ถ„๊ฐ„ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์‹œ์ž‘ ์ฃผ์†Œ(๋ฌผ๋ฆฌ์ฃผ์†Œ)๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. (์œ„์˜ ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ ์ดํ›„์˜ ๊ณ„์‚ฐ์„ ์ง„ํ–‰ํ•ด์•ผํ•จ)