Skip to content

Latest commit

ย 

History

History
351 lines (214 loc) ยท 34.1 KB

Introduction-to-Paging.md

File metadata and controls

351 lines (214 loc) ยท 34.1 KB

ํŽ˜์ด์ง• ๊ฐœ๋ก 

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

๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ

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

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์— ์‚ฌ์šฉ๋˜๋Š” ARM Cortex-M ํ”„๋กœ์„ธ์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ์žฅ์น˜ (Memory Protection Unit, MPU)๊ฐ€ ์žˆ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์—ญ์— ๋‹ค๋ฅธ ์ ‘๊ทผ ๊ถŒํ•œ(ex, ์ ‘๊ทผ ๋ถˆ๊ฐ€, ์ฝ๊ธฐ ์ „์šฉ, ์ฝ๊ณ  ์“ฐ๊ธฐ ๊ฐ€๋Šฅ)์„ ๊ฐ–๋„๋ก ์ž‘์€ ์ˆซ์ž(ex, 8)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค MPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์—ญ ์•ˆ์— ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๊ถŒํ•œ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ์ „ํ™˜ํ•  ๋•Œ๋งˆ๋‹ค ๊ตฌ์—ญ๊ณผ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ฐ”๊ฟ”์„œ ์šด์˜ ์ฒด์ œ๊ฐ€ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋„๋ก ํ•œ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„œ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. console.log(ARM)

x86์€ ์„ธ๊ทธ๋จผํ…Œ์ด์…˜๊ณผ ํŽ˜์ด์ง•, ์ด ๋‘ ๊ฐ€์ง€ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ๋ฐฉ์‹์„ ์ง€์›ํ•œ๋‹ค.

์„ธ๊ทธ๋จผํ…Œ์ด์…˜ (๋ฉ”๋ชจ๋ฆฌ ๋ถ„ํ• )

์„ธ๊ทธ๋จผํ…Œ์ด์…˜์€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด 1978๋…„์— ๋„์ž…๋๋‹ค. ๊ทธ ๋‹น์‹œ์— CPU๋Š” 16๋น„ํŠธ ์ฃผ์†Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์ด 64KB๋กœ ์ œํ•œ๋๋‹ค. 64KB๋ณด๋‹ค ๋” ๋งŽ์ด ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์ด ์ถ”๊ฐ€๋๊ณ , ๊ฐ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์˜คํ”„์…‹ ์ฃผ์†Œ๋ฅผ ๋‹ด๋Š”๋‹ค. CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ์˜คํ”„์…‹์„ ๋” ํ•ด์„œ, 1MB ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค.

CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•œ๋‹ค. ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋• ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ(CS)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์Šคํƒ ์—ฐ์‚ฐ(push/pop) ์‹œ ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ(SS)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋Š” ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ(DS)๋‚˜ ์—ฌ๋ถ„ ์„ธ๊ทธ๋จผํŠธ(ES)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‚˜์ค‘์— ์ถ”๊ฐ€๋œ ์—ฌ๋ถ„ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ์ธ FS์™€ GS๋Š” ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

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

์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ „์— ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์€ ํ˜„์žฌ ๊ฑฐ์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฒ•์„ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ

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

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

๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ๋‘ ๊ฐœ๋ฅผ ๋™์‹œ์— ๋Œ๋ฆด ๋•Œ ์ด๋Ÿฐ ํŠน์„ฑ์ด ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค.

virtual-memory

์œ„ ๊ทธ๋ฆผ์—์„œ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ๋‘ ๊ฐœ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘๋™ ์ค‘์ด๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค๋Š” ์„ธ๊ทธ๋จผํŠธ ์˜คํ”„์…‹์ด 100์ด๋ฏ€๋กœ 0-150 ์‚ฌ์ด ๊ฐ€์ƒ ์ฃผ์†Œ๋Š” 100-250 ์‚ฌ์ด ์‹ค์ œ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค๋Š” ์˜คํ”„์…‹์ด 300์ด๋ฏ€๋กœ 0-150 ์‚ฌ์ด ๊ฐ€์ƒ ์ฃผ์†Œ๋Š” 300-450 ์‚ฌ์ด ์‹ค์ œ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฒ•์€ ๋‘ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ™์€ ์ฝ”๋“œ์™€ ๊ฐ™์€ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์„œ๋กœ ๊ฐ„์„ญ์ด ์—†๋„๋ก ํ•œ๋‹ค.

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

ํŒŒํŽธํ™”

๊ฐ€์ƒ ์ฃผ์†Œ์™€ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, ํŒŒํŽธํ™” ๋ฌธ์ œ๋„ ๋’ค๋”ฐ๋ฅธ๋‹ค.

fragmetation

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

ํŒŒํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ , ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ๋ผ๋ฆฌ ๋ถ™์—ฌ๋†“๊ณ , ์˜คํ”„์…‹์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

brute-force-fragmetation-solution

์ด์ œ ์—ฐ์†๋œ ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํžˆ ์žˆ์–ด์„œ ์„ธ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

ํŒŒํŽธํ™” ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์—์„œ ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ •ํ™•ํžˆ๋Š”, x86์˜ 64๋น„ํŠธ ๋ชจ๋“œ๊ฐ€ ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹ ์— ํŒŒํŽธํ™” ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํŽ˜์ด์ง•

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

ํŽ˜์ด์ง•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํŒŒํŽธํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.

paging

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

์ˆจ์€ ํŒŒํŽธํ™”

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

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

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

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”

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

์œ„์˜ ์˜ˆ์‹œ์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฒผ๋‹ค.

