Home

0

Express.js ์Šคํ„ฐ๋”” 1

Express.js ์Šคํ„ฐ๋”” 1์ผ์„ค์น˜Express.js๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € node.js์™€ NPM์ด ์„ค์น˜๋œ ์ƒํ™ฉ์—์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œˆ๋„์šฐ ๊ธฐ์ค€์œผ๋กœ Node.js ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์„ค์น˜ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์„ค์น˜๊ฐ€ ์™„๋ ค๋˜๋ฉด ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด express.js๋ฅผ ์„ค์น˜ํ•œ๋‹ค. 12345// ์ข…์†์„ฑ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋ฉฐ ์„ค์น˜$ npm install express --save// ์ข…์†์„ฑ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์„ค์น˜$ npm install express Hello, World!์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด app.js๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. 1234567891011const express = require('express')const app = express()const port = 3000app.get('/', (req, res) => { res.send('Hello World!')})app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`)}) 1$node app.js 1ํ–‰์—์„œ express ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€ 2ํ–‰์— express ๋ชจ๋“ˆ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ƒ์„ฑ๋œ express ์ธ์Šคํ„ด์Šค์ธ app์„ ํ†ตํ•ด 5ํ–‰์—์„œ โ€˜/โ€˜ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ GET๋ฉ”์†Œ๋“œ ๋ผ์šฐํŠธ๋ฅผ ์ง€์ •ํ•˜๊ณ  listen์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ์—ด๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๋“ฏ node.js๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. Express generatorExpress generator๋ฅผ ํ†ตํ•ด ๊ฐ„ํŽธํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณจ๊ฒฉ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 12$ npm install express-generator -g$ npx express-generator <APP NAME> --view=pug ์ฒซ๋ฒˆ์งธ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ express-generator๋ฅผ ์ „์—ญ์œผ๋กœ ์„ค์น˜ํ•˜๊ณ , ๋‘๋ฒˆ์งธ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ APP NAME์— ํ•ด๋‹นํ•˜๋Š” express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ƒ์„ฑ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ --view=pug๋Š” ๋ทฐ ์—”์ง„์— ํ•ด๋‹นํ•˜๋ฉฐ ejs, hbs, hjs, jade, pug, twig, vash๋“ฑ์ด ์žˆ๋‹ค. ๊ธฐ๋ณธ์œผ๋กœ jade๋กœ ์ง€์ •๋˜๋ฉฐ ๋งŒ์•ฝ ๋ทฐ ์—”์ง„์ด ํ•„์š”์—†๋Š” ๊ฒฝ์šฐ --no-view๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ทฐ 12$ cd myapp$ npm install ์ƒ์„ฑ ์ดํ›„ express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€๋กœ ํด๋”๋ฅผ ์ด์šฉํ•ด ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋ฉด ๊ธฐ์ดˆ ๊ฐœ๋ฐœ ์ค€๋น„๊ฐ€ ๋๋‚˜๊ฒŒ ๋œ๋‹ค. 1234567891011121314151617.โ”œโ”€โ”€ app.jsโ”œโ”€โ”€ binโ”‚ โ””โ”€โ”€ wwwโ”œโ”€โ”€ package.jsonโ”œโ”€โ”€ publicโ”‚ โ”œโ”€โ”€ imagesโ”‚ โ”œโ”€โ”€ javascriptsโ”‚ โ””โ”€โ”€ stylesheetsโ”‚ โ””โ”€โ”€ style.cssโ”œโ”€โ”€ routesโ”‚ โ”œโ”€โ”€ index.jsโ”‚ โ””โ”€โ”€ users.jsโ””โ”€โ”€ views โ”œโ”€โ”€ error.pug โ”œโ”€โ”€ index.pug โ””โ”€โ”€ layout.pug ํŒŒ์ผ์˜ ๊ตฌ์กฐ์—์„œ Javascript์™€ ๊ด€๋ จ๋œ ํด๋” ๋ฐ ํŒŒ์ผ์€ app.js, bin/www, routes/*์ด๋ฉฐ ์›น ๋ฆฌ์†Œ์Šค&ํ…œํ”Œ๋ฆฟ์— ๊ด€๋ จ๋œ ํด๋”๋Š” public/*, views/*์— ํ•ด๋‹น๋œ๋‹ค. bin/www์—์„œ๋Š” ์„œ๋ฒ„ ๊ตฌ๋™๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ , app.js์—์„œ๋Š” routes/*์˜ ๋ผ์šฐํ„ฐ๋“ค๊ณผ ๋ฆฌ์†Œ์Šค ํด๋” ๋ฐ ๋ทฐ ํ…œํ”Œ๋ฆฟ ํด๋”๋ฅผ ์ง€์ •ํ•˜๋Š” ๋“ฑ ์„œ๋ฒ„ ๊ตฌ๋™ ์ด์ „์— ํ•„์š”ํ•œ ์„ค์ •์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ธฐ๋ณธ ๋ผ์šฐํŒ…app.js๋ฅผ ์ž์„ธํžˆ ๋ณด๋ฉด 123// view engine setupapp.set('views', path.join(__dirname, 'views'));app.set('view engine', 'pug') ๋จผ์ € ๋ทฐ ์—”์ง„์„ ์ง€์ •ํ•˜๋ฉฐ ๋ทฐ ์—”์ง„์˜ ์ข…๋ฅ˜๋Š” ์œ„ express-generator์— โ€“view ์ธ์ž๋ฅผ ์ง€์ •๋œ ์—”์ง„์„ ์‚ฌ์šฉํ•œ๋‹ค. 1234app.use(logger('dev'));app.use(express.json());app.use(express.urlencoded({ extended: false }));app.use(cookieParser()); ๊ฐœ๋ฐœ์— ์œ ์šฉํ•œ ๋‹ค์–‘ํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฆฌ์†Œ์ŠคํŒŒ์ผ(js, css, image๋“ฑ)์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ฒŒ ๋œ๋‹ค. 12app.use('/', indexRouter);app.use('/users', usersRouter); use๋Š” ๋ฏธ๋“ค์›จ์–ด๋กœ ๋“ฑ๋กํ•  callbackํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋ฐ, ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๊ฒฝ๋กœ๋ฅผ ์ค„ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ routes/*์— ์žˆ๋Š” ๋ผ์šฐํŠธ๋ฅผ ๋ฏธ๋“ค์›จ์–ด๋กœ ๋“ฑ๋กํ•˜๋Š”๋ฐ ๊ฐ๊ฐ โ€˜/โ€˜, โ€˜/usersโ€™๊ฒฝ๋กœ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋“ฑ๋กํ•˜๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— ๋‘ ๋ผ์šฐํ„ฐ๋Š” ๋ณ„๊ฐœ์˜ ์ƒํ™ฉ์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ •์  ํŒŒ์ผ ์ œ๊ณต1app.use(express.static(path.join(__dirname, 'public'))) ์ •์  ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ •์  ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ static ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋“ฑ๋กํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. static์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์ •์  ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋“ฑ๋กํ•  ๊ฒฝ์šฐ ๋“ฑ๋ก๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ •์  ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„๋„ use์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๊ฒฝ๋กœ๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฉด ๊ฐ€์ƒ ๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

