/**
* 进程多级反馈队列调度算法
*/
package qust.osproject.process.dao;
import java.util.LinkedList;
import java.util.Queue;
import qust.osproject.domain.OSProcess;
public class ProcessDaoMFQ extends ProcessDao {
// 三个反馈队列
private Queue<OSProcess> q1 = new LinkedList<OSProcess>();
private Queue<OSProcess> q2 = new LinkedList<OSProcess>();
private Queue<OSProcess> q3 = new LinkedList<OSProcess>();
private OSProcess tmProcess = new OSProcess();
private int k = 0;
private int t0;
private int q = 1; // 时间片长度
/**
* 设置时间片长度
*
* @param q
*/
public void setQ(int q) {
this.q = q;
}
/**
* 初始化进程列表及进程队列
*/
private void init() {
q1.clear();
q2.clear();
q3.clear();
for (int i = 0; i < plist.size(); i++) {
plist.get(i).setAllocation(0);
plist.get(i).setpState(0);
plist.get(i).setpPriority(1);
}
}
/**
* 设置完成进程的属性:状态、完成时间
*
* @param num
*/
private void setFinish(int num) {
for (int i = 0; i < plist.size(); i++) {
if (num == plist.get(i).getNum()) {
plist.get(i).setFinishTime(t0);
plist.get(i).setpState(2);
k++;
break;
}
}
}
/**
* 进程多级反馈队列调度算法
*/
public void pMFQ() {
int s = 0;
ProcessSort();
init();
k = 0;
t0 = plist.get(0).getArriveTime();
tmProcess = null;
while (!(q1.isEmpty() && q2.isEmpty() && q3.isEmpty()) || k < plist.size()) {
for (int i = 0; i < plist.size(); i++) {
if (plist.get(i).getArriveTime() <= t0 && plist.get(i).getpState() == 0) {
q1.add(plist.get(i));
plist.get(i).setpState(1);
}
}
if (tmProcess == null) {
if (!q1.isEmpty()) {
tmProcess = q1.poll();
s = 0;
} else if (!q2.isEmpty()) {
tmProcess = q2.poll();
s = 0;
} else if (!q3.isEmpty()) {
tmProcess = q3.poll();
s = 0;
} else {
t0++;
}
} else {
if (tmProcess.getpPriority() == 1) { // 正在执行的进程优先级为1
s++;
t0++;
tmProcess.setAllocation(tmProcess.getAllocation() + 1);
if (tmProcess.getAllocation() >= tmProcess.getMaxTime()) { // 进程执行结束
setFinish(tmProcess.getNum());
tmProcess = null;
} else if (s >= q) { // 时间片用尽,进入下一优先级队列
tmProcess.setpPriority(tmProcess.getpPriority() + 1);
q2.add(tmProcess);
tmProcess = null;
}
} else if (tmProcess.getpPriority() == 2) { // 正在执行的进程优先级为2
if (!q1.isEmpty()) { // 高优先级进程抢占
q1.add(tmProcess);
tmProcess = null;
} else {
s++;
t0++;
tmProcess.setAllocation(tmProcess.getAllocation() + 1);
if (tmProcess.getAllocation() >= tmProcess.getMaxTime()) { // 进程执行结束
setFinish(tmProcess.getNum());
tmProcess = null;
} else if (s >= 2 * q) { // 时间片用尽,进入下一优先级队列
tmProcess.setpPriority(tmProcess.getpPriority() + 1);
q3.add(tmProcess);
tmProcess = null;
}
}
} else if (tmProcess.getpPriority() == 3) { // 正在执行的进程优先级为3
if (!q1.isEmpty() || !q2.isEmpty()) { // 高优先级进程抢占
q3.add(tmProcess);
tmProcess = null;
} else {
s++;
t0++;
tmProcess.setAllocation(tmProcess.getAllocation() + 1);
if (tmProcess.getAllocation() >= tmProcess.getMaxTime()) { // 进程执行结束
setFinish(tmProcess.getNum());
tmProcess = null;
} else if (s >= 4 * q) { // 时间片用尽,再次进入队尾
q3.add(tmProcess);
tmProcess = null;
}
}
}
}
} // end of while
ProcessSortFinishIN();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.算法 1.1进程调度算法 先来先服务调度算法 时间片轮转调度算法 优先级调度算法 多级反馈队列调度算法 高响应比优先调度算法 短作业优先调度算法 1.2磁盘调度算法 先来先服务调度算法 最短寻道时间优先调度算法 扫描算法(SCAN) 循环扫描算法(CSCAN) 1.3请求分页页面置换算法 先进先出页面置换算法 最近最久未使用页面置换算法 最少使用置换算法 轮转置换算法
资源推荐
资源详情
资源评论
收起资源包目录
基于javaweb的操作系统算法 (288个子文件)
ProcessClockShowServlet.class 4KB
ProcessDaoClock.class 3KB
ProcesspClockServlet.class 3KB
ProcesspMFQServlet.class 3KB
ProcessDaoClockShow.class 3KB
TrackCSCANServlet.class 3KB
TrackFCFSServlet.class 3KB
TrackSCANServlet.class 3KB
TrackSSTFServlet.class 3KB
ProcessDaoMFQ.class 3KB
PageClockServlet.class 3KB
PageFIFOServlet.class 3KB
PageLRUServlet.class 3KB
PageLFUServlet.class 3KB
ProcesspPSAServlet.class 3KB
ProcesspHRRNservlet.class 3KB
ProcessPFIFOservlet.class 3KB
ProcesspSJFServlet.class 3KB
ProcessDaoPSA.class 3KB
TrackDao.class 2KB
ProcessDaoHRRN.class 2KB
PageDao.class 2KB
ProcessDao.class 2KB
ProcessDaoSJF.class 2KB
OSProcess.class 2KB
PageDaoLRU.class 2KB
PageDaoLFU.class 2KB
PageDaoClock.class 2KB
PageDaoFIFO.class 1KB
TrackDaoCSCAN.class 1KB
PageReplaceGetContent.class 1KB
TrackDaoSCAN.class 1KB
TrackDaoSSTF.class 1KB
OSTrack.class 1KB
ProcessDaoPFIFO.class 957B
TrackDaoFCFS.class 952B
ProcessClockDetail.class 942B
ProcessShow.class 927B
OSPage.class 853B
PageReplacementProcess.class 713B
.classpath 842B
org.eclipse.wst.common.component 479B
org.eclipse.wst.jsdt.ui.superType.container 49B
common.css 30KB
layui.css 29KB
layer.css 15KB
sccl.css 11KB
laydate.css 9KB
style.css 7KB
demo.css 3KB
iconfont.css 2KB
mobile.css 2KB
skin.css 2KB
code.css 1KB
skin.css 725B
skin.css 725B
main.css 554B
Thumbs.db 67KB
Thumbs.db 41KB
Thumbs.db 22KB
Thumbs.db 7KB
iconfont.eot 47KB
iconfont.eot 11KB
59.gif 10KB
22.gif 10KB
loading.gif 8KB
24.gif 8KB
13.gif 7KB
16.gif 7KB
39.gif 6KB
64.gif 6KB
63.gif 6KB
50.gif 6KB
loading-0.gif 6KB
4.gif 6KB
1.gif 5KB
42.gif 5KB
71.gif 5KB
21.gif 5KB
20.gif 5KB
29.gif 5KB
70.gif 4KB
5.gif 4KB
17.gif 4KB
27.gif 4KB
9.gif 4KB
44.gif 4KB
11.gif 4KB
8.gif 4KB
3.gif 4KB
loading-b.gif 4KB
23.gif 4KB
34.gif 4KB
41.gif 4KB
38.gif 4KB
65.gif 3KB
32.gif 3KB
45.gif 3KB
7.gif 3KB
12.gif 3KB
共 288 条
- 1
- 2
- 3
资源评论
dem.o_c
- 粉丝: 423
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功