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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

一:需求分析

程序设计的任务:设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个x进程分别在T1,… ,Tn时刻到达系统,它们需要的服务时间分别为S1,… ,Sn.分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。

通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。

(1)输入的形式和输入值的范围

为免去测试时候需要逐步输入数据的麻烦,输入时采用输入文件流方式将数据放在。txt 文件中,第一行为进程个数,第二行为进程到达时间(各个进程的到达时间之间用空格隔开),第三行为进程的服务时间(每个服务时间之间用空格隔开)。

(2)输出的形式

模拟整个调度过程,输出每个时刻的进程运行状态,同时输出了每个进程的完成时间,并且按要求输出了计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。

(3)程序所能达到的功能

能够模拟出进程的先来先服务FCFS算法和短作业优先SJF算法的调度过程,输入进程个数n;每个进程的到达时间T1, … ,Tn和服务时间S1, … ,Sn;选择算法1-FCFS,2-SJF,3—退出,用户做出选择即可输出对应的算法调度过程或者退出程序。

(4)测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果

测试数据及其输出结果:

二:概要设计

程序包括主函数、FCFS算法函数、SJF算法函数、输出函数;

主函数流程:输入文件中的数据—显示各进程数据-选择算法-调用相应算法的函数-输出结果三:详细设计

算法流程图:

调用结束

四:调试分析

(1):调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析;

开始的时候没有判断进程是否到达,导致短进程优先算法运行结果错误,后来加上了判断语句后就解决了改问题。

(2):算法的性能分析及其改进设想;

即使用户输入的进程到达时间没有先后顺序也能准确的计算出结果.(加循环,判断各个进程的到达时间先后,组成一个有序的序列)

(3):经验和体会。

通过本次实验,深入理解了先来先服务和短进程优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆.

五:用户使用说明

在同一目录下的.txt文件中按输入要求输入相关数据,并且根据提示选择相应的算法。六:测试结果

测试数据:

输出结果:

七:附录

源程序:

#include

#include〈iomanip〉//格式化输出结果

#include〈sstream〉//读取文件

#include〈fstream> //读取文件

using namespace std;

const int MaxNum=100;

int ArrivalTime[MaxNum];//到达时间

int ServiceTime[MaxNum];//服务时间

int FinishTime[MaxNum];//完成时间

int WholeTime[MaxNum]; //周转时间

double WeightWholeTime[MaxNum];//带权周转时间

double AverageWT_FCFS,AverageWT_SJF;//平均周转时间

double AverageWWT_FCFS,AverageWWT_SJF; //平均带权周转时间

void FCFS(int n);//先来先服务

void SJF(int n);//短作业优先

void print(int n,int array[]);

void print(int n,double array[]);

void printproceed(int n); //输出FCFS进程运行状态

void main()

int n,i,j; //n:进程数;i、j:循环计数变量

ifstream in("text。txt”);//读文件

string s;

for(i=0;i〈3,getline(in,s);i++)

{ //当i=0读入进程数n ;i=1读入各进程到达时间;i=2读入各进程服务时间istringstream sin(s);

switch(i)

{

case 0:

sin>>n;

break;

case 1:

for(j=0;j

sin〉〉ArrivalTime[j];

break;

case 2:

for(j=0;j〈n;j++)

sin〉〉ServiceTime[j];

break;

//显示各进程数据

cout〈

char ch=’A';

for(i=0;i〈n;i++)

cout〈

cout〈

for(i=0;i

cout〈〈setw(3)<〈ArrivalTime[i];

cout<

for(i=0;i

cout〈〈setw(3)<〈ServiceTime[i];

cout〈〈endl;

//选择算法:先来先服务FCFS—->1 短作业优先SJF——>2 关闭-—>0

相关文档
最新文档