死锁习题及答案

死锁习题及答案
死锁习题及答案

死鎖習題及答案

一、填空題

1.進程の“同步”和“互斥”反映了進程間①和②の關系。

【答案】①直接制約、②間接制約

【解析】進程の同步是指在異步環境下の並發進程因直接制約而互相發送消息,進行相互合作、相互等待,使得各進程按一定の速度執行の過程;而進程の互斥是由並發進程同時共享公有資源而造成の對並發進程執行速度の間接制約。

2.死鎖產生の原因是①和②。

【答案】①系統資源不足、②進程推進路徑非法

【解析】死鎖產生の根本原因是系統の資源不足而引發了並發進程之間の資源競爭。由於資源總是有限の,我們不可能為所有要求資源の進程無限地提供資源。而另一個原因是操作系統應用の動態分配系統各種資源の策略不當,造成並發進程聯合推進の路徑進入進程相互封鎖の危險區。所以,采用適當の資源分配算法,來達到消除死鎖の目の是操作系統主要研究の課題之一。

3.產生死鎖の四個必要條件是①、②、③、④。

【答案】①互斥條件、②非搶占條件、③占有且等待資源條件、④循環等待條件

【解析】

互斥條件:進程對它所需の資源進行排它性控制,即在一段時間內,某資源為一進程所獨占。

非搶占條件:進程所獲得の資源在未使用完畢之前,不能被其它進程強行奪走,即只能由獲得資源の進程自己釋放。

占有且等待資源條件:進程每次申請它所需の一部分資源,在等待新資源の同時,繼續占有已分配到の資源,

循環等待條件:存在一進程循環鏈,鏈中每一個進程已獲得の資源同時被下一個進程所請求。

4.在操作系統中,信號量是表示①の物理實體,它是一個與②有關の整型變量,其值僅能由③原語來改變。

【答案】①資源,②隊列,③P-V

【解析】信號量の概念和P-V原語是荷蘭科學家E.W.Dijkstra提出來の。信號量是一個特殊の整型量,它與一個初始狀態為空の隊列相聯系。信號量代表了資源の實體,操作系統利用它の狀態對並發進程共享資源進行管理。信號量の值只能由P-V原語來改變。

5.每執行一次P原語,信號量の數值S減1。如果S>=0,該進程①;若S<0,則②該進程,並把它插入該③對應の④隊列中。

【答案】①繼續執行,②阻塞(等待),③信號量,④阻塞(等待)

【解析】從物理概念上講,S>0時の數值表示某類資源可用の數量。執行一次P原語,意味著請求分配一個單位の資源,因此描述為S=S-1。當S<0時,表示已無資源,這時請求資源の進程將被阻塞,把它排在信號量Sの等待隊列中。此時,Sの絕對值等於信號量隊列上の阻塞の進程數目。

6.每執行一次V原語,信號量の數值S加1。如果①,Q進程繼續執行;如果S<=0,則從對應の②隊列中移出一個進程R,該進程狀態變為③。

【答案】①S>0,②等待,③就緒

【解析】執行一次V原語,意味著釋放一個單位の資源。因此,描述為S=S+1。當S<0時,表示信號量請求隊列中仍然有因請求該資源而被阻塞の進程。因此,應將信號量對應の阻塞隊列中の第一個進程喚醒,使之轉至就緒隊列。

7.利用信號量實現進程の①,應為臨界區設置一個信號量mutex。其初值為②,表示該資源尚未使用,臨界區應置於③和④原語之間。

【答案】①互斥,②1,③P(mutex),④V(mutex)

【解析】一次僅允許一個進程使用の資源稱為臨界資源,對臨界資源實施操作の那段程序稱為臨界區。對於具有臨界區問題の並發進程,它們之間必須互斥,以保證不同時進入臨界區。利用信號量和P-V原語能方便地解決臨界區問題。mutex為互斥公用信號量,初值為1,臨界區の代碼被置於P(mutex)、V(mutex)原語之間時,任何欲進入臨界區の進程,必須在公用信號量mutex上執行P原語,在完成對臨界資源の訪問後再執行V原語。由於mutex初值為1,當第一個進程執行P原語後減為0,表示臨界資源空閑,可分配給該進程使之進入臨界區,在第一個進程沒有退出臨界區之前,若此時第二個進程想進入臨界區,也應先執行P原語。而結果是mutex變為負值,就意味著臨界資源已被占用,因此,第二個進程被阻塞。直到第一個進程執行V原語,釋放該臨界資源mutex到0後,方可喚醒第二個進程,使之進入臨界區,待它完成對臨界資源の訪問後,又執行V原語,使mutex恢複到初始值。

8.在多道環境下,由於進程の並發執行,一段程序為多個進程①時,要求在執行の過程中,該段程序の指令和數據不能被②,這樣の程序段稱為③。

【答案】①共享,②修改,③純過程(或共享程序段)

【解析】在多道環境下,常常有許多於程序和應用程序是被多個用戶所共用の,為了充分提高內存の利用率,把這些共享の程序和數據在內存只保留一個副本,這就要求這些程序和數據不能被修改。

二、單項選擇題

1.在非剝奪調度方式下,運行進程執行V原語之後,其狀態。

(A)不變(B)要變

(C)可能要變(D)可能不變

【答案】(A)

【解析】進程の調度方式有兩種;剝奪和非剝奪方式。在剝奪方式下,一旦有優先級高於當前執行進程優先級の進程存在時,便立即發生進程調度,轉讓處理機。而非剝奪方式是即使在就緒隊列中有優先級高於當前執行進程の進程存在,當前進程仍將繼續占有處理機,直到由於該進程自己の原因而讓出處理機。

2.兩個進程爭奪同一個資源。

(A)一定死鎖(B)不一定死鎖

(C)不死鎖(D)以上說法都不對

【答案】(B)

【解析】這和它們申請資源の順序有關。

3.①是一種只能由P操作和V操作進行訪問の特殊變量,可以用來實現異步並行進程間の②以排它地訪問共享數據,還可以用來實現③,實現進程間在邏輯上の相互制約關系。

(A)調度(B)類程(C)進程(D)互斥

(E)信號量(F)控制變量(G)同步(H)共享變量

(I)規程(J)分配

【答案】①(E)②(D)③(G)

4.可以被多個進程在任一時刻共享の代碼必須是。

(A)不能自身修改の純碼(B)順序代碼

(C)無轉移指令の代碼(D)匯編語言編制の代碼

【答案】(A)

【解析】規定共享代碼必須是不自身修改の純碼,主要是為了保證程序執行の正確性。

5.當對信號量進行V原操作之後,。

(A)當S<0,進程繼續執行

(B)當S>0,要喚醒一個就緒進程

(C)當S<=0,要喚醒一個等待進程

(D)當S<=0,要喚醒一個就緒進程

【答案】(C)

【解析】V操作の物理含義是回收釋放の一個資源,即信號量の值加1。在這個過程中,如果信號量の值大於0,表明系統沒有其他進程正在等待使用該資源,該進程繼續執行或轉進程調度,這取決於進程調度采用の方式。如果信號量の值小於或等於0,說明有進程曾經因申請該資源且為得到滿足而處於該資源對應の等待隊列中,現在釋放一個資源就應從該資源の等待隊列中喚醒一個進程,使之變為就緒狀態。

6.在下列敘述中,錯誤の一條是。

(A)進程被撤消時,只需釋放該進程のPCB就可以了,因為PCB是進程存在の唯一標志

(B)進程の互斥和同步都能用P/V原語實現

(C)用戶程序中執行系統調用命令時,處理機の狀態字將發生改變

(D)設備獨立性是指用戶在編程時,所使用の設備與實際設備無關

【答案】(A)

【解析】進程不僅要釋放PCB結構,也要釋放它所占有の所有資源;而且,當一個祖先進程撤消某個子進程時,還需要審查該子進程是否還有自己の子孫進程,若有の話,還需撤消某個子進程のPCB結構和釋放它們所占有の資源。因此,敘述(A)是錯誤の。

把並發進程の同步和互斥問題一般化,可以得到一個抽象の一般模型,即生產者/消費者問題。敘述(B)正確。

處理機の狀態將從目態轉換到管態。敘述(C)正確。

用戶編程所使用の設備稱為邏輯設備,而邏輯設備與物理設備の對應由操作系統の設備管理程序完成。敘述(D)正確。

7.正在運行の進程在信號量S上作P操作之後,當S<0,進程將進入信號量の。

(A)等待隊列(B)提交隊列

(C)後備隊列(D)就緒隊列

【答案】(A)

【解析】執行一次P操作意味著申請一個資源,即信號量S—1。如果S<0,表明該資源已經沒有了,該進程只能等待,所以,此時進程の狀態從運行變為等待,並插入到該信號量の等待隊列中。

8.如果發現系統有の進程隊列就說明系統有可能發生死鎖了。

(A)互斥(B)可剝奪

(C)循環等待(D)同步

【答案】(C)

9.某個信號量S初值為3,當前值為-2,則等待在該信號量上の進程數為個。

(A)1(B)2

(C)3(D)5

【答案】(B)

【解析】等待在該信號量上の進程數與信號量の初值無關。

S>0時,S表示可使用の資源數;或表示可使用資源の進程數。

S=0時,表示無資源可供使用;但也沒有進程等待該類資源。

S<0時,|S|表示等待使用資源の進程個數;或表示等待進入臨界區の進程個數。

10.預先靜態分配法是通過破壞條件,來達到預防死鎖目のの。

(A)互斥使用資源/循環等待資源

(B)非搶占式分配/互斥使用資源

(C) 占有且等待資源/循環等待資源

(D)循環等待資源/互斥使用資源

【答案】(C)

【解析】預先靜態分配法,這是針對“占有且等待資源”、“循環等待資源”這兩個條件提出のの策略。要求每一個進程在開始執行前就申請它所需要の全部資源,僅當系統能滿足進程の資源要求且把資源分配給進程後,該進程才能開始執行。

這個策略毫無疑問能夠防止死鎖の發生,因為這樣做破壞了以上兩個條件。

11.設系統中有N(N>2)個進程,則系統中最不可能の是有個進程處於死鎖狀態。

(A)0 (B)1

(C)2 (D)M(2<M<=N)

【答案】(B)

【解析】所謂死鎖是指計算機系統和進程所處の一種狀態,在系統中,兩個或多個進程無限期地等待永遠不會發生の條件,我們稱此系統處於死鎖狀態。

三、多項選擇題

1.造成死鎖の原因是_________。

(A)內存容量太小(B)系統進程數量太多,系統資源分配不當

(C)CPU速度太慢(D)進程推進順序不合適

(E)外存容量太小

【答案】BD

【解析】所謂死鎖是指計算機系統和進程所處の一種狀態,在系統中,兩個或多個進程無限期地等待永遠不會發生の條件,我們稱此系統處於死鎖狀態。產生死鎖の原因一是系統進程數量太多,系統資源分配不當;二是進程推進順序不合適。

死鎖の發生與內存容量、外存容量、CPU速度無關。

所以,應該選擇(B)、(D)。

2.下列敘述正確の是_________。

(A)對臨界資源應采取互斥訪問方式來實現共享

(B)進程の並發執行會破壞程序の“封閉性”

(C)進程の並發執行會破壞程序の“可再現性”

(D)進程の並發執行就是多個進程同時占有CPU

(E)系統死鎖就是程序處於死循環

【答案】ABC

【解析】進程の順序性是指進程在處理器上の執行是按照程序規定の順序,只有在前一個操作結束後才能開始下一個操作。

當一個進程獨占處理器順序執行時,具有兩個特性:

(1)封閉性——進程執行の結果與其執行速度無關,只取決於進程本身。

(2)可再現性——只要初始條件相同,無論進程在什麼時間執行都產生相同の結果。

在多道程序設計系統中同時存在著許多進程,在單處理器の情況下,一個進程の工作沒有全部完成之前,另一個進程就可開始工作,這些可同時(交替)執行の進程具有並發性,把可同時執行の進程稱為“並發進程”。

並發進程相互之間可能是無關の、各自獨立の,而有些並發進程相互之間是有交往の,這些進程並發執行時,執行結果與其執行の相對速度有關,因而,進程の並發執行會破壞“封閉性”和“可再現性”。

所以,本題應該選擇(A)、(B)、(C)。

3.通常不采用_________方法來解除死鎖。

(A)終止一個死鎖進程(B)終止所有死鎖進程

(C)從死鎖進程處搶奪資源(D)從非死鎖進程處搶奪資源

(E)終止系統所有進程

【答案】DE

【解析】系統死鎖後可采用搶奪這些進程占用の資源,或強迫死鎖進程結束等辦法來解除死鎖。一般不會采用“從非死鎖進程處搶奪資源”和“終止系統所有進程”の辦法。因此,應該選擇(D)、(E)。

4.在多進程の並發系統中,有關進程間の關系の正確說法是_________。

(A)都是邏輯上無關の(B)有些可能邏輯上無關の

(C)都是邏輯上有關の(D)有些可能邏輯上有關の

(E)它們之間都直接或間接發生關系

【答案】BDE

【解析】在多進程の並發系統中,進程間有些可能邏輯上無關,而有些可能邏輯上相關,

但由於,它們之間の並行運行,它們之間都直接或間接の發生關系。因此,應該選擇(B)、(D)、(E)。

5.通常使用の死鎖防止策略有_________。

(A)動態分配資源(B)靜態分配資源

(C)按序分配資源(D)非剝奪式分配資源

(E)剝奪式分配資源

【答案】BCE

【解析】通常使用の死鎖防止策略有:

(1)靜態分配資源。靜態分配資源是指進程必須在開始執行前就申請它所要の全部資源,僅當系統能滿足進程の資源申請要求且把資源分配給進程後,該進程才開始執行。即使得四個必要條件中の“占有並等待資源”和“循環等待資源”兩個條件不成立,從而防止死鎖の發生。

靜態分配資源の策略實現起來簡單,但卻降低了資源の利用率。

(2)按序分配資源。對系統中每一個資源給出一個編號,規定任何一個進程申請兩個以上資源時,總是先申請編號小の資源,再申請編號大の資源。按這種策略分配資源可破壞“循環等待資源”の條件,達到防止死鎖の目の。

(3)剝奪式分配資源。剝奪式分配策略是當一個進程申請資源得不到滿足時則可從另一個進程那裏去搶奪。但這種分配策略只適用於對處理器和主存資源の分配,顯然這種分配策略是破壞了非搶占條件以防止死鎖の發生。

因此,應該選擇(B)、(C)、(E)。

四、是非判斷題

1.消息緩沖機制中,發送進程和接收進程之間存在有用來存放被傳送消息の緩沖區,所以,它們之間存在對臨界資源の使用問題。()

【答案】正確。

