1. 程式人生 > >作業系統學習-常見的CPU排程程序的策略

作業系統學習-常見的CPU排程程序的策略

下面我們分別就單核和多核的情況加以分析:

1.單核:

1.1 FCFS (first come first service)先到先處理方式
顧名思義,這種排程方法就是CPU按照先到先處理的方式對程序進行處理,非搶佔式
優點:簡單,一般結合其他策略使用
缺點:平均等待時間較長,舉例:三個程序 P1的cpu時間是24s,P2是3s,P3也是3s,這樣P2和P3分別需要等待24s和27s才能得到執行

1.2 SJF(short job first)短作業優先
CPU時間短的程序優先被處理
優點:平均等待時間最短
缺點:CPU時間需要靠估算;CPU時間長的程序可能很久都執行不到

1.3優先順序排程
按照程序的優先順序進行排程,相同優先順序按照FCFS排程,SJF是把時間當作優先順序的排程方式
優先順序定義方法:
a. 內部定義 - 按照CPU時間,記憶體要求,開啟檔案數量,平均I/O等系統引數進行定義優先順序
b. 外部定義 - 政策性的定義,按照服務的性質,比如對外服務的程序優先順序高於狀態檢測的程序
優點:重要的程序可以得到及時的處理
缺點:會出現飢餓問題,低優先順序的程序可能永遠得不到處理;解決方法是老化(aging),當一個程序超過一定時間按仍沒有被處理,提高它的優先順序

1.4時間輪轉法排程
把CPU分成10~100ms的時間片,程序按照FCFS的方式排程,每當程序每次得到CPU後只能執行一個時間片,如果執行不完,換下一個,將程序的就緒隊列當作迴圈佇列。
關於時間片是10~100ms的原因:當時間片過大,就變成FCFS了;CPU切換程序上下文的時間是10us左右,當時間片過小,會導致效率很低
優點:不出會先飢餓,平均等待時間也不是很長
缺點:缺少對重要程序的優先處理

1.5多級佇列排程
按照優先順序將程序分為不同的佇列,每個佇列有自己的排程方法,高優先順序的佇列為空,低優先順序的佇列中的程序才能被執行
=> 系統程序 => FCFS
=> 互動程序 => SJF
=> 互動編譯程序 => 優先順序
=> 批處理程序 => 時間片
=> 學生程序 => FCFS
優點:低排程開銷
缺點:不靈活

1.6多級反饋佇列排程
這裡寫圖片描述
按照FCFS的方式,每個程序被排程的時候都在就緒佇列1,被分配到一個大小為S1的時間片,如果其S1足夠其執行結束,則離開佇列,否則將其放入就緒佇列2,依次例推。一般S1小於S2小於S3 (8ms,16ms,24ms),但是linux下是反過來的。這種排程方式需要考慮很多方面,比如佇列數,升降程序所處的佇列等等
優點:最為靈活,當前最為通用
缺點:比較複雜

2.多核的情況:
多核分為對稱多處理器和為對稱多處理器兩種情況

2.1 對稱多處理器:
每個核能力一致,此種情況又分為共享就緒佇列和私有就緒佇列兩種情況,共享就緒佇列選程序時要互斥,私有就緒佇列時,需要均衡負載,linux提供push和pull操作,使核與核之間可以均勻其程序

2.2非對稱(異構):
有一個核專門用來排程,這樣效率比較低

3.linux提供nice命令來調整優先順序