引用块内容
实验要求:
1、采用分页式管理方式实现主存空间的分配和回收;
2、采用位示图来表示主存分配情况;
3、假设某系统的主存被分成大小相等的64块,位示图用8个字节来构成;
package test;
import java.util.ArrayList;
public class Memory {
public static void main(String[] args) {
Block block = new Block();
Job job1 = new Job();
job1.size = 4;
job1.block.add(4);
job1.block.add(5);
job1.block.add(6);
job1.block.add(31);
block.set(job1);
System.out.println("载入作业1");
block.display();
//作业2占用第0,1,9,11,13,24块;
Job job2 = new Job();
job2.size = 6;
job2.block.add(0);
job2.block.add(1);
job2.block.add(9);
job2.block.add(11);
job2.block.add(13);
job2.block.add(24);
block.set(job2);
System.out.println("载入作业2");
block.display();
//要求为作业3分配内存,作业3需要5个物理块;
Job job3 = new Job();
job3.size = 5;
block.setJob(job3);
System.out.println("载入作业3");
block.display();
//要求回收作业1占用的物理块;
block.undo(job1);
System.out.println("撤销作业1");
block.display();
}
}
class Job {
int size;
public ArrayList<Integer> block;
public Job() {
size = 0;
block = new ArrayList<Integer>();
}
}
class Block {
private int[][] array = new int[8][8];
private int size = 64;
public void display() {
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j) {
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
}
public Job setJob(Job job) {
if (size >= job.size) {
int count = 0;
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j) {
if (array[i][j] == 0) {
array[i][j] = 1;
job.block.add(i * 8 + j);
++count;
if (count == job.size) {
return job;
}
}
}
}
}
else {
System.out.println("无空间分配");
return job;
}
return job;
}
public void set(Job job1) {
int i = 0;
int j = 0;
for(int z = 0 ; z < job1.size ; ++z) {
i = job1.block.get(z) / 8;
j = job1.block.get(z) % 8;
array[i][j] = 1;
}
}
public void undo(Job job1) {
int i = 0;
int j = 0;
for(int z = 0 ; z < job1.size ; ++z) {
i = job1.block.get(z) / 8;
j = job1.block.get(z) % 8;
array[i][j] = 0;
}
}
}