第1章学习笔记:从程序到内核:操作系统的责任边界
课程笔记沿一次文件读取建立硬件、内核、运行库和应用之间的可信边界。
关联:章节 第1章 从程序到内核:操作系统的责任边界
第1章笔记:从程序到内核:操作系统的责任边界
本章问题
沿一次文件读取建立硬件、内核、运行库和应用之间的可信边界。 本章不是七个术语的并列清单,而是一条从可观察现象到内部状态、从内部状态到工程证据的因果链。学习时始终标出对象身份、队列或表项、触发事件、权限边界和不可破坏的不变量。
七节机制连接
- 一条命令背后发生了什么:操作系统把处理器、内存、设备和持久数据变成受保护、可共享的抽象,并在失败时维持系统不变量;实验入口为跟踪cat读取文件:shell创建进程,运行库封装read,陷入内核,VFS定位文件,页缓存或驱动完成数据,再返回用户态;反查边界是操作系统不等于图形界面;库函数也不等于系统调用,必须按执行特权和责任归属区分。
- 用户态、内核态与受控入口:处理器特权级限制敏感指令,系统调用、异常和中断通过硬件规定的入口切换控制权;实验入口为记录一次write调用前后的寄存器、内核栈和返回值,画出用户栈到内核栈再返回的时间线;反查边界是进入内核态不等于切换进程;中断、异常和系统调用的触发者与同步性不同。
- 系统调用ABI与参数复制:ABI规定调用号、参数位置、返回值和错误约定;内核必须验证用户指针并安全复制数据;实验入口为用strace观察openat、read、write、close,比较高级语言一行代码与实际系统调用序列;反查边界是用户地址随时可能无效或被并发修改,内核不能直接相信长度、权限或字符串终止位置。
- 中断、异常与陷阱:外部设备用异步中断请求处理,当前指令错误产生异常,主动陷阱用于受控服务请求;实验入口为把时钟中断、缺页、除零和系统调用放进同一事件表,逐项标出来源、返回点和可否重启;反查边界是同一术语在不同体系结构中命名可能变化,判断应回到事件来源与处理语义。
- 内核结构与模块边界:宏内核、微内核、模块化和分层是在保护域、通信成本、故障隔离与演化之间做权衡;实验入口为为文件服务分别画宏内核调用链和用户态服务消息链,计算跨边界次数并列出故障扩散面;反查边界是微内核不是所有代码都在用户态,宏内核也不等于没有模块;标签不能替代具体服务放置。
- 实验:统计系统调用与边界穿越:观测先提出可证伪问题,再采集调用次数、返回码和墙钟时间,区分现象与解释;实验入口为运行最小Python跟踪模拟器,输入事件序列,输出用户/内核边界穿越次数与失败调用数;反查边界是计数器只能说明发生了什么,不能单独证明慢的原因;跟踪本身也有开销。
- 实验:最小系统调用分派器:分派器按调用号选择处理函数,先验证参数与权限,再返回结果或稳定错误码;实验入口为实现纯Python分派器,对READ、WRITE、UNKNOWN与越界长度执行至少四组自动测试;反查边界是未知调用、负长度、越界缓冲和权限不足必须失败关闭,不能落入默认成功路径。
请给七节画依赖箭头:前一节留下的状态或接口怎样成为下一节输入?每条箭头补单位、事件或保护条件。若任何一节可以随意搬走且不影响上下文,说明你还没有建立章内联系。
章内实验
选择本章至少一个代码实验,从空环境运行全部内联测试,再新增一个资源耗尽、非法迁移、同刻事件或崩溃输入。保存输入、输出、参考模型、首个偏差和修复后的回归证据。不可复现的睡眠竞态或人工截图不算实验结果。
错题闭环
把错误编码为对象混淆、状态跳步、单位错误、队列顺序、竞态遗漏、权限越界或恢复假设。不要只写粗心。一周后更换数字和事件顺序重做阶段卷;能在新输入下重建机制而非记住答案,才算迁移成功。