学习指南 /

操作系统:选锁之前先解释交错执行

并发推理先列允许发生的事件。本路线分开操作系统抽象、内核实现与真实语言规则。一个轨迹能反驳全称保证,同步论证则须说明它排除了哪些轨迹。

课程专题: 操作系统

学习计划与例题由 University Reading List 编辑整理。 编辑与选书方法 · 来源确认日期:

本页目录

这份指南适合谁

适合掌握C、指针、栈和计算机组成的系统学习者。下题是完整规定的顺序一致抽象机;不能把这些规则偷偷套给未同步的C数据竞争。

选择你的起点

需要讲清操作系统概念的免费教材

用OSTEP按虚拟化、并发、持久化推进,先问机制解决什么,再联系不变式。

想看内核机制

掌握C和体系结构后读固定xv6 RISC-V修订5,先匹配书与代码再追行号。

课程需要综合参考

用Operating System Concepts建立术语地图,按课表选进程和同步,不一次读完所有平台案例。

三本书如何取舍

操作系统:三个简单部分

Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau · 版次: 1.00 · 2018

免费操作系统教材,结合概念与实验

什么情况下适合读
能追C指针,想从系统问题理解机制。
什么情况下选别本
仍需第一门编程,或期待在线正文与所选纸书逐页一致。
建议阅读范围
读OSTEP并发引言、锁和条件变量,必要时先补进程及地址空间。
局限与取舍
所选2018记录为1.00,作者在线已1.10;免费分章PDF与付费合并便利版不同。

选书前试做

把共享更新拆成读取、私有计算与写回,列允许次序。

检查标准: 先说什么原子,不能把高级语句自动当原子操作。

官方免费阅读 ↗

书目信息与获取方式 →

xv6: a simple, Unix-like teaching operating system

Russ Cox; Frans Kaashoek; Robert Morris · 版次: RISC-V revision 5 · 2025

免费教学内核配套

什么情况下适合读
想把进程、陷入、内存与锁连接到小型实现。
什么情况下选别本
尚缺C/汇编,或想让教学内核代表全部生产权衡。
建议阅读范围
2025年9月2日RISC-V修订5,先接口与组织,再按标题读锁和调度并配同版代码。
局限与取舍
小型设计便于追路径但省略生产复杂性,不能混用x86说明、新仓库和旧行号。

选书前试做

选一个锁保护的不变式,找所有能改状态的路径。

检查标准: 不只报锁名,须说明为什么所有相关路径需要同一把锁。

官方免费阅读 ↗

书目信息与获取方式 →

Operating System Concepts(操作系统概念)

Abraham Silberschatz; Peter Baer Galvin; Greg Gagne · 版次: 10 · 2018

商业综合参考

什么情况下适合读
需要课纲中的进程、同步、内存与存储术语。
什么情况下选别本
把公开课件或部分练习解答当作免费全书与全部教师答案。
建议阅读范围
2018第10版按标题选进程/线程、同步和所需内存管理。
局限与取舍
ISBN 9781119320913为Wiley电子产品,其他套装及纸本配套编号不同。

选书前试做

比较互斥、顺序与进展三类要求。

检查标准: 互斥可阻止重叠,却不自动决定谁先,也不规定调度策略。

书目信息与获取方式 →

开始前需要会什么

交错是什么?

保留各线程自身先后约束的单个事件顺序,结果按该顺序实际读到的值计算。

保护多大范围?

若不变式依赖读改写组合,应保护整个组合;分别锁读取和写回不让两者成为一个更新。

模型省略什么?

本题原子读写且全局有序,计算私有;真实语言内存、编译变换、故障与公平性另需说明。

六步学习计划

勾选用于自我记录,不是成绩评定;标记不会发送给本站。

  1. 规定机器

    建议阅读范围: OSTEP并发引言。

    要做的练习: 写共享状态、私有寄存器、原子事件及各自顺序。

    检查标准: 不偷加未说明的语言行为。

  2. 追一条执行

    建议阅读范围: 同一阅读与原题。

    要做的练习: 逐次列读取值与写回值。

    检查标准: 写回用先前保存值,不必是最新共享值。

  3. 覆盖全部顺序

    建议阅读范围: 同步阅读。

    要做的练习: 列两读前写约束下的六条顺序。

    检查标准: 证明枚举完整而非只举有趣例子。

  4. 写不变式

    建议阅读范围: xv6锁及参考讨论。

    要做的练习: 写整个更新须共同观察和发布的状态。

    检查标准: 保护范围由不变式决定,不由代码一行长短决定。

  5. 改变同步

    建议阅读范围: 变式。

    要做的练习: 用同一互斥锁重算,再额外指定顺序。

    检查标准: 互斥与结果确定是两件事。

  6. 接真实实现

    建议阅读范围: 同版xv6路径或课程题。

    要做的练习: 说明语言和内核机制怎样建立假设顺序。

    检查标准: 抽象轨迹正确不认证未审查的生产程序。

原创例题与解析

原创事件机:原子读取不等于原子更新

共享x初值10。线程1读入r1再写r1+3,线程2读入r2再写2r2,事件记R1,W1,R2,W2。列R1先W1、R2先W2的所有顺序及末值。

前提假设

各次读写不可分,四事件顺序一致,读取最近已写值或初值10。私有计算无共享事件,两线程均完成,无其他访问。这不是未同步C程序。

  1. R1,W1,R2,W2依次读10、写13、读13、写26。R2,W2,R1,W1依次读10、写20、读20、写23。
  2. R1,R2,W1,W2与R2,R1,W1,W2均读两次10,最终W2写20;R1,R2,W2,W1与R2,R1,W2,W1也读两次10,最终W1写13。
  3. 在线程1两有序事件的四槽中选二,有choose(4,2)=6种,其余给线程2,上述已全部覆盖。
  4. 末值集合{13,20,23,26}。串行得26或23,其余因保存的旧读数覆盖另一次结果而丢失更新。

答案与解释

六条合法交错只产生13、20、23、26,单个事件原子不使复合更新原子。

检验结果

每条用四行状态账复算;不能推广给内存/竞争语义不同的语言执行。

改变假设,再做一题

改变同步:互斥仍留下顺序选择

仅改同步:同一互斥锁覆盖各线程整段读取与写回,且都完成。剩什么结果?再额外规定线程1整段先于线程2的交接。

  1. 临界区不能重叠;1先时10→13→26,2先时10→20→23。
  2. 排除了13与20,仍有23及26,因为加法与翻倍不交换,互斥规则未选顺序。
  3. 额外交接后仅10→13→26。顺序要求是新增条件,不能从同锁推得。

答案与解释

仅互斥得{23,26},加指定交接得{26};原子性与确定顺序不同。

检验结果

分别复合两更新函数;公平、死锁及真实语言正确性还需实现论证。

常见误区

假定语句原子

源码更新可能包含多个可见事件。

锁名当证明

所有相关访问须由同一合适锁保护完整转换。

互斥当顺序

不交换的串行操作仍可有不同结果。

进入下一阶段之前

  • 能枚举全部顺序并复现读写值。
  • 能说明同步精确排除哪些结果。
  • 能分清抽象机与真实语言/内核。

参考来源与版本

来源确认日期:

这些是本站建议的学习活动,并非大学官方作业,也不代表对每本书逐页通读。

编辑与选书方法 →