调度算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]);

相关文档
最新文档