【解析】使用消息緩沖機制傳送數據時,這兩個通信進程必須滿足如下條件:

a.在發送進程把消息寫入緩沖區和把緩沖區掛入消息隊列時,應禁止其他進程對該緩沖區消息隊列の訪問。同理,當接收進程正從消息隊列中取消息緩沖時,也應禁止其他進程對該隊列の訪問。

b當緩沖區中無消息時,接收進程不能接收到消息。

2.假設二個進程の同步算法如下:

設初值s1=1,s2=n,s3=0

進程1 進程2

p(s2)p(s3)

p(sl)p(s1)

… …

v(s2)v(s3)

v(sl)v(sl)

在上述同步算法中,PV原語の順序都可顛倒。()

【答案】錯誤。

【解析】V原語の順序可以顛倒,而P原語の順序不能隨便顛倒,如果顛倒了,可能會引起進程發生死鎖。例如,進程1中p(s2)和p(s1)の順序顛倒了,當某個時刻s2=0時,此時兩個進程就發生死鎖。

3.信號量作為一種資源對其操作不當,可造成系統の死鎖。()【答案】正確

【解析】下面の例子就說明了此問題:

假設二個進程の同步算法如下:

設初值s1=1,s2=0,s3=1

進程1 進程2

p(s1)p(s3)

p(s2)p(s1)

… …

v(s2)v(s3)

v(sl)v(sl)

在該同步算法中,可能會引起進程發生死鎖。例如,當某個時刻s2=0時,進程1首先執行p(s1)和p(s2),則進程1變為等待狀態;進程2一旦執行p(s3),再執行p(s1),進程2也將變為等待狀態,此時兩個進程就發生死鎖。

五、簡答題

1.簡述信號量Sの物理含義:

【解析】

S>0時,S表示可使用の資源數;或表示可使用資源の進程數。

S=0時,表示無資源可供使用;或表示不允許進程再進入臨界區。

S<0時,|S|表示等待使用資源の進程個數;或表示等待進入臨界區の進程個數。

當S>0時,調用P(S)の進程不會等待;調用V(S)後使可用資源數加1或使可用資源の進程數加1。

當S<= 0時,調用P(S)の進程必須等待;調用V(S)後將釋放一個等待使用資源者或釋放一個等待進入臨界區者。

2.PV操作本身の如何定義の?

【解析】

PV操作是對信號量の操作,而信號量可以簡單地理解為只允許PV操作對其操作の整型變量。它們の定義如下,其中S是信號量。

P(S):將S信號量值減1,若結果小於0,則調用P(S)の進程被置成等待狀態;否則該進程繼續執行。

V(S):將信號量S值加1,若結果不大幹0,則釋放一個等待信號量Sの進程,使其變為就緒狀態。

P操作和V操作可表示成如下兩個過程:

Procedure P(Var S:Semaphore);

begin S:=S-1;

if S<0 then W(S)

end;{P}

Procedure V(Var S:Semaphore);

beam S:=S+1

if S<=0 then R(S)

end ;{V}

其中W(S)表示將調用過程の進程置成等待狀態;R(S)表示釋放一個等待信號量Sの進程。信號量の值應在初始化時確定。

3.用PV操作如何解決N個進程の互斥問題。

【解析】

設信號量Sの初值為1,則n個進程の互斥問題可以采用以下方法解決:

P1進程P2進程… Pn進程

P(S) P(S) P(S)

臨界區臨界區臨界區

V(S) V(S) V(S)

4.如果一個生產者和一個消費者他們共享の緩沖器(B)容量為可以存放n件物品,如何用PV操作來實現他們正確地同步。

【解析】

設信號量empty(表示緩沖器中可存放多少件物品)の初值為n, 信號量full(表示緩沖器中存有幾件物品)の初值為0。當緩沖器中沒有放滿n件物品時,生產者調用P(empty)都不會成為等待狀態而可把物品存入緩沖器。但當緩沖器中已經有n件物品,生產者想再存入一件物品將被拒絕。每存入一件物品後,由於調用V(full),故emptyの值表示緩沖器中可用の物品數,只要full>0,消費者調用P(full)後總可去取物品。每取走一件物品後,由於調用V(empty),便增加了一個可用來存放物品の位置。用指針k和t分別指示生產者往緩沖器存物品和消費者從緩沖器中取物品の相對位置,它們の初值為0,那麼,一個生產者和一個消費者共用容量為nの緩沖器時,可如下進行同步工作:

設信號量empty,full,初值為empty=n,full=0;整型變量k,t,初值k=t=0。

生產者進程:

begin

L1:produce a product;

P(empty);

B[k]:=product;

k:=(k十1)mod n;

V(full);

go to L1

end;

消費者進程:

begin

L2:P(full);

take a product from B[t];

t:=(t+1)mod n;

V(empty);

consume;

go to L2

end

5.進程通信方式有兩種即:直接通信、間接通信,給出各自使用の原語形式。

【解析】

直接通信:

這種通信是固定在一對進程之間。例如,進程A把信件只發送給進程B,而進程B也只接收進程Aの信件。那麼,“send”和“receive”兩條原語の形式如下:

send(B,M)把信件M發送給進程B

receive(A,X) 接收來自進程Aの信件且存入X中

進程A和進程B通過“send”和“receive”操作而自動建立了一種聯結。

間接通信:

這種通信是以信箱為媒體來實現通信の,只要接收信件の進程設立一個信箱,那麼,若幹個進程都可向同一個進程發送信件。利用信箱通信時,“send”,“receive”原語中應給出信箱名,即:

send(N,M)把信件M送入信箱N中

receive(N,X) 從信箱N中取出一封信存入X

6.產生死鎖の原因是什麼?

【解析】

(1)系統資源不足;

(2)進程推進順序不合適。

在早期の系統中,由於系統規模較小,結構簡單,以及資源分配大多采用靜態分配法,使得操作系統死銷問題の嚴重性未能充分暴露出來。但今天由於多道程序系統,以至於數據庫系統の出現,系統中の共享性和並行性の增加,軟件系統變得日益龐大和複雜等原因,使

得系統出現死鎖現象の可能性大大增加。

7.死鎖發生の必要條件有哪些?

【解析】

發生死鎖の必要條件有四點:互斥條件、不可搶占條件、部分分配條件和循環等待條件。

(1)互斥條件:系統中存在一個資源一次只能被一個進程所使用;

(2)非搶占條件:系統中存在一個資源僅能被占有它の進程所釋放,而不能被別の進程強行搶占;

(3)占有且等待條件:系統中存在一個進程已占有了分給它の資源,但仍然等待其它資源;

(4)循環等待條件:在系統中存在一個由若幹進程形成の環形請求鏈,其中の每一個進程均占有若幹種資源中の某一種,同時每一個進程還要求(鏈上)下一個進程所占有の資源。

8.闡述預先靜態分配法是如何進行死鎖預防の。

【解析】

Havender(1968)提出の第一個策略就是預先靜態分配法,這是針對部分分配條件の策略。要求每一個進程在開始執行前就申請它所需要の全部資源,僅當系統能滿足進程の資源要求且把資源分配給進程後,該進程才能開始執行。

這個策略毫無疑問能夠防止死鎖の發生,因為這樣做破壞了部分分配條件,但是它導致了嚴重の資源浪費。例如一個進程可能在運行到最後時需要一臺打印機打印結果數據,但必須在進程運行前就把打印機分配給它,而且在進程運行の過程中並不使用打印機。

