操作系统试验报告—资源分配_第1页
操作系统试验报告—资源分配_第2页
操作系统试验报告—资源分配_第3页
操作系统试验报告—资源分配_第4页
操作系统试验报告—资源分配_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、经济学院实习报告(学院)系:信息工程学院专业:计算机科学与技术姓名:江丹班级:专接本 2 班学号:1指导教师 :有华2012 年 6 月 25 日操作系统课程实习报告学号:1:江丹起迄日期: 2012/6/172012/6/25指导教师:有华实习地点: 206 室实习题目:本实习中共有两个实习题。第一题:用银行家算法实现资源分配。要求:(1) 设计一个 3个并发进程共享 10个同类资源的系统, 进程可动态地申请资源和释放 资源,系统按各进程的申请动态地分配资源。(2) 设计用银行家算法和随机分配算法,实现资源分配的两个资源分配程序,应具有 显示或打印各进程依次要求申请的资源数以及依次分配资源的

2、情况。(3) 确定一组各进程依次申请资源数的序列,在相同的情况下分别运行上述两种资源 分配程序,观察运行结果。第二题:用按序分配策略实现资源分配。要求:(1) 设计一个 3 个进程共享 10个资源的系统,进程可动态地申请资源和释放资源,系 统按各进程的申请动态地分配资源。(2) 设计用按序分配算法实现资源分配的资源分配程序,应具有显示或打印各进程依 次要求申请的资源号以及依次分配资源地情况。(3) 确定两组各进程依次要求申请的资源号,要求其中的一组中各进程按序地申请资 源,另一组中各进程申请资源不受序号限制,分别运行上述设计的资源分配程序,观察运 行结果。1 实习容运用随机分配算法、银行家算法

3、、按需分配策略进行资源分配,检查各种算法资源分 配的安全性。2 实习目的多个进程动态地共享系统的资源可能会产生死锁现象。死锁的产生,必须同时满足四 个条件,第一个是互斥条件,即一个资源每次只能由一个进程占用;第二个为等待条件, 即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其它资源; 第三个是非出让条件,任何一个进程不能抢占另一个进程已经获得且未释放的资源;第四 个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只须确保上述四个条件之一不出现,则系统就不 会发生死锁。在实习中假定系统中任一资源在每一时刻只能则

4、由一个进程使用,任何进程不能抢占 它进程正在使用的资源,当进程得不到资源时必须等待。因此只要资源分配策略能保证进 程不出现循环等待,则系统就不会发生死锁。本实习要求学生编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的 条件,并采用适当的算法,有效地防止和避免死锁的发生。3 实习步骤第一步:首先先看书,理解银行家算法、随机分配算法及按需分配算法原理,确定整 体的代码思路,确定流程图。第二步:分析并修改流程图,检查其中的逻辑错误。第三步:从细节上分析,各部分功能的代码实现。第四步:运行并查看结果,这里主要查看各个资源对资源的占有和申请情况。以及按 照自己随机的输入三组数字,选择各种算法

5、,检验其分配的安全性,会不会产生死锁。第一题的设计思路及运行结果: 3.13.7 部分3.1 需求分析 本次实验是在预输入三个进程的基础上初始化,通过选择算法,来检测各种算法的分 配的安全性。3.2 数据结构设计与说明定义进程结构体:/ 当前申请量/ 资源需求总量/ 已占资源量/ 还需要的资源量/ 当前申请总量typedef struct pcbwork int pid; char state10; int cur_count; int dem_count; int alr_count;int need_count; struct PCB *next;pcb;定义系统资源结构体: typede

