代码:
import java.util.Scanner;
public class Page {
// private static int block_number[];
private static int Mac_address;
// 检查是否越界
private static int check(int AD, int page_all, int page_size) {
if (AD > page_all * page_size) {
System.out.println("数值已越界,请重新输入");
return 0;
}
return 1;
}
// 计算物理地址
private static void address_position(int block_number[], int AD, int page_all, int page_size) {
int page_num = AD / page_size;
int shifting = AD % page_size;
Mac_address = (block_number[page_num]) * page_size + shifting;
System.out.println("对应的物理地址为:" + Mac_address);
}
private static void show_page_table(int page_all, int block_number[]) {
System.out.println("页号 块号");
// System.out.println(block_number[1]);
for (int i = 0; i < page_all; i++) {
System.out.println(i + " ---> " + block_number[i]);
}
}
public static void main(String[] args) {
int flag, r;
int block_number[] = new int[200];
System.out.println(" 页面地址重定位" + '\n'
+ "1.显示页表信息" + '\n'
+ "2.计算物理地址" + '\n'
+ "3.退出程序");
Scanner s = new Scanner(System.in);
System.out.println("请输入页号长度");
int page_size = s.nextInt();
System.out.println("请输入页号大小");
int page_all = s.nextInt();
System.out.println("页表随机生成中。。。");
// 随机生成页表
for (int i = 0; i < page_all; i++) {
r = (int) (Math.random() * 3);
if (i == 0) {
block_number[i] = (r % 4) + 1;
} else {
block_number[i] = block_number[i - 1] + (2 * r % 4) + 1;
// System.out.println(block_number[i]);
}
}
System.out.println("页表生成完毕");
while (true) {
System.out.println("请选择功能:");
flag = s.nextInt();
if (flag == 1) {
// 显示页表信息
show_page_table(page_all, block_number);
} else if (flag == 2) {
// 检查逻辑地址&计算物理地址
int AD;
System.out.println("请输入逻辑地址:");
AD = s.nextInt();
if (check(AD, page_all, page_size) == 1) {
address_position(block_number, AD, page_all, page_size);
}
} else if (flag == 3) {
System.out.println("成功退出");
break;
}
}
}
}
运行结果示例: