from mosaic import *
OS2023(7)
Changelog & 反馈
背景回顾:互斥 (Peterson 算法):为了掌控并发程序的复杂行为,使程序退回到 “串行执行” 的 lock & unlock。
本讲内容:现代多处理器系统上的互斥实现:
slideshow('7.1')
slideshow('7.2')
model('m/spinlock.py', check=True)
demo('sum-spinlock', 'c/sum-spinlock.c', libs=['thread.h'])
slideshow('7.3')
demo('cmpxchg', 'c/cmpxchg.c', libs=['thread.h'])
slideshow('7.4')
demo('sum-scalability', 'c/sum-scalability.c', libs=['thread.h', 'thread-sync.h'])
demo('sum-mutex', 'c/mutex', libs=['thread.h', 'thread-sync.h'])
为了实现现代多处理器系统上的互斥,我们首先需要理解 “原子操作” (例如 atomic_xchg) 的假设:
在此假设的基础上,原子操作就成为了我们简化程序执行的基础机制。通过自旋 (spin),可以很直观地实现 “轮询” 式的互斥。而为了节约共享内存线程在自旋上浪费的处理器,我们也可以通过系统调用请求操作系统来帮助现成完成互斥。
教科书 Operating Systems: Three Easy Pieces:
教科书补充了很多课堂上没有的细节,包括锁更详细的实现;因此阅读教科书是非常重要的。
我们鼓励大家参考课堂上调试并发程序的代码 (包括 init.gdb),自己是使用 GDB 调试并发程序的执行。你可能需要同时阅读 GDB 的文档。