- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统 预防进程死锁的银行家算法 java版
实验三 预防进程死锁的银行家算法
实验目的
通过这次实验,加深对进程死锁的理解,进一步掌握进程资源的分配、死锁的检测和安全序列的生成方法。
试验内容
问题描述:
设计程序模拟预防进程死锁的银行家算法的工作过程。假设系统中有n个进程P1, … ,Pn,有m类可分配的资源R1, … ,Rm,在T0时刻,进程Pi分配到的j类资源为Allocationij个,它还需要j类资源Need ij个,系统目前剩余j类资源Workj个,现采用银行家算法进行进程资源分配预防死锁的发生。
程序要求:
1)判断当前状态是否安全,如果安全给出安全序列;如果不安全给出理由。
2)对于下一个时刻T1,某个进程Pk会提出请求Request(R1, … ,Rm),判断分配给P k进程请求的资源之后系统是否安全。
3)输入:进程个数n,资源种类m,T0时刻各个进程的资源分配情况(可以运行输入,也可以在程序中设置);
4)输出:如果安全,输出安全的进程序列,不安全则提示信息。
需求分析
(1) 输入的形式和输入值的范围
输入进程的数目
输入资源的种类
每个进程最多所需的各类资源数(Max[i][j])
每个进程已经分配的各类资源数(Allocation[i][j])
各个资源现有的数目(Available[][])
(2) 输出的形式
如果安全,输出安全的进程序列,不安全则提示信息。
测试用例
调试分析
通过本次实验可知,用银行家算法避免死锁就是在资源所能承受范围内给需要资源的进程分派所需资源,在分派资源时若请求资源超出所需资源或超出可得资源,则不合条件,则让当前进程等待换下一个进程,若可利用资源已经满足任何一个进程所需,则系统不安全并且系统不分配资源;在安全性检验时,若可利用资源已经满足任何一个进程所需,则系统不安全并且系统不分配资源。
免死锁属于事先预防的策略,在资源的动态分配过程中用某种方法去防止系统进入不安全状态,从而避免死锁发生。
测试结果
输入进程数,资源数,最大需求矩阵,分配矩阵,可利用资源向量,
对进程的资源请求向量
输出:
附录(java)
package experiment;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class C_Bank {
// 允许的最大进程数
private static int MaxNumber = 100;
// 真正的进程数
public static int realNum;
// ???????????
public static int l=0;
// 资源的种类
public static int resourceKind;
// 可利用资源数组
private static int Available[] = new int[MaxNumber];
// 最大需求矩阵
private static int Max[][] = new int[MaxNumber][MaxNumber];
// 已分配矩阵
private static int Allocation[][] = new int[MaxNumber][MaxNumber];
// 需求矩阵
private static int Need[][] = new int[MaxNumber][MaxNumber];
// 请求向量
private static int Request[][] = new int[MaxNumber][MaxNumber];
// 表示系统是否有足够的资源分配给进程
private static boolean Finish[] = new boolean[MaxNumber];
//当前可利用资源
private static int Work[] = new int[MaxNumber];
// 安全序列
private static int p[] = new int[MaxNumber];
//for循环中使用
private static int i;
private static int j;
private static int k;
public static Scanner stdin;
public static void main(String args[]) throws FileNotFoundException {
// 输入realNum,resourceKind,Max[i][j]
您可能关注的文档
- 控制系统招标技术规范.doc
- 控制点理论的研究及教学应用.ppt
- 控制系统数字仿真.docx
- 接线常见问题.docx
- 控制系统数字仿真程序及结果.doc
- 控制系统计算机仿真-实验六.doc
- 控股股东实际控制人培训.ppt
- 推动实施《中国制造2025》.ppt
- 推敲(第二课时).ppt
- 接触网的定位装置.ppt
- 2025年山西焦煤集团有限责任公司人员招聘笔试模拟试题及答案解析.docx
- 2025年青岛国际投资有限公司人员招聘笔试模拟试题及答案解析.docx
- 2025年吉林吉粮资产供应链管理有限公司人员招聘笔试备考试题及答案解析.docx
- 2025年广西移动人员招聘笔试备考试题及答案解析.docx
- 权威的SAMA图例说明.docx
- 2025年辽宁省大连市单招语文测试模拟题库.docx
- 2025年墙面消防指示器项目可行性研究报告.docx
- AI赋能工业智能化的方向.pdf
- 2025年省农垦集团有限公司人员招聘笔试备考试题及答案解析.docx
- 2025年深圳市人才安居集团有限公司人员招聘笔试模拟试题及答案解析.docx
文档评论(0)