实验二、作业调度模拟程序
一、 实验目的
1)加深对作业调度算法的理解;
(2)进行程序设计的训练。
二.实验要求
用高级语言编写一个或多个作业调度的模拟程序。
单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。
三、 实验方法、步骤及结果测试
- 1. 源程序名:work1.0.cpp
可执行程序名:work1.0..exe
- 2. 原理分析及流程图
存储结构:结构体数组
原理分析:根据实验要求,该程序需要对作业信息进行读入、输入、插入、删除等操作,经过选择调度方法,然后输出调度结果。
实验流程:阅读实验要求,先规划程序结构把程序分为多个部分,然后完善各个部分,最后把各个程序段结合起来à调试
程序运行流程:根据提示输入相应的数字进行功能的选择。
- 3. 主要程序段及其解释:
结构体:
1 struct msg 2 { 3 char name[10]; 4 int startTime;//到达时间 5 int runTime;//服务时间 6 int endTime;//完成时间 7 int doTime;//调度时间 8 float turnaroundTime;//周转时间 9 float weightedTurnaroundTime;//带权周转时间 10 };
主函数:
1 void main(){ 2 3 msg user[24]; 4 int n=0; 5 float averageTime[2];//用数组来存储平均周转时间(下标为0)和带权平均周转时间(下标为1) 6 int select1; 7 int select2=1;; 8 printf("----作业调度算法的C程序模拟----"); 9 10 while(1) 11 { 12 printf(" ---菜单--- "); 13 printf(" 1.读取作业详情文件 "); 14 printf(" 2.输入作业信息 "); 15 printf(" 3.插入作业 "); 16 printf(" 4.删除作业 "); 17 printf(" 5.选择调度算法(默认为先到先服务算法) "); 18 printf(" 6.进行调度并输出结果 "); 19 printf(" 7.退出 "); 20 printf(" ---请进行选择(1~7):"); 21 scanf("%d",&select1); 22 switch(select1) 23 { 24 case 1: 25 n=readFile(user); 26 break; 27 case 2: 28 n=input(user,n);//接收数据 29 break; 30 case 3: 31 n=insertTheHomework(user,n); 32 break; 33 case 4: 34 deleteJob(user,n); 35 if(n>0) 36 n--; 37 break; 38 case 5: 39 select2=selectWay();//选择调度算法 40 break; 41 case 6: 42 dealWith(select2,user, averageTime,n);//调度计算 43 output(user,averageTime,n);//输出结果 44 break; 45 case 7: 46 exit(0); 47 break; 48 } 49 } 50 }
存储作业信息的文件:1.txt
该文件的内容:
001 0 100
002 2 10
003 30 6
004 4 2
005 50 1
(注意数据之间用制表符分隔开,不然会读取失败)
源代码地址 :https://github.com/helloyoucan/work/blob/master/work1.0.cpp
- 4. 运行结果及分析
运行结果:
实验结果符合预料的结果。
四、 实验总结
经过这次作业模拟调度实验,充分地了解到系统是如何调入处理作业的,以及调度作业是用到的几种调度算法。