這是一個很小的愛好操作系統,可以玩我以前從未做過的事情……這不是打算具有功能,有用,安全或可靠的。實施本來應該很有趣。
如果您想查看我要做的最新事情,請查看此存儲庫中的dev分支。通常, master應該編譯和運行。
從librs開始(該項目的LIBC相當於LIBC)。
user/src/main.rs作為示例用戶空間程序。cargo xbuild --target target.json分頁
memory::paging::map_regionIPC的零副本消息傳遞。要發送消息,
我正在玩弄根本沒有流程的想法,只是可能選擇傳遞其能力的延續點。
目前,其1500多個LOC(不包括評論 + Whitespace +依賴項)。不錯!
內核本身是基於延續的,而不是使用kthreads之類的東西。在第一次通行證中,我只是在使事情正常工作。後來,我可能會回去使它高效。
內核空間或用戶空間中沒有基於計時器的先發製人(儘管確實發生了計時器中斷,以便計時器可以工作)。沒有鎖,在用戶空間中沒有多線程。每個過程都是單線程和基於延續的。每個Continuation都可以返回一組額外的延續,以任何順序,錯誤或什麼都沒有運行。連續性也可以等待事件,例如I/O或其他過程的終止。
單個地址空間。一切都生活在相同的地址空間中。頁面表入口位用於禁用某些連續性地址空間的某些部分。
小內核堆用於動態內存分配。
實體分配的好友分配器。
虛擬地址空間區域的好友分配器。
簡單的功能係統,用於管理系統中資源的訪問,例如內存區域。
切換到usermode和back。
系統通過syscall和sysret指令進行調用。
將獨立於位置的精靈二進製作為用戶模式任務,運行它並通過SYSCALL退出。
現在我有了一個功能齊全的基本內核,我可以開始玩東西!
生鏽,每晚
rustc 1.45.0-nightly (99cb9ccb9 2020-05-11) llvm-tools-preview rust分佈組件通過rustup component add llvm-tools-preview
cargo xbuild和cargo bootimage通過cargo install cargo-xbuild bootimage
build-essentials和標準用戶: gcc , make , ld , objcopy , dd
qemu運行
建造和運行
$ cd os2/user
$ cargo xbuild --target x86_64-unknown-elf.json --release
$ cd ../kernel
$ bootimage run可以選擇傳遞啟動bootimage --release以進行優化的構建。