page-table

ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ์ž์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๊ฐ–๋Š”๋‹ค. x86 CPU๋Š” ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ํ…Œ์ด๋ธ”์„ CR3 ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค. ์šด์˜ ์ฒด์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์•Œ๋งž์€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ CR3 ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค, CPU๋Š” ์ด ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ํ…Œ์ด๋ธ” ํฌ์ธํ„ฐ๋ฅผ ์ฝ์–ด์™€์„œ ์ ‘๊ทผํ•˜๋ ค๋Š” ํŽ˜์ด์ง€์— ๋งคํ•‘๋œ ํ”„๋ ˆ์ž„์„ ํ…Œ์ด๋ธ”์—์„œ ์ฐพ๋Š”๋‹ค. ์ด ๊ณผ์ •์€ ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์— ์™„์ „ํžˆ ํˆฌ๋ช…ํ•˜๋‹ค. ๋งŽ์€ CPU ์•„ํ‚คํ…์ฒ˜๋Š” ๋ณ€ํ™˜ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด, ๋งˆ์ง€๋ง‰ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ํŠน์ˆ˜ํ•œ ์บ์‹œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜๋งˆ๋‹ค ๋‹ค๋ฅด์ง€๋งŒ, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ํ”Œ๋ž˜๊ทธ ํ•„๋“œ๋ฅผ ๋‘ฌ์„œ ์ ‘๊ทผ ๊ถŒํ•œ ๊ฐ™์€ ์†์„ฑ์„ ์ €์žฅํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ "r/w" ํ”Œ๋ž˜๊ทธ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

๋‹ค์ธต ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”

1๋‹จ์งœ๋ฆฌ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ง€๋ฉด ํ…Œ์ด๋ธ”๋„ ์ปค์ ธ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ€์ƒ ํŽ˜์ด์ง€ 0, 1,000,000, 1,000,050, 1,000,100๋ฒˆ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ณ๋ณด์ž.

multilevel-page-table

ํ”„๋กœ๊ทธ๋žจ์€ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ 4๊ฐœ๋งŒ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๋ฐฑ๋งŒ ๊ฐœ๊ฐ€ ๋„˜๋Š” ํ•ญ๋ชฉ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋นˆ ํ•ญ๋ชฉ์„ ํ…Œ์ด๋ธ”์—์„œ ๋บ„ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ CPU๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ณ€ํ™˜ํ•  ๋•Œ ์•Œ๋งž์€ ํ•ญ๋ชฉ์œผ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๋„ค ๋ฒˆ์งธ ํŽ˜์ด์ง€๊ฐ€ ๋„ค ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ณด์žฅ ๋ชป ํ•จ)

2๋‹จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 2๋‹จ ํ…Œ์ด๋ธ”์€ ์ฃผ์†Œ ๊ตฌ์—ญ์ด ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ ˆ๋ฒจ 2๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•ด์„œ ์ฃผ์†Œ ๊ตฌ์—ญ๊ณผ ๋ ˆ๋ฒจ 1 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋งคํ•‘์„ ๋ณด๊ด€ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ ˆ๋ฒจ 1 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ํฌ๊ธฐ๊ฐ€ 10,000์ธ ๊ตฌ์—ญ๋งŒ ๋‹ด๋‹นํ•˜๊ฒŒ ํ•œ๋‹ค.

2-level-page-table

ํŽ˜์ด์ง€ 0์€ ์ฒซ ๋ฒˆ์งธ 10,000 ๋ฐ”์ดํŠธ ๊ตฌ์—ญ์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ ๋ ˆ๋ฒจ 2 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ํ•ญ๋ชฉ์€ ๋ ˆ๋นŒ 1 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ธ T1์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. T1์€ ํŽ˜์ด์ง€ 0์ด ํ”„๋ ˆ์ž„ 0์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Œ์„ ์•Œ๋ ค์ค€๋‹ค.

ํŽ˜์ด์ง€ 1,000,000, 1,000,050, 1,000,100๋Š” 100๋ฒˆ์งธ 10,000 ๋ฐ”์ดํŠธ ๊ตฌ์—ญ์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ ๋ ˆ๋ฒจ 2 ํŽ˜์ด์ง€์˜ 100๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ํ•ญ๋ชฉ์€ ๋‹ค๋ฅธ ๋ ˆ๋นŒ 1 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ธ T2๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. T2๋Š” ์„ธ ํŽ˜์ด์ง€๋ฅผ 100, 150, 200 ํ”„๋ ˆ์ž„์— ๋งคํ•‘ํ•œ๋‹ค. ๋ ˆ๋ฒจ 1 ํŽ˜์ด์ง€์— ์žˆ๋Š” ํŽ˜์ด์ง€ ์ฃผ์†Œ๋Š” ๊ตฌ์—ญ ์˜คํ”„์…‹์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, 1,000,050 ํŽ˜์ด์ง€๋Š” ๊ทธ๋ƒฅ 50์ด๋‹ค.

์—ฌ์ „ํžˆ ๋ ˆ๋ฒจ 2 ํŽ˜์ด์ง€์— ํ•ญ๋ชฉ ๋ฐฑ๊ฐœ๊ฐ€ ๋น„์–ด์žˆ์ง€๋งŒ, ์ „์— ๋ฐฑ๋งŒ ๊ฐœ ํ•ญ๋ชฉ์ด ๋น„์—ˆ์„ ๋•Œ๋ณด๋‹ค ๋‚ซ๋‹ค. 10,000๊ณผ 1,000,000 ์‚ฌ์ด ๋งคํ•‘๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์—ญ์— ์ฑ„์›Œ ๋„ฃ์„ ๋ ˆ๋ฒจ 1 ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋ผ์„œ ๊ณต๊ฐ„์„ ๋งŽ์ด ์ ˆ์•ฝํ–ˆ๋‹ค.