6、f struct sys_res int cur_count_sum;int sys_res_sum; / 系统资源量struct sys_res *next;res;3.3 算法设计第一部分:初始化三个进程/ 初始化当前各个资源申请量printf( 请输入各个进程的当前申请量 n);printf( 进程号t 当前申请量 t 最大资源需求 n); while(ipid,&p-cur_count,&p-dem_count); p-next=NULL;if(head=NULL) head=p;else q-next=p;q=p;i+;第二部分:检测系统资源量够不够进程申请if(res1.sys_r

7、es_sum=sum) res1.cur_count_sum=sum; printf( 系统资源量满足进程申请资源总量! !);elseprintf( 输入数据有错,请重新输入! !);p=head;i=0;while(ialr_count=0; p-need_count=p-dem_count; strcpy(p-state, 就绪 );p=p-next;i+;第三部分:进行循环选择:当输入数字大于等于 0.5 时,执行随即分配算法;当输 入数字小于 0.5 时执行银行家算法,并给出每个算法的执行结果 - 即有没有出现死锁,还 是安全执行完毕。这里分别调用两个函数: random()和 ba

8、nker ()p=head;printf(n 开始判断执行随即分配算法,还是银行家算法: n); while(!fabs(n-0.0)=0.5 就执行随即分配算法if(n=0.5)printf( 您当前选用的是随机分配算法! ! ); random(head,res1);elseprintf( 您当前选用的是银行家分配算法! !); banker(head,res1); / 执行执行银行家算法本程序用 C 语言实现,将随机分配算法和银行家算法分别封装到函数中,运用了循环 执行 if-else 语句的方式,进行随机分配算法和银行家算法之间的切换选择。3.4下面是本程序流程图:资源分配模拟程序总流

9、程图开始否图 3.4.1-1 资源分配模拟程序总流程图图 3.4.1-2 随机分配算法流程图顺序选择一个 就绪进程作为 现行进程否置当前 PCB进程为等待状态现行进程 PCB中已占资源量加上该进程的当前申请量满足:系统现存资源数减去现行进程的当前申请量图 3.4.1-3 银行家算法流程图3.5 程序实现及运行结果分析随机分配算法运行结果如下:图 3.5.1-1 随机分配算法结果图结果分析:起初程序输入 3 个进程(进程 id、资源申请量、资源最大需求量)输入大于 0.5 的数,让程序首先进行随机分配算法。随机分配算法的主要思想 是:对当前处于就绪状态的进程,依次分配资源,能分配多少分配多少,即

10、按顺序满 足初次的各个进程初次的申请请求。进行循环操作,直到某一个进程的最大资源需求 量没有得到满足,那么它以后的进程申请也将得不到满足,该组分配将进入死锁! ! 死锁的表现:某些进程一直得不到满足,与其他进程产生了互斥请求,结果, 谁也没有得到资源。未完成的进程之间一直处于资源的争夺中,却一直都不能占有, 且释放。由图可知,随机分配算法产生了死锁! !银行家算法运行结果如下:图 3.5.1-2 银行家算法结果图结果分析:起初程序输入 3 个进程(进程 id、资源申请量、资源最大需求量)输入小于 0.5 的数,让程序执行随银行家算法。银行家算法思想与随机分配算 法的思想类似。区别在于:系统掌握

11、每个进程对资源的最大需求量,当进程要求申请 资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于 该进程尚需的最大量时,则就满足进程的当前申请。可以看到,各个进程的资源以占有量 =本进程的以占有量 +系统资源释放资源量由上面结果可以看出当前银行家算法没有产生死锁! !3.6 程序源代码第一题-代码:参见文件夹 LAB01_1(源代码所在的文件夹)3.7 程序运行结果程序运行结果见图(图 3.4.1-1 、图 3.4.1-2 、图 3.4.1-3 )这里第一题测试用例为三个进程:分别为:进程号当前申请量最大资源需求1352333 2 2第二题的设计思路及运行结果:4.14.

12、74.1 需求分析 本次实验是在预输入三个进程的基础上初始化,通过选择算法,来检测各种算法的分 配的安全性。4.2 数据结构设计与说明定义进程结构体:structint Pid;int P_state;int num;int have;int Waiting_num;int pre_num;PCBN;定义系统资源结构体:structint r_id;int r_state;resourceM;/ 定义进程结构体/ 进程号/ 状态/ 该进程所需资源总量/ 该进程已占有资源数量/ 当前等待资源号/ 上次申请资源号/ 定义资源结构体/ 资源 id/ 资源状态4.3 算法设计第一部分:初始化三个进程和

13、资源结构体初始化三个进程:/ 初始化当前各个资源申请量,这里以数组的结构体数组的形式初始化 printf( 请输入每个进程所需要的资源总数 n);/ 对进程进行初始化 printf(n);printf( 进程编号 所需资源总数 n);for (i=0;iN;i+) PCBi.Pid=i+1; / 数组从 0 开始,但编序号为了可观性更好从 1 开始, 所以为 i+1printf(%d ,PCBi.Pid);PCBi.P_state=Ready; / 进程初始态为就绪态 PCBi.pre_num=0; /上次申请资源号,当前等待资源号初始值都设置为 0PCBi.Waiting_num=0;sca

14、nf(%d,&PCBi.num); PCBi.have=0; / 已占有资源数为 0初始化资源:/ 对资源进行初始化for (i=0;iM;i+) resourcei.r_id=i+1; / 初始化资源号从 1 开始 resourcei.r_state=0; / 资源的状态初始化为 0printf( 执行按序分配算法 n);order();第二部分:写按需分配算法首先:这里运用了 while 循环 +部选择的方法 。 从头挑选处于就绪状态的进程,先判断各个资源有没有被进程占用,如果占用了, 则在资源中将资源的状态值赋予这个进程的进程号。开始的时候,默认任何资源都未被进 程占用!if (PCBj

15、.P_state=Ready) / 进程为就绪状态,分配资源printf( 现在为 %d号进程分配资源 :n,j+1);printf(%d 号进程现拥有资源: ,j+1);for (i=0;iM;i+) / 如果某一进程占有了某一资 源时,则这个资源的 r_state 赋值这个进程的进程号。if (resourcei.r_state=j+1) / 通过循环查找,该进程所占有 的所有资源。(判断所有资源的 r_state 是否为当前进程号)printf(%d ,resourcei.r_id);其次:判断是否有违按序分配 。while (sign(M+1-sign) /当还需要的资源数大于可以分配

16、的资源数时,如果其余资源都不能释放,则可能发生死锁 / 要求重新输入, 申请其它资 源。printf( 你输入的资源序号可能导致死锁, 请申请其他资源。n);printf( 请输入你想要分配的资源号 1 %d :n,M); scanf(%d,&sign);最后:分配资源,修改资源状态和进程上一次申请资源号printf(%d 号资源成功被分配给 %d号进程 n,sign,j+1);PCBj.pre_num=sign; / 分配成功后,将资源号赋给此 进程上次申请资源号。PCBj.have+;/ 进程已占有资源数加 1resourcesign-1.r_state=j+1;/ 将进程号赋值给所分配资

17、源的 r_stateif (PCBj.num=PCBj.have)/ 当进程的总需求量等于已占有资源量时,进程运行完毕。printf(%d 号进程已经运行完毕,该进程将终止,该进程所占有的资源将被释放 n,j+1);PCBj.P_state=Finished; / 进程的状态设置为完成态。 for (i=0;iM;i+) / 通过 for 循环将此进程所占有的资源释放。if (resourcei.r_state=j+1) resourcei.r_state=0; 第三部分:主函数调用 order ()函数。order();本程序用 C 语言实现,主要运用了循环执行 if-else 语句的方式。

18、4.4面是本程序流程图:资源按序分配模拟程序流程图开始输入各进程依次申请的资源号置各进程的初始状态为就绪态顺序找出一个就绪进程为现行进程图 3.4.1-3 银行家算法流程图 是现行进程当前申请的资源号小于上次申请的资源号是当前资源是否被占用?将进程置为等待状态,并在PCB中填入等待资源号显示:没有按序申请,不能分配把资源分配给进程,将申请的资源号填入 PCB将被分配资源置为占用状态是置进程为完成态该进程得到所有资源?归还该进程占用的资源,并将这些资源置为未被占用 状态,并且释放那些等待资源号的进程,并改等待状 态为就绪态结束所有进程处于完成态?图 4.4.1-1 按序分配算法流程图4.5 程序实现及运行结果分析按序分配算法运行结果如下:图 4.5.1-1 按序分配算法结果图图 4.5.1-2 按序分配算法结果图结果分析: 起初程序输入 3 个进程(为每个进程定下所需资源数) 循环为每个进程输入资源号,一直循环下去。第二次循环的时候,条件约束为 每次输入的需要分配的资源号绝对不能小于上次已为该进程分配的资源号。并显示输 出,该进程已经占有的资源号。如果该进程已经占有了(例如 5 号资源),那么其他的 进程如果再申请 5 号资源,提示继续申请的话,可能产生死锁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论