清華大學《操作系統》(十一):處理機調度

一、處理機調度概念

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

CPU調度:從就緒隊列中挑選一個進程/線程作為CPU將要運行的下一個線程/進程

調度程序:挑選進程/線程的內核函數(通過一切調度策略)使得效率最高,滿足用戶需求

在進程/線程的生命周期中的什么時候進行調度?

  1. 從一個狀態變為另一個狀態,特別是和運行(running)相關的狀態。
  2. 內核運行調度程序的條件:進程從運行狀態切換到等待狀態or終結了(done)
  3. 不可搶占調度,調度必須等待事件/進程結束,早期OS。
  4. 現在多為可以搶占的進程,OS決定在何時打斷進程,調度程序在中斷被響應后執行,當前進程從運行切換到就緒,或者一個進程從等待切換到就緒,可以被換出。

針對的是用戶態的進程。

進程在內核中通過系統調用執行,因為系統調用返回時是到發起這個調用的進程繼續執行,所以內核中不會切換,搶占。只要進程在系統調用時不存在從運行態到阻塞態的變化,OS可以確保返回正常。

二、調度準則

1、處理機資源的使用模式

CPU的占用率是波狀,CPU大量運算是高峰,而讀寫I/O時是平穩的低值。每個調度決定都是關于下一個CPU突發時將哪個工作交給CPU,在時間分片下,線程可能在結束當前CPU突發前被迫放棄CPU。?

程序在CPU突發和I/O中交替,CPU占用率高說明是在充分地使用CPU。

2、比較調度算法的準則

  1. CPU使用率:CPU處于忙狀態的時間百分比
  2. 吞吐量:單位時間內完成的進程數量
  3. 周轉時間:一個進程從初始化到結束包括(所有等待時間)所花費的總時間,周轉時間=等待時間+服務時間
  4. 等待時間:進程在就緒隊列中的總時間,進程從就緒態到運行態的時間。
  5. 響應時間:一個請求被提交到第一次響應所花費的總時間

2、吞吐量與延遲

要求:希望更快的服務。什么是更快?

  • 高帶寬:吞吐量高 (傳輸文件)
  • 低延遲:響應時間快(玩游戲)

3、調度算法的響應時間目標

  • 減少響應時間:及時處理用戶的輸入請求,盡快發饋給用戶
  • 減少平均響應時間的波動:交互系統中,可預測性比高差異低平均更重要
  • 低延遲調度改善用戶的交互體驗?
  • 響應時間是操作系統的計算延遲

4、調度策略的吞吐量目標

  • 增加吞吐量:減少開銷(操作系統開銷,上下文切換)?、系統資源的高效利用(CPU,I/O設備)
  • 減少等待時間
  • 操作系統需要保證吞吐量不受用戶交互的影響

5、處理機調度的公平性目標

  • 公平的定義:保證每個進程占用相同的CPU時間;保證每個進程的等待時間相同
  • 公平通常會增加平均響應時間

三、先來先服務、短進程優先和最高響應比優先調度算法

1、FCFS first come first served先來先服務算法

依據進程進入就緒狀態的先后順序排列

如果前面的進程運行的時間長,后面的進程就只能等著,導致周轉時間慢。如果進程阻塞了,隊列中的下一個會得到CPU

優點:簡單?

缺點:平均等待時間波動大,花費時間少的可能反而排在后面,可能導致CPU和I/O之間的重疊處理,沒考慮搶占,CPU密集的進程導致I/O閑置時,I/O密集型進程也在等。

2、短進程優先算法

選擇就緒隊列中執行時間最短進程占用CPU進入運行狀態,就緒隊列按預期的執行時間來排序;

短進程優先算法具有最優平均周轉時間

  • 不可搶占:SJF、SPN
  • 可搶占:ready queue中的第一個進程正在運行時,來了一個比它的預測完成時間還短的進程,SPT

優點:最小的平均等待時間和周轉時間

缺點:可能導致長任務饑餓,不能保證公平;需要預知未來下一個進程的時間,比如詢問用戶,如果用戶欺騙就殺死進程。

短進程優先算法的執行時間預估:根據執行歷史看將來CPU突發的持續時間,遞歸展開

3、最高響應比優先算法(HRRN)

選擇就緒隊列中響應比R值最高的進程

  • R=(w+s)/s
  • w:等待時間(waiting time)
  • s:執行時間(service time)

在短進程優先算法的基礎上改進;不可搶占;關注進程的等待時間;防止無限期推遲。

