作業系統排程演算法
5.3.1基本原理
從前面我們可以看到,程式執行需要各種各樣的系統資源,如記憶體、檔案、印表機和最寶貴的CPU等等,所以說呢,排程的實質就是資源的分配。系統通過不同的排程演算法(Scheduling Algorithm)來實現這種資源的分配。通常來說,選擇什麼樣的排程演算法取決於的資源分配的策略(Scheduling Policy),我們不準備在這裡詳細說明各種排程演算法,只說明與Linux排程相關的幾種演算法及這些演算法的原理。
一個好的排程演算法應當考慮以下幾個方面:
(1)公平:保證每個程式得到合理的CPU時間。
(2)高效:使CPU保持忙碌狀態,即總是有程式在CPU上執行。
(3)響應時間:使互動使用者的響應時間儘可能短。
(4)週轉時間:使批處理使用者等待輸出的時間儘可能短。
(5)吞吐量:使單位時間內處理的程式數量儘可能多。
很顯然,這5個目標不可能同時達到,所以,不同的作業系統會在這幾個方面中作出相應的取捨,從而確定自己的排程演算法,例如UNIX採用動態優先數排程、5.3BSD採用多級反饋佇列排程、Windows採用搶先多工排程等等。
下面來了解一下主要的排程演算法及其基本原理:
1.時間片輪轉排程演算法
時間片(Time Slice)就是分配給程式執行的一段時間。
在分時系統中,為了保證人機互動的及時性,系統使每個程式依次地按時間片輪流的方式執行,此時即應採用時間片輪轉法進行排程。在通常的輪轉法中,系統將所有的可執行(即就緒)程式按先來先服務的原則,排成一個佇列,每次排程時把CPU分配給隊首程式,並令其執行一個時間片。時間片的大小從幾ms到幾百ms不等。當執行的時間片用完時,系統發出訊號,通知排程程式,排程程式便據此訊號來停止該程式的執行,並將它送到執行佇列的末尾,等待下一次執行;然後,把處理機分配給就緒佇列中新的隊首程式,同時也讓它執行一個時間片。這樣就可以保證執行佇列中的所有程式,在一個給定的時間(人所能接受的等待時間)內,均能獲得一時間片的處理機執行時間。
2.優先權排程演算法
為了照顧到緊迫型程式在進入系統後便能獲得優先處理,引入了最高優先權排程演算法。當將該演算法用於程式排程時,系統將把處理機分配給執行佇列中優先權最高的程式,這時,又可進一步把該演算法分成兩種方式:
(1) 非搶佔式優先權演算法(又稱不可剝奪排程:Nonpreemptive Scheduling)
在這種方式下,系統一旦將處理機(CPU)分配給執行佇列中優先權最高的程式後,該程式便一直執行下去,直至完成;或因發生某事件使該程式放棄處理機時,系統方可將處理機分配給另一個優先權高的程式。這種排程演算法主要用於批處理系統中,也可用於某些對實時性要求不嚴的實時系統中。
(2) 搶佔式優先權排程演算法(又稱可剝奪排程:Preemptive Scheduling)
該演算法的本質就是系統中當前執行的程式永遠是可執行程式中優先權最高的那個。
在這種方式下,系統同樣是把處理機分配給優先權最高的程式,使之執行。但是隻要一出現了另一個優先權更高的程式時,排程程式就暫停原最高優先權程式的執行,而將處理機分配給新出現的優先權最高的程式,即剝奪當前程式的執行。因此,在採用這種排程演算法時,每當出現一新的可執行程式,就將它和當前執行程式進行優先權比較,如果高於當前程式,將觸發程式排程。
這種方式的優先權排程演算法,能更好的滿足緊迫程式的要求,故而常用於要求比較嚴格的實時系統中,以及對效能要求較高的批處理和分時系統中。Linux也採用這種排程演算法。
3.多級反饋佇列排程
這是時下最時髦的一種排程演算法。其本質是:綜合了時間片輪轉排程和搶佔式優先權排程的優點,即:優先權高的程式先執行給定的時間片,相同優先權的程式輪流執行給定的時間片。
4.實時排程
最後我們來看一下實時系統中的排程。什麼叫實時系統,就是系統對外部事件有求必應、儘快響應。在實時系統中存在有若干個實時程式或任務,它們用來反應或控制某個(些)外部事件,往往帶有某種程度的緊迫性,因而對實時系統中的程式排程有某些特殊要求。
在實時系統中,廣泛採用搶佔排程方式,特別是對於那些要求嚴格的實時系統。因為這種排程方式既具有較大的靈活性,又能獲得很小的排程延遲;但是這種排程方式也比較複雜。
我們大致瞭解以上的排程方式以後,下面具體來看Linux中的排程程式,這裡要說明的是,Linux的排程程式並不複雜,但這並不影響Linux排程程式的高效性!
相關文章
- 作業系統之排程演算法作業系統演算法
- 【作業系統】4.程序排程演算法作業系統演算法
- 作業系統常用的排程演算法總結作業系統演算法
- 【作業系統】--處理器排程作業系統
- 0512作業系統之程式排程作業系統
- 作業系統(Linux)--按優先數排程演算法實現處理器排程作業系統Linux演算法
- 作業系統精髓設計原理 程式排程作業系統
- 作業系統(5)處理器排程管理作業系統
- 0512 作業系統程式排程實驗作業系統
- 【作業系統】磁碟的四種基本排程演算法(圖表說明)作業系統演算法
- 作業系統4——處理機排程與死鎖作業系統
- 使用DBMS_SCHEDULER排程作業系統shell指令碼作業系統指令碼
- Hadoop作業的三種排程演算法Hadoop演算法
- 課程排課系統:智慧排課+線上約課+直播上課+作業打卡!
- 作業排程模擬程式
- Hadoop - Azkaban 作業排程Hadoop
- Quartz.Net 作業排程後臺管理系統,基於ExtjsquartzJS
- 作業系統課程設計——處理機和程式排程演算法及記憶體分配回收機制作業系統演算法記憶體
- 作業系統中排程演算法(FCFS、RR、SPN、SRT、HRRN)作業系統演算法
- 07 系統排程
- Hadoop作業排程機制Hadoop
- 系統設計:如何設計一個分散式作業排程器 ?- Rakshesh分散式
- 作業系統cmd演算法作業系統演算法
- Hadoop叢集三種作業排程演算法介紹Hadoop演算法
- ucore作業系統學習(六) ucore lab6執行緒排程器作業系統執行緒
- 解決方案| 快對講排程系統:高效協作
- 【作業系統2】作業系統啟動過程與異常/中斷,系統呼叫作業系統
- oracle排程程式作業dbms_schedulerOracle
- oracle使用DBMS_SCHEDULER排程作業Oracle
- Oracle事件驅動的排程作業Oracle事件
- 批處理作業排程問題
- Android 5.0的排程作業JobSchedulerAndroid
- Oracle 排程程式作業( dbms_scheduler )Oracle
- 作業系統課程設計感受作業系統
- 作業系統啟動的過程作業系統
- 【作業系統】銀行家演算法作業系統演算法
- 作業系統常見演算法作業系統演算法
- [作業系統]銀行家演算法作業系統演算法