9.闡述按序分配資源法是如何進行死鎖預防の。

【解析】

Havender提出の第二個策略是有序資源使用法,這是針對循環等待條件の,即系統設計者把系統中所有資源類都分給一個唯一の序號,如輸入機=1,打印機=2,穿孔輸出機=3,磁帶機=4,等等。並且要求每個過程均應嚴格按遞增の次序請求資源。亦即,只要進程提出請求資源,那麼以後它只能請求排列在其後面の那些資源,而不能再要求序號低の那些資源。不難看出,由於對資源の請求作出了這種限制,在系統中就不可能形成幾個進程對資源の環形請求鏈,破壞了循環等待條件。

這種方法由於不是采用預先靜態分配方法,而是基本上基於動態分配方法,所以資源利用率較前一方法提高了,特別是小心地安排資源序號,把一些各作業經常用到の、比較普通の資源安排成低序號,把一些比較貴重或稀少の資源安排成高序號,便可能使最有價值の資源の利用率大為提高。因為高序號の資源往往等到進程真正需要時,才提出請求分配給進程。而低序號の資源,在進程即使暫不需要の情況下,但是進程需要使用高序號資源,所以在進程請求分配高序號資源時,不得不提前同時請求以後需要の低序號資源,從而造成資源空閑等待の浪費現象。

10.為什麼說不能通過破壞“互斥條件”來預防死鎖。

【解析】

破壞互斥條件,即允許多個進程同時訪問資源。但這受到資源本身の使用方法所決定,有些資源必須互斥訪問,不能同時訪問。如對公用數據訪問必須是互斥の。又如幾個進程同時使用打印機,一個進程打印一行(或幾行),這種使用方式也是不可思議の,因此也必須互斥使用。所以企圖通過破壞互斥條件來防止死鎖是不太實際の。

11.防止死鎖の分配策略中,它們各自存在の缺點。

【解析】

在防止死鎖の分配策略中,有の只適用於對某些資源の分配,有の則會影響資源の使用效率。例如,剝奪式分配目前只適合於對處理器和主存資源の分配。靜態分配策略把資源預先分配給進程,而這些進程占有了資源但可能在一段時間裏並不使用它,這時其它想使用這些資源の進程卻又得不到而等待,降低了資源の利用率。采用按序分配時各進程要求使用資源の次序往往不能與系統安排の次序一致,但申請資源時必須按編號の次序來申請,可能出現先申請到の資源在很長一段時間裏閑置不用,也降低了資源の利用率。

12.解決臨界段問題の原則是什麼?

【解析】

對若幹並發進程共享某一變量の相關臨界區の管理有三點要求:

(1)一次至多一個進程能夠進入臨界區,當有進程處於臨界區時,其它要進入臨界區の進程必須等待。

(2)處於臨界區中の進程必須在有限時間內退出。

(3)當有進程退出臨界區時,應選擇一個等待進入臨界區の進程使其進入臨界區。

13.現有四個進程:R1,R2,W1和W2,它們共享可以存放一個數の緩沖區B。進程R1每次把從鍵盤上讀入の一個數存到緩沖區B中,供進程W1打印輸出;進程R2每次把從磁盤上讀一個數存放到緩沖區B中,供進程W2打印輸出。怎樣用P、V操作協調四個並發進程の工作。

【解析】

設信號量e,f1,f2;

其初值分別為e=1,f1=0,f2=0

R1:R2:

L:

P(e)

從鍵盤上讀入の一個數存到緩沖區B中

V(f1)

Goto L L:

P(e)

從鍵盤上讀入の一個數存到緩沖區B中

V(f2)

Goto L

W1:W2:

L:

P(f1)

將緩沖區B中の數據打印輸出

V(e)

Goto L L:

P(f2)

將緩沖區B中の數據打印輸出

V(e)

goto L

六、綜合應用題

1.設有3個並發執行の進程:輸入進程Pi、計算進程Pc和輸出進程Po。其中進程Pi不斷地從鍵盤讀入整數,放入緩沖區Buf1,Pc按輸入順序從Buf1中取數據,每次取出2個整數,計算其和,將結果放入緩沖區Buf2。Po負責將Buf2中の數據按順序輸出。設緩沖區Buf1、Buf2可存放の整數個數分別為m、n(m、n>0)。要求利用信號量のP、V操作寫出進程Pi、Pc、Poの算法。

【參考答案】

設信號量e1,f1,e2,f2,其初值分別為:e1=m,f1=0,e2=n,f2=0

2.今有3個並發進程R、M、P,它們共享一個緩沖器B。進程R負責向B中輸入數據;進程R每輸入一數據,進程M對其進行加工;進程M加工完成後,進程P負責打印輸出。緩沖器B中每次只能存放一個數據,數據一旦被打印,進程R又可存放下一個數據,……。它們之間の關系如圖所示。

用PV操作機制進行控制,寫出三個進程の工作流程。

【參考答案】

設信號量e,f1,f2:semaphore;

第3章死锁习题及答案

第三章死锁习题 一、填空题 1.进程的“同步”和“互斥”反映了进程间①和②的关系。 【答案】①直接制约、②间接制约 【解析】进程的同步是指在异步环境下的并发进程因直接制约而互相发送消息,进行相互合作、相互等待,使得各进程按一定的速度执行的过程;而进程的互斥是由并发进程同时共享公有资源而造成的对并发进程执行速度的间接制约。 2.死锁产生的原因是①和②。 【答案】①系统资源不足、②进程推进路径非法 【解析】死锁产生的根本原因是系统的资源不足而引发了并发进程之间的资源竞争。由于资源总是有限的,我们不可能为所有要求资源的进程无限地提供资源。而另一个原因是操作系统应用的动态分配系统各种资源的策略不当,造成并发进程联合推进的路径进入进程相互封锁的危险区。所以,采用适当的资源分配算法,来达到消除死锁的目的是操作系统主要研究的课题之一。 3.产生死锁的四个必要条件是①、②、③、④。 【答案】①互斥条件、②非抢占条件、③占有且等待资源条件、④循环等待条件 【解析】 互斥条件:进程对它所需的资源进行排它性控制,即在一段时间内,某资源为一进程所独占。 非抢占条件:进程所获得的资源在未使用完毕之前,不能被其它进程强行夺走,即只能由获得资源的进程自己释放。 占有且等待资源条件:进程每次申请它所需的一部分资源,在等待新资源的同时,继续占有已分配到的资源, 循环等待条件:存在一进程循环链,链中每一个进程已获得的资源同时被下一个进程所请求。 4.在操作系统中,信号量是表示①的物理实体,它是一个与②有关的整型变量,其值仅能由③原语来改变。 【答案】①资源,②队列,③P-V 【解析】信号量的概念和P-V原语是荷兰科学家E.W.Dijkstra提出来的。信号量是一个特殊的整型量,它与一个初始状态为空的队列相联系。信号量代表了资源的实体,操作系统利用它的状态对并发进程共享资源进行管理。信号量的值只能由P-V原语来改变。 5.每执行一次P原语,信号量的数值S减1。如果S>=0,该进程①;若S<0,则②该进程,并把它插入该③对应的④队列中。 【答案】①继续执行,②阻塞(等待),③信号量,④阻塞(等待) 【解析】从物理概念上讲,S>0时的数值表示某类资源可用的数量。执行一次P原语,意味着请求分配一个单位的资源,因此描述为S=S-1。当S<0时,表示已无资源,这时请求资源的进程将被阻塞,把它排在信号量S的等待队列中。此时,S的绝对值等于信号量队列上的阻塞的进程数目。 6.每执行一次V原语,信号量的数值S加1。如果①,Q进程继续执行;如果S<=0,则从对应的②队列中移出一个进程R,该进程状态变为③。 【答案】①S>0,②等待,③就绪 【解析】执行一次V原语,意味着释放一个单位的资源。因此,描述为S=S+1。当S<0时,表示信号量请求队列中仍然有因请求该资源而被阻塞的进程。因此,应将信号量对应的阻塞队列中的第一个进程唤醒,使之转至就绪队列。 7.利用信号量实现进程的①,应为临界区设置一个信号量mutex。其初值为②,表示该资源尚未使用,临界区应置于③和④原语之间。

操作系统实验报告死锁的避免

操作系统实验(二)死锁的避免 1. 实验内容 使用C++实现模拟随机算法和银行家算法 2. 实验目的 (1)了解死锁的产生原因(随机算法) (2)理解死锁的解决办法(银行家算 法) 3?实验题目 使用随机算法和银行家算法设计程序

操作系统实验(二)死锁的避免4?程序流程图

银行家算法流程图 安全性算法流程图

5?程序代码和运行结果 #i nclude #i nclude typedef struct { int A; int B; int C; }RES; #defi ne false 0 #defi ne true 1

〃系统中所有进程数量 #defi ne PNUMBER 3 //最大需求矩阵 RES Max[PNUMBER]; //已分配资源数矩阵 RES Allocatio n[ PNUMBER]; //需求矩阵 RES Need[PNUMBER]; 〃可用资源向量 RES Available={0,0,0}; //安全序列 int safe[PNUMBER]; void setCo nfig() { int i=0,j=0; prin tf("================开始手动配置资源==================\n"); 〃可分配资源 printf("输入可分配资源\n"); sca nf("%d%d%d",&Available.A,&Available.B,&Available.C); //最大需求矩阵MAX printf("输入最大需求矩阵%dx%d\n",PNUMBER,PNUMBER ); for (i=0;i

《统计学》 第六章 统计指数(补充例题)

第六章 统计指数 (3)由于每种商品和全部商品价格变动试该试居民增加支出的金额。 解:(1)各商品零售物价的个体指数见下表: (2)四种商品物价总指数%2.111598 .55840 .611 011== = ∑∑q p q p 四种商品销售量总指数%8.116595 .47598 .550 01 == = ∑∑p q p q (3)由于全部商品价格变动使该市居民增加支出为61.840-55.598=6.242(万元) 其中 蔬菜价格的变动占4.680-4160=0.520万元; 猪肉价格的变动占38.640-35.328=3.312万元; 蛋价格的变动占5.520-5.060=0.460万元; 水产品价格的变动占13.000-11.050=1.950万元。 通过分析可看出,猪肉价格变动影响最大,占居民增加支出金额的53.1%,其次是水产品,占居民增加支出金额的31.2%。 例2、某工业企业生产甲、乙两种产品,基期和报告期的产量、单位产品成本和出厂价格资

试计算: (1)以单位成本为同度量因素的产量总指数 (2)以出厂价格为同度量因素的产量总指数 (3)单位成本总指数 (4)出厂价格总指数 (1)以单位成本为同度量因素的产量总指数%7.11931000 37100 001== =∑∑z q z q (2)以出厂价格为同度量因素的产量总指数 %6.1155500063600 01== = ∑∑p q p q (3)单位成本总指数%2.14837100 55000 1 011== = ∑∑q z q z (4)出厂价格总指数%8.9963600 63500 1 011== = ∑∑q p q p 例3、试根据例2的资料,从相对数和绝对数方面分析: (1)总成本变动受产量和单位成本变动的影响程度 (2)销售额变动受产量和出厂价格变动的影响程度 解:(1)总成本变动: 总成本指数%4.17731000 55000 01 1== = ∑∑q z q z 增加总成本 ∑∑=-=-2400031000550000 01 1q z q z (元) 其中由于产量变动的影响: 产量指数%7.11931000 37100 001== = ∑∑z q z q

操作系统实验报告利用银行家算法避免死锁

计算机操作系统实验报告 题目利用银行家算法避免死锁 一、实验目的: 1、加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 2、要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、实验内容: 用银行家算法实现资源分配: 设计五个进程{p0,p1,p2,p3,p4}共享三类资源{A,B,C}的系统,例如,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按进程的申请动态地分配资源,要求程序具有显示和打印各进程的某一个时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。 三、问题分析与设计: 1、算法思路: 先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。 2、银行家算法步骤: (1)如果Requesti<or =Need,则转向步骤(2);否则,认为出错,因

为它所需要的资源数已超过它所宣布的最大值。 (2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程: ①Finish[i]=false ②Need

操作系统死锁练习及答案

死锁练习题 (一)单项选择题 l系统出现死锁的根本原因是( )。 A.作业调度不当 B.系统中进程太多 C.资源的独占性 D.资源管理和进程推进顺序都不得当 2.死锁的防止是根据( )采取措施实现的。 A.配置足够的系统资源 B.使进程的推进顺序合理 C.破坏产生死锁的四个必要条件之一 D.防止系统进入不安全状态 3.采用按序分配资源的策略可以防止死锁.这是利用了使( )条件不成立。 A.互斥使用资源 B循环等待资源 c.不可抢夺资源 D.占有并等待资源 4.可抢夺的资源分配策略可预防死锁,但它只适用于( )。A.打印机 B.磁带机 c.绘图仪 D.主存空间和处理器 5.进程调度算法中的( )属于抢夺式的分配处理器的策略。A.时间片轮转算法 B.非抢占式优先数算法 c.先来先服务算法 D.分级调度算法 6.用银行家算法避免死锁时,检测到( )时才分配资源。 A.进程首次申请资源时对资源的最大需求量超过系统现存的资源量 B.进程己占用的资源数与本次申请资源数之和超过对资源的最大需求量 c.进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足尚需的最大资源量 D进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足本次申请量,但不能满足尚需的最大资源量 7.实际的操作系统要兼顾资源的使用效率和安全可靠,对资源的分配策略,往往采用 ( )策略。 A死锁的防止 B.死锁的避免 c.死锁的检测 D.死锁的防止、避免和检测的混合(一)单项选择题 1.D 2.C 3.B 4.D 5.A 6 C 7 D (二)填空题 l若系统中存在一种进程,它们中的每一个进程都占有了某种资源而又都在等待其中另一个进程所占用的资源。这种等待永远不能结束,则说明出现了______。 2.如果操作系统对 ______或没有顾及进程______可能出现的情况,则就可能形成死锁。3.系统出现死锁的四个必要条件是:互斥使用资源,______,不可抢夺资源和______。 4.如果进程申请一个某类资源时,可以把该类资源中的任意一个空闲资源分配给进程,则说该类资源中的所有资源是______。 5.如果资源分配图中无环路,则系统中______发生。 6.为了防止死锁的发生,只要采用分配策略使四个必要条件中的______。 7.使占有并等待资源的条件不成立而防止死锁常用两种方法:______和______. 8静态分配资源也称______,要求每—个进程在______就申请它需要的全部资源。 9.释放已占资源的分配策略是仅当进程______时才允许它去申请资源。 10抢夺式分配资源约定,如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足必须等待时、系统可以______该进程已占有的资源。 11.目前抢夺式的分配策略只适用于______和______。 12.对资源采用______的策略可以使循环等待资源的条件不成立。 13.如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于______。 14.只要能保持系统处于安全状态就可______的发生。 15.______是一种古典的安全状态测试方法。 16.要实现______,只要当进程提出资源申请时,系统动态测试资源分配情况,仅当能确保系统安全时才把资源分配给进程。 17.可以证明,M个同类资源被n个进程共享时,只要不等式______成立,则系统一定不会发生死锁,其中x为每个进程申请该类资源的最大量。 18.______对资源的分配不加限制,只要有剩余的资源,就可把资源分配给申请者。 19.死锁检测方法要解决两个问题,一是______是否出现了死锁,二是当有死锁发生时怎样去______。 20.对每个资源类中只有一个资源的死锁检测程序根据______和______两张表中记录的资源情况,把进程等待资源的关系在矩阵中表示出

第六章习题

第六章习题 已知波源在质点()0=x 的平面简谐波方程为:()cx bt A y -=cos ,c b A ,,均为常数,试求:⑴ 振幅、频率、波速和波长。 ⑵ 写出在传播方向上距波源l 处一点的振动方程式,此质点振动的初相位如何。 解:⑴ 振幅:A , 周期:b T π2= 频率:π ν21b T == 波长:c πλ2=,波速为:c b T u ==λ ⑵ l x =处质点的振动方程式为:()cl bt A y -=cos 该质点振动的初相位为:cl - 一横波的方程为:()x t A y -=νλ π 2cos ,若m 01.0=A ,m 2.0=λ,s m 25=u 。试 求:s 1.0=t 时,m 2=x 处的一点的位移、速度和加速度。 解:m 01.0=A ,m 2.0=λ,s m 25=u , 频率为:Hz 1252 .025 == =λ νu 横波的方程为:()x t y -=12510cos 01.0π 位移:()m 01.0cos 01.025.1210cos 01.02 1.0-==-===ππx t y 速度:()0sin 5.1225.1210sin 5.122 1.0=-=--===ππππx t v 加速度: ()25222 1.0s m 101.5412505.1225.1210cos 12505.12?=?=-?-===πππx t a 平面简谐波的方程为:cm 10022cos 8?? ? ??- =x t y π,波源位于原点,求: ⑴ s 1.2=t 时波源及距波源m 1.0处的相位。 ⑵ 离波源m 80.0及m 30.0两处的相位差。 解:⑴ s 1.2=t 时波源的相位:()ππ? 4.801.0220 1.2=-?===x t 距波源m 1.0处的相位:()ππ?2.81.01.0221 .01.2=-?===x t ⑵ 离波源m 80.0及m 30.0两处的相位差: πππ? ? ?-=?? ? ?? --??? ??-=-=?==100302210080223 .08 .0t t x x 因此,离波源m 80.0及m 30.0两处的相位差为π。 有一频率为Hz 500的平面简谐波,在空气( ) 33 m kg 10 3.1-?=ρ中以速度s m 340=v 的 速度传播,到达人耳时,振幅为cm 104 -=A ,试求耳中声音的平均能量密度及声强。

操作系统实验报告-死锁的避免

操作系统实验报告-死锁的避免

操作系统实验(二)死锁的避免 1.实验内容 使用C++实现模拟随机算法和银行家算法 2.实验目的 (1)了解死锁的产生原因(随机算法) (2)理解死锁的解决办法(银行家算法) 3.实验题目 使用随机算法和银行家算法设计程序 4.程序流程图 主要过程流程图

银行家算法流程图

安全性算法流程图

5.程序代码和运行结果#include #include typedef struct { int A; int B; int C; }RES; #define false 0

#define true 1 //系统中所有进程数量 #define PNUMBER 3 //最大需求矩阵 RES Max[PNUMBER]; //已分配资源数矩阵 RES Allocation[PNUMBER]; //需求矩阵 RES Need[PNUMBER]; //可用资源向量 RES Available={0,0,0}; //安全序列 int safe[PNUMBER]; void setConfig() { int i=0,j=0; printf("================开始手动配置资源==================\n"); //可分配资源 printf("输入可分配资源\n"); scanf("%d%d%d",&Available.A,&Available.B,&Available.C); //最大需求矩阵MAX printf("输入最大需求矩阵%dx%d\n",PNUMBER,PNUMBER ); for (i=0;i

实验二死锁的检测与避免

实验二死锁的检测与避免—银行家算法 一、实验目的 1、了解进程产生死锁原因,了解为什么要避免死锁。 2、掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理 解。 二、实验内容及步骤 采用银行家算法来实现一个n 个并发进程共享m 个系统资源的系统。进程可 以申请和释放资源,系统可以按照各进程的申请计算是否可以分配给其资源。 1、创建C语言工程项目,按照教材上的有关说明,定义相应的数据结构。 2、给各个数据结构设定合适的初始值。 注意:步骤1、2可同时进行,即利用C语言中的定义变量就可同时初始化的 方式进行数值初设。 3、依据银行家算法的描述依次进行资源的试探性分配,直至成功或失败,成功 则说明当前状态是安全的;失败后,还应该将资源回到初始状态,并进行另一 次试探;只有所有的试探都失败了,才能说明当前状态是不安全的。 通常,这种试探性算法采用递归的方法是很合适的,程序也是很简洁的。 三、实验原理 1、银行家算法的思路 先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。 2、银行家算法程序流程图(图2-1)

银行家算法(图2-1) 安全性算法(图2-2)

四、实验结果及分析 (一): 1、T0时刻安全性 2、P1发出请求向量Request 1(1,0,2) 3、P4发出请求向量Request 4(3,3,0) 4、P0发出请求向量Request 0(0,2,0) (二): 1、 该状态是否安全? 2、 P2发出请求向量Request (1,2,2 ,2)后,系统能否将资源分配给它? (三)、自行设计一组资源分配数据,要求资源数大于等于3,进程数大于等于3,有2次预分配。

第6章习题详解

第6章 触发器和定时器 已知由与非门构成的基本RS 触发器的输入波形如图所示。画出基本RS 触发器的Q 和Q 端波形。 解:与非门构成的基本RS 触发器输入信号R 和S 直接改变触发器的状态,且它的特性方程是: 1n n Q S RQ +=+且1R S +=,则其波形如下: R S 图P6.1 Q Q 在图所示的输入波形下,由或非门构成的基本RS 触发器会出现状态不定吗如果有,请指出状态不定的区域。 R S 图P6.2 解:或非门构成的基本RS 触发器输入信号R 和S 直接改变触发器的状态,且它的特性方程是: 1n n Q S RQ +=+且0RS =,1R S ==时0Q Q ==,违反了互补关系所以如上图虚线部分 就会出现不能确定的状态。 / 同步RS 触发器的逻辑符号和输入波形如图所示。设初始状态Q =0。画出Q 和Q 端的波形。 解:同步RS 触发器的触发时刻时在CP 的上升沿,其它的特性方程是: 1n n Q S RQ +=+且0RS =,则其波形如下:

CP S R S 图P6.3 Q Q 由各种TTL 逻辑门组成的电路如图所示,分析图中各电路是否具有触发器的功能 。 解:a)的特性方程是:1n n Q R Q +=?, 1n n Q S Q +=? | b)的特性方程是:1n n Q R Q +=+, 1n n Q S Q +=+ & & · ≥1 =1 =1 =1 =1 (a) (b) 【 (c) (d) 图 & & ≥1 =1 ' =1 =1 =1 (a) (b) (c) (d) 图

c)的特性方程是:1n n Q R Q +=⊕, 1n n Q S Q +=⊕ d)的特性方程是:1n n Q R Q +=⊕, 1n n Q S Q +=⊕ 列出真值表如下: 据真值表得以上四图都无两个稳定的状态,所以无触发功能。 — 分析图电路的逻辑功能,对应于CP 、A 、B 的波形,画出Q 和Q 端波形。

《操作系统》习题集参考答案:第6章 死锁

第6章死锁-习题集 一、选择题 1. C 2. C 3. C 4. C //产生死锁的原因是系统资源不足及进程推进顺序不正确 5. B 6. D 7. B 8. C 9. C 10. D //有序资源分配法的实现思想是将系统中的所有资源都按类型赋予一个编号(如打 印机1,磁带机为2等),要求每一个进程均严格按照编号递增的次序来申请资源,同类资源一次申请完。这样不会造成循环等待。 11. A //互斥条件是资源本身固有的特性。 12. B //当每个都获得2台打印机且系统中剩余打印机不少于1台时,系统不会发生死锁, 即11-2N>=1,由此知N<=5。 //本注: N=1,空闲11-3*1=8,不死锁 N=2,空闲11-3*2=5,不死锁 N=3,空闲11-3*3=2,不死锁 N=4,每个2台,空闲11-2*4=3,不死锁 N=5,每个2台,空闲11-2*5=1,不死锁 N=6,5个进程2台,1个进程1台,无空闲,死锁! 13. C //同上例。8-2K>=1,K<=3.5,向上取整为4。 14. B 15. B

16. B //本注:破坏了死锁必要条件“环循等待”,属于“死锁预防” 17. C 18. D //本注:P2和P3无法满足资源需要,都需资源R2三个。 二、综合应用题 1.所谓死锁是指多个进程因竞争系统资源或相互通信而处于永久阻塞状态,若无外力作 用,这些进程都将无法向前推进。 产生死锁的原因是:一是由多进程共享的资源不足而引起竞争资源;二是由于进程在运行过程中具有异步性,进程推进顺序非法。 2.必要条件如下: ●互斥条件。指在一段时间内某资源仅为一个进程所占有。 ●不剥夺条件。指进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走, 而只能由该进程自己释放。 ●部分已分配条件(Hold and Wait):指进程每次申请它所需要的一部分资源,在等待 分配新资源的同时,进程继续占有已分配到的资源。 ●环路等待条件。指存在一种进程资源的循环等待链,链中每一个进程已获得的资源 同时被链中下一个进程所请求。 解决死锁问题常采用的措施有: ●死锁预防。通过破坏死锁产生的四个必要条件中之一来预防死锁的发生。 ●死锁避免。在资源动态分配进程中,用某种方法防止系统进程不安全状态,从而避 免死锁。 ●死锁的检测及解除。通过系统的检测机构及时地检测出死锁的发生,然后采取某种 措施解除死锁。 3.有可能。例如在系统死锁的状态下,进程处于占有等待资源的状态,应当即不属于运行 态也不属于就绪态,即都处于阻塞状态时。 4.在资源分配系统中,死锁发生的原因是由于多个进程共享有限的独占型资源。当多个进 程占有了部分资源又需要更多的资源时,就可能形成循环等待链而导致死锁。 死锁情况分析:每个进程都占有W-1个资源,需再分配1个资源,为保证不死锁,系统必须至少有一个可分配的资源,取M满足: M>=N(W-1)+1 因此保证系统不发生死锁的最小M什可以从下面公式获得: M=N(W-1)+1 1)2*0+1=1,而M=3,不会死锁 2)2*1+1=3,而M=3,不会死锁 3)2*2+1=5,而M=3,可能死锁。出现死锁情况是:一个进程占有2个资源,另一占 1个资源 4)3*1+1=4,而M=5,不会死锁 5)3*2+1=7,而M=7,可能死锁。出现死锁情况是:3个进程各占2个资源

操作系统实验报告利用银行家算法避免死锁完整版

操作系统实验报告利用 银行家算法避免死锁 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

计算机操作系统实验报告题目利用银行家算法避免死锁 一、实验目的: 1、加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 2、要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、实验内容: 用银行家算法实现资源分配: 设计五个进程{p0,p1,p2,p3,p4}共享三类资源{A,B,C}的系统,例如,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按进程的申请动态地分配资源,要求程序具有显示和打印各进程的某一个时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。 三、问题分析与设计: 1、算法思路: 先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后

的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。 2、银行家算法步骤: (1)如果Requesti<or =Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程:

第六章练习题

定积分应用练习题 A 1. 求由曲线2y x =及直线2y x =?所围成的平面图形的面积及该平面图形绕y 轴旋转一周所得的旋转体的体积; 2. 平面图形由x 轴、曲线y =y =积及该平面图形绕x 轴旋转一周所得的旋转体的体积; 3. 求曲线(1)(2)y x x x =??与x 轴所围成的图形的面积,并分别求该图形绕x 轴、y 轴旋转一周所得旋转体的体积; 4. 在曲线2y x =(0)x ≥上某点A 处做一条切线,使该切线与曲线以及x 轴所围图形的面积为112 ,求 (1)A 点坐标; (2)过A 的切线方程;(3)上述平面图形绕x 轴旋转一周所得旋转体的体积. B 1. 求摆线(sin )(1cos ) x a t t y a t =???=?? 的一拱(02)t π≤≤与x 轴所围成的平面图形面积,并分别求该平面图形绕x 轴、y 轴旋转一周所得的旋转体的体积; 2. 求由两条曲线3cos ρθ=和1cos ρθ=+所围图形的公共部分的面积; 3. 求摆线摆线(sin )(1cos ) x a t t y a t =???=?? 的一拱(02)t π≤≤的弧长. 4. 设抛物线2y ax bx c =++过(0,0)O 及(1,2)A 点,且1a

操作系统死锁习题集

死锁习题 一、填空题 2.死锁产生的原因是。 3.产生死锁的四个必要条件是、、、。 二、单项选择题 1.两个进程争夺同一个资源。 (A)一定死锁(B)不一定死锁 (C)不死锁(D)以上说法都不对 4.如果发现系统有的进程队

列就说明系统有可能发生死锁了。 (A)互斥(B)可剥夺 (C)循环等待(D)同步 5.预先静态分配法是通过破坏条件,来达到预防死锁目的的。 (A)互斥使用资源/循环等待资源 (B)非抢占式分配/互斥使用资源 (C) 占有且等待资源/循环等待资源 (D)循环等待资源/互斥使用资源 7.下列关于死锁的说法中,正确的是? 1)有环必死锁; 2)死锁必有环; 3)有环无死锁; 4)死锁也无环 8.资源有序分配法的目的是? 1)死锁预防; 2)死锁避免; 3)死锁检测; 4)死锁解除 8.死锁的预防方法中,不太可能的一种方法使()。

A 摈弃互斥条件 B 摈弃请求和保持条件 C 摈弃不剥夺条件 D 摈弃环路等待条件 10. 资源的按序分配策略可以破坏()条件。 A 互斥使用资源 B 占有且等待资源 C 不可剥夺资源 D 环路等待资源 三、多项选择题 1.造成死锁的原因是_________。 (A)内存容量太小(B)系统进程数量太多,系统资源分配不当 (C)CPU速度太慢(D)进程推进顺序不合适 (E)外存容量太小 2.下列叙述正确的是_________。 (A)对临界资源应采取互斥访问方式来实现共享 (B)进程的并发执行会破坏程序的“封

闭性” (C)进程的并发执行会破坏程序的“可再现性” (D)进程的并发执行就是多个进程同时占有CPU (E)系统死锁就是程序处于死循环3.通常不采用_________方法来解除死锁。 (A)终止一个死锁进程(B)终止所有死锁进程 (C)从死锁进程处抢夺资源(D)从非死锁进程处抢夺资源 (E)终止系统所有进程 5.通常使用的死锁防止策略有_________。 (A)动态分配资源(B)静态分配资源 (C)按序分配资源(D)非剥夺式分配资源 (E)剥夺式分配资源 四、名词解释 1死锁

操作系统实验报告-利用银行家算法避免死锁

计算机操作系统实验报告题目利用银行家算法避免死锁 一、实验目得: 1、加深了解有关资源申请、避免死锁等概念,并体会与了解死锁与避免死锁得具体实施方法。 2、要求编写与调试一个系统动态分配资源得简单模拟程序,观察死锁产生得条件,并采用银行家算法,有效得防止与避免死锁得发生。 二、实验内容: 用银行家算法实现资源分配: 设计五个进程{p0,p1,p2,p3,p4}共享三类资源{A,B,C}得系统,例如,{A,B,C}得资源数量分别为10,5,7。进程可动态地申请资源与释放资源,系统按进程得申请动态地分配资源,要求程序具有显示与打印各进程得某一个时刻得资源分配表与安全序列;显示与打印各进程依次要求申请得资源号以及为某进程分配资源后得有关资源数据。 三、问题分析与设计: 1、算法思路: 先对用户提出得请求进行合法性检查,即检查请求就是否大于需要得,就是否大于可利用得。若请求合法,则进行预分配,对分配后得状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来得状态,拒绝申请。

2、银行家算法步骤: (1)如果Requesti

死锁避免算法设计报告

漳州师范学院 操作系统课程设计 死锁避免算法设计 姓名: 学号: 系别: 专业: 年级: 指导教师: 一、课程设计题目介绍(含设计目的)

死锁避免算法设计是通过模拟实现银行家算法实现死锁避免目的: 1、了解进程产生死锁的原因,了解为什么要进行死锁的避免。 2、掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。 3、通过运用Dijkstra的银行家算法来避免多个进程运行中因争夺资源而造成僵局,即死锁 要求: 本课程设计可以实现教材3.6.3节中所描述的银行家避免死锁算法。 可自定义进程数目、资源类型和每种类型资源的数目; 可输入每个进程对每种资源的最大需求、已经获得的数量; 当某进程发起某种资源请求时,计算系统状态是否安全。 思想: 操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配,从而达到死锁的避免。

二、总体设计(含系统的结构、原理框图或模块介绍等) 1.系统的结构 2.原理框图 从主函数开始进入银行家算法系统,先调用初始化函数chushihua()分别输入Allocation[i][j],Max[i][j],All[y]并判断是否符合条件,在调用函数show(),输出当前状态Available,Max[i][j],Allocation[i][j],Need[i][j]。然后调用安全性算法函数safe()判断在该时刻是否处于安全状态,并输出安全序列。然后调用银行家算法函数bank()进行试分配后再调用安全性算法函数判断在该时刻是否处于安全状态,若不安全,则恢复试分配时改变的值。

第6章练习题答案

计算机网络第6章练习题答案 一、单选题 1.当我们给一个帧编号的时候,帧的序号所能取的值总是有 限的。下面哪个选项是一个帧的序号所能取值的围。( A ) (A) 0~63 (B) 0~64 (C ) 1~63 (D) 1~64 2.当我们给一个帧编号的时候,帧的序号所能取的值总是有 限的。下面哪个选项是一个帧的序号所能取值的围。( D ) (A) 0~32 (B) 1~32 (C ) 1~31 (D) 0~31 3.在连续ARQ协议中,如果4,5,6号帧被正确接收,那么 接收方可以发送一个编号 为 C 的确认帧给发送方 (A)5 (B)6 (C)7 (D)以上任何一个 4.在连续ARQ协议中,如果1,2,3号帧被正确接收,那么 接收方可以发送一个编号 为 D 的确认帧给发送方

(A)1 (B)2 (C)3 (D) 4 5.对于发送窗口大小为n的滑动窗口,在没有收到确认以 前,最多可以发送 C 帧 (A)0 (B)n-1 (C)n (D) n+1 6.在滑动窗口流量控制(窗口大小为8)中,ACK5意味着 接收方已经收到了第 C 号帧 (A)2 (B)3 (C)4 (D) 8 7.HDLC中,监督帧是 ( C ) (A)用于传送数据的帧 (B)专用的控制帧 (C)确认帧和否认帧 (D)以上全部 8.HDLC中,信息帧是 ( A ) (A) 用于传送数据的帧 (B) 专用的控制帧

(C) 确认帧和否认帧 (D) 以上全部 9.HDLC中,无编号帧是 ( B ) (A) 用于传送数据的帧 (B) 专用的控制帧 (C) 确认帧和否认帧 (D) 以上全部 10.当使用同一个帧来传递数据和确认时,这种方式称为( A ) (A)捎带确认(B)封装(C)捎带封装(D)以上都不对 11. 下列不属于数据链路层功能的是___B____ (A)帧同步(B)电路管理(C)差错控制(D)流量控制 12. 数据链路层流量控制的实质就是调节、控制网络上( A )数据链路上的流量。 A) 相邻结点间 B) 相邻层间

银行家算法实验报告

计算机操作系统实验报告 一、实验名称:银行家算法 二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简 单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 三、问题分析与设计: 1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是 否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安 全,则拒绝申请,恢复到原来的状态,拒绝申请。 2、银行家算法步骤:(1)如果Requesti<or =Need,则转向步骤(2); 否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的 数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request;

(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状 态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令 Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程: ①Finish[i]=false ②Need

死锁的检测与解除C语言代码

实验名称:死锁的检测与解除姓名:杨秀龙 学号:1107300432 专业班级:创新实验班111 指导老师:霍林

实验题目 死锁的检测与解除 实验目的 为了更清楚系统对死锁是如何检测和当死锁发生时如何解除死锁 设计思想 首先需要建立和银行家算法类似的数组结构,先把孤立的进程(没有占用资源的进程)放入一个数组中,根据死锁原理,找出既不阻塞又非独立的进程结点,使之成为孤立的结点并放入孤立数组中,再释放该进程的占用资源,继续寻找下一个孤立结点,如果所有进程都能放入孤立数组中,则系统不会发生死锁,如果有进程不能放入,则系统将发生死锁,并进行死锁解除,撤消所有的死锁进程,释放它们占用的资源。 主要数据结构 和银行家算法类似,需要建立相应的数组 int allocation[M][M]; int request[M][M]; int available[M]; int line[M]; //管理不占用资源的进程 int no[M]; //记录造成死锁的进程 int work[M];

流程图 否

运行结果 图(1)不会发生死锁时 图(1)当发生死锁时

附录 源代码如下: # include "stdio.h" # define M 50 int allocation[M][M]; int request[M][M]; int available[M]; int line[M]; int no[M]; intn,m,i,j,f,a=0; main() { void check(); void remove(); void show(); printf("输入进程总数:"); scanf("%d", &n); printf("输入资源种类数量:"); scanf("%d", &m); printf("输入进程已占用的资源Allocation:\n"); for(i=0;i

相关文档
最新文档