Sleep-Lock在FS中的应用
在文件系统中,为什么不用 Spinlock 而用 Sleep Lock?
核心矛盾
磁盘 I/O 是毫秒级的操作。
- 如果持有 Spinlock 去读磁盘,CPU 会空转几百万个周期,这是不可接受的。
- 如果持有 Spinlock 发生了中断或 Sleep,会导致死锁(见第五章笔记)。
Sleep Lock 机制
b->lock(Buffer Lock) 和ip->lock(Inode Lock) 都是 Sleep Lock。- 行为: 当一个进程获取不到锁时,它会调用
sleep()让出 CPU,进入睡眠状态。 - 优势: 允许在持有锁期间进行长时间的 I/O 操作,而不浪费 CPU 资源。