操作系统实验先来先服务FCFS和短作业优先SJF进程调度算法Word格式文档下载.docx
- 文档编号:22470922
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:12
- 大小:118.20KB
操作系统实验先来先服务FCFS和短作业优先SJF进程调度算法Word格式文档下载.docx
《操作系统实验先来先服务FCFS和短作业优先SJF进程调度算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验先来先服务FCFS和短作业优先SJF进程调度算法Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;
3)输出:
要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:
进程B开始运行”等等;
4)输出:
要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。
实现提示:
用C++语言实现提示:
1)程序中进程调度时间变量描述如下:
staticintMaxNum=100;
intArrivalTime[MaxNum];
intServiceTime[MaxNum];
intFinishTime[MaxNum];
intWholeTime[MaxNum];
doubleWeightWholeTime[MaxNum];
doubleAverageWT_FCFS,AverageWT_SJF;
doubleAverageWWT_FCFS,AverageWWT_SJF;
2)进程调度的实现过程如下:
变量初始化;
接收用户输入n,T1,…,Tn,S1,…,Sn;
算法选择1-FCFS,2-SJF;
按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;
计算所有进程的平均周转时间和平均带权周转时间;
按格式输出调度结果。
实验要求:
1)上机前认真复习FCFS和SJF进程调度调度算法,熟悉进程调度的执行过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。
【源程序】
头文件
#include<
iostream>
#defineMaxNum100
structProcess_struct{
intNumber;
rrivalTime;
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();
holeTime;
j=1;
while((j<
N)&
&
(Process[i].ArrivalTime==Process[j].ArrivalTime))holeTime<
Process[i].WholeTime)
{
run_time=Process[i].WholeTime;
i=j;
}
j++;
}
erviceTime=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;
}
erviceTime=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;
主程序
#include"
"
usingnamespacestd;
intPinput();
来先服务\n"
);
printf("
2.短作业优先\n"
0.退出\n"
scanf("
%d"
&
option);
switch(option)
case0:
printf("
运行结束。
\n"
break;
case1:
对进程用先来先服务调度。
\n\n"
FCFS();
Poutput();
case2:
对进程用短作业优先调度。
SJF();
intPinput()ame);
pleaseinputtheArrvialTime:
scanf("
Process[i].ArrivalTime);
pleaseinputtheWholeTime:
Process[i].WholeTime);
Process[i].ServiceTime=0;
Process[i].FinishTime=0;
Process[i].WeightWholeTime=0;
Process[i].order=0;
Process[i].run_flag=0;
intPoutput()eightWholeTime=Process[i].FinishTime-Process[i].ArrivalTime;
f1=Process[i].WeightWholeTime/Process[i].WholeTime;
turn_round_time+=Process[i].WeightWholeTime;
w+=f1;
时刻%d:
进程%s开始运行。
Process[i].ServiceTime,Process[i].Name);
%s,%d,%d,%d,%d,%d,%f,%f\n"
Process[i].Name,Process[i].ArrivalTime,Process[i].WholeTime,Process[i].ServiceTime,Process[i].FinishTime,Process[i].order,Process[i].WeightWholeTime,f1);
average_turn_round_timer=%f\n"
turn_round_time/N);
weight_average_turn_round_timer=%f\n"
w/N);
return0;
【实例运行结果截图】
实例(教材P92-图3-4)
进程名
A
B
C
D
E
平均
到达时间
1
2
3
4
服务时间
5
FCFS
完成时间
7
12
14
18
周转时间
6
10
11
9
带权周转时间
SJF
13
8
16
先来先服务算法(FCFS)
短作业优先算法(SJF)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 先来先 服务 FCFS 作业 优先 SJF 进程 调度 算法