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

您所在的位置:网站首页 什么是静态调度 进程调度之动态优先权算法

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

2024-07-01 23:32| 来源: 网络整理| 查看: 265

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

举一个例子:

进程名 到达时间 运行时间 优先数 A 0 4 5 B 2 2 3 C 3 5 4 D 5 2 6

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

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

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

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

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

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

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

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

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

第一次:

for (int nowTime = 0; nowTime = pcs[i].arriveTime) { isPosZero = false; } } if (isPosZero) { allTime++; } }

第二次:

for (int nowTime = 0; nowTime = pcs[i].arriveTime) { if (compare


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3