2๋‹จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ 3๋‹จ, 4๋‹จ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ๋‹จ์œผ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ ํ…Œ์ด๋ธ”์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ์ด ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ ํ•˜์œ„ ๋ ˆ๋ฒจ ํ…Œ์ด๋ธ”์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , ๋‹ค์‹œ ๊ทธ ํ…Œ์ด๋ธ”์€ ๋‹ค์Œ ํ•˜์œ„ ๋ ˆ๋ฒจ ํ…Œ์ด๋ธ”์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ณ„์†๋œ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ 1 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๋งคํ•‘๋œ ํ”„๋ ˆ์ž„์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์„ ๋‹ค์ธต ๋˜๋Š” ๊ณ„์ธต์  ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํŽ˜์ด์ง•๊ณผ ๋‹ค์ธต ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์ž‘๋™๋ฐฉ์‹์„ ์•Œ์•˜์œผ๋ฏ€๋กœ, x86_64 ์•„ํ‚คํ…์ฒ˜์—์„œ ํŽ˜์ด์ง•์ด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋๋Š”์ง€ ์•Œ์•„๋ณธ๋‹ค. (CPU๊ฐ€ 64 ๋น„ํŠธ ๋ชจ๋“œ๋กœ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•จ)

X86_64์˜ ํŽ˜์ด์ง•

x86_64 ์•„ํ‚คํ…์ฒ˜๋Š” 4๋‹จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊ณผ 4KB ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๋ ˆ๋ฒจ์— ์ƒ๊ด€์—†์ด 512๊ฐœ์˜ ํ•ญ๋ชฉ์„ ๊ฐ–๋Š”๋‹ค. ๊ฐ ํ•ญ๋ชฉ์˜ ํฌ๊ธฐ๊ฐ€ 8 ๋ฐ”์ดํŠธ์ด๋ฏ€๋กœ ๊ฐ ํ…Œ์ด๋ธ”์€ 512 * 8 Bytes = 4KB ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ํŽ˜์ด์ง€ ํ•œ ๊ฐœ๋„ 4KB์ด๋ฏ€๋กœ ํ…Œ์ด๋ธ”์ด ํŽ˜์ด์ง€ ํ•˜๋‚˜์— ๋”ฑ ๋“ค์–ด๋งž๋Š”๋‹ค.

๊ฐ€์ƒ ์ฃผ์†Œ์—์„œ ๋ ˆ๋ฒจ์— ๋งž๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๋กœ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

page-table-index

๊ฐ ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค๋Š” 9 ๋น„ํŠธ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ด์— ๋งž๊ฒŒ ๊ฐ ํ…Œ์ด๋ธ”์€ 2^9 = 512๊ฐœ์˜ ํ•ญ๋ชฉ์„ ๊ฐ–๋Š”๋‹ค. ์ตœํ•˜์œ„ 12 ๋น„ํŠธ๋Š” 4KB ํฌ๊ธฐ(2^12 bytes= 4KB)์˜ ํŽ˜์ด์ง€ ๋‚ด๋ถ€์˜ ์˜คํ”„์…‹์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. 48๋ถ€ํ„ฐ 64๋น„ํŠธ๋Š” ๋ฒ„๋ ค์ง„๋‹ค. ์ฆ‰, x86_64๋Š” 48 ๋น„ํŠธ ์ฃผ์†Œ๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ์‹ค์ œ๋กœ 64 ๋น„ํŠธ๊ฐ€ ์•„๋‹ˆ๋‹ค.

48์—์„œ 64 ๋น„ํŠธ๊ฐ€ ๋ฒ„๋ ค์ ธ๋„, ์—ฌ๊ธฐ์— ์ž„์˜๋กœ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค. ๋Œ€์‹ ์— ์ฃผ์†Œ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ํ–ฅํ›„์— ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ 5๋‹จ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ฒ”์œ„์˜ ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ 47 ๋น„ํŠธ์™€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ์ด๋Š” 2์˜ ๋ณด์ˆ˜ ํ™•์žฅ๊ณผ ๋งค์šฐ ๋น„์Šทํ•ด์„œ ๋ถ€ํ˜ธ ํ™•์žฅ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฃผ์†Œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ถ€ํ˜ธ ํ™•์žฅ๋˜์ง€ ์•Š์œผ๋ฉด CPU๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

์ธํ…”์˜ ์ตœ์‹  ์•„์ด์Šค ๋ ˆ์ดํฌ CPU๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ 48๋น„ํŠธ์—์„œ 57๋น„ํŠธ๋กœ ํ™•์žฅํ•˜๋Š” 5๋‹จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์„ ํƒ์ ์œผ๋กœ ์ง€์›ํ•œ๋‹ค(์ ‘๊ทผ ๊ฐ€๋Šฅ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 256 TB์—์„œ 128 PB๋กœ ๋Š˜์–ด๋‚œ๋‹ค). ์•„์ง ํŠน์ • CPU์— ๋งž๊ฒŒ ์ปค๋„์„ ์ตœ์ ํ™”ํ•  ํ•„์š”๋Š” ์—†์œผ๋ฏ€๋กœ 4๋‹จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋งŒ ๋‹ค๋ฃจ๋„๋ก ํ•œ๋‹ค.

๋ณ€ํ™˜ ๊ณผ์ • ์˜ˆ์‹œ

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜ ๊ณผ์ •์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์ž์„ธํžˆ ์•Œ์•„๋ณธ๋‹ค.

