Category: OS

0

64bit ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - Day 5

์ด ๊ธ€์€ โ€˜64๋น„ํŠธ ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - ํ•œ์Šนํ›ˆ ์ €์žโ€™์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ 64๋น„ํŠธ ์ „ํ™˜ ์ค€๋น„์„ ํ˜• ์ฃผ์†Œ์™€ 4๋‹จ๊ณ„ ํŽ˜์ด์ง• ๊ธฐ๋ฒ•ํŽ˜์ด์ง•์— ์‚ฌ์šฉํ•˜๋Š” ๊ฐ ํ…Œ์ด๋ธ”์€ 512๊ฐœ์˜ ์—”ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๋‹ค์Œ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉํ•  ํ…Œ์ด๋ธ”์˜ ๊ธฐ์ค€ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์ธ ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์—”ํŠธ๋ฆฌ๋Š” 2MB ํŽ˜์ด์ง€์˜ ๊ธฐ์ค€ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•œ๋‹ค. ์ฑ… P.250 ๋‚ด์šฉ์— ํฌํ•จ๋œ ์‚ฌ์ง„์„ ๋ณด์‹œ๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ์ฃผ์†Œ๋ฅผ ์‹ค์ œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์€ CR3 ๋ ˆ์ง€์Šคํ„ฐ์— ์„ค์ •๋œ PML4 ํ…Œ์ด๋ธ”์˜ ๊ธฐ์ค€ ์ฃผ์†Œ๋กœ PML4 ์—”ํŠธ๋ฆฌ -> ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ ํฌ์ธํ„ฐ ์—”ํŠธ๋ฆฌ -> ๋””๋ ‰ํ„ฐ๋ฆฌ ์—”ํŠธ๋ฆฌ๋กœ ์ง„ํ–‰ํ•˜์—ฌ 2MB ํŽ˜์ด์ง€์˜ ๊ธฐ์ค€ ์ฃผ์†Œ๋ฅผ ์ฐพ์€ ๋‹ค์Œ ์„ ํ˜• ์ฃผ์†Œ์˜ ํ•˜์œ„ 21๋น„ํŠธ ์˜คํ”„์…‹์„ ๋”ํ•˜๋ฉด ๋œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด PML4(Page Map Level 4)์—์„œ๋Š” (1)PML4 ํ…Œ์ด๋ธ”, (2)ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ ํฌ์ธํ„ฐ ํ…Œ์ด๋ธ”, (3) ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋“ฑ ์„ธ ๊ฐ€์ง€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ ํ…Œ์ด๋ธ”์€ 8๋ฐ”์ดํŠธ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๊ฐ ์—”ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ ๋ ˆ๋ฒจ ํ…Œ์ด๋ธ”์˜ ๊ธฐ์ค€ ์ฃผ์†Œ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

0

64bit ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - Day 4

