资源简介
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
相关资源
- 采用线程方式拷贝文件夹Delphi使用自
- 带非期望产出的SBM模型.rar
- 机械设计——V带传动设计说明书及
- Img2Lcd V4.0绿色版本,带注册码
- 带有电压恢复补偿功能的直流微电网
- 2.7GHz微带贴片天线
- 多模式带音乐跑马灯
- 51单片机空闲和掉电模式应用带程序
- Windows XP 自带的放大镜程序
- 用带表头的链表存放输入的数据,每
-
xm
l+flash 图片相册,带后台 - OPCAutomation64位亲测可用带安装说明
- 带通采样定理+详细推导+应用举例
- CAD 插入带坐标的正射影像
- OpenGL实现多边形扫描转换的扫描线算
- 录音程序(带有端点检测的语音录音
- UGUI ScrollRect 带按钮翻页支持拖拽
- SONY VISCA协议控制软件带回显
- 辩论赛flash倒计时 PPT倒计时
- SGU离线题库完整530道题,带试题难度
- 《DirectX 11游戏编程入门》中文版+英文
- OpenGL编程指南(第八版)中文高清晰
- unity3D卡通女战士精细人物角色模型带
- LINUX系统ping命令完整实现带路由追踪
- 宽带阵列综合程序
- ABC-SVM算法,逐行代码注释简单易懂,
- CST中仿真设计频率为10Ghz的矩形微带贴
- 分拣传送带
- 人脸识别Demo系列免费、带离线——人
- 带转矩和磁链内环的交流异步电机矢
评论
共有 条评论