example-translation

ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๋ ˆ๋ฒจ 4 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(4๋‹จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋ฃจํŠธ)์˜ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋Š” CR3 ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์€ ๋‹ค์Œ ๋ ˆ๋ฒจ ํ…Œ์ด๋ธ”์˜ ๋ฌผ๋ฆฌ ํ”„๋ ˆ์ž„์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋ ˆ๋ฒจ 1 ํ…Œ์ด๋ธ”์˜ ํ•ญ๋ชฉ์€ ๋งคํ•‘๋œ ํ”„๋ ˆ์ž„์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ฃผ์†Œ๋Š” ๊ฐ€์ƒ์ด ์•„๋‹Œ ์‹ค์ œ ์ฃผ์†Œ๋‹ค. ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์ผ๋‹ค๋ฉด CPU๊ฐ€ ํ•ด๋‹น ์ฃผ์†Œ๋„ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฌดํ•œ ์žฌ๊ท€๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์œ„์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ณ„์ธต์€ ํŒŒ๋ž—๊ฒŒ ํ‘œ์‹œ๋œ ํŽ˜์ด์ง€ ๋‘ ๊ฐœ๋ฅผ ๋งคํ•‘ํ•œ๋‹ค. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค์—์„œ ๋‘ ํŽ˜์ด์ง€์˜ ๊ฐ€์ƒ ์ฃผ์†Œ๊ฐ€ 0x803FE7F000์™€ 0x803FE00000์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด 0x803FE7F5CE๋ฒˆ ์ฃผ์†Œ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ•  ๋•Œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. ์šฐ์„ , ์ฃผ์†Œ๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ฐ”๊ฟ”์„œ ์ฃผ์†Œ์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค์™€ ํŽ˜์ด์ง€ ์˜คํ”„์…‹์„ ์ •ํ•œ๋‹ค.

binary-virtual-address

์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋กœ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ณ„์ธต์„ ๋”ฐ๋ผ ์ฃผ์†Œ์— ๋งคํ•‘๋œ ํ”„๋ ˆ์ž„์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  • CR3 ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๋ ˆ๋ฒจ 4 ํ…Œ์ด๋ธ”์˜ ์ฃผ์†Œ๋ฅผ ์ฝ๋Š”๋‹ค.
  • ๋ ˆ๋ฒจ 4 ์ธ๋ฑ์Šค๊ฐ€ 1์ด๋ฏ€๋กœ, ๋ ˆ๋ฒจ 4 ํ…Œ์ด๋ธ”์—์„œ 1๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง„ ํ•ญ๋ชฉ์„ ์ฐพ๋Š”๋‹ค. ์ด ํ•ญ๋ชฉ์—์„œ ๋ ˆ๋ฒจ 3 ํ…Œ์ด๋ธ”์ด 16KB ์ฃผ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • 16KB ์ฃผ์†Œ์—์„œ ๋ ˆ๋ฒจ 3 ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์™€์„œ 0๋ฒˆ ์ธ๋ฑ์Šค ํ•ญ๋ชฉ์„ ์ฐพ๋Š”๋‹ค. ์ด ํ•ญ๋ชฉ์—์„œ ๋ ˆ๋ฒจ 2 ํ…Œ์ด๋ธ”์ด 24KB์— ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆ๋ฒจ 2 ์ธ๋ฑ์Šค๊ฐ€ 511์ด๋ฏ€๋กœ, ํŽ˜์ด์ง€์˜ ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์„ ์ฐพ์•„์„œ ๋ ˆ๋ฒจ 1 ํ…Œ์ด๋ธ”์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.
  • ๋ ˆ๋ฒจ 1 ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค๊ฐ€ 127์ธ ํ•ญ๋ชฉ์„ ๋ณด๊ณ  ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ 12KB(16์ง„์ˆ˜๋กœ 0x3000) ํ”„๋ ˆ์ž„์— ๋งคํ•‘๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ, ํ”„๋ ˆ์ž„ ์ฃผ์†Œ์— ํŽ˜์ด์ง€ ์˜คํ”„์…‹์„ ๋”ํ•ด์„œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ 0x3000 + 0x5ce = 0x35ce๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.

translation

๋ ˆ๋ฒจ 1 ํ…Œ์ด๋ธ” ๋‚ด๋ถ€์˜ ํŽ˜์ด์ง€๋Š” ์ฝ๊ธฐ ์ „์šฉ์„ ๋œปํ•˜๋Š” r ๊ถŒํ•œ์„ ๊ฐ–๋Š”๋‹ค. ๊ถŒํ•œ์„ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๊ฐ•์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŽ˜์ด์ง€์— ์“ฐ๊ธฐ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ƒ์œ„ ๋ ˆ๋ฒจ ํŽ˜์ด์ง€์˜ ๊ถŒํ•œ์ด ํ•˜์œ„ ๋ ˆ๋ฒจ ํ…Œ์ด๋ธ”์˜ ๊ฐ€๋Šฅํ•œ ๊ถŒํ•œ์„ ์ œํ•œํ•˜๋ฏ€๋กœ ๋ ˆ๋ฒจ 3 ํ•ญ๋ชฉ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํ•˜์œ„ ๋ ˆ๋ฒจ์ด ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์„ ์ง€์ •ํ•ด๋„ ํ•ด๋‹น ํ•ญ๋ชฉ์— ์“ธ ์ˆ˜ ์—†๋‹ค.

์ด ์˜ˆ์‹œ์—์„œ๋Š” ๊ฐ ํ…Œ์ด๋ธ”์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋งŒ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ๊ฐ ๋ ˆ๋ฒจ๋งˆ๋‹ค ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋‹ค. ์ตœ๋Œ€๋กœ ๋‹ค์Œ์˜ ๊ฐœ์ˆ˜์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค.

  • ๋ ˆ๋ฒจ 4 ํ…Œ์ด๋ธ” 1๊ฐœ
  • ๋ ˆ๋ฒจ 3 ํ…Œ์ด๋ธ” 512๊ฐœ (๋ ˆ๋ฒจ 4 ํ…Œ์ด๋ธ”์— ํ•ญ๋ชฉ์ด 512๊ฐœ ์žˆ์œผ๋ฏ€๋กœ)
  • ๋ ˆ๋ฒจ 2 ํ…Œ์ด๋ธ” 512 * 512๊ฐœ(512๊ฐœ์˜ ๋ ˆ๋ฒจ 3 ํ…Œ์ด๋ธ”์ด ๊ฐ ํ•ญ๋ชฉ์„ 512๊ฐœ ๊ฐ€์ง€๋ฏ€๋กœ)
  • ๋ ˆ๋ฒจ 1 ํ…Œ์ด๋ธ” 512 * 512 * 512๊ฐœ

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํฌ๋งท

