2017-01-30 54 views
0

我正在为即将到来的操作系统开发一个简单的内核。我已经开发了一切,直到调度器。我想知道调度程序如何进入其循环。操作系统调度程序如何返回?

例如,

  1. 定时器中断火灾。
  2. 处理程序调用调度程序。
  3. 调度程序跳转队列中的下一个进程。
  4. 中断必须返回(IRETD)

但如果调度了呢中断返回时跳转到下一道工序即可。如果确实如此,是不是会回到最后的过程。

我想澄清一下 - 定时器中断如何从调度器返回,调度器如何与定时器中断通信(如果使用函数调用,那么何时返回)?

假设 - 单片内核

+0

我的中断状态我不熟悉IRETD指令的特性,但我想它需要从某个堆栈中弹出指令指针和其他寄存器才能恢复。 我看到它的方式,你需要改变堆栈中的值,这样当IRETD弹出它需要的东西时,它会有效地恢复新进程,而不是被中断的进程。 我不能在没有研究x86指令集的那部分的情况下给出具体细节。 我的经验主要来自我的爱好项目(https://bitbucket.org/ruifig/g4devkit),它基于ARM。 – RuiFig

回答

0

当中断发生时,处理器切换其上下文。它通过更新EFLAGS寄存器中的标志并推送堆栈中的一些信息来实现(可在英特尔手册中看到)。如果中断发生在用户模式下,则根据当前任务的TSS也会发生堆栈切换。

调度过程完成的 -

  1. 从用户进程带着中断状态堆栈
  2. 挑选下一工序推
  3. IRETD新工艺