进程调度算法实验报告_第1页
进程调度算法实验报告_第2页
进程调度算法实验报告_第3页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告(二)实验题目 :进程调度算法实验环境 :C+实验目的 :编程模拟实现几种常见的进程调度算法, 通过对几组进程分别使用不同的调度算法, 计算进程的平均周转时间和平均带权周转时间, 比较各种算法的性能优劣。实验内容 :编程实现如下算法:1. 先来先服务算法;2. 短进程优先算法;3. 时间片轮转调度算法。设计分析 :程序流程图 :1. 先来先服务算法初始化 PCB,输入进程信息就绪队列2. 短进程优先算法3. 时间片轮转调度算法实验代码 :1. 先来先服务算法#include <>#define n 20typedef structint id;d;cin>&g

2、t;fi.atime;cin>>fi.runtime;for(i=0;i<amount;i+)time>fj+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;i<amount;i+)cout<<" 进程 :"<<fi.id<<"从"<<fi.atime<<"开始 "<<&quo

3、t;,"<<"在 "<<fi.atime+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;um_time>sj+1.sum_time)temp=sj;

4、sj=sj+1;sj+1=temp;lastX=0;if(lastX=1) break;return s0;void SPF(int p)if(n>0)int i,j,k,l,tc=0;Pro seqn;Pro temp_seqn;printf("短进程优先调度算法SPFn");printf("请依次输入 5 个进程的进程号、到达时间和执行时间n");printf("成员变量用逗号隔开;进程间用回车隔开n");for(i=0;i<n;i+)scanf("%d,%d,%d",&seqi.PRO_I

5、D,&seqi.arrive_time,&seqi.sum_time);printf("调度顺序是: n");rrive_time;tc=bubble(temp);lag=-1;for(i=0;i<n;i+)for(j=0;j<n;j+)if(seqj.flag!=1&&seqj.arrive_time<=tc)seqj.flag=0;for(j=0;j<n;j+)temp_seqj=seqj;if(seqj.flag!=0)temp_seqj.sum_time=max;l=bubble(temp_seq).PRO_I

6、D;for(j=0;j<n;j+)if(l=seqj.PRO_ID)k=j;tc=tc+bubble(temp_seq).sum_time;seqk.flag=1;printf("%d",l);printf("n");void main()SPF(n);3. 时间片轮转调度算法头文件#include<iostream>#include<>#include<>#include<>#include<>#define MaxNum 100typedef struct pcb行时间小于0,删除队首

7、if(p1->runtime<=0)p1->state='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

8、运 行 结 束 ,进 程 %s周 转 时 间 =%, 带 权 周 转 时 间=%n",t,p1->Name,p1->Name,p1->WeightTime,p1->WeightWholeTime);head->front=p1->next;free(p1);行时间大于 0,向后找位置插入elseprintf("%cn",p1->state);p2=p1->next;while(p2->next && p2->arrivetime != t)p2=p2->next;用找位置往后插入,队

9、首不变,不做操作位置往后插入if(p2->arrivetime != t)PCB *p3=p1,*p4;while(p3->next && p3->arrivetime<t)p4=p3;p3=p3->next;if(p3->arrivetime>t)if(p4!=p1)行时间小于0,删除队首if(p1->runtime<=0)p1->state='C'printf("%cn",p1->state);p1->FinishTime=t;p1->WeightTime=p1

10、->FinishTime-p1->arrivetime;p1->WeightWholeTime=p1->WeightTime/p1->wholetime;SumWT+=p1->WeightTime;SumWWT+=p1->WeightWholeTime;printf("时 刻 %2d 进 程 %s运 行 结 束 ,进 程 %s周 转 时 间 =%, 带 权 周 转 时 间=%n",t,p1->Name,p1->Name,p1->WeightTime,p1->WeightWholeTime);行时间大于 0,直

11、接插在队尾elseprintf("%cn",p1->state);/ 若原队列只有一个进程,不必往队尾插if(!p1->next)head->front=p1;/ 若原队列有多个进程elsehead->front=p1->next;head->rear->next=p1;head->rear=p1;p1->next=NULL;/ 时刻变化,队列为空时不做时刻变化if(empty(head)return;elseif(head->front->runtime<q)t=t+head->front-&g

12、t;runtime;elset=t+q;/*第二种情况结束 */主程序#include<iostream>#include<>#include<>#include<>#include<>#include ""void main()queue *head;int q;head=init();head=creat(head);printf("n您输入的时间片轮转进程队列为:n");print(head);printf("n请输入时间片轮转调度的时间片为:");scanf("%d",&q);/ 时间片轮转调度RR(head,q);AverageWT=SumWT/N;AverageWWT=SumWWT/N;printf("平均周转时间 =%,平均带权周转时间=%",AverageWT,AverageWWT);运行结果 :先来先

温馨提示

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

评论

0/150

提交评论