实验二-作业调度实验.doc

上传人:豆**** 文档编号:33467000 上传时间:2022-08-11 格式:DOC 页数:8 大小:37.50KB
返回 下载 相关 举报
实验二-作业调度实验.doc_第1页
第1页 / 共8页
实验二-作业调度实验.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《实验二-作业调度实验.doc》由会员分享,可在线阅读,更多相关《实验二-作业调度实验.doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精品文档,仅供学习与交流,如有侵权请联系网站删除西北农林科技大学信息工程学院实习报告课程 操作系统 学院 信息工程 专业年级 软件151 学号 2015012893 姓名 张鑫 周次 第八周 交报告时间 2017.5.5 成绩 实验二 作业调度实验一. 目的要求: 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二、实验内容:1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 流程图如下:1、响应比高者优先算法流程图:2、先来先服务调度算法流程图:3、短作

2、业优先算法调度流程图:实验代码如下:#include#include#includestruct jcb char name10;/作业名 float arrtime;/提交时间 float waitTime;/等待时间 float startTime;/开始时间 float runTime;/运行时间 float finishTime;/完成时间 float TAtime; /周转时间 float TAWtimei;/带权周转时间 float AvgTAtime,AvgTAWtimei;/平均周转时间;平均带权周转时间 float bi;/响应比jcb JCB100;int ReadFile

