操做系統中進程調度策略有哪幾種?

FCFS(先來先服務),優先級,時間片輪轉,多級反饋-調度算法。算法

  先來先服務調度算法:是一種最簡單的調度算法,每次調度是從進程隊列中選擇一個最早進入該隊列的進程,爲之分配資源投入運行。該進程一直運行完成或發生某事件而阻塞後才繼續處理後面的進程。函數

  優先級調度算法:有短進程優先級、高優先權優先級、高響應比優先級等,按照優先級來執行就緒進程隊列中的調度。  (高響應比:(等待時間+服務運行時間)/服務運行時間)spa

  時間片輪轉調度算法:系統仍是按照先來先服務調度就緒進程,但每次調度時,CPU都會爲隊首進程分配並執行一個時間片(幾ms~ms)。執行時間片用完後計時器即產生時鐘中斷,中止該進程並將它送到隊尾,其餘依次執行。這樣保證系統能在給定的時間內執行全部用戶進程的請求。繼承

  多級反饋調度算法:前面都有侷限性,綜合-> 多級反饋調度算法則沒必要事先知道各進程所需的執行時間,並且還能夠知足各種型進程的須要,於是它是目前被公認的一種較好的進程調度算法。隊列

(1)設置多個就緒隊列,每一個隊列優先級依次減少。爲各個隊列分配的時間片大小不一樣,優先級隊列越高,裏面進程規定的執行時間片就越小。進程

(2)隊列中仍是按照FCFS原則排隊等待,若是第一隊列隊首進程在規定的時間片內未執行完,則直接調送至第二隊尾,依次向後放一個隊列的隊尾。所以一個長做業進程會分配到n個隊列的時間片執行。事件

(3)按照隊列前後依次執行,若是新進的待處理進程優先級較高,則新進程將搶佔正在運行的進程,被搶佔的進程放置正在運行的隊尾。內存

 

1.搶佔式內核與非搶佔式內核

  1.1.UNIX採用搶佔式內核,Windows、Linux採用多任務非搶佔式內核。資源

搶佔式:  內核空間中,有一個更高優先級的任務出現時,則能夠將當前任務掛起,執行優先級更高的進程內存管理

非搶佔式:高優先級的進程不能停止正在內核中運行的低優先級的進程而搶佔CPU運行。 則除非進程自願放棄CPU,不然該進程將一直運行下去,直至完成或退出內核

多任務系統中, 內核負責管理各個任務, 或者說爲每一個任務分配CPU時間, 而且負責任務之間的通信。

  1. 2.LinuxCPU搶佔分兩種狀況:

1)用戶搶佔(發生時機:從系統調用返回用戶空間、從中斷(異常)處理程序返回用戶空間時);

2)內核搶佔(是指在內核中運行的進程, 可能在執行內核函數期間被另外一個進程取代。發生時機:若是內核中的任務堵塞,任務主動放棄CPU使用權時)

  1.3.須要內核搶佔的緣由:

當內核處於相對耗時的操做中, 好比文件系統或者內存管理相關的任務,其餘進程沒法執行, 沒法調度, 這就形成了系統的延遲增長用戶體驗到」緩慢」的響應

2.優先級翻轉問題:

  高優先級任務要訪問共享資源,而此時低優先級任務正在佔用,此時中等優先級任務到來先執行完畢後,低優先級任務釋放資源高優先級任務才得以執行,這就發生了優先級翻轉問題。

解決方式:優先級天花板,優先級繼承

優先級天花板:

  當任務申請某資源時就將當前任務的優先級提升到可訪問該資源任務的最高優先級。

優先級繼承:

  當任務申請某資源時,此資源已被佔用,那麼判斷當前任務是否比佔用資源的任務優先級高,若高,則將佔用資源任務的優先級提升到當前任務的優先級,等釋放資源後再恢復其自己的優先級。

相關文章
相關標籤/搜索