操作系统内核中的自旋锁

操作系统内核中的自旋锁

2024 南京大学《操作系统:设计与实现》
操作系统内核中的自旋锁

回顾:计算机系统的状态机模型

状态

  • 共享内存 + per-CPU 寄存器

初始状态

  • 由系统设计者规定 (CPU Reset)

状态迁移

  • 选择任意 CPU
    • 从 PC 取指令执行或响应中断信号 (中断打开时)
      • 计算:改变内存/寄存器数值
      • I/O:与 “计算机系统外” 交换数据
2024 南京大学《操作系统:设计与实现》
操作系统内核中的自旋锁

操作系统内核中的互斥

操作系统接管了完整的计算机系统

  • 每个处理器都并行 x++
  • 每个处理器中断发生时执行 x += 1000000000
  • (假想 x 是操作系统中的数据结构,例如进程表)

如何正确实现 x 的原子访问?

  • 仅仅自旋是不够的
  • 因为还有中断
2024 南京大学《操作系统:设计与实现》
操作系统内核中的自旋锁

正确性准则

正确实现互斥

  • 关中断 + 自旋可以保证实现互斥

上锁/解锁前后中断状态不变

  • 不得在关中断时随意打开中断 (例如处理中断时)
  • 不得随意关闭中断 (否则可能导致中断丢失)
  • 因此我们需要保存中断状态
    • 全局?
    • Per CPU?
    • Per Thread?
  • xv6 自旋锁
2024 南京大学《操作系统:设计与实现》