四、時間輪轉、多級反饋隊列、公平共享調度算法和ucore調度框架

1、時間片輪換算法(RR)

時間片:分配處理機資源的基本時間單元

算法思路:用時間切片和搶占來輪流執行,強調了公平。在量子切片/時間切片的離散單元中分配處理器,時間片結束時切換到下一個準備好的進程?

時間片長度

  • 開銷: 額外的上下文切換;
  • 時間片太大則等待時間過長會退化成FCFS,
  • 太小反應迅速但吞吐量由于大量的上下文切換開銷受影響?;
  • 選擇一個合適的時間片,經驗是維持上下文切換開銷處于1%以內,現在LINUX是千分之一秒

2、多級隊列調度算法(MQ)

就緒隊列分為多個相對獨立的隊列,每個隊列擁有自己的調度策略。

隊列間的調度:

  1. 固定優先級:先高優先級,再處理低優先級,可能導致饑餓
  2. 時間切片輪轉:每個隊列都得到一個確定的,調度其進程的CPU總時間,如80%給前臺,20%給后臺

3、多級反饋隊列算法(MLFQ)

  • 時間片大小隨優先級增加而增加
  • 若當前時間量子中沒有完成就給當前任務則降到下一個優先級

進程調度先是I/O密集型,CPU密集型隨著不斷消耗時間片就下降到低的優先級,保證I/O密集型任務停留在高優先級?

等待時間越長,優先級越高,服務時間越長優先級越低?,能動態地根據進程的特征調整隊列和調度

4、公平共享調度(FSS)

在用戶級別實現公平共享?

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

5、評價調度方法

確定性建模,對確定的工作量計算每個算法的表現
隊列模型:用來處理隨機工作負載的數學方法
實現/模擬:建立一個允許算法運行實際數據的系統,最靈活,一般性

五、實時調度和多處理器調度

1、實時調度

  • 定義:正確性依賴于其時間和功能兩方面的一種OS
  • 性能指標:時間約束的及時性(deadlines),速度和平均性能相對不重要,
  • 重點是時間約束的可預測性。
  • 實時任務:任務/工作單元(一次計算,一次文件讀取,一次信息傳遞等等)?
  • 任務屬性:取得進展所需要的資源和實時參數?
  • 任務請求時間(release time):進程處于就緒態的時間?
  • 相對截止時間(relative deadline): 任務是間隔時間段完成,每個任務有個特定的時間,要在特定的時間段內完成?
  • 絕對截止時間(absolute deadline):最終的結束時間

周期任務:一系列相似的任務,有規律的重復

  • 周期p=任務請求時間間隔 (0 < p)?
  • 執行時間e=最大執行時間,最大執行時間< p?
  • 使用率/利用率:U=e/p

2、類別?

  • 硬實時系統/強實時系統:如果某個任務沒完成有嚴重后果,比須驗證在最壞情況下能夠滿足時限
  • 軟實時系統/弱實時系統:重要的進程優先級更高,要盡量完成,如看視頻,幀數沒控制好會掉幀。

3、實時調度算法

  • 速率單調調度算法(RM):通過周期安排優先級,周期越短優先級越高,執行周期最短的任務;
  • 最早截止時間優化算法(EDF):截止時間越早優先級越高,執行截止時間最早的任務

對于實時系統來說,有兩種調度策略,一是靜態調度策略,一個是動態調度策略。靜態調度策略是指按照進程執行時間長短進行調度,執行時間短的先執行。動態調度策略是按照進程截止時間進行調度,截止時間越早的先執行。

4、多處理器調度?

  • 要考慮:1,任務來了,放在哪個CPU上執行?2,怎么考慮公平性?load balance負載平衡?
  • 多處理器的CPU調度更加復雜,多個相同的單處理器組成一個多處理器,優點是負載共享。對稱多處理器(SMP),每個處理器運行自己的調度程序,需要在調度程序中同步

多處理機是指由多個處理機組成一個多處理機系統,處理機之間可以實現負載共享。其中每個處理器有自己的調度程序,調度程序對共享資源的訪問需要進行同步。多處理機調度策略中最重要的一點是一個進程應該分配給哪一個處理機。靜態進程分配是進程從開始到結束都分配到一個固定的處理機上執行,之后就是在每個處理機上的單處理機調度算法,但這會導致處理機利用率不均。動態進程分配則是一個進程可以分配到任意空閑處理機執行,所有處理機共享一個就緒隊列,調度開銷較大,但負載均衡。

