在像MS DOS這樣的單編程系統中,當進程等待任何I/O操作完成時,CPU仍然是空閒的。 這是一個開銷,因為它浪費時間並導致饑餓問題。 但是,在多程式系統中,CPU在進程的等待時間內不會保持空閒狀態,而是開始執行其他進程。 操作系統必須定義CPU將被給予哪個進程。
在多程式系統中,操作系統調度CPU上的進程以獲得最大的利用率,此過程稱為CPU調度。 操作系統使用各種調度演算法來調度過程。
這是短期調度程式的一項任務,用於調度CPU以查找作業池中存在的進程數量。 每當運行進程請求某個I/O操作時,短期調度程式就會保存進程的當前上下文(也稱為PCB)並將其狀態從運行狀態更改為等待狀態。 在此期間,進程處於等待狀態; 短期調度程式從就緒佇列中選擇另一個進程並將CPU分配給此進程。 這個過程被稱為上下文切換。
進程控制塊中保存了什麼?
操作系統在進程的生命週期中維護一個進程控制塊。 進程終止或終止時,進程控制塊將被刪除。 有以下資訊保存在過程控制塊中,並隨過程狀態而變化。
為什麼需要調度?
在多道程序中,如果長期調度程式選擇更多的I/O綁定進程,那麼大多數時候CPU仍然是空閒的。 操作系統的任務是優化資源的利用。
如果大多數正在運行的進程將其狀態從運行狀態更改為等待狀態,那麼系統中可能始終存在死鎖。 因此,為了減少這種開銷,操作系統需要調度作業以獲得CPU的最佳利用率並避免死鎖的可能性。