内存请求分页实验java_请求分页内存管理的模拟

一、实验题目

5ff4608939e6ddbea8594beb52c25af3.png

28e16a6373f332f7b110ae0c27a8df98.png

f56c7da089afda5ffa41dd27824b598d.png

5dfe9b6ffe2f78c1eafd67f35ff62614.png

c5c83d941345d0d2de9559628ca4b60b.png

a936c4ef4b04e2be8228ad93cecc0446.png

f86949e007e9eedada40ded8cc8f9dce.png

f8606994bcbfa77e395f8741c66576ea.png

二、代码

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);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值