修复内容
libc-bench b_pthread_create_serial1 创建 2500 个不 join 的线程,触发三处独立的 O(N²) 开销,导致 PID1 阻塞 waitpid 活锁、平台判「运行时间过长」、其后所有测试组(musl 性能组、全部 glibc、LTP)得 0 分。
1. 调度:去掉每-trap 全表扫描的延迟回收
trap 路径的 detached-zombie 回收每次用户态陷入都扫一遍整张进程表。改为显式工作队列 ProcessTable::detached_zombies:任何 wait4 永远收不走的僵尸(线程,以及父进程忽略 SIGCHLD 而 detach 的子进程)在 mark_zombie / exit() auto-reap 分支入队,回收时 O(k) 排空,对标 Linux release_task 的 off-trap 延迟释放。
2. procfs:seq_file per-open 快照,消除每次 read() 重生成
ProcVfsInode::read 之前每个 read() 系统调用都用生成器重新生成整文件。/proc/[pid]/smaps(2500+ VMA)被 musl 按 ~1KB 分块读取 → 整个 ~MB 缓冲重生成约 1500 次 ⇒ O(N²)。改为 per-open 快照 content_cache:offset==0 时整体快照一次,后续顺序读直接切片返回;write() 使快照失效。偏移寻址生成器(pagemap)保留 read_at 快路径。
验证
官方镜像 zhouzhouyi/os-contest:20260510 实跑:b_pthread_create_serial1 现 6.45s 跑完,libcbench-musl 跑到 #### OS COMP TEST GROUP END libcbench-musl #### 并继续进入下一阶段(此前为无限 hang)。make all RC=0,kernel-rv/kernel-la 双 ELF,0 个 SIG-DBG。