3、() int m=0; int i=0; FILE *fp; /定义文件指针 fp=fopen(3.txt,r); /打开文件 if(fp=NULL) printf(File open error !n); exit(0); else printf(作业名 提交时间 运行时间n); while(!feof(fp) fscanf(fp,%s%f%f,&JCBi.name,&JCBi.arrtime,&JCBi.runTime); /fscanf()函数将数据读入 printf(n%s%15f%12f,JCBi.name,JCBi.arrtime,JCBi.runTime); /输出到屏幕 i+;

4、 fclose(fp); /关闭文件 m=i-1; return m;/菜单void menu() printf(nn |* 作业调度 *|n); printf( |=|n); printf( | 0.退出 |n); printf( | 1.先来先服务 (FCFS) 调度算法 |n); printf( | 2.短作业优先 (SJF) 调度算法 |n); printf( | 3.响应比高者优先 (HRRN) 调度算法 |n); printf( |=|n);void displayone(float p,char *h,int i,int j) strcpy(h,JCBi.name); strcp

5、y(JCBi.name,JCBj.name); strcpy(JCBj.name,h); p=JCBi.arrtime; JCBi.arrtime=JCBj.arrtime; JCBj.arrtime=p; p=JCBi.runTime; JCBi.runTime=JCBj.runTime; JCBj.runTime=p; p=JCBi.startTime; JCBi.startTime=JCBj.startTime; JCBj.startTime=p; p=JCBi.finishTime; JCBi.finishTime=JCBj.finishTime; JCBj.finishTime=p;

6、void displaytow(int i,int y) printf(n); printf(作业%s先开始运行nn,JCB0.name); float AvgCycleTime,AvgValueCycleTime,k=0,m=0;/AvgCycleTime为平均周转时间,AvgValueCycleTime为平均带权周转时间 for(i=0;iy;i+) JCB0.startTime=JCB0.arrtime; JCBi.finishTime=JCBi.startTime+JCBi.runTime;/结束时间 JCBi+1.startTime=JCBi.finishTime; JCBi.wai

7、tTime=JCBi.startTime-JCBi.arrtime;/等待时间 JCBi.TAtime=JCBi.finishTime-JCBi.arrtime;/周转时间 JCBi.TAWtimei=JCBi.TAtime/JCBi.runTime;/带权周转时间 k+=JCBi.TAtime; m+=JCBi.TAWtimei; AvgCycleTime=k/y;/平均旋转时间 AvgValueCycleTime=m/y;/平均带权旋转时间 printf(作业名 提交时间 开始时间 运行时间 结束时间 等待时间 周转时间 带权周转时间n); for(i=0;iy;i+) printf(%s

8、t%.2ft%.2ft%4.2ft%6.2ft%7.2ft%7.2ft%8.2fnn,JCBi.name,JCBi.arrtime,JCBi.startTime,JCBi.runTime,JCBi.finishTime,JCBi.waitTime,JCBi.TAtime,JCBi.TAWtimei); printf(平均周转时间为:); printf(%.2fnn,AvgCycleTime); printf(平均带权周转时间为:); printf(%.2fnn,AvgValueCycleTime);void FCFS(int y)/先来先服务算法 float p; int i,j; char

9、h100; for(i=0;iy;i+) for(j=i+1;jJCBj.arrtime) displayone(p,h,i,j); displaytow(i,y);void SJF(int y)/短作业优先算法 float p; int i,j; char h100; for(i=0;iy;i+)/先提交的作业先运行,后面来的作业再比较运行时间长短 for(j=i+1;jJCBj.arrtime)/先把作业按提交时间来排序 displayone(p,h,i,j); for(i=1;iy;i+) for(j=i+1;jJCBj.runTime)/比较后面来的作业的运行时间 displayone

10、(p,h,i,j); displaytow(i,y);void HRRN(int y)/响应比高者优先算法 int i,j; float p; char h100; for(i=0;iy;i+)/先提交的作业先运行,后面来的作业再比较响应比的大小 for(j=i+1;jJCBj.arrtime)/先把作业按提交时间来排序 displayone(p,h,i,j); for(i=0;iy;i+) JCB0.startTime=JCB0.arrtime; JCBi.finishTime=JCBi.startTime+JCBi.runTime;/结束时间 JCBi+1.startTime=JCBi.f

11、inishTime; JCBi.waitTime=JCBi.startTime-JCBi.arrtime;/等待时间 JCBi.TAtime=JCBi.finishTime-JCBi.arrtime;/周转时间 JCBi.bi=JCBi.TAtime/JCBi.runTime;/响应比 for(i=1;iy;i+) for(j=i+1;jy;j+) if(JCBi.biJCBj.bi)/比较后面来的作业的响应比 displayone(p,h,i,j); p=JCBi.bi; JCBi.bi=JCBj.bi; JCBj.bi=p; displaytow(i,y); for(i=1;iy;i+)

12、printf(%s的响应比为:%.2fn,JCBi.name,JCBi.bi);int main() while(1) int i,x,n; menu(); loop1:printf(请选择模块(03): ); scanf(%d,&i); if(i=0) exit(0); else if(i3) printf(输入有误,请重新输入n); goto loop1;/无条件转移语句loop2:printf(原始数据是:n); n=ReadFile(); for(x=0;xn;x+) printf(n%s%15f%12f,JCBi.name,JCBi.arrtime,JCBi.runTime); sw

13、itch(i) case 0:exit(0);break; case 1:FCFS(n);break; case 2:SJF(n);break; case 3:HRRN(n);break;实验截图说明如下:这是先来先服务算法调度这是最短优先作业调度算法结果这是响应比高者优先调度算法结果2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求实验代码如下:#include <stdio.h>#include <stdl

14、ib.h>#define getjch(type) (type*)malloc(sizeof(type)#define N 10struct jcb /* 定义作业控制块PCB */ char name10; float needtime; /*运行时间*/ float arrivetime;/*提交时刻*/ float storageN;/*系统资源*/ struct jcb* link;*ready=NULL,*pb=NULL,*p;typedef struct jcb JCB;float Tc,Ti,Wi,T=0;/*完成时刻,周转时间,带权周转时间,时间量*/float TiSu

15、m=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/float sourceN;int n;void input(); /*输入作业信息*/int space(); /* 返回就绪队列中作业的数目*/void fcfs(); /*先来先服务算法*/void disp(JCB *pr); /* 显示相应的作业*/void running(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(" 请输入所拥有的资源种类:"); scanf("

16、 %d",& n); printf(" 输入系统所拥有资源数:n"); for(i=0; i< n; i+) printf(" 资源%d:",i); scanf(" %f",& sourcei); printf(" n 输入作业数量:"); scanf(" %d",& num); for(i=0; i< num; i+) printf(" n 作业号%d:n",i); p=getjch(JCB); printf(" 输入

17、作业名:"); scanf(" %s",p-> name); printf(" 输入提交时间:"); scanf(" %f",& p-> arrivetime); printf(" 输入运行时间:"); scanf(" %f",& p-> needtime); printf(" 输入所需资源数:n"); for(k=0; k< n; k+) printf(" 资源%d:",i); scanf("

18、%f",& p-> storagek); printf(" n"); p-> link=NULL; fcfs();int space() int l=0; JCB* pr=ready; while(pr!=NULL) l+; pr=pr-> link; return(l);void disp(JCB * pr) /*建立作业显示函数,用于显示当前作业*/ int i; printf(" n%6st%6st%6st"," 作 业 名 "," 运行时间"," 提交时刻&qu

19、ot;); for(i=0; i< n; i+) printf(" 资源%dt",i); printf(" n%6st%6.2ftt%6.2ft",pr-> name,pr-> needtime,pr-> arrivetime); for(i=0; i< n; i+) printf(" t%6.2f",pr-> storagei); printf(" n");void destroy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ free(p);void check()

20、 JCB *first,*fir,*p; int flag=0,i,test=0; first=pb; while(first& & (T> =first-> arrivetime)& & (flag=0) void running() JCB *pr; int i; printf(" 正在运行的作业是:%sn",p-> name); disp(p); if(ready!=NULL) printf(" 就绪队列如下:n"); pr=ready; while(pr!=NULL) disp(pr); pr=p

21、r-> link; else printf(" 就绪队列为空队列!n"); if(pb!=NULL) printf(" 后备队列如下:n"); pr=pb; while(pr!=NULL) disp(pr); pr=pr-> link; else printf(" 后备队列为空队列!n"); printf(" 作 业 %s 的 开 始 运 行 时 刻 T:%4.2fn",p-> name,T); Tc=T+p-> needtime; T=Tc; Ti=Tc-p-> arrivetime

22、; Wi=Ti/(p-> needtime); for(i=0; i< n; i+) sourcei=sourcei+p-> storagei; printf(" 完成时刻Tc:%4.2fn",Tc); printf(" 周转时间Ti:%4.2fn",Ti); printf(" 带权周转时间Wi:%4.2fn",Wi); TiSum+=Ti; WiSum+=Wi; destroy();main() /主函数 int len; char ch; input(); T=pb-> arrivetime; check(

23、); len=space(); while(len!=0)& & (ready!=NULL) system(" pause"); p=ready; ready=p-> link; p-> link=NULL; running(); if(pb!=NULL) if(ready=NULL) if(T< pb-> arrivetime) T=pb-> arrivetime; check(); len=space(); printf(" n该作业组的平均周转时间:%4.2fn",TiSum /len); printf(" 该作业组的带权平均周转时间:%4.2fn",WiSum/len); ch=getchar();三、实验总结:这次实验要求不同的算法去实现作业调度模拟程序,使我理解了作业调度的原理,不仅让我学到了很多算法思想,也很好开拓了我们的思维,学会从不同的角度去思考问题和解决问题。【精品文档】第 8 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com