2022年操作系统作业实验二报告 .pdf
《2022年操作系统作业实验二报告 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统作业实验二报告 .pdf(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、江南大学实验报告课程名称操作系统实验名称作业调度实验实验日期2014 12 11 班级信计 1202 姓名任航学号1130112211 仪器编号实验报告要求1实验目的2实验要求3实验步骤4程序清单5运行情况5实验体会一、实验目的:用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二 . 实验要求:(1)编写并调试一个单道处理系统的作业调度模拟程序。作业等待算法:分别采用先来先服务(FCFS ),最短作业优先(SJF)、响应比高者优先(HRN )的调度算法。对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权
2、平均周转时间,以比较各种算法的优缺点。(2) 编写并调度一个多道程序系统的作业调度模拟程序。作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。三. 实验步骤 . 四. 程序清单:单道批处理先来先服务算法:#include #include #include int n;/ 全局变量 n float T1=0,T2=0;/ 分别用来表示周转时间和带权周转时间之和int times=0; struct jcb /作业控制块 char name10; /作业名int reachtime
3、; /作业到达时间int starttime; /作业开始时间int needtime; /作业需要运行的时间int finishtime; /作业完成时间float cycletime; /作业周转时间float cltime; /作业带权周转时间char state; /作业状态名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 28 页 - - - - - - - - - struct jcb *next; /结构体指针*ready=NULL,*p,*q; typede
4、f struct jcb JCB; void inital()/ 建立作业控制块队列,先将其排成先来先服务的模式队列 int i; printf(ntt输入作业数 :); scanf(%d,&n); for(i=0; iname); p-reachtime=i;/ 第一个 0 秒到,第二个1 秒到printf(tt第%d 个作业到达时间默认为:%d,i+1,i); printf(ntt输入作业要运行的时间:); scanf(%d,&p-needtime); p-state=W;/ 状态初始化为等待p-next=NULL; if(ready=NULL)/如果是第一个结点的话执行 ready=q=
5、p; else/不是第一个结点 q-next=p;/ 链接起来q=p;/q 向后移动一个结点,ready 始终指向第一个 void disp(JCB* q)/ 显示作业运行后的周转时间及带权周转时间等 printf(n 作业 %s 正在运行,其运行情况如下:n,q-name); printf( 开始运行时刻:%dn,q-starttime); printf( 完成时刻: %dn,q-finishtime); printf( 周转时间: %fn,q-cycletime); printf( 带权周转时间:%fn,q-cltime); getch(); void running(JCB *p) /运
6、行作业 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 28 页 - - - - - - - - - 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;/ 计算作业运行后的完成时间,周转时间等等p-state=R; p-finishtime=p-starttime
7、+p-needtime; p-cycletime=(float)(p-finishtime-p-reachtime); p-cltime=(float)(p-cycletime/p-needtime); T1+=p-cycletime;/ 周转时间之和T2+=p-cltime;/ 带全周转时间之和disp(p);/ 调用 disp()函数 ,显示作业运行情况times+=p-needtime;/ 累加时间量p-state=F;/完成状态printf(n%s has been finished!npress any key to continue.n,p-name); free(p); / 释放
8、getch(); 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 fcfs() /先来先服务算法 int i,iden; system(cls); inital(); for(i=0; istate=W&p-reachtimenext; while(p!=NULL&iden) ; if(iden) i-; pri
9、ntf(n 没有满足要求的进程,需等待 ); times+; if(times100) printf(n 时间过长 ); getch(); else running(p); /调用 running()函数 final(); /调用 running() 函数 int main() /主函数 printf(ntt先来先服务算法,按任意键继续 .); getch(); fcfs(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 28 页 - - - - - - - - -
10、单道批处理最短作业优先算法:#include #include #include int n;/ 全局变量 n float t1=0,t2=0;/ 分别用来表示周转时间和带权周转时间之和int times=0; struct jcb /作业控制块 char name10; /作业名int reachtime; /作业到达时间int starttime; /作业开始时间int needtime; /作业需要运行的时间float super; /作业的响应比int finishtime; /作业完成时间float cycletime; /作业周转时间float cptime; /作业带权周转时间c
11、har state; /作业状态struct jcb *next; /结构体指针*head=NULL,*p,*q; typedef struct jcb JCB; void inital()/ 建立作业控制块队列,先将其排成先来先服务的模式队列 int i; printf(ntt输入作业数 :); scanf(%d,&n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 28 页 - - - - - - - - - for(i=0; iname); p-reachtim
12、e=i;/ 默认第一个0 秒到,第二个1 秒到。 。printf(tt第%d 个作业到达时间默认为:%d,i+1,i); printf(ntt输入作业要运行的时间:); scanf(%d,&p-needtime); p-state=W;/ 状态初始化为等待p-next=NULL; if(head=NULL)/ 如果是第一个结点的话执行 head=q=p; else/不是第一个结点 q-next=p;/ 链接起来q=p;/q 向后移动一个结点,ready 始终指向第一个 void display(JCB* q)/ 显示作业运行后的周转时间及带权周转时间等 printf(n 作业 %s 正在运行,
13、其运行情况如下:n,q-name); printf( 开始运行时刻:%dn,q-starttime); printf( 完成时刻: %dn,q-finishtime); printf( 周转时间: %fn,q-cycletime); printf( 带权周转时间:%fn,q-cptime); getch(); void run(JCB *min)/min为正在运行作业 if(min=head)/ 先将要运行的作业从队列中分离出来,此时的min 是 min head=min-next; min-next=NULL; else q=head;/形成循环对列while(q-next!=min) q=
14、q-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 28 页 - - - - - - - - - q-next=min-next;/ 分离出最小作业 min-starttime=times;/ 计算作业运行后的完成时间,周转时间等等min-state=R; min-finishtime=min-starttime+min-needtime; min-cycletime=(float)(min-finishtime-min-reachtime); min-cpt
15、ime=(float)(min-cycletime/min-needtime); t1+=min-cycletime;/ 周转时间之和t2+=min-cptime;/ 带全周转时间之和display(min);/ 调用 disp()函数 ,显示作业运行情况times+=min-needtime;/ 累加时间量min-state=F;/ 完成状态printf(n%s has been finished!npress any key to continue.n,min-name); free(min); / 释放getch(); void super() /计算队列中作业的高响应比 JCB *pa
16、dv; padv=head; do if(padv-state=W&padv-reachtimesuper=(float)(times-padv-reachtime+padv-needtime)/padv-needtime; padv=padv-next; while(padv!=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:
17、nnn,n,s); void sjf()/ 最短作业优先算法 JCB *min;/min表示最短作业名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 28 页 - - - - - - - - - int i,iden; system(cls); inital(); for(i=0; istate=W&p-reachtimeneedtimeneedtime)/ 判断作业的长短,min min=p; p=p-next; while(p!=NULL) ;/这个循环遍历作业队列,目
18、的是找出最短的作业,最后p=null ,min 指向最短作业if(iden) i-; /printf(ntime=%d:tno JCB submib.wait.,time); times+; if(times100) printf(nruntime is too long.error); getch(); else run(min); /调用 run() 函数 final(); /调用 final() 函数 int main() /主函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
19、 8 页,共 28 页 - - - - - - - - - printf(ntt最短作业优先算法,按任意键继续.); getch(); sjf(); 运行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 28 页 - - - - - - - - - 单道批处理响应比高者优先算法:#include #include #include int n;/全局变量 n float T1=0,T2=0;/分别用来表示周转时间和带权周转时间之和int times=0; struct
20、 jcb /作业控制块 char name10; /作业名 int reachtime; /作业到达时间 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 inital()/建立作业控制
21、块队列 , 先将其排成先来先服务的模式队列 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 28 页 - - - - - - - - - int i; printf(ntt输入作业数 :); scanf(%d,&n); for(i=0; iname); p-reachtime=i;/第一个 0 秒到,第二个 1 秒到 printf(tt第%d个作业到达时间默认为 :%d,i+1,i); printf(ntt输入作业要运行的时间 :); scanf(%d,&p-needt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统作业实验二报告 2022 操作系统 作业 实验 报告
限制150内