2010-02-12 56 views
12

誰安排調度程序?誰在OS中安排調度程序 - 是不是雞和雞蛋的情況?

哪個是創建的第一個任務,以及如何創建這個第一個任務?它不需要任何資源或內存?是不是像雞和雞蛋的情況?

調度器不是一項任務嗎?它是否在每個時間片的末尾都有CPU來檢查哪些任務需要給CPU?

有沒有什麼好的聯繫讓人們深入思考和理解所有這些概念,而不是拋出一些需要心花怒放的理論?

+0

這裏沒有真正的通用答案。您需要查看特定的操作系統實施。然而,@ Ira的答案可能適用於大多數操作系統。 – Benoit 2010-04-29 16:32:38

回答

14

調度由

  • 的(外部)事件調度諸如中斷,(磁盤做,鼠標點擊,計時器滴答)
  • 或內部事件(例如,線程完成,一個線程發出的需要等待某些東西的信號,或者它已經釋放資源的線程的信號發送,或者線程執行某個非法的東西,例如被零除的操作)

總之它是由任何可能需要該事件的事件觸發的e要運行的任務集合和/或要重新評估的任務的優先級。調度程序決定接下來運行哪個任務,並將控制傳遞給下一個任務。

通常,調度程序的這種「調度」是由與硬件中斷或與系統調用相關的代碼相關的代碼引起的。

雖然您可以將調度程序看作是一個真實的線程,但實際上並不需要這樣執行......因爲它的執行優先級高於任何其他任務。複雜的操作系統實際上可能會預留一個特殊的線程,即調度程序,並在調度程序獲得控制權時將其標記爲忙。這使得它很漂亮,但是虛擬線程並不是由調度程序調度的

可以有多個調度程序:最高優先級的調度程序(例如,我們剛纔描述的調度程序)和其他調度程序,它們確實是線程,並且像其他用戶任務一樣運行。這種較低優先級的調度程序傾向於用來管理以更長間隔發生的操作,例如後臺作業。

+3

同意:調度程序不是一項任務,它是一個在「調度點」調用的過程。 – Clifford 2010-02-12 09:54:22

+0

我曾經把硬件定時器中斷作爲觸發調度器功能的主要來源。 schuduler函數負責所有任務切換細節,例如上下文切換和優先級調整。但是現在我發現這意味着任務切換時間是可預測的。艾拉的回答非常好。 – smwikipedia 2010-02-26 15:54:20

0

它通常由定時CPU中斷週期性地調用

+0

我不確定這是否真的增加了問題......已經有一個答案提及中斷,問題是從2010年開始。 – 2018-02-28 07:42:16