์šด์˜ ์ฒด์ œ ToaruOS 2.1 ์ถœ์‹œ

Unix ๊ณ„์—ด ์šด์˜ ์ฒด์ œ์ธ ToaruOS 2.1์ด ์ถœ์‹œ๋˜์–ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์ž์ฒด ์ปค๋„, ๋ถ€ํŠธ ๋กœ๋”, ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž, ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๋ณตํ•ฉ ์ฐฝ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ฒ˜์Œ์— ์ผ๋ฆฌ๋…ธ์ด ๋Œ€ํ•™์—์„œ ์ƒˆ๋กœ์šด ๋ณตํ•ฉ ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ„์•ผ์˜ ์—ฐ๊ตฌ ์ž‘์—…์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ ์ดํ›„ ๋ณ„๋„์˜ ์šด์˜ ์ฒด์ œ๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. QEMU, VMware ๋˜๋Š” VirtualBox์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” 14.4MB ํฌ๊ธฐ์˜ ๋ผ์ด๋ธŒ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์šด๋กœ๋“œ์šฉ์œผ๋กœ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ ToaruOS 2.1 ์ถœ์‹œ

ToaruOS๋Š” ๋””์Šคํฌ ๋“œ๋ผ์ด๋ฒ„(PATA ๋ฐ ATAPI), EXT2 ๋ฐ ISO9660 ํŒŒ์ผ ์‹œ์Šคํ…œ, ํ”„๋ ˆ์ž„ ๋ฒ„ํผ์™€ ๊ฐ™์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„์˜ ๋Œ€๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์™€ ๋ชจ๋†€๋ฆฌ์‹ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. , ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, ๋„คํŠธ์›Œํฌ ์นด๋“œ(AMD PCnet FAST, Realtek RTL8139 ๋ฐ Intel PRO/1000), ์‚ฌ์šด๋“œ ์นฉ(Intel AC'97) ๋ฐ ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์šฉ VirtualBox ์ถ”๊ฐ€ ๊ธฐ๋Šฅ. ์ปค๋„์€ Unix ์Šค๋ ˆ๋“œ, TTY, ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ, ์˜์‚ฌ ํŒŒ์ผ ์‹œ์Šคํ…œ /proc, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ, IPC, ๋žจ๋””์Šคํฌ, ptrace, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ, ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น ๋ฐ ๊ธฐํƒ€ ํ‘œ์ค€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์Šคํ…œ์—๋Š” ๋ณตํ•ฉ ์ฐฝ ๊ด€๋ฆฌ์ž๊ฐ€ ์žฅ์ฐฉ๋˜์–ด ์žˆ์œผ๋ฉฐ ELF ํ˜•์‹์˜ ๋™์ ์œผ๋กœ ๋งํฌ๋œ ์‹คํ–‰ ํŒŒ์ผ, ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น, ๊ทธ๋ž˜ํ”ฝ ์Šคํƒ์„ ์ง€์›ํ•˜๊ณ  Python 3 ๋ฐ GCC๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Ext2๊ฐ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ถ€ํŠธ๋กœ๋”๋Š” BIOS์™€ EFI๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์Šคํƒ์€ BSD ์Šคํƒ€์ผ ์†Œ์ผ“ API์˜ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜๊ณ  ๋ฃจํ”„๋ฐฑ์„ ํฌํ•จํ•œ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค‘์—์„œ๋Š” Vi์™€ ์œ ์‚ฌํ•œ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ Bim์ด ๋ˆˆ์— ๋•๋‹ˆ๋‹ค. ์ด๋Š” ํŒŒ์ผ ๊ด€๋ฆฌ์ž, ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ, ์œ„์ ฏ ์ง€์› ๊ทธ๋ž˜ํ”ฝ ํŒจ๋„, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋“ฑ๊ณผ ๊ฐ™์€ ToaruOS ๊ด€๋ จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์ง€๋‚œ ๋ช‡ ๋…„๊ฐ„ ์‚ฌ์šฉ๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€(PNG, JPEG) ๋ฐ ํŠธ๋ฃจํƒ€์ž… ๊ธ€๊ผด์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Vim, GCC, Binutils, FreeType, MuPDF, SDL, Cairo, Doom, Quake, Super Nintendo ์—๋ฎฌ๋ ˆ์ดํ„ฐ, Bochs ๋“ฑ๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด ToaruOS๋กœ ํฌํŒ…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋˜ํ•œ ์‹œ์Šคํ…œ์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ Python์„ ๋Œ€์ฒดํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ž์ฒด ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ Kuroko๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ๊ตฌ๋ฌธ(๋ช…์‹œ์ ์ธ ๋ณ€์ˆ˜ ์ •์˜๊ฐ€ ํฌํ•จ๋œ Python์˜ ๋‹จ์ถ• ๋ฐฉ์–ธ์œผ๋กœ ์œ„์น˜)์—์„œ Python์„ ์—ฐ์ƒ์‹œํ‚ค๋ฉฐ ๊ตฌํ˜„์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ์ปดํŒŒ์ผ ๋ฐ ํ•ด์„์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ „์—ญ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ž‘์€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(~500KB) ํ˜•ํƒœ๋กœ ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ†ตํ•ฉ๋˜๊ณ  C API๋ฅผ ํ†ตํ•ด ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ToaruOS ์™ธ์—๋„ Linux, macOS, Windows์—์„œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ WebAssembly๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ:

  • Raspberry Pi 64 ๋ณด๋“œ ๋ฐ QEMU ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ToaruOS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹คํ—˜์  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ AArch8(ARMv400) ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์‹ ํ˜ธ ์ฒ˜๋ฆฌ ๋ฐ ์ „์†ก์ด ์žฌ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. sigaction, sigprocmask, sigwait ๋ฐ sigsuspens ํ˜ธ์ถœ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. munmap ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณตํ•ฉ ๊ด€๋ฆฌ์ž๋Š” ํ๋ฆผ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์ฐฝ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์žฌ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
  • ํ„ฐ๋ฏธ๋„ ๋ Œ๋”๋ง์ด ๊ฐœ์„ ๋˜๊ณ  ์ง€์—ฐ ๋ Œ๋”๋ง์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ํŠธ๋ฃจํƒ€์ž… ๊ธ€๊ผด์— ๋Œ€ํ•œ ๊ธ€๋ฆฌํ”„ ์บ์‹œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ž‘๊ณก๊ฐ€ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • settimeofday ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋ฐ ๋‚ ์งœ ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ์‹œ๊ณ„ ์„ค์ • ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ–ฅ์ƒ๋œ ๋„คํŠธ์›Œํฌ ์Šคํƒ. ifconfig ์œ ํ‹ธ๋ฆฌํ‹ฐ์— IPv4 ์ฃผ์†Œ ๋ฐ ๋ผ์šฐํŒ… ์„ค์ •์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ICMP ์†Œ์ผ“ ์ž‘๋™์ด ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. UDP ๋ฐ ICMP ์†Œ์ผ“์— ๋Œ€ํ•œ recvfrom ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ถ€ํŠธ๋กœ๋”์— USB ํ‚ค๋ณด๋“œ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ผ ๊ด€๋ฆฌ์ž ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด์— ํŒŒ์ผ ์‚ญ์ œ ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ์˜ ๊ทธ๋ž˜ํ”„ ํ‘œ์‹œ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ •๊ทœ์‹ ์ง€์›๊ณผ ํ•จ๊ป˜ grep ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ps ๋ช…๋ น ์ถœ๋ ฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ถ”๊ฐ€ ์—ด ์ถ”๊ฐ€).

์šด์˜ ์ฒด์ œ ToaruOS 2.1 ์ถœ์‹œ


์ถœ์ฒ˜ : opennet.ru

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