《操作系统上机实验一进程调度算法.docx》由会员分享,可在线阅读,更多相关《操作系统上机实验一进程调度算法.docx(14页珍藏版)》请在三一办公上搜索。
1、昆明理工大学信息工程与自动化学院学生实验报告(2010 2011学年第一学期)一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的解.进程调度时进程管理的主要内容之一,通过设计,编制,调试一个简单的进程调度模拟系统,对进程调度,进程运行状态变换加深理解和掌握。二、实验原理及基本技术路线图(流程图、方框原理图)1)流程图A、先来先服务算法流程图B、短作业(进程)优先算法流程图2)实验原理也可用于进先来先服务调度算法是一种最简单的调度算法,该算法既可用于作业调度,程调度,比较有利于长作业(进程),而不利于短作业(进程),根据作业(进程)到达时 间的先后顺序,来调用。
2、短作业(进程)优先调度算法,是指对短作业或短进程优先调度的算法,短作业的调 度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行, 而短进程优先调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分 配给它,使它立即执行并一直执行到完成,或发生呢个某事件而被阻塞放弃处理机时再重 新调度。3)源程序#include iostream”#define k 100using namespace std;void fcfs(int n,int ak,char namek)int i,temp;char s;cout*采用fcfs算法输出的作业序列为:endl;fo
3、r( i=0;in;i+)/根据达到事件的先后进行排序for(int j=i+1;jaj)如果前面的大于后面的,则调换顺序temp=aj;aj=ai;ai=temp;s=namej;namej=namei;同时也改变进程名的顺序namei=s;for( i=0;in;i+)输出排序后的结果coutnamei”;voidsjf(int n,int bk,int azk,char namk)int temp,i,t,w,ext=0,finishk,count=1;char nameek;coutn*采用sjf算法输出的作业序列为:endl;int min=az0;for(i=1;iazi)min=
4、azi;for(i=0;in;i+)记下该进程在达到时间数组中的下标if(min=azi)t=i;/将下标赋值给tfor(i=0;in;i+)初始化各进程访问位为0finishi=0;int time=azt+bt;将第一个进程大结束时间赋值给timefinisht=1;将运行过的进程的访问位置为1char r;r=namt;将运行过的进程的进程名放入nam数组中int h=0;i=0;while(countn)循环,直到所有进程都运行后结束if(azi=time&i!=t&finishi=0) /判断进程进入时间是否小于上一个进程的结束时间且该进程没有运行过temp=bi;设当前找到的第一个
5、进程为即将运行的进程for(int j=0;jbj&j!=t&azj=time&finishj!=1)temp=bj;w=j;ext=1;if(ext=0)/没找到,则运行第一个进程namee+h=nami;time=time+bi;finishi=1;count+;elsenamee+h=namw;time=time+bw;finishw=1;count+;ext=0;i+;if(count=n) break;elseif(i=n)程还没有运行,就返回从第一个又开始找i=0;else i+;if(i=n)找到了就运行找到的进程/i值加一,进行下一次循环/所有进程都已经运行过了,就结束循环/如
6、果已经找到最后一个元素了,但有的进i=0;namee0=r;输出结果for(int q=0;qn;q+)coutnameeq;coutendl;void main()int i,n;存放进程数int ak,存放各进程的到达时间在fcfs算法中用azk,存放各进程的到达时间在sjf算法中用bk;存放格进程的服务时间char ch,namek,存放各进程名在fcfs算法中用namk;存放各进程名在sjf算法中用cout* 进程调度算法 *endl;cout ”请输入进程数n;cout请输入各进程名endl;ch=getchar();for(i=0;in;i+)ch=getchar();namei=
7、ch;nami=namei;cout请依次输入各个进程的到达时间endl;for(i=0;iai;azi=ai;cout请依次输入各个进程的服务时间endl;for(i=0;ibi;fcfs(n,a,name);sjf(n,b,az,nam);三、所用仪器、材料(设备名称、型号、规格等)Microsoft Visual c+ 6.0四、实验过程原始记录(数据、图表、计算等)请输入讲程数如输入各进程名a be de黄依次输入各个进程的到达时间2 3 14 5蒲依欢输入各个进程的服务时间2 13 4 2p*采用FHs算法输出的作业序列为:c a b d e*采用sjf算法输出的作业序列为=c h
8、a e dPress any key to continu.e X XJ( NX XX XX XML HZ井辛呈周庶算 HMZNXNXJtZKXNM: 请输入进程数 请输入各进程名ahede请依次输入各个迸程的到达时间1 2 3 4 5请依次输入各个进程的服务时间2 5 14 6*采用算法输出的作业序列为:a 1)c d e*采用wjf算法输出的作业序列为: a c d b ePress 自ny key to continueH五、实验结果、分析和结论通过这个实验,我更进一步理解了先来先服务算法和短作业优先算法,同事对罪业 调度和进程调度之间的区别于联系也更加清楚。在作业调度时先根据某一算法,从外存中 调入作业到内存,然后在进程调度时,再根据某一算法,将内存中的进程调去执行,分配 给它内存资源。短作业优先算法也存在一些缺点:对长作业不利,肯呢个很长时间都无法获得资源。而且也没有考虑作业的紧迫程度。在该实验时遇到的一些问题,就是刚开始的时候写短作业优先算法没有考虑到到达时 间的情况,后来询问了老师才知道是要考虑的,这就让我更理解了先来先服务算法,所以 以后还是要将每个算法都编写一下,这样才更有助于理解。