調度風險

調度風險

調度在計算機中是分配工作所需資源的方法。資源可以指虛擬的計算資源,如執行緒、進程或數據流;也可以指硬體資源,如處理器、網路連線或擴展卡。調度風險是指進程或作業被處理機調度運行使系統發生死鎖的風險,主要原因是調度引起多個進程或作業爭奪非剝奪性資源。

基本介紹

  • 中文名:調度風險
  • 外文名:schedule risk
  • 領域:作業系統
  • 定義:系統發生死鎖的風險
  • 原因:爭奪非剝奪性資源
  • 有關術語:死鎖
簡介,死鎖,可剝奪和非剝奪性資源,避免策略,

簡介

作業系統管理了系統的有限資源,當有多個進程(或多個進程發出的請求)要使用這些資源時,因為資源的有限性,必須按照一定的原則選擇進程(請求)來占用資源。這就是調度。調度風險是指計算機系統採用某種調度策略來調度進程被處理機運行時使整個系統出現死鎖的機率。

死鎖

現代作業系統的特點之一,是動態地調度系統各項資源,以提高資源利用率,然而資源動態分配有時會導致系統發生死鎖現象。所謂死鎖就是系統運行過程中的某一時刻,一組進程中的每一個進程都占用著一些資源,同時又要得到該組中其他進程占用的資源,這樣,該組中無論哪一個進程都得不到滿足,因而該組中的所有進程都無法繼續進行。例如:在只有一台印表機和一台輸入機的情況下,假定甲進程正占用著輸入機,而且還要得到印表機,但印表機正被乙進程占有著,乙進程在未釋放印表機之前又要求甲進程占用的輸入機,則這兩個進程都無法進行,進入死鎖狀態。死鎖的產生原因可以歸結為兩點:有限資源的競爭;進程的推進順序。當系統中供多個進程並發執行共享的資源不能同時滿足各個進程執行的需要時, 如果此時進程推進的順序非法, 就會因各個進程爭奪資源而造成系統死鎖。死鎖的發生必須具備下列四個必要條件。互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其它進程請求該資源,則請求者只能等待,直至占有該資源的進程用畢釋放。請求和保持條件:指進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源又已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈。

可剝奪和非剝奪性資源

可把系統中的資源分成兩類,一類是可剝奪性資源,是指某進程在獲得這類資源後,該資源可以再被其他進程或系統剝奪。例如,優先權高的進程可以剝奪優先權低的進程的處理機。又如,記憶體區可由存儲器管理程式把一個進程從一個存儲區移到另一個存儲區,此即剝奪了該進程原來占有的存儲區。甚至可將一個進程從記憶體調出到外存上。可見,CPU和主存均屬於可剝奪性資源。另一類資源是不可剝奪性資源,當系統把這類資源分配給某進程後,再不能強行收回,只能在進程用完後自行釋放,如磁帶機、印表機等。

避免策略

摒棄“請求和保持”條件
在採用這種方法時,系統規定所有進程在開始運行之前,都必須一次性地申請其在整個運行過程所需的全部資源。此時,若系統有足夠的資源分配給某進程,便可把其需要的所有資源分配給該進程,這樣,該進程在整個運行期間便不會再提出資源要求,從而摒棄了請求條件。但在分配資源時,只要有一種資源不能滿足某進程的要求,即使其它所需的各資源都空閒,也不分配給該進程,而讓該進程等待。由於在該進程的等待期間,它並未占有任何資源,因而也摒棄了保持條件,從而可以避免發生死鎖。這種預防死鎖的方法其優點是簡單、易於實現且很安全。但其缺點卻也極其明顯:首先表現為資源被嚴重浪費,因為一個進程是一次性地獲得其整個運行過程所需的全部資源的,且獨占資源,其中可能有些資源很少使用,甚至在整個運行期間都未使用,這就嚴重地惡化了系統資源的利用率;其次是使進程延遲運行,僅當進程在獲得了其所需的全部資源後,才能開始運行,但可能因有些資源已長期被其它進程占用而致使等待該資源的進程遲遲不能運行。
摒棄“不剝奪”條件
在採用這種方法時系統規定,進程是逐個地提出對資源的要求的。當一個已經保持了某些資源的進程,再提出新的資源請求而不能立即得到滿足時,必須釋放它已經保持了的所有資源,待以後需要時再重新申請。這意味著某一進程已經占有的資源,在運行過程中會被暫時地釋放掉,也可認為是被剝奪了,從而摒棄了“不剝奪”條件。這種預防死鎖的方法實現起來比較複雜且要付出很大的代價。因為一個資源在使用一段時間後,它的被迫釋放可能會造成前段工作的失效,即使是採取了某些防範措施,也還會使進程前後兩次運行的信息不連續,例如,進程在運行過程中已用印表機輸出信息,但中途又因申請另一資源未果而被迫暫停運行並釋放印表機,後來系統又把印表機分配給其它進程使用。當進程再次恢復運行並再次獲得印表機繼續列印時,這前後兩次列印輸出的數據並不連續,即列印輸出的信息其中間有一段是另一進程的。此外,這種策略還可能因為反覆地申請和釋放資源,致使進程的執行被無限地推遲,這不僅延長了進程的周轉時間,而且也增加了系統開銷,降低了系統吞吐量。
摒棄“環路等待”條件
這種方法中規定,系統將所有資源按類型進行線性排隊,並賦予不同的序號。例如,令輸入機的序號為 1,印表機的序號為 2,磁帶機為 3,磁碟為 4。所有進程對資源的請求必須嚴格按照資源序號遞增的次序提出,這樣,在所形成的資源分配圖中,不可能再出現環路,因而摒棄了“環路等待”條件。事實上,在採用這種策略時,總有一個進程占據了較高序號的資源,此後它繼續申請的資源必然是空閒的,因而進程可以一直向前推進。這種預防死鎖的策略與前兩種策略比較,其資源利用率和系統吞吐量都有較明顯的改善。但也存在下述嚴重問題:首先是為系統中各類資源所分配(確定)的序號必須相對穩定, 這就限制了新類型設備的增加。其次,儘管在為資源的類型分配序號時,已經考慮到大多數作業在實際使用這些資源時的順序,但也經常會發生這種情況:即作業(進程)使用各類資源的順序與系統規定的順序不同,造成對資源的浪費。例如,某進程先用磁帶機,後用印表機,但按系統規定,該進程應先申請印表機而後申請磁帶機,致使先獲得的印表機被長時間閒置。第三,為方便用戶,系統對用戶在編程時所施加的限制條件應儘量少。然而這種按規定次序申請的方法,必然會限制用戶簡單、自主地編程。
安全狀態
在避免死鎖的方法中,允許進程動態地申請資源,但系統在進行資源分配之前,應先計算此次資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給進程;否則,令進程等待。所謂安全狀態,是指系統能按某種進程順序(P 1 ,P 2 ,…,P n )(稱〈P 1 ,P 2 ,…,P n 〉序列為安全序列),來為每個進程 P i 分配其所需資源,直至滿足每個進程對資源的最大需求,使每個進程都可順利地完成。如果系統無法找到這樣一個安全序列,則稱系統處於不安全狀態。雖然並非所有的不安全狀態都必然會轉為死鎖狀態,但當系統進入不安全狀態後,便有可能進而進入死鎖狀態;反之,只要系統處於安全狀態,系統便可避免進入死鎖狀態。因此,避免死鎖的實質在於:系統在進行資源分配時,如何使系統不進入不安全狀態。

相關詞條

熱門詞條

聯絡我們