源码往下翻
实验课的算法,细节没处理,核心东西已经搞出来了,要用的可以拿去参考
运行截图
实验题目
源码
package com.company;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Page {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//磁盘上有8页作业,初始化
List<Work> list = new ArrayList<Work>();
list.add(new Work(1, 0, 0, 0, 1024*1));
list.add(new Work(2, 0, 0, 0, 1024*2));
list.add(new Work(3, 0, 0, 0, 1024*3));
list.add(new Work(2, 0, 0, 0, 1024*2));
list.add(new Work(4, 0, 0, 0, 1024*4));
list.add(new Work(2, 0, 0, 0, 1024*2));
list.add(new Work(1, 0, 0, 0, 1024*1));
list.add(new Work(4, 0, 0, 0, 1024*4));
System.out.println("作业开始前状态:\n" + list.toString().toString());
System.out.println("-------------------------------");
//主存大小为3
int sizeInter = 3;
//主存作业
ArrayList<Work> listInter = new ArrayList<Work>();
//读入该内存首逻辑地址
System.out.println("请输入逻辑首地址");
int firstInter = scanner.nextInt();
if (0 == firstInter) {
System.out.println("不能为0,退出。");
} else {
//给内存装入作业
//先把内存装满,默认前三个作业不重复
for (int i = 0; i < sizeInter; i++) {
listInter.add(list.get(i));
//已在内存,标记设置
listInter.get(listInter.size() - 1).setExistFlag(1);
//分配主存块号
listInter.get(listInter.size() - 1).setInterId(firstInter+listInter.size());
System.out.print("第" + (i+1) + "行\t内存状态:");
for (int j = 0; j < listInter.size(); j++) {
System.out.print(listInter.get(j).getPageId() + "\t");
}
System.out.println();
}
//先进先出
for (int i = sizeInter; i < list.size()-1; i++) {
int j = 0;
for (; j < listInter.size(); j++) {
//如果内存中已经有该作业,则直接输出并进行下一个作业
if (listInter.get(j).getPageId() == list.get(i).getPageId()) {
System.out.println("第" + (i+1) + "行\t内存状态:" + listInter.get(0).getPageId() + "\t" + listInter.get(1).getPageId() + "\t" + listInter.get(2).getPageId());
break;
}
}
if (j == 3) {
//移除页后面的页往前走,内存块页号也要走
listInter.get(listInter.size() - 1).setInterId(firstInter+listInter.size()-1);
listInter.get(listInter.size() - 2).setInterId(firstInter+listInter.size()-2);
listInter.get(0).setInterId(0);
listInter.get(0).setExistFlag(0);
listInter.remove(0);
listInter.add(list.get(i));
//已在内存,标记设置
listInter.get(listInter.size() - 1).setExistFlag(1);
//分配主存块号
listInter.get(listInter.size() - 1).setInterId(firstInter+listInter.size());
System.out.println("第" + (i+1) + "行\t内存状态:" + listInter.get(0).getPageId() + "\t" + listInter.get(1).getPageId() + "\t" + listInter.get(2).getPageId());
}
}
}
System.out.println("--------------------------------");
System.out.println("作业结束,当前状态:\n" + list.toString().toString());
}
}
class Work{
private int pageId;
private int existFlag;
private int interId;
private int modifierFlag;
private int hark;
@Override
public String toString() {
return "Work{" +
"pageId=" + pageId +
", existFlag=" + existFlag +
", interId=" + interId +
", modifierFlag=" + modifierFlag +
", hark=" + hark +
'}' + "\n";
}
public Work(int pageId, int existFlag, int interId, int modifierFlag, int hark) {
this.pageId = pageId;
this.existFlag = existFlag;
this.interId = interId;
this.modifierFlag = modifierFlag;
this.hark = hark;
}
public int getPageId() {
return pageId;
}
public void setPageId(int pageId) {
this.pageId = pageId;
}
public int getExistFlag() {
return existFlag;
}
public void setExistFlag(int existFlag) {
this.existFlag = existFlag;
}
public int getInterId() {
return interId;
}
public void setInterId(int interId) {
this.interId = interId;
}
public int getModifierFlag() {
return modifierFlag;
}
public void setModifierFlag(int modifierFlag) {
this.modifierFlag = modifierFlag;
}
public int getHark() {
return hark;
}
public void setHark(int hark) {
this.hark = hark;
}
}