进程调度之动态优先权算法

编程入门 行业动态 更新时间:2024-10-24 02:29:42

进程调度之动态<a href=https://www.elefans.com/category/jswz/34/1729781.html style=优先权算法"/>

进程调度之动态优先权算法

首先,我们要了解动态优先权算法。

举一个例子:

进程名到达时间运行时间优先数
A045
B223
C354
D526

其中优先数越大优先权越高,每运行一个时间片优先数减3。

既然要模拟动态优先权算法,每个进程的到达时间,运行时间和优先数都应该是随机的,并且满足一些条件:

  1. 到达时间大于等于0
  2. 运行时间大于等于1
  3. 优先数之间的差值与优先数动态调整的数值之间要适当
  • 若优先数动态调整的数值远大于优先数之间的差值,则动态优先权算法变成时间片轮转算法
  • 若优先数之间的差值远大于优先数动态调整的数值,则动态优先权算法变成先来先服务算法

按理来说应该是先随机出各进程的优先数,再根据优先数之间的差值决定优先数动态调整的数值。
但是为了模拟方便,我们可以先决定优先数动态调整的数值,将其作为参数,再由这个参数随机出各进程的优先数。此段内容对应:

pcs[i].setPriorityValue(dynamicLevel);// 保证动态调整的值合理
运行结果是怎样的

我想创建一个int数组,其中每个元素对应一个时间片,表示该时间片是哪个进程正在运行。
得到这样一个数组之后,其它信息都可以由它推出。

int数组的长度是总时间,总时间为进程需求时间的累加。
对吗?

在整个过程中,总会出现某个时间片内没有进程运行的情况,比如进程最早到达时间是3,那么前3个时间片(如有疑义见显示的统一化)就是没有进程运行的。
所以在程序里需要计算“真正的”总时间。

由于“真正的”总时间需要遍历得到,得到总时间之后才可以创建数组再次遍历计算,所以这一部分相当于遍历了两次。

第一次:

for (int nowTime = 0; nowTime < allTime; nowTime++) {boolean isPosZero = true;for (int i = 0; i < n; i++) {if (pcs[i].timeCost > 0 && nowTime >= pcs[i].arriveTime) {isPosZero = false;}}if (isPosZero) {allTime++;}}

第二次:

for (int nowTime = 0; nowTime < allTime; nowTime++) {int pos = -1;int compare = -dynamicLevel * (nowTime);// 假设初始优先权为正,优先权可以减至负数,该式保证compare的值始终最小for (int i = 0; i < n; i++) {if (pcs[i].timeCost > 0 && nowTime >= pcs[i].arriveTime) {if (compare < pcs[i].priorityValue) {

更多推荐

进程调度之动态优先权算法

本文发布于:2024-03-11 20:00:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729789.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:优先权   算法   进程   动态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!