Skip to content

runner: complete stage-1 exec/wait and strict syscall pass

WangHotpnT requested to merge feature/runner into main

本次 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 对比报告。

Merge request reports