聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 操作系统实验-先来先服务FCFS和短作业优先SJF进程调度算法

操作系统实验-先来先服务FCFS和短作业优先SJF进程调度算法

时间:    下载该word文档


操作系统实验报告
实验一

先来先服务FCFS和短作业优先SJF进程调度算法
学号:
班级:

姓名:






实验题目先来先服务FCFS和短作业优先SJF进程调度算法

实验目的
通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
实验内容问题描述:
设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1,,Tn时刻到达系统,它们需要的服务时间分别为S1,,Sn分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
程序要求如下:
1)进程个数n;每个进程的到达时间T1,,Tn和服务时间S1,,Sn;选择算法1-FCFS2-SJF
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)进程调度的实现过程如下:
2-SJF

按照选择算法进行进程调度,计算进程的完成时间、周转时间变量初始化;
接收用户输入nT1,,TnS1,,Sn;算法选择1-FCFS
和带权周转时间;

计算所有进程的平均周转时间和平均带权周转时间;
按格式输出调度结果。
实验要求:
1上机前认真复习FCFSSJF进程调度调度算法,熟悉进程调度的执行过



程;
2上机时独立编程、调试程序;
3根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)
源程序
头文件
#include#defineMaxNum100
structProcess_struct{
intNumber;rrivalTime;for(i=0;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;}
头文件
#include
intSJF(;holeTime;j=1;
while((jholeTime
{
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{
for(j=0;j{
if((Process[j].ArrivalTime<=temp_time&&(!Process[j].run_flag{
run_time=Process[j].WholeTime;number_schedul=j;break;}}
for(j=0;j{
if((Process[j].ArrivalTime<=temp_time&&(!Process[j].run_flagif(Process[j].WholeTime{
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;}return0;}
主程序
#include#include""#include""
usingnamespacestd;
intPinput(;来先服务\n";printf("2.短作业优先\n";printf("0.退出\n";scanf("%d",&option;switch(option



}
{
case0:
printf("运行结束。\n";break;case1:
printf("对进程用先来先服务调度。\n\n";FCFS(;Poutput(;break;case2:
printf("对进程用短作业优先调度。\n\n";SJF(;Poutput(;break;}

intPinput(ame;
printf("pleaseinputtheArrvialTime:\n";scanf("%d",&Process[i].ArrivalTime;printf("pleaseinputtheWholeTime:\n";scanf("%d",&Process[i].WholeTime;Process[i].ServiceTime=0;Process[i].FinishTime=0;
Process[i].WeightWholeTime=0;Process[i].order=0;Process[i].run_flag=0;}return0;}

intPoutput(eightWholeTime=Process[i].FinishTime-Process[i].ArrivalTime;f1=Process[i].WeightWholeTime/Process[i].WholeTime;turn_round_time+=Process[i].WeightWholeTime;w+=f1;printf("%d:%s",Process[i].ServiceTime,Process[i].Name;
printf("%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;
}
printf("average_turn_round_timer=%f\n",turn_round_time/N;printf("weight_average_turn_round_timer=%f\n",w/N;return0;}




实例运行结果截图实例(教材P92-3-4A

0时间
4时间
FCFS4
时间
4时间
1周转时间
SJF4
时间
4时间
1周转时间
先来先服务算法(FCFS
B1376298
C25121021816
D32141163
E441814139
平均
98








短作业优先算法(SJF









精心搜集整理,只为你的需要



  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服