2017-01-30 89 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新工藝