os内核如何跟踪用户线程正在等待的锁?

时间:2017-11-20 09:41:50

标签: linux-kernel operating-system kernel

我知道当用户线程获取锁(如事件,信号量等)时,内核会将线程的状态更改为等待,因此在内核找到之前线程不会被调度运行锁是可用的。 我的问题是内核如何捕获这些锁的状态?通过民意调查或通知?

2 个答案:

答案 0 :(得分:2)

通知。在线程进入休眠状态之前,它会将自己添加到唤醒列表中,以便任何内核对象对应于它正在等待的事物。

这与所有其他等待工作的方式完全相同。例如,假设该进程对文件执行阻塞读取,并且进程必须休眠直到读取完成。或者说该进程访问了一些尚未从磁盘读入的代码。在所有这些情况下,当进程处于休眠状态时,该进程被添加到适当的唤醒通知方案中。

答案 1 :(得分:0)

您要问的是高度系统特定和锁定特定。例如,高质量的操作系统具有锁定管理功能,可以检测死锁。

某些锁可能被实现为旋转锁,其中没有进程休眠,也没有操作系统通知。

在等待挂起进程的情况下,所有操作系统需要跟踪的是锁本身。如果进程释放锁,操作系统可以向所有等待进程发送通知 - 无需进行极化。