Archive: 2020/5

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

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ๋ฆฌ ์‚ฌ์šฉ

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์ด๋ฒˆ ํ•™๊ธฐ IOT ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆ˜์—…์„ ๋“ฃ๊ฒŒ ๋˜๋ฉฐ, ๋ฌปํ˜€๋‘” ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋ฅผ ๊บผ๋‚ด ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฝค ์ง€๋‚œ ๋ชจ๋ธ์ด๋ผ ์„ค์น˜๋„ ๊ธฐ์–ต์ด ํ๋ฆฟํ•ด ๋‚˜์ค‘์„ ์œ„ํ•ด์„œ๋ผ๋„ ์ด๋ ‡๊ฒŒ ๊ธฐ๋กํ•œ๋‹ค. ๋ผ์ฆˆ๋น„์•ˆ OS ๊ตฌํ•˜๊ธฐSD์นด๋“œ์™€ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๊ฐ€ ์ค€๋น„๋œ ์ƒํƒœ๋ฅผ ์ „์ œ๋กœ ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ๊ฑด ๋ผ์ฆˆ๋น„์•ˆ OS๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋Š” ์ตœ์‹  ๋ฒ„์ „๋งŒ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๊ฑฐ ๋ฒ„์ „๋„ ๋ชจ๋‘ ์žˆ๋Š” ์ด๊ณณ์„ ์ด์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

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๊ณผ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.