M3 做完了:Debian 13 的真实程序(动态链接的 bash、coreutils、perl、dpkg)能在 RustROS 上直接运行,dpkg 能打包、安装、卸载软件包;Linux Test Project 的系统调用测试 268 个里通过 254 个,并成为回归测试的一部分。下一个里程碑 M4(网络系统调用)需要你确认后再开始。
| 步骤 | 内容 |
|---|---|
| M3.1–M3.2 | 系统调用可以阻塞(带期限,被别的进程的动作或期限唤醒后重做);nanosleep;管道(匿名和命名,放在 VFS 里,热替换时连同数据交接) |
| M3.3–M3.4 | poll、select、epoll(就绪状态和 epoll 实例在 VFS 里);信号:处理函数(栈上的帧按 Linux x86-64 的布局,含 FPU 状态)、屏蔽、默认动作、EINTR 和 SA_RESTART、SIGCHLD、SIGPIPE、备用栈;进程组和会话 |
| M3.5 | 映射文件、mprotect、mremap、madvise;共享映射(MAP_SHARED,匿名和文件,映射同一文件的进程共用页缓存,改过的页写回);字符设备(null、zero、urandom、console 等) |
| M3.6 | 线程:进程是线程组,地址空间、文件表、信号处理方式在线程之间共享;clone(fork、vfork、线程)、futex(含跨进程的共享 futex)、exit 与 exit_group |
| M3.7 | 动态链接(ld.so 和 glibc)、#! 脚本;/proc(每个挂载点一份,chroot 里可以自己挂);用户和组(setuid 一族、附加组、粘滞位和 setgid 目录);定时器(alarm、setitimer 三种);PROT_NONE;一批按 LTP 修正的语义和错误码;测试:Debian 13 最小根目录里的 26 个程序用例,LTP 的 268 个系统调用测试 |
| 缺口 | 影响 | 打算 |
|---|---|---|
| 网络系统调用(socket 一族) | apt 下载、curl 还不能用 | M4 |
| 终端和作业控制 | 交互式 bash、Ctrl-C、docker exec -it | M5 |
| LTP 余下 12 个 | 文件大小的资源限制、PDEATHSIG、亚毫秒定时精度、个别 mmap / mremap / msync 细节 | 按需在后面的里程碑补 |
| write() 不更新同时被映射的页 | 同一文件既 write 又 mmap 的程序可能看到旧内容 | 需要统一的页缓存,做容器镜像(M6)前评估 |
| /proc 只有常用的部分 | ps 一类工具基本够用,更多字段按需补 | M7a 容器的独立 PID 空间时一起完善 |
按已确认的顺序,下一个是 M4:进程的 socket 调用(TCP、UDP、Unix 域套接字、getaddrinfo 需要的 DNS 解析路径),进程的套接字放在它所属的协议栈实例里(主机模式就是主机的协议栈),epoll 能等套接字。验收:在 Debian 根目录里 apt update 和 apt install curl 能完成,curl 能访问外部网站。
1. M3 是否可以发布:发布 2026.10.25.4 并更新两台机器(和上次一样:先阿里云,再第二台生产机;模块接口有变化,所有模块重装)。
2. M4 的范围是否合适;确认后我再开始 M4。