六、優先級反置

優先級反置是指高優先級進程要請求的資源被低優先級進程占用而被阻塞,此時中優先級進程反而搶占了CPU導致高優先級進程始終無法運行。針對這一現象有兩種解決方案:一是優先級繼承,導致高優先級進程阻塞的低優先級進程會暫時繼承高優先級進程的優先級,避免被中間優先級進程搶占;二是優先級天花板協議,占有資源的進程和所有可能申請該資源的進程的優先級比較,設置成其中最高優先級對應的優先級,這樣就不會有進程阻止他使用這個資源,可能會出現優先級濫用的情況。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454139.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過純css實現圖片居中的多種實現方式

html結構&#xff1a; 1 <div class"demo" style"width: 800px;height: 600px; border:1px solid #ddd"> 2 <img src"default.jpg" width"400" height"300"/> 3 </div> 實現img位于外層div的居中顯示…

GCC 命令行詳解

作者&#xff1a; www.linuxfans.org mozilla 1。gcc包含的c/c編譯器 gcc,cc,c,g,gcc和cc是一樣的&#xff0c;c和g是一樣的&#xff0c;(沒有看太明白前面這半句是什 么意思:))一般c程序就用gcc編譯&#xff0c;c程序就用g編譯 2。gcc的基本用法 gcc test.c這樣將編譯出一個…

Java網絡編程從入門到精通(5):使用InetAddress類的getHostName方法獲得域名

該方法可以得到遠程主機的域名&#xff0c;也可以得到本機名。getHostName方法的定義如下&#xff1a; publicString getHostName() 下面是三種創建InetAddress對象的方式&#xff0c;在這三種方式中&#xff0c;getHostName返回的值是不同的。 1&#xff0e;使用getLocalHost方…

猿輔導python面試_猿輔導面試經歷—個人感受

今天參加了猿輔導的二面&#xff0c;無數槽點&#xff0c;不知道是不是很多公司都是這樣&#xff0c;但是我還是忍不住要逼逼叨。6月10號&#xff0c;我向猿輔導投了簡歷&#xff0c;想做招聘邀約專員這個崗位&#xff0c;然后hr加了我的微信&#xff0c;要了一份簡歷之后通知我…

對稱加密與非對稱加密

&#xff08;一&#xff09;對稱加密&#xff08;Symmetric Cryptography&#xff09; 對稱加密是最快速、最簡單的一種加密方式&#xff0c;加密&#xff08;encryption&#xff09;與解密&#xff08;decryption&#xff09;用的是同樣的密鑰&#xff08;secret key&#xff…

清華大學《操作系統》(十二):臨界區與鎖

多進程并發運行&#xff0c;導致多個進程間有資源共享&#xff0c;比如CPU、內存&#xff0c;因此存在不確定性和不可重現&#xff0c;可能導致多次運行結果不一致。因此操作系統需要利用同步機制在并發執行的同時&#xff0c;保證一些操作是原子操作。 互斥是指一個進程占用了…

gcc生成靜態庫和動態庫

gcc生成靜態庫和動態庫一、庫文件簡介簡單地說&#xff0c;庫&#xff08;Library&#xff09;就是一組已經寫好了的函數和變量、經過編譯代碼&#xff0c;是為了能夠提高開發效率和運行效率而設計的。庫分為靜態庫&#xff08;Static Library&#xff09;和共享庫&#xff08;…

python 流式計算框架_流式計算的三種框架:Storm、Spark和Flink

我們知道&#xff0c;大數據的計算模式主要分為批量計算(batch computing)、流式計算(stream computing)、交互計算(interactive computing)、圖計算(graph computing)等。其中&#xff0c;流式計算和批量計算是兩種主要的大數據計算模式&#xff0c;分別適用于不同的大數據應用…

清華大學《操作系統》(十八):管程于信號量

信號量與管程也是進程間通信的方式。信號量是與鎖在同一層級實現的&#xff0c;是操作系統提供的一種協調共享資源訪問的方法。信號量由操作系統管理&#xff0c;操作系統作為管理者地位是高于進程的。 一、信號量 1、信號量&#xff08;semaphore&#xff09;&#xff1a;是操…

Iptalbes自動封殺暴力破解(Qmail郵件系統)者的IP地址

