在阻塞 IO 的情况下,比方说,驱动程序读取,我们在某些条件下调用 wait_event_interruptible()。当条件满足时,读取将完成。 我查看了 wait_event_interruptible() 函数,它检查条件并调用 schedule()。 schedule() 将寻找下一个可运行的进程并进行上下文切换,其他进程将运行。这是否意味着,当该进程再次被唤醒时,当前进程要执行的下一条指令将在 schedule() 函数内?
如果是,如果多个进程主动调用schedule,那么所有进程被唤醒后,下一条指令执行一次,会不会在schedule()里面?
在 ret_from_interrupt 的情况下,调用 schedule()。什么时候回来?因为 iret 在那之后执行。
最佳答案
我认为第一个问题的答案是是
,因为这是实现上下文切换的一种相当典型的方式。 That's how OS161 works ,例如。
如果从 ISR 调用调度程序,一切都应该相同。调度程序应更改上下文并返回到 ISR,然后 ISR 应使用 IRET
返回。如果调度程序选择切换到不同的进程/线程,它将返回到不同的进程/线程,因此加载其上下文并保存旧的。
关于linux - schedule() 什么时候返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15083898/