从等待队列转换到运行队列

时间:2012-06-07 12:53:46

标签: linux kernel sleep

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

Thaks

1 个答案:

答案 0 :(得分:0)

“wake_up call”是由另一个线程/进程/任务完成的系统调用(一些内核将状态置于线程上而不是进程上),并在参数中唤醒线程/进程/任务。因为系统调用是Linux上的中断(int $0x80,直到它最近被sysenter取代,这基本上是相同的),因此进入内核,调度程序将是调用并且请求的thred / process / task将从被阻塞的队列中拔出并推入就绪队列。如果此线程/进程/任务具有最高优先级,它将在从中断返回时最终运行,因此直接从阻塞状态进入运行状态。