Chengcheng OS (CCOS) เป็นระบบปฏิบัติการ 64 บิต ฉันเขียนมันบน x86 เพราะฉันชอบความเศร้าและความทุกข์ยาก โครงการนี้ยังคงพัฒนาอยู่ ฉันเป็นผู้เริ่มต้นสำหรับการออกแบบระบบปฏิบัติการ แนวคิดการออกแบบหลายอย่างที่ฉันนำไปใช้นั้นได้รับแรงบันดาลใจจาก Windows NT เช่น CCLDR (OS Loader สำหรับ Chengcheng OS) และ Memory Manager และมีหลักสูตรอีกมากมายที่ฉันต้องเรียนรู้ในช่วงหลายเดือนที่ผ่านมา ดังนั้นฉันจะไม่อัปเดตโครงการบ่อยๆ

Uefi
CCOS ใช้ UEFI เพื่อ bootstrap ccoskrnl UEFI อำนวยความสะดวกอย่างมากในการพัฒนาตัวโหลด OS นักพัฒนาสามารถเรียกอินเทอร์เฟซที่จัดทำโดย UEFI โดยตรง (ใช้ภาษา C แทนการประกอบ) มีสิ่งหนึ่งที่ควรทราบที่นี่ CCOs ยังคงต้องการ CCLDR (ไฟล์ปฏิบัติการไบนารีอื่น) เพื่อโหลด CCOSKRNL มันเป็นเหมือน "ตัวโหลดบูตเวทีที่สอง" แต่ในความเป็นจริง bootx64.efi เพียงแค่แบ่งพื้นที่เคอร์เนลและค้นหาพื้นที่หน่วยความจำทางกายภาพที่เหมาะสมสำหรับการโหลดภาพ CCOSKRNL จากนั้น CCLDR จะแมปพื้นที่เคอร์เนลลงในที่อยู่สูงของพื้นที่ที่อยู่เสมือนจริงและตั้งค่า GDT (ตาราง descriptor ทั่วโลกโครงสร้างที่สำคัญสำหรับสถาปัตยกรรม x86
เครื่องประมวลผล
การสนับสนุนหลายโปรเซสเซอร์เป็นความท้าทายที่ยิ่งใหญ่สำหรับฉัน ฉันไม่รับประกันการใช้งานระบบหลายโปรเซสเซอร์ที่ดี สำหรับตอนนี้ CCO สามารถใช้งานโปรเซสเซอร์แอปพลิเคชันอื่น ๆ ได้อย่างถูกต้อง ไม่เหมือนกับการสาธิตระบบปฏิบัติการอื่น ๆ CCOs วางรูทีนการเริ่มต้นโปรเซสเซอร์แอปพลิเคชันที่ไฟล์ไบนารีที่แยกได้และโหลดลงใน 1 MIB แรกของหน่วยความจำทางกายภาพและสร้างตารางหน้าแยกต่างหากสำหรับพื้นที่หน่วยความจำ ก่อนที่โปรเซสเซอร์แอปพลิเคชันจะทำงาน CCOS จะแก้ไขการอ้างอิงของที่อยู่สัมพัทธ์ของโปรแกรมไบนารี ฉันต้องยอมรับว่านี่คือการออกแบบที่โง่เขลา
Apic
APIC (คอนโทรลเลอร์ขัดจังหวะโปรแกรมขั้นสูง) เป็นองค์ประกอบที่สำคัญในระบบคอมพิวเตอร์ที่ทันสมัย มันให้ความเป็นไปได้สำหรับระบบหลายโปรเซสเซอร์และรองรับลำดับความสำคัญของการขัดจังหวะหลายระดับในระดับฮาร์ดแวร์ น่าเสียดายที่ APIC มีความซับซ้อน เนื่องจากเพื่อให้เข้าใจอย่างถ่องแท้ว่า APIC ต้องการความรู้ที่ดีเกี่ยวกับระบบคอมพิวเตอร์ฉันจึงใช้ไดรเวอร์พื้นฐานของ APIC เท่านั้น
Truetype
CCOS แสดงอักขระบนหน้าจอผ่านการแสดงผลแบบอักษร Truetype (ตัวอักษรเริ่มต้นใน CCOS คือ Adobe Source Han Sans SC VF ) มันไม่คุ้มค่าที่จะส่งออกอักขระโดยใช้การเรนเดอร์ Truetype สำหรับการพัฒนาระบบปฏิบัติการในช่วงต้นการใช้ตัวอักษรบิตแมปเป็นวิธีการแนะนำตัวละครที่แนะนำมากขึ้น
อาจเป็นสิ่งที่ยิ่งใหญ่ที่สุดเกี่ยวกับการจัดเก็บตัวละครเป็นโครงร่างคือเพียงหนึ่งโครงร่างต่อตัวละครที่จำเป็นในการสร้างขนาดทั้งหมดของระบบปฏิบัติการตัวละครนั้นที่เคยต้องการ โครงร่างเดียวสามารถปรับขนาดเป็นช่วงขนาดใหญ่ที่มีขนาดต่างกันซึ่งบางส่วนมีภาพประกอบด้านล่าง สิ่งนี้จะช่วยให้ตัวละครตัวเดียวกันสามารถแสดงบนจอภาพของความละเอียดที่แตกต่างกันและพิมพ์ออกมาในขนาดที่แตกต่างกันจำนวนมาก ในการขยายโครงร่างตัวละครเป็นการดำเนินการทางคณิตศาสตร์อย่างง่ายเช่นเดียวกับการเปลี่ยนแปลงอื่น ๆ เช่นการหมุนและการสะท้อน
โครงสร้างของ truetype นั้นซับซ้อนฉันใช้ตัวอักษร rasterizer โดยไม่ได้บอกใบ้ถึง truetype การบอกใบ้เป็นหัวใจสำคัญของ Truetype นักประดิษฐ์ของมันคำนึงถึงความหลากหลายของความคิดเห็นเกี่ยวกับวิธี "ถูกต้อง" ในการบอกใบ้ประเภทตัดสินใจว่าไม่มีกระบวนทัศน์คำใบ้เดียวที่พวกเขาจะกำหนดให้กับนักพัฒนาประเภท แต่พวกเขาเชื่อมโยง Rasterizer ที่ค่อนข้างง่ายกับภาษาการเขียนโปรแกรมที่ตีความใหม่ อย่างไรก็ตามสำหรับการอ่านแบบอักษรนั้นเพียงพอแล้ว
สิ่งเหล่านี้เป็น issus cirtical ที่นี่ซึ่งก็คือการ preformence ของเอาท์พุทข้อความของ CCOs เป็นสระว่ายน้ำมาก การแสดงที่ไม่ดีจะชะลอการทำงานของ CCO อย่างจริงจัง ฉันไม่รู้วิธีเพิ่มประสิทธิภาพฟังก์ชั่นเพราะการวาดแบบอักษรเป็นกระบวนการที่ค่อนข้างซับซ้อน อีกวิธีหนึ่งคือใช้ตัวอักษรบิตแมปแทนตัวอักษร TrueType แทน
ถ่านกว้าง
CCOS เสนอตัวละครสองประเภท "Char" และ "WCH_T" (Wide Char, 4-bytes) สำหรับการจัดเก็บตัวละครทั้งหมด โดยไม่คำนึงถึงประเภทของตัวละคร CCOS จะแปลง WCH_T ก่อนเสมอจากนั้นจะส่งออกสตริงกว้าง ในความเป็นจริงตัวแยกวิเคราะห์ Truetype ใน CCOS ใช้ "Unicode 2.0 และความหมายเป็นต้นไป" เท่านั้นซึ่งเป็นแพลตฟอร์ม ID = 0 และการเข้ารหัส ID = 3 ใน CMAP (CMAP - อักขระไปยังตารางการแมปดัชนี Glyph ดังนั้นจึงรองรับอักขระระนาบหลายภาษา UNICODE พื้นฐาน (U+0000 ถึง U+FFFF)
ตัวจัดการหน่วยความจำ
แนวคิดการออกแบบของการจัดการหน่วยความจำได้รับแรงบันดาลใจจาก Window NT ซึ่งมีฐานข้อมูล PFN, Lookside, รูปแบบการทำแผนที่ด้วยตนเอง-ไดเรกทอรีหน้า, การจัดการพูลหน่วยความจำการเคลือบและอื่น ๆ แต่ไม่ใช่ทั้งหมด
เอาต์พุตกราฟิกด้วยหลายหน้าต่าง
CCOs รองรับหลายหน้าต่างซึ่งหมายความว่าสามารถส่งข้อความในหน้าต่างที่แตกต่างกันบนหน้าจอ มันเป็นสิ่งที่ดีที่จะทำการดีบักหลายโปรเซสเซอร์ผ่านการเปิดหน้าต่างข้อความออกไปยังโปรเซสเซอร์แต่ละตัว แม้ว่าจะไม่มีไดรเวอร์เมาส์ผู้ใช้ก็สามารถใช้คีย์บอร์ดเพื่อเลือกหน้าต่างที่จำเป็นต้องป้อนอักขระ
การแก้ไขข้อผิดพลาด: เพิ่ม Spinlock เพื่อป้องกันความขัดแย้งของเอาต์พุต Windows หลายรายการ
ตัวจัดการหน่วยความจำแบบไดนามิกพร้อมการตรวจจับการรั่วไหลของหน่วยความจำ
การจัดการระบบ PTE
การจัดการ PCIE
ไดรเวอร์ NVME
ไดรเวอร์แป้นพิมพ์ (ไม่ใช่เร่งด่วน)
Qemu กับ 2 Gib Ram หรือสูงกว่า
ฉันแค่แบ่งพื้นที่หน่วยความจำโดยประมาณว่าพื้นที่เคอร์เนลใช้เพียงไตรมาสของ Avavalalbe Ram เท่านั้น แต่ปัญหาจำเป็นต้องสังเกตว่า GetMemoryMap () รูทีนส่งคืนข้อมูลแผนที่หน่วยความจำที่ไม่ถูกต้องเมื่อพยายามจัดสรร RAM ที่สูงขึ้น (ใหญ่กว่า 2 GIB) สำหรับ QEMU ฉันไม่ได้ลองเฟิร์มแวร์ OVMF อื่น ๆ ดังนั้นฉันคิดว่าข้อผิดพลาดดังกล่าวอาจเกิดจาก OVMF ของฉัน
X86_64 CPU (Intel หรือ AMD) พร้อมชุดคำสั่ง AVX
มีความแตกต่างเล็กน้อยในการเขียนโปรแกรมสถาปัตยกรรม X86_64 ระหว่าง Intel 64 และ AMD64 ฉันกำลังพัฒนา CCOs จาก AMD CPU แต่ใช้คู่มือซอฟต์แวร์ของIntel® 64 และ IA-32 สถาปัตยกรรมเป็นคู่มือการอ้างอิง X86_64 คู่มือการอ้างอิง X86_64 ของฉัน สำหรับตอนนี้แม้ว่าสิ่งที่ผู้ขาย CPU
สำหรับการติดตั้งโปรดดูที่ ccoskrnl build
ห้องสมุดคณิตศาสตร์ (reflibs/libm.a) จัดทำโดย @estestrella
ไม่มีใบอนุญาต
อีเมล: [email protected]
Chengcheng OS: https://github.com/ccoskrnl/ccoskrnl
คู่มือผู้พัฒนาซอฟต์แวร์สถาปัตยกรรมIntel® 64 และ IA-32
AMD64 Manual Manual Volume 2: การเขียนโปรแกรมระบบสถาปัตยกรรม
ภาษาการเขียนโปรแกรม C
OSDEV WIKI
ข้อกำหนด ACPI
ข้อมูลจำเพาะของ UEFI