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

  • 格式:doc
  • 大小:255.50 KB
  • 文档页数:9

下载文档原格式

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

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

【实验题目】:先来先服务FCFS和短作业优先SJF进程调度算法通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。

【实验内容】

问题描述:

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

1)进程个数n;每个进程的到达时间T1, …,T n和服务时间S1, … ,S n;选择算法1-FCFS,2-SJF。

2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;

3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;

4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。

程序代码:

#include

#include

#define Number 5

void main()

{

int n;

int daoda[Number],fuwu[Number],i;

cout<<"请依次输入各个进程的到达时间并以空格间隔:";

for(i=0;i

{

cin>>daoda[i];

}

cout<<"请依次输入各个进程的服务时间,并以空格间隔:";

for(i=0;i

{

cin>>fuwu[i];

}

cout<<"请输入n=1选择FCFS或者n=2选择SJF或者n=3同时调用FCFS 和SJF,n=";

cin>>n;

while(n<1||n>3){

cout<<"输入的n有误,请重新输入n,n=";

cin>>n;

}

struct statedd //声明结构

{

bool doneF,doneS;

int daoda,fuwu;

float wancheng,zhouzhuan,daiquan,wan,zhou,dai;

};

statedd process[Number];//声明结构变量,这里为数组

int timeflyF=0,timeflyS=0;//定义两个类似于秒表的变量

int j,k,l,nextproF,nextproS;

// 获取数据

for(i=0;i

{

process[i].doneF = false;

process[i].doneS = false;

process[i].wancheng = 0;

process[i].zhouzhuan = 0;

process[i].daiquan = 0;

process[i].wan = 0;

process[i].zhou = 0;

process[i].dai =0;

process[i].daoda = daoda[i];

process[i].fuwu = fuwu[i];

}

// 获取最先到达的进程下标first

int first=0;

l=first;

for(i=1;i

{

if(daoda[first]>daoda[i])

first=i;

}

process[first].doneF=true;

process[first].doneS=true;

process[first].wancheng = process[first].fuwu + process[first].daoda;

process[first].wan = process[first].fuwu + process[first].daoda;

timeflyF += process[first].daoda+process[first].fuwu;

timeflyS += process[first].daoda+process[first].fuwu;

// 接下去到达的进程

//************************************************************* // fcfs ******************************************************** for(j=1;j

{

nextproF = Number+1;

for(k =0 ; k

{

if( !process[k].doneF )

{

if( process[k].daoda <= timeflyF ) // 到达

{

if( nextproF ==Number+1)

nextproF = k;

else

{

if( process[nextproF].daoda > process[k].daoda )

nextproF = k; //获取到达时刻最先的进程

}//else

}//if2

}//if1