1 คะแนน โดย GN⁺ 2025-01-26 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Snowdrop OS เป็นระบบปฏิบัติการ 16 บิตแบบ real mode สำหรับสถาปัตยกรรม IBM PC ซึ่งสร้างขึ้นเองทั้งหมดตั้งแต่การบูตไปจนถึงการรันแอปด้วย x86 assembly ล้วน ๆ
  • ดิสทริบิวชันมีทั้ง อิมเมจฟลอปปีดิสก์ 1.44MB และอิมเมจ CD-ROM โดยบรรจุ boot loader, kernel, shell, utility, แอปทดสอบ และ aSMtris เกมโคลน Tetris มาด้วย
  • boot loader ขนาด 512 ไบต์จะค้นหา kernel แล้วโหลดเข้าหน่วยความจำ จากนั้น kernel จะตั้งค่า interrupt vector สำหรับแอปก่อนโหลดแอปเริ่มต้น
  • มีทั้งตัวจัดการไฟล์, โปรแกรมแก้ไขข้อความ, แอปกราฟิก, BASIC interpreter, รวมถึง x86 assembler และ debugger ทำให้สามารถพัฒนาและทดลองภายใน OS ได้
  • ซอร์สโค้ดถูกเผยแพร่แบบเปิดให้ใช้งานและแก้ไขได้โดยไม่มีข้อจำกัด จึงเป็นแหล่งอ้างอิงสำหรับโปรแกรมเมอร์ที่อยากศึกษาการทำงานระดับล่างของระบบปฏิบัติการด้วยตัวเอง

โครงสร้างที่สร้างเองทั้งหมดตั้งแต่การบูตจนถึงแอป

  • Snowdrop OS เป็นโครงการที่เริ่มจากความสงสัยว่าเมื่อเปิดเครื่อง PC แล้วเกิดอะไรขึ้น และดิสก์ที่บูตได้กับภายในของระบบปฏิบัติการทำงานอย่างไร
  • เป้าหมายคือระบบปฏิบัติการ 16 บิตแบบ real mode สำหรับ สถาปัตยกรรม IBM PC และเขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้นด้วย x86 assembly
  • อิมเมจที่แจกจ่ายมีให้ 2 รูปแบบ
    • อิมเมจฟลอปปีดิสก์ 1.44MB
    • อิมเมจ CD-ROM
  • ภายในอิมเมจมีองค์ประกอบหลักที่เขียนขึ้นเองรวมอยู่ด้วย
    • boot loader ที่โหลด kernel เข้าไปยังหน่วยความจำ
    • kernel ที่ตั้งค่า interrupt vector สำหรับแอปผู้ใช้ แล้วจึงโหลดแอปเริ่มต้น
    • แอปผู้ใช้ เช่น shell, utility, แอปทดสอบ และ aSMtris ซึ่งเป็นเกมโคลน Tetris
  • หากตรวจพบฮาร์ดดิสก์ระหว่างการบูต ระบบจะถามว่าต้องการติดตั้งหรือไม่ และสามารถติดตั้ง Snowdrop OS ลงบนฮาร์ดดิสก์ได้
  • แอปและเครื่องมือที่มีมาให้ครอบคลุมตั้งแต่ตัวจัดการไฟล์, โปรแกรมแก้ไขข้อความ, แอปกราฟิก, BASIC interpreter, x86 assembler ไปจนถึง x86 debugger
  • ซอร์สโค้ด ของ Snowdrop OS และแอปต่าง ๆ เปิดเผยให้ใช้งานและแก้ไขได้โดยไม่มีข้อจำกัด

ส่วนของซอร์สโค้ดที่น่าอ่าน

  • Boot loader: อยู่ภายใน 512 ไบต์และทำหน้าที่ค้นหาแล้วโหลด kernel
  • kernel: ให้บริการพื้นฐานและ abstraction แก่แอปพลิเคชัน
  • Graphics and GUI framework: เป็นพื้นฐานสำหรับสร้างแอปกราฟิกและแอปที่ใช้เมาส์
  • x86 assembler: ช่วยให้สร้างแอประดับล่างได้โดยตรงภายใน Snowdrop OS
  • BASIC interpreter: เครื่องมือสำหรับสร้างแอประดับสูงได้อย่างรวดเร็ว
  • x86 debugger: ใช้งานร่วมกับ assembler ได้
  • Dynamic data structure libraries: รองรับการทำงานกับโครงสร้างข้อมูลแบบไดนามิก เช่น linked list, tree และ BST
  • All applications: รวมเกม, โปรแกรมแก้ไขข้อความ, ตัวจัดการไฟล์, เครื่องมือ และแอปทดสอบ

ความสามารถที่เพิ่มขึ้นในแต่ละเวอร์ชัน

  • ประวัติเวอร์ชันเริ่มจาก v1 ที่มีงานเดี่ยว, shell และ aSMtris ก่อนจะค่อย ๆ เพิ่มความสามารถมาอย่างต่อเนื่อง
    • v2: ไดรเวอร์เมาส์ PS/2 และแอปทดสอบเมาส์
    • v3: รองรับ multitasking ขั้นพื้นฐานและ virtual display
    • v4: ไดรเวอร์เขียนและลบ FAT12, ตัวจัดการไฟล์, โปรแกรมแก้ไขข้อความ
    • v6: เกม Snake แบบผู้เล่นหลายคนผ่าน serial port
    • v16: GUI framework
    • v18: BASIC interpreter และ linker
    • v19: ติดตั้งลงฮาร์ดดิสก์ได้
    • v22: x86 assembler, รองรับหลายดิสก์, utility สำหรับดูไฟล์
    • v23: x86 debugger
    • v25: หน่วยความจำแบบไดนามิกและโครงสร้างข้อมูล
    • v28: GUI ความละเอียดสูง, แอปวาดภาพ, แอปเดสก์ท็อป
    • v31: runtime library และ BASIC interpreter RTL

1 ความคิดเห็น

 
GN⁺ 2025-01-26
ความคิดเห็นจาก Hacker News
  • ช่วงกลางทศวรรษ 90 ผมเคยทำ GUI OS แบบ 32 บิตสำหรับงานอดิเรก คล้าย ๆ กัน และหนังสือเล่มนี้เป็นหนังสือที่ต้องอ่านจริง ๆ
    https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...

    • อ่านได้ฟรี
      https://web.archive.org/web/20140704223135/https://www.ipdat...
      หลังจาก Sensory Publishing ได้สิทธิ์ไป ก็เปลี่ยนชื่อและพิมพ์เพิ่มอีก 1,000 เล่ม แต่ตอนนี้เหลืออยู่ราว 200 เล่มเท่านั้นและไม่ได้ขายแล้ว ว่ากันว่าตอนนี้หนังสือเล่มนี้เป็น public domain และหนังสือที่เหลือจะถูกเก็บไว้สำหรับ Great Alexandria Library
  • ถ้าสนใจโปรเจกต์แบบนี้ MenuetOS และ KolibriOS ก็น่าดูเช่นกัน KolibriOS เป็นฟอร์กที่แยกออกมาจาก MenuetOS นานแล้ว
    MenuetOS ยังมีเวอร์ชัน x64 ที่รองรับ SMP ด้วย แต่ฝั่งนี้เป็นซอร์สปิด

    • อยากเรียนภาษาแอสเซมบลี แต่ใน Coursera หาเรียนคอร์สที่เหมาะกับมือใหม่จริง ๆ ไม่เจอ มีประสบการณ์ Java อยู่ และกำลังเรียน คอร์ส C/C++ เพื่อเข้าใกล้ฮาร์ดแวร์มากขึ้น
    • ไม่เข้าใจว่าทำไมในปี 2025 ถึงยังทำอะไรแบบนั้นเป็น ซอร์สปิด
      นอกจาก OS งานอดิเรกแล้ว จะมีใครใช้มันจริง ๆ บนเครื่อง x64 หลายคอร์กันนะ
    • ถ้าอยากได้แนวที่บ้ากว่านั้นก็มี TempleOS
  • อยากรู้ว่าทุกวันนี้มีไอเดียเจ๋ง ๆ ล่าสุดอะไรบ้างในด้าน การออกแบบ OS ทั้งจากมุมผู้ใช้และมุมแฮกเกอร์ OS

    • ตอนนี้เปิดเผยไว้แบบเงียบ ๆ แต่กำลังทำ การออกแบบเคอร์เนล ใหม่อยู่ นี่เป็นการเขียนใหม่ครั้งที่ 12 และครั้งสุดท้าย พัฒนามาประมาณ 1 ปีแล้ว
      https://github.com/oro-os/kernel
      เป็นดีไซน์ไมโครเคอร์เนลที่ไม่มีผู้ใช้และไม่มี capability โดยบังคับใช้การควบคุมการเข้าถึงผ่านลำดับชั้นของเอนทิตีในเคอร์เนล พอร์ตหน่วยความจำร่วมที่มีหลายระดับความปลอดภัยเป็นวิธี IPC หลัก และมีการกำหนดชนิดในระดับเคอร์เนล
      ตอนนี้อยู่ช่วงท้ายของการพิสูจน์ประโยชน์ของเคอร์เนล ถ้าพิสูจน์ดีไซน์ได้ ก็จะเขียนบทความอย่างเป็นทางการมากขึ้น โปรเจกต์นี้อยู่ในหัวมาราว 8 ปี และอยู่ในเอดิเตอร์มาประมาณ 4 ปี
    • ไอเดียเจ๋ง ๆ ของ Plan 9 โดยมากยังไม่ถูกทำให้ดีกว่า หรือยังไม่ได้ถูกนำกลับมาทำใหม่อย่างเหมาะสม
      https://doc.cat-v.org/plan_9/3rd_edition/rio/rio_slides.pdf
    • Fuchsia มีไอเดียที่ค่อนข้างกล้าหลายอย่าง เช่น ไมโครเคอร์เนล, capability, ระบบติดตั้งแอปที่แปลก และดูเหมือนจะพยายามทำให้แอปใกล้เคียงกับเว็บไซต์มากขึ้น
      https://rtic.rs/ เป็นไอเดียที่ค่อนข้างน่าสนใจในพื้นที่คล้าย ๆ embedded RTOS
      พูดตรง ๆ คือ ยังมีฟีเจอร์ของ Plan 9 ที่ล้ำหน้า Linux อยู่มาก เช่น https://9p.io/sys/doc/lexnames.html
    • Genode [1] มีแนวทางการออกแบบ OS ที่น่าสนใจในแง่ที่เป็นเฟรมเวิร์ก แต่ไม่รู้ว่ามีแอสเซมบลีเข้าไปมากแค่ไหน
      [1] https://genode.org
    • ถ้ามองสุดขั้วทั้งสองด้านแบบกว้าง ๆ ผมว่าคำตอบที่ดีที่สุดคือ Redox OS
      https://redox-os.org/
  • ในบริบทใกล้เคียงกัน อยากรู้ว่ามีความคืบหน้าอะไรบ้างสำหรับ RTOS ประสิทธิภาพสูง สำหรับหุ่นยนต์ สาขานี้ดูเหมือนได้รับความสนใจค่อนข้างน้อย
    ROS/ROS2 ไม่ใช่ระบบปฏิบัติการ และส่วนใหญ่ก็ไม่ใช่สิ่งที่ควรเรียกว่าซอฟต์แวร์ประสิทธิภาพสูงด้วย

    • x86 กับ RTOS ไม่ค่อยเข้ากันเพราะปัจจัยอย่าง SMM และแคชที่ซับซ้อน ถ้ามีงานประสิทธิภาพสูง ก็น่าจะอยากใช้ MCU แบบฝังตัวแยกต่างหากหนึ่งตัว หรือหลายตัวมาควบคุมมากกว่า
      ฝั่ง embedded มี OS เยอะ เช่น FreeRTOS, Zephyr, ThreadX และยังมีโซลูชัน proprietary หลายตัวอย่าง Nvidia DriveOS
      อย่างไรก็ตาม embedded OS ค่อนข้างจำกัดเมื่อเทียบกับ OS ทั่วไปอย่าง Linux มีตัวจัดตารางงาน แต่หลายครั้งไม่มีหรือเป็นตัวเลือกเสริมสำหรับ process, filesystem, การโหลดไฟล์แบบไดนามิก, เครื่องมือไบนารี และอื่น ๆ
    • คนที่ทำจริงจังดูเหมือนจะใช้ QNX หรือ VxWorks น่าเสียดายที่โปรเจกต์หุ่นยนต์ส่วนใหญ่ไม่ได้จริงจังขนาดนั้น และรัน Ubuntu กัน
    • แม้จะไม่ใช่ RTOS ตามความเข้าใจทั่วไป แต่ RTIC ก็ใช้ได้ดี เท่าที่รู้เดิมทีมันถูกพัฒนาสำหรับงานหุ่นยนต์
      https://rtic.rs
  • บทความที่เกี่ยวข้องมีพวกนี้ ยังมีอย่างอื่นอีกไหม?
    Homebrew an OS from Scratch? Snowdrop Shows How It's Done - https://news.ycombinator.com/item?id=39005640 - Jan 2024 (1 comment)
    Snowdrop OS – a homebrew operating system from scratch, in assembly language - https://news.ycombinator.com/item?id=28090574 - Aug 2021 (3 comments)

  • พูดให้ถูกคือเป็น แอสเซมบลี x86

    • พูดให้ถูกกว่านั้นคือ แอสเซมบลี x86 แบบ 16-bit real mode
  • ชุดเครื่องมือและแอปที่ทำขึ้นมาน่าประทับใจ แต่ถึงอย่างนั้นก็ดูเหมือนยังไม่ตกหลุมเสน่ห์ของการ self-hosting
    ถ้าจะทำให้แอสเซมเบลอร์เทียบระดับ nasm ได้ คงต้องทำงานเพิ่มอีก หรือไม่ก็ต้องปรับซอร์สโค้ดทั้งหมดให้ใกล้กับ Snowdrop ASM มากขึ้น

  • ถ้ามี V32 กับคอมไพเลอร์ BASIC ด้วยก็ดี
    น่าจะขอเป็นฟีเจอร์ได้

  • อยากเห็นการพอร์ตของแบบนี้ไปบน esp32 เช่น เอาไปรันบนบอร์ดอย่าง ttgo vga32
    ถ้ามี GUI พื้นฐานและ OS แบบเชลล์ที่มี SD card, VGA, เสียง, คีย์บอร์ด/เมาส์, WiFi, Bluetooth ก็คงดี ให้ความรู้สึกเหมือน Commodore 64 ยุคใหม่ โดยการพิมพ์ผ่าน WiFi จะเป็นแค่ข้อความก็ได้ และมีเบราว์เซอร์สไตล์ lynx, อีเมล, IRC, gopher อะไรแบบนั้นด้วย

  • ข้อกำหนดสำหรับการ build Snowdrop OS น่าประทับใจ
    Works on: Windows XP 32bit, Windows 98, Windows 95