操作系统
第二章
第二章的主线是实现一个最小批处理系统。和第一章只让内核自己启动不同,这一章开始让内核承担操作系统最基本的职责:把多个用户程序提前打包进内核,顺序加载、运行,并在一个程序退出后继续执行下一个程序。
实验要求可以概括成三部分:第一,建立 ch2 的用户程序执行环境,让内核能够定位、加载并顺序运行一批用户程序;第二,打通用户态到内核态的 syscall 链路,让用户程序通过 ecall 请求 write、exit 等内核服务;第三,在 ch2 的基础上完成 moving-tangram 扩展实验,把批处理执行过程可视化为逐块渲染的 O/S 七巧板图案。
这一章要真正实现的核心内容包括:构建阶段通过 build.rs、app.asm 和 .incbin 把用户程序打包进内核镜像;运行阶段通过 AppMeta 定位用户程序边界,把当前 app 复制到运行基址,再利用 LocalContext::user 和 ctx.execute 进入 U-mode;当用户程序执行 ecall 时,内核根据寄存器中的 syscall id 分发到具体服务,并在 exit 后切换到下一个程序。
你这次的 ch2 文档还把进阶实验讲得很完整:图形部分不是单独做一个无关 demo,而是把 ch2 的批处理过程映射成 moving tangram 的逐块出现。当前实现通过 VirtIO-GPU、framebuffer 和 gpu.flush() 在 QEMU 图形窗口中显示 O/S 七巧板图案,用图形方式把“程序一个接一个跑完”的过程可视化出来。
如果一句话总结第二章,就是:这一章让内核第一次真正成为用户程序的执行环境,并在批处理、syscall 和图形扩展三个层面,把操作系统从“自己能启动”推进到了“能带着一批应用程序跑起来”。