0

๊ธฐ์ดˆ DP์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

๋ฐฐ๋‚ญ ์•Œ๊ณ ๋ฆฌ์ฆ˜(a.k.a Knapsack problem)๋ฐฐ๋‚ญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๋ฌผ๊ฑด์ด ์ œํ•œ๋œ ๊ฐ€๋ฐฉ์— ์ตœ๋Œ€ํ•œ์˜ ๊ฐ€์น˜๋กœ ๋‹ด๋Š” ๋ฌธ์ œ์ด๋‹ค. Fractional Knapsack ๋ฌธ์ œ๋Š” ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์กฐ๊ฑด์—์„œ ์ชผ๊ฐค ์ˆ˜ ์žˆ์–ด์„œ ๊ฐ€๋Šฅํ–ˆ๋‹ค. ์•ž์„œ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๋ฌผ๊ฑด์„ ์ตœ๋Œ€ํ•œ์˜ ๊ฐ€์น˜๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋‹ด๊ธฐ ์œ„ํ•ด์„œ๋Š” DP๋ฅผ ํ†ตํ•ด์„œ ํ•ด๊ฒฐํ•˜๊ฒŒ ๋œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

0

Arch linux ์„ค์น˜ํ•˜๊ธฐ

์ด ๊ธ€์€ ์ธํ„ฐ๋„ท์— ์ž‘์„ฑ๋œ Arch linux๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐœ์ธ์ ์œผ๋กœ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๊ธ€์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์€ ์•„๋ž˜ โ€˜๋ ˆํผ๋Ÿฐ์Šคโ€™์— ์ถœ์ฒ˜๊ฐ€ ์ž‘์„ฑ๋˜์–ด์žˆ์œผ๋‹ˆ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์›๋ณธ ๊ธ€์—์„œ ์ฐธ์กฐํ•˜์‹œ๋Š”๊ฑธ ์ถ”์ฒœํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Arch Linux๋ฅผ ์„ค์น˜ํ•˜๋ฉฐ ๊ฐ€์ƒ ๋จผ์ € ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํžˆ arch linux์˜ ์„ค์น˜ ISO ํŒŒ์ผ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค. ๋จผ์ € PC์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹จ Virtual Box ๊ฐ™์€ ๊ฐ€์ƒ PC์—์„œ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ USB์— ๊ตฝ๋Š” ๊ณผ์ •์„ ์ƒ๋žตํ–ˆ๋‹ค. ๋จผ์ € ํ•œ๊ตญ ๋ฏธ๋Ÿฌ๋ง ์„œ๋ฒ„์—์„œ ๋ฐ›๊ธฐ ์›ํ•œ๋‹ค๋ฉด ์ด๊ณณ์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ๋‚˜๋ผ๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๊ณณ์—์„œ ์›ํ•˜๋Š” ๋‚˜๋ผ์˜ ๋ฏธ๋Ÿฌ๋ง ์„œ๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

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๊ฐ€ ๋ณด์ด๊ฒŒ ๋œ๋‹ค. ์„ธ๊ทธ๋จผํŠธ ์ดˆ๊ธฐํ™”

