進程調度
一、進程調度的時機
進程調度(低級調度),就是按照某種算法從就緒隊列中選擇一個進程為其分配處理機。
不能進行進程調度與切換的情況:
1.在處理中斷的過程中。中斷處理過程復雜,與硬件密切相關,很難1.在處理中斷的過程中。中斷處理過程復雜,與硬件密切相關,很難
2.進程在操作系統內核程序臨界區中。
3.在原子操作過程中(原語)。原子操作不可中斷,要一氣呵成(如之前講過的修改PCB中進程狀態標志,並把PCB放到相應隊列)
進程在操作系統內核程序臨界區中不能進行調度與切換⭕
(2012年聯考真題)進程處於臨界區時不能進行處理機調度❌
臨界資源:一個時間段內只允許一個進程使用的資源。各進程需要互斥地訪問臨界資源。
臨界區:訪問臨界資源的那段代碼。
內核程序臨界區一般是用來訪問某種內核數據結構的,比如進程的就緒隊列(由各就緒進程的PCB組成)
如果還沒退出臨界區(還沒解鎖)就進行進程調度,但是進程調度相關的程序也需要訪問就緒隊列,但此時就緒隊列被鎖住了,因此又無法順利進行進程調度
內核程序臨界區訪問的臨界資源如果不盡快釋放的話,極有可能影響到操作系統內核的其他管理工作。因此在訪問內核程序臨界區期間不能進行調度與切換
在打印機打印完成之前,進程一直處於臨界區內,臨界資源不會解鎖。但打印機又是慢速設備,此時如果一直不允許進程調度的話就會導致CPU一直空閑
普通臨界區訪問的臨界資源不會直接影響操作系統內核的管理工作。因此在訪問普通臨界區時可以進行調度與切換。
有的系統中,只允許進程主動放棄處理機
有的系統中,進程可以主動放棄處理機,當有更緊急的任務需要處理時,也會強行剝奪處理機(被動放棄)
但是進程在普通臨界區中是可以進行調度、切換的
二、進程調度的方式
非剝奪調度方式,又稱非搶占方式。即,只允許進程主動放棄處理機。在運行過程中即便有更緊迫的任務到達,當前進程依然會繼續使用處理機,直到該進程終止或主動要求進入阻塞態。(實現簡單,系統開銷小但是無法及時處理緊急任務,適合於早期的批處理系統)
剝奪調度方式,又稱搶占方式。當一個進程正在處理機上執行時,如果有一個更重要或更緊迫的進程需要使用處理機,則立即暫停正在執行的進程,將處理機分配給更重要緊迫的那個進程。(可以優先處理更緊急的進程,也可實現讓各進程按時間片輪流執行的功能(通過時鍾中斷)。適合於分時操作系統、實時操作系統)
三、進程的切換與過程
“狹義的進程調度”與“進程切換”的區別:
狹義的進程調度指的是從就緒隊列中選中一個要運行的進程。(這個進程可以是剛剛被暫停執行的進程,也可能是另一個進程,后一種情況就需要進程切換)
進程切換是指一個進程讓出處理機,由另一個進程占用處理機的過程。
廣義的進程調度包含了選擇一個進程和進程切換兩個步驟。
進程切換的過程主要完成了:
1.對原來運行進程各種數據的保存
2.對新的進程各種數據的恢復(如:程序計數器、程序狀態字、各種數據寄存器等處理機現場信息,這些信息一般保存在進程控制塊)
注意:進程切換是有代價的,因此如果過於頻繁的進行進程調度、切換,必然會使整個系統的效率降低,使系統大部分時間都花在了進程切換上,而真正用於執行進程的時間減少。