操作系统处理器调度算法C++程序

  • 格式:doc
  • 大小:192.00 KB
  • 文档页数:10

下载文档原格式

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

一、先来先服务算法

1.程序简介

先来先服务算法按照作业进入系统后备作业队列的先后次序挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后,移入就绪队列.这是一种非剥夺式调度算法,易于实现,但效率不高.只顾及作业的等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待长作业,不利于I/O繁忙型作业而有利于CPU繁忙型作业.有时为了等待场作业执行结束,短作业的周转时间和带全周转时间将变得很大,从而若干作业的平均周转时间和平均带权周转时间也变得很大。

2.分析

1.先定义一个数组代表各作业运行的时间,再定义一个数组代表各作业到达系统的时间,注意到达系统的时间以第一个作业为0基础(注意:若各程序都同时到达系统,则到达系统时间都为0)。

2.输入作业数。

3.然后运用循环结构累积作业周转时间和带权周转时间。

4.最后,作业周转时间和带权周转时间分别除以作业数即可得到平均作业周转时间和平均带权周转时间。

3.详细设计

源程序如下:

#include

#include

using namespace std;

int main()

{

int n,a[100],b[100];

double s[100],m[100],T=0,W=0;

cout<<"请输入作业数:"<

cin>>n;

cout<<"请分别输入各作业到达系统的时间:"<

for(int i=0;i

{

cin>>b[i];

}

cout<<"请分别输入各作业所运行的时间:"<

for(i=0;i

{

cin>>a[i];s[0]=0;

s[i+1]=s[i]+a[i];

m[i+1]=(s[i+1]-b[i])/a[i];

T=T+s[i+1]-b[i];

W=W+m[i+1];

}

cout<<"平均周转时间为:"<

cout<<"平均带权周转时间为:"<

return 0;

}

4.运行与测试

1.运行程序,输入作业数,如A.1所示。

A1 启动界面

2.输入各作业到达系统的时间,如A.2所示。

A2 输入各作业到达系统的时间

3.输入各作业所运行的时间,如A.3所示。

A3 输入各作业运行的时间

二、最短作业优先算法

1. 程序简介

最短作业优先算法以进入系统的作业所要求的CPU运行时间的长短为标准,总是选取预计计算时间最短的作业投入运行。这是一种非剥夺式调度算法,能克服FCFS算法偏爱长作业的缺点,易于实现,但执行效率也不高。

2. 分析

1. 分两种情况来介绍这种算法,一是各作业到达系统的时间都相同,二是各作业到达系统的时间不同,且以第一个作业到达系统的时间为0作基础。

2. 到达系统时间都相同的情况只要累积CPU运行的时间,最后加一个排序函数即可。

3. 到达系统时间不相同的情况则是要在前面FCFS的基础上加一个排序函数即可。

4. 注意本程序认为第一个作业完成后,其它作业都已经到达系统了。

3. 详细设计

源程序如下:

//SJF(到达系统时间都相同的情况)

#include

using namespace std;

void B(float a[],int size)

{

float t;

for(int i=1;i

{

for(int j=0;j

if(a[j]>a[j+1])

{

t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

}

int main(void)

{

float n,a[100];

double s[100],m[100],T=0,W=0;

cout<<"请输入作业数:"<

cin>>n;

cout<<"请分别输入各作业所运行的时间:"<

for(int i=0;i

cin>>a[i];

B(a,n);

cout<<"作业调度顺序为:"<

for(i=0;i

{

cout<

s[0]=0;

s[i+1]=s[i]+a[i];

m[i+1]=s[i+1]/a[i];

T=T+s[i+1];

W=W+m[i+1];

}cout<

cout<<"平均周转时间为:"<

cout<<"平均带权周转时间为:"<

return 0;

}

//SJF(到达系统时间不相同的情况)

#include

using namespace std;

void B(float a[],int size)

{

float t;

for(int i=2;i

{

for(int j=1;j

if(a[j]>a[j+1])

{

t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

}

int main(void)

{

float n,a[100],b[100];

double s[100],m[100],T=0,W=0;

cout<<"请输入作业数:"<

cin>>n;

cout<<"请分别输入各作业所运行的时间:"<

for(int i=0;i

cin>>a[i];

B(a,n);

cout<<"作业调度顺序为:"<

for(i=0;i

{

cout<

}cout<

cout<<"请分别输入各作业到达系统的时间:"<

for(i=0;i

{

cin>>b[i];

}

for(i=0;i

{

s[0]=0;

s[i+1]=s[i]+a[i];