中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解C語言實現的操作系統銀行家算法

發布時間:2021-10-27 16:02:09 來源:億速云 閱讀:201 作者:柒染 欄目:大數據

如何理解C語言實現的操作系統銀行家算法,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、選題背景

這次課程設計要求完成一個資源管理系統,掌握使用銀行家算法管理系統資源分配的工作原理。深入認識在多道程序系統中合理資源分配的重要性,加深死鎖有關概念的理解。模擬實現銀行家算法對系統資源進行分配,以防止死鎖的出現。本課題肯定不可能實現對實際操作系統的資源管理,而是通過對模擬資源數據的處理,檢測銀行家算法在防止死鎖出現的作用。

二、方案論證

模擬實現銀行家算法對系統資源進行分配,以防止死鎖的出現。本課題肯定不可能實現對實際操作系統的資源管理,而是通過對模擬資源數據的處理,檢測銀行家算法在防止死鎖出現的作用。先對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態調用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態,拒絕申請。

三、實驗環境

  • Windows操作系統

  • VS 2013

  • C語言

四、設計思想及實驗步驟

4.1 設計思想

先對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態調用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態,拒絕申請。

4.2 銀行家算法中的數據結構

可利用資源向量Available。這是一個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和回收而動態改變。如果Available[j]=K,則表示系統中現有Rj類資源K個。

最大需求矩陣Max。這是一個 的矩陣,它定義了系統中 個進程中的每一個進程對 類資源的最大需求。如果Max[I,j]=K,則進程i需要Rj類資源的最大數目為K。

分配矩陣Allocation。這也是一個 的矩陣,它定義了系統中每一類資源當前已分配給每一個進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已經分得Rj類資源的數目為K。

需求矩陣Need。這也是一個 的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成任務。

即:

 
  1. int M ; // 總進程數

  2. int N ; // 資源種類

  3. int ALL_RESOURCE[W]; // 各種資源的數目總和

  4. int Max[W][R]; // 最大需求矩陣,M個進程對N類資源最大資源需求

  5. int Available[R]; // 可利用資源向量,

  6. int Allocation[W][R];// 分配矩陣,各個進程M已經得到N類資源的資源數

  7. int Need[W][R]; // M個進程還需要N類資源的資源量

  8. int Request[R]; // 進程的請求資源個數

以上三個矩陣間存在下述關系:

如何理解C語言實現的操作系統銀行家算法

4.3 銀行家算法bank()

設Request i是進程Pi的請求向量,如果Requesti[j]=K,表示進程Pi需要K個Rj類型的資源。發出請求后,系統按下述步驟進行檢查:

  • (1)檢查申請量是否不大于需求量。如果Request i[j]<=Need[i,j],便轉向步驟(2);否則認為出錯,因為他所需要的資源數已經超過它所宣布的最大值。

  • (2)檢查申請量是否小于系統中的可利用資源數量。如果Requesti[j]<=Available[i,j],便轉向步驟(2);否則認為尚無足夠資源,Pi必須等待。

  • (3)若以上兩個條件都滿足,則系統試探著將資源分配給申請的進程,并修改下面數據結構中的數值:

 
  1. Available[j]=Available[j]-Request[j];

  2. Allocation[k][j]=Allocation[k][j]+Request[j];

  3. Need[k][j]=Need[k][j]-Request[j];

  • (1)試分配后,系統執行安全性算法,調用safe()函數檢查此次資源分配后系統是否處于安全狀態。若安全,才正式將資源分配給進程,以完成本次分配,并將安全序列打印出來;否則本次試探分配作廢,恢復原來的資源分配狀態,讓該進程等待。

4.4 安全性算法safe()

  • (1)設置兩個向量

    • 工作向量:Work,它表示系統可提供給進程繼續運行所需要的各類資源數目,它含有m個元素,在執行安全性算法開始時,Work: =Available

    • Finish,它表示系統是否有足夠資源分配給進程,使之運行完成。開始時先做Finish[i]:=false;當有足夠的資源分配給進程時,再令Finish[i]:=true

  • (2)從進程集合中找到一個滿足下述條件的進程

    • Finish[i]:=false;

    • Need[i,j]<=Work[j];若找到,執行步驟(3),否則,執行步驟(4)

  • (3)當進程Pi獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行

如何理解C語言實現的操作系統銀行家算法

5.2 流程圖

如何理解C語言實現的操作系統銀行家算法

如何理解C語言實現的操作系統銀行家算法

七、總結

銀行家算法就是一個分配資源的過程,使分配的序列不會產生死鎖。此算法的中心思想是:按該法分配資源時,每次分配后總存在著一個進程,如果讓它單獨運行下去,必然可以獲得它所需要的全部資源,也就是說,它能結束,而它結束后可以歸還這類資源以滿足其他申請者的需要。

關于如何理解C語言實現的操作系統銀行家算法問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鲁甸县| 林甸县| 信宜市| 理塘县| 织金县| 忻城县| 泽普县| 当涂县| 玉门市| 梨树县| 平昌县| 唐海县| 兖州市| 伽师县| 成安县| 延寿县| 交城县| 安福县| 安徽省| 仙游县| 利辛县| 灯塔市| 资讯| 永德县| 水城县| 玉溪市| 石门县| 嘉鱼县| 泉州市| 墨玉县| 长泰县| 教育| 瑞金市| 肃宁县| 垫江县| 哈尔滨市| 紫阳县| 东山县| 永川市| 延庆县| 陈巴尔虎旗|