进程调度-优先级算法(Java简单实现)
来源:互联网 发布:睡觉 知乎 编辑:程序博客网 时间:2024/06/05 02:10
在时间片轮转调度算法中,做了一个隐含的假设,即系统中所有进程的紧迫性是相同的。但实际情况并非如此,为了能满足实际情况的需要,在进程调度算法中引入优先级,而形成优先级调度算法。
本例中实现的优先级的定义为:
优先数 = 50 - 运行时间
每运行一次优先数减3,重新竞争。
实现效果:(只列出输入和最终输出,省略中间过程)
Java实现过程
PCB类在比起时间片轮转算法中新增一个priorityNumber(省略了各个变量的getter与setter)
public class PCB {String name;int priorityNumber=50;int cpuTime=0;int needTime;char state='W';public PCB(String name,int needTime){this.name = name;this.needTime = needTime;this.priorityNumber = 50-needTime;}public void printInformation(){System.out.println(this.getName() +"\t" + this.getCpuTime() + "\t" + this.getNeedTime() + "\t\t" + this.getState());}......}
循环一下处理过程并输出
// 找出优先级最高的进程int maxPriorityNumber = 0;for (PCB tempPCB : currentQueue) {if(tempPCB.getPriorityNumber()>maxPriorityNumber){maxPriorityNumber=tempPCB.getPriorityNumber();}}// 把优先级最高的进程调配到队首while(currentQueue.peek().getPriorityNumber() < maxPriorityNumber){currentQueue.offer(currentQueue.peek());currentQueue.poll();}进程调度处理
PCB processingPCB = currentQueue.poll();if (processingPCB.state != 'F') {waitQueue.poll();processingPCB.setState('R');if (processingPCB.getNeedTime() > round) {processingPCB.setCpuTime(processingPCB.getCpuTime() + round);processingPCB.setNeedTime(processingPCB.getNeedTime()- round);processingPCB.setState('W');} else {processingPCB.setCpuTime(processingPCB.getCpuTime()+ processingPCB.getNeedTime());processingPCB.setNeedTime(0);processingPCB.setState('F');}// 执行完毕竞争数减3}currentQueue.offer(processingPCB);遍历输出结果(略)
0 0
- 进程调度-优先级算法(Java简单实现)
- 进程优先级调度算法
- Java简单实现进程调度算法 FCFS和SJF
- Java实现进程调度策略(时间片轮转、最高优先级)
- 进程调度-时间片轮转法(Java简单实现)
- java按优先权调度进程算法实现
- java按优先权调度进程算法实现
- 操作系统进程调度算法(Java 实现)
- 模拟进程调度(简单实现)
- 进程调度模拟程序设计-----FCFS算法简单实现
- java 实现进程调度
- 进程优先级和调度
- java实现操作系统中的页面置换算法、进程调度算法、磁盘调度算法
- 进程调度算法(进程调度策略)
- java按时间片轮转进程调度算法实现
- java按时间片轮转进程调度算法实现
- linux内核调度算法(1)--快速找到最高优先级进程
- linux内核调度算法(1)--快速找到最高优先级进程
- LeetCode Permutations II
- C#属性
- RedHat6网络配置
- iOS开发- UICollectionView详解+实例
- rrdtool安装 (centos6) 修改运维网Cacti图形旁边的字
- 进程调度-优先级算法(Java简单实现)
- 生活随想--雨滴与闪电
- Android布局整理
- 之九:磁盘页面的抽象
- IOS开发 - 引导页的两种实现 - UICollectionView和UIScrollView
- Android基础知识——组件Intent
- 第13轴项目4-数组的排序(2、字符数组的排序)
- MGMTDB: Grid Infrastructure Management Repository
- uboot的启动过程