操作系统实验报告_—资源分配

上传人:达2 文档编号:157043670 上传时间:2022-09-28 格式:DOCX 页数:19 大小:504.79KB
收藏 版权申诉 举报 下载
操作系统实验报告_—资源分配_第1页
第1页 / 共19页
操作系统实验报告_—资源分配_第2页
第2页 / 共19页
操作系统实验报告_—资源分配_第3页
第3页 / 共19页
资源描述:

《操作系统实验报告_—资源分配》由会员分享,可在线阅读,更多相关《操作系统实验报告_—资源分配(19页珍藏版)》请在装配图网上搜索。

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

2、依次申请资源数的序列,在相同的情况下分别运行上述两种资源 分配程序,观察运行结果。第二题:用按序分配策略实现资源分配。要求:(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_co unt;int dem_co unt; int alr_c ount;int n eed_c ount; struct PCB *n ext;pcb;定义系统资源结构体: typedef struct sys_res int cur_c

6、o unt_sum;int sys_res_sum;/ 系统资源量struct sys_res *n ext;res;3.3算法设计第一部分:初始化三个进程/初始化当前各个资源申请量printf(请输入各个进程的当前申请量n);printf( 进程号t当前申请量t最大资源需求n); while(ipid,&p-cur_cou nt,&p-dem_cou nt); p-n ext=NULL;if(head=NULL) head=p;elseq-n ext=p;q=p;i+;第二部分:检测系统资源量够不够进程申请if(res1.sys_res_sum=sum)res1.cur_co un t_su

7、m=sum;printf(系统资源量满足进程申请资源总量! ! !);elseprintf(输入数据有错,请重新输入! ! !);p=head;i=0;while(ialr_co un t=0;p-n eed_c oun t=p-dem_co unt; strcpy(p-state, 就绪);p=p-n ext;i+;第三部分:进行循环选择:当输入数字大于等于0.5时,执行随即分配算法;当输入数字小于0.5时执行银行家算法,并给出每个算法的执行结果 -即有没有出现死锁,还 是安全执行完毕。这里分别调用两个函数: random ()和banker ()p=head;prin tf(n开始判断执行

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

9、1-3银行家算法流程图3.5程序实现及运行结果分析随机分配算法运行结果如下:进穆号青输入各个进程的当前曰请量当前申请量最大资源需求353322系统资溥量满足进程申请资源总量!开始判断执行随即分配算法,还是银行家算法:曜机分配算法显示:进程号送程状态当前申请量1就绪3532就绪33371就绪35693就绪222g0. g您当丽选用的是隨机分配算法!1随机分配算法产生死锁!1!资源要求总量 已占有量图3.5.1-1随机分配算法结果图结果分析:起初程序输入3个进程(进程id、资源申请量、资源最大需求量)输入大于0.5的数,让程序首先进行随机分配算法。随机分配算法的主要思想 是:对当前处于就绪状态的进

10、程,依次分配资源,能分配多少分配多少,即按顺序满 足初次的各个进程初次的申请请求。进行循环操作,直到某一个进程的最大资源需求 量没有得到满足,那么它以后的进程申请也将得不到满足,该组分配将进入死锁!死锁的表现:某些进程一直得不到满足,与其他进程产生了互斥请求,结果, 谁也没有得到资源。未完成的进程之间一直处于资源的争夺中,却一直都不能占有, 且释放。由图可知,随机分配算法产生了死锁! ! !银行家算法运行结果如下:F:x丄丹作接作枭绡实验格式X5U10903D20iafi作系绕实鵜-副宙IABDL讪2灯3心屯请丽&入建亟的岂需宙詰量进程号当前申请量最犬资源需求1 352 333 22系统资源量

11、滾足进程自请资溥总量! ! ! 开始判断执行|即分配負法,还是银行家算法:您当前选用的是银厅家分配算:去! ! 银行家算汪显示:进穆号量进科状态当旺申请号资源要求总量 已占有量资源等待12 133332535233620 -100.3图3.5.1-2银行家算法结果图结果分析:起初程序输入3个进程(进程id、资源申请量、资源最大需求量)输入小于0.5的数,让程序执行随银行家算法。银行家算法思想与随机分配算 法的思想类似。区别在于:系统掌握每个进程对资源的最大需求量,当进程要求申请 资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于 该进程尚需的最大量时,则就满足进程的当前

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

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

14、数n);for (i=0;iN;i+)PCBi.Pid=i+1;/数组从0开始,但编序号为了可观性更好从1开始,所以为i+1prin tf(%d ,PCBi.Pid);PCBi.P_state=Ready; /进程初始态为就绪态PCBi.pre_num=0; /上次申请资源号,当前等待资源号初始值都设置为0PCBi.Wait in g_num=0;sca nf(%d,&PCBi. nu m);PCBi.have=0;/已占有资源数为0初始化资源:/对资源进行初始化for (i=0;iM;i+)resourcei.r_id=i+1; /初始化资源号从1开始resourcei.r_state=0;

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

16、(resourcei.r_state=j+1)/通过循环查找,该进程所占有的所有资源。(判断所有资源的r_state是否为当前进程号)prin tf(%d ,resourcei.r_id);其次:判断是否有违按序分配。while (sig n(M+1-sig n) /当还需要的资源数大于可以分配的资源数时,如果其余资源都不能释放,则可能发生死锁/要求重新输入,申请其它资源。printf(你输入的资源序号可能导致死锁,请申请其他资源。n);printf(请输入你想要分配的资源号1 %d : n,M);sca nf(%d,&sig n);最后:分配资源,修改资源状态和进程上一次申请资源号print

17、f(%d号资源成功被分配给d号进程n,sign,j+1);PCBj.pre_num=sign;/分配成功后,将资源号赋给此进程上次申请资源号。PCBj.have+;/进程已占有资源数加1resourcesign-1.r_state=j+1;/将进程号赋值给所分配资源的r_stateif (PCBj.num=PCBj.have)/当进程的总需求量等于已占有资源量时,进程运行完毕。prin tf(%d号进程已经运行完毕,该进程将终止,该进程所占有的资源将被释放n,j+1);PCBj.P_state=Finished;/进程的状态设置为完成态。for (i=0;iM;i+)/通过for循环将此进程所

18、占有的资源释放。if (resourcei.r_state=j+1)resourcei.r_state=0;第三部分:主函数调用 order ()函数。order();本程序用C语言实现,主要运用了循环执行if-else 语句的方式。4.4F面是本程序流程图:资源按序分配模拟程序流程图开始输入各进程依次申请的资源号置各进程的初始状态为就绪态顺序找出一个就绪进程为 现行进程图341-3银行家算法流程图是现行进程当前申请的资源号小于上次申请的资源号当刖资源是否被占用?显示:没有按序申请,不能分配把资源分配给进程,将申请的资源号填入PCB将被分配资源置为占用状态是置进程为完成态该进程得到 所有资源?

19、疋f将进程置为等待状态, 并在PCB中填入等待资 源号否否归还该进程占用的资源,并将这些资源置为未被占用 状态,并且释放那些等待资源号的进程,并改等待状 态为就绪态结束:與!所有进程处于完成态?图441-1按序分配算法流程图-& xF : VI丹作业 按作泵维实验緡式话1 1购D3D凹1江月一彳4.5程序实现及运行结果分析按序分配算法运行结果如下:图4.5.1-1按序分配算法结果图3啃爺入你植要并配的资源号1 10:号资源成功披分配给M号进程i議入你魚要券配的资源号1算蠶翌矍縛覽躍麓将终止,该进程所占有的贽源将被釋放:号资源咸功被分配给3号进程10图4.5.1-2按序分配算法结果图结果分析:起

20、初程序输入3个进程(为每个进程定下所需资源数)循环为每个进程输入资源号,一直循环下去。第二次循环的时候,条件约束为 每次输入的需要分配的资源号绝对不能小于上次已为该进程分配的资源号。并显示输 出,该进程已经占有的资源号。如果该进程已经占有了(例如5号资源),那么其他的进程如果再申请5号资源,提示继续申请的话,可能产生死锁! !让其他进程放弃申请 已经被占用了的资源号。如果其他进程一直申请已被占用资源号,程序将进入死锁,必须强制退出。如 果程序正常分配资源结束的话,程序结束,自动退出。4.6程序源代码第二题-代码:参见文件夹LAB01_1 (源代码所在的文件夹)4.7程序运行结果程序运行结果见图

21、(图4.5.1-1、图4.5.1-2 )这里按序分配算法的测试用例如下图:5实习总结1、 本次实验过程中,通过此次题目,资源分配一些基本的预防死锁的算法:随机分配 算法、银行家算法、按需分配算法。2、实验中出现的问题:对结构体指针数组的操作出现了几次非常严重的错误,在老师的帮助下,自己努力查资料,终于得以解决。对单链表操作、malloc动态分配存空间运用出现了问题,造成了存泄漏。遇到的最棘手的问题是,当释放存的时候,free函数在while中出现了死循环,单步 执行,根本走不出while循环,存一直没有释放成功。3、通过本次实验,觉得实验程序是建立在对原理深刻理解的基础上的。只有对流程 图的每一步都分析清楚了,才可以动手写代码,否则都是徒劳又浪费时间的。通过本实验, 提高了自主学习的能力,很多事情都是一步步自己动手。最终有一种苦尽甘来的感觉,觉 得小有成就。再有感触很深的一点就是,学会了换角度思考问题。很多程序,特别是if-else 语句的使用,正面判断不行的话,就进行反面判断。这点体会很深,希望下次写出更棒的 程序! !

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!