runner: complete stage-1 exec/wait and strict syscall pass
本次 MR 内容
本 MR 同步 feature/runner 当前阶段成果,主要完成 runner 首条命令执行闭环,并同步 syscall/process 侧 strict syscall trace 相关改动。
当前已经在 Docker 评测环境中验证:
zhouzhouyi/os-contest:20260510
当前已完成
1. runner 读取并解析测试脚本
runner 已能读取:
/glibc/basic_testcode.sh
并解析第一条有效命令:
./busybox echo "#### OS COMP TEST GROUP START basic-glibc ####"
解析结果:
program = /glibc/busybox
argv[0] = busybox
argv[1] = echo
argv[2] = #### OS COMP TEST GROUP START basic-glibc ####
2. runner 接入 kernel_execve / kernel_wait4
runner 已接入 syscall/process 侧提供的内核态接口:
kernel_execve(path, argv, envp)
kernel_wait4(pid, status, options)
当前执行链路:
runner
-> read /glibc/basic_testcode.sh
-> parse /glibc/busybox + argv
-> kernel_execve
-> boot-context spawn pid=1
-> kernel_wait4
-> child exit status = 0
-> runner test command done
3. busybox echo 已正常输出
当前日志中已出现:
[syscall] getppid => 0
[syscall] getuid => 0
#### OS COMP TEST GROUP START basic-glibc ####
[syscall] write fd=1 len=47 => 47
[wait4] child exit status = 0 (pid=1)
[runner] wait4 ret = 1, status = 0, wait_pid = 1
[runner] test command done
说明 busybox echo 已在用户态正常执行,wait4 也能成功回收 child。
4. strict syscall trace 已通过
当前 strict 检查 8/8 通过:
[syscall] openat OK
[syscall] read OK
[syscall] close OK
[syscall] fstat OK
[syscall] getdents64 OK
[syscall] dup3 OK
[syscall] getppid OK
[syscall] brk OK
检查结果:
PASS(stage-1 + syscall-trace)
验证环境
使用队伍统一评测 Docker 环境:
zhouzhouyi/os-contest:20260510
验证命令:
cd /workspace/oskernel
make clean
make kernel-rv -j$(nproc)
cd /workspace
rm -f logs/ours/qemu.log logs/ours/exit_code.txt
QEMU=$(which qemu-system-riscv64) bash scripts/run_ours.sh
python3 scripts/check_ours_log.py --log logs/ours/qemu.log --strict-syscalls
验证结果:
QEMU exit_code.txt = 0
PASS(stage-1 + syscall-trace)
相关文档更新
本 MR 同步更新:
docs/RUNNER_STATUS.md
docs/CURRENT_STATUS.md
文档中记录了:
runner 当前执行链路;
EXT4 / syscall / runner 当前状态汇总;
Docker 评测环境要求;
strict syscall trace 通过情况;
下一阶段计划。
当前阶段结论
当前 P0 最小闭环已完成:
EXT4 读取脚本
-> runner 解析首条命令
-> execve 执行 busybox
-> busybox echo 输出
-> wait4 回收 child
-> strict syscall trace 通过
后续计划
下一阶段继续推进:
runner 从首条命令执行扩展到完整 basic_testcode.sh 多行执行;
支持 cd ./basic;
支持执行 ./run-all.sh;
使用 EXT4 的 find_testcode_scripts 扫描 /glibc 和 /musl 测试脚本;
根据完整测试日志继续补齐 syscall 长尾语义;
完善 baseline / ours 对比报告。