一、实验题目
![5ff4608939e6ddbea8594beb52c25af3.png](https://img-blog.csdnimg.cn/img_convert/5ff4608939e6ddbea8594beb52c25af3.png)
![28e16a6373f332f7b110ae0c27a8df98.png](https://img-blog.csdnimg.cn/img_convert/28e16a6373f332f7b110ae0c27a8df98.png)
![f56c7da089afda5ffa41dd27824b598d.png](https://img-blog.csdnimg.cn/img_convert/f56c7da089afda5ffa41dd27824b598d.png)
![5dfe9b6ffe2f78c1eafd67f35ff62614.png](https://img-blog.csdnimg.cn/img_convert/5dfe9b6ffe2f78c1eafd67f35ff62614.png)
![c5c83d941345d0d2de9559628ca4b60b.png](https://img-blog.csdnimg.cn/img_convert/c5c83d941345d0d2de9559628ca4b60b.png)
![a936c4ef4b04e2be8228ad93cecc0446.png](https://img-blog.csdnimg.cn/img_convert/a936c4ef4b04e2be8228ad93cecc0446.png)
![f86949e007e9eedada40ded8cc8f9dce.png](https://img-blog.csdnimg.cn/img_convert/f86949e007e9eedada40ded8cc8f9dce.png)
![f8606994bcbfa77e395f8741c66576ea.png](https://img-blog.csdnimg.cn/img_convert/f8606994bcbfa77e395f8741c66576ea.png)
二、代码
![78123cff13a37a70bbf72e69900cc083.png](https://img-blog.csdnimg.cn/img_convert/78123cff13a37a70bbf72e69900cc083.png)
1.Main.java
package OS;
import java.util.Scanner;
public class Main {
public static int pageSize, blockSize,procSize;
PCB pcb;
Memeroy mem;
public static void main(String[] args) {
Main m=new Main();
m.SysInit();//系统初始化
m.pcb=m.NewProc();//模拟队列初始化
m.Access(m.pcb);
}
void SysInit() {
Scanner sc = new Scanner(System.in);
System.out.println("请求输入页大小"); // 4K 12位
Main.pageSize = sc.nextInt();
System.out.println("请求输入总块数");//32
Main.blockSize = sc.nextInt();
}
PCB NewProc() {
Scanner sc = new Scanner(System.in);
System.out.println("请求输入进程大小");//40000
Main.procSize = sc.nextInt();
mem=new Memeroy();//初始化内存
//
int cnt=(Main.procSize+Main.pageSize-1)/Main.pageSize;
return new PCB(cnt);
}
void Access(PCB pcb) {
//模拟访问ַ
for (int i=0;i<1000;i++){
int logAddr=(int) (Math.random()*Main.procSize);//随机生成地址
System.out.printf("逻辑地址:%d ",logAddr);
System.out.printf("物理地址:%d \n",Memeroy.Relocate(pcb,logAddr));
}
}
}
2.Memory.java
package OS;
import java.util.Scanner;
public class Main {
public static int pageSize, blockSize,procSize;
PCB pcb;
Memory mem;
public static void main(String[] args) {
Main m=new Main();
m.SysInit();//系统初始化
m.pcb=m.NewProc();//模拟队列初始化
m.Access(m.pcb);
}
void SysInit() {
//Main.pageSize = 4096;
//Main.blockSize = 8;
Scanner sc = new Scanner(System.in);
System.out.println("请求输入页大小"); // 4K 12位
Main.pageSize = sc.nextInt();
System.out.println("请求输入总块数");//32
Main.blockSize = sc.nextInt();
}
PCB NewProc() {
//Main.procSize=40000;
Scanner sc = new Scanner(System.in);
System.out.println("请求输入进程大小");//40000
Main.procSize = sc.nextInt();
mem=new Memory();//初始化内存
//
int cnt=(Main.procSize+Main.pageSize-1)/Main.pageSize;
return new PCB(cnt);
}
void Access(PCB pcb) {
//模拟访问ַ
for (int i=0;i<1000;i++){
int logAddr=(int) (Math.random()*Main.procSize);//随机生成地址
System.out.printf("逻辑地址:%d ",logAddr);
System.out.printf("物理地址:%d \n", Memory.Relocate(pcb,logAddr));
}
}
}
3.Page.java
package OS;
import java.util.ArrayList;
public class Page {
int bNo,pNo,P,A;//块号,页号,中断位,访问位
}
class PCB{
ArrayList pTable=new ArrayList();
int limit;//页表限长
public PCB(int len) {
this.limit=len;
for (int i=0;i
Page p=new Page();
p.bNo=-1;
p.pNo=i;
p.P=0;//P=0表示不再内存中
p.A=0;
this.pTable.add(p);
}
}
}