๋ฒ ์–ดํ”Œ๋žญํฌ 2.0 ํ•˜์ดํผ๋ฐ”์ด์ € ๋ฆด๋ฆฌ์Šค

์ผ์–ด๋‚ฌ๋‹ค ํ•˜์ดํผ๋ฐ”์ด์ € ๋ฆด๋ฆฌ์Šค ๋ฒ ์–ดํ”Œ๋žญํฌ 2.0, ์ „๋ฌธ ํ•˜์ดํผ๋ฐ”์ด์ €์˜ ์‹ ์†ํ•œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Bareflank๋Š” C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ C++ STL์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Bareflank์˜ ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜์ดํผ๋ฐ”์ด์ €์˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ํ™•์žฅํ•˜๊ณ  ํ•˜๋“œ์›จ์–ด(Xen ๋“ฑ)์—์„œ ์‹คํ–‰๋˜๊ณ  ๊ธฐ์กด ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ(VirtualBox ๋“ฑ)์—์„œ ์‹คํ–‰๋˜๋Š” ์ž์ฒด ๋ฒ„์ „์˜ ํ•˜์ดํผ๋ฐ”์ด์ €๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ์šด์˜์ฒด์ œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋ฐฐํฌ์ž LGPL 2.1์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Bareflank๋Š” 64๋น„ํŠธ Intel CPU์—์„œ Linux, Windows ๋ฐ UEFI๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Intel VT-x ๊ธฐ์ˆ ์€ ๊ฐ€์ƒ ๋จธ์‹  ๋ฆฌ์†Œ์Šค์˜ ํ•˜๋“œ์›จ์–ด ๊ณต์œ ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. macOS ๋ฐ BSD ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ง€์›์€ ํ–ฅํ›„ ARM64 ๋ฐ AMD ํ”Œ๋žซํผ์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ํ”„๋กœ์ ํŠธ๋Š” VMM(Virtual Machine Manager) ๋กœ๋”ฉ์„ ์œ„ํ•œ ์ž์ฒด ๋“œ๋ผ์ด๋ฒ„, VVM ๋ชจ๋“ˆ ๋กœ๋”ฉ์„ ์œ„ํ•œ ELF ๋กœ๋”, ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ํ•˜์ดํผ๋ฐ”์ด์ €๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ bfm ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. C++11/14 ์‚ฌ์–‘์— ์ •์˜๋œ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ, ์˜ˆ์™ธ ์Šคํƒ ํ•ด์ œ(unwind)๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ƒ์„ฑ์ž/์†Œ๋ฉธ์ž ์‚ฌ์šฉ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ ๋“ฑ๋ก์„ ์ง€์›ํ•˜๋Š” ์ž์ฒด ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Bareflank๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์ƒํ™” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ๋ชจ๋‚œ๋Š” ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ ์‹คํ–‰์„ ์ง€์›ํ•˜๊ณ  Linux ๋ฐ Unikernel์—์„œ ๊ฒฝ๋Ÿ‰ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ˆ˜ ์„œ๋น„์Šค ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ๋œ ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ผ๋ฐ˜ ์›น ์„œ๋น„์Šค์™€ ์•ˆ์ •์„ฑ ๋ฐ ๋ณด์•ˆ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์€ ๋ณ„๋„์˜ ๊ฐ€์ƒ ๋จธ์‹ ์— ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์Œ).

Bareflank 2.0์˜ ์ฃผ์š” ํ˜์‹  ์‚ฌํ•ญ:

  • ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์šด์˜ ์ฒด์ œ์˜ ํ›„์† ์‹คํ–‰์„ ์œ„ํ•ด UEFI์—์„œ ์ง์ ‘ Bareflank๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Linux์˜ SLAB/Buddy ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์„ค๊ณ„๋œ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๋Š” ์กฐ๊ฐํ™” ๊ฐ์†Œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๋” ๋†’์€ ์„ฑ๋Šฅ์„ ํ—ˆ์šฉํ•˜๋ฉฐ ๋‹ค์Œ์„ ํ†ตํ•ด ํ•˜์ดํผ๋ฐ”์ด์ €์— ๋Œ€ํ•œ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. bf๋“œ๋ผ์ด๋ฒ„, ํ•˜์ดํผ๋ฐ”์ด์ €์˜ ์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  CPU ์ฝ”์–ด ์ˆ˜์— ๋”ฐ๋ผ ์ตœ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ช…๋ น ํ•ด์„๊ธฐ์™€ ๋…๋ฆฝ์ ์ธ CMake ๊ธฐ๋ฐ˜์˜ ์ƒˆ๋กœ์šด ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ํ•˜์ดํผ๋ฐ”์ด์ € ์ปดํŒŒ์ผ์„ ํฌ๊ฒŒ ๊ฐ€์†ํ™”ํ•˜๊ณ  ARM๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ํ–ฅํ›„ ์ง€์›์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ์žฌ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์†Œ์Šค ํ…์ŠคํŠธ์˜ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ณต์ œ ์—†์ด ํ•˜์ดํผ์ปค๋„๊ณผ ๊ฐ™์€ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋œ ์ฝ”๋“œ ํ•˜์ดํผ๋ฐ”์ด์ €, ์–ธ์™€์ธ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋Ÿฐํƒ€์ž„, ์ œ์–ด ๋„๊ตฌ, ๋ถ€ํŠธ๋กœ๋” ๋ฐ SDK;
  • ์ด์ „์— C++์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ์ƒ์† ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋Œ€์‹  ๋Œ€๋ถ€๋ถ„์˜ API๊ฐ€ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ๋‹จ, API๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋†’์ด๊ณ  ๋ฆฌ์†Œ์Šค ์†Œ๋น„๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€