调度算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015年10月21日
实验一 进程调度
1.实验目的:
通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。
2.实验内容:
(1)用C 语言(或其它语言,如Java )实现对N 个进程采用某种进程调度算法(如先来先服务调度、短作业优先调度、优先权调度、时间片轮转调度、多级反馈队列调度)的调度。
(2)为了清楚地观察每个进程的调度过程,程序应将每个进程的被调度情况显示出来。 (3)分析程序运行的结果,谈一下自己的收获。
3.设计实现: 1)流程图
主流程图:
choice!=1&&choice!=2
c hoice==2
c hoice==1
Y
N
开 始
初始化参数 输入函数 输入chioce FCFS SJF
输入有误,请重新输入!
是否继续?
结束
输入函数流程图:
请输入进程个数:Num
N
Y i=0
N i=0
N
先来先服务流程图:
i=0
N
Y
N
Y
开始
Num>0&&Num<=100
i 输入进程 到达时间 i++ i 输入进程 服务时间 i++ 输入choice 选择算法 结束 开始 i 进程到达? 到达时间赋给NowTim 服务时间赋给NowTim 计算完成时间,周转时间(平均),带权周转时间(平均) 输出 结束 短作业优先算法流程图: i =0 N i = 0 开始 计算第一次NowTime 和第一个进程的完成时间 输出 i 进程到达? 找出服务时间最短进 计算完成时间,i++ i 计算(平均)周转时间 (平均)带权周转时间 i++ 输出 结束 2)详细设计 本程序用C# 语言模拟了先来先服务,短作业优先两个调度算法,如下: 环境:VS 2013 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace sjf_01 { class Program { const int Max = 100; int[] ArrivalTime = new int[Max];//到达时间 int[] ServiceTime = new int[Max];//服务时间 int[] FinishTime = new int[Max];//完成时间 int[] WholeTime = new int[Max];//周转时间 double[] WeightWholeTime = new double[Max];//帯权周转时间 double AverageWT_FCFS, AverageWT_SJF; //平均周转时间 double AverageWWT_FCFS, AverageWWT_SJF;//平均帯权周转时间 int[] ServiceTime_SJF = new int[Max];//在SJF算法中使用到 int Num = 0; int NowTime = 0;//记录当前时间 double SumWT = 0, SumWWT = 0;//SumWT用来计算总的周转时间,SumWWT用来计算总的帯权周转时间 int i; int choice;//记录选择 void FCFS() { for (i = 0; i < Num; i++) { if (ArrivalTime[i] > NowTime)//假如进程到达的时间比现在已经运行的时间NowTime大,说明在NowTime时刻进程未到达 { NowTime = ArrivalTime[i];//把进程的到达时间赋给NowTime } NowTime += ServiceTime[i];//把进程的服务时间加到NowTime上 FinishTime[i] = NowTime;//计算完成时间 WholeTime[i] = FinishTime[i] - ArrivalTime[i];//计算周转时间=完成时间-到达时间 WeightWholeTime[i] = (double)WholeTime[i] / ServiceTime[i];//计算带权周转时间=周转时间/服务时间 SumWT += WholeTime[i];//计算总的周转时间 SumWWT += WeightWholeTime[i];//计算总的帯权周转时间 } AverageWT_FCFS = SumWT / Num;//平均周转时间 AverageWWT_FCFS=SumWWT/Num;//平均帯权周转时间 for (i = 0; i < Num; i++)//依次输出结果 { //Console.WriteLine("时刻{0} 进程{1} 开始运行完成时间{2} 周转时间{3} 带权周转时间{4}",FinishTime[i]-ServiceTime[i],i+1,FinishTime[i],WholeTime[i],WeightWholeTime[i]); Console.Write("时刻:{0} ", FinishTime[i] - ServiceTime[i]); Console.Write("进程:{0} ", i+1); Console.Write("开始运行 "); Console.Write("完成时间:{0} ", FinishTime[i]); Console.Write("周转时间:{0} ", WholeTime[i]); Console.Write("带权周转时间:{0} ", WeightWholeTime[i]);