บทความวิกิฮาวนี้จะแนะนำวิธีการวางแผนและพัฒนาระบบปฏิบัติการ หากคุณไม่ทราบวิธีเขียนโค้ดในภาษา C หรือ C++ ระบบปฏิบัติการจะจัดการฮาร์ดแวร์คอมพิวเตอร์และจัดหาทรัพยากรที่แอปพลิเคชันจำเป็นต้องใช้ การเขียนระบบปฏิบัติการตั้งแต่เริ่มต้นต้องใช้ความเชี่ยวชาญด้านวิทยาการคอมพิวเตอร์ ภาษาโปรแกรมอย่าง C หรือ C++ การประกอบ และการจัดการโค้ด
ขั้นตอน
ส่วนที่ 1 จาก 2: การเรียนรู้พื้นฐาน
ขั้นตอนที่ 1 ลงเรียนหลักสูตรวิทยาการคอมพิวเตอร์ขั้นพื้นฐาน
ต่างจากการพัฒนาสำหรับเว็บ การสร้างระบบปฏิบัติการต้องมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับอัลกอริธึม โครงสร้างข้อมูล ฮาร์ดแวร์คอมพิวเตอร์ และการจัดการทรัพยากร ผู้คนได้รับปริญญาในด้านนี้ ดังนั้นอย่าคาดหวังที่จะเขียนระบบปฏิบัติการทั้งหมดหลังจากอ่านบทช่วยสอนออนไลน์! หลักสูตร Intro to Computer Science ของ Harvard เปิดสอนทางออนไลน์ผ่าน EDX โดยไม่มีค่าใช้จ่าย
ขั้นตอนที่ 2 เรียนรู้ภาษาการเขียนโปรแกรมระดับสูงเช่น Python
เมื่อคุณมีความเข้าใจพื้นฐานที่มั่นคงเกี่ยวกับวิทยาการคอมพิวเตอร์แล้ว ขั้นตอนต่อไปคือการเรียนรู้ C และ/หรือ C++ เช่นเดียวกับการเรียนรู้เกี่ยวกับวิทยาการคอมพิวเตอร์ การเรียนรู้ภาษาไม่ได้เป็นทางเลือก คุณจะไม่สามารถเขียนโค้ดระบบปฏิบัติการได้ หากคุณไม่สามารถเขียนแอปพลิเคชันที่เป็นของแข็งได้
หากคุณเพิ่งเริ่มใช้ C ให้ลองดูหลักสูตร C Programming: Getting Started ของ Dartmouth ซึ่งให้บริการฟรีผ่าน EDX เมื่อคุณเรียนจบหลักสูตรนั้นแล้ว คุณสามารถเรียนหลักสูตรต่อไปในซีรีส์: C Programming: Language Foundations จากนั้น ไปที่หลักสูตรต่อๆ ไป เช่น การเขียนโปรแกรมโมดูลาร์และการจัดการหน่วยความจำ และพอยน์เตอร์ และการจัดการหน่วยความจำ
ขั้นตอนที่ 3 เรียนรู้ภาษาแอสเซมบลี
ภาษาแอสเซมบลีเป็นภาษาระดับต่ำที่ออกแบบมาเพื่อสื่อสารกับโปรเซสเซอร์ต่างๆ เนื่องจากแอสเซมบลีนั้นแตกต่างกันไปสำหรับโปรเซสเซอร์ประเภทต่างๆ (เช่น ภาษาแอสเซมบลี x86 สำหรับ Intel, AMD, VIA และโปรเซสเซอร์อื่นๆ) คุณจะต้องเรียนรู้เวอร์ชันสำหรับประเภทของโปรเซสเซอร์ที่คุณเข้ารหัส
- หนังสือโอเพนซอร์ซเล่มนี้ หากอ่านอย่างครบถ้วน จะทำให้คุณมีความเข้าใจที่เพียงพอสำหรับการสร้างระบบปฏิบัติการ
- Art of Assembly Language เป็นหนังสือเกี่ยวกับการประกอบที่ขอแนะนำทั้งแบบออนไลน์และออฟไลน์
- คุณควรค้นคว้าเกี่ยวกับประเภทของโปรเซสเซอร์ที่ระบบปฏิบัติการของคุณควรจะทำงานให้มาก คู่มือสำหรับสถาปัตยกรรมโปรเซสเซอร์สามารถพบได้ง่ายโดยใช้การค้นหาโดย Google ("คู่มือ Intel, " "คู่มือ ARM, " เป็นต้น)
ขั้นตอนที่ 4 ทำแบบฝึกหัดระบบปฏิบัติการให้สมบูรณ์
บทช่วยสอนเกี่ยวกับระบบปฏิบัติการจะแนะนำคุณตลอดขั้นตอนการสร้างระบบปฏิบัติการพื้นฐาน วิธีนี้จะทำให้คุณเคยชินกับกระบวนการนี้ และช่วยให้คุณทราบว่ามีชิ้นส่วนใดที่คุณขาดหายไปหรือไม่ เมื่อคุณเสร็จสิ้นบทช่วยสอนหรือสองบท คุณจะสามารถสร้างระบบปฏิบัติการของคุณเองได้
- Bare Bones เป็นบทช่วยสอนที่ช่วยให้คุณเขียนเคอร์เนลแบบง่าย 32 บิตตัวแรกของคุณ หลังจากเสร็จสิ้นการกวดวิชา ขั้นตอนต่อไปคือการใช้ Meaty Skeleton เพื่อจัดโครงสร้างระบบปฏิบัติการของคุณเอง
- Linux from Scratch เป็นหนังสือออนไลน์ที่จะแนะนำคุณเกี่ยวกับการสร้างระบบปฏิบัติการ Linux ของคุณเอง
- ระบบปฏิบัติการตั้งแต่ 0 ถึง 1 เป็นหนังสือฟรีเกี่ยวกับการสร้างระบบปฏิบัติการต่างๆ ตั้งแต่ต้นจนจบ
ขั้นตอนที่ 5. กำหนดเป้าหมายระบบปฏิบัติการของคุณ
คุณต้องการให้ระบบปฏิบัติการของคุณทำอะไร? ควรมีลักษณะอย่างไร? คุณจำเป็นต้องเขียนระบบปฏิบัติการทั้งหมดจริง ๆ หรือคุณเพียงแค่ต้องการสร้างรูปลักษณ์บางอย่างสำหรับเดสก์ท็อปของคุณหรือไม่? สิ่งเหล่านี้เป็นสิ่งที่ควรพิจารณาก่อนเริ่มเขียนโค้ด
- พิจารณาพัฒนาร่วมกับทีมโปรแกรมเมอร์คนอื่นๆ การมีทีมนักพัฒนาที่ทำงานในโครงการจะช่วยลดเวลาในการพัฒนาได้อย่างมาก
- เพิ่มเป้าหมายโครงการ แผนงาน และคำถามของคุณลงในที่เก็บข้อมูลสาธารณะ เพื่อให้ผู้อื่นช่วยเหลือคุณได้ง่าย
ส่วนที่ 2 จาก 2: การสร้างระบบปฏิบัติการของคุณ
ขั้นตอนที่ 1 เลือกสภาพแวดล้อมการพัฒนา
นี่คือแพลตฟอร์มที่คุณจะใช้เพื่อเขียนโค้ดระบบปฏิบัติการใหม่ของคุณ มันเป็นเรื่องของความชอบส่วนบุคคล แต่คนส่วนใหญ่ใช้ Windows หรือยูนิกซ์ หากคุณใช้ Windows ขอแนะนำให้ติดตั้งสภาพแวดล้อม UNIX เช่น Cygwin หรือ MinGW โดยทั่วไป คุณจะต้องแน่ใจว่าสภาพแวดล้อมที่คุณใช้มีดังต่อไปนี้:
- GCC (คอมไพเลอร์ Gnu) หากคุณใช้ Windows คุณสามารถติดตั้งได้ใน Cygwin หรือ MinGW
- Binutils คือชุดเครื่องมือที่ใช้สำหรับจัดการไฟล์อ็อบเจ็กต์ อีกครั้ง หากคุณใช้ Windows คุณสามารถติดตั้งใน Cygwin ได้
- โปรแกรมแก้ไขข้อความที่ดี Vim และ emacs มักใช้ในสภาพแวดล้อม UNIX ผู้ใช้ Windows สามารถใช้ Notepad หรือดู Notepad++ สำหรับการอัปเกรดแบบหลายแท็บ
- Perl และ/หรือ Python แนะนำให้ใช้อย่างใดอย่างหนึ่งหรือทั้งสองอย่างสำหรับการจัดการสตริง
ขั้นตอนที่ 2 ตั้งค่าระบบควบคุมเวอร์ชันของคุณ
การเขียนระบบปฏิบัติการหมายความว่าคุณจะต้องสร้างโค้ดเป็นร้อย (หรือเป็นพัน!) เมื่อคุณกำลังแก้ไข อาจสร้างความสับสนได้ บางตัวเลือกที่จะเช็คเอาท์คือ CVS, Mercurial และ Subversion
ขั้นตอนที่ 3 ตัดสินใจเลือก bootloader
หากคุณไม่ต้องการสร้างของคุณเอง คุณสามารถใช้อันที่มีอยู่เช่น Grand Unified Bootloader (GRUB) หากคุณรู้สึกกล้าพอที่จะเขียนโค้ด bootloader ให้ลองดู Rolling Your Own Bootloader บน OSDev.org
ขั้นตอนที่ 4 เลือกการออกแบบเคอร์เนล
เคอร์เนลเป็นแกนหลักของระบบปฏิบัติการของคุณ โดยมีส่วนต่อประสานระหว่างผู้ใช้กับฮาร์ดแวร์คอมพิวเตอร์ มีเมล็ดแบบเสาหินและเมล็ดไมโคร เคอร์เนลเสาหินใช้บริการทั้งหมดในเคอร์เนลในขณะที่ไมโครเคอร์เนลมีเคอร์เนลขนาดเล็กรวมกับภูตผู้ใช้ที่ใช้บริการ โดยทั่วไป เมล็ดแบบเสาหินจะเร็วกว่า แต่ไมโครเคอร์เนลมีการแยกข้อบกพร่องและความน่าเชื่อถือที่ดีกว่า
ขั้นตอนที่ 5. เริ่มเล็ก ๆ
เริ่มต้นด้วยสิ่งเล็กๆ น้อยๆ เช่น การแสดงข้อความและการขัดจังหวะก่อนที่จะทำสิ่งต่างๆ เช่น การจัดการหน่วยความจำและการทำงานหลายอย่างพร้อมกัน คุณยังสามารถลองทำระบบปฏิบัติการ 16 บิตแบบง่าย ๆ แทนการก้าวกระโดดครั้งใหญ่
คุณจะไม่เต็มระบบภายในสองสัปดาห์ เริ่มต้นด้วยระบบปฏิบัติการที่บูท จากนั้นไปยังสิ่งที่ยอดเยี่ยม
ขั้นตอนที่ 6 ทดสอบระบบปฏิบัติการใหม่ของคุณด้วยเครื่องเสมือน
แทนที่จะรีบูตเครื่องคอมพิวเตอร์ทุกครั้งที่ทำการเปลี่ยนแปลงหรือต้องถ่ายโอนไฟล์จากคอมพิวเตอร์ที่กำลังพัฒนาไปยังเครื่องทดสอบ ให้ใช้แอปพลิเคชันเครื่องเสมือน VMWare เป็นตัวเลือกทั่วไปที่ใช้งานได้กับทั้ง Windows และ Linux และ Bochs ก็เช่นกัน ตรวจสอบการชะงักงันที่อาจเกิดขึ้นและข้อบกพร่องอื่นๆ และซ่อมแซมตามความจำเป็น
ขั้นตอนที่ 7 ปล่อย "ปล่อยตัวผู้สมัคร
คุณสามารถทำได้โดยอัปโหลดโค้ดที่ทดสอบแล้วไปยังพื้นที่เก็บข้อมูลสาธารณะ ซึ่งจะช่วยให้ผู้คนสามารถทดสอบระบบปฏิบัติการของคุณและรายงานปัญหาที่พวกเขาพบกลับมาได้
ขั้นตอนที่ 8 เครือข่ายกับผู้พัฒนาระบบปฏิบัติการอื่น
มีชุมชนนักพัฒนาระบบปฏิบัติการทั้งหมดรวมตัวกันในฟอรัมต่างๆ รวมถึง /r/osdev บน Reddit และ Software Engineering Stack Exchange สิ่งที่คุณเข้าใจเกี่ยวกับการพัฒนาระบบปฏิบัติการพื้นฐาน อ่านโพสต์ที่มีอยู่เพื่อดูว่ามีอะไรเกิดขึ้นบ้างในระหว่างกระบวนการพัฒนา
วิดีโอ - การใช้บริการนี้ อาจมีการแบ่งปันข้อมูลบางอย่างกับ YouTube
เคล็ดลับ
- ตรวจสอบให้แน่ใจว่าได้นำคุณลักษณะด้านความปลอดภัยมาใช้เป็นความสำคัญสูงสุดของคุณ หากคุณต้องการให้ระบบของคุณทำงานได้
- หลังจากการพัฒนาทั้งหมดเสร็จสิ้น ให้ตัดสินใจว่าคุณต้องการเผยแพร่โค้ดเป็นโอเพ่นซอร์สหรือเป็นกรรมสิทธิ์
- เพื่อให้ระบบปฏิบัติการสามารถจัดการกับโปรเซสเซอร์หลายตัวได้ Memory Manager ของคุณต้องมีกลไก "ล็อค" เพื่อป้องกันไม่ให้โปรเซสเซอร์หลายตัวเข้าถึงทรัพยากรเดียวกันในเวลาเดียวกัน "การล็อก" ที่ใช้สำหรับสิ่งนี้จะต้องมีตัวกำหนดตารางเวลาเพื่อให้แน่ใจว่ามีตัวประมวลผลเพียงตัวเดียวที่เข้าถึงทรัพยากรที่สำคัญในเวลาใดก็ตาม และตัวอื่นๆ ทั้งหมดถูกทำให้รอ ทว่าตัวจัดกำหนดการขึ้นอยู่กับการมีอยู่ของตัวจัดการหน่วยความจำ นี่เป็นกรณีของการพึ่งพากันชะงักงัน ไม่มีวิธีมาตรฐานในการแก้ปัญหาเช่นนี้ ในฐานะโปรแกรมเมอร์ คุณถูกคาดหวังให้มีทักษะเพียงพอที่จะคิดหาวิธีจัดการกับมันเอง
- ระบบปฏิบัติการยังเป็นมิตรกับผู้ใช้อีกด้วย ตรวจสอบให้แน่ใจว่าได้เพิ่มคุณสมบัติที่เป็นมิตรกับผู้ใช้ ทำให้สิ่งเหล่านี้เป็นส่วนสำคัญของการออกแบบของคุณ
- ไม่เข้าร่วม ฟอรัม OSDev.org และเริ่มถามคำถามที่ชัดเจน ก็จะส่งผลให้ "อ่านคู่มือ" คำตอบ คุณควรลองอ่าน Wikipedia และคู่มือสำหรับเครื่องมือต่างๆ ที่คุณต้องการใช้
- อย่าเริ่ม โครงการระบบปฏิบัติการเพื่อเริ่มต้นการเรียนรู้การเขียนโปรแกรม หากคุณยังไม่รู้จัก C, C++, Pascal หรือภาษาอื่นๆ ที่เหมาะสม เช่น การจัดการตัวชี้ การจัดการบิตระดับต่ำ การเปลี่ยนบิต ภาษาแอสเซมบลีแบบอินไลน์ ฯลฯ แสดงว่าคุณยังไม่พร้อมสำหรับการพัฒนาระบบปฏิบัติการ.
- หากคุณทำสิ่งที่ไม่ได้รับคำแนะนำที่ดี เช่น เขียนไบต์สุ่มไปยังพอร์ต I/O แบบสุ่ม คุณจะขัดข้อง OS ของคุณ และ (ในทางทฤษฎี) อาจทำให้ฮาร์ดแวร์ของคุณพังได้