CPU調度CPU調度的方案可以分為“非搶占式”調度(又稱“協作式”調度),以及“搶占式”調度。
所謂搶占,是指在稍后的時間啟動的一個進程,因為優先級或者所需資源少等原因,可以打斷當前CPU執行的進程,搶占當前進程的CPU資源(以及其他資源)歸自己所用。現代操作系統基本都是搶占式的調度,非搶占式的調度主要用于嵌入式的系統,因為非搶占式不需要特別的硬件。
CPU調度可能出現在4種情況下:一個進程從運行切換到等待 一個進程從運行切換到就緒 一個進程從等待切換到就緒 一個進程從運行完畢,終結
如果一個調度方案只處理進程終止、進程切換到等待兩種情況的話,則這個調度方案是“非搶占”的,否則是“搶占式”的。
CPU調度方案的評判條件CPU使用率:調度方案應當是CPU盡可能不空閑 吞吐量:單位時間內完成的進程數量 周轉時間:指進程從提交到執行完畢的所有之間之和,包括阻塞調用的等待時間,也包括在就緒隊列中的等待時間 等待時間:特指在就緒隊列中等待的時間 響應時間:指從進程提交到進程產生第一響應的時間,因為有些對于有些進程,人們關心它產生響應的快慢勝過對整個進程執行耗時的多少。CPU調度算法
先到先服務調度(FCFS):非搶占式的調度方案。按時間排序,先提交的進程先執行,一直等到進程執行結束或者因為I/O操作等阻塞操作而等待再執行下一個進程的方案。
優缺點:最簡單,但是無腦,進程的平均等待時間不是最短的,而且因為是非搶占式的,對于分時系統(多用戶系統)來說很不好。
最短作業優先調度(SJF):也稱“最短下一個CPU區間”算法。可以是搶占式也可以是非搶占式,衍生的搶占SJF也被成為“最短剩余時間優先”算法。在當前時刻,對所有已經提交的進程用時排序,按最短耗時到最長好使排序,優先執行最短耗時的進程(任務),相同耗時的按FCFS調度。
優缺點:可以證明SJF是最好的,平均時間是最短的。但是SJF算法難在知道下一個CPU區間的長度(也就是進程的耗時)。對于批處理系統,可以將用戶指定的進程時間極限作為耗時。進而,SJF通常用于批處理系統。
優先級調度算法:將進程按貼上優先級的標簽,按優先級的高低來判斷是否優先執行,相同優先級按FCFS調度。上面提到的SJF,就是一種優先級調度算法,這里的優先級是按進程耗時的倒數計算。
優缺點:優先級調度最大的問題是可能一個優先級第的進程長時間不能執行,導致進程餓死,解決的辦法是“進程老化”——每經過一個時間段,將進程的優先級提高一定級別,進而避免餓死。
輪轉法(RR):相當于搶占式的FCFS算法。通過將進程放入一個循環隊列當中,劃分時間片,每過一個時間片,如果進程執行完,則執行下一個(隊列首)進程,如果沒執行完,則放入循環隊列的隊尾再次等待執行,有新進程來臨也放入隊列的隊尾。
如果輪轉法的時間片設置的過長,以至于所有進程在一個時間片中都能執行完畢,那么這就成了FCFS算法,但是如果時間片設置的過于短,每次進程切換導致的上下文切換(堆棧數據保存恢復,寄存器數據保存恢復等)開銷太大,也不好。推薦是時間片最好大于80%的進程耗時。
多級隊列調度:因為不同類型的進程(CPU密集型和I/O密集型,長期任務和短期任務)的特征是不同的,用戶對不同類型進程的調度要求也不同,所以干脆,將不同類型的進程分配在優先級不同的隊列當中,隊列間按優先級調度,隊列內部選用合適的調度算法。
多級反饋隊列調度:類似與上述第5中“多級隊列調度”,但是增加了隊列之間,進程可以提升優先級或者將低優先級切換所在隊列,優化計算機的效率。
多CPU調度的問題
單核調度比較方便,多核因為涉及到協調通信問題,更加復雜。
一般將多核的調度方法分成兩大類:非對稱多處理方法和對稱多處理方法。
* 非對稱多處理方法:多個CPU的地位不對等,一般是有一個主CPU處理所有調度決定和系統進程,訪問系統的數據結構,其他CPU服從主CPU的指揮和執行用戶代碼
* 對稱多處理方法:多個CPU地位對等,各自執行自己的調度方法,多個CPU之間協同通信處理。
對稱多處理方法的問題處理器親和性:一個處理器對一個進程的臨時數據,緩存可能已經保存了一遍了,如果進程下次被調度到另一個處理器上執行,這些數據需要再生成一遍,浪費資源,所以一般都要盡量保持一個進程在一個處理器上執行完。 負載均衡:多處理器中,可能出現幾個處理器無所事事,另幾個處理器卻忙的要死的情況。看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170226/107064.html
文章列表