c語言銀行家算法安全性判別
免死鎖的算法。 要解釋銀行家算法,必須先解釋操作系統(tǒng)安全狀態(tài)和不安全狀態(tài)。 安全狀態(tài):如果存在一個由系統(tǒng)中所有進(jìn)程構(gòu)成的安全序列P1,…,Pn,則系統(tǒng)處于安全狀態(tài)。安全狀態(tài)一定是沒有死鎖發(fā)生。 不安全狀態(tài):不存在一個安全序列。
用銀行家算法判斷下述每個狀態(tài)是否安全。如果安全,說明所有進(jìn)程是如何能夠運(yùn)行完畢的。如果不安全,說明為什么可能出現(xiàn)死鎖。
設(shè)進(jìn)程cusneed提出請求REQUEST [i],則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果REQUEST [cusneed] [i]= NEED[cusneed][i],則轉(zhuǎn)(2);否則,出錯。
銀行家算法假定前提如下:p0 ~ p 4 各掌握有銀行家的若干資源,但要求完成他們的目標(biāo),分別還需要請求若干資源。現(xiàn)在,銀行家已經(jīng)付出很多資源,手里資源不多。而pX 們另外需求的資源也是大小不一的。
銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。設(shè)進(jìn)程cusneed提出請求REQUEST [i],則銀行家算法按如下規(guī)則進(jìn)行判斷。
//cout調(diào)用銀行家算法;bSafe=banker(iAllocation,iNeed,iAvailable,cName);if (bSafe) //安全,則輸出變化后的數(shù)據(jù) output(iMax,iAllocation,iNeed,iAvailable,cName);break;case n:cout退出。
用C語言或C++編寫操作系統(tǒng)作業(yè):銀行家算法
1、我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請求分配資源相當(dāng)于用戶向銀行家貸款。
2、利用銀行家算法避免死鎖 . 銀行家算法 設(shè)Requesti是進(jìn)程Pi的請求向量,如果Requesti〔j〕=K,表示進(jìn)程Pi需要K個Rj類型的資源。
3、銀行家算法是一種最有代表性的避免死鎖的算法。在避免死鎖方法中允許進(jìn)程動態(tài)地申請資源,但系 銀行家算法統(tǒng)在進(jìn)行資源分配之前,應(yīng)先計(jì)算此次分配資源的安全性,若分配不會導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),則分配,否則等待。
4、銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。設(shè)進(jìn)程cusneed提出請求REQUEST [i],則銀行家算法按如下規(guī)則進(jìn)行判斷。
操作系統(tǒng)-銀行家算法問題
1、銀行家算法是死鎖避免的重要算法。銀行家算法:資源==錢;收回資源==收回貸款;收不回資源==不會放貸;例題:假設(shè)系統(tǒng)中有三類互斥資源R1,R2,R3。
2、銀行家算法: 設(shè)Requesti是進(jìn)程Pi的請求向量,如果Requesti[j]=K,表示進(jìn)程Pi需要K個Rj類型的資源。
3、②采用銀行家算法進(jìn)行計(jì)算分析可知:系統(tǒng)可以滿足P2進(jìn)程對資源的請求,將資源分配給P2之后,至少可以找到一個安全的執(zhí)行序列,如(P2, P1, P3, P4)使各進(jìn)程正常運(yùn)行終結(jié)。
4、比如1單位是1千美元),銀行家知道不可能所有客戶同時都需要最大貸款額,所以他只保留10個單位而不是22個單位的資金來為客戶服務(wù)。這里將客戶比作進(jìn)程,貸款單位比作資源,銀行家比作操作系統(tǒng)。
5、為實(shí)現(xiàn)銀行家算法,系統(tǒng)必須設(shè)置若干數(shù)據(jù)結(jié)構(gòu)。要解釋銀行家算法,必須先解釋操作系統(tǒng)安全狀態(tài)和不安全狀態(tài)。
6、第一問,系統(tǒng)目前處于安全狀態(tài),存在安全序列BADEC;第二問,可以分配,系統(tǒng)可以先滿足B進(jìn)程,之后滿足C進(jìn)程后資源數(shù)能達(dá)到3856,足夠了。