云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 进程调度算法的模拟实现—毕业设计论文

进程调度算法的模拟实现—毕业设计论文

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 22:00:29

}

6 主要功能函数的实现

本系统中主要的功能函数有创建进程,显示已创建进程的信息,先来先服务调度算法,短作业优先调度算法,高优先权优先算法,时间片轮转算法。

6.1 创建进程createProc()函数的实现

因为各个调度算法都与进程到达的时间有关,所以本系统创建的进程是不带头结点的且按到达时间有序的链队列。在创建进程时,首先设定创建的进程数目,然后分别输入进程的名称、到达时间、服务时间。创建进程的主要代码是:

for(int i=1;i<=no;i++) //no是输入的进程数

{

PcbNode *temp=new PcbNode;

cout<<\第 \个进程的名称 (16字符以内):\cin>>temp->name;

cout<<\进程的到达时间 (以“秒”为单位的浮点数):\cin>>temp->arriveTime;

cout<<\进程的服务时间 (以“秒”为单位的浮点数):\cin>>temp->runTime; cout<status=R; temp->next=NULL;

//将新创建的temp结点插入就绪队列qp1使其依据arriveTime有序 insert(qp1,temp);

}

6.2显示已创建进程信息showProc()函数的实现

该函数是把已创建好的进程信息显示出来,其实现方法主要是使用C语言中的setw()函数来控制输出格式,然后通过一个指针,指针初始指向进程队列队首,不断移动指针直到队列尾,在移动过程中以指定位置格式输出各个指针的name、

8

arriveTime以及runTime值即可。

6.3先来先服务算法FCFS()的实现

因就绪队列按到达时间有序排列,所以,先来先服务算法只需创建好的进程顺序输出即可模拟进程的执行,为使用户能直观看到算法执行效果,需求每个进程的周转时间和带权周转时间,运行结果同样由setw()函数控制格式输出,其主要代码如下:

while(p1!=NULL) {

float t1,t2,t3; float t4;

t1=p1->arriveTime;

t2=p1->runTime; //t2 运行时间 current+=t2;

t3=current-t1; //t3 周转时间 t4=float(t3)/t2; //t4 带权周转时间 cout<name<

t2<next; }

//遍历队列全部调度,并计算打印各个参数

6.4短进程优先算法与高优先权优先算法SPF_FPF(slq,flag)的实现

进程调度的调度方式有抢占式和非抢占式,本模拟系统采用的是非抢占方式。在采用这种调度方式时,一旦把处理机分配给某个进程后,就让它一直运行下去,直到进程完成,自愿释放处理机或发生某事件而被阻塞时,才把处理机分配给其它进程。

短进程优先调度算法的每次调度是从就绪队列中选择服务时间最短的执行,而高优先权优先调度算法则是从就绪队列中选择优先权最高的执行,只是选择标准不同而其它过程类似,所以本模拟系统将二者定义为一个函数SPF_FPF(LinkQueue slq,int flag),具体算法由第二个参数flag确定。

高优先权优先调度,其优先权有两种:静态优先权和动态优先权。本系统采用调

9

度性能较好的动态优先权。其动态变化规律是等待时间与要求服务时间的和除以服务时间。

SPF_FPF(LinkQueue slq,int flag)函数中,根据flag的值决定具体算法,flag值为1是短进程优先调度,flag值为2是高优先权优先算法。其关键代码如下:

current=0.0; //系统时间清零 float t1,t2,t3,t4; while(phead->next!=NULL)

{ //统计进程队列中到达时间大于current的进程数con int con=0;

refrashCon(phead,current,con); // cout<<\ switch(con)

{

case 0:

current++;

break;

case 1://只有一个进程到达,直接运行,计算并输出各个参数

pfront=phead->next;

t1=pfront->arriveTime; t2=pfront->runTime;

current+=t2;

t3=current-t1;

t4=t3/t2;

cout<name<

setw(10)<

removePCB(phead); //该进程运行完毕,从就绪队列中删除

break;

default://有多个进程

//查找最短进程或优先权最高进程,返回它的前驱

ptem=runSche(phead,con,flag);

//执行ptem的下一个进程,计算并输出相应信息 pfront=ptem->next ;

t1=pfront-

10

>arriveTime;

t2=pfront->runTime; t3=current-t1;

current+=t2; t4=float(t3)/t2;

cout<

>name<

}

两个算法主要的区别在于runSche(phead,con,flag)的调用,runSche()的主要代码如下:

if(flag==1) //短作业

{ float time=p2->runTime;//p2初始指向就绪队列队首

}

setw(10)<

for(int i=0;i

}

{ if(p2->runTime

{ time=p2->runTime; target=p1;

}

p1=p2; p2=p2->next;

}

else if(flag==2) //高优先权 { float level=0;

float temp=getLev(p2); //求各个进程的动态优先权

for(int i=0;inext ;i++) //查找优先权最高的进程

{if(temp-level>0) target=p1;

p1=p2; p2=p2->next; level=temp;

}

}

temp=getLev(p2);

11

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

} 6 主要功能函数的实现 本系统中主要的功能函数有创建进程,显示已创建进程的信息,先来先服务调度算法,短作业优先调度算法,高优先权优先算法,时间片轮转算法。 6.1 创建进程createProc()函数的实现 因为各个调度算法都与进程到达的时间有关,所以本系统创建的进程是不带头结点的且按到达时间有序的链队列。在创建进程时,首先设定创建的进程数目,然后分别输入进程的名称、到达时间、服务时间。创建进程的主要代码是: for(int i=1;i<=no;i++) //no是输入的进程数 { PcbNode *temp=new PcbNode; cout<>temp->name;

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com