《操作系统处理器调度算法C程序.pdf》由会员分享,可在线阅读,更多相关《操作系统处理器调度算法C程序.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 操作系统处理器调度算法C 程序 Prepared on 21 November 2021 一、先来先服务算法 1 程序简介 先来先服务算法按照作业进入系统后备作业队列的先后次序挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后,移入就绪队列.这是一种非剥夺式调度算法,易于实现,但效率不高.只顾及作业的等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待长作业,不利于 I/O 繁忙型作业而有利于 CPU 繁忙型作业.有时为了等待场作业执行结束,短作业的周转时间和带全周转时间将变得很大,从而若干作业的平均周转时间和平均带权周转时间也变得很大。2 分析 1先定义
2、一个数组代表各作业运行的时间,再定义一个数组代表各作业到达系统的时间,注意到达系统的时间以第一个作业为0 基础(注意:若各程序都同时到达系统,则到达系统时间都为0)。2输入作业数。3然后运用循环结构累积作业周转时间和带权周转时间。4最后,作业周转时间和带权周转时间分别除以作业数即可得到平均作业周转时间和平均带权周转时间。3 详细设计 源程序如下:#include#include using namespace std;int main()int n,a100,b100;double s100,m100,T=0,W=0;cout请输入作业数:n;cout请分别输入各作业到达系统的时间:endl;
3、for(int i=0;ibi;cout请分别输入各作业所运行的时间:endl;for(i=0;iai;s0=0;si+1=si+ai;mi+1=(si+1-bi)/ai;T=T+si+1-bi;W=W+mi+1;cout平均周转时间为:T/nendl;cout平均带权周转时间为:W/nendl;return 0;4 运行与测试 1运行程序,输入作业数,如所示。A1 启动界面 2输入各作业到达系统的时间,如所示。A2 输入各作业到达系统的时间 3输入各作业所运行的时间,如所示。A3 输入各作业运行的时间 二、最短作业优先算法 1.程序简介 最短作业优先算法以进入系统的作业所要求的CPU 运行时
4、间的长短为标准,总是选取预计计算时间最短的作业投入运行。这是一种非剥夺式调度算法,能克服 FCFS 算法偏爱长作业的缺点,易于实现,但执行效率也不高。2.分析 1.分两种情况来介绍这种算法,一是各作业到达系统的时间都相同,二是各作业到达系统的时间不同,且以第一个作业到达系统的时间为0 作基础。2.到达系统时间都相同的情况只要累积CPU 运行的时间,最后加一个排序函数即可。3.到达系统时间不相同的情况则是要在前面FCFS 的基础上加一个排序函数即可。4.注意本程序认为第一个作业完成后,其它作业都已经到达系统了。3.详细设计 源程序如下:运行程序,输入作业数,如所示。A1 启动界面 2.输入各作业
5、所运行的时间,如所示。A2 输入各作业所运行的时间 运行程序,输入作业数,如所示。A1 启动界面 2.输入各作业所运行的时间,如所示。A2 输入各作业所运行的时间 3.输入各作业到达系统的时间,如所示。A3 输入各作业到达系统的时间 三、优先级调度算法 1 程序简介 优先级调度算法根据确定的优先级来选取进程/线程,总是选择就绪队列中的优先级最高者投入运行。本实验介绍的是非剥夺式优先级调度算法,如果在就绪队列中出现优先级更高的就让当前进程/线程继续运行,直到它结束或出现等待事件而主动让出处理器,再调度另一个优先级高的进程/线程运行。2.分析 1.先定义一个二维数组 ai0代表各作业的优先级,ai
6、1代表各作业运行的时间。2.输入作业数。3.根据排序函数得出作业调度顺序。4.最后,累积得作业周转时间和带权周转时间后分别除以作业数即可得到平均作业周转时间和平均带权周转时间。3.详细设计 源程序如下:#include using namespace std;void B(float a2,int size)float t,p;for(int i=0;isize;i+)for(int j=0;jaj+10)t=aj0;aj0=aj+10;aj+10=t;p=aj1;aj1=aj+11;aj+11=p;int main(void)float n,a1002;double s1002,m1002,
7、T=0,W=0;cout请输入作业数:n;cout请分别输入各作业优先级和所运行的时间:endl;for(int i=0;iai0ai1;B(a,n);cout作业调度顺序为:endl;for(i=0;in;i+)coutai0ai1;s01=0;si+11=si1+ai1;mi+11=si+11/ai1;T=T+si+11;W=W+mi+11;coutendl;cout平均周转时间为:T/nendl;cout平均带权周转时间为:W/nendl;return 0;4.运行与测试 1.运行程序,输入作业数,如所示。A1 启动界面 2输入各作业优先级和所运行的时间,如所示。A2 输入各作业的优先级
8、和所运行的时间 四、响应比最高者优先算法 1.程序简介 响应比最高者优先算法是介乎这两种算法之间的一种折中的非剥夺式算法,既考虑作业的等待时间,又考虑作业的处理时间,这样既照顾短作业又不会使长作业的等待时间过长,有效地改进调度的性能。HRRF 算法的缺点是每次计算各道作业的响应比会导致一定时间的开销,其性能比SJF 算法略差。2.分析 1.先定义一个二维数组 ai0代表各作业的等待时间,ai1代表各作业运行的时间,ai2代表响应比-1。2.输入作业数。3.根据排序函数得出作业调度顺序。4.最后,累积得作业周转时间和带权周转时间后分别除以作业数即可得到平均作业周转时间和平均带权周转时间。3.详细
9、设计 源程序如下:#include using namespace std;void B(double a3,int size)double t,p,s;for(int i=2;isize;i+)for(int j=1;jsize-1;j+)if(aj2aj+12)s=aj2;aj2=aj+12;aj+12=s;t=aj0;aj0=aj+10;aj+10=t;p=aj1;aj1=aj+11;aj+11=p;int main(void)double n,a1003,s1003,m1003,T=0,W=0;cout请输入作业数:n;cout请分别输入各作业等待时间和所运行的时间:endl;for(int i=0;iai0ai1;for(i=1;in;i+)ai2=(a01-ai0)/ai1;B(a,n);cout作业调度顺序为:endl;for(i=0;in;i+)coutai0ai1;s01=0;si+11=si1+ai1;mi+11=(si+11-ai0)/ai1;T=T+si+11-ai0;W=W+mi+11;coutendl;cout平均周转时间为:T/nendl;cout平均带权周转时间为:W/nendl;return 0;4.运行与测试 1.运行程序,输入作业数,如所示。A1 启动界面 3输入各作业等待时间和所运行的时间,如所示。A2 输入各作业等待时间和所运行的时间