RISC-V และ Zig กลายเป็นตัวเลือกอันดับต้นสำหรับการพัฒนาระบบปฏิบัติการ

ทีมชุมชน BigGo
RISC-V และ Zig กลายเป็นตัวเลือกอันดับต้นสำหรับการพัฒนาระบบปฏิบัติการ

การเขียน kernel ของระบบปฏิบัติการตั้งแต่เริ่มต้นถือเป็นหนึ่งในแบบฝึกหัดการเขียนโปรแกรมที่ท้าทายที่สุดมาอย่างยาวนาน ในอดีต นักพัฒนามักพึ่งพาสถาปัตยกรรม x86 และภาษาโปรแกรม C สำหรับโปรเจกต์ประเภทนี้ อย่างไรก็ตาม การสนทนาในชุมชนที่เติบโตขึ้นเผยให้เห็นว่าสถาปัตยกรรม RISC-V ร่วมกับภาษาโปรแกรม Zig กำลังกลายเป็นตัวเลือกที่ได้รับความนิยมสำหรับการพัฒนา OS สมัยใหม่

RISC-V ทำให้การเริ่มต้นฮาร์ดแวร์ง่ายขึ้น

ข้อได้เปรียบที่สำคัญที่สุดของ RISC-V เมื่อเทียบกับสถาปัตยกรรม x86 แบบดั้งเดิมอยู่ที่แนวทางที่เรียบง่ายในการตั้งค่าฮาร์ดแวร์ ไม่เหมือนกับระบบ x86 ที่ต้องการโค้ด boilerplate เก่าแก่จำนวนมาก RISC-V ช่วยลดความซับซ้อนเหล่านี้ได้มาก นักพัฒนาไม่จำเป็นต้องต่อสู้กับการตั้งค่า Global Descriptor Table (GDT), Task State Segment (TSS) และโครงสร้างเก่าแก่อื่นๆ ที่มีอยู่เพื่อความเข้ากันได้แบบย้อนหลังเป็นหลัก

นักพัฒนาคนหนึ่งได้แบ่งปันประสบการณ์การเปลี่ยนจาก x86 ไป RISC-V โดยกล่าวว่าการตั้งค่า GDT เป็นจุดที่ทำให้เขาหงุดหงิดพอที่จะไปสำรวจทางเลือกของ RISC-V การออกแบบที่สะอาดของสถาปัตยกรรมนี้หมายความว่านักพัฒนาสามารถมุ่งเน้นไปที่ฟังก์ชันการทำงานของ kernel จริงๆ แทนที่จะต้องจัดการกับข้อกำหนดความเข้ากันได้ที่มีมานานหลายทศวรรษ

หมายเหตุ: GDT (Global Descriptor Table) และ TSS (Task State Segment) เป็นโครงสร้างเฉพาะของ x86 ที่จำเป็นสำหรับการจัดการหน่วยความจำและการสลับงาน แม้ในระบบสมัยใหม่ที่มีประโยชน์ในทางปฏิบัติน้อยมาก

ข้อได้เปรียบหลักของ RISC-V เมื่อเทียบกับ x86 สำหรับการพัฒนาระบบปฏิบัติการ

  • ไม่จำเป็นต้องใช้โค้ดเสริมแบบเก่า
  • ไม่ต้องตั้งค่า GDT ( Global Descriptor Table )
  • ไม่จำเป็นต้องกำหนดค่า TSS ( Task State Segment )
  • กระบวนการเริ่มต้นฮาร์ดแวร์ที่เรียบง่ายกว่า
  • เอกสารประกอบและทรัพยากรชุมชนที่ดีกว่า
  • รอบการพัฒนาที่เร็วกว่า

ภาษาโปรแกรม Zig ได้รับความนิยมเพิ่มขึ้น

ภาษาโปรแกรม Zig พิสูจน์แล้วว่าเหมาะสมเป็นพิเศษสำหรับการพัฒนาระบบปฏิบัติการ สมาชิกในชุมชนรายงานว่า Zig มีคุณสมบัติด้านความปลอดภัยเหมือนภาษาอย่าง Object Pascal และ Modula-2 ในขณะที่ยังคงความคุ้นเคยของ syntax แบบ C การผสมผสานนี้ทำให้นักพัฒนาเขียนโค้ดระดับต่ำที่เชื่อถือได้ง่ายขึ้นโดยไม่ต้องเสียสละประสิทธิภาพ

