当schedule()返回?

在阻塞IO的情况下,比如说驱动程序读取,我们在某些情况下调用wait_event_interruptible()。 条件满足时,阅读将完成。 我看着wait_event_interruptible()函数,它检查条件并调用schedule()。 schedule()将查找下一个可运行的进程,并执行上下文切换,其他进程将运行。 这是否意味着,当进程被唤醒时,当前进程的下一条指令将在schedule()函数中?

  1. 如果是的话,如果多进程自动调用进度,那么所有进程在被唤醒后都会有下一条指令被执行一次会在schedule()内?

  2. 在ret_from_interrupt的情况下,schedule()被调用。 什么时候会回来? 因为iret在那之后被执行。

我认为第一个问题的答案是yes因为这是实现上下文切换的一个相当典型的方式。 例如, OS161就是这样工作的 。

如果调度程序是从ISR调用的,则应该都是一样的。 调度程序应该更改上下文并返回到ISR,然后使用IRET返回ISR。 如果调度程序选择切换到不同的进程/线程,则会返回到其他进程/线程,因此会加载其上下文并保存旧的进程。

重点2:执行iret指令(从中断处理程序返回),并使您进入ret_from_interrupt 。 然后,Linux将控制权交给下一个要运行的任务( schedule() )。 在编写中断处理程序时,最重要的考虑因素之一是在执行许多其他活动时被禁止(其他优先级较低的中断就是最主要的例子),因此您希望尽快离开。 这就是为什么大多数中断处理程序只是在返回之前完成工作,然后在其他地方(如今在一些特殊的内核线程中)处理工作。