山东科技大学学生课程设计
- 3 -
山东科技大学学生课程设计
1.需求分析
1.1设计目的
(1)阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。 (2)掌握一种计算机高级语言的使用。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.2设计要求 (1)能够选择不同的调度算法(要求中给出的调度法); (2)能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等; (3)根据选择的调度算法显示进程调度队列; (4)根据选择的调度算法计算平均周转时间和平均带权周转时间。 1.3 详细设计
1.主函数模块
首先调用getprocess()模块,然后令p=head,再调用find()函数。 2.查找模块
在实现查找最先到达进程功能时,通过循环,将每一个进程的arrivetime与当前的最早到达时间t进行比较,如果arrivetime小于t,则将该进程的arrivetime赋给t,并将指针指向下一个进程,直到找到到达时间最早的进程,然后调用fcfs()函数进行运行并输出 3. 创建进程及排序模块
创建进程时,先申请内存,建一个空的后备队列,然后输入进程的相关信息,并按arrivetime的大小的进程排成队列。 4. 运行模块
- 4 -
山东科技大学学生课程设计
调用fcfs()程序进行运行,当运行时,把进程的开始时间begintime置为当前时间time,完成时间finishtime为开始时间begintime加上运行时间runtime,周转时间turntime为finishtime减arrivetime,带权周转时间wturntime为turntime/runtime。
开始 输入进程信息 将进程排成队列 调用find()函数 arrivetime - 5 - 山东科技大学学生课程设计 程序源代码 #include char name[10]; //进程名 //到达时间 //服务时间 //开始时间 //完成时间 //带权周转时间 float arrivetime; float servicetime; float starttime; float finishtime; float zztime; }; fcfs a[100]; //定义先来先服务算法进程的最大数量 void Finput(fcfs *p,int N) { int i; printf(\输入进程的名称、到达时间、服务时间:(例如: x 0 100)\\n\ for(i=0;i<=N-1;i++) { scanf(\ } } //输出函数 void FPrint(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) { int k; printf(\执行顺序:\\n\ printf(\输入第%d进程的名称、到达时间、服务时间:\ //输入函数 float dqzztime; //定义进程的结构体 //周转时间 - 6 - 山东科技大学学生课程设计 printf(\ for(k=1;k printf(\进程名 \\tarrive\\tservice\\tstart\\tfinish\\tzz\\tdqzz\\n\\n\ for(k=0;k<=N-1;k++) { printf(\].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime); } } void Fsort(fcfs *p,int N) 面 { for(int i=0;i<=N-1;i++) } //运行结果 for(int j=0;j<=i;j++) if(p[i].arrivetime fcfs temp; temp=p[i]; p[i]=p[j]; p[j]=temp; //按到达时间排序,先到达排在前 printf(\ - 7 -