- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二:死锁的检测和预防
实验目的
1、进一步了解进程的并发执行。
2、加强对进程死锁的理解
3、是用银行家算法完成死锁检测
实验内容
给出进程需求矩阵C、资源向量R以及一个进程的申请序列。使用进程启动拒绝和资源分配拒绝〔银行家算法〕模拟该进程组的执行情况。要求:
初始状态没有进程启动
计算每次进程申请是否分配?如:计算出预分配后的状态情况〔平安状态、不平安状态〕,如果是平安状态,输出平安序列。
每次进程申请被允许后,输出资源分配矩阵A和可用资源向量V。
每次申请情况应可单步查看,如:输入一个空格,继续下个申请
实验环境
VC++
实验原理及实验思路
1、平安状态:如果存在一个由系统中所有进程构成的平安序列P1,…,Pn,那么系统处于平安状态。平安状态一定是没有死锁发生。 2、不平安状态:不存在一个平安序列。不平安状态一定导致死锁。 平安序列:一个进程序列{P1,…,Pn}是平安的,如果对于每一个进程Pi(1≤i≤n〕,它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj?(j??i?)当前占有资源量之和。 3、银行家算法: 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规那么为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量那么按当前的申请量分配资源,否那么就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。假设超过那么拒绝分配资源,假设没有超过那么再测试系统现存的资源能否满足该进程尚需的最大资源量,假设能满足那么按当前的申请量分配资源,否那么也要推迟分配。
4、银行家算法的思路: 1),进程一开场向系统提出最大需求量.? 2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.? 3),假设正常,那么判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的? 剩余资源量,假设不超出,那么分配,否那么等待.? 5、银行家算法的数据构造:1),系统剩余资源量A[n],其中A[n]表示第I类资源剩余量.? 2),各进程最大需求量,B[m][n],其中B[j][i]表示进程j对i? 类资源最大需求.? 3),已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量.? 4),剩余需求量.D[m][n],其中D[j][i]对第i资源尚需的数目.?
流程图
银行家算法:
平安检测:
源代码
#include string.h
#include stdio.h
#include stdlib.h
#define M 5
#define N 3
#define FALSE 0
#define TRUE 1
/*M个进程对N类资源最大资源需求量*/
int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
/*系统可用资源数*/
int AVAILABLE[N]={10,5,7};
/*M个进程对N类资源已经分配数量*/
int ALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
/*M个进程还需要N类资源的资源量 */
int NEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
/*M个进程还需要N类资源的资源量*/
int Request[N]={0,0,0};
void main()
{
int i=0,j=0;
char flag=Y;
char finishFlag=Y;
void showdata();
void changdata(int);
void rstordata(int);
int chkerr(int);
showdata();
while(finishFlag==Y||finishFlag==y) //可以分配资源
{
i=-1;
while(i0||i=M) //判断申请的资源号是否有效
{
printf(请输入需申请资源的进程号〔从0到%d,否那么重输入!〕:,M-1);
scanf(%d,i);
if(i0||i=M)
printf(输入的进程号不存在,重新输入!\n);
}
printf(请输入进
文档评论(0)