版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上一、实验名称作业调度算法实验。二、实验目标已知n个作业的进入时间和估计运行时间(以分钟计)(1)单道环境下,分别用先来先服务调度算法、短作业优先调度算法、响应比高者优先调度算法,求出批作业的平均周转时间和带权平均周转时间; 在多道环境(如2道)下,求出这些作业的平均周转时间和带权平均周转时间(2)就同一批次作业,分别讨论这些算法的优劣;(3)衡量同一调度算法对不同作业流的性能。三、实验环境要求1.PC机。2.Windows环境。3.CodeBlocks四、实验基本原理 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。
2、0; (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。 ( 3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。 (4)两道批处理系统中最短作业优先调度算法:内存中可以进入两个作业,这两个作业按照最短作业优先调度算法调整作业执行的次序。五、数据结构设计使用一维数组来保存多个作业Job job20;,采用的是顺序存储。使用queue<Jcb *> q保存调度队列里的作业指针。struct Date/时间结构体 int hour;/时间的小
3、时 int minute;/时间的分钟; struct Jcb/作业结构体,用来描述作业 int no;/作业编号 Date enter;/进入时间 int operation;/估计运行时间 Date start;/开始时间 Date over;/结束时间 int turnover;/周转时间 double weighted;/带权周转时间 int state=0;/标记改作业是否进入运行状态;六、流程图单道环境下算法流程图多道环境下的两道批处理系统中最短作业优先作业调度算法的流程图。七、源代码 #include<iostream>#include<stdio.h>#
4、include<cstring>#include<algorithm>#include<queue>using namespace std;struct Date/时间结构体 int hour;/时间的小时 int minute;/时间的分钟;struct Jcb/作业结构体,用来描述作业 int no;/作业编号 Date enter;/进入时间 int operation;/估计运行时间 Date start;/开始时间 Date over;/结束时间 int turnover;/周转时间 double weighted;/带权周转时间 int stat
5、e=0;/标记改作业是否进入运行状态;/函数声明void display(Jcb J,int n);/输出void runing( queue<Jcb *> q,int n);/根据算法将就绪队列排好队后的单道作业的运行主体void fcfs( Jcb J,int n);/先来先服务作业调度void sfc(Jcb J,int n);/最短作业优先作业调度void hrfc(Jcb J,int n);/最高响应比作业调度void text(void (*dispatch)(Jcb J, int n),Jcb J,int n,Jcb J1,int n1, Jcb J2,int n2)
6、;/测试单道环境,不同批次作业,相同算法void mulfc(Jcb J,int n);/两道环境,内存中可以用两个作业,内存中的这两个作业按照作业长短调整作业执行的次序。/主函数,(1)同一批次作业,分别用先来先服务调度算法、短作业优先调度算法、响应比高者优先调度算法,得到批作业的平均周转时间和带权平均周转时间;(2)同一调度算法对不同作业流的调度。int main() int n,n1,n2; Jcb job20,job120,job220; FILE*p=fopen("example1.txt", "r"); fscanf(p, "%d&
7、quot;, &n); /批次一作业 for(int i=0;i<n;i+) jobi.no=i+1; fscanf(p, "%d%d%d", &jobi.enter.hour, &jobi.enter.minute, &jobi.operation); /批次二作业 fscanf(p, "%d", &n1); for(int i=0;i<n1;i+) job1i.no=i+1; fscanf(p, "%d%d%d", &job1i.enter.hour, &job1
8、i.enter.minute, &job1i.operation); /批次三作业 fscanf(p, "%d", &n2); for(int i=0;i<n2;i+) job2i.no=i+1; fscanf(p, "%d%d%d", &job2i.enter.hour, &job2i.enter.minute, &job2i.operation); fclose(p); printf("n-单道环境,同一批次作业,不同算法-n"); cout<<"先来先服务作业调
9、度:"<<endl; fcfs(job,n); cout<<"最短时间优先服务作业调度:"<<endl; sfc(job,n); cout<<"最高响应比优先作业调度算法"<<endl;hrfc(job,n);printf("nn");printf("-单道环境,不同批次作业,同一算法-n");cout<<".先来先服务作业调度."<<endl;text(fcfs, job,n,job1,n1,job2
10、,n2);cout<<".最短优先服务作业调度."<<endl;text(sfc, job,n,job1,n1,job2,n2);cout<<".最高响应比优先服务作业调度:."<<endl;text(hrfc, job,n,job1,n1,job2,n2);printf("-两道环境-n");mulfc(job1,n);printf("-n"); return 0;/单道环境,不同批次作业,同一算法void text(void (*dispatch)(Jcb J,
11、int n),Jcb J,int n,Jcb J1,int n1, Jcb J2,int n2)/单道环境,不同批次作业,同一算法 cout<<"批次一作业:"<<endl; dispatch(J,n); cout<<"批次二作业:"<<endl; dispatch(J1,n1); cout<<"批次三作业:"<<endl; dispatch(J2,n2);/输出void display(Jcb J,int n) double T=0,W=0; printf(&q
12、uot; 作业 进入时间 估计运行时间(分钟) 开始时间 结束时间 周转时间(分钟) 带权周转时间n"); for(int i=0;i<n;i+) Ji.turnover=(Ji.over.hour*60 + Ji.over.minute)-(Ji.enter.hour*60+Ji.enter.minute); T+=Ji.turnover; Ji.weighted=Ji.turnover/(double)Ji.operation; W+=Ji.weighted; printf("Job%2dt %2d:%02dt %-14dt %2d:%02dt %2d:%02dt
13、 %-6dt%-5.2ftn", Ji.no,Ji.enter.hour, Ji.enter.minute,Ji.operation, Ji.start.hour, Ji.start.minute,Ji.over.hour, Ji.over.minute, Ji.turnover,Ji.weighted ); T/=n; W/=n; printf("作业平均周转时间 T=%.2lf 分钟n", T); printf("作业带权平均周转时间 W=%.3lfnnn",W);/根据算法将就绪队列排好队后的单道作业的运行主体void runing( q
14、ueue<Jcb *> q,int n) Jcb *j; int h,m; j=q.front(); h=j->enter.hour; m=j->enter.minute; while (!q.empty() j=q.front(); q.pop(); j->start.hour=h; j->start.minute=m; j->over.hour=j->start.hour+(j->start.minute+j->operation)/60; j->over.minute=(j->start.minute+j->o
15、peration)%60; j->turnover=(j->over.hour*60 + j->over.minute)-(j->enter.hour*60+j->enter.minute); j->weighted=j->turnover/(double)j->operation; h=j->over.hour; m=j->over.minute; / display(J,t);/最高响应比优先作业调度算法void hrfc(Jcb J,int n)/最高响应比优先作业调度算法queue<Jcb *> qjob; int
16、 flag20; for(int j=0;j<n;j+) flagj=0; qjob.push(&J0); double wait=J0.operation+J0.enter.hour*60+J0.enter.minute;/记录作业流已经执行的时间 int t=n-1; flag0=1; while(t) int i=1; while(flagi) i+; for(int j=i; j<n ;j+) if( (Jj.enter.hour*60+Jj.enter.minute)>wait) break;/如果这个作业还没来到,则停止继续比较,只考虑已经进入就绪队列的作
17、业 if(flagj=0 ) double waiti=wait-Ji.enter.hour*60-Ji.enter.minute;/作业Ji的等待时间 double waitj=wait-Jj.enter.hour*60-Jj.enter.minute; if(waiti/Ji.operation)<(waitj/Jj.operation) i=j; qjob.push(&Ji); flagi=1; wait+=Ji.operation; t-; runing(qjob,n); display(J,n);void fcfs( Jcb J,int n)/先来先服务作业调度算法 q
18、ueue<Jcb *> qjob; for(int i=0;i<n;i+) qjob.push(&Ji); runing(qjob,n); display(J,n);/最短作业优先作业调度算法void sfc(Jcb J,int n)/最短作业优先作业调度算法 queue<Jcb *> qjob; qjob.push(&J0); int time=J0.enter.hour*60+J0.enter.minute+J0.operation;/上一个作业的结束时间 J0.state=1; int t=n-1; while(t) int i=1; whi
19、le(Ji.state) i+; for(int j=i;j<n;j+) if( (Jj.enter.hour*60+Jj.enter.minute)>time) break;/如果这个作业还没来到,则停止继续比较,只考虑已经进入就绪队列的作业 if(Jj.state=0 && (Ji.operation>Jj.operation) i=j; qjob.push(&Ji); Ji.state=1; time+=Ji.operation; t-; runing(qjob,n);display(J,n);/两道环境,内存中可以用两个作业,内存中的这两个作业
20、按照作业void mulfc(Jcb J,int n)/两道环境,内存中可以用两个作业,内存中的这两个作业按照作业长短调整作业执行的次序。/至少有两个作业。 cout<<"两道批处理系统中最短作业优先作业调度算法"<<endl; int op20; int i,work1=-1,work2=-1;/work1是先开始执行的作业,work2是后来进入内存的作业 for(i=0;i<n;i+) opi=Ji.operation; Ji.state=0; work1=0; J0.state=1; J0.start.hour=J0.enter.hour
21、; J0.start.minute=J0.enter.minute; work2=1; int h=J0.enter.hour; int m=J0.enter.minute; int work=work1; int time; int t=2; while(t<=n) if(Jwork1.operation>Jwork2.operation) /第二个work2进入内存的作业的执行时间短于work1,就暂停执行work1,转而执行work2. opwork1+=Jwork2.operation; if(t=2) /第二个进入内存的,且运行时间较已在内存中的短,则作业开始时间为进入的
22、时间 Jwork2.start.hour=Jwork2.enter.hour; Jwork2.start.minute=Jwork2.enter.minute; else /从第三个进入内存的作业,且执行时间比当前在内存中的执行时间短,则开始时间为上一个作业的结束时间 Jwork2.start.hour=h; Jwork2.start.minute=m; Jwork2.over.hour=Jwork2.start.hour+(Jwork2.start.minute+opwork2)/60; Jwork2.over.minute=(Jwork2.start.minute+opwork2)%60;
23、 h=Jwork2.over.hour; m=Jwork2.over.minute; time=h*60+m; work2=-1;/改作业执行完毕 else /第二个work2进入内存的作业的执行时间较长,所以仍然执行开始就在内存的作业work1,知道work1执行完毕 Jwork1.over.hour=Jwork1.start.hour+(Jwork1.start.minute+opwork1)/60; Jwork1.over.minute=(Jwork1.start.minute+opwork1)%60; h=Jwork2.over.hour; m=Jwork2.over.minute;
24、time=h*60+m; Jwork2.start.hour=h; Jwork2.start.minute=m; work1=work2; work2=-1; int w; int i=1; while(Ji.state=1) i+; w=i;for(int j=w; j<n;j+) if( (Jj.enter.hour*60+Jj.enter.minute)>time) break;/如果这个作业还没来到,则停止继续比较,只考虑已经进入就绪队列的作业if(Jj.state=0 && (Jw.operation > Jj.operation)w=j; work
25、2=w;/第二个进入内存的作业 t+; Jwork2.state=1; /最后剩下work1作业 Jwork1.over.hour=Jwork1.start.hour+(Jwork1.start.minute+opwork1)/60; Jwork1.over.minute=(Jwork1.start.minute+opwork1)%60; display(J,n);八、实验结果 (1)在单道环境下,已知n个作业的进入时间和估计运行时间(以分钟计),得到的每一个作业的开始时间、结束时间、周转时间、带权周转时间,以及这些作业的平均周转时间和带权平均周转时间;(2)同一调度算法对不同作业流的性能,每
26、个算法有三个测试作业流 先来先服务作业调度最短优先服务作业调度 最高响应比优先服务作业调度(3)在2道环境下,已知n个作业的进入时间和估计运行时间(以分钟计),得到的每一个作业的开始时间、结束时间、周转时间、带权周转时间,以及这些作业的平均周转时间和带权平均周转时间。九、结果分析(1)单道环境下,对于批次一作业流。先来先服务的作业调度的作业平均周转时间T=112.5分钟最短作业优先服务作业调度的作业平均周转时间T=90分钟最高相应比优先服务作业调度的作业平均周转时间T=102.5分钟.可见对于批次一作业,最短作业优先作业调度算法效率最高。(2)单道环境下。2.1对于3个不同批次作业,先来先服务的作业调度批次一,作业带权平均周转时间 W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年大气污染防治法城管职责题库
- 2026年青年干部黄河保护法专项竞赛题库
- 2026年历史常识与文化素养AI出题
- 2026年智能化工具应用管理晋升知识考核
- 2026年机器人研学旅行竞赛体验课程
- 2026年绿色环保技术突破题集
- 2026年人工智能赋能新质生产力题库
- 2026年题型多样化训练助你轻松备考过关
- 2026年女工特殊劳动保护规定与权益保障测试
- 2026年街道农贸市场及周边环境治理题
- 电离辐射危害及预防方法
- 系统解剖学课件:内脏神经
- GB/T 19515-2023道路车辆可再利用率和可回收利用率要求及计算方法
- GB/T 15587-2023能源管理体系分阶段实施指南
- ICD-9-CM3编码与手术分级目录
- 数据库原理及应用-课件
- 探究物联网的技术特征-说课
- GB/T 18804-2022运输工具类型代码
- LY/T 1726-2008自然保护区有效管理评价技术规范
- GA/T 951-2011紫外观察照相系统数码拍照规则
- 《内部控制》第四章-风险评估课件
评论
0/150
提交评论