日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

三、处理机调度与死锁

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三、处理机调度与死锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??上一章介紹的進程主要從概念出發,但程序執行終歸是動態的。進程如何參與程序的動態執行過程呢?在多道程序下,進程的數量遠大于處理機的數量。那如何對進程進行安排(處于就緒狀態的進程有好多,選哪些進程給處理機執行),才能達到一些我們期望的指標(系統吞吐率,資源利用率,響應的及時性)?而這一切的實現很大程度取決于處理機調度性能的好壞。
??從內容上說,本章大體可以分為三個部分:CPU調度、實時調度、死鎖。下面讓我們一一介紹下吧!

??一、 CPU調度

??一個程序從最開始在內存中到最后執行完畢經歷了一段過程。從調度角度上來看,經過了三個調度階段。分別是高級調度、中級調度、低級調度

??高級調度/長程調度/作業調度

??高級調度指從外存中選出若干作業,為它們分配進程,并改變進程的狀態為就緒狀態

??低級調度/進程調度/短程調度

??低級調度指在就緒隊列中選擇一個進程為它提供處理機資源

??中級調度/內存調度

??中級調度的目的是提高內存利用率和系統吞吐率。方式是將內存中暫時不能運行的進程放到外存中(俗稱掛起)。當具備運行條件后再由中級調度重新調入內存。
??大致順序就是高級調度->低級調度->(中級調度)->執行結束。由于分時特點,低級調度可能要多次。
??衡量處理機調度算法的好壞有幾個指標,也是目標。優化這些目標就是我們的目的。

??周轉時間

??周轉時間指從作業被提交給系統開始,到作業完成為止的這段時間間隔。包括下圖四個部分:

??平均周轉時間

??平均周轉時間就是所有作業的周轉時間之和除以作業個數

??帶權周轉時間

??帶權周轉時間指周轉時間除以執行時間。執行時間就是結束時間減去開始時間

??概念比較抽象,下面結合一個例題看看:

??以作業二為例,計算它的周轉時間,帶權周轉時間
??周轉時間是完成時間-提交時間 是13.00-10.10=2.9
??帶權周轉時間是周轉時間/執行時間,執行時間是完成時間-開始時間=13.00-12.00 = 1。帶權周轉時間 = 2.9/1 = 2.9。
??同理計算作業1,3的周轉時間求和再除以三,就得到平均周轉時間了。簡不簡單!

??說別的都沒用,好壞還是要看調度算法怎么樣。下面就介紹一下6種調度算法:

??先來先服務調度算法(FCFS, first come first serve)

??這種是最容易實現的算法,先到先執行。那我們來評價一下這個算法的性能:

??上圖有四個作業,A,B,C,D依次到達。直接看性能(帶權周轉性能),A,B,D都可以看,但C有點兒慘。但實際上C執行的時間相當短,這就是因為C在B這個很長的任務后面。導致周轉時間特別長,遠超執行時間。這種算法對短任務很不友好,短任務在長任務前面執行還好,但在后面性能就會特別差。

??短作業優先調度算法

??(1) 最短作業優先

??這種算法就有優先級存在了,作業越短優先級越高。這就保證了短任務都能先執行。舉個例子,說明執行過程:

??假設它們都是同一時間到達,burst time是執行時間。按照最小原則,執行順序依次是4,??1,3,2。從直觀上感覺,這個性能應該比FCFS好點兒。但這個算法有一個很難搞的問題:我怎么知道一個進程會執行多長時間呢?所以要用這個,就必須去估算一下,而且誤差還不能太大。

??(2) 最短剩余時間優先

??這個和最短作業優先很像,是它的搶占式版本。搶占的依據就是正在執行的進程A剩余時間比新來的進程B整個時間還要長。這種思想也很好理解,假如B一直沒有來,A作為唯一進程執行,執行一旦開始就會直至結束。如果A很長,B很短的話,B來了也不能執行,有點兒退化成了FCFS。最短剩余時間每時每刻都檢查進程的剩余時間來決定分配。用例子說明下:

??0時刻,P1到達執行P1。1時刻P2到達,P2是4,P1是7,優先P2。2時刻到達,P1是7,P2是3,P3是9,繼續P2,3時刻仍是P2最小。P2執行完選最小的是P4的5,P4結束后再進行P1的7,再P3的9。畫出圖來,就是這樣:

??這個算法也有缺陷,也要執行程序的執行時間。不過性能和最短作業相比要好。

??優先級調度算法

??(1) 普通優先級調度

?? 其實前幾種方法已經體現了優先級思想,就是時間越少,優先級越高。但這算法中顯式的給出優先級,于是進程就按照優先級執行就行了。

??(2) 高響應比優先級調度

?? 不過前一種方法存在一個問題,優先級是怎么確定呢?確定會不會不公平呢?所以高響應比算法用相應比去評價優先級:

??當使用響應比以后,就比較公平啦!這樣的優點是兼顧了長短進程,但計算優先權也要一點兒額外開銷。

?? 輪轉調度算法

?? 輪轉調度有點兒像分時復用,把處理機分很多個時間片。均勻的分給所有進程,這就保證了所有進程都能夠得到執行。這種方法問題就是時間片的大小不好確定,時間太長變成了先到先服務,時間太短來回上下文切換頻次太高,不值當!

?? 多級隊列調度

??多級隊列的思想是針對于不同進程的不同需求,對于交互進程希望響應時間短(且不管是否執行完,但要開始執行),比較適合輪轉調度。但后臺的批處理(數值計算),一直算就行,只要保證能夠執行就可以,就可以用FCFS。所以這里的多級隊列就是將就緒隊列分成多個隊列,不同隊列根據需求使用不同算法。

?? 多級反饋隊列調度

?? 多級反饋隊列就是在多級隊列基礎上改進了一下,增強了動態性。使用多級隊列(不同隊列可以不同算法),如果進程在第一級沒有得到處理,就到第二級。。。以此類推,直到執行為止。

??二、實時調度

?? 對于實時調度其實不是課程的重點,但在嵌入式操作系統中都是實時調度。還是有必要簡單了解下滴。那啥叫實時調度呢?來一個引入:

??在這個系統中,周期是50ms,而每次處理時間10ms,如果對于5個任務來說可以執行(相鄰執行時間滿足最大間隔要求),但如果是6個任務的話,任務A第一次執行和第二次執行間隔60ms,超過了50ms的周期,沒法完成調度了。所以系統是否能夠進行實時調度,是有條件的,就是:

??概念是概念,具體的調度過程是由算法決定的,下面就介紹一下常用的實時調度算法:

??最早截至時間優先(EDF, earliest deadline first)

?? 這個算法思想很簡單,就是按照截至時間來決定優先級。越早截至,優先級越高。舉個例子:

??這個例子中,任務到達都是在進程執行中。在非搶占式情況下是沒影響的。截至時間依次是1342,所以任務執行順序也就是1342。

??最低松弛度優先(LLF, least laxity first)

?? 這個需要先解釋啥什么叫松弛度,可以理解成該任務為保證完成最晚從哪里開始到當前的長度。選短的(最緊迫)執行。這個理解比較抽象,舉個例子:

??進程A1執行截至時間是20,進程B1截至時間是50,A1執行時間是10,B1執行時間是25。那A1松弛度為10,B1松弛度為25。A1優先執行。A1到10的時候執行結束,其他任務還沒到,B1開始執行。到20時,A2到達,A2截至時間為40,執行時間為10,松弛度為10(30必須開始)。B1松弛度為15(已經執行了10,還有15,50-15-20=15)優先執行A2,依次類推,最終執行結果圖如下:

??三、死鎖

?? 前面陸續地介紹過了死鎖,死鎖一種現象。會讓程序運行終止,系統資源利用率降低。這節中更為詳細的介紹一下死鎖,并給出一些死鎖的解決辦法。
?? 了解了死鎖的含義,但也不知道怎么描述,下面給一個具體定義:如果一組進程中每個進程都在等待只有組內其他進程才能引發的事件,就稱這一組進程處于死鎖狀態。有個問題來了,如何避免死鎖呢?其實死鎖發生需要一些條件,如果我們能避免這些條件,那不就可以解除死鎖了嗎!我們稱這些條件為必要條件:

??對死鎖的解決還有三個策略:

??比較有意思的是,課程主要講了前兩種策略,但實際應用過程中第三種更為廣泛。但對于第三種也沒有深刻探究,還是就介紹下學過的吧!

?? 預防策略

?? 之前說要破壞條件,那上面介紹了四個條件?;コ鈼l件是不可避免的(因為互斥是為了保證進程之間有效運行的必要條件,所有進程的執行都需要滿足互斥,不能為了這個不管那個)
?? 另外三種都有一些方法(直接截圖介紹了):


?? 避免策略

?? 為什么要提出避免策略呢?是因為預防策略過于保守(怎么理解?預防策略解決問題的方式是直接不讓問題發生,這顯然是一種方法,但過程過于絕對,可能帶來一些其他的影響。更優的策略顯然是可以讓問題發生,并進而想方法解決問題。這就是避免策略!)避免 策略有一些新規定:

??簡單來說,避免策略的思想就是,如果一個操作會讓安全狀態變成不安全狀態,那么就不執行這個操作。那如何判定呢?不能每次都靠看啊。下面就介紹一個專門用來判斷的算法:銀行家算法。
?? 銀行家算法的思想是找到一個正確的就是正確的,找不到正確的就是錯誤的。算法的描述如下:
??有四個變量:
??Available:當前系統中可以進行分配的資源數
??Max:各進程所需要的最大資源數
?? Allocation:各進程已經分配的資源數
?? Need:各進程還需要的資源數 Need = Max – Allocaiton

?? 計算完四個變量后,就需要對操作進行判斷。有幾個步驟:
??1. 首先將進程請求設為變量request,如果requset小于need,跳轉2。否則認為出錯,因??為要求值超過宣布的最大值。
??2. 然后判斷request是否小于available,滿足到3,否則說明進程目前沒有足夠資源
??3. 試探將資源進程分配,然后啟用安全策略進行判斷。

??完成上面這些已經差不多一半兒了!下面看看安全性算法吧:

??結合一個具體的例子看下:

??按照上面的算法,其中變量的變換過程如下圖:

??第三章打板兒,繼續學習,繼續加油吧!

因作者水平有限,如有錯誤之處,請在下方評論區指出,謝謝!

總結

以上是生活随笔為你收集整理的三、处理机调度与死锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。