1

当进程调用 wait_event_interruptible 时,进程进入睡眠状态(假设条件满足并且没有挂起的信号)调度程序将进程从运行队列中移除到等待队列。当有 wake_up 调用时,究竟是谁从等待队列中删除进程并将其保留在运行队列中?

塔克斯

4

1 回答 1

0

“wake_up 调用”是由另一个线程/进程/任务(一些内核将状态放在线程而不是进程上)完成的系统调用,其中线程/进程/任务在参数中唤醒。因为系统调用是一个中断(int $0x80在Linux上,直到最近被sysenter哪个中断替换),因此进入内核,调度器会被调用,请求的线程/进程/任务会被弹出阻塞队列并推入就绪队列。如果这个线程/进程/任务的优先级最高,它最终会在从中断返回时运行,因此直接从阻塞状态进入运行状态。

于 2012-06-07T16:19:48.330 回答