นี่เป็นงานอดิเรกขนาดเล็กที่จะเล่นกับสิ่งที่ฉันไม่เคยทำมาก่อน ... มันไม่ได้มีวัตถุประสงค์เพื่อให้สามารถใช้งานได้มีประโยชน์ปลอดภัยหรือเชื่อถือได้ มันหมายถึงการสนุกที่จะนำไปใช้โดยประมาณ
หากคุณต้องการเห็นสิ่งล่าสุดที่ฉันทำให้ตรวจสอบสาขา dev ใน repo นี้ โดยทั่วไป master ควรรวบรวมและเรียกใช้
เริ่มต้นที่ librs (เทียบเท่า LIBC สำหรับโครงการนี้)
user/src/main.rs เป็นโปรแกรมตัวอย่างผู้ใช้สเปซcargo xbuild --target target.jsonการเพจ
memory::paging::map_regionข้อความ Zero-Copy ส่งผ่านสำหรับ IPC เพื่อส่งข้อความ
ฉันกำลังเล่นกับความคิดที่จะไม่มีกระบวนการเลยเพียงแค่ความต่อเนื่องซึ่งอาจหรือไม่อาจเลือกที่จะส่งผ่านความสามารถของพวกเขา
ปัจจุบันมีตำแหน่งมากกว่า 1,500 LOC (ไม่รวมความคิดเห็น + ช่องว่าง + การพึ่งพา) ไม่เลว
เคอร์เนลนั้นมีพื้นฐานมาจากความต่อเนื่องแทนที่จะใช้บางอย่างเช่น Kthreads ในตอนแรกฉันแค่ทำสิ่งต่าง ๆ ต่อมาฉันอาจย้อนกลับไปและทำให้มีประสิทธิภาพ
ไม่มีการสั่งซื้อตามตัวจับเวลาใน kernelspace หรือ userspace (แม้ว่าการขัดจังหวะตัวจับเวลาจะเกิดขึ้นเพื่อให้ตัวจับเวลาสามารถทำงานได้) ไม่มีการล็อคไม่มีมัลติเธรดในผู้ใช้สเปซ ทุกกระบวนการเป็นเธรดเดี่ยวและตามความต่อเนื่อง แต่ละ Continuation สามารถส่งคืนชุดของความต่อเนื่องเพิ่มเติมเพื่อเรียกใช้ในลำดับใด ๆ ข้อผิดพลาดหรือไม่มีอะไรเลย ความต่อเนื่องสามารถรอเหตุการณ์เช่น I/O หรือการยกเลิกกระบวนการอื่น
พื้นที่ที่อยู่เดียว ทุกอย่างอาศัยอยู่ในพื้นที่ที่อยู่เดียวกัน บิตรายการตารางหน้าใช้เพื่อปิดใช้งานบางส่วนของพื้นที่ที่อยู่สำหรับความต่อเนื่องบางส่วน
กองเคอร์เนลขนาดเล็กสำหรับการจัดสรรหน่วยความจำแบบไดนามิก
การจัดสรรบัดดี้สำหรับการจัดสรรเฟรมทางกายภาพ
Buddy Allocator สำหรับพื้นที่ที่อยู่เสมือนจริง
ระบบความสามารถอย่างง่ายสำหรับการจัดการการเข้าถึงทรัพยากรในระบบเช่นภูมิภาคหน่วยความจำ
เปลี่ยนเป็น USERMODE และด้านหลัง
การเรียกระบบผ่านคำแนะนำ syscall และ sysret
การโหลด ELF Binary ที่ไม่ขึ้นกับตำแหน่งเป็นงานโหมดผู้ใช้รันและออกจาก SyScall
ตอนนี้ฉันมีเคอร์เนลพื้นฐานที่ใช้งานได้ส่วนใหญ่แล้วฉันสามารถเริ่มเล่นกับสิ่งต่าง ๆ ได้!
สนิมทุกคืน
rustc 1.45.0-nightly (99cb9ccb9 2020-05-11) llvm-tools-preview Rust Distribution Component ผ่าน rustup component add llvm-tools-preview
cargo xbuild และ cargo bootimage ผ่าน cargo install cargo-xbuild bootimage
build-essentials และ Utils มาตรฐาน: gcc , make , ld , objcopy , dd
qemu เพื่อวิ่ง
เพื่อสร้างและเรียกใช้
$ cd os2/user
$ cargo xbuild --target x86_64-unknown-elf.json --release
$ cd ../kernel
$ bootimage run bootimage สามารถเลือกได้ --release เปิดตัวสำหรับการสร้างที่ดีที่สุด