Skip to content

test:进行了代码重构和推进,尝试将分支合并到main

qiqi requested to merge migrate/new-os-import into main

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.rsmm/selftest.rsmm/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 兼容策略,需要同步加强线程调度与内存回收路径。

Merge request reports