操作系统 实验二 作业调度
实验二、作业调度实验
专业:商业软件工程 姓名:冯婉莹 学号:201406114112
一、 实验目的
(1)加深对作业调度算法的理解;
(2)进行程序设计的训练。
二、 实验内容和要求
用高级语言编写一个或多个作业调度的模拟程序。
单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。
三、 实验方法、步骤及结果测试
- 1. 源程序名:压缩包文件(rar或zip)中源程序名作业调度2.c
可执行程序名:作业调度2.exe
- 2. 原理分析及流程图
定义结构体存储数据
- 3. 主要程序段及其解释:
void caculate(int i,int y)
{
printf("\n");
printf("作业%s先开始运行\n\n",JCB[0].name);
float AvgCycleTime,AvgValueCycleTime,k=0,m=0;//AvgCycleTime为平均周转时间,AvgValueCycleTime为平均带权周转时间
for(i=1;i<=y;i++)
{
JCB[0].startime=JCB[0].arrtime;
JCB[i].finitime=JCB[i].startime+JCB[i].reqtime;//结束时间
JCB[i+1].startime=JCB[i].finitime;
JCB[i].waitTime=JCB[i].startime-JCB[i].arrtime;//等待时间
JCB[i].TAtime=JCB[i].finitime-JCB[i].arrtime;//周转时间
JCB[i].TAWtime=JCB[i].TAtime/JCB[i].reqtime;//带权周转时间
k+=JCB[i].TAtime;
m+=JCB[i].TAWtime;
}
AvgCycleTime=k/y;//平均旋转时间
AvgValueCycleTime=m/y;//平均带权旋转时间
printf("作业名 提交时间 开始时间 运行时间 结束时间 等待时间 周转时间 带权周转时间\n");
for(i=1;i<=y;i++)
printf("%s\t%.2f\t%.2f\t%4.2f\t%6.2f\t%7.2f\t%7.2f\t%8.2f\n\n",JCB[i].name,JCB[i].arrtime,JCB[i].startime,JCB[i].reqtime,JCB[i].finitime,JCB[i].waitTime,JCB[i].TAtime,JCB[i].TAWtime);
printf("平均周转时间为:");
printf("%.2f\n\n",AvgCycleTime);
printf("平均带权周转时间为:");
printf("%.2f\n\n",AvgValueCycleTime);
}
void FCFS(int y)//先来先服务算法
{
float p;
int i,j;
char h[100];
for(i=1;i<=y;i++)
{
for(j=i+1;j<=y;j++)
{
if(JCB[i].arrtime >JCB[j].arrtime)
{
strcpy(h,JCB[i].name);
strcpy(JCB[i].name,JCB[j].name);
strcpy(JCB[j].name,h);
p=JCB[i].arrtime;
JCB[i].arrtime=JCB[j].arrtime;
JCB[j].arrtime=p;
p=JCB[i].reqtime;
JCB[i].reqtime=JCB[j].reqtime;
JCB[j].reqtime=p;
p=JCB[i].startime;
JCB[i].startime=JCB[j].startime;
JCB[j].startime=p;
p=JCB[i].finitime;
JCB[i].finitime=JCB[j].finitime;
JCB[j].finitime=p;
}
}
}
printf("排序后:\n");
printf(" name\tarrtime\treqtime\n");
for(i=1;i<=y;i++)
{
printf(" %s\t%.2f\t%.2f\n",JCB[i].name,JCB[i].arrtime,JCB[i].reqtime);
}
caculate(i,y);
}
void SJPF(int y) //短作业优先
{
float p;
int i,j;
char h[100];
for(i=1;i<=y;i++)
{
for(j=i+1;j<=y;j++)
{
if(JCB[i].reqtime>JCB[j].reqtime)
{
strcpy(h,JCB[i].name);
strcpy(JCB[i].name,JCB[j].name);
strcpy(JCB[j].name,h);
p=JCB[i].arrtime;
JCB[i].arrtime=JCB[j].arrtime;
JCB[j].arrtime=p;
p=JCB[i].reqtime;
JCB[i].reqtime=JCB[j].reqtime;
JCB[j].reqtime=p;
p=JCB[i].startime;
JCB[i].startime=JCB[j].startime;
JCB[j].startime=p;
p=JCB[i].finitime;
JCB[i].finitime=JCB[j].finitime;
JCB[j].finitime=p;
}
}
}
caculate(i,y);
}
- 4. 运行结果及分析
一般必须配运行结果截图,结果是否符合预期及其分析。
(截图需根据实际,截取有代表性的测试例子)
四、 实验总结
从大体框架看觉得很简单,但做起来很多细节要注意。