资源简介
1. 多级反馈队列调度算法
编写一个控制台程序模拟多级反馈对列调度算法。设需要调度的进程情况存放在文本文件“process.text”中,如下图所示(进程情况可以自己设置)
1 0 7
2 1 8
3 2 10
4 3 4
5 4 3
6 5 2
7 6 6
8 7 5
每一行描述一个进程,包含若干个字段字段间用Tab建或空格隔开。第一个字段代表进程的编号,第二个字段代表进程到达的时间,第三个字段代表 。
队列个数和每个队列的时间片长度可以由自己设置他们的值。要求程序必须能够正确给出各个进程到达,调度,运行和完成的时序,并将相应的信息打印出来。举列如下:
T=0时刻,进程1到达。。。
T=0时刻,进程1开始被调度执行。。。。
。。。。
T=1时刻,进程2到达。。。
最后,计算并打印出各个进程的周转时间和带权周转时间。

代码片段和文件信息
package com.queue.bussess;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.linkedList;
import com.queue.vo.MyProcess;
import com.queue.vo.MyQueue;
public class MultiLevelQueue
{
//用于存放process.text文件中列出的所有进程信息
private linkedList allProcess = new linkedList();
private ArrayList restultProcess = new ArrayList();
//用于存放所有队列信息
private ArrayList allQueue = new ArrayList();
private MyQueue queue1 = new MyQueue(32); //优先级为3,该队列的执行时间片为2
private MyQueue queue2 = new MyQueue(24); //优先级为2,该队列的执行时间片为4
private MyQueue queue3 = new MyQueue(18); //优先级为1,该队列的执行时间片为8
//当前正在被调用的进程
private MyProcess currentProcess = null;
//当前被调用进程所在的队列
private MyQueue currentQueue = null;
/**
* 读取文件process.txt,将进程信息插入对象allProcess中
*/
private void init()
{
File processDescFile = new File(“D:\\junge\\javasoruce\\queue\\bin\\process.text“);
FileReader reader = null;
BufferedReader bufferedReader = null;
try
{
reader = new FileReader(processDescFile);
bufferedReader = new BufferedReader(reader);
String str = null;
String[] arrayStr = null;
MyProcess process = null;
while((str = bufferedReader.readLine()) != null)
{
arrayStr = str.split(“\t“);
process = new MyProcess();
process.setId(new Integer(arrayStr[0]));
process.setArriveTime(new Integer(arrayStr[1]));
process.setServiceTime(new Integer(arrayStr[2]));
System.out.println(process);
allProcess.addLast(process);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
this.allQueue.add(this.queue1);
this.allQueue.add(this.queue2);
this.allQueue.add(this.queue3);
}
/**
* 一个时间片时长为1秒
*/
public void run()
{
int time = 0;
int usedTimeSlice = 0;
while (true)
{
//判断time时刻是否有进程任务到达
MyProcess addProcess = this.getArriveTimeProcess(time);
if ( null != addProcess )
{
System.out.println(“T=“ + time + “ 时刻,进程“ + addProcess.getId() + “到达...“);
//新到达的进程任务都加到第一个队列中(优先级最高的队列)
allQueue.get(0).addLast(addProcess);
}
//当前要处理的进程从队列中获取,获取的规则是从优先级高的队列中获取,如果优先级高的队列没有进程就从次优先级的队列中获取。
if ( null == currentProcess)
{
for( int i=0;i {
currentProcess = allQueue.get(i).getFirst();
if ( null != currentProcess )
{
currentQueue = allQueue.get(i);
if ( !currentProcess.isStartBeCalled())
{
System.out.println(“T=“ + time + “ 时刻,进程“ + currentProcess.getId() + “开始被调度执行...“);
}
//做标记:该进程已经开始被调用了
currentProcess.markStart();
break;
}
}
}
//如果currentProcess为null,代表所有的进程任务都处理完了
if
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-01-01 23:30 queue\
文件 232 2011-01-01 23:30 queue\.classpath
文件 381 2011-01-01 23:30 queue\.project
目录 0 2011-01-02 17:51 queue\bin\
目录 0 2011-01-02 00:51 queue\bin\com\
目录 0 2011-01-02 01:00 queue\bin\com\queue\
目录 0 2011-01-02 01:15 queue\bin\com\queue\bussess\
文件 5294 2011-01-02 18:13 queue\bin\com\queue\bussess\MultiLevelQueue.class
目录 0 2011-01-02 10:30 queue\bin\com\queue\vo\
文件 2325 2011-01-02 18:06 queue\bin\com\queue\vo\MyProcess.class
文件 1513 2011-01-02 17:28 queue\bin\com\queue\vo\MyQueue.class
文件 55 2011-01-02 17:51 queue\bin\process.text
目录 0 2011-01-02 01:15 queue\src\
目录 0 2011-01-02 00:51 queue\src\com\
目录 0 2011-01-02 01:00 queue\src\com\queue\
目录 0 2011-01-02 01:15 queue\src\com\queue\bussess\
文件 5468 2011-01-02 18:13 queue\src\com\queue\bussess\MultiLevelQueue.java
目录 0 2011-01-02 10:30 queue\src\com\queue\vo\
文件 2149 2011-01-02 18:06 queue\src\com\queue\vo\MyProcess.java
文件 1433 2011-01-02 17:28 queue\src\com\queue\vo\MyQueue.java
文件 55 2011-01-02 17:51 queue\src\process.text
文件 41984 2011-01-02 17:57 队列.doc
相关资源
- E4A无障碍跨程序操作类库(带源码、
- ACCESS财务报表(带数据).accdb
- 电脑卡西欧计算器 fx-991CN X Emulator19中
- CAD中插入带坐标的正射影像——Inse
-
大数据。基于Hba
se的网站日志分析系 - 一个超简单的企业管理系统(带ACCE
- 带有死区延时的H桥直流电机驱动电路
- 黑白棋(带简单AI)
- 51单片机读取温度数据存储到SD卡中并
- 单循环链表(带头结点和不带头结点
- 远程桌面(带C 源码)
- 带头结点的单链表的c算法实现
- 带时间温度显示的室内灯光控制系统
- A*算法的2D演示(带源码)
- 基于C 的简易FTP客户端(带源码)
- VHDL带分频功能的函数发生器实现六种
- 基于GTK的Linux环境下的简易任务管理器
- 一个简单的单带图灵机
- 斜带石斑鱼TLR22基因的克隆和鉴定
- radmin服务端win10亲测可用,带破解方法
- 友善串口调试助手V3.7.3,带注册码
- 挤压辊式胶带清扫器的应用实践
- 新型带式输送机清扫器的设计与使用
- 风动清扫器在带式输送机上的应用
- 违反希格斯的带电轻子味道在未来的
- 未来轻子对撞机对寻找带电轻子风味
- 在RHIC和LHC能量下重离子碰撞中产生的
- 在sNN = 200 GeV极化p + p,p + Al和p + Au碰
- 在sNN = 5.02 TeV时Pb-Pb碰撞中带电粒子的
- sNN = 5.02 TeV时,p-Pb碰撞中带电射流产
评论
共有 条评论