x86_64 ์•„ํ‚คํ…์ฒ˜์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ 512๊ฐœ ํ•ญ๋ชฉ์„ ๊ฐ€์ง„ ๋ฐฐ์—ด์ด๋‹ค. ๋Ÿฌ์ŠคํŠธ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

#[repr(align(4096))]
pub struct PageTable {
    entries: [PageTableEntry; 512],
}

repr ์†์„ฑ์œผ๋กœ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ 4KB ๊ฒฝ๊ณ„๋กœ ํŽ˜์ด์ง€ ์ •๋ ฌํ–ˆ๋‹ค. ์ด ์†์„ฑ์œผ๋กœ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด ํ•ญ์ƒ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ฑ„์›Œ์„œ ํ•ญ๋ชฉ๋“ค์ด ๋ฐ€์ง‘ํ•˜๊ฒŒ ๋ถ™์–ด์žˆ๋„๋ก ์ตœ์ ํ™”ํ•œ๋‹ค.

๊ฐ ํ•ญ๋ชฉ์€ 8 ๋ฐ”์ดํŠธ(64 ๋น„ํŠธ) ํฌ๊ธฐ๋ฅผ ๊ฐ–๊ณ  ๋‹ค์Œ์˜ ํ˜•์‹์„ ๋”ฐ๋ฅธ๋‹ค.

๋น„ํŠธ ์ด๋ฆ„ ์˜๋ฏธ
0 ์กด์žฌํ•จ ํŽ˜์ด์ง€๊ฐ€ ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์Œ
1 ์“ฐ๊ธฐ ๊ฐ€๋Šฅ ์ด ํŽ˜์ด์ง€์— ์“ฐ๊ธฐ ๊ฐ€๋Šฅ
2 ์‚ฌ์šฉ์ž ์ ‘๊ทผ ๊ฐ€๋Šฅ ์„ค์ • ์•ˆ ๋˜์–ด์žˆ์œผ๋ฉด, ์ปค๋„ ๋ชจ๋“œ์—์„œ๋งŒ ์ด ํŽ˜์ด์ง€์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
3 ์บ์‹œ๋ฅผ ํ†ตํ•œ ์“ฐ๊ธฐ ์“ฐ๋ฉด ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋จ
4 ์บ์‹œ ํ•ด์ œ ์ด ํŽ˜์ด์ง€์— ์บ์‹œ ์‚ฌ์šฉ ์•ˆ ํ•จ
5 ์ ‘๊ทผ๋จ ์ด ํŽ˜์ด์ง€์— ์ฝ๊ธฐ ๋ฐœ์ƒ ์‹œ CPU๊ฐ€ ์ด ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•จ
6 ๋”ํ‹ฐ ์ด ํŽ˜์ด์ง€์— ์“ฐ๊ธฐ ๋ฐœ์ƒ ์‹œ CPU๊ฐ€ ์ด ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•จ
7 ํฐ ํŽ˜์ด์ง€/null P1๊ณผ P4์—์„œ๋Š” 0์ด๊ณ , P3์—์„œ๋Š” 1GB ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , P2์—์„œ๋Š” 2MB ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•จ
8 ์ „์—ญ ์ฃผ์†Œ ๊ณต๊ฐ„ ์Šค์œ„์น˜์—์„œ ํŽ˜์ด์ง€๊ฐ€ ์บ์‹œ์—์„œ ์ง€์›Œ์ง€์ง€ ์•Š์Œ (CR4 ๋ ˆ์ง€์Šคํ„ฐ์˜ PGE ๋น„ํŠธ๊ฐ€ ์„ค์ •๋ผ์•ผ ํ•จ)
9-11 ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์šด์˜ ์ฒด์ œ๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•ด๋„ ๋จ
12-51 ๋ฌผ๋ฆฌ ์ฃผ์†Œ ํ”„๋ ˆ์ž„์ด๋‚˜ ๋‹ค์Œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ 52๋น„ํŠธ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ •๋ ฌํ•œ ํŽ˜์ด์ง€
52-62 ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์šด์˜ ์ฒด์ œ๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•ด๋„ ๋จ
63 ์‹คํ–‰ ๊ธˆ์ง€ ์ด ํŽ˜์ด์ง€์— ์ฝ”๋“œ ์‹คํ–‰์„ ๊ธˆ์ง€ํ•จ (EFER ๋ ˆ์ง€์Šคํ„ฐ์˜ NXE ๋น„ํŠธ๊ฐ€ ์„ค์ •๋ผ์•ผ ํ•จ)