今天發現Qmail郵件系統的maillog里面有大量的“user not found”信息&#xff0c;通過下面的日志不難發現&#xff0c;是來自同一IP的很多不同的用戶連接Qmail郵件系統認證失敗的信息。黑客試圖通過這種方式來破解Qmail郵件系統的用戶名和密碼&#xff0c;從而來發送大量的垃圾…

安裝Postman

在web和移動端開發時&#xff0c;常常會調用服務器端的restful接口進行數據請求&#xff0c;為了調試&#xff0c;一般會先用工具進行測試&#xff0c;通過測試后才開始在開發中使用。 這里介紹一下如何在chrome瀏覽器利用postman應用進行restful api接口請求測試。 因為&#…

python紅樓夢詞頻統計_用 Python 分析《紅樓夢》(2)-阿里云開發者社區

6 詞頻統計完成分詞以后&#xff0c;詞頻統計就非常簡單了。我們只需要根據分詞結果把片段切分開&#xff0c;去掉長度為一的片段(也就是單字)&#xff0c;然后數一下每一種片段的個數就可以了。這是出現次數排名前 20 的單詞&#xff1a;(括號內為頻數)可以跟之前只統計出現次…

清華大學《操作系統》(二十):死鎖和進程通信

一、死鎖 死鎖&#xff1a;一組阻塞的進程&#xff08;兩個或多個&#xff09;&#xff0c;持有一種資源&#xff0c;等待獲取另一個進程所占有的資源&#xff0c;而導致誰都無法執行。 可重復使用的資源&#xff1a; 在一個時間只能一個進程使用&#xff0c;且不能被刪除。…

python操作redis實例_Java,php,Python連接并操作redis實例

1、Java連接并操作redis在Eclipse里新建一個java project&#xff0c;導入jedis-*.jar包。示例代碼&#xff0c;其他對應的操作類型見&#xff1a;http://my.oschina.net/u/2391658/blog/705069import redis.clients.jedis.Jedis;//示例代碼public class RedisTest {public sta…

java: cannot execute binary file 如果遇到這個錯,一般是操作系統位數出問題了。

[roottestserver usr]# java/jdk1.6.0_12/bin/java-bash: java/jdk1.6.0_12/bin/java: cannot execute binary file后來檢驗&#xff0c;檢查了一段時間&#xff0c;沒有問題&#xff0c;最后有高人提示經驗證&#xff0c;是64位版本移到32位上。本文轉自 jxwpx 51CTO博客&…

div 自適應高度

自適應高度 &#xff0c;設置最小高度&#xff1b;通常情況下&#xff0c;沒有設置高度&#xff0c;div默認自適應高度且無最低高度 1 div{ 2 _height:200px; /* css 注解&#xff1a; 僅IE6設別此屬性&#xff0c;假定最低高度是200px &#xff0c;設置高度200px&#xff0c…

GCC使用詳情

1.前言 GCC編譯器的手冊(GCC MANUAL)的英文版已經非常全面&#xff0c;并且結構也非常完善了&#xff0c;只是一直都沒有中文的版本&#xff0c;我這次閱讀了GCC編譯器的主要內容&#xff0c;對手冊的內容進行了結構性的了解&#xff0c;認為有必要對這次閱讀的內容進行整理&am…

清華大學《操作系統》(二十二):文件系統

文件系統和文件&#xff1a; 文件系統是操作系統中管理持久性數據的子系統&#xff0c;提供數據存儲和訪問功能&#xff0c;組織、檢索、讀寫訪問數據。文件是具有符號名&#xff0c;由字節序列構成的數據項集合&#xff0c;是文件系統的基本數據單位&#xff0c;文件名是文件…

卡巴綠殺6 By Moshow魔手

卡巴綠殺6 By Moshow魔手 Kaspersky Anti-Virus Move-edition 6 (-_-b汗Move Edition...)【這是卡巴斯基綠色移動版本推薦用于u盤】By Moshow魔手 [url]Http://Hi.baidu.com/MoshowGame[/url]祝o(∩_∩)o...天下無毒)擁有全球最全的病毒庫)擁有最快的全球剿毒反應速度) 基于穩定…

python將字符串寫入csv_用Python將字符串值寫入CSV文件

我有一個很大的數據集&#xff0c;在第二列有句子和他們的情緒狀態。我開發了代碼來將它們讀作numpy數組。我需要的是&#xff0c;如果一個句子的情感是中性的&#xff0c;那么返回為真&#xff0c;否則返回假。if-else條件返回的每個結果都應寫入CSV文件。但是這里它只在CSV文…