【操作系統】第八章處理機調度

以下是操作系統的各部分知識點的目錄:
第一章:操作系統的概述
https://blog.csdn.net/weixin_44751294/article/details/104172847
第二章:啓動、中斷、異常和系統調用
https://blog.csdn.net/weixin_44751294/article/details/104172778
第三章:續內存分配
https://blog.csdn.net/weixin_44751294/article/details/104183639
第四章:非連續內容分配
https://blog.csdn.net/weixin_44751294/article/details/104190197
第五章:虛存技術
https://blog.csdn.net/weixin_44751294/article/details/104196572
第六章:頁面置換算法
https://blog.csdn.net/weixin_44751294/article/details/104204687
第七章:進程與線程
https://blog.csdn.net/weixin_44751294/article/details/104228830
第八章:處理機調度
https://blog.csdn.net/weixin_44751294/article/details/104229011
第九章:同步互斥問題
https://blog.csdn.net/weixin_44751294/article/details/104235209
第十章:信號量與管程
https://blog.csdn.net/weixin_44751294/article/details/104248160
第十一章:死鎖與進程通信
https://blog.csdn.net/weixin_44751294/article/details/104259732
第十二章:文件系統
https://blog.csdn.net/weixin_44751294/article/details/104268956

8.1背景

1、上下文切換:

  • 切換CPU的當前任務,從一個進程/線程到另一個
  • 保存當前進程/線程在PCB/TCP中的執行上下文(CPU狀態)
  • 讀取下一個進程/線程的上下文

2、CPU調度
從就緒隊列中挑選一個進程/線程作爲CPU將要運行的下一個進程/線程
調度程序:挑選進程/線程的內核函數(通過一些調度策略)
什麼時候進程調度?調度算法實現

問題:在進程/線程的生命週期中的什麼時候進行調度?
在這裏插入圖片描述
3、內核運行調度程序的條件(滿足一條即可)
1)一個進程從運行狀態切換到等待狀態
2)一個進程被終結了

4、是否可以搶佔
不可搶佔:

  • 調度程序必須等待事情結束

可以搶佔:(常用,針對用戶態的)

  • 調度程序在中斷被響應後執行
  • 當前的進程從運行切換到就緒,或者一個進程從等待切換到就緒
  • 當前運行的進程可以被換出

搶佔使得系統程序更加的靈活和高效。

8.2調度原則

根據什麼原則去選擇一個進程去執行,這個就是調度的原則
1、執行模型
程序在CPU突發和I/O中交替

  • 每個調度決定都是關於在下一個CPU突發時將哪個動作交給CPU
  • 在時間分片機制下,線程可能在結束當前CPU突發前被迫放棄CPU

2、評價的指標
1)CPU利用率:CPU處於忙碌狀態所佔時間的百分比

  • cpu利用率越高,可以認爲當前系統的效率比較好。進程調度進行得好。

2)吞吐量:在單位時間內完成的進程數量

  • 吞吐量越高,說明進程的效率越好。當然希望當操作系統跑一堆進程時,吞吐率都很高。

3)週轉時間:一個進程從初始化到結束,包括所有等待時間所花費的時間。

  • 週轉時間越斷越好。

4)等待時間:進程在就緒隊列中的總時間

  • 指的是出於就緒態的時間越短,就越快被cpu執行

5)響應時間:從一個請求被提交到產生第一次響應所花費的總時間

  • 同樣也是越短越好

以上可以對cpu調度的指標有一個分析。

人們通常都需要“更快”的服務
什麼是更快:

  • 傳輸文件時的高帶寬
  • 玩遊戲時的低延遲
  • 這兩個因素是獨立的

和水管類比:

  • 低延遲:喝水的時候想要一代開水龍頭水就流出來
  • 高帶寬:給游泳池充水時希望從水龍頭裏同時流出大量的水,並且不介意是否存在延遲

3、算法需達到的效果
1)減少響應時間
及時處理用戶的輸出並且儘快將輸出提供給用戶
2)減少平均響應時間的波動
在交互系統中,可虞可預測性比高差異低平均更重要
3)增加吞吐量–兩個方面
減少開銷(操作系統開銷,上下文切換)
系統資源的高效利用(CPU,I/O設備)
4)減少等待時間
減少每個進程的等待時間

其實很難滿足以上的全部效果,只能澤中或者在特定場合中選擇某種特定效果。

