Ai
1 Star 0 Fork 0

7gugu/非抢占式多级反馈队列调度算法

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
index.js 2.00 KB
一键复制 编辑 原始数据 按行查看 历史
7gugu 提交于 2020-11-10 00:24 +08:00 . 第一次提交
//Powered By 7gugu
//每一级队列的可运行时间
let timeSlice = [1, 2, 3];
//准备运行的队列
let preRunQueue = [];
//3级运行队列
let runQueue = [
[],
[],
[]
];
//准备运行的程序[开始时间, 运行时间]
let progs = [
[0, 8],
[1, 4],
[5, 1],
[3, 7],
[4, 2]
];
for (let i = 0; i < progs.length; i++) {
let prog = {};
prog.id = "P" + i;
prog.startTime = progs[i][0];
prog.runTime = progs[i][1];
prog.priority = 0; //设置最高优先级
preRunQueue.push(prog); //把待运行的程序导入运行序列
}
//总运行时间
let totalTime = 0;
while (true) {
//如果待运行队列中仍然有程序 & 程序已到达开始时间
if (preRunQueue.length > 0) {
let prog = preRunQueue[0];
if (prog.startTime <= totalTime) {
preRunQueue.shift(); //直接弹出队头的元素
runQueue[0].push(prog); //把程序加入0级运行队列中
console.log(prog.id + "开始运行,开始时间为:" + totalTime);
}
}
for (let i = 0; i < runQueue.length; i++) {
//如果各级队列还有程序的话,就继续运行
if (runQueue[i].length > 0) {
let prog = runQueue[i].shift(); //获取各级队列中第一个程序
if (prog.runTime > timeSlice[i]) {
//程序运行时间比时间片大
totalTime = totalTime + timeSlice[i]; //总运行时间累加
prog.runTime = prog.runTime - timeSlice[i]; //减去每一次运行的时间
if (i != runQueue.length - 1) {
//如果未处于最低优先级,则把程序放在下一个优先级队列中
runQueue[i + 1].push(prog);
} else {
//如果处于最低优先级,则把程序放回最低优先级中运行
runQueue[i].push(prog);
}
} else {
//程序运行时间比时间片小
totalTime = totalTime + prog.runTime;
console.log(prog.id + "运行完成,目前时间为:" + totalTime);
}
break;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/7gugu/Non-preemptive-multi-level-feedback-queue-scheduling-algorithm.git
git@gitee.com:7gugu/Non-preemptive-multi-level-feedback-queue-scheduling-algorithm.git
7gugu
Non-preemptive-multi-level-feedback-queue-scheduling-algorithm
非抢占式多级反馈队列调度算法
master

搜索帮助