นักพัฒนาหลายคนได้แปลบทเรียน kernel ที่มีอยู่จาก C ไป Zig สำเร็จแล้ว และพบว่ากระบวนการนี้ทั้งให้ความรู้และสนุกสนาน แนวทางของภาษาในการจัดการหน่วยความจำและการจัดการข้อผิดพลาดอย่างชัดเจนทำให้มีความน่าสนใจเป็นพิเศษสำหรับการเขียนโปรแกรมระดับระบบที่ความเชื่อถือได้เป็นสิ่งสำคัญ

แหล่งข้อมูลการศึกษาและการสนับสนุนจากชุมชน

ชุมชนนักพัฒนา OS ได้สร้างแหล่งข้อมูลมากมายเพื่อช่วยให้ผู้เริ่มต้นได้เริ่มต้น โปรเจกต์อย่าง Operating System in 1000 Lines of Code ให้บทเรียนที่มีโครงสร้างซึ่งสามารถปรับใช้กับภาษาโปรแกรมและสถาปัตยกรรมที่แตกต่างกันได้ แหล่งข้อมูลเหล่านี้ทำให้การพัฒนา kernel เข้าถึงได้ง่ายกว่าที่เคย

ฉันสามารถเข้าใจโค้ด stdlib ของ zig ได้อย่างง่ายดายหลังจากสร้างสิ่งต่างๆ เป็นเวลา 2 วัน อาจจะแตกต่างกันไปสำหรับแต่ละคน แต่มันค่อนข้างง่าย

ความพร้อมใช้งานของเครื่องมือจำลองอย่าง QEMU ยังช่วยลดอุปสรรคในการเข้าถึง นักพัฒนาสามารถทดลองกับการพัฒนา kernel โดยไม่ต้องมีฮาร์ดแวร์พิเศษ ทำให้สามารถทำซ้ำได้อย่างรวดเร็วและแก้ไขปัญหาได้อย่างมีประสิทธิภาพมากขึ้น

แหล่งเรียนรู้ที่แนะนำ

  • บทเรียน "Operating System in 1000 Lines of Code"
  • หนังสือ "Operating Systems: Three Easy Pieces"
  • หนังสือ "Programming from the Ground Up"
  • OSdev Wiki สำหรับการพัฒนา RISC-V
  • QEMU emulator สำหรับการทดสอบและพัฒนา

ตัวเลือกฮาร์ดแวร์ขยายตัว

สำหรับผู้ที่สนใจรัน kernel ของตนบนฮาร์ดแวร์จริง บอร์ด RISC-V ที่มีราคาไม่แพงหลายตัวได้เปิดให้ใช้งานแล้ว ตัวเลือกมีตั้งแต่บอร์ด Milk-V Duo S ราคา 10 ดอลลาร์สหรัฐ ไปจนถึงแพลตฟอร์มการพัฒนาที่มีความสามารถมากกว่าอย่าง VisionFive 2 แม้แต่ Raspberry Pi Pico 2 ตอนนี้ก็รวมการสนับสนุน RISC-V ทำให้การทดลองเข้าถึงได้สำหรับผู้ที่ทำเป็นงานอดิเรกและนักศึกษา

การผสมผสานของสถาปัตยกรรมที่สะอาดของ RISC-V คุณสมบัติด้านความปลอดภัยของ Zig และเครื่องมือที่ดีขึ้นกำลังสร้างนักพัฒนา OS รุ่นใหม่ การเปลี่ยนแปลงนี้แสดงถึงมากกว่าแค่ความชอบทางเทคนิค - มันส่งสัญญาณการเคลื่อนไหวไปสู่การเขียนโปรแกรมระดับระบบที่เข้าถึงได้และบำรุงรักษาได้มากขึ้น ซึ่งอาจมีอิทธิพลต่อวิธีการสร้างระบบปฏิบัติการในอนาคต

อ้างอิง: Writing an operating system kernel: from scratch