这是一个很小的爱好操作系统,可以玩我以前从未做过的事情……这不是打算具有功能,有用,安全或可靠的。实施本来应该很有趣。
如果您想查看我要做的最新事情,请查看此存储库中的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以进行优化的构建。