12-51 ๋น„ํŠธ๋งŒ ๋ฌผ๋ฆฌ ํ”„๋ ˆ์ž„ ์ฃผ์†Œ ์ €์žฅ์— ์‚ฌ์šฉ๋œ๋‹ค. ๋‚˜๋จธ์ง€ ๋น„ํŠธ๋Š” ํ”Œ๋ž˜๊ทธ๋กœ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ์šด์˜ ์ฒด์ œ์—์„œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” ํ•ญ์ƒ โ‘  4096 ๋ฐ”์ดํŠธ๋กœ ์ •๋ ฌํ•œ ์ฃผ์†Œ๋‚˜ โ‘ก ํŽ˜์ด์ง€ ์ •๋ ฌ๋œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด๋‚˜ โ‘ข ๋งคํ•‘๋œ ํ”„๋ ˆ์ž„์˜ ์‹œ์ž‘์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, 0-11 ๋น„ํŠธ๋Š” ํ•ญ์ƒ 0์ด๋ฏ€๋กœ, ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 0-11 ๋น„ํŠธ๋ฅผ ์ €์žฅํ•  ํ•„์š” ์—†๋‹ค. x86_64 ์•„ํ‚คํ…์ฒ˜๋Š” 52 ๋น„ํŠธ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ (48 ๋น„ํŠธ ๊ฐ€์ƒ ์ฃผ์†Œ๋งŒ ์ง€์›ํ•˜๋“ฏ์ด) 52โ€“63 ๋น„ํŠธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €์žฅํ•  ํ•„์š” ์—†๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋ž˜๊ทธ๋“ค ์ž์„ธํžˆ ์‚ดํŽด๋ณธ๋‹ค.

  • ์กด์žฌํ•จ ํ”Œ๋ž˜๊ทธ๋Š” ํŽ˜์ด์ง€์˜ ๋งคํ•‘ ์—ฌ๋ถ€๋ฅผ ๊ตฌ๋ณ„ํ•œ๋‹ค. ์ฃผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฝ‰ ์ฐผ์„ ๋•Œ ํŽ˜์ด์ง€๋ฅผ ์ž„์‹œ๋กœ ๋””์Šคํฌ์— ์Šค์™‘ ์•„์›ƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดํ›„์— ์Šค์™‘ ์•„์›ƒ๋œ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๋ฉด ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋””์Šคํฌ์—์„œ ๋ˆ„๋ฝ๋œ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์™€ ํ”„๋กœ๊ทธ๋žจ์„ ์žฌ๊ฐœํ•ด์„œ ์šด์˜์ฒด์ œ๊ฐ€ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • ์“ฐ๊ธฐ ๊ฐ€๋Šฅ๊ณผ ์‹คํ–‰ ๊ธˆ์ง€ ํ”Œ๋ž˜๊ทธ๋Š” ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์ด ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•œ๋‹ค.
  • ์ ‘๊ทผ๋จ๊ณผ ๋”ํ‹ฐ ํ”Œ๋ž˜๊ทธ๋Š” ํŽ˜์ด์ง€์— ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ฐœ์ƒ ์‹œ CPU์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์„ค์ •๋œ๋‹ค. ์šด์˜ ์ฒด์ œ๋Š” ์ด ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด์„œ ์Šค์™‘ ์•„์›ƒํ•  ํŽ˜์ด์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ฑฐ๋‚˜ ๋งˆ์ง€๋ง‰ ๋””์Šคํฌ ์ €์žฅ ์ดํ›„ ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ์บ์‹œ๋ฅผ ํ†ตํ•œ ์“ฐ๊ธฐ๋‚˜ ์บ์‹œ ํ•ด์ œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ํŽ˜์ด์ง€์˜ ์บ์‹œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ ‘๊ทผ ๊ฐ€๋Šฅ ํ”Œ๋ž˜๊ทธ๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์ฝ”๋“œ์—์„œ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์„ค์ •์ด ์•ˆ ๋œ ๊ฒฝ์šฐ, CPU๊ฐ€ ์ปค๋„ ๋ชจ๋“œ์ธ ๊ฒฝ์šฐ์—๋งŒ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ปค๋„์„ ๋งคํ•‘ํ•ด์„œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ŠคํŽ™ํ„ฐ ์ทจ์•ฝ์ ์ด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ ๋ชจ๋“œ์šฉ ํŽ˜์ด์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋Š” ๋ชจ๋“  ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•Œ๋ฆฌ๋ฏ€๋กœ ์ฃผ์†Œ ๊ณต๊ฐ„ ์Šค์œ„์น˜์˜ ๋ณ€ํ™˜ ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•  ํ•„์š”๊ฑฐ ์—†๋‹ค(์•„๋ž˜ TTLB ์„น์…˜์—์„œ ๋‹ค๋ฃธ). ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋Š” ์ปค๋„ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“  ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ์œ ์ € ์ ‘๊ทผ ๊ฐ€๋Šฅ ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.
  • ํฐ ํŽ˜์ด์ง€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ ˆ๋ฒจ 2๋‚˜ ๋ ˆ๋ฒจ 3 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ํ•ญ๋ชฉ์ด ๋งตํ•‘๋œ ํ”„๋ ˆ์ž„์„ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด์„œ ๋” ํฐ ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ํฐ ํŽ˜์ด์ง€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜๋ฉด, ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ 512๋ฐฐ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋ ˆ๋ฒจ 2 ํ•ญ๋ชฉ์€ 512 _ 4KB = 2MB, ๋ ˆ๋ฒจ 3 ํ•ญ๋ชฉ์€ 512 _ 2MB = 1GB ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ํŽ˜์ด์ง€ ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉด ๋ณ€ํ™˜ ์บ์‹œ์™€ ํŽ˜์ด์ง€ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์ค„์–ด๋“œ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

x86_64 ํฌ๋ ˆ์ดํŠธ๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊ณผ ํŽ˜์ด์ง€ ํ•ญ๋ชฉ์„ ํ‘œํ˜„ํ•˜๋Š” ํƒ€์ž…์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ํŽ˜์ด์ง•์— ์‚ฌ์šฉํ•  ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๋ณ€ํ™˜ ์ƒ‰์ธ ๋ฒ„ํผ (Translation Lookaside Buffer)

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

