进程调度实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

信息科学与技术学院实验报告课程名称:操作系统实验项目:作业调度实验地点:指导教师:日期:实验类型:(验证性实验综合性实验设计性实验)专业:计算机服务外包班级:14外3姓名:周鹏飞学号:1414104033一、实验目的及要求本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个过多个作业调度的模拟程序,了解作业调度在操作系统中的作用,加深对作业调度算法的理解。二、实验仪器、设备或软件VC++6.0三、实验内容及原理为单道批处理系统设计一个作业调度程序⑴编写并调试一个单道处理系统的作业调度模拟程序。⑵作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。⑶由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源知道作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。⑷每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:作业名,提交时间,所需的运行时间,所需的资源,作业状态,链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。⑸对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。1.编写程序完成批处理系统中的作业调度,要求采用响应比最高者优先(HRN)的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所做工作进行测试。响应比=(等待时间+计算时间)/计算时间=1+等待时间/计算时间由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源,根据需要,实验中只包括需要主存的大小(采用可移动的动态分区方式管理主存,作业大小就是需要主存的大小)、需要打印机的数量和需要磁带机的数量;采用响应比作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。实验中,作业控制块及队列的数据结构定义如下:typedefstructjcb{charname[4];//作业名intlength;//作业长度,所需主存大小intprinter;//作业执行所需打印机的数量inttape;//作业所需磁带机的数量intruntime;//作业估计执行时间intwaittime;作业在系统中的等待时间intnext;//指向下一个作业控制块的指针}JCB//作业控制块类型定义存放作业控制块的区域:definen10//假定系统中可容纳的作业数量为nJCBjobtable[10];//作业表intjobcount;//系统内现有作业数量确定作业组织方式之后,就要开始考虑如何进行作业调度。尽管不同的计算机系统可以采用不同的调度原则和调度算法,但是都必须遵循一个必要条件,即系统现有的尚未分配的资源可以满足被选作业的资源要求。就是说,所有的作业调度都是按照一定的算法,从满足必要条件的作业中选择一部分作业装入主存储器。实验中,主存采用可移动的动态分区管理方法,即只要主存空闲区总和比作业大就可以满足作业对主存的需求;对打印机和磁带机这两种独占型设备采用静态分配法,即作业执行前必须获得所需资源,并且执行完才归还。模拟程序中,先要假设系统的资源情况,假设系统资源只有主存(memory)64MB(以KB为单位分配)、磁带机(tape)4个和打印机(printer)2台;然后,手工输入某个时刻系统中的各个作业情况;最后进行作业调度,并将结果输出。2.先来先服务(FCFS)和短作业优先(SJF)的模拟算法设计C语言程序,显示初始界面。输入作业编号(0-4),分别输入到达时间,服务时间(单位都为分钟),再选择FCFS或SJF算法,计算出运行顺序、周转时间、带权周转时间、平均周转时间和平均带权周转时间。四、实验步骤(或过程)响应比最高者优先(HRN)的作业调度算法#includestdio.h#includestdlib.htypedefstructjcb/*作业控制块类型定义*/{charname[4];intlength;intprinter;inttape;/*作业执行所需磁带机的数量*/intruntime;intwaittime;/*作业在输入井中的等待时间*/structjcb*next;/*指向下一个作业控制块的指针*/}JCB;JCB*head;/*作业队列头指针定义*/inttape,printer;longmemory;shedule()/*作业调度函数*/{floatxk,k;JCB*p,*q,*s,*t;do{p=head;s=NULL;q=NULL;k=0;while(p!=NULL){if(p-length=memory&&p-tape=tape&&p-printer=printer){/*系统可用资源是否满足作业需求*/xk=(float)(p-waittime)/p-runtime;if(q==NULL||xkk)/*满足条件的第一个作业或者作业q的响应比小于作业p的响应比*/{k=xk;/*记录响应比*/q=p;t=s;}/*if*/}/*if*/s=p;p=p-next;/*指针p后移*/}/*while*/if(q!=NULL){if(t==NULL)/*是作业队列的第一个*/head=head-next;elset-next=q-next;/*为作业q分配资源:分配主存空间;分配磁带机;分配打印机;*/memory=memory-q-length;tape=tape-q-tape;printer=printer-q-printer;printf(选中作业的作业名:%s\n,q-name);}}while(q!=NULL);}/*作业调度函数结束*/main(){inti;charname[4];intsize,tcount,pcount,wtime,rtime;JCB*p;/*系统数据初始化*/memory=65536;tape=4;printer=2;head=NULL;printf(输入作业相关数据(以作业大小为负数停止输入):\n);/*输入数据,建立作业队列*/printf(输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n);scanf(%s%d%d%d%d%d,name,&size,&tcount,&pcount,&wtime,&rtime);while(size!=-1){/*创建JCB*/p=(JCB*)malloc(sizeof(JCB));/*填写该作业相关内容*/strcpy(p-name,name);p-length=size;p-printer=pcount;p-tape=tcount;p-runtime=rtime;p-waittime=wtime;/*挂入作业队列队首:*/p-next=head;head=p;/*输入一个作业数据*/printf(输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n);scanf(%s%d%d%d%d%d,name,&size,&tcount,&pcount,&wtime,&rtime);}/*while*/shedule();/*进行作业调度*/}/*main()结束*/先来先服务(FCFS)和短作业优先(SJF)的模拟算法:#includestring#includeiostream#defineN5usingnamespacestd;structGzuo{charId;intArrtime;intSevtime;intFintime;intRuntime;floatWtime;};Gzuojobline[N];voidMenu(){cout*欢迎使用作业调度模拟程序*endl;cout*a.输入*endl;cout*b.FCFS*endl;cout*c.SJF*endl;cout*d.退出*endl;cout请输入a~d:;}voidInput(){for(intb=0;bN;b++){cout作业编号(0~4):;cinjobline[b].Id;cout到达时间(单位为分钟):;cinjobline[b].Arrtime;cout服务时间(单位为分钟):;cinjobline[b].Sevtime;}}voidFCFS(){intb,j,i;floatt=0;floattime1=0.00,time2=0.00;inttemp;intTempArr,TempSev;for(b=0;bN;b++){for(j=0;jb;j++)if(jobline[b].Arrtimejobline[j].Arrtime){temp=jobline[j].Id;jobline[j].Id=jobline[b].Id;jobline[b].Id=temp;TempArr=jobline[j].Arrtime;jobline[j].Arrtime=jobline[b].Arrtime;jobline[b].Arrtime=TempArr;TempSev=jobline[j].Sevtime;jobline[j].Sevtime=jobline[b].Sevtime;jobline[b].Sevtime=TempSev;}}coutFCFS运行顺序是:;for(b=0;bN;b++){coutjobline[b].Id;}coutendl;jobline[0].Fintime=jobline[0].Sevtime-jobline[0].Arrtime;for(b=1;bN;b++){jobline[b].Fintime=jobline[b-1].Fintime+jobline[b].Sevtime;}cout完成时间分别是:;for(b=0;bN;b++){coutjobline[b].Fintime;}coutendl;jobline[0].Runtime=jobline[0].Sevtime-jobline[0].Arrtime;for(b=1;bN;b++){jobline[b].Runtime=jobline[b-1].Fintime+jobline[b].Sevtime-jobline[b].Arrtime;}cout周转时间分别是:;for(b=0;bN;b++){coutjobline[b].Runtime;}coutendl;for(b=0;bN;b++){jobline[b].Wtime=(float)jobline[b].Runtime/(float)jobline[b].Sevtime;}cout带权周转时间分别是:;for(b=0;bN;b++){coutjobline[b].Wtime;}coutendl;for(b=0;bN;b++){time1+=jobline[b].Runtime;time2+=jobline[b].Wtime;}coutendl;cout平均周转时间是:time1/bendl;cout平均带权周转时间是:time2/bendl;}voidSJF(){intb,j,i;floatt=0;floattime1=0.00,time2=0.00;inttemp;intTempArr,TempSev;for(b=0;bN;b++){for(j=0;jb;j++)if(jobline[b].Arrtimejobline[j].Arrtime){temp=jobline[j].Id;jobline[j

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功