์ด ๊ธ€์€ โ€˜64๋น„ํŠธ ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - ํ•œ์Šนํ›ˆ ์ €์žโ€™์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. A20 ๊ฒŒ์ดํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ 1MB ์ด์ƒ ์˜์—ญ์— ์ ‘๊ทผํ•ด๋ณด์žIA-32e ๋ชจ๋“œ ์ปค๋„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋งต์™œ 1MB ์ด์ƒ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•ด์„œ๋Š” ์•ž์„œ ๋ถ€ํŠธ ๋กœ๋”์— ์˜ํ•ด ์ปค๋„ ์ด๋ฏธ์ง€๊ฐ€ 0x10000 ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋˜๊ณ , 1MB ์ดํ•˜์˜ ์–ด๋“œ๋ ˆ์Šค ์ค‘์—์„œ ๋น„๋””์˜ค ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•˜๋Š” 0xA0000 ์ดํ•˜๋ฅผ ์ปค๋„ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ๋ณดํ˜ธ ๋ชจ๋“œ ์ปค๋„๊ณผ IA-32e ๋ชจ๋“œ ์ปค๋„์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” 0xA0000-0x10000(576KB)์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ดํ›„์— ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์˜์—ญ(.bss ์„น์…˜)์ด ํฌํ•จ๋œ๋‹ค๋ฉด ๋” ์ž‘์€ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฒ˜๋Ÿผ ๋ณ„๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜์ง€ ์•Š๋Š” ์ปค๋„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ๊ณ„์†ํ•ด์„œ ์ด ์ƒํƒœ๋กœ ์œ ์ง€ํ•œ๋‹ค๋ฉด ์ดํ›„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉฐ ์ปค๋„์ด ์ปค์ง€๊ฒŒ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. MINT64 OS๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์ปค๋„ ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ 0x10000 ์–ด๋“œ๋ ˆ์Šค์— ๋ณต์‚ฌํ•˜๋˜, ๋ฉ์น˜๊ฐ€ ํฐ IA-32e ๋ชจ๋“œ ์ปค๋„์€ 2MB์˜ ์–ด๋“œ๋ ˆ์Šค๋กœ ๋ณต์‚ฌํ•˜์—ฌ 2MB~6MB(์ด 4MB์˜ ํฌ๊ธฐ)์˜ ์˜์—ญ์„ ๋ณ„๋„๋กœ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. (์ฑ… 231p์˜ ๊ทธ๋ฆผ์„ ๋ณด์‹œ๋Š”๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ๋” ์ข‹์Šต๋‹ˆ๋‹ค.) 1MB ์–ด๋“œ๋ ˆ์Šค์™€ A20 ๊ฒŒ์ดํŠธ์ดˆ์ฐฝ๊ธฐ XT PC์˜ ์ตœ๋Œ€ ์–ด๋“œ๋ ˆ์Šค๋Š” 1MB์˜€์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•˜๋“œ์›จ์–ด์˜ ํ•œ๊ณ„๋กœ 1MB ์ด์ƒ์˜ ์–ด๋“œ๋ ˆ์Šค์— ์ ‘๊ทผํ•˜๋ฉด ํ•˜์œ„ ์ฃผ์†Œ๋งŒ ๋‚จ์•„ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (0x10FFEF -> 0xFFEF). ํ•˜์ง€๋งŒ ์ดํ›„ 16MB ์ฃผ์†Œ๊นŒ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” AT PC๊ฐ€ ํƒ„์ƒํ•˜๋ฉด์„œ XT PC์˜ ํŠน์ˆ˜ํ•œ ์ฃผ์†Œ ๊ณ„์‚ฐ๋ฒ•(1MB ์ด์ƒ์˜ ์ฃผ์†Œ๋ฅผ 1MB ์ดํ•˜์˜ ์ฃผ์†Œ๋กœ ๋งตํ•‘) ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ๊ฒŒ A20 ๊ฒŒ์ดํŠธ ์ž…๋‹ˆ๋‹ค. A20์€ ์ฃผ์†Œ์˜ 20๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋ฅผ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ•จ์œผ๋กœ 20๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ํ•ญ์ƒ 0์œผ๋กœ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. A20 ๊ฒŒ์ดํŠธ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ๋Š” 20๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ ํ•ญ์ƒ 0์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™€์ˆ˜ MB์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ์ดˆ ๋ถ€ํŒ… ์ดํ›„ 1MB4MB์˜ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋ฉด 01MB, 23MB๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ณ  01MB ์˜์—ญ์€ BIOS์™€ ๋ณดํ˜ธ ๋ชจ๋“œ ์ปค๋„ ์˜์—ญ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ˆ˜ํ–‰์ค‘์ธ ๋ถ€๋ถ„์ด ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

0

64bit ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - Day 3