0

Merge sort algorithm

ํ•ฉ๋ณ‘ ์ •๋ ฌ(merge sort)ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ๋ถ„ํ• ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ ๊ธธ์ด๊ฐ€ N์ธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธธ์ด๊ฐ€ 1์ธ ๋ฆฌ์ŠคํŠธ๋กœ ์ชผ๊ฐœ๊ณ  ๋‹ค์‹œ ์ชผ๊ฐœ์ง„ ๊ฐ๊ฐ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๋ฉฐ ํ•ฉ๋ณ‘ํ•ด ์ตœ์ข…์ ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ํ•จ์ˆ˜์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ์ค‘์•™ ์œ„์น˜๋ฅผ ์ฐพ๊ณ  ์ค‘์•™ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ขŒ์ธก, ์šฐ์ธก์„ ๋‚˜๋ˆ  ์žฌ๊ท€ ํ˜ธ์ถœ๋œ๋‹ค. ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด์€ start < end์˜ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋” ๋‚˜๋‰  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ชผ๊ฐœ๋Š” ๊ณผ์ •์ด ์ข…๋ฃŒ๋œ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ ๋งˆ์ง€๋ง‰ mergeํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉ๋ณ‘ํ•œ๋‹ค. ์ค‘์š”ํ•œ ์ ์€ ์ด๋•Œ ์ž„์‹œ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ž„์‹œ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์กฐ๊ฑด์ด๋ผ๋ฉด ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.