4、公平性
公平的定義:

  • 保證每個進程都佔用相同的cpu時間
  • 保證每個進程都等待相同的時間
  • 公平通常會增加平均響應時間

8.3調度算法

調度算法有三類:
1)通常操作系統設計的基本調度算法
2)嵌入式設備實時的調度算法
3)針對多處理器的調度算法與考慮

一、常用系統的調用算法

  • FCFS (先來先服務) (First Come, First Served)
  • SPN(SJF)SRT (短進程優先(短作業優先)剩餘時間優先) Shortest Process Next(Shortest Job
    First) Shortest Remaining Time
  • HRRN (最高響應比優先) Highest Response Ratio Next
  • Round Robin (輪循) 使用時間切片和搶佔來輪流執行任務
  • Multilevel Feedback Queues (多級反饋隊列) 優先級隊列中的輪循
  • Fair Share Scheduling (公平共享調度)

二、先來先服務調度(FCFS)
在這裏插入圖片描述
如圖所示,如果前面的進程越長,後面的進程等待的時間就越長,從而會影響整個系統的週轉時間。

優點:
簡單

缺點:
1)平均等待時間波動較大,平均的週轉時間也會比較大
2)花費時間少的任務可能排在花費時間長的任務後面,沒有考慮搶佔
3)可能導致I/O和CPU之間的重疊處理(cpu密集型進程會導致I/O設備閒置時,I/O密集型進程也在等待)

三、短任務優先算法
在這裏插入圖片描述
當一個更短時間進程來了之後,有兩種策略:
1)不理,將這個時間更短的程序排在前面,但是繼續執行本來在執行的進程,這種是非搶佔性的。(SPN)
2)將這個時間更短的程序與正在執行的程序剩餘所需要執行的時間進行比較,如果跟多,這打斷正在執行的程序,這種是可搶佔的。(SRT)

優點:
平均等待時間最短
在這裏插入圖片描述
缺點:
1)可能導致飢餓

  • 連續的短任務流會使長任務飢餓
  • 短時間可用時的任何長任務的CPU時間都會增加平均等待時間

2)需要預知未來

  • 怎麼預估下一個CPU突發的持續時間
  • 簡單的解決方法:詢問用戶
  • 如果用戶欺騙就殺死進程
  • 如果用戶不知道就採用預估方法

根據過去,預測未來,大致的預測方法如下:
在這裏插入圖片描述
結果大致的相同

在這裏插入圖片描述
四、最高響應比優先算法
在SPN調度的基礎上改進
在這裏插入圖片描述
R值越高表示等待的時間越長,就會優先的調度這種進程。

優點:
充分的考慮到了進程的等待時間,所有之前的飢餓現象會得到有效的化解。

缺點:
1)不可搶佔
2)依然需要知道執行的時間是多長,所以還是要預估

五、輪循算法
各個cpu輪流佔用cpu去執行,在叫做量子(或時間切片)的離散單元中分配處理器,時間片結束後,切換到下一個準備好的進程。
在這裏插入圖片描述
每一個進程都有機會去被cpu執行

例子:
在這裏插入圖片描述
可見,輪流算法的平均等待時間是比較大的。

特點:
1)會比較到的切換時間,進程上下文的切換,確保公平
2)時間片太大(有可能退化爲先來先服務)

  • 等待時間過長
  • 極限情況退化成FCFS

3)時間片太小(切換過於頻繁)

  • 吞吐量由於大量的上下文切換開銷收到影響

目標:

  • 選擇一個合適的時間量子
  • 經驗規則:維持上下文切換開銷處於1%以內,這樣的情況下99%的時間都是在

進程的執行過程中

與先來先服務算法 進行比較:
在這裏插入圖片描述
六、多級反饋隊列
首先完成高優先級的進程,待其完成了所以的任務之後,再去完成第優先級的進程,這樣通過分層不同級別的隊列,可以實現調度的區分,使得調度的策略更加的合適。
而且進程在不同階段的特點是不同的,所以調度算法可以考慮到進程各階段的特點來調整其在隊列中的級別。這個就是多級反饋隊列可以體現。
在這裏插入圖片描述
特點:
1)時間量子大小隨優先級級別增加而增加
2)如果任務在當前的時間量子中沒有完成,則降到下一個優先級
3)能夠區分進程在動態執行過程中動態的調整進程優先級,使得IO密集型的任務可以很快的執行,而CPU密集型的任務放在優先級較低位置。