์ด ๊ธ€์€ โ€˜64๋น„ํŠธ ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - ํ•œ์Šนํ›ˆ ์ €์žโ€™์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. C์–ธ์–ด๋กœ ์ปค๋„์„ ์ž‘์„ฑํ•˜์ž์‹คํ–‰ ๊ฐ€๋Šฅํ•œ C ์ฝ”๋“œ ์ปค๋„ ์ƒ์„ฑ ๋ฐฉ๋ฒ•๋นŒ๋“œ ์กฐ๊ฑด๊ณผ ์ œ์•ฝ ์‚ฌํ•ญ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋‹จ์ผ ํŒŒ์ผ๋กœ NASM ์ปดํŒŒ์ผ์„ ํ†ตํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์ง์ „ EntryPoint.s ์ฝ”๋“œ๋„ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ณ , 512byte๋กœ ์ •๋ ฌ๋˜์–ด ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ๊ฒฐํ•ฉ(Disk.img ํŒŒ์ผ์— ํฌํ•จ)ํ•˜๋Š” ๊ตฌ์กฐ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ๋ณดํ˜ธ ๋ชจ๋“œ EntryPoint(์ดํ•˜, ์—”ํŠธ๋ฆฌํฌ์ธํŠธ)์˜ ๋’ท๋ถ€๋ถ„์— C์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ์ปค๋„์„ ์—ฐ๊ฒฐํ•˜๊ณ , C ์ปค๋„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค. ๋จผ์ €, ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ๊ฐ€ C์–ธ์–ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด 3๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ๋นŒ๋“œํ•ด์•ผ ํ•œ๋‹ค. ๋ถ€ํŒ…๋œ ํ›„ ๋ณดํ˜ธ ๋ชจ๋“œ ์ปค๋„์ด ์‹คํ–‰๋˜๋ฉด C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์Œ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋œ ํ•จ์ˆ˜(printf, scanf, โ€ฆ)๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. 0x10200 ์œ„์น˜์—์„œ ์‹คํ–‰ํ•˜๊ฒŒ๋” ๋นŒ๋“œํ•ด์•ผ ํ•œ๋‹ค. 0x10000์˜ ์œ„์น˜์—๋Š” ์ด์ „ ์žฅ(6์žฅ)์—์„œ ์ž‘์„ฑํ•œ EntryPoint.s๊ฐ€ 512byte(1 ์„นํ„ฐ) ๋งŒํผ ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 0x1000 + 0x200(512byte) ๋’ค์ธ 0x10200์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค. ์ฝ”๋“œ๋‚˜ ๋ฐ์ดํ„ฐ ์™ธ์— ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ํ˜•ํƒœ์•ผ ํ•œ๋‹ค. GCC๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผํ•˜๋ฉด ELF ๋˜๋Š” PE ์™€ ๊ฐ™์€ OS์— ์˜์กด์ ์ธ ์‹คํ–‰ ํŒŒ์ผ ํฌ๋งท์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. ์ด๋Ÿฐ ํŒŒ์ผ์„ ํฌ๋งท์ด ํฌํ•จ๋˜๊ฒŒ ๋˜๋ฉด ์ด ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๊ฐ€์ ์ธ ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ˆ˜ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. 1> x86_64-pc-linux-gcc.exe -c -m32 -ffreestanding Main.c ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ™€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ GCC ์ปดํŒŒ์ผ๋Ÿฌ๋Š” -ffreestanding์˜ต์…˜์„ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, -c๊ณผ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

0

64bit ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - Day 2

์ด ๊ธ€์€ โ€˜64๋น„ํŠธ ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - ํ•œ์Šนํ›ˆ ์ €์žโ€™์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ๊ตฌํ˜„์ฑ…์—์„œ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋  OS๋Š” ๋ถ€ํŠธ ๋กœ๋”, ๋ณดํ˜ธ ๋ชจ๋“œ ์ปค๋„, IA-32e ๋ชจ๋“œ ์ปค๋„๋กœ ๊ตฌ์„ฑ๋˜๊ณ  ์„นํ„ฐ ๋‹จ์œ„๋กœ ์ •๋ ฌ๋˜ ํ•˜๋‚˜์˜ ๋ถ€ํŒ… ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ ๋‘ ๋ฒˆ์งธ ์„นํ„ฐ๋ถ€ํ„ฐ ์ฝ์–ด ๋ฉ”๋ชจ๋ฆฌ์— ๋ณต์‚ฌํ•˜๋ฉด ์ด๋ฏธ์ง€ ๋กœ๋”ฉ์ด ๋๋‚˜๊ฒŒ ๋œ๋‹ค. ์ฑ…์—์„œ ๊ตฌํ˜„ํ•˜๋Š” OS๋Š” ๋ฉ”๋ชจ๋ฆฌ 0x10000๋ฒˆ์ง€์— ๋ณต์‚ฌํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด ์ฃผ์†Œ๋Š” ์ •ํ•ด์ง„๊ฒŒ ์•„๋‹ˆ๋ผ ๋ถ€ํŠธ ๋กœ๋” ์ดํ›„์— ๋ฐ”๋กœ ๋ณต์‚ฌํ•ด๋„ ๋˜์ง€๋งŒ, ์ฑ…์˜ ๋’ท์žฅ์—์„œ 0x10000 ์ดํ•˜ ๋ฒˆ์ง€๋ฅผ ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋น„์›Œ๋‘”๋‹ค. x86 ํ”„๋กœ์„ธ์„œ๋Š” ์Šคํƒ๊ณผ ๊ด€๋ จ๋œ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ 3๊ฐœ ์žˆ๋Š”๋ฐ SS, SP, BP๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ SS๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ ์Šคํƒ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š”๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด SS๋ฅผ 0x0000์œผ๋กœ ์„ค์ •ํ•œ๋‹ค๋ฉด 0x00000~0x0FFFF SS๋ฅผ 0x1000์œผ๋กœ ์„ค์ •ํ•˜๋ฉด 0x010000~0x01FFFF๊นŒ์ง€ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ SS๋ฅผ ํ†ตํ•ด์„œ ์Šคํƒ์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆœ ์žˆ์ง€๋งŒ, ์Šคํƒ์˜ ํฌ๊ธฐ๋Š” ์ •ํ•˜์ง€ ๋ชปํ•˜๋Š”๋ฐ 32bit์˜ ์Šคํƒ ํ•œ ์นธ์˜ ํฌ๊ธฐ๋Š” 4byte์ด๋‹ค. ๋ฆฌ์–ผ ๋ชจ๋“œ์—์„œ ๋ณดํ˜ธ ๋ชจ๋“œ๋กœ์˜ ์ „ํ™˜๋ณดํ˜ธ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋‹จ๊ณ„๋Š” ํฌ๊ฒŒ 6๋‹จ๊ณ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 2๋‹จ๊ณ„๋Š” ๋ณดํ˜ธ ๋ชจ๋“œ ์ „ํ™˜์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ƒ์„ฑ, ๋‚˜๋จธ์ง€ 4๋‹จ๊ณ„๋Š” ์ƒ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ”„๋กœ์„ธ์„œ์— ์„ค์ •์„ ํ•œ๋‹ค. 2๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•  ํ•„์ˆ˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์„ธ๊ทธ๋จผํŠธ ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ GDT์ด๋‹ค. ์ด ๋‘ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ „ํ™˜ ์ฆ‰์‹œ ํ”„๋กœ์„ธ์„œ์— ์˜ํ•ด ์ฐธ์กฐ๋˜๋ฏ€๋กœ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

0

64bit ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - Day 1

