操作系统实验报告 - 图文

2019-05-24 10:58

课内实验报告

课 程 名: 操作系统 任课教师: 专 业: 信息管理与信息系统 学 号: 姓 名:

二○一五至二○一六 年度 第 一 学期

XXXX大学 管理学院

1

《 操作系统 》课程实验第 一 次实验报告 一、实验目的与基本要求 1、了解进程管理的实现方法; 2、理解和掌握处理进程同步问题的方法。 二、实验仪器与设备 硬件:微型计算机。中央处理器PentiumIV以上;显示器256色VGA以上;内存使用128兆;硬盘300M以上。 软件:学生可以采用任何一种自己熟悉的编程语言完成算法的程序设计,如C/C++、Delphi、VB、VC、C#等。 三、实验内容: 实现银行家算法、进程调度过程的模拟、读者-写者问题的写者优先算法。 实验结果: 银行家算法原理: 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。为保证资金的安全, 银行家规定: (1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客; (2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量; (3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款; (4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金. 操作系统按照银行家制定的规则为进程分配资源, 当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系 统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。 银行家算法 进程i发出请求资源申请, (1)如果Request [j]<=need[i,j],转向步骤(2),否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。 (2)如果:Request i[j]<=available[i,j],转向步骤(3),否则表示尚无足够资源,进程i需等待。 (3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:

2

可利用资源向量Available[i,j]= Available[i,j]- 最大需求矩阵Request [j]; 分配矩阵Allocation[i][j]= Allocation[i][j]+ Request [j]; 需求矩阵need[i][j]= need[i][j]- Request [j]; (4)试分配后,执行安全性检查,调用check()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。 (5)用do{…}while 循环语句实现输入字符y/n判断是否继续进行资源申请。 安全性检测算法 (1) 设置两个向量: 工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work= Available。 工作向量Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。 开始时先做Finish[i]=false;当有足够的资源分配给进程时,再令Finish[i]=true。 (2)在进程中查找符合以下条件的进程: 条件1:Finish[i]=false; 条件2:need[i][j]<=Work[j] 若找到,则执行步骤(3)否则,执行步骤(4) (3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work[j]= Work[j]+ Allocation[i][j]; Finish[i]=true; goto step (2); (4)如果所有的Finish[i]=true都满足,则表示系统处于安全状态,否则,处于不安全状态。 流程图 程序源代码 #include #include #include #include # define m 50 int no1; //进程数 int no2; //资源数 int r; int allocation[m][m],need[m][m],available[m],max[m][m]; char name1[m],name2[m]; //定义全局变量 void main() { void check(); 3

void print(); int i,j,p=0,q=0; char c; int request[m],allocation1[m][m],need1[m][m],available1[m]; printf(\ printf(\银行家算法的设计与实现 *\\n\ printf(\ printf(\请输入进程总数:\\n\ scanf(\ printf(\请输入资源种类数:\\n\ scanf(\ printf(\请输入Max矩阵:\\n\ for(i=0;i=no1) { 4

printf(\输入错误,请重新输入:\\n\ continue; } else break; } printf(\请输入该进程所请求的资源数request[j]:\\n\ for(j=0;jneed[i][j]) p=1; //判断请求是否超过该进程所需要的资源数 if(p) printf(\请求资源超过该进程资源需求量,请求失败!\\n\ else { for(j=0;javailable[j]) q=1; //判断请求是否超过可用资源数 if(q) printf(\没有做够的资源分配,请求失败!\\n\ else //请求满足条件 { for(j=0;j


操作系统实验报告 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:光缆工作量计算

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: