跳到正文

第2章学习笔记:进程、线程与可观察状态

课程笔记

从地址空间、执行上下文和资源所有权建立进程与线程模型。

关联:章节 第2章 进程、线程与可观察状态

第2章笔记:进程、线程与可观察状态

本章问题

从地址空间、执行上下文和资源所有权建立进程与线程模型。 本章不是七个术语的并列清单,而是一条从可观察现象到内部状态、从内部状态到工程证据的因果链。学习时始终标出对象身份、队列或表项、触发事件、权限边界和不可破坏的不变量。

七节机制连接

  • 进程是资源容器也是状态机:进程由地址空间、打开资源、凭据和至少一条执行流组成,PCB保存调度与管理所需状态;实验入口为跟踪编辑器启动编译器子进程,从创建、就绪、运行、阻塞到退出逐事件记录PCB变化;反查边界是程序是静态代码,进程是一次受管理执行;同一程序可对应多个独立进程。
  • 创建、退出与父子关系:fork式复制、spawn式创建与exec式映像替换承担不同动作;退出状态需由父进程回收;实验入口为用Python subprocess创建子进程并采集退出码,再模拟父进程不wait时的僵尸记录;反查边界是孤儿与僵尸不是同义词;exec成功后进程身份可保持而地址空间内容被替换。
  • 上下文切换保存什么:切换要保存程序计数器、栈指针、通用寄存器和调度状态,必要时改变地址空间与缓存上下文;实验入口为比较线程切换和跨进程切换的保存集合,用时间线拆出调度决定、保存、恢复和缓存冷却;反查边界是切换开销不是固定常数;切换频繁也不能直接推出CPU利用率低,需看工作负载与等待。
  • 线程、共享与线程局部状态:同进程线程共享代码、堆和打开文件,却各有寄存器、栈、调度状态和线程局部存储;实验入口为让两个线程更新同一计数器并分别记录栈变量与共享变量,画出可能交错;反查边界是共享地址空间降低通信成本,也扩大竞态和故障影响;线程安全必须落到具体对象。
  • 用户级与内核级线程:多对一、一对一和多对多模型在阻塞、并行、调度控制与运行时复杂度之间权衡;实验入口为给定四核与一个阻塞系统调用,推演三种线程映射下还能运行多少执行流;反查边界是绿色线程不是天然更快,异步运行时也没有消除内核调度和阻塞边界。
  • 实验:进程状态合法迁移:状态迁移必须由创建、调度、抢占、等待、唤醒或退出等合法事件触发;实验入口为实现状态机读取READY RUN BLOCK WAKE EXIT事件并输出最终状态或首个非法迁移位置;反查边界是不存在BLOCKED直接被调度为RUNNING的合法捷径;唤醒只回到READY。
  • 实验:Amdahl线程加速边界:并行加速受串行比例、核数、同步与调度开销共同限制;实验入口为输入串行比例和核数,计算理想Amdahl加速比并与实测时间比较;反查边界是核数趋于无穷时上限仍为1/s;公式不包含现实开销,不能把理想值当承诺。

请给七节画依赖箭头:前一节留下的状态或接口怎样成为下一节输入?每条箭头补单位、事件或保护条件。若任何一节可以随意搬走且不影响上下文,说明你还没有建立章内联系。

章内实验

选择本章至少一个代码实验,从空环境运行全部内联测试,再新增一个资源耗尽、非法迁移、同刻事件或崩溃输入。保存输入、输出、参考模型、首个偏差和修复后的回归证据。不可复现的睡眠竞态或人工截图不算实验结果。

错题闭环

把错误编码为对象混淆、状态跳步、单位错误、队列顺序、竞态遗漏、权限越界或恢复假设。不要只写粗心。一周后更换数字和事件顺序重做阶段卷;能在新输入下重建机制而非记住答案,才算迁移成功。