版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二作业调度实验题目1、编写并调试一个单道处理系统的作业等待模拟程序。作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。(1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。(2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。(3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。2、编写并调度一个多道程序系统的作业调度模拟程序。作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。实验目的:本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三.实验过程<一>单道处理系统作业调度1)单道处理程序作业调度实验的源程序:zuoye.c执行程序:zuoye.exe2)实验分析:1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。2、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。3)流程图:p->cycletime=(float)(p->finishtime-p->reachtime);p->cltime=(float)(p->cycletime/p->needtime);T1+=p->cycletime;T2+=p->cltime;disp(p,m);//调用disp()函数,显示作业运行情况times+=p->needtime;p->state='F';printf("\n%shasbeenfinished!\npressanykeytocontinue...\n",p->name);free(p);//释放运行后的作业getch();}voidsuper()//计算队列中作业的高响应比{JCB*padv;padv=ready;do{if(padv->state=='W'&&padv->reachtime<=times)padv->super=(float)(times-padv->reachtime+padv->needtime)/padv->needtimepadv=padv->next;}while(padv!=NULL);}voidfinal()//最后打印作业的平均周转时间,平均带权周转时间{floats,t;t=T1/n;s=T2/n;getch();printf("\n\n作业已经全部完成!");printf("\n%d个作业的平均周转时间是:%f",n,t);printf("\n%d个作业的平均带权周转时间是%f:\n\n\n",n,s);}voidhrn(intm)//高响应比算法{JCB*min;inti,iden;system("cls");inital();for(i=0;i<n;i++){p=min=ready;iden=1;super();do{if(p->state=='W'&&p->reachtime<=times)if(iden){min=p;iden=0;}elseif(p->super>min->super)min=p;p=p->next;}while(p!=NULL);if(iden){i--;times++;//printf("\ntime=%d:\tnoJCBsubmib...wait...",time);if(times>1000){printf("\nruntimeistoolong...error...");getch();}}else{running(min,m);//调用running()函数}}//forfinal();//调用running()函数}voidsjf(intm)//最短作业优先算法{JCB*min;inti,iden;system("cls");inital();for(i=0;i<n;i++){p=min=ready;iden=1;do{if(p->state=='W'&&p->reachtime<=times)if(iden){min=p;iden=0;}elseif(p->needtime<min->needtime)min=p;p=p->next;}while(p!=NULL);if(iden){i--;//printf("\ntime=%d:\tnoJCBsubmib...wait...",time);times++;if(times>100){printf("\nruntimeistoolong...error");getch();}}else{running(min,m);//调用running()函数}}//forfinal();//调用running()函数}voidfcfs(intm)//先来先服务算法{inti,iden;system("cls");inital();for(i=0;i<n;i++){p=ready;iden=1;do{if(p->state=='W'&&p->reachtime<=times)iden=0;if(iden)p=p->next;}while(p!=NULL&&iden);if(iden){i--;printf("\n没有满足要求的进程,需等待");times++;if(times>100){printf("\n时间过长");getch();}}else{running(p,m);//调用running()函数}}final();//调用running()函数}voidmune(){intm;system("cls");printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t作业调度演示\n");printf("\t\t*********************************************\t\t\n");printf("\n\n\n\t\t\t1.先来先服务算法.");printf("\n\t\t\t2.最短作业优先算法.");printf("\n\t\t\t3.响应比高者优先算法");printf("\n\t\t\t0.退出程序.");printf("\n\n\t\t\t\t选择所要操作:");scanf("%d",&m);switch(m){case1:fcfs(m);getch();system("cls");mune();break;case2:sjf(m);getch();system("cls");mune();break;case3:hrn(m);getch();system("cls");mune();break;case0:system("cls");break;default:printf("选择错误,重新选择.");getch();system("cls");mune();}}main()//主函数{inize();mune();}5)调试结果:1.选择操作的界面2.输入操作初始信息:3.先来先服务算法作业调度结果:(调度顺序:a->b->c->d->e)4.最短作业优先算法作业调度结果(调度顺序:a->d->b->e->c)5.高响应比算法作业调度结果:(调度顺序a->b->d->c->e)<二>多道处理系统作业调度1)多道处理程序作业调度实验的源程序:duodao.c执行程序:duodao.exe2)实验分析:采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。采用先来先服务算法算法模拟设计作业调度程序。(1)、作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中作出选择。先来先服务算法是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业。(2)假定某系统可供用户使用的主存空间共100k,并有5台磁带机。3)流程图:4)源程序:#include<stdio.h>#include<stdlib.h>#include<conio.h>#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0intj=0;intn,i;//n为需要输入的作业数量floatT1=0,T2=0;//初始化周转时间,带权周转时间.inttimes=0;//初始化开始运行时间intfreesa=100,disksa=5;//预定内存的大小为100k,磁带数量为5个.structjcb//作业控制块{charusername[10];//用户名charname[10];//作业名intreachtime;//作业到达时间intstarttime;//作业开始时间intruntime;//已经运行了的时间intneedtime;//作业需要运行的时间intfrees;//作业要占用的内存intdisks;//作业所需磁带intfinishtime;//作业完成时间floatcycletime;//作业周转时间floatcltime;//作业带权周转时间charstate;//作业状态structjcb*next;//结构体指针}*ready=NULL,*start=NULL,*p,*q,*r,*s,*t;typedefstructjcbJCB;voidinital()//建立作业控制块队列,先将其排成先来先服务的模式队列{inti;printf("\n输入作业数:");scanf("%d",&n);for(i=0;i<n;i++){p=getpch(JCB);printf("\n输入用户名:");scanf("%s",p->username);printf("输入作业名:");scanf("%s",p->name);getch();p->reachtime=i;printf("作业默认到达时间:%d",i);printf("\n输入作业要运行的时间:");scanf("%d",&p->needtime);printf("输入作业运行要占用的内存:");scanf("%d",&p->frees);printf("输入作业运行所需磁带:");scanf("%d",&p->disks);p->runtime=0;p->state='W';p->next=NULL;if(ready==NULL)ready=q=p;//先将其按到达的先后顺序排成后备序列else{q->next=p;q=p;}}}intspace()//计算内存中作业的个数{intl=0;JCB*pr=start;while(pr!=NULL){l++;pr=pr->next;}return(l);}voidapply()//把符合条件的作业调用内存,并给他们分配资源,{intlen;p=ready;while(p!=NULL){if(p->frees<=freesa&&p->disks<=disksa){freesa-=p->frees;disksa-=p->disks;r=p;p=p->next;if(r==ready)//先将符合条件的作业从队列中分离出来{ready=r->next;r->next=NULL;}else{q=ready;while(q->next!=r)q=q->next;q->next=r->next;}if(start==NULL)start=s=r;//将其插到start队列,else{s->next=r;s=r;}}else{p=p->next;}}len=space();printf("\n\t此时有%d道作业在内存\n\n",len);}voiddisp(JCB*pr)/*建立作业显示函数*/{printf("|%s\t",pr->username);printf("|%s\t",pr->name);printf("|%c\t",pr->state);printf("|%d\t",pr->reachtime);printf("|%d\t",pr->needtime);printf("|%d\t",pr->runtime);printf("|%d\t",pr->frees);printf("|%d\t",pr->disks);printf("\n");}voidcheck()//显示作业状况{printf("\n作业%s于完成%d个作业后运行完毕,其完成后的情况:",q->name,j);j++;printf("\n用户名****作业名****状态****到达时间*需运行时间*已运行时间*需占用内存*需磁带数量\n");disp(q);s=start;printf("\n\t\t*********当前进入内存的作业状态*********");printf("\n用户名****作业名****状态****到达时间*需运行时间*已运行时间*需占用内存*需磁带数量\n");while(s!=NULL){disp(s);s=s->next;}r=ready;printf("*\n\n\t\t*********当前后备作业表中作业的状态**********");printf("\n用户名****作业名****状态****到达时间*需运行时间*已运行时间*需占用内存*需磁带数量\n");while(r!=NULL){disp(r);r=r->next;}}voidrunning()//运行作业{for(t=start;t!=NULL;){start=t->next;q=t;q->next=NULL;q->state='R';q->runtime++;t=start;times++;if(q->runtime==q->needtime){q->finishtime=times;q->starttime=q->finishtime-q->needtime;q->cycletime=q->finishtime-q->reachtime;q->cltime=(q->cycletime)/(q->needtime);T1+=q->cycletime;T2+=q->cltime;freesa+=q->frees;disksa+=q->disks;check();//调用check()显示正在运行的,就绪的以及后备的作业信息free(q);//释放作业apply();//分配作业getch();}else{for(s=start;s->next!=NULL;)s=s->next;s->next=q;}}}main()//主函数{intm;printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t实验三(2)多道作业调度\n");printf("\t\t*********************************************\t\t\n");printf("\n\t\t1.多道作业调度演示.");printf("\n\t\t0.退出程序");printf("\n\t\t\t选择所要的操作:");printf("\n\n\n\t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年瓦工承揽协议规范化样本版
- 部门工作计划集锦15篇
- 教师师德师风培训心得体会
- 5这些事我来做(教学实录)2023-2024学年统编版道德与法治四年级上册
- 2024-2025学年八年级政治上册 第四单元 我们依法享有人身权、财产 第七课 法律保护我们的权利 第1框《法律规定公民的权利和义务》教学实录 鲁教版
- 银行个人信贷业务分析报告
- 网络安全管理规范
- 《管理品牌资产》戴维·阿克著
- 2025届高考英语读后续写素材积累40-境况篇清单
- 售后客服个人工作总结15篇
- 某医院后备人才梯队建设方案
- 二年级上册英语教案Unit6 Lesson22︱北京课改版
- 桂枝加龙骨牡蛎汤_金匮要略卷上_方剂加减变化汇总
- 《2021国标建筑专业图集资料》96S821钢筋混凝土清水池附属构配件图集
- CHEETAH高压制备色谱操作手册
- 水利基本建设项目竣工财务决算报表编制说明
- 公司劳动工资结构图(doc 1页)
- 《AFM简介实验》ppt课件
- 客运公司岗位安全生产操作规程
- 中学学生评教实施方案
- 公司员工食堂管理制度(完整版)
评论
0/150
提交评论