背景回顾:我们希望通过互斥实现 “stop the world” 的并发控制。在许多在共享内存上实现互斥的失败和成功尝试后,我们意识到软件需要和硬件协同工作,并在硬件原子指令基础上实现了基础版本的自旋锁。
本讲内容:分别如何在操作系统内核和用户态应用程序中实现互斥。
“互斥” 看起来简单,用自旋就能实现,但如果在实际的场景 (例如可被中断的操作系统内核、不希望浪费 CPU 资源的应用程序等),实际的互斥实现就不再简单。我们在 xv6 的自旋锁实现中,发现了许多 “防御性编程” 的例子,先假设程序员可能会犯一切可能的错误——然后不断加以检查。而 “正确性完全由开发者负责” 的时代将要过去,我们将会在未来越来越多地看到编程语言中的机制,帮助我们写出正确的代码。
教科书 Operating Systems: Three Easy Pieces 上次课的阅读材料: