- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统处理器调度算法C程序.
一、先来先服务算法
程序简介
先来先服务算法按照作业进入系统后备作业队列的先后次序挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后,移入就绪队列.这是一种非剥夺式调度算法,易于实现,但效率不高.只顾及作业的等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待长作业,不利于I/O繁忙型作业而有利于CPU繁忙型作业.有时为了等待场作业执行结束,短作业的周转时间和带全周转时间将变得很大,从而若干作业的平均周转时间和平均带权周转时间也变得很大。
分析
先定义一个数组代表各作业运行的时间,再定义一个数组代表各作业到达系统的时间,注意到达系统的时间以第一个作业为0基础(注意:若各程序都同时到达系统,则到达系统时间都为0)。
输入作业数。
然后运用循环结构累积作业周转时间和带权周转时间。
最后,作业周转时间和带权周转时间分别除以作业数即可得到平均作业周转时间和平均带权周转时间。
详细设计
源程序如下:
#includeiostream
#includecmath
using namespace std;
int main()
{
int n,a[100],b[100];
double s[100],m[100],T=0,W=0;
cout请输入作业数:endl;
cinn;
cout请分别输入各作业到达系统的时间:endl;
for(int i=0;in;i++)
{
cinb[i];
}
cout请分别输入各作业所运行的时间:endl;
for(i=0;in;i++)
{
cina[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平均周转时间为:T/nendl;
cout平均带权周转时间为:W/nendl;
return 0;
}
运行与测试
运行程序,输入作业数,如A.1所示。
A1 启动界面
输入各作业到达系统的时间,如A.2所示。
A2 输入各作业到达系统的时间
输入各作业所运行的时间,如A.3所示。
A3 输入各作业运行的时间
二、最短作业优先算法
1. 程序简介
最短作业优先算法以进入系统的作业所要求的CPU运行时间的长短为标准,总是选取预计计算时间最短的作业投入运行。这是一种非剥夺式调度算法,能克服FCFS算法偏爱长作业的缺点,易于实现,但执行效率也不高。
2. 分析
1. 分两种情况来介绍这种算法,一是各作业到达系统的时间都相同,二是各作业到达系统的时间不同,且以第一个作业到达系统的时间为0作基础。
2. 到达系统时间都相同的情况只要累积CPU运行的时间,最后加一个排序函数即可。
3. 到达系统时间不相同的情况则是要在前面FCFS的基础上加一个排序函数即可。
4. 注意本程序认为第一个作业完成后,其它作业都已经到达系统了。
3. 详细设计
源程序如下:
//SJF(到达系统时间都相同的情况)
#includeiostream
using namespace std;
void B(float a[],int size)
{
float t;
for(int i=1;isize;i++)
{
for(int j=0;jsize-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];
double s[100],m[100],T=0,W=0;
cout请输入作业数:endl;
cinn;
cout请分别输入各作业所运行的时间:endl;
for(int i=0;in;i++)
cina[i];
B(a,n);
cout作业调度顺序为:endl;
for(i=0;in;i++)
{
couta[i] ;
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];
}coutendl;
cout平均周转时间为:T/nendl;
cout平均带权周转时间为:W/nendl;
return 0;
}
//SJF(到达系统时间不相同的情况)
#includeiostream
using namespace std;
void B(float a[],int size)
{
float t;
for(int i=2;isize;i+
文档评论(0)