Review & Comments

Review & Comments

2024 南京大学《操作系统:设计与实现》
Review & Comments

互斥:API

消灭并发

  • 实现对于同一把锁的 critical section 能 “排序”
typedef struct {
  ...
} lock_t;

void lock(lock_t *lk);
// Critical Section
void unlock(lock_t *lk);
2024 南京大学《操作系统:设计与实现》
Review & Comments

应用程序中的互斥

程序 = 状态机

  • 自旋即可
  • 也可以用系统调用实现
void spin_lock(lock_t *lk) {
retry:
    int got = atomic_xchg(&lk->status, ❌);
    if (got != ✅) {
        goto retry;
    }
}

void spin_unlock(lock_t *lk) {
    atomic_xchg(&lk->status, ✅);
}
2024 南京大学《操作系统:设计与实现》
Review & Comments

操作系统内核中的互斥

计算机系统 = 状态机

  • 处理器随时可以被中断
    • 中断时可能试图获取自旋锁
  • 互斥 = 关中断 + 自旋
    • 关中断只能实现本处理器的 Stop the World
    • 自旋才能实现和其他处理器的 “Stop the World”
  • RTFSC!

Quick Quiz:

  • 应用程序也可能中断,为什么不需要关中断?
2024 南京大学《操作系统:设计与实现》