操作系统实验报告1各种算法C++程序.docx
- 文档编号:8775090
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:129.98KB
操作系统实验报告1各种算法C++程序.docx
《操作系统实验报告1各种算法C++程序.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告1各种算法C++程序.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统实验报告1各种算法C++程序
操作系统实验报告
姓名:
班级:
学号:
实验时间:
2010.10.21
一、先来先服务算法
1.程序简介
先来先服务算法按照作业进入系统后备作业队列的先后次序挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后,移入就绪队列.这是一种非剥夺式调度算法,易于实现,但效率不高.只顾及作业的等候时间,未考虑作业要求服务时间的长短,不利于短作业而优待长作业,不利于I/O繁忙型作业而有利于CPU繁忙型作业.有时为了等待场作业执行结束,短作业的周转时间和带全周转时间将变得很大,从而若干作业的平均周转时间和平均带权周转时间也变得很大。
2.设计分析
1.先定义一个数组代表各作业运行的时间,再定义一个数组代表各作业到达系统的时间,注意到达系统的时间以第一个作业为0基础(注意:
若各程序都同时到达系统,则到达系统时间都为0)。
2.输入作业数。
3.然后运用循环结构累积作业周转时间和带权周转时间。
4.最后,作业周转时间和带权周转时间分别除以作业数即可得到平均作业周转时间和平均带权周转时间。
3.详细设计
源程序如下:
#include
#include
usingnamespacestd;
intmain()
{
intn,a[100],b[100];
doubles[100],m[100],T=0,W=0;
cout<<"请输入作业数:
"< cin>>n; cout<<"请分别输入各作业到达系统的时间: "< for(inti=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<<"平均带权周转时间为: "< return0; } 4.运行与测试 1.运行程序,输入作业数,如A.1所示。 A1启动界面 2.输入各作业到达系统的时间,如A.2所示。 A2输入各作业到达系统的时间 3.输入各作业所运行的时间,如A.3所示。 A3输入各作业运行的时间 5.调试总结 此次调试还算成功,各部分功能都能实现,不过有待进一步优化。 此程序运用数组编程,各部分协调一致,总体上简单易于实现,但界面还需优化。 二、最短作业优先算法 1.程序简介 最短作业优先算法以进入系统的作业所要求的CPU运行时间的长短为标准,总是选取预计计算时间最短的作业投入运行。 这是一种非剥夺式调度算法,能克服FCFS算法偏爱长作业的缺点,易于实现,但执行效率也不高。 2.设计分析 1.分两种情况来介绍这种算法,一是各作业到达系统的时间都相同,二是各作业到达系统的时间不同,且以第一个作业到达系统的时间为0作基础。 2.到达系统时间都相同的情况只要累积CPU运行的时间,最后加一个排序函数即可。 3.到达系统时间不相同的情况则是要在前面FCFS的基础上加一个排序函数即可。 4.注意本程序认为第一个作业完成后,其它作业都已经到达系统了。 3.详细设计 源程序如下: //SJF(到达系统时间都相同的情况) #include usingnamespacestd; voidB(floata[],intsize) { floatt; for(inti=1;i { for(intj=0;j if(a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t;} } } intmain(void) { floatn,a[100]; doubles[100],m[100],T=0,W=0; cout<<"请输入作业数: "< cin>>n; cout<<"请分别输入各作业所运行的时间: "< for(inti=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<<"平均带权周转时间为: "< return0; } //SJF(到达系统时间不相同的情况) #include usingnamespacestd; voidB(floata[],intsize) { floatt; for(inti=2;i { for(intj=1;j if(a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t;} } } intmain(void) { floatn,a[100],b[100]; doubles[100],m[100],T=0,W=0; cout<<"请输入作业数: "< cin>>n; cout<<"请分别输入各作业所运行的时间: "< for(inti=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]; m[i+1]=(s[i+1]-b[i])/a[i]; T=T+s[i+1]-b[i]; W=W+m[i+1]; } cout<<"平均周转时间为: "< cout<<"平均带权周转时间为: "< return0; } 4.运行与测试 //SJF(到达系统时间都相同的情况) 1.运行程序,输入作业数,如A.1所示。 A1启动界面 2.输入各作业所运行的时间,如A.2所示。 A2输入各作业所运行的时间 //SJF(到达系统时间不相同的情况) 1.运行程序,输入作业数,如A.1所示。 A1启动界面 2.输入各作业所运行的时间,如A.2所示。 A2输入各作业所运行的时间 3.输入各作业到达系统的时间,如A.3所示。 A3输入各作业到达系统的时间 5.调试总结 此次调试还算成功,各部分功能都能实现,不过有待进一步优化。 此程序运用数组编程,用两个程序完成了一个设计要求,进一步要求就是将两个子程序合并成一个完整的程序,还有就是在排序上也有待进一步优化。 三、优先级调度算法 1.程序简介 优先级调度算法根据确定的优先级来选取进程/线程,总是选择就绪队列中的优先级最高者投入运行。 本实验介绍的是非剥夺式优先级调度算法,如果在就绪队列中出现优先级更高的就让当前进程/线程继续运行,直到它结束或出现等待事件而主动让出处理器,再调度另一个优先级高的进程/线程运行。 2.设计分析 1.先定义一个二维数组a[i][0]代表各作业的优先级,a[i][1]代表各作业运行的时间。 2.输入作业数。 3.根据排序函数得出作业调度顺序。 4.最后,累积得作业周转时间和带权周转时间后分别除以作业数即可得到平均作业周转时间和平均带权周转时间。 3.详细设计 源程序如下: #include usingnamespacestd; voidB(floata[][2],intsize) { floatt,p; for(inti=0;i { for(intj=0;j if(a[j][0]>a[j+1][0]) { t=a[j][0];a[j][0]=a[j+1][0];a[j+1][0]=t; p=a[j][1];a[j][1]=a[j+1][1];a[j+1][1]=p; } } } intmain(void) { floatn,a[100][2]; doubles[100][2],m[100][2],T=0,W=0; cout<<"请输入作业数: "< cin>>n; cout<<"请分别输入各作业优先级和所运行的时间: "< for(inti=0;i { cin>>a[i][0]>>a[i][1]; }B(a,n); cout<<"作业调度顺序为: "< for(i=0;i { cout< s[0][1]=0; s[i+1][1]=s[i][1]+a[i][1]; m[i+1][1]=s[i+1][1]/a[i][1]; T=T+s[i+1][1]; W=W+m[i+1][1]; }cout< cout<<"平均周转时间为: "< cout<<"平均带权周转时间为: "< return0; } 4.运行与测试 1.运行程序,输入作业数,如A.1所示。 A1启动界面 2.输入各作业优先级和所运行的时间,如A.2所示。 A2输入各作业的优先级和所运行的时间 5.调试总结 此程序运用二维数组编程,各部分协调一致,总体上简单易于实现,中间还使用了排序函数,各部分协调一致,总体上简单易于实现,但是还有待进一步优化。 四、响应比最高者优先算法 1.程序简介 响应比最高者优先算法是介乎这两种算法之间的一种折中的非剥夺式算法,既考虑作业的等待时间,又考虑作业的处理时间,这样既照顾短作业又不会使长作业的等待时间过长,有效地改进调度的性能。 HRRF算法的缺点是每次计算各道作业的响应比会导致一定时间的开销,其性能比SJF算法略差。 2.设计分析 1.先定义一个二维数组a[i][0]代表各作业的等待时间,a[i][1]代表各作业运行的时间,a[i][2]代表响应比-1。 2.输入作业数。 3.根据排序函数得出作业调度顺序。 4.最后,累积得作业周转时间和带权周转时间后分别除以作业数即可得到平均作业周转时间和平均带权周转时间。 3.详细设计 源程序如下: #include usingnamespacestd; voidB(doublea[][3],intsize) { doublet,p,s;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告 各种 算法 C+ 程序