處理機調度——進程調度/作業調度算法

在多道程序系統中,主存中有着多個進程,其數目往往多於處理機數目,這就要求系統能按照某種算法,動態地將處理機分配給就緒隊列中的某個進程,使之執行。
對於批量型作業而言,通常需要經歷作業調度(又稱爲高級調度或長程調度)和進程調度(又稱爲低級調度或短程調度)兩個過程後方能獲得處理機;對於終端型作業,通常只需要經過進程調度即可獲得處理機。

高級調度的對象是作業,作業和進程是不同的東西。 作業是一個更爲廣泛的概念,作業不僅包含了通常的程序和數據,還應該包含一份作業說明書,系統根據說明書來對程序的運行進程控制。

進程調度:是指對處於就緒狀態的多個進程,按照一定的策略選出一個進程使之從就緒狀態變成執行狀態,真正獲得CPU來運行程序。

進程調度方式:

1.非搶佔式:採用這種調度方式時,一旦處理機分配給某個進程後,不管該進程運行多長時間,都會讓它一直運行下去,不會因爲其他原因而搶佔正常運行進程的處理機。

引起原因:
1)正在執行的進程執行結束,或因某個原因該進程不再執行。

2)該進程執行過程中因爲提出I/O請求而暫停執行。

3)在進程通信或同步過程中執行了某個原語操作,如P操作。

2.搶佔式:這種調度方式允許調度程序按照某種原則去暫停某個正在執行的進程,將已分配給該進程的處理機重新分配給另外一個進程。

引起原因:
1)優先權原則。當一些優先權較高的進程或作業到達時,正在執行的進程會停止,調度程序將處理機分配給優先權更高的進程。

2)短作業(進程)優先原則。當新到達的進程或作業比正在執行的進程或作業執行時間短,調度程序將處理機分配給短進程。

3)時間片原則。各進程按照時間片輪流運行,當前時間片用完之後,該進程便停止執行,調度程序進程重新調度。

調度算法

作業調度:FCFS、SJF、高優先權優先、高響應比優先
進程調度:FCFS、SJF、高優先權優先、時間片輪轉

1.先來先服務(FCFS)調度算法

該算法根據名字就很好理解,先來後到,始終選隊首進程(作業),進程獲得CPU,直至執行完畢或發生某個等待事件,釋放CUP。
該調度算法有利於長進程(作業),不利於短進程(作業)。

2.短作業(進程)優先(SJF)調度算法

和FCFS類似,只是在進行選擇的時候,從後備隊列中選擇一個運行時間最短的進程(作業)。
該調度算法不利於長進程(作業),也沒有考慮到進程的緊迫程度。

3.高優先權優先調度算法

1)靜態優先級 調度算法:進程創建時被賦予優先級,而且在進程的運行過程中保持不變,優先級最高的進程率先被調度,優先級相同的進程採用FCFS調度算法

2)動態優先級 調度算法:進程創建時賦予優先級,但是優先級在運行過程中可以改變,以便獲得更好的調度性能。 優先級最高的先被調度,優先級相同的進程採用FCFS調度算法。

4.高響應比有限調度算法

優先權 = (等待時間 + 要求服務時間)/ 要求服務時間

從上面的式子可以看出:
1)當作業的等待時間相同時,如果要求服務的時間越短,優先權越大,所以該算法更有利於短作業。

2)當作業的要求服務時間相同時,等待時間越長,優先權越高,此時它實現的是FCFS。

3)對於長作業而言,作業的優先級可以隨着等待時間的增加而提高,,當期等待時間達到一定程度時,其優先級也能提升到很高,從而也能獲得處理機。

5.時間片輪轉調度算法

每個進程按照先進先出的原則進入就緒隊列,每次調度時,調度程序將CPU分配給隊首的進程,讓其執行一個時間片q,該進程運行完時間片q後,有以下幾種情況:
1)該進程執行完畢,調度下一個進程運行

2)該進程未執行完,進程執行被時鐘中斷,排到就緒隊列隊尾,特別注意:如果這個時候有一個新到達的進程,則剛纔時間片用完的進程排在新到達進程的後面。然後調度就緒隊列中的下一個進程執行。

3)該進程I/O等原因而被阻塞,該進程進入阻塞隊列,調度就緒隊列的下一個進程執行,等該進程被解封后,再從阻塞隊列進入就緒隊列隊尾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章