进程调度算法实验报告

上传人:d****1 文档编号:134738858 上传时间:2022-08-13 格式:DOCX 页数:13 大小:275.27KB
收藏 版权申诉 举报 下载
进程调度算法实验报告_第1页
第1页 / 共13页
进程调度算法实验报告_第2页
第2页 / 共13页
进程调度算法实验报告_第3页
第3页 / 共13页
资源描述:

《进程调度算法实验报告》由会员分享,可在线阅读,更多相关《进程调度算法实验报告(13页珍藏版)》请在装配图网上搜索。

1、操作系统实验报告(二)实验题目:进程调度算法实验环境:C+实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不 同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较 各种算法的性能优劣。实验内容:编程实现如下算法:1. 先来先服务算法;2. 短进程优先算法;3. 时间片轮转调度算法。设计分析:程序流程图:1. 先来先服务算法2. 短进程优先算法typedef struct(int atime;/进程到达时间int runtime;/进程运行时间)fcs;void main()(int amount,i,j,diao,huan;fcs fn;cout 请输入进程个数:a

2、mount;for(i=0;iamount;i+)(cout请输入进程名,进程到达时间,进程运行时间:fi.id;cinfi.atime;cinfi.runtime;)for(i=0;iamount;i+)/按进程到达时间的先后排序(如果两个进程同时到达,按在屏幕先输入的先运行for(j=0;jfj+1.atime)(diao=fj.atime;fj.atime=fj+1.atime;fj+1.atime=diao;huan=fj.id;fj.id=fj+1.id;fj+1.id=huan;)for(i=0;iamount;i+)(cout进程:fi.id从fi.atime开始,在fi.ati

3、me+fi.runtime之前结束。endl;fi+1.atime=fi.atime+fi.runtime;)2.短进程优先算法#include#define n 5#define num 5#define max 65535typedef struct pro( int PRO_ID;int arrive_time;int sum_time;int flag;)Pro;/整数排序int bubble(int temp)(int i,j,tem=0;for(i=1;inum;i+)( int lastX=1;for(j=0;jtempj+1)( tem=tempj;tempj=tempj+1;

4、tempj+1=tem;lastX=0;)if(lastX=1) break;)return temp0;)进程排序Pro bubble(Pro p)(int i,j;Pro temp=0;Pro snum;for(i=0;inum;i+)si=pi;for(i=1;inum;i+)int lastX=1;for(j=0;jsj+1.sum_time)temp=sj;sj=sj+1;sj+1=temp;lastX=0;if(lastX=1) break;return s0;void SPF(int p)(if(n0)(int i,j,k,l,tc=0;Pro seqn;Pro temp_seq

5、n;printf(短进程优先调度算法SPFn);printf(-请依次输入5个进程的进程号、到达时间和执行时间);printf(-成员变量用逗号隔开;进程间用回车隔开);for(i=0;in;i+)(scanf(%d,%d,%d,&seqi.PRO_ID,&seqi.arrive_time,&seqi.sum_time);)printf(调度顺序是:n);/初始化tcint tempnum;for(i=0;inum;i+)(tempi=seqi.arrive_time;)tc=bubble(temp);/tc 是断点啊/flag表示对应i的pro的队列情况/-1表示未进入过队列,0表示在队列中

6、,1表示被清除了for(i=0;in;i+)(seqi.flag=-1;)for(i=0;in;i+)(for(j=0;jn;j+)(if(seqj.flag!=1&seqj.arrive_time=tc)(seqj.flag=0;)for(j=0;jn;j+)(temp_seqj=seqj;if(seqj.flag!=0)(temp_seqj.sum_time=max;)l=bubble(temp_seq).PRO_ID;for(j=0;jn;j+)(if(l=seqj.PRO_ID)(k=j;) tc=tc+bubble(temp_seq).sum_time; seqk.flag=1;pr

7、intf(%d,l);)printf(n);)void main()(SPF(n);)3. 时间片轮转调度算法头文件RR.h#include#include#include#include#include#define MaxNum 100typedef struct pcb 定义进程控制块(char NameMaxNum; /进程名int arrivetime; 到达时间int runtime;运行时间int wholetime; 固定运行时间int FinishTime; 完成时间double WeightTime; 周转时间double WeightWholeTime; /带权周转时间c

8、har state;/运行后的状态struct pcb *next;)PCB;全局变量int N;/实际进程数double SumWT;/周转时间之和double SumWWT;/带权周转时间之和double AverageWT;/平均周转时间double AverageWWT;/平均带权周转时间typedef struct定义队列,封装头结点,指针分别指向队头和队尾(PCB *front,*rear;)queue;queue *init() 进程队列置空queue *head;head=(queue*)malloc(sizeof(queue);head-front=NULL;head-rea

9、r=NULL;return head;)int empty(queue *head) /检验队列是否为空(return (head-front?0:1);)queue *append(queue *head,char cMaxNum,int a,int r,char s) /进程队列入队,往后插入(PCB *p;p=(PCB *)malloc(sizeof(PCB);strcpy(p-Name,c);p-arrivetime=a;p-runtime=r;p-wholetime=r;p-state=s;/p-FinishTime=0;/p-WeightTime=0;/p-WeightWholeT

10、ime=0;p-next=NULL;if(empty(head)head-front=head-rear=p;else(head-rear-next=p;head-rear=p;)return head;)queue *creat(queue *head)/创建进程队列(char cMaxNum;char s=R;int a,r,i;printf(请输入共有几个进程:n);scanf(%d,&N);for(i=1;ifront;if(!p)printf(”时间片轮转调度队列为 !n”);while(p)(printf(Name=%s arrivetime=%d runtime=%d state

11、=%c,p-Name,p-arrivetime,p-runtime,p-state);printf(n);p=p-next;)I*)时间片轮转法调度算法的实 观*/void RR(queue *head,int q)(int t=head-front-arrivetime, lt=head-rear-arrivetime;if(head-front-runtimefront-runtime;elset=t+q;/*进程队列为不空才可调度*/while(!empty(head)(PCB *p1,*p2;printf(n时刻进程运行后的状态n);/*第一种情况:当前运行的时间小于最后一个进程到达时

12、间做一下操作*/while(tfront;printf(%2d %s,t,p1-Name);p1-runtime=p1-runtime-q;/1.运行时间小于0,删除队首if(p1-runtimestate=C;printf( %cn,p1-state);p1-FinishTime=t;p1-WeightTime=p1-FinishTime-p1-arrivetime;p1-WeightWholeTime=p1-WeightTime/p1-wholetime;SumWT+=p1-WeightTime;SumWWT+=p1-WeightWholeTime;printf(时刻%2d进程%s运行结束

13、,进程%s周转时间=%5.2f,带权周转时间=%5.2fn,t,p1-Name,p1-Name,p1-WeightTime,p1-WeightWholeTime);head-front=p1-next;free(p1);)/2.运行时间大于0,向后找位置插入else(printf( %cn,p1-state);p2=p1-next;while(p2-next & p2-arrivetime != t)(p2=p2-next;)此时无新进入队列的进程,有两种情况:1.不用找位置往后插入,队首不变,不做操作/2.找位置往后插入if(p2-arrivetime != t)(PCB *p3=p1,*p

14、4;while(p3-next & p3-arrivetimenext;)if(p3-arrivetimet)(if(p4!=p1)/p1 插在 p4 后,头为 p1-next(head-front=p1-next;p1-next=p4-next;p4-next=p1;)else 不做操作p4=p3=p2=NULL;elsep4=p3=p2=NULL;)此时有新进入队列的进程时:pl插在新进入队列的进程p2后,队首为p1-nextelse(head-front=p1-next;p1-next=p2-next;p2-next=p1;)时刻变化if(head-front-runtimefront-

15、runtime;elset=t+q;) /* 第一种情况结束 */*第二种情况:当期运行的时间大于最后一个进程到达的时间做以下操作*/while(t=lt)(p1=head-front;printf(%2d %s,t,p1-Name);p1-runtime=p1-runtime-q;/1.运行时间小于0,删除队首if(p1-runtimestate=C;printf( %cn,p1-state);p1-FinishTime=t;p1-WeightTime=p1-FinishTime-p1-arrivetime;p1-WeightWholeTime=p1-WeightTime/p1-wholet

16、ime;SumWT+=p1-WeightTime;SumWWT+=p1-WeightWholeTime;printf(时刻%2d进程%s运行结束,进程%s周转时间=%5.2f,带权周转时间=%5.2fn,t,p1-Name,p1-Name,p1-WeightTime,p1-WeightWholeTime);/printf(时刻%2d 进程s 运行结束,t,p1-pname);head-front=p1-next;free(p1);)/2.运行时间大于0,直接插在队尾elseprintf( %cn,p1-state);若原队列只有一个进程,不必往队尾插if(!p1-next)head-front

17、=p1;/若原队列有多个进程else(head-front=p1-next;head-rear-next=p1;head-rear=p1;p1-next=NULL;)时刻变化,队列为空时不做时刻变化if(empty(head)return;else(if(head-front-runtimefront-runtime;elset=t+q;)/*第二种情况结束*/)主程序Main.cpp#include#include#include#include#include#include RR.hvoid main()(queue *head;int q;head=init();head=creat(

18、head);printf(n您输入的时间片轮转进程队列为:n);print(head);printf(n请输入时间片轮转调度的时间片为:);scanf(%d,&q);时间片轮转调度RR(head,q);AverageWT=SumWT/N;AverageWWT=SumWWT/N;printf(平均周转时间=%5.2f,平均带权周转时间=%5.2f,AverageWT,AverageWWT);)运行结果:先来先服务:-口 xo -R-.3-.3-.3-.3-I-I .2 -ju-jududu豆玮士 口士口士 口士口z-.二 e结11MMM器之之之之之15之n墨之之之之江42848519:1920l

19、22:nt*. -.-.9 4 3411 1 14539.4 .5 .E 3 1ttllD :-T-lzT-lzTtT-tc 1 -.也口A口A口A口 D l.Tf - - A t F F 占 口A口 HI 口 名 口A口 Az Az H Hl-l A 口 由.A干 干干 ? HJ 为为干干干干干于于于,5 2 7 0 c 讶讶响邮 M 倒*14218418191920k l1l 2 3 4.1u-ITttt/lAAA.A0.,ll,l2.,l3Jan 01236457891111B =s =B =B =B =B =B =s =B =B =B =B =B =ess -11 - -11 - -I

20、- - -I- - -I- - -I- - -11 - -11 - -11 - -I- - -I- - -I- - -I- - -11 -t 进进进进进进进进进进进进进进X网由俄的文档原面c+mebu消忧先服曾 .exe,r短进程:时间片轮:心得体会:这次的实验与上次的实验相比,在很多方面都有更多的难度,所以我们参考了别人很多的程 序然后稍作了修改。但是由于自身知识不够,所以没能将三个算法都弄到一个大程序中,只 能通过三个程序来实现,这一点是我们的不足。虽然如此,我们还是有了一定的收获,比如 更加深刻了解到了先来先服务、短进程、时间片轮这三种作业的原理,而且这一过程中我们 觉得时间片轮调度算法更具优势。馅输八逐程名,进程到达时间,进程逐行时间:23请输入进程名,进程到达时间,进程运行时间= 34

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!