๋‹ค๋ฅธ CPU ์บ์‹œ์™€ ๋‹ฌ๋ฆฌ, TLB๋Š” ์™„์ „ํžˆ ํˆฌ๋ช…ํ•˜์ง€ ์•Š๊ณ  ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋์„ ๋•Œ ๋ณ€ํ™˜์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ปค๋„์ด ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค TLB๋„ ์ง์ ‘ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด TLB์—์„œ ํŠน์ • ํŽ˜์ด์ง€์˜ ๋ณ€ํ™˜์„ ์ œ๊ฑฐํ•ด์„œ ๋‹ค์Œ ์ ‘๊ทผ ์‹œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜๊ฒŒ ํ•˜๋Š” invlpg ("invalidate page")๋ผ๋Š” CPU ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค. ๋˜ํ•œ, ์ฃผ์†Œ ๊ณต๊ฐ„ ์Šค์œ„์น˜๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ดํŠธ ํ•˜๋Š” CR3 ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ด์„œ TLB๋ฅผ ์™„์ „ํžˆ ๋น„์šธ ์ˆ˜ ์žˆ๋‹ค. x86_64 ํฌ๋ ˆ์ดํŠธ๋Š” tlb module์„ ํ†ตํ•ด invlpg์™€ CR3๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ œ๊ณตํ•œ๋‹ค.

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค TLB๋ฅผ ๋น„์šฐ๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด CPU๊ฐ€ ์ด์ „ ๋ณ€ํ™˜์„ ๊ณ„์† ์‚ฌ์šฉํ•ด์„œ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์–ด๋ ค์šด ๋น„๊ฒฐ์ •์  ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌํ˜„

์•Œ๊ณ ๋ณด๋ฉด ์ปค๋„์€ ์ด๋ฏธ ํŽ˜์ด์ง•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์•„์ฃผ ์ž‘์€ ๋Ÿฌ์ŠคํŠธ ์ปค๋„์—์„œ ๋ชจ๋“  ์ปค๋„์˜ ํŽ˜์ด์ง€๋ฅผ ๋ฌผ๋ฆฌ ํ”„๋ ˆ์ž„์— ๋งคํ•‘ํ•˜๋Š” 4๋‹จ ํŽ˜์ด์ง• ๊ณ„์ธต์„ ์„ค์ •ํ–ˆ๋‹ค. x86_64 64๋น„ํŠธ ๋ชจ๋“œ์—์„œ ํŽ˜์ด์ง•์€ ํ•„์ˆ˜์ด๋ฏ€๋กœ ๋ถ€ํŠธ๋กœ๋”๊ฐ€ ํŽ˜์ด์ง• ์„ค์ •์„ ํ•ด๋†จ๋‹ค.

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

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

ํŽ˜์ด์ง€ ํดํŠธ

์ปค๋„ ๋ฐ–์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด์„œ ํŽ˜์ด์ง€ ํดํŠธ๋ฅผ ์ผ์œผ์ผœ๋ณธ๋‹ค. ์šฐ์„ , ํŽ˜์ด์ง€ ํดํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ IDT์— ๋“ฑ๋กํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋”๋ธ” ํดํŠธ ๋Œ€์‹ ์— ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

// src/interrupts.rs ๋‚ด๋ถ€

lazy_static! {
    static ref IDT: InterruptDescriptorTable = {
        let mut idt = InterruptDescriptorTable::new();

        [โ€ฆ]

        idt.page_fault.set_handler_fn(page_fault_handler); // new

        idt
    };
}

use x86_64::structures::idt::PageFaultErrorCode;
use crate::hlt_loop;

extern "x86-interrupt" fn page_fault_handler(
    stack_frame: &mut InterruptStackFrame,
    error_code: PageFaultErrorCode,
) {
    use x86_64::registers::control::Cr2;

    println!("EXCEPTION: PAGE FAULT");
    println!("Accessed Address: {:?}", Cr2::read());
    println!("Error Code: {:?}", error_code);
    println!("{:#?}", stack_frame);
    hlt_loop();
}

ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ ์‹œ CPU์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” CR2 ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ ‘๊ทผ๋ผ์„œ ํŽ˜์ด์ง€ ํดํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. x86_64 ํฌ๋ ˆ์ดํŠธ์˜ Cr2::read ํ•จ์ˆ˜๋กœ CR2 ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ฝ๊ณ  ์ถœ๋ ฅํ•œ๋‹ค. PageFaultErrorCode ํƒ€์ž…์€ ํŽ˜์ด์ง€ ํดํŠธ๋ฅผ ์ผ์œผํ‚จ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ ์—ฐ์‚ฐ์ด ์ฝ๊ธฐ์ธ์ง€ ์“ฐ๊ธฐ์ธ์ง€ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ํŽ˜์ด์ง€ ํดํŠธ ํ•ด๊ฒฐ ์ „๊นŒ์ง€ ์‹คํ–‰์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์— hlt_loop์— ๋“ค์–ด๊ฐ„๋‹ค.

์ปค๋„ ์™ธ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด๋ณธ๋‹ค.

// src/main.rs ๋‚ด๋ถ€

#[no_mangle]
pub extern "C" fn _start() -> ! {
    println!("Hello World{}", "!");

    blog_os::init();

    // ์ƒˆ๋กœ ์ถ”๊ฐ€
    let ptr = 0xdeadbeaf as *mut u32;
    unsafe { *ptr = 42; }

    // ์ „๊ณผ ๊ฐ™์Œ
    #[cfg(test)]
    test_main();

    println!("It did not crash!");
    blog_os::hlt_loop();
}

์ปค๋„ ์‹คํ–‰ ์‹œ ํŽ˜์ด์ง€ ํดํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

page-fault-handler-called

