使用Rust编写的,基于riscv64的支持多核的宏内核操作系统。
master
: 能通过所有测试用例(包括决赛一二阶段)以及运行各种移植应用virtnet
: 实现了Qemu平台的网卡驱动,可以联通外网、起http服务器preliminary
: 初赛截止的分支- 其他:开发过程中一些临时分支
- 进程管理:使用无栈异步协程架构,实现基本的进程与线程管理功能;支持内核态中断;支持libc的pthread库,能够通过比赛测试。支持动态链接;
- 内存管理:实现基本的内存管理功能,内核与用户共用页表;实现文件页缓存即匿名页映射;使用
懒分配
和写时拷贝
等优化策略; - 文件系统:完成虚拟文件系统。实现块缓存,支持dev文件系统;设计实现了FAT32文件系统,使用多种缓存机制提高文件系统速度;实现内存文件系统tmpfs以达到高速读写;实现用户态挂载和回环设备;
- 信号机制:实现比较完整的信号机制,支持用户自定义处理函数;
- 网络模块:实现本地回环设备以及外网的TCP、UDP协议通信;
- 驱动:实现了SDCard驱动和串口Uart驱动,可以直接读写SDCard上的测试用例;实现了串口和SDCard等外设中断,深度结合无栈异步协程架构;
- 测试用例:能够运行busybox、libc测试以及netperf、iperf等功能性测试,同时支持unixbench、lmbench等压力测试;
- 现实应用移植:移植了musl-gcc, redis, vi, 吃豆人小游戏, http服务器;
我们通过了第二阶段的附加赛题第三题中的4和5小问,具体文档在目录
决赛文档见项目根目录下的决赛第一阶段文档.pdf
初赛文档见项目根目录下的初赛文档.pdf
- bootloader: SBI
- kernel/src: 内核代码
- /boards: 开发板配置参数
- /config:内核的各个模块的相关配置参数
- /driver: 驱动
- /fs:文件系统
- /mm: 内存管理
- /net: 网络模块
- /process: 进程管理
- /processor: 多核心管理
- /syscall: 系统调用处理函数
- /trap: 异常处理
- /sbi:sbi调用
- /sync:同步机制
- /utils:工具数据结构
- main.rs: 主程序
- entry.S:起始代码
- user: 用户程序
- testcase: 测试用例
- Titanix-rootfs: 一个精简的rootfs
请参考rCore-Tutorial中Rust开发环境配置部分
第一次运行需要先烧录文件系统镜像,在/kernel目录下输入
sudo make fs-img
此时文件系统根目录会有23年的所有测试用例,后续启动内核后可以在shell中随意运行测试用例;
另外如果要生成rootfs用以运行移植应用,则输入
sudo make fs-img TEST=rootfs
文件系统镜像生成完毕后,在/kernel目录下输入
make run
可以进入busybox的shell,并进行一些busybox支持的基本操作;
如果要在Unmatched-U740上运行,则输入
make run BOARD=u740
还有一些其他编译选项,只需要放在make run
后面即可:
LOG=debug # 设置日志等级为debug
SMP=on # 开启多核
STRACE=on # 开启系统调用追踪
哈尔滨工业大学(深圳):
- 曾培鑫([email protected])(队长):进程管理,内存管理,VFS设计,多核支持。
- 陈佳豪([email protected]):VFS设计,网络模块设计,文件系统相关系统调用实现。
- 任秦江([email protected]):FAT32文件系统设计与实现,设备驱动管理。
- 指导老师:夏文,仇洁婷
本项目使用了洛佳等开发者的RustSBI,以及吴一凡等开发者的rCoreTutorial-v3。
同时感谢我们的学长叶自立,张艺枫,陈林锟,夏文老师和仇洁婷老师,以及同校参赛队伍的帮助。
本项目使用GPL3.0协议