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

下载本文档

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

文档简介

1、文档可能无法思考全面,请浏览后下载! 石家庄经济学院实习报告(学 院)系: 信息工程学院 专 业: 计算机科学与技术姓 名: 江丹 班 级: 专接本2班 学 号: 511109030201 指导教师: 张有华 2012年 6 月 25 日18 / 19操作系统课程实习报告学号:511109030201 姓名:江丹 起迄日期:2012/6/172012/6/25指导教师:张有华 实习地点:206室实习题目:本实习中共有两个实习题。第一题:用银行家算法实现资源分配。要求:(1) 设计一个3个并发进程共享10个同类资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。(2)

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

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

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

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

6、;pcb;定义系统资源结构体:typedef struct sys_resint cur_count_sum;/当前申请总量int sys_res_sum;/系统资源量struct sys_res *next;res;3.3 算法设计第一部分:初始化三个进程/初始化当前各个资源申请量printf("请输入各个进程的当前申请量n");printf("进程号t当前申请量t最大资源需求n");while(i<=2)p=(pcb*)malloc(sizeof(struct pcbwork);scanf("%dt%dt%d%c",&

7、;p->pid,&p->cur_count,&p->dem_count);p->next=NULL;if(head=NULL)head=p;elseq->next=p;q=p;i+;第二部分:检测系统资源量够不够进程申请if(res1.sys_res_sum>=sum)res1.cur_count_sum=sum;printf("系统资源量满足进程申请资源总量!");elseprintf("输入数据有错,请重新输入!");p=head;i=0;while(i<=2)p->alr_count=

8、0; p->need_count=p->dem_count;strcpy(p->state,"就绪");p=p->next;i+; 第三部分:进行循环选择:当输入数字大于等于0.5时,执行随即分配算法;当输入数字小于0.5时执行银行家算法,并给出每个算法的执行结果-即有没有出现死锁,还是安全执行完毕。这里分别调用两个函数:random()和banker()p=head;printf("n开始判断执行随即分配算法,还是银行家算法:n");while(!fabs(n-0.0)<0.0000000001)scanf("%

9、f",&n);/如果n>=0.5就执行随即分配算法if(n>=0.5)printf("您当前选用的是随机分配算法!");random(head,res1);elseprintf("您当前选用的是银行家分配算法!");banker(head,res1);/执行执行银行家算法本程序用C语言实现,将随机分配算法和银行家算法分别封装到函数中,运用了循环内执行if-else语句的方式,进行随机分配算法和银行家算法之间的切换选择。3.4下面是本程序流程图:资源分配模拟程序总流程图图3.4.1-1资源分配模拟程序总流程图图3.4.1-2随

10、机分配算法流程图图3.4.1-3银行家算法流程图3.5 程序实现及运行结果分析随机分配算法运行结果如下:图3.5.1-1随机分配算法结果图结果分析:² 起初程序输入3个进程(进程id、资源申请量、资源最大需求量)² 输入大于0.5的数,让程序首先进行随机分配算法。随机分配算法的主要思想是:对当前处于就绪状态的进程,依次分配资源,能分配多少分配多少,即按顺序满足初次的各个进程初次的申请请求。进行循环操作,直到某一个进程的最大资源需求量没有得到满足,那么它以后的进程申请也将得不到满足,该组分配将进入死锁!² 死锁的表现:某些进程一直得不到满足,与其他进程产生了互斥请求

11、,结果,谁也没有得到资源。未完成的进程之间一直处于资源的争夺中,却一直都不能占有,且释放。由图可知,随机分配算法产生了死锁!银行家算法运行结果如下:图3.5.1-2银行家算法结果图结果分析:² 起初程序输入3个进程(进程id、资源申请量、资源最大需求量)² 输入小于0.5的数,让程序执行随银行家算法。银行家算法思想与随机分配算法的思想类似。区别在于:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需的最大量时,则就满足进程的当前申请。² 可以看到,各个进程的资源以占有量=本进程的以

12、占有量+系统资源释放资源量² 由上面结果可以看出当前银行家算法没有产生死锁!3.6 程序源代码第一题-代码:参见文件夹LAB01_1(源代码所在的文件夹链接)3.7 程序运行结果 程序运行结果见图(图3.4.1-1、图3.4.1-2、图3.4.1-3)这里第一题测试用例为三个进程:分别为:进程号当前申请量最大资源需求135233322第二题的设计思路及运行结果:4.14.74.1需求分析本次实验是在预输入三个进程的基础上初始化,通过选择算法,来检测各种算法的分配的安全性。4.2 数据结构设计与说明定义进程结构体:struct/定义进程结构体int Pid; /进程号 int P_st

13、ate; /状态int num; /该进程所需资源总量int have; /该进程已占有资源数量int Waiting_num;/当前等待资源号int pre_num; /上次申请资源号PCBN;定义系统资源结构体:struct/定义资源结构体int r_id;/资源idint r_state;/资源状态resourceM;4.3 算法设计第一部分:初始化三个进程和资源结构体初始化三个进程:/初始化当前各个资源申请量,这里以数组的结构体数组的形式初始化 printf("请输入每个进程所需要的资源总数n"); /对进程进行初始化 printf("n");

14、printf("进程编号 所需资源总数n"); for (i=0;i<N;i+) PCBi.Pid=i+1;/数组从0开始,但编序号为了可观性更好从1开始,所以为i+1 printf("%d ",PCBi.Pid); PCBi.P_state=Ready;/进程初始态为就绪态 PCBi.pre_num=0;/上次申请资源号,当前等待资源号初始值都设置为0 PCBi.Waiting_num=0; scanf("%d",&PCBi.num); PCBi.have=0;/已占有资源数为0 初始化资源: /对资源进行初始化 fo

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

16、n",j+1);printf("%d号进程现拥有资源:",j+1);for (i=0;i<M;i+) /如果某一进程占有了某一资源时,则这个资源的r_state赋值这个进程的进程号。if (resourcei.r_state=j+1)/通过循环查找,该进程所占有的所有资源。(判断所有资源的r_state是否为当前进程号)printf("%d ",resourcei.r_id);其次:判断是否有违按序分配。while (sign<=PCBj.pre_num-1) /当输入的序号小于进程上次申请的资源号时,违背了按序分配原则。重新输入p

17、rintf("你输入的资源序号违背按序分配,请申请其他资源。n");printf("请输入你想要分配的资源号1 %d :n",M);scanf("%d",&sign);接着:判断死锁发生条件while (PCBj.num-PCBj.have)>(M+1-sign) /当还需要的资源数大于可以分配的资源数时,如果其余资源都不能释放,则可能发生死锁/要求重新输入,申请其它资源。printf("你输入的资源序号可能导致死锁,请申请其他资源。n");printf("请输入你想要分配的资源号1 %d

18、:n",M);scanf("%d",&sign);最后:分配资源,修改资源状态和进程上一次申请资源号printf("%d号资源成功被分配给%d号进程n",sign,j+1);PCBj.pre_num=sign;/分配成功后,将资源号赋给此进程上次申请资源号。PCBj.have+;/进程已占有资源数加1resourcesign-1.r_state=j+1;/将进程号赋值给所分配资源的r_state if (PCBj.num=PCBj.have)/当进程的总需求量等于已占有资源量时,进程运行完毕。 printf("%d号进程已经运

19、行完毕,该进程将终止,该进程所占有的资源将被释放n",j+1);PCBj.P_state=Finished;/进程的状态设置为完成态。 for (i=0;i<M;i+)/通过for循环将此进程所占有的资源释放。 if (resourcei.r_state=j+1) resourcei.r_state=0; 第三部分:主函数调用order()函数。order();本程序用C语言实现,主要运用了循环内执行if-else语句的方式。4.4下面是本程序流程图:资源按序分配模拟程序流程图图3.4.1-3银行家算法流程图图4.4.1-1按序分配算法流程图4.5 程序实现及运行结果分析按序分配算法运行结果如下:图4.5.1-1按序分配算法结果图图4.5.1-2按序分配算法结果图结果分析:² 起初程序输入3个进程(为每个进程定下所需资源数)² 循环为每个进程输入资源号,一直循环下去。第二次循环的时候,条件约束为每次输入的需要分配的资源号绝对不能小于上次已为该进程分配的资源号。并显示输出,该进程已经占有的资源号。如果该进程已经占有了(例如5号资源),那么其他的进程如果再

温馨提示

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

评论

0/150

提交评论