实验二、作业调度模拟实验
专业:商业软件工程 姓名:王泽锴 学号:201406114113
一、实验目的
(1)加深对作业调度算法的理解;
(2)进行程序设计的训练。
二、实验内容和要求
(1)实验要求
用高级语言编写一个或多个作业调度的模拟程序。
单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。
(2)实验内容
根据指定的实验课题,完成设计、编码和调试工作,完成实验报告。
三、实验方法、步骤及结果测试
1. 源程序名:4.cpp 可执行程序名4.exe
2. 原理分析及流程图
3. 主要程序段及其解释:、
void FCFS() { //调用输入函数 base(); int i,j,k = 0; int temp[100]; for(i=0;i<num;i++) temp[i]=i; //按作业到达时间进行排序 for(i=0;i<num;i++){ for(j=i+1;j<num;j++){ if(job[temp[i]].arrtime>job[j].arrtime){ k = temp[i]; temp[i] = temp[j]; temp[j] = k; } } } //计算周转时间、带权周转时间 job[temp[0]].startime = job[temp[0]].arrtime; job[temp[0]].finitime = job[temp[0]].startime + job[temp[0]].reqtime; job[temp[0]].TAtime = (float)job[temp[0]].finitime - job[temp[0]].arrtime; job[temp[0]].TAWtime = job[temp[0]].TAtime/job[temp[0]].reqtime; for(i=1;i<num;i++){ job[temp[i]].startime = job[temp[i-1]].finitime; job[temp[i]].finitime = job[temp[i]].startime + job[temp[i]].reqtime; job[temp[i]].TAtime = (float)job[temp[i]].finitime - job[temp[i]].arrtime; job[temp[i]].TAWtime = job[temp[i]].TAtime/job[temp[i]].reqtime; } printf("经按到达时间排序后,未达到队列是\n"); printf("作业名 到达时间 CPU所需时间 开始时间 结束时间 周转时间 带权周转时间\n"); //输出相关内容 for(i=0;i<num;i++) { printf(" %s\t %d\t\t%d\t %d\t %d\t %f\t %f\n",job[temp[i]].name,job[temp[i]].arrtime, job[temp[i]].reqtime,job[temp[i]].startime,job[temp[i]].finitime,job[temp[i]].TAtime,job[temp[i]].TAWtime); } //计算平均周转时间、平均带权周转时间 for(i=0;i<num;i++) { AVGTAtime += job[temp[i]].TAtime; AVGTAWtime += job[temp[i]].TAWtime; } printf("\n\n平均周转时间=%f\n",AVGTAtime/num); printf("平均带权周转时间=%f\n\n",AVGTAWtime/num); }
4. 运行结果及分析
实验分析:实验结果与预期的一致,对于输出内容也进行了测试,也与结果一致。
四、实验总结
FCFS算法相对比较容易实现,主要是先到先服务,只要按照到达时间进行排序,然后计算周转时间,带权周转时间,就能很简单的计算出平均周转时间,平均带权周转时间。
时间: 2024-10-11 21:33:45