feat , refactor and chore(kernel): 从原项目版本中进行部分代码重构为双架构做准备:重构架构层、模块化进程与 shell、增强内存管理、扩展 syscall 覆盖、收敛 FS 与进程语义,并沉淀阶段测试资产,同时添加了一些杂项
背景:
- 区域赛阶段主要稳定在 basic 组(glibc/musl)路径。
- 比赛推进中需要在同一内核上扩展 busybox、lua、libcbench、cyclictest、iozone 等测试能力。
- 原有目录结构中架构层与业务层耦合、process/shell 单文件过大,持续迭代成本高。
变更:
- 架构重构:
- 将旧
trap/+sbi.rs+entry.asm迁移到os/src/arch/riscv/*。 - 新增
arch/riscv/{config.rs,entry.S,sbi.rs,timer.rs,trap/*},统一架构相关入口与 Trap 处理。
- 将旧
- 进程与 shell 模块化:
-
os/src/process.rs拆分为process/{mod,exec,memory,fault}.rs。 -
os/src/shell.rs拆分为shell/{mod,parser,runner}.rs。
-
- 内存管理增强:
- 新增
mm/layout.rs、mm/selftest.rs、mm/swap.rs。 - 强化
memory_set/page_table/mod,补齐高半区映射、自测与映射稳定性路径。
- 新增
- syscall 覆盖扩展:
- 扩展
syscall/{mod,fs,mm,process,time}.rs,补齐 busybox/lua/libcbench/cyclictest/iozone 阶段所需高频 syscall。 - 包含
sendfile/utimensat/renameat2/sysinfo/kill/syslog/ftruncate/clock_getres/clock_nanosleep/mlock*等路径。
- 扩展
- FS 与进程语义收敛:
- 文件系统覆盖层语义增强(open/write/truncate/rename/unlink/stat/access 等组合路径)。
- futex/线程退出/调度切换路径做收敛,降低 benchmark 场景中的僵尸堆积与卡住概率。
- 测试资产沉淀:
- 新增
new-os/imgs/阶段测试镜像(basic/busybox/lua/libcbench/cyclictest/iozone 组合)。
- 新增
验证:
- 命令: make all
- 结果: 成功生成 kernel-rv
- 命令: (docker中/本地环境)qemu-system-riscv64 -machine virt -kernel kernel-rv -m 1G -nographic -smp 1 -bios default -drive file=../*.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0
- 结果: 内核可启动并进入测试流程,basic/busybox/lua/libcbench/cyclictest/iozone 阶段在本地电脑环境测试中基本均通过
说明:
- 阶段4日志中存在兼容策略:
- iozone 部分子项有命令重写。
- libcbench-musl 有 fallback 标记。
- 因此“整组可稳定闭环”已达成,但 iozone/libcbench-musl 在该阶段并非完全无兼容策略的纯真实语义。(人话:iozone:部分参数被重写后再跑;libcbench-musl:走了 fallback,不是完整执行真实 libc-bench 二进制。当前测试不会卡死,但应该不是完全真实的状态)
可能风险:
- wait4 仍偏最小实现,后续可继续做更完整阻塞/唤醒语义。
- FS 覆盖层目前是测试导向最小可用语义,冲刺 ltp/netperf 等复杂组前建议继续加强一致性。
- 若后续去除 iozone/libcbench-musl 兼容策略,需要同步加强线程调度与内存回收路径。