FCFS和SJF进程调度算法实验报告Word格式文档下载.docx
- 文档编号:18216133
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:14
- 大小:114.08KB
FCFS和SJF进程调度算法实验报告Word格式文档下载.docx
《FCFS和SJF进程调度算法实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《FCFS和SJF进程调度算法实验报告Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
结束时间
执行顺序
周转时间
带权周转时间
时刻*:
进程*开始运行
***
。
平均周转时间:
平均带权周转时间:
(3)程序所能达到的功能
输入进程的个数N,以及每个进程的到达时间和运行时间。
通过选择FCFS或是SJF进程调度算法进行调度,计算出每个进程的开始运行时间、结束时间、执行顺序、周转时间、带权周转时间,并最终求得平均周转时间和平均带权周转时间。
(4)测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
正确一(FCFS)
正确二(SJF)
输入参数错误
3、概要设计
所有抽象数据类型的定义:
staticintMaxNum=100;
intArrivalTime[MaxNum];
//到达时间
intServiceTime[MaxNum];
//服务时间
intFinishTime[MaxNum];
//结束时间
intWholeTime[MaxNum];
//周转时间
doubleWeightWholeTime[MaxNum];
//带权周转时间
doubleAverageWT_FCFS,AverageWT_SJF;
//平均周转时间
doubleAverageWWT_FCFS,AverageWWT_SJF;
//平均带权周转时间
主程序的流程:
●变量初始化
●接受用户输入的N,T1…..Tn,S1….Sn;
●选择算法进行进程调度,计算进程的开始运行时间、结束时间、执行顺序、周转时间、带权周转时间;
●计算所有进程的平均周转时间、平均带权周转时间;
●按照格式输出调度结果。
各程序模块之间的层次(调用)关系
Main函数通过对Pinput函数进行调用,对函数的成员变量进行赋值,再通过算法的选择对算法函数进行选择调用,求出题目要求的各个数据结果,最后通过Poutput函数对结果进行格式输出。
4、详细设计
实现程序模块的具体算法。
intFCFS(){//先来先服务算法
inti;
inttemp_time=0;
temp_time=Process[0].ArrivalTime;
for(i=0;
i<
N;
i++)
{
Process[i].ServiceTime=temp_time;
Process[i].FinishTime=Process[i].ServiceTime+Process[i].WholeTime;
Process[i].run_flag=1;
temp_time=Process[i].FinishTime;
Process[i].order=i+1;
}
return0;
}
intSJF()//短作业优先算法
{
inti=0,j;
intnumber_schedul,temp_counter;
doublerun_time;
run_time=Process[i].WholeTime;
j=1;
while((j<
N)&
&
(Process[i].ArrivalTime==Process[j].ArrivalTime))
{if(Process[j].WholeTime<
Process[i].WholeTime)
{
run_time=Process[i].WholeTime;
i=j;
}
j++;
number_schedul=i;
Process[number_schedul].ServiceTime=Process[number_schedul].ArrivalTime;
Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime+Process[number_schedul].WholeTime;
Process[number_schedul].run_flag=1;
temp_time=Process[number_schedul].FinishTime;
Process[number_schedul].order=1;
temp_counter=1;
while(temp_counter<
N)
for(j=0;
j<
j++)
if((Process[j].ArrivalTime<
=temp_time)&
(!
Process[j].run_flag))
{
run_time=Process[j].WholeTime;
number_schedul=j;
break;
}
if(Process[j].WholeTime<
run_time)
{
run_time=Process[j].WholeTime;
number_schedul=j;
}
Process[number_schedul].ServiceTime=temp_time;
Process[number_schedul].FinishTime=Process[number_schedul].ServiceTime+Process[number_schedul].WholeTime;
Process[number_schedul].run_flag=1;
temp_time=Process[number_schedul].FinishTime;
temp_counter++;
Process[number_schedul].order=temp_counter;
5、调试分析
(1)调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析
在调试的过程中,所出现问题最集中的地方在于算法的设计和编译,FCFS算法相对简单一些,只要根据进程到达的时间按照顺序依次执行计算即可,而SJF算法由于要涉及每个进程的到达时间和服务时间,并且要进行比较和排序,所以在算法上有一定难度,开始时没有判断进程是否到达,导致短进程优先算法结果错误,后来加上判断语句后就解决了该问题。
(2)算法的性能分析
即使用户输入的进程到达时间没有先后顺序到达也能准确计算出结果。
(加循环判断各个进程的到达时间先后,组成一个有序的序列)
(3)经验体会
通过本次实验,深入理解了先来先服务和短作业优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆。
6、用户使用说明
程序的使用说明,列出每一步的操作步骤。
输入作业个数、作业号、提交时间、运行时间
输入选择数来选择调度算法
其他数
退出程序
.
7、附录
带注释的源程序,注释应清楚具体
*************头文件***********
#include<
iostream>
#defineMaxNum100
structProcess_struct{
intNumber;
//进程编号
charName[MaxNum];
//进程名字
intArrivalTime;
intStartTime;
//开始时间
intorder;
//运行次序
intServiceTime;
intFinishTime;
intWholeTime;
intrun_flag;
//调度标志
doubleWeightWholeTime;
//平均带权周转时间
}Process[MaxNum];
intN;
//实际进程个数
intFCFS();
//先来先服务
intSJF();
//短作业优先
inti;
inttemp_time=0;
//当前时间
temp_time=Process[0].ArrivalTime;
for(i=0;
Process[i].StartTime=temp_time;
Process[i].FinishTime=Process[i].StartTime+Process[i].ServiceTime;
Process[i].run_flag=1;
temp_time=Process[i].FinishTime;
Process[i].order=i+1;
return0;
inti=0,j;
intnumber_schedul,temp_counter;
//进程编号,当前已执行进程个数
doublerun_time;
run_time=Process[i].ServiceTime;
j=1;
while((j<
(Process[i].ArrivalTime==Process[j].ArrivalTime))//判断是否有两个进程是否同时到达
if(Process[j].ServiceTime<
Process[i].ServiceTime)
run_time=Process[i].ServiceTime;
i=j;
j++;
//查找下一个被调度的进程
//对找到的下一个被调度的进程求相应的参数
number_schedul=i;
Process[number_schedul].StartTime=Process[number_schedul].ArrivalTime
Process[number_schedul].FinishTime=Process[number_schedul].StartTime+Process[number_schedul].ServiceTime;
Process[number_schedul].run_flag=1;
temp_time=Process[number_schedul].FinishTime;
Process[number_schedul].order=1;
temp_counter=1;
while(temp_counter<
for(j=0;
if((Process[j].ArrivalTime<
run_time=Process[j].ServiceTime;
number_schedul=j;
break;
if(Process[j].ServiceTime<
Process[number_schedul].StartTime=temp_time;
Process[number_schedul].FinishTime=Process[number_schedul].StartTime+Process[number_schedul].ServiceTime;
Process[number_schedul].run_flag=1;
temp_time=Process[number_schedul].FinishTime;
temp_counter++;
Process[number_schedul].order=temp_counter;
*************主函数***************
#include"
FCFS_SJF.h"
usingnamespacestd;
intPinput();
//进程参数输入
intPoutput();
//调度结果输出
voidmain()
intoption;
Pinput();
cout<
<
"
1—FCFS"
endl;
2—SJF"
0—退出"
请选择算法:
;
cin>
>
option;
switch(option)
case0:
cout<
运行结束"
break;
case1:
对进程用先来先服务调度"
FCFS();
Poutput();
case2:
对进程用短作业优先调度"
SJF();
intPinput()//进程参数输入
inti;
请输入进程数目:
"
loop:
cin>
if(N<
=0||N>
100)
{cout<
进程个数不合要求,请重新输入:
gotoloop;
for(i=0;
cout<
************************"
请输入第"
i+1<
个进程的名字:
cin>
Process[i].Name;
到达时间:
one:
Process[i].ArrivalTime;
if(Process[i].ArrivalTime<
0||Process[i].ArrivalTime>
{cout<
到达时间不合要求,请重新输入:
gotoone;
运行时间:
Two:
Process[i].ServiceTime;
if(Process[i].ServiceTime<
0||Process[i].ServiceTime>
运行时间不合要求,请重新输入:
gotoTwo;
Process[i].StartTime=0;
Process[i].FinishTime=0;
Process[i].WeightWholeTime=0;
Process[i].order=0;
Process[i].run_flag=0;
return0;
intPoutput()//进程参数输出
doubleturn_round_time=0,f1=0,w=0;
进程名字到达时间运行时间开始运行时间结束时间执行顺序周转时间带权周转时间"
Process[i].WeightWholeTime=Process[i].FinishTime-Process[i].ArrivalTime;
f1=Process[i].WeightWholeTime/Process[i].ServiceTime;
turn_round_time+=Process[i].WeightWholeTime;
w+=f1;
时刻"
Process[i].StartTime<
:
进程"
Process[i].Name<
开始运行"
Process[i].ArrivalTime<
<
Process[i].ServiceTime<
Process[i].FinishTime<
Process[i].order<
Process[i].WeightWholeTime<
f1<
平均周转时间="
turn_round_time/N<
平均带权周转时间="
w/N<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FCFS SJF 进程 调度 算法 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)