一 基本概念
1 隊列中的記錄通常是進程的進程控制塊。
2 CPU調度決策可在如下四種環境下發生
a 當一個進程從運行狀態切換到等待狀態 例如,I/O請求或調用wait以等待一個子進程的終止
b 黨一個進程從運行狀態切換到就需狀態 例如,當出現中斷
c 當一個進程從等待狀態切換到就需狀態 例如,I/O完成
d 當一個進程終止
當調度只能發生在第一和第四種種情況時,稱調度方案是非搶占的,否則調度方案是可搶占的。
采用非搶占調度,一旦CPU被分配給一個進程,那么該進程會一直使用CPU直到進程終止或切換到等待狀態時釋放CPU
3 分派程序
功能包括:
切換上下文
切換到用戶模式
跳轉到用戶程序的合適位置以重新啟動這個程序
二 調度准則
CPU使用率: 40%到90%
吞吐量:一個時間單元內所完成進程的數量。
周轉時間:從進程提交到進程完成的時間間隔稱為周轉時間。周轉時間是所有時間段之和,包括等待進入內存、在就緒隊列中等待
,在cpu上執行和I/O執行
等待時間:CPU調度算法並不影響進程運行和執行I/O的時間量。它只影響進程在就需隊列中等待所花費的時間。
響應時間:從提交請求到產生第一響應的時間。是開始響應所需要的時間,而不是輸出該響應所需要的時間。
CPU使用率和吞吐量最大化,周轉時間、等待時間和相應時間最小化
三 CPU調度算法
1 先到先服務調度
FCFS(first-come,first-served)
當一個進程進入到就需隊列,其pcb就被鏈接到隊列的尾部,當CPU空閑時,CPU被分配給位於隊列頭的進程。接着,該運行進程從隊
列中被刪除。
FCFS策略的平均等待時間相當長
FCFS調度算法是非搶占式的。
2 最短作業優先調度
SJF(shortest-job-first)
SJF算法的真正困難時如何知道下一個CPU請求的長度。SJF調度經常用於長期調度。
3 優先權調度
每個進程都有一個優先權與其關聯,具有最高優先權的進程會被分配到CPU。具有相同優先權的進程按FCFS順序調度。
優先權可以通過內部或外部方式來定義。
優先權調度可以使可搶占的或者非搶占的。
優先權調度算法的一個主要問題是無窮阻塞。解決辦法是老化,老化是一種技術,以逐漸增加在系統中等待很長時間的進程的優先
權。
4 輪轉法調度
輪轉法(RR)調度算法是專門為分時系統設計的。定義一個小時間單元,稱為時間量或時間片。時間片通常為10ms到100ms。就緒隊
列作為循環隊列處理。CPU調度程序循環就需隊列,為每個進程分配不超過一個時間片間隔的CPU。
如果上下文切換時間約為時間片的10%,那么約10%的CPU時間會浪費在上下文切換上。
5 多級隊列調度
(multilevel queue-scheduling algorithm)
不同隊列可用於前台和后台進程,前台隊列可能使用RR算法調度,而后台隊列可能使用FCFS算法調度。
6 多級反饋隊列調度
對於多級隊列調度算法,通常進程進入系統時,被永久地分配到一個隊列,進程並不在隊列之間移動。
四 多處理器調度
堆成多處理器
非對稱多處理器
五 實時調度
實時計算分為兩種類型:硬實時,軟實時
硬實時:系統需要在保證的時間內完成關鍵任務。通常,在提交進程時,同時有一條語句告訴系統用來完成或執行I/O所需要的時間
。
軟實時:要求關鍵進程要比其他較弱進程擁有更高的優先權。
實現軟實時要求自習設計調度程序和操作系統的有關方面:
第一,系統必須有優先權調度,且實時進程必須有最高的優先權。實時進程的優先權不隨時間而下降,盡管非實時進程的優先權可
以。
第二,分配延遲必須小
分派程序停止一個進程而啟動另一個進程執行所需要花費的時間成為分派延遲
六 linux
linux提供了兩種獨立進程調度算法。一種是分時算法,用於在多個進程之間進行公平可搶占調度
一種是為實時任務設計的,
linux只允許在用戶模式下運行的進程被搶占
第一種調度類型是用於分時進程的,對於傳統的分時進程,linux使用了優先權的、基於信用度的算法。每個進程都有一定數量的調
度信用度,黨要選擇一個新任務運行時,具有最多信用的進程會被選擇。每次出現定時器中斷時,當前運行進程會失去一個信用,
黨其信用為0時,它會被暫停且另一個進程會被選擇。
linux使用兩種實時調度類型:先到先處理和輪轉。
時間片輪轉(RR)調度對於分時系統更為適合。
FCFS算法是非搶占的,RR算法是可搶占的。SJF和優先級算法可以使可搶占的也可以使非搶占的。
多級隊列算法允許多個不同算法用於各種類型的進程,最為常用的是前台交互隊列(RR)和后台批處理隊列(FCFS)。多級反饋隊
列允許進程在隊列之間遷移。
solaris 2和windows2000都采用可搶占的、基於優先級的調度算法,包括支持實時線程,來調度線程
linux進程調度程序也使用基於優先級的算法,並提供實時支持。