作业调度实验报告,.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《作业调度实验报告,.pdf》由会员分享,可在线阅读,更多相关《作业调度实验报告,.pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验二作业调度一. 实验题目1、编写并调试一个单道处理系统的作业等待模拟程序。作业调度算法: 分别采用先来先服务(FCFS ) ,最短作业优先(SJF) 、响应比高者优先(HRN )的调度算法。(1) 先来先服务算法: 按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。(2)最短作业优先算法:是以进入系统的作业所提出的“ 执行时间 ” 为标准,总是优先选取执行时间最短的作业。(3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。2、编写并调度一个多道程序系统的作业调度模拟程序。作业调度算法:采用基于先来先服务的调度算法。可以
2、参考课本中的方法进行设计。对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。二. 实验目的:本实验要求用高级语言(C 语言实验环境) 编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三 .实验过程单道处理系统作业调度1)单道处理程序作业调度实验的源程序: zuoye.c 执行程序 : zuoye.exe 2)实验分析:1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。2、每个作业由一个作业
3、控制块JCB表示,JCB可以包含如下信息:作业名、 提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait) 、运行 R(Run)和完成 F(Finish)三种状态之一。 每个作业的最初状态总是等待 W 。3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、 带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。3) 流程图 : 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 19 页 - - - - - - - - - - 二.
4、最短作业优先算法三. 高响应比算法图一 . 先来先服务流程图4) 源程序 : #include #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 int n; float T1=0,T2=0; int times=0; struct jcb /作业控制块 char name10; /作业名 int reachtime; /作业到达时间代替代替精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页
5、,共 19 页 - - - - - - - - - - int starttime; /作业开始时间 int needtime; /作业需要运行的时间 float super; /作业的响应比 int finishtime; /作业完成时间 float cycletime; /作业周转时间 float cltime; /作业带权周转时间 char state; /作业状态 struct jcb *next; /结构体指针*ready=NULL,*p,*q; typedef struct jcb JCB; void inize() /初始化界面 printf(nntt*ttn); printf(
6、tttt实验二作业调度 n); printf(tt*ttn); printf(nnnttttt计算机学院软件四班n); printf(ttttt蓝小花 n); printf(ttttt3204007102n); printf(ttttt完成日期: 2006 年 11 月 17 号); printf(nnntt请输入任意键进入演示过程n); getch(); void inital() /建立作业控制块队列, 先将其排成先来先服务的模式队列 int i; printf(n输入作业数 :); scanf(%d,&n); for(i=0;iname); getch(); p-reachtime=i;
7、 printf(作业默认到达时间:%d,i); printf(n输入作业要运行的时间:); scanf(%d,&p-needtime); p-state=W; p-next=NULL; if(ready=NULL) ready=q=p; else q-next=p; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 19 页 - - - - - - - - - - q=p; void disp(JCB* q,int m) /显示作业运行后的周转时间及带权周转时间等 if(m=3) /显示高响应比
8、算法调度作业后的运行情况 printf(n作业%s正在运行,估计其运行情况:n,q-name); printf(开始运行时刻:%dn,q-starttime); printf(完成时刻: %dn,q-finishtime); printf(周转时间: %fn,q-cycletime); printf(带权周转时间:%fn,q-cltime); printf(相应比 :%fn,q-super); getch(); else / 显示先来先服务, 最短作业优先算法调度后作业的运行情况 printf(n作业 %s正在运行,估计其运行情况:n,q-name); printf(开始运行时刻:%dn,q-
9、starttime); printf(完成时刻: %dn,q-finishtime); printf(周转时间: %fn,q-cycletime); printf(带权周转时间:%fn,q-cltime); getch(); void running(JCB *p,int m) /运行作业 if(p=ready) /先将要运行的作业从队列中分离出来 ready=p-next; p-next=NULL; else q=ready; while(q-next!=p) q=q-next; q-next=p-next; p-starttime=times; /计算作业运行后的完成时间, 周转时间等等
10、p-state=R; p-finishtime=p-starttime+p-needtime; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 19 页 - - - - - - - - - - p-cycletime=(float)(p-finishtime-p-reachtime); p-cltime=(float)(p-cycletime/p-needtime); T1+=p-cycletime; T2+=p-cltime; disp(p,m); /调用 disp()函数 , 显示作业运行
11、情况 times+=p-needtime; p-state=F; printf(n%s has been finished!npress any key to continue.n,p-name); free(p); /释放运行后的作业 getch(); void super() /计算队列中作业的高响应比 JCB *padv; padv=ready; do if(padv-state=W&padv-reachtimesuper=(float)(times-padv-reachtime+padv-needtime)/padv-needtime padv=padv-next; while(pad
12、v!=NULL); void final() /最后打印作业的平均周转时间, 平均带权周转时间 float s,t; t=T1/n; s=T2/n; getch(); printf(nn作业已经全部完成!); printf(n%d个作业的平均周转时间是:%f,n,t); printf(n%d个作业的平均带权周转时间是%f:nnn,n,s); void hrn(int m) /高响应比算法 JCB *min; int i,iden; system(cls); inital(); for(i=0;istate=W&p-reachtimesupermin-super) min=p; p=p-next
13、; while(p!=NULL); if(iden) i-;times+; /printf(ntime=%d:tno JCB submib.wait.,time); if(times1000) printf(nruntime is too long.error.);getch(); else running(min,m); /调用 running()函数 /for final(); /调用 running()函数 void sjf(int m) / 最短作业优先算法 JCB *min; int i,iden; system(cls); inital(); for(i=0;istate=W&p-
14、reachtimeneedtimeneedtime) min=p; p=p-next; while(p!=NULL) ; if(iden) i-; /printf(ntime=%d:tno JCB submib.wait.,time); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 19 页 - - - - - - - - - - times+; if(times100)printf(nruntime is too long.error);getch(); else running(min,
15、m); /调用 running()函数 /for final(); /调用 running()函数 void fcfs(int m) /先来先服务算法 int i,iden; system(cls); inital(); for(i=0;istate=W&p-reachtimenext; while(p!=NULL&iden) ; if(iden) i-; printf(n没有满足要求的进程, 需等待 ); times+; if(times100)printf(n时间过长 );getch(); else running(p,m); /调用 running()函数 final(); /调用 ru
16、nning()函数 void mune() int m; system(cls); printf(nntt*ttn); printf(tttt作业调度演示 n); printf(tt*ttn); printf(nnnttt1.先来先服务算法.); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 19 页 - - - - - - - - - - printf(nttt2.最短作业优先算法.); printf(nttt3.响应比高者优先算法); printf(nttt0.退出程序 .); prin
17、tf(nntttt选择所要操作 :); scanf(%d,&m); switch(m) case 1: fcfs(m); getch(); system(cls); mune(); break; case 2: sjf(m); getch(); system(cls); mune(); break; case 3: hrn(m); getch(); system(cls); mune(); break; case 0: system(cls); break; default: printf(选择错误 , 重新选择 .); getch(); system(cls); mune(); main()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业 调度 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内