CPU調度的基本單位是是執行緒。執行緒是作業系統能夠進行運算調度的最小單位。
一條線程指的是進程中單一順序的控制流,一個進程中可以並發多個線程,每個線程並行執行不同的任務。在Unix System V及SunOS中也稱為輕量級進程(lightweight processes),但輕量進程更指核心執行緒(kernel thread),而把用戶執行緒(user thread)稱為執行緒。 (推薦學習:web前端影片教學)
CPU調度程式
每當CPU空閒時,操作就必須從就緒佇列中選擇一個行程來執行。進程選擇由短期調度程序(short-term scheduler)或CPU調度程序執行。調度程序從核心中選擇一個能夠執行的進程,並為此分配CPU。
就緒佇列不必是先進先出(FIFO)佇列。就緒佇列可實作為FIFO佇列,優先佇列,樹或簡單的無序鍊錶。不過從概念上來說,就緒佇列內的所有行程都要排隊等待在CPU上執行。佇列中的記錄通常為進程控制區塊(PCB)。
搶佔調度
CPU調度決策可在以下4種環境下發生:
當一個行程從執行狀態切換到等待狀態(例如,I/O請求,或呼叫wait等待一個子程序的終止)。
當一個行程從運作狀態切換到就緒狀態(例如,當出現中斷時)
當一個行程從等待狀態切換到就緒狀態(例如,I/O完成)
當一個行程終止
對於第1和第4兩種情況,沒有選擇而只有調度。一個新進程(如果就緒佇列中已有一個程序存在)必須被選擇執行。不過,對於第2和第3兩種情況,可以進行選擇。
當調度只能發生在第1和第4兩種情況下時,稱調度方案是非搶佔的(nonpreemptive)的或協作的(cooperative);否則,稱調度方案是搶佔的(preemptive )。採用非搶佔調度,一旦CPU分配給一個進程,那麼該進程就會一直使用CPU知道進程終止或切換到等待狀態。
中斷能隨時發生,而且不能總是被核心所忽視,所以受中斷影響的程式碼片段必須加以保護以避免同時存取。為了這些程式碼段不被多個進程同時訪問,在進入時要禁止中斷,而在退出時要重新允許中斷。
以上是處理器調度的最小單位的詳細內容。更多資訊請關注PHP中文網其他相關文章!