1112实验二报告
13物联网 谢敏 201306104116
一、 实验目的
1. 实验目的
(1)加深对作业调度算法的理解;
(2)进行程序设计的训练。
2.实验要求
用高级语言编写一个或多个作业调度的模拟程序。按照模拟数据的到达时间和所需运行时间,执行FCFS, SJF和HRRN调度算法,程序计算各作业的开始执行时间,各作业的完成时间,周转时间和带权周转时间(周转系数)。
二、 实验内容
根据指定的实验课题,完成设计、编码和调试工作,完成实验报告。
三、 实验方法、步骤及结果测试
- 源程序名1.c ;可执行程序名:1.exe
2.原理分析及流程图
先定义一个进程的结构体,内容包括进程名称、到达时间、执行时间、开始时间、完成时间、周转时间。再让客户输入,接着输入要用的算法,然后系统显示该算法运行完的结果。
3.主要程序段及其解释:
main() { struct stu s[MAX]; int i,j,p; printf("输入进程的个数:"); scanf("%d",&n); for(i=0;i<n;i++) { getchar(); printf("输入第个%d进程的名字:",i+1); scanf("%c",&s[i].name); printf("输入第%d个进程的到达时间:",i+1); scanf("%d",&s[i].gettime); printf("输入第%d个进程的执行时间:",i+1); scanf("%d",&s[i].time); s[i].kstime=0; s[i].wctime=0; s[i].zztime=0; } printf(" name gettime time kstime wctime zztime\n"); for(j=0;j<n;j++) { printf("jinchen %c %d %d %d %d %d\n",s[j].name,s[j].gettime,s[j].time,s[j].kstime,s[j].wctime,s[j].zztime); } while(1) { printf("请选择要使用的算法:1,FCFS;2,SJF;3,HRRF:"); scanf("%d",&p); switch(p) { case 1: fcfs(s); break; case 2: sjf(s); break; case 3: hrrf(s); break; } } }
void fcfs(struct stu d[]) { int i,j,q; struct stu tim; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(d[i].gettime>d[j].gettime) { tim=d[i]; d[i]=d[j]; d[j]=tim; } } } q=d[0].gettime; for(i=0;i<n;i++) { if(q<d[i].gettime) q=d[i].gettime; d[i].kstime=q; d[i].wctime=q+d[i].time; d[i].zztime=d[i].wctime-d[i].gettime; q=q+d[i].wctime; } printf("以下是FCFS的调度结果:\n"); printf(" name gettime time kstime wctime zztime\n"); for(j=0;j<n;j++) { printf("jinchen %c %d %d %d %d %d\n",d[j].name,d[j].gettime,d[j].time,d[j].kstime,d[j].wctime,d[j].zztime); } }
void sjf(struct stu d[]) { int i,j,q; struct stu tim; q=d[0].gettime; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(d[j].gettime<=q) { if(d[i].time>d[j].time) { tim=d[i]; d[i]=d[j]; d[j]=tim; } } } q=q+d[i].time; } q=d[0].gettime; for(i=0;i<n;i++) { if(q<d[i].gettime) q=d[i].gettime; d[i].kstime=q; d[i].wctime=q+d[i].time; d[i].zztime=d[i].wctime-d[i].gettime; q=q+d[i].wctime; } printf("以下是SJF的调度结果:\n"); printf(" name gettime time kstime wctime zztime\n"); for(j=0;j<n;j++) { printf("jinchen %c %d %d %d %d %d\n",d[j].name,d[j].gettime,d[j].time,d[j].kstime,d[j].wctime,d[j].zztime); } }
4.运行结果及分析
四、 实验总结
由于我的能力有限,我自己只做出了两个算法,第三个算法实在想不出来怎么做。本次的实验主要的问题是根据算法的思想来为进程排序,其中最简单的是fcfs算法,至于hrrf算法,我自己找不到方法来给它排序,导致做不出来。