CR2 ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ ‘๊ทผ์„ ์‹œ๋„ํ•œ 0xdeadbeaf ์ฃผ์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ์—๋Ÿฌ ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” CAUSED_BY_WRITE๋ฅผ ํ†ตํ•ด ์“ฐ๊ธฐ ์ž‘์—… ์‹คํ–‰์„ ํ•˜๋˜ ์ค‘์— ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์„ค์ •๋˜์ง€ ์•Š์€ ๋น„ํŠธ๋ฅผ ํ†ตํ•ด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด PROTECTION_VIOLATION ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์€ ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ์—†์–ด์„œ ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

ํ˜„์žฌ ๋ช…๋ น์–ด ํฌ์ธํ„ฐ๊ฐ€ 0x2031b2์ด๋ฏ€๋กœ, ์ด ์ฃผ์†Œ๋Š” ์ฝ”๋“œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ฝ”๋“œ ํŽ˜์ด์ง€๋Š” ๋ถ€ํŠธ๋กœ๋”์— ์˜ํ•ด ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งคํ•‘๋˜๋ฏ€๋กœ ์ด ์ฃผ์†Œ๋ฅผ ์ฝ์„ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์“ฐ๋ฉด ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 0xdeadbeaf ํฌ์ธํ„ฐ๋ฅผ 0x2031b2 ๋ฐ”๊ฟ”์„œ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

// ์ฃผ์˜: ์‹ค์ œ ์ฃผ์†Œ๋Š” ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ
// ํŽ˜์ด์ง€ ํดํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๊ฐ€ ํ‘œ์‹œํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ
let ptr = 0x2031b2 as *mut u32;

// ์ฝ”๋“œ ํŽ˜์ด์ง€ ์ฝ๊ธฐ
unsafe { let x = *ptr; }
println!("์ฝ๊ธฐ ์„ฑ๊ณต");

// ์ฝ”๋“œ ํŽ˜์ด์ง€์— ์“ฐ๊ธฐ
unsafe { *ptr = 42; }
println!("์“ฐ๊ธฐ ์„ฑ๊ณต");

๋งˆ์ง€๋ง‰ ์ค„์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ฝ๊ธฐ ์ ‘๊ทผ์€ ์ •์ƒ ์ž‘๋™ํ•˜์ง€๋งŒ, ์“ฐ๊ธฐ ์ ‘๊ทผ ์‹œ ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

![code-page-write-access]](https://user-images.githubusercontent.com/22253556/81690949-04d10080-9497-11ea-94e5-3cc5863d6796.png)

"์ฝ๊ธฐ ์„ฑ๊ณต" ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜์–ด ์ฝ๊ธฐ ์ž‘์—… ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "์“ฐ๊ธฐ ์„ฑ๊ณต" ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๋Œ€์‹  ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฒˆ์—๋Š” PROTECTION_VIOLATION ํ”Œ๋ž˜๊ทธ๊ฐ€ CAUSED_BY_WRITE ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์„ค์ •๋ผ์„œ ํŽ˜์ด์ง€๊ฐ€ ์žˆ์ง€๋งŒ, ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์ด ์‹คํ–‰๋์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ฝ”๋“œ ํŽ˜์ด์ง€๊ฐ€ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งคํ•‘๋๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€ ์“ฐ๊ธฐ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค.

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ ‘๊ทผํ•˜๊ธฐ

์ปค๋„ ๋งคํ•‘ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์‚ดํŽด๋ณธ๋‹ค.

// src/main.rs ๋‚ด๋ถ€

#[no_mangle]
pub extern "C" fn _start() -> ! {
    println!("Hello World{}", "!");

    blog_os::init();

    use x86_64::registers::control::Cr3;

    let (level_4_page_table, _) = Cr3::read();
    println!("Level 4 page table at: {:?}", level_4_page_table.start_address());

    [โ€ฆ] // test_main(), println(โ€ฆ), and hlt_loop()
}

x86_64์˜ Cr3::read ํ•จ์ˆ˜๋Š” CR3 ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๋ ˆ๋ฒจ 4 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. Cr3::read()์€ PhysFrame๊ณผ Cr3Flags ํƒ€์ž…์˜ ํŠœํ”Œ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ”„๋ ˆ์ž„๋งŒ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์œผ๋ฏ€๋กœ ํŠœํ”Œ์˜ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋Š” ๋ฌด์‹œํ•œ๋‹ค.

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋œ๋‹ค.

Level 4 page table at: PhysAddr(0x1000)

ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๋ ˆ๋ฒจ 4 ํ…Œ์ด๋ธ”์ด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ 0x1000 ์ฃผ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ๊ณ  ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” PhysAddr ๋ž˜ํผ ํƒ€์ž…์œผ๋กœ ํ‘œ์‹œ๋๋‹ค. ์ปค๋„์—์„œ ์ด ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

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

์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

์š”์•ฝ

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

ํŽ˜์ด์ง•์€ 1๋‹จ ์ด์ƒ์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ํŽ˜์ด์ง€ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. x86_64 ์•„ํ‚คํ…์ฒ˜๋Š” 4๋‹จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๊ณ  ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ๋Š” 4KB์ด๋‹ค. ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ž๋™์œผ๋กœ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋”ฐ๋ผ ์ด๋™ํ•˜๊ณ  ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋Š” ๋ณ€ํ™˜ ์ƒ‰์ธ ๋ฒ„ํผ(TLB)์— ์บ์‹œ ํ•œ๋‹ค. ๋ณ€ํ™˜ ์ƒ‰์ธ ๋ฒ„ํผ๋Š” ํˆฌ๋ช…ํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ ์‹œ ์ˆ˜๋™์œผ๋กœ ๋น„์›Œ์•ผ ํ•œ๋‹ค.

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