非抢占式多级反馈队列调度算法 C++实现
#include <bits/stdc++.h>
using namespace std;
int a[100],s[100],y[100],A[100],n;//a[]代表来的时间,s[]代表剩余服务时间 ,y[]代表服务时间 ,n代表进程总数
bool check()
{ for(int k=1;k<=n;k++)
if(s[k]>0)
return false;
return true;
}
int main()
{ cout<<"****非抢占式多级反馈队列调度算法****"<<endl;
cout<<"请输入进程总数:";
cin>>n;
cout<<"请输入队列最高级数:";
int i;
cin>>i;
int w[i+1][n+1]={};//记录各个队列中的进程 w[1][2]=3 代表第一队列中第二个等待的进程号为3
int end[n+1]={};//记录结束时间
for(int k=1;k<=n;k++)
{ cout<<k<<":"<<endl;
int p;
cout<<"请依次输入进程的信息"<<endl;
cout<<"请输入进程代号pn=";
cin>>p;
cout<<"请输入到达时间at=";
cin>>a[k];
cout<<"请输入服务时间st=";
cin>>s[k];
y[k]=s[k];
A[k]=a[k];
}
printf("调度序号 运行的进程pn 开始运行时刻 运行时间 剩余服务时间 结束运行时刻\n");
int t=0;
int g=1;//进程到达时加入第一队列;
int xuhao=1;
while(!check())
{ if(A[g]>=0&&A[g]<=t&&g<=n)
{ int u;
for(u=1;u<=n;u++)
{ if(w[1][u]==0)
break;
}
w[1][u]=g;
A[g]=-0.1;//进入第一队列后就不会在让它进入了。
g++;
}
int d,e;//记录这一次该哪个进程运行了。
for(int k=1;k<=i;k++)
{ if(w[k][1]>=1)
{ d=k;
e=w[k][1];
break;
}
}
int time=pow(2,d-1);//运行时间
if(s[e]>time)//该时间片不能让该进程结束。
{ s[e]=s[e]-time;
w[d][1]=0;
for(int h=2;h<=n;h++)//这一队列后面的整体往前移一位
if(w[d][h]>=1)
{ int temp=w[d][h];
w[d][h]=w[d][h-1];
w[d][h-1]=temp;
}
for(int k=1;k<=n;k++)//进入下一队列;
{ if(w[d+1][k]==0)
{w[d+1][k]=e;
break;
}
}
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",xuhao,e,t,time,s[e],t+time);
t=t+time;
xuhao++;
continue;
}
else if(s[e]==time)//真好能结束
{ s[e]=0;
w[d][1]=0;
for(int h=2;h<=n;h++)//这一队列后面的整体往前移一位
if(w[d][h]>=1)
{ int temp=w[d][h];
w[d][h]=w[d][h-1];
w[d][h-1]=temp;
}
end[e]=t+time;
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",xuhao,e,t,time,s[e],t+time);
t=t+time;
xuhao++;
continue;
}
else//这一时间片能结束该进程
{ end[e]=t+s[e];//s[e]是真正运行时间
int z=s[e];
s[e]=0;
w[d][1]=0;
for(int h=2;h<=n;h++)//这一队列后面的整体往前移一位
if(w[d][h]>=1)
{ int temp=w[d][h];
w[d][h]=w[d][h-1];
w[d][h-1]=temp;
}
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",xuhao,e,t,z,s[e],t+z);
t=t+z;//由于该调度过程时间片没有用完,所以序号不加1;
continue;
}
}
float sum1,sum2=0;
printf("进程pn\t 完成时刻\t 周转时间\t 带权周转时间\n");
for(int k=1;k<=n;k++)
{ int g=end[k]-a[k];//周转时间
float h=float(g/float(y[k]));//带权周转时间
printf("%d\t\t%d\t\t%d\t\t%f\n",k,end[k],g,h);
sum1+=g;
sum2+=h;
}
cout<<"平均周转时间 : "<<float(sum1/n)<<endl<<"平均带权周转时间 : "<<float(sum2/n);
}
非抢占式多级反馈队列调度算法 C++实现相关推荐
- 时间片轮转(RR)、优先级调度算法以及多级反馈队列调度算法
一.调度算法 (一)时间片轮转(RR, Round-Robin) 例题:各进程到达就绪队列的时间.需要的运行时间如下表所示.使用时间片轮转调度算法,分析时间片大小分别是2.5时的进程运行情况. 常用于 ...
- java多级反馈队列进程调度,多级队列反馈调度算法 请教多级反馈队列调度算法...
请教多级反馈队列调度算法???????????? 在某一操作系统中对进程调度采用多级反馈队列调度算法.现设定采用三级分数给小编了,小编来 0时刻A到达,进入I队列,执行2个时间段后,转向队列II,再执 ...
- 【计算机操作系统】用java模拟非抢占式(先来先到、短作业、高响应比),时间片轮转调度算法
. 首先,我来介绍一下该程序大致内容 程序使用了ArrayList链表来模拟各进程队列,并且结果会显示出每个时刻的进程的运行信息.最后的所有进程的执行结果和进程的执行顺序. ps:各个模拟程序是相互独 ...
- C#进程调度的模拟实现:模拟先来先服务调度算法、短作业优先调度算法和优先级调度算法(考虑非抢占式和抢占式),进行算法评价,输出调度结果和算法评价指标。
没什么水平,希望能帮到你 环境:visual studio 2019 附带工程资源:C#进程调度的模拟实现附带资源-C#文档类资源-CSDN下载 先来先服务的调度算法:是一种非抢占式的算法,先来先服务 ...
- 非抢占式优先算法例题_非抢占式高优先级调度算法
v1.0 可编辑可修改 1 /* 非抢占式高优先级调度算法(优先数越大级别越高) 算法思想: 在按进程达到时间由小到大的顺序输入进程信息后, 先对其优先数进行排列, 将 最先到达的进程的到达时间设为开 ...
- 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN
各种调度算法的学习思路: 调度算法的评价指标: 一.先来先服务算法(FCFS):First Come First Serve 二.最短作业优先算法(SJF非抢占式):Shortest Job Firs ...
- 非抢占式优先级调度算法_华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核...
华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核 众所周知华为鸿蒙操作系统内核是Linux内核.而Linux内核即是抢占式内核也是非抢占式内核.设置软件优先级在优先级在0-99之间是抢占式优先级.设置 ...
- 2.2.5 操作系统之调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)
文章目录 0.思维导图 1.时间片轮转---RR 2.优先级调度算法 3.多级反馈队列调度算法 4.三种算法的对比总结 0.思维导图 1.时间片轮转-RR Round-Robin 时间片为2举例 以时 ...
- 【学习笔记】第二章——时间片轮转RR、优先级调度、多级反馈队列调度算法
文章目录 一. 时间片轮转 二. 优先级调度 三. 多级反馈队列调度算法 四. 总结 一. 时间片轮转 公平,轮流给进程提供时间片 只用于进程调度(只有进程才能被分配时间片) 抢占式,由时钟装置发出时 ...
最新文章
- 加速数据分析,这12种高效Numpy和Pandas函数为你保驾护航
- 个人计算机技术分享,一个计算机类本科毕业设计分享
- 设计模式读书笔记-----代理模式
- 分享30个最佳 jQuery Lightbox 效果插件
- 为什么要用MyBatis-Spring JDBC
- 使用 Node.js Express 的最佳实践
- (1-e^(-j5w))/(1-e^(-jw))=e^(-j2w)*sin(5w/2)/sin(w/2)的证明过程
- 腾讯状告前工程师开发游戏抄袭《王者荣耀》,赔偿 1940 万元!
- python经典程序实例-你不知道的Python语言的经典五大案例
- Linux完美学习笔记
- 因果推断-Uplift Model:Meta Learning
- 基于遗传算法的simulink/PID参数整定(s函数)
- 新浪云sae springboot项目部署
- @Value读取properties中文乱码解决方案
- 在cmd运行java_用cmd运行java时的问题
- 计算机英语性考任务答案,2010秋英语(1)形考答案
- Android电源管理介绍
- 对不起!我来晚了!——《Android群英传》出版祭
- Ubuntu 14.04 更换源(官方源——阿里源)
- 使用tdd构建golang Web 应用(4)