七、公平共享調度
FFS控制用戶對系統資源的訪問

  • 一些用戶組比其他組更重要
  • 保證不重要的組無法壟斷資源
  • 未使用的資源按照每個組所分配的資源比例來分配
  • 沒有達到資源使用率目標的組獲得更高的優先級

在這裏插入圖片描述
八、小結
1)FCFS先來先服務

  • 不公平,平均等待時間較差

2)SPN/SRT段進程優先

  • 不公平,但是平均等待時間最小
  • 需要精確預測計算時間
  • 可能導致飢餓

3)HRRN最好響應比優先

  • 基於SPN調度改進(考慮了等待時間)
  • 不可搶佔

4)Round Robin輪循

  • 公平,但是平均等待時間較差
  • 每一個進程有固定的時間片,但是上下文開銷較大

5)MLFQ舵機反饋對列

  • 和SPN類似
  • 動態調整進程優先級

6)公平共享調度

  • 公平是第一要素

8.4實時調度

面向的是實時的系統,更多的是工業控制(火車,機牀等等)
1、定義
正確性依賴於其時間和功能兩個方面的一種操作系統

2、性能指標
1)時間約束的及時性(deadlines)
2)速度和平均性能相對不重要

3、主要特徵
時間約束的可預測性

4、分類
1)強實時系統
需要在保證的時間內完成重要的任務,必須完成
2)弱實時系統
要求重要的進程的優先級更高,儘量完成,並非必須
在這裏插入圖片描述
Released :讓進程處於就緒態的時間
Execution time:執行時間
Absolute deadline:絕對的截止時間,任務的執行不可以操作這個時間
Relative deadline:相對截止時間,因爲任務是間隔的,一段時間完成一個任務
在這裏插入圖片描述
(週期是5,執行的時間就是藍色的區域)

5、特點
硬時限:

  • 如果錯過了最後的期限,可能會發生災難性或非常嚴重的後果
  • 必須驗證:在最壞的情況下也能夠滿足時限
  • 保證確定性

軟時限:

  • 理想情況下,時限應該被最大滿足。如果有時限沒有被滿足,那麼就相應地降低要求
  • 儘量大努力去保證

表示一個實時系統是否能夠滿足deadline要求

  • 決定實時任務執行的順序
  • 靜態優先級調度
  • 動態優先級調度

6、實時系統中的兩類調度算法
1)RM(Rate Monotonic)速率單調調度

  • 最接靜態優先級調度
  • 通過週期安排優先級
  • 週期越短優先級越高
  • 執行週期最短的任務

2)EDF(Earliest Deadline First)最早期限調度

  • 最佳的動態優先級調度
  • Deadline越早優先級越高
  • 執行Deadline最早的任務

8.5多處理器調度與優先級反轉

一、多處理器調度
1、多處理器的cpu調度更加複雜

  • 多個相同的單處理器組成一個多處理器
  • 負載平衡狀態

2、對稱多處理器(SMP)

  • 每個處理器運行自己的調度程序
  • 需要在調度程序中同步

在這裏插入圖片描述
二、優先級反轉
出現的原因:
T1的執行時間受制於T2的執行時間,因爲T2搶佔了T3的cpu時間去執行,而T1的執行有必須等待T3處理完共享內容,所以T1的執行時間被T2延長了。從而導致T1不能及時的完成其任務,導致系統處於不穩定狀態而重啓。
在這裏插入圖片描述
特點:
可以發生在任何基於優先級的可搶佔的調度機制中。
當系統內的環境強制性使高優先級任務等待低優先級任務時發生。

解決方法:
1、優先級繼承(將問題發生時,提升T3的優先級)
低優先級繼承高優先級任務的優先級依賴於他們共享的資源
在這裏插入圖片描述
2、天花板優先級
1)“資源”的優先級和“所有可以鎖定該資源的任務中優先級最高的那個任務”的優先級相同。
2)除非優先級高於系統中所有被鎖定的資源的優先級上限,否則任務嘗試執行臨界區的時候會被阻塞
3)持有最高優先級上限信號量鎖的任務,會繼承被該鎖所阻塞的任務的優先級

參考鏈接:https://www.bilibili.com/video/av6538245

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