?? 操作系統(tǒng)實踐試題 → 【操作系統(tǒng)】之銀行家算法——易自考我的大學自學考試資料中心自考生的心靈家園.txt
字號:
操作系統(tǒng)實踐試題 → 【操作系統(tǒng)】之銀行家算法——易自考::我的大學::自學考試資料中心::自考生的心靈家園>>收藏本頁 >>>快速收藏本頁
【操作系統(tǒng)】之銀行家算法
作者:陳征 發(fā)表時間:2003-8-21 20:08:00
操作系統(tǒng)實驗報告
報告人: ***
準考證號:***** 工大上機號***
聯(lián)系方式:*****************
日期:2003年8月7日
實驗二:銀行家算法
一、目的和要求
銀行家算法是避免死鎖的一種重要方法,本實驗要求用高級語言編寫和調(diào)試一個簡單的銀行家算法程序。加深了解有關(guān)資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。
二、實驗內(nèi)容
1.設計進程對各類資源最大申請表示及初值確定。
2.設定系統(tǒng)提供資源初始狀況。
3.設定每次某個進程對各類資源的申請表示。
4.編制程序,依據(jù)銀行家算法,決定其申請是否得到滿足。
三、說明
1.數(shù)據(jù)結(jié)構(gòu)
假設有M個進程N類資源,則有如下數(shù)據(jù)結(jié)構(gòu):
MAX[M*N] M個進程對N類資源的最大需求量
AVAILABLE[N] 系統(tǒng)可用資源數(shù)
ALLOCATION[M*N] M個進程已經(jīng)得到N類資源的資源量
NEED[M*N] M個進程還需要N類資源的資源量
2.銀行家算法
設進程I提出請求Request[N],則銀行家算法按如下規(guī)則進行判斷。
(1)如果Request[N]<=NEED[I,N],則轉(zhuǎn)(2);否則,出錯。
(2)如果Request[N]<=AVAILABLE,則轉(zhuǎn)(3);否則,出錯。
(3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù):
AVAILABLE=AVAILABLE-REQUEST
ALLOCATION=ALLOCATION+REQUEST
NEED=NEED-REQUEST
(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統(tǒng)恢復原狀,進程等待。
3.安全性檢查
(1)設置兩個工作向量WORK=AVAILABLE;FINISH[M]=FALSE
(2)從進程集合中找到一個滿足下述條件的進程,
FINISH[i]=FALSE
NEED<=WORK
如找到,執(zhí)行(3);否則,執(zhí)行(4)
(3)設進程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。
WORK=WORK+ALLOCATION
FINISH=TRUE
GO TO 2
(4)如所有的進程Finish[M]=true,則表示安全;否則系統(tǒng)不安全。
四、程序流程圖
銀行家算法流程圖:
五、實驗總結(jié)與體會
操作系統(tǒng)是計算機系統(tǒng)中必不可少的系統(tǒng)軟件。它是計算機系統(tǒng)中各種資源的管理者和各種活動的組織者、指揮者。銀行家算法是為了使系統(tǒng)保持安全狀態(tài)。我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當于銀行家管理的資金,進程向操作系統(tǒng)請求分配資源相當于用戶向銀行家貸款。操作系統(tǒng)按照銀行家制定的規(guī)則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執(zhí)行中繼續(xù)申請資源時,先測試該進程已占用的資源數(shù)與本次申請的資源數(shù)之和是否超過了該進程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統(tǒng)現(xiàn)存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要推遲分配。
通過上面這個例子,我們看到銀行家算法確實能保證系統(tǒng)時時刻刻都處于安全狀態(tài),但它要不斷檢測每個進程對各類資源的占用和申請情況,需花費較多的時間。
本次實驗為時兩天多,總體上來說實驗是比較成功的。由于時間倉促,做的不是很完美,敬請諒解。
附件
操作說明:根據(jù)提示輸入本次申請資源的進程號和申請資源數(shù),如圖:
如資源申請曬Γ
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -