资源分配和管理的银行家算法银行家算法实验报告.docx

上传人:b****6 文档编号:14261169 上传时间:2023-06-21 格式:DOCX 页数:35 大小:780.72KB
下载 相关 举报
资源分配和管理的银行家算法银行家算法实验报告.docx_第1页
第1页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第2页
第2页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第3页
第3页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第4页
第4页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第5页
第5页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第6页
第6页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第7页
第7页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第8页
第8页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第9页
第9页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第10页
第10页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第11页
第11页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第12页
第12页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第13页
第13页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第14页
第14页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第15页
第15页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第16页
第16页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第17页
第17页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第18页
第18页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第19页
第19页 / 共35页
资源分配和管理的银行家算法银行家算法实验报告.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

资源分配和管理的银行家算法银行家算法实验报告.docx

《资源分配和管理的银行家算法银行家算法实验报告.docx》由会员分享,可在线阅读,更多相关《资源分配和管理的银行家算法银行家算法实验报告.docx(35页珍藏版)》请在冰点文库上搜索。

资源分配和管理的银行家算法银行家算法实验报告.docx

资源分配和管理的银行家算法银行家算法实验报告

《操作系统》实验报告

年级、专业、班级

姓名

实验题目

资源分配和管理的银行家算法

实验时间

2013.05.14

实验地点

主教0416

实验成绩

实验性质

□验证性□设计性□综合性

教师评价:

□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;

□实验结果正确;□语法、语义正确;□报告规范;

其他:

评价教师签名:

一、实验目的

学习分配和管理资源的银行家算法,了解死锁避免方法。

二、实验项目内容

编写程序实现教材6.3.2节的银行家算法

程序功能:

1.程序随机生成进程数量(>10)、资源种类(>3)、每类资源总数量(>3)、进程的申请资源的数量(>0)、已分配资源的数量、可用资源数量等;

2.输出每一个进程的资源分配情况;

3.输出每一步的资源分配情况和进程执行序列(安全序列)。

4.指出每一次资源分配后系统是否处于安全状态。

三、实验过程或算法(源程序)

3.1算法思路:

先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。

若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。

若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。

3.2银行家算法步骤

(1)如果Request[i]<=Need,则转向步骤

(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。

(2)如果Request[i]<=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。

(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:

    Available=Available-Request[i];

    Allocation=Allocation+Request;

    Need=Need-Request;

(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。

3.3安全性算法步骤

(1)设置工作向量

①工作向量Work。

它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Available;

②定义判断一个进程是否执行完毕的方法:

booleanisFinished()。

(2)从进程集合中找到一个能满足下述条件的进程:

①process.isFinished()返回值为true.

②Need<=Work

如找到,执行步骤(3);否则,执行步骤(4)。

(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

Work=Work+Allocation;

Allocation+=Need;

转向步骤

(2)。

(4)如果所有进程的均执行完毕即isAllFinished()返回值为true,则表示系统处于安全状态;否则,系统处于不安全状态。

3.4数据结构:

3.4.1主要用到的数据结构:

(1)保存进程最大资源需求量的矩阵:

int[]_maxNeed

(2)保存进程已分配资源量的矩阵:

int[]_allocated

(3)保存进程标识符的字符串:

String_id

(4)保存系统中各资源总数的矩阵:

int[]_totalResource

(5)表示申请资源的进程队列:

ArrayList_processes

(6)表示系统资源种类数的整数:

int_resourceClassCount

(7)存储执行信息:

StringBuffer_executeInfo

 

3.4.2程序模块:

代表进程的类:

Process.java

代表银行家算法的类:

BankerAlgorithm.java

算法的主界面:

BankerUI.java

 

3.4.3各模块间的调用关系:

BankerUI是程序执行的主界面,输入系统资源种类数之后,其通过程序随机生成进程数量(>10)、资源种类(>3)、每类资源总数量(>3)、进程的申请资源的数量(>0)、已分配资源的数量、可用资源数量等。

其中所用针对系统进程和资源的操作均需要调用类BankerAlgorithm的方法。

 

3.5主要函数的核心代码:

1.进行初始化输入的函数

2.打印输出的函数

3.利用安全性算法进行检测的函数

4.进行资源分配的函数

5.利用行家算法进行判定的函数

注:

具体代码请见附录—源程序清单。

程序流程图:

1、系统主要过程流程图:

2、进程请求资源序列图

 

3、安全性算法序列图

四、实验结果及分析和(或)源程序调试过程

4.1主界面:

 

4.2点击“随机生成”按钮,随机生成进程数量(>10)、资源种类(>3)、每类资源总数量(>3)、进程的申请资源的数量(>0)、已分配资源的数量、可用资源数量,并向系统中添加进程,显示进程的资源分配情况。

4.3点击“分配资源”按钮,检查系统是否安全,如果当前系统安全,则输出安全队列,并给第一个安全进程分配资源。

若安全:

若不安全,则“执行结果”提示框会提示:

4.4点击“执行进程”按钮,执行已经分配资源的进程,并将其从队列中移除。

4.5点击“分配资源”按钮,重新检测当前系统的安全,如果当前系统安全,则输出安全队列,并给第一个安全进程分配资源。

4.6此后重复4、5步,直至系统中的进程执行完毕:

4.7系统中此时已没有等待执行的进程,若再点击“分配资源”按钮,则“执行结果”提示框中会提示:

4.8如果需要再进行模拟,则点击“重新生成”按钮,会重新生成进程,再重复前7步即可。

4.9如果模拟结束,可点击“退出”按钮,即可退出系统。

模拟结束。

五、心得体会

通过本次实验,我们对银行家算法有了更深的了解,理解了操作系统关于进程调度的一些方法,并通过编程实现了该算法。

也进一步提高了我们的编程能力,从中学会了很多。

 

附录:

源程序清单

1.主界面类BankerUI.java

publicclassBankerUIextendsJFrameimplementsActionListener{

privatestaticfinallongserialVersionUID=-8004544916653049326L;

privateJPanelpanel;

privateJButtonmodel;

privateJButtonalloc;

privateJButtonnext;

privateJButtonexit;

privateJTextFieldprocessNum;

//center

privateJEditorPaneresourcesInfo;

privateJEditorPaneprocessesInfo;//用html格式显示进程需要资源个数.

privateJTextArearesult;

privateJSplitPanesplitCenter;

privateJPaneleast;

privateintresourceClassesCount;//表示资源的个数

privateBankerAlgorithmbanker;

//privateProcesspro;

privateintPronum=0;

privateintSournum=0;

staticint[]available=null;//可利用的资源

staticint[][]max=null;//最大的需求矩阵

staticint[][]allocation=null;//分配矩阵

staticint[][]need=null;//需求矩阵

staticint[]totalSour=null;

staticint[]Max=null;

staticint[]Allocation=null;

publicBankerUI(){

super("银行家算法");

try{

UIManager

.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}catch(InstantiationExceptione){

e.printStackTrace();

}catch(IllegalAccessExceptione){

e.printStackTrace();

}catch(UnsupportedLookAndFeelExceptione){

e.printStackTrace();

}

setBounds(100,100,800,600);

panel=newJPanel(newBorderLayout());

//center

resourcesInfo=newJEditorPane("text/html","");

resourcesInfo.setEditable(false);

processesInfo=newJEditorPane("text/html","");//以html格式显示进程信息.

processesInfo.setEditable(false);

JSplitPanesplitInfo=newJSplitPane(JSplitPane.VERTICAL_SPLIT);

splitInfo.add(newJScrollPane(resourcesInfo),JSplitPane.TOP);

splitInfo.add(newJScrollPane(processesInfo),JSplitPane.BOTTOM);

splitInfo.setBorder(BorderFactory.createTitledBorder("系统信息"));

splitInfo.setOneTouchExpandable(true);

result=newJTextArea(5,30);

result.setEditable(false);

result.setWrapStyleWord(true);//按单词换行,即所有单词都不会打断.

result.setLineWrap(true);//换行.

JScrollPanetextScroll=newJScrollPane(result);

textScroll.setBorder(BorderFactory.createTitledBorder("执行结果"));

splitCenter=newJSplitPane(JSplitPane.VERTICAL_SPLIT);

splitCenter.setResizeWeight(1.0);

splitCenter.add(splitInfo,JSplitPane.TOP);

splitCenter.add(textScroll,JSplitPane.BOTTOM);

splitCenter.setOneTouchExpandable(true);//点击一下就可以扩展分割开来的控件.

panel.add(splitCenter,BorderLayout.CENTER);

panel.setSize(800,700);

//east

east=newJPanel();

//east.setSize(60,100);

model=newJButton("随机生成");

model.setSize(50,20);

model.setLocation(10,10);

model.addActionListener(this);

alloc=newJButton("分配资源");

alloc.addActionListener(this);

next=newJButton("执行进程");

next.addActionListener(this);

exit=newJButton("退出");

exit.addActionListener(this);

JLabellabel=newJLabel("当前进程个数:

");

label.setSize(50,20);

label.setLocation(10,60);

processNum=newJTextField();

processNum.setSize(50,20);

processNum.setLocation(10,90);

processNum.setEditable(false);

processNum.setFont(newFont("宋体",Font.BOLD,20));

processNum.setForeground(Color.RED);

processNum.setHorizontalAlignment(JTextField.CENTER);

east.setLayout(newGridLayout(10,1,10,10));

east.setSize(80,100);

east.add(label);

east.add(processNum);

east.add(model);

east.add(alloc);

east.add(next);

east.add(exit);

panel.add(east,BorderLayout.EAST);

setEastButtonEnabled(false);

//this.getContentPane().add(newJScrollPane(panel));

this.getContentPane().add(panel);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

publicvoidsetEastButtonEnabled(booleanb){

//east

alloc.setEnabled(b);

next.setEnabled(b);

}

publicBankerAlgorithmgetBanker(){

returnbanker;

}

//一个数组小于另一个数组,两个数组大小相等.

publicbooleanaLowerB(int[]a,int[]b){

for(inti=0;i

if(a[i]>b[i])

returnfalse;

}

returntrue;

}

//在resourceInfoz中显示系统资源的信息.

privatevoidupdateTotalResourcesInfo(){

StringBufferhtml=newStringBuffer(100);

html.append("");

html.append("\n");

StringBufferresourceNames=newStringBuffer("资源名");

StringBufferresourceCounts=newStringBuffer("资源个数");

//int[]totalResource=banker.getTotalResource();

for(inti=0;i

resourceNames.append("");

resourceNames.append("R"+String.valueOf(i));

resourceNames.append("");

resourceCounts.append("");

resourceCounts.append(String.valueOf(totalSour[i]));

resourceCounts.append("");

}

resourceNames.append("");

resourceCounts.append("");

html.append(resourceNames);

html.append(resourceCounts);

html.append("\n\n");

resourcesInfo.setText(html.toString());

}

privatevoidupdateProcessInfo(){

StringBuffercontent=newStringBuffer("\n");

content.append("\n");

content.append("\n");

content.append("资源情况

+Sournum

+">Max

+Sournum

+">Allocated

+Sournum

+">Need

+Sournum+">Avilable");

content.append("");

content.append("进程名");

StringBufferprocessNames=newStringBuffer(40);

for(inti=0;i

processNames.append("R"+i+"");

}

content.append(processNames);//Max

content.append(processNames);//Allocated

content.append(processNames);//Need

content.append(processNames);//Avilable

content.append("");

ArrayListprocesses=banker.getProcesses();

//System.out.println("pppp"+processes.size());

for(inti=0;i

Processp=processes.get(i);

content.append(""+p.makeHtml());

if(i==0){

int[]avilable=banker.getAvilable();

for(intj=0;j

content.append(""+avilable[j]+"");

}

if(i==1)

content.append("

+String.valueOf(processes.size()-1)

+"colspan=\"3\">");

content.append("");

}

content.append("\n");

content.append("\n");

content.append("");

processesInfo.setText(content.toString());

processNum.setText(""+Pronum);

}

@Override

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==model){

RandomMake();

banker=newBankerAlgorithm(totalSour,Sournum,newArrayList());

for(inti=0;i

Max=newint[Sournum];

Allocation=newint[Sournum];

for(intj=0;j

Max

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2