1. 程式人生 > >作業系統的程序排程演算法

作業系統的程序排程演算法

 

排程效能的衡量

面向使用者

週轉時間短

週轉時間,指作業從提交系統開始,直到作業完成為止的時間間隔。週轉時間細分包括:

  1. 作業在外存後備佇列中的等待時間
  2. 作業調入記憶體後建立的相應程序在就緒佇列中的等待時間
  3. 程序在CPU上執行的時間
  4. 程序等待某些操作完成後的時間

其中2、3、4在一個作業的整個處理過程中可能會發生多次。

帶權週轉時間是指作業週轉時間與作業實際執行服務時間的比值。平均週轉時間和平均帶權週轉時間是衡量批處理系統排程演算法的重要準則。

響應時間快

響應時間,從使用者提交請求開始,直達系統首次產生響應為止的時間間隔。是衡量分時系統

排程演算法的重要準則。

截止時間的保證

開始截止時間,指某任務必須開始執行的最遲時間。完成截止時間,指某任務必須完成的最遲時間。對於比較嚴格的實時系統,排程演算法必須做到這一點,否則後果嚴重。

優先權

批處理系統、分時系統、實時系統都可以優先執行優先級別更高的作業。

面向系統

系統吞吐量高

系統吞吐量,系統在單位時間內所能完成的總的工作量,它與批處理系統中的作業長短有關。短作業執行時間短,吞吐量高,長作業相反。

CPU利用率

資源的平衡利用

排程的相關時間

  • 服務時間:作業需要執行的時間
  • 完成時間 = 開始時間 + 服務時間
  • 等待時間 = 開始時間 - 提交時間
  • 週轉時間 = 完成時間 - 提交時間
  • 帶權週轉時間 = 週轉時間 / 服務時間
  • 響應比 = (等待時間 + 服務時間) / 服務時間 = 等待時間/服務時間 + 1

排程演算法

先來先服務

先來先服務排程演算法(First Come First Served, FCFS)是最簡單的排程演算法,可以用於作業排程和程序排程。按照作業進入系統後備作業佇列的先後次序來挑選作業,加入就緒佇列,等待執行。

算例:假設系統中有4個作業,到達時間分別為8、8.5、9、9.5,服務時間分別為2、0.5、0.1、0.2,FCFS的排程為:

FCFS排程演算法算例

FCFS是非搶佔式的,易於實現,效率不高,效能不好,有利於長作業(CPU繁忙性)而不利於短作業(I/O繁忙性)。

短作業優先

短作業優先排程演算法(Short Job First)用於程序排程時又被稱為短程序優先排程演算法(Short Process First),該演算法既可以用於作業排程,又可以用於程序排程。

在作業排程中,該演算法每次從後備作業佇列中挑選估計服務時間最短的一個或幾個作業,將他們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。在程序排程中的原理類似。

算例:假設系統中有4個作業,到達時間分別為8、8.5、9、9.5,服務時間分別為2、0.5、0.1、0.2,SJF的排程為:

SJF排程演算法算例

SJF是非搶佔式的,優先照顧短作業,具有很好的效能,降低平均等待時間,提高吞吐量。但是不利於長作業,長作業可能一直處於等待狀態,出現飢餓現象;完全未考慮作業的優先緊迫程度,不能用於實時系統

最短剩餘時間優先

SJF本身是非搶佔式的,用於搶佔式排程系統時,對應的演算法陳偉最短剩餘時間優先排程演算法。

該演算法首先按照作業的服務時間挑選最短的作業執行,在該作業執行期間,一旦有新作業到達系統,並且該新作業的服務時間比當前執行作業的剩餘服務時間短,則發生搶佔;否則,當前作業繼續執行。該演算法確保一旦新的短作業或短程序進入系統,能夠很快得到處理。

算例:假設系統中有4個作業,到達時間分別為8、8.5、9、9.5,服務時間分別為2、0.5、0.1、0.2,SJF的排程為:

最短剩餘時間優先排程演算法算例

由於頻繁的搶佔和程序切換,系統開銷大,該演算法實現代價高,一般用於實時系統。

高響應比優先

高響應比優先排程演算法(Highest Reponse Ratio First, HRRF)是非搶佔式的,主要用於作業排程。

基本思想:每次進行作業排程時,先計算後備作業佇列中每個作業的響應比,挑選最高的作業投入系統執行。

響應比 = (等待時間 + 服務時間) / 服務時間 = 等待時間 / 服務時間 + 1

算例:假設系統中有4個作業,到達時間分別為8、8.5、9、9.5,服務時間分別為2、0.5、0.1、0.2,SJF的排程為:

HRRF排程演算法算例

由響應比分析可知,該演算法介於FCFS和SJF之間,但是每次需要計算每個作業的響應比,增加系統開銷。

優先順序

每次挑選優先順序最高的一個或幾個調入,可以用於作業排程和程序排程。分為非搶佔式和搶佔式。

時間片輪轉

用於分時系統的程序排程。

基本思想:系統將CPU處理時間劃分為若干個時間片(q),程序按照到達先後順序排列。每次排程選擇隊首的程序,執行完1個時間片q後,計時器發出時鐘中斷請求,該程序移至隊尾。以後每次排程都是如此。該演算法能在給定的時間內響應所有使用者的而請求,達到分時系統的目的。

其效能主要取決於時間片q的大小,q太大,則所有的程序在1個時間片完成,退外圍FCFS;太小則程序頻繁切換,系統開銷大。

時間片輪轉排程演算法1

時間片輪轉排程演算法2

時間片輪轉排程演算法3

時間片輪轉排程演算法4

該演算法簡單有效,常用於分時系統,但不利於I/O頻繁的而緊湊,由於這種程序用不完一個時間片,就因為等待I/O操作而被阻塞,當I/O操作結束後,只能插入到就緒佇列的末尾,等待下一輪排程。