์ด ๊ธ€์€ โ€˜64๋น„ํŠธ ๋ฉ€ํ‹ฐ์ฝ”์–ด OS ์›๋ฆฌ์™€ ๊ตฌ์กฐ - ํ•œ์Šนํ›ˆ ์ €์žโ€™์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ BootLoader๋ถ€ํŠธ ๋กœ๋”๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•œ๊ฐ€์ง€ ๊ทœ์น™์ด ์žˆ๋‹ค. ๋จผ์ € ๋ถ€ํŠธ ์„นํ„ฐ 512Byte์˜ ๋งˆ์ง€๋ง‰ 2Byte๋Š” ๋ฐ˜๋“œ์‹œ 0x55, 0xAA๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ์•„๋ž˜๋Š” ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ถ€ํŠธ๋กœ๋”๋ฅผ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ์ด๋‹ค. 12345678[ORG 0x00][BITS 16]SECTION .textjmp $times 510 - ($ - $$) db 0x00db 0x55db 0xAA ์œ„ ์ฝ”๋“œ์—์„œ [ORG 0x00]์€ 0x00 ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฉฐ, [BITS 16]์€ ์•„๋ž˜ ์ฝ”๋“œ๋Š” 16bit๋ผ๊ณ  ์•Œ๋ ค์ค€๋‹ค. SECTION .text์€ .text ์„น์…˜์˜ ์‹œ์ž‘์„ ์˜๋ฏธํ•˜๊ณ  jmp $์€ ํ˜„์žฌ ์œ„์น˜์—์„œ ๋ฌดํ•œ Loop์„ ํ•˜๋ฉฐ ๋Œ€๊ธฐํ•˜๊ฒŒ ํ•œ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ์ด ๋ช‡ Byte๊ฐ€ ์ž‘์„ฑ๋œ ์ง€ ์†Œ์Šค ์ฝ”๋“œ๋กœ๋Š” ํ™•์ธ์ด ์–ด๋ ต๊ธฐ์— 510byte (512byte์—์„œ ๋งˆ์ง€๋ง‰ 0x55, 0xAA 2byte๋ฅผ ๋บ€ ์ˆซ์ž)๋งŒํผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด์„œ times 510 - ($ - $$) db 0x00์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ์ด ์˜๋ฏธ๋Š” $(ํ˜„์žฌ ์ฃผ์†Œ)์ด์—์„œ $$(์„น์…˜์˜ ์ฃผ์†Œ)๋ฅผ ๋บ€ ๊ฐ’, ๋‹ค์‹œ ๋งํ•ด ์ด ์ƒ์„ฑ๋œ opcode ํฌ๊ธฐ๋ฅผ ๋บ€ ๋‚˜๋จธ์ง€๋ฅผ 0x00์œผ๋กœ ์ฑ„์šฐ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ดํ›„ 0x55, 0xAA๋ฅผ ์ฑ„์šฐ๋ฉด ์ •ํ™•ํžˆ 512byte ํฌ๊ธฐ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค. ํ™”๋ฉด ๋ฒ„ํผ ์ œ์–ด์–ด๋ฆด ์  ์ปดํ“จํ„ฐ๋ฅผ ํ‚ค๋ฉด ๊นœ๋นก์ด๋Š” ์ปค์„œ์™€ ํ•จ๊ป˜ ๋œป ๋ชจ๋ฅผ ์˜์–ด๋“ค์ด ์ฃผ๋ฃฉ์ฃผ๋ฃฉ ๋‚˜์˜ค๋Š” ๊ฑธ ๋ณธ ๊ธฐ์–ต์ด ์žˆ๋‹ค. ํ˜„์žฌ ์ž‘์„ฑ๋œ Boot Loader์— ์œ„์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋น„๋””์˜ค ๋ฉ”๋ชจ๋ฆฌ์— ํ˜•์‹์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ฑฐ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„  ๋น„๋””์˜ค ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ฃผ์†Œ 0xB8000์— ๋ฌธ์ž 1 Byte, ์†์„ฑ 1 Byte ์ด 2 Byte์ธ ํ˜•์‹์— ๋งž์ถฐ ๊ฐ€๋กœ 80, ์„ธ๋กœ 25์ž ์ด 4000 Byte์— ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. 12345678... ์ƒ๋žต ...SECTION .textmov ax, 0xb800mov ds, axmov byte[0x00], 'J'mov byte[0x01], 0x4Ajmp $... ์ƒ๋žต ... ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  QEMU๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ฒซ ๊ธ€์ž๊ฐ€ ๋นจ๊ฐ„ ๋ฐฐ๊ฒฝ์˜ J๊ฐ€ ๋ณด์ด๊ฒŒ ๋œ๋‹ค. ์„ธ๊ทธ๋จผํŠธ ์ดˆ๊ธฐํ™”