計算機操作系統實驗銀行家算法,實驗六 銀行家算法(下)

實驗六 銀行家算法(下)

一、實驗說明

實驗說明:本次實驗主要是對銀行家算法進行進一步的實踐學習,掌握銀行家算法的整體流程,理解程序測試時每一步的當前狀態,能對當前的資源分配進行預判斷。

二、實驗要求

1、獲取源代碼

2、看懂大致框架

3、嘗試運行并知道運行中輸入的信息的意義

4、通過運行程序分配如下: 總需求:a 8 5 5; b 5 3 4; 已分配:a 4 2 3; b 4 2 2; 現在a 提出分配 1 1 1。 可以分配嗎?

5、請從銀行家算法的理論進行分析上述分配是否會造成死鎖,如果會造成死鎖,說明源代碼并不完整,請同學改進完善源代碼,使其能有效判斷是否存在安全序列,進而拒絕不安全的分配要求。

三、實驗步驟

1、在文檔右邊的虛擬化操作系統中,打開桌面的 Xfce 終端,輸入cd Desktop

2、輸入touch 6-1.c

3、輸入gedit 6-1.c

4、在 gedit 里面輸入源代碼,點擊 save 保存

5、關掉 gedit 編輯器

6、輸入g++ -o 6-1 6-1.c

7、在桌面的 Xfce 終端繼續輸入命令./6-1

8、按要求輸入并運行,觀察結果

9、針對實驗要求5,改進完善源代碼.

四、實驗報告要求 1、通過運行程序分配如下: 總需求:a 8 5 5; b 5 3 4; 已分配:a 4 2 3; b 4 2 2; 現在a 提出分配 1 1 1 完成

0a9389ddffcd0fc55e6e7201c3e83c3d.png

2、簡述自己對銀行家算法的理解?

銀行家算法是避免死鎖的算法,在每一個進程進入系統時,都必須申明在運行過程中所需要每種資源的最大單元數目,其數目不嫩超過系統所擁有的資源總量,當進程請求資源時,系統會確認是否有足夠的資源分配給該進程,若有的話,還要進一步判斷如果分配給該進程所申請的資源會不會使系統處于不安全狀態,如果不會,才將資源分配給該進程。

3、針對實驗要求5,改進完善源代碼.對改進之處說明或截圖,并重新進行前面的分配過程,并截圖。

4、將最后的完整源代碼復制。

#include

#include

#include

#include

#include

//#include

const int MAX_P=20;

const int MAXA=10; //定義A類資源的數量

const int MAXB=5;

const int MAXC=7;

using namespace std;

typedef struct node{

int a;

int b;

int c;

int remain_a;

int remain_b;

int remain_c;

}bank;

typedef struct node1{

char name[20];

int a;

int b;

int c;

int need_a;

int need_b;

int need_c;

}process;

bank banker;

process processes[MAX_P];

int quantity;

//初始化函數

void initial()

{

int i;

banker.a=MAXA;

banker.b=MAXB;

banker.c=MAXC;

banker.remain_a=MAXA;

banker.remain_b=MAXB;

banker.remain_c=MAXC;

for(i=0;i

strcpy(processes[i].name,"");

processes[i].a=0;

processes[i].b=0;

processes[i].c=0;

processes[i].need_a=0;

processes[i].need_b=0;

processes[i].need_c=0;

}

}

//新加作業

void add()

{

char name[20];

int flag=0;

int t;

int need_a,need_b,need_c;

int i;

cout<

cout<

cout<

cout<

cin>>name;

for(i=0;i

if(!strcmp(processes[i].name,name)){

flag=1;

break;

}

}

if(flag){

cout<

}

else{

cout<

cin>>need_a;

cout<

cin>>need_b;

cout<

cin>>need_c;

t=1;

cout<

if(need_a>banker.remain_a){

cout<

t=0;

}

if(need_b>banker.remain_b){

cout<

t=0;

}

if(need_c>banker.remain_c){

cout<

t=0;

}

if(t){

strcpy(processes[quantity].name,name);

processes[quantity].need_a=need_a;

processes[quantity].need_b=need_b;

processes[quantity].need_c=need_c;

quantity++;

cout<

}

else{

cout<

}

}

}

//為作業申請資源

void bid()

{

char name[20];

int i,p;

int a,b,c;

int flag;

cout<

cout<

cout<

cin>>name;

p=-1;

for(i=0;i

if(!strcmp(processes[i].name,name)){

p=i;

break;

}

}

if(p!=-1){

cout<

cin>>a;

cout<

cin>>b;

cout<

cin>>c;

flag=1;

if((a>banker.remain_a)||(a>processes[p].need_a-processes[p].a)){

cout<

flag=0;

}

if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){

cout<

flag=0;

}

if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){

cout<

flag=0;

}

if(flag){

banker.remain_a-=a;

banker.remain_b-=b;

banker.remain_c-=c;

processes[p].a+=a;

processes[p].b+=b;

processes[p].c+=c;

cout<

}

else{

cout<

}

}

else{

cout<

}

}

//撤消作業

void finished()

{

char name[20];

int i,p;

cout<

cout<

cout<

cin>>name;

p=-1;

for(i=0;i

if(!strcmp(processes[i].name,name)){

p=i;

break;

}

}

if(p!=-1){

banker.remain_a+=processes[p].a;

banker.remain_b+=processes[p].b;

banker.remain_c+=processes[p].c;

for(i=p;i

processes[i]=processes[i+1];

}

strcpy(processes[quantity-1].name,"");

processes[quantity-1].a=0;

processes[quantity-1].b=0;

processes[quantity-1].c=0;

processes[quantity-1].need_a=0;

processes[quantity-1].need_b=0;

processes[quantity-1].need_c=0;

quantity--;

cout<

}

else{

cout<

}

}

//查看資源情況

void view()

{

int i;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

if(quantity>0){

for(i=0;i

cout<

cout<

cout<

cout<

cout<

}

}

else{

cout<

}

}

//顯示版權信息函數

void version()

{

cout<

cout<

}

int main()

{

int chioce;

int flag=1;

initial();

version();

while(flag){

cout<

cout<

cout<

cout<

cin>>chioce;

switch(chioce){

case 1:

add();

break;

case 2:

bid();

break;

case 3:

finished();

break;

case 4:

view();

break;

case 0:

flag=0;

break;

default:

cout<

}

}

return 0;

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397313.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么原因導致芯片短路_華為為什么突然大量用起了聯發科芯片,或是這三個產品策略原因...

經常關注數碼圈的都知道&#xff0c;近幾年來&#xff0c;隨著華為自研能力的提升&#xff0c;華為幾乎很少采購第三方芯片&#xff0c;近幾年來的絕大多數華為手機&#xff0c;幾乎都是用的自研芯片麒麟系列。并沒有像其它國產品牌那樣用聯發科或者高通的芯片。不過今年卻大不…

如何運行vue項目(維護他人的項目)

假如你是個小白&#xff0c;在公司接手他人的項目&#xff0c;這個時候&#xff0c;該怎么將這個項目跑通&#xff1f; 前提&#xff1a; 首先&#xff0c;這個教程主要針對vue小白&#xff0c;并且不知道安裝node.js環境的。言歸正傳&#xff0c;下面開始教程&#xff1a;在維…

進程操作

2019獨角獸企業重金招聘Python工程師標準>>> 一、創建一個進程 進程是系統中最基本的執行單位。Linux系統允許任何一個用戶進程創建一個子進程&#xff0c;創建之后&#xff0c;子進程存在于系統之中并獨立于父進程。 關于父進程與子進程這兩個概念&#xff0c;除了…

計算機硬件發展的特點有哪些,簡述計算機的發展歷程及各代計算機的特點。

滿意答案Karen0491推薦于 2017.11.25采納率&#xff1a;40% 等級&#xff1a;6已幫助&#xff1a;608人世界上第一臺計算機是1946年問世的&#xff0c;根據計算機的性能和軟硬件技術&#xff0c;將計算機發展劃分成以下幾個階段&#xff1a;①第一階段&#xff1a;電子管計算…

電餅鍋的樣式圖片價格_進口琺瑯鑄鐵鍋專場,精致小廚娘們來康康!

兩個月前&#xff0c;小灰兔我寫了《10個高顏值居家好物&#xff0c;讓你在朋友圈萬眾矚目&#xff01;》一文&#xff0c;曾有小伙伴私信說這張圖簡直就是夢想中廚房的亞子強烈同意&#xff01;&#xff01;&#xff01;有多少女孩子&#xff0c;看到顏值炒雞高的鍋路都走不動…

在UITouch事件中畫圓圈-iOS8 Swift基礎教程

這篇教程主要內容展示如何利用Core Graphics Framework畫圓圈,當用戶點擊屏幕時隨機生成不同大小的圓,這篇教程在Xcode6和iOS8下編譯通過。 打開Xcode,新建項目選擇Single View Application,Product Name填寫iOS8SwiftDrawingCirclesTutorial,Organization Name和Organization …

瀏覽器兼容性問題

轉載于:https://www.cnblogs.com/python-machine/p/9406084.html

sql server 2005 (select查詢語句用法)

select * from userInfo where age like 2[25]功能&#xff1a;查詢userInfo表中age字段&#xff0c;所有以2開頭&#xff0c;且第二位是2或5的記錄。select * from userInfo where name like _娜_功能&#xff1a;查詢userInfo表中name&#xff08;char(6)&#xff09;字段所有…

有人在遠程使用計算機是什么意思,如何遠程控制計算機,計算機遠程控制有什么用途...

對于每個人來說&#xff0c;計算機都是至關重要的家用電器. 因為使用計算機可以使我們的業余生活豐富多彩. 隨著Internet的普及&#xff0c;越來越多的用戶開始學習自己使用計算機. 但是&#xff0c;操作中仍然存在很多問題&#xff0c;只要每個人都學會了遠程控制&#xff0c;…

圖學java基礎篇之IO

java io體系 如圖可以看出&#xff0c;java的io按照包來劃分的話可以分為三大塊&#xff1a;io、nio、aio&#xff0c;但是從使用角度來看&#xff0c;這三塊其實揉雜在一起的&#xff0c;下邊我們先來概述下這三塊&#xff1a; io:主要包含字符流和字節流&#xff0c;我們常用…

boot界面上下鍵調節鍵不能動_為什么電腦一開機就自動進入BIOS界面

電腦故障的問題表現形式很多&#xff0c;比如說為什么電腦藍屏&#xff0c;為什么電腦一開機就自動進入BIOS界面等。這些問題往往另很多網友不知所措。今天小編就針對電腦一開機就自動進入BIOS界面的問題&#xff0c;教下大家具體的解決方法。1、你的BIOS電池沒有電了。解決方法…

ArcEngine數據刪除幾種方法和性能比較

轉自原文 ArcEngine數據刪除幾種方法和性能比較 一、 幾種刪除方法代碼 1. 查詢結果中刪除 private void Delete1(IFeatureClass PFeatureclass) { IQueryFilter pQueryFilter new QueryFilterClass(); pQueryFilter.WhereClause "objectID<" DeleteNum; IFe…

計算機組成原理中英對照篇,信息科學系課程介紹(中英對照).doc

文檔介紹&#xff1a;信息科學系課程介紹(中英對照)序號:1課程編碼:14001010課程名稱:計算機基礎學分:1周學時:2開課系部:信息科學系預修課程:無修讀對象:信息管理與信息系統專業本科生課程簡介:主要介紹計算機發展歷史、常用操作系統、辦公和其它應用軟件、等內容。通過本課程…

句子相似度--余弦相似度算法的實現

1、余弦相似度余弦距離&#xff0c;也稱為余弦相似度&#xff0c;是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。余弦值越接近1&#xff0c;就表明夾角越接近0度&#xff0c;也就是兩個向量越相似&#xff0c;這就叫"余弦相似性"。 上圖兩…

python之模塊calendar(匯集了日歷相關的操作)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #calendar日歷模塊import calendar#3個大類&#xff1a; calendar.Calendar(firstweekday0) calendar.TextCalendar(firstweekday0) calendar.HTMLCalendar(firstweekday0)#返回某月日歷 cal calendar.month(2011, 11) print ca…

紅帽436——HA高可用集群之概念篇

一、集群概念&#xff1a;集群&#xff1a;提高性能&#xff0c;降低成本&#xff0c;提高可擴展性&#xff0c;增強可靠性&#xff0c;任務調度室集群中的核心技術。集群作用:保證業務不斷 集群三種網絡&#xff1a;業務網絡,集群網絡,存儲網絡 二、集群三種類型&#xff1a;…

計算機網絡的構成教學反思,《計算機網絡知識》教學反思.doc

文檔介紹&#xff1a;《計算機網絡知識》教學反思本課時以理論性內容為主,在日常教學過程中往往會以課本宣讀為主,很難引起學生的學****興趣。然而在教學中若能夠合理的采用多種教學方式,做到理論聯系實際,將達到良好的教學效果。我在本節課教學中,以我校的校園網為模型,充分利…

按季度分類匯總_2019年純堿行業相關上市公司季報 與半年報情況匯總

2019年純堿行業相關上市公司季報與半年報情況匯總經百川盈孚統計&#xff0c;目前純堿行業相關上市公司共計11家(包含三家ST股)&#xff0c;已經全部公布2019年一季度報告。2019年上半年度報告僅五家公司公布&#xff0c;其中包含&#xff1a;大連大化、山東海化、華昌化工、湖…

抖音C#版,自己抓第三方抖音網站

感謝http://dy.lujianqiang.com技術支持 文章更新&#xff1a;http://dy.lujianqiang.com這個服務器已經關了&#xff0c;現在沒用了 版權歸抖音公司所有&#xff0c;該博客只是為交流學習所使用,編譯后的內容將24小時內刪除 該程序所獲取到的內容或視頻歸Beijing Microlive Vi…

linux命令-vim命令模式

編輯模式下 按 “esc” 進去命令模式 &#xff1a;wq 保存并退出 &#xff1a;w 保存 已寫入 &#xff1a;q&#xff01;不保存強制退出 &#xff1a;wq&#xff01; 強制保存退出 &#xff1a;set nu 顯示行號 &#xff1a;set nonu 去掉行號 &#xff1a;nohl 取消高亮 /字…