队名:AA5555AA
学校:武汉大学
成员:钟祎诚 谭君宇
指导教师:蔡朝晖
[TOC]
全国赛阶段,我们在初赛设计的基础上重构了内存管理和文件系统两个大系统,分别实现了路线图中的VMAR内存管理和VFS虚拟文件系统。同时,为满足全国赛阶段更多样的系统调用需求,添加了信号处理流程、不完全的用户与组管理功能、设备文件支持以及相应的ramfs文件系统。
此外,由于全国赛最终需要在硬件平台VisionFive 2开发板上运行,还添加了与virtio_disk
同层次的SDIO驱动,实现SD卡的读写,并为其使用的sdio协议做了相应的适配。
主要工作:实现进程及内存对象VMAR的各种功能与接口,并将进程对内存的各种操作统一封装为对VMAR的操作,从而取代重复的页表操作;重构内存管理,大致支持了统一页缓存等。
更多细节参见重构内存管理.md
主要工作:在原有FAT32的基础上添加了VFS层,原有的FAT32文件系统作为继承自VFS的子类存在,实现VFS的各种接口供File
层统一调用。为此,对FAT32的架构进行了微调,恢复了INode
层使之适应VFS的要求。同时,文件系统部分新增了对路径操作的封装Path类,以及支持部分系统设备文件所需的ramfs文件系统。前者大大简化了用于处理路径字符数组的重复代码,后者为新增系统调用所需。
主要工作:在进程和线程级别,增加了信号处理所需的各种数据结构,并在trap.cc返回用户态的过程中添加了信号处理函数sigHandler
,处理线程收到的各种信号。
更多细节参见信号处理.md
主要工作:内核库上采用功能更完备的EASTL代替TINYSTL,引入C++20标准的错误处理机制expected
处理部分函数的异常值,优化调试日志kLogger
的表现并增加了转储dump()
功能,抽象出统一的离散IO接口ScatteredIO
与流式读写接口VMAR::Writer
以提高复用性、易用性、可读性。
更多细节参见基础设施及杂项.md
主要工作:引入了SMP支持,并通过了区域赛测例。但在后续开发过程及调试过程中出现的复杂问题迫使我们暂时将其关闭。
更多细节参见多处理器.md
- 实现机器模式下的输出及中断异常处理
- 引导至内核,实现S-mode与M-mode的通信
- 实现内核态异常处理与时钟中断
- 实现虚拟内存管理
- 实现进程与进程调度
- 实现进程克隆
- 实现打印与管道
- 移植文件系统
- 实现
execve
系统调用 - 实现区域赛33个系统调用
- 支持SMP
- 整理重构文件系统
- 优化内核库
- 规范化地址空间布局
- 实现CoW机制
初赛时定下的路线图全部完成,但距离国赛预期达到的效果仍有差距:
- 完全实现所有的国赛系统调用
- 完全支持多核运行
- 完全支持用户与组管理
- 用户态可用的内核日志
大致解决了QEMU环境下遇到的各种疑难BUG,但移植到开发板上时问题多多……包括但不限于:
- SD卡驱动工作不正常
- 写入satp寄存器时卡死
- nanosleep、time_test等时间相关程序跑不动
- 程序跑完不停机
诸如此类……
上板移植后的BUG由于时间安排原因,暂未更新详细经历。QEMU环境下的问题与解决方法,参见问题与解决方法.md
- The RISC-V Instruction Set Manual, Volume II: Privileged Architecture, Version 1.10”, Editors Andrew Waterman and Krste Asanovi´c, RISC-V Foundation, May 2017
- 《RISC-V SBI specification》. Makefile. 2018. Reprint, RISC-V Non-ISA Specifications. https://github.com/riscv-non-isa/riscv-sbi-doc.
- ISCAS-RVOS
- 操作系统Lab - 知乎专栏
- Zircon Kernel objects | Fuchsia
- GitHub - rcore-os/zCore-Tutorial: Tutorial for zCore kernel.
- Introduction — The Linux Kernel documentation
- The Design and Implementation of the FreeBSD Operating System by Marshall Kirk McKusick, George V. Neville-Neil, Robert N.M. Watson
- GitHub - mit-pdos/xv6-riscv: Xv6 for RISC-V
- OSKernel2023-NutOS