# 操作系统：选锁之前先解释交错执行 — 学习任务单

[学习指南](https://unireadinglist.com/zh-cn/guides/operating-systems/)

[课程专题: 操作系统](https://unireadinglist.com/zh-cn/subjects/computer-science/#course-operating-systems)

来源确认日期: 2026-11-04

学习计划与例题由 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与付费合并便利版不同。

#### 选书前试做

把共享更新拆成读取、私有计算与写回，列允许次序。
检查标准: 先说什么原子，不能把高级语句自动当原子操作。

你的笔记:

________________________________

ISBN: 9781985086593

[官方免费阅读](https://pages.cs.wisc.edu/~remzi/OSTEP/)

[书目信息与获取方式](https://unireadinglist.com/zh-cn/subjects/computer-science/operating-systems-three-easy-pieces/)

### 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说明、新仓库和旧行号。

#### 选书前试做

选一个锁保护的不变式，找所有能改状态的路径。
检查标准: 不只报锁名，须说明为什么所有相关路径需要同一把锁。

你的笔记:

________________________________

[官方免费阅读](https://pdos.csail.mit.edu/6.1810/2025/xv6.html)

[书目信息与获取方式](https://unireadinglist.com/zh-cn/subjects/computer-science/xv6-cox-kaashoek-morris/)

### Operating System Concepts（操作系统概念）

Abraham Silberschatz; Peter Baer Galvin; Greg Gagne · 10 · 2018
商业综合参考

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

#### 选书前试做

比较互斥、顺序与进展三类要求。
检查标准: 互斥可阻止重叠，却不自动决定谁先，也不规定调度策略。

你的笔记:

________________________________

ISBN: 9781119320913

[书目信息与获取方式](https://unireadinglist.com/zh-cn/subjects/computer-science/operating-system-concepts/)

## 开始前需要会什么

### 交错是什么？

你的笔记:

________________________________

### 保护多大范围？

你的笔记:

________________________________

### 模型省略什么？

你的笔记:

________________________________

## 六步学习计划

- [ ] 规定机器

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

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

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

你的笔记:

________________________________

- [ ] 追一条执行

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

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

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

你的笔记:

________________________________

- [ ] 覆盖全部顺序

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

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

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

你的笔记:

________________________________

- [ ] 写不变式

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

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

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

你的笔记:

________________________________

- [ ] 改变同步

建议阅读范围: 变式。

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

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

你的笔记:

________________________________

- [ ] 接真实实现

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

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

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

你的笔记:

________________________________

## 原创例题与解析: 原创事件机：原子读取不等于原子更新

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

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

你的笔记:

________________________________

## 改变假设，再做一题: 改变同步：互斥仍留下顺序选择

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

你的笔记:

________________________________

## 进入下一阶段之前

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

## 答案与解释

### 交错是什么？

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

### 保护多大范围？

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

### 模型省略什么？

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

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

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

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

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

## 常见误区

### 假定语句原子

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

### 锁名当证明

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

### 互斥当顺序

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

## 参考来源与版本

- [OSTEP: free conceptual chapters and current online version](https://pages.cs.wisc.edu/~remzi/OSTEP/)
  三部分结构提供概念与免费分章路线。

- [OSTEP: publication and revision history](https://pages.cs.wisc.edu/~remzi/OSTEP/combined.html)
  1.00记录与持续修订的1.10不同。

- [OSTEP: concurrency introduction](https://pages.cs.wisc.edu/~remzi/OSTEP/threads-intro.pdf)
  并发引言支持事件推理，数值与轨迹为原创。

- [MIT: xv 6 RISC-V revision 5, September 2025](https://pdos.csail.mit.edu/6.1810/2025/xv6/book-riscv-rev5.pdf)
  固定2025 RISC-V书配可追内核。

- [Wiley: tenth-edition electronic product identity](https://www.wiley.com/en-us/operating-system-concepts-10th-edition-p-9781119320913)
  精确第10版产品与配套资料不同于其他格式。

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

[编辑与选书方法](https://unireadinglist.com/zh-cn/editorial/)
