




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学计算机操作系统试验汇报
目录TOC\o"1-3"\h\u1.设计目的 22.设计规定 23.设计题目 34.设计过程 34.1设计思绪 34.2试验过程 44.3调度性能分析 105.总结 116.代码附录 12计算机操作系统1.设计目的1、增强学生对计算机操作系统基本原理、基本理论、基本算法的理解;2、提高和培养学生的动手能力。2.设计规定1、每人至少选作1题,多做不限;2、每人单独完毕,可以讨论,但每人的设计内容不得完全相似,抄袭或有2人/多人设计完全同样者,不能通过;3、设计完毕后,应上交课程设计文档,文档格式应是学校课程设计的原则格式,所有学生的封面大小、格式也必须同样;4、同步上交设计的软盘(或以班刻录光盘)。3.设计题目调度算法的模拟:模拟多种调度算法,并进行调度性能分析。4.设计过程4.1设计思绪模拟了一种作业调度算法,其中用到了先来先服务算法(FCFS)、短作业优先算法(SJF)、最高响应比优先算法(HRN)三种算法。如下,分别为三种算法的程序流程图。4.2试验过程图1-开始界面图2–输入作业的信息(名字、提交时间、运行时间)图3–选择算法(FCFS、SJF、HRN)图4、5–选择FCFS算法后输出成果图6、7–选择SJF算法后输出成果图8、9–选择HRN算法后输出成果4.3调度性能分析1.先来先服务算法(FCFS)长处:能体现公平性;缺陷:一旦一种较长的作业进入系统后就会长时间的占用系统的资源,这样假如有优先级较高的短作业需要执行的话需要等待很长时间。2.短作业优先算法(SJF)长处:比前者改善了平均周转时间和平均带权周转时间,缩短作业的等待时间,提高系统的吞吐量;缺陷:对长作业非常不利,也许长时间得不到执行,未能一句作业的紧迫程度来划分执行的优先级,难以精确估计作业的执行时间,从而影响调度性能。3.最高响应比优先算法(HRN)长处: 这种算法是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端状况下会带来某些不便。HRN调度方略同步考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。缺陷:由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将不不小于采用SJF法时的吞吐量。此外,由于每次调度前要计算响应比,系统开销也要对应增长。5.总结在设计中,我设想在理想状况下将每个作业用一种构造体来存储其对应的信息,并将各个构造体用构造体数组的形式组织到一起。在每个构造体中将作业的作业名、进入时间、运行时间、周转时间、带权周转时间这些信息所有存入,以便后期的排序和输出等待队列信息。通过这几次试验,我发现了自身的局限性,例如没有很好的书写习惯,考虑问题不周到,对于调度算法的理解不够深入等。但在编程的过程中我体验到了一分耕耘一分收获的喜悦;多次调试后程序成功运行了,那时候的欢乐是我此前无法想象的。果然,学习任何一门课程,只要学得专心,都可以从中体会到学习的快乐。此后我的进步,想必都是从这一点一点敲入编译器的代码中获得的。6.代码附录#include<stdio.h>#include<stdlib.h>#definegetpch(type)(type*)malloc(sizeof(type))structworktime{floatTb;//作业运行时刻floatTc;//作业完毕时刻floatTi;//周转时间floatWi;//带权周转时间};structjcb{/*定义作业控制块JCB
*/charname[10];//作业名floatsubtime;//作业提交时间floatruntime;//作业所需的运行时间charresource;//所需资源floatRp;//后备作业响应比charstate;//作业状态structworktimewt;structjcb*link;//链指针}*jcb_ready=NULL,*j;typedefstructjcbJCB;floatT=0;voidsort()/*
建立对作业进行提交时间排列函数*/{JCB*first,*second;intinsert=0;if((jcb_ready==NULL)||((j->subtime)<(jcb_ready->subtime)))/*作业提交时间最短的,插入队首*/{j->link=jcb_ready;jcb_ready=j;T=j->subtime;j->Rp=1;}else/*
作业比较提交时间,插入合适的位置中*/{first=jcb_ready;second=first->link;while(second!=NULL){if((j->subtime)<(second->subtime))/*若插入作业比目前作业提交时间短,*/{/*插入到目前作业前面*/j->link=second;first->link=j;second=NULL;insert=1;}else/*
插入作业优先数最低,则插入到队尾*/{first=first->link;second=second->link;}}if(insert==0)first->link=j;}}voidSJFget()/*
获取队列中的最短作业
*/{JCB*front,*mintime,*rear;intipmove=0;mintime=jcb_ready;rear=mintime->link;while(rear!=NULL)if((rear!=NULL)&&(T>=rear->subtime)&&(mintime->runtime)>(rear->runtime)){front=mintime;mintime=rear;rear=rear->link;ipmove=1;}elserear=rear->link;if(ipmove==1){front->link=mintime->link;mintime->link=jcb_ready;}jcb_ready=mintime;}voidHRNget()/*
获取队列中的最高响应作业
*/{JCB*front,*mintime,*rear;intipmove=0;mintime=jcb_ready;rear=mintime->link;while(rear!=NULL)if((rear!=NULL)&&(T>=rear->subtime)&&(mintime->Rp)<(rear->Rp)){front=mintime;mintime=rear;rear=rear->link;ipmove=1;}elserear=rear->link;if(ipmove==1){front->link=mintime->link;mintime->link=jcb_ready;}jcb_ready=mintime;}voidinput()/*
建立作业控制块函数*/{inti,num;printf("\npleseinputthenumberofthejob:");scanf("%d",&num,2);for(i=0;i<num;i++){printf("\ntheordernumberofthejobNo.%d:\n",i);j=getpch(JCB);printf("\npleaseinputthenameofthejob:");scanf("%s",j->name);printf("\npleaseinputthetimewhenthejobwassubmitted:");scanf("%f",&j->subtime);printf("\npleaseinputtheruntimeofthejob:");scanf("%f",&j->runtime);printf("\n");j->state='w';j->link=NULL;sort();/*
调用sort函数*/}}intspace(){intl=0;JCB*jr=jcb_ready;while(jr!=NULL){l++;jr=jr->link;}return(l);}voiddisp(JCB*jr,intselect)/*建立作业显示函数,用于显示目前作业*/{if(select==3)printf("\nworkservicetimeresponseratioruntimecompletetimeturnovertimeweightedturnovertime\n");elseprintf("\nworkservicetimeruntimecompletetimeturnovertimeweightedturnovertime\n");printf("|%s\t",jr->name);printf("|%.2f\t",jr->runtime);if(select==3)printf("|%.2f",jr->Rp);if(j==jr){printf("|%.2f\t",jr->wt.Tb);printf("|%.2f",jr->wt.Tc);printf("|%.2f\t",jr->wt.Ti);printf("|%.2f",jr->wt.Wi);}printf("\n");}voidcheck(intselect)/*建立作业查看函数*/{JCB*jr;printf("\n****therunningjobis:%s",j->name);/*显示目前运行作业*/disp(j,select);jr=jcb_ready;printf("\n****thecurrentreadyqueueis:\n");/*显示就绪队列状态*/while(jr!=NULL){jr->Rp=(T-jr->subtime)/jr->runtime;disp(jr,select);jr=jr->link;}destroy();}intdestroy()/*建立作业撤销函数(作业运行结束,撤销作业)*/{printf("\njob[%s]iscompleted.\n",j->name);free(j);}voidrunning(JCB*jr)/*建立作业就绪函数(作业运行时间到,置就绪状态*/{if(T>=jr->subtime)jr->wt.Tb=T;elsejr->wt.Tb=jr->subtime;jr->wt.Tc=jr->wt.Tb+jr->runtime;jr->wt.Ti=jr->wt.Tc-jr->subtime;jr->wt.Wi=jr->wt.Ti/jr->runtime;T=jr->wt.Tc;}intmain()/*主函数*/{intselect=0,len,h=0;floatsumTi=0,sumWi=0;input();len=space();printf("\n\t1.FCFS2.SJF3.HRN\n\npleasechooseaAlgorithm:");scanf("%d",&select);while((len!=0)&&(jcb_ready!=NULL)){h++;printf("\nexcute%djob\n",h);j=jcb_ready;jcb_ready=j->link;j->link=NULL;j->state='R';running(j);sumTi+=j->wt.Ti;sumWi+=j->wt.Wi;check(select);if(select==2&&h<len-1)SJFget();if(select==3&&h<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程施工承包协议
- 2024-2025学年高二化学人教版选择性必修3教学课件 第一章 第一节 第3课时 有机化合物的同分异构现象
- 网络用户年龄分布与消费力调查表
- 企业客户关系维护协议
- 煤炭行业居间合同
- 基于人工智能技术的远程监控系统合作协议
- 建设工程担保协议
- 商务往来合同文书范本
- 品牌商品价格对比表
- 层电梯厅装修合同
- 小学生春季传染病预防
- deepseek在智慧城市建设中的应用前景
- 2024黑龙江公务员考试【A类、B类、省直、笔试】四套真题及答案
- 2025年九江职业大学高职单招职业技能测试近5年常考版参考题库含答案解析
- 《智能网联汽车 自动驾驶系统要求及测试方法 第1部分:高速公路及城市快速路》
- 《GNSS接收机矢量跟踪算法研究》
- 2024年立体卷铁心变压器市场调查报告
- DB14-T 1123-2024 红小豆、玉米间作技术规程
- 【课件】溶质的质量分数(第1课时)九年级化学人教版(2024)下册
- 2025高考数学专项复习:导数的27个模块专练(含答案)
- 【MOOC】通信原理-中原工学院 中国大学慕课MOOC答案
评论
0/150
提交评论