没有合适的资源?快使用搜索试试~ 我知道了~
首页操作系统 linux 请求分页 模拟内存管理实验报告java(内含源码)
资源详情
资源评论
资源推荐

实验四 模拟内存管理
一、实验目的
模拟动态分区管理凡是来管理内存,实现内存的虚拟分配和回收,,观察内存空闲链
表和内存分配表在内存分配和回收过程中数据的变化,分析用户程序虚拟地址空间分布。
二、实验内容:
随机产生数据,或随机产生进程,或由用户输入进程相应信息,实现动态请求分页内
存管理,主要功能包括:内存分配、内存回收、内存空闲链表的变化、页表、快表、内存
分配和回收过程的模拟。
三、实验预备内容
1. 阅读和学习教材关羽存储器管理和虚拟存储器管理的相关内容,了解内存分配算
法、内容分配和回收机制、内存管理过程中需要的数据结构,如页表、快表
2. 熟悉一种编程语言:Java 或 C

四、实验指导
源代码:
1、Main 主类:
package M;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb=new Scanner(System.in);
int
jc_size,yemian_count,visit_jc_number,visit_yemian_hao;
System.out.println("内存的大小为 60k");
System.out.println("一个内存块为 4k");
System.out.println("一个进程分配 5 个内存块");
System.out.println("创建两个进程:");
Jincheng jc[]=new Jincheng[2];
Yebiao yb[]=new Yebiao[2];
Yemian ym[];
Yebiao yebiao=new Yebiao();
Memory memory=new Memory();
//创建内存。并初始化
Memory m[]=new Memory[15];
for(int i=0;i<15;i++){
m[i]=new Memory(i,-1);
}
//创建进程
for(int i=0;i<2;i++){
System.out.println("请输入创建的进程的大小");
jc_size=kb.nextInt();
jc[i]=new Jincheng("进程"+i,jc_size);
}
System.out.println("一个页面 4k");
System.out.println("一个进程一个页表,开始创建页表");
//创建页表
for(int i=0;i<2;i++){
yemian_count=jc[i].getJincheng_size()/4;
if((jc[i].getJincheng_size()%4)!=0){
yemian_count++;
}
ym=new Yemian[yemian_count];
for(int j=0;j<yemian_count;j++){

ym[j]=new Yemian(j,-1,false,0,false);
}
yb[i]=new Yebiao(i,ym,0);
}
//打印页表
System.out.println("创建完成,打印页表");
for(int i=0;i<2;i++){
System.out.println("页面"+i);
System.out.println("页号\t 内存块号\t 状态\t 访问次数\t 是
否修改");
for(int j=0;j<yb[i].getYm().length;j++){
System.out.println(yb[i].getYm(j).getYehao()+"\
t"+yb[i].getYm(j).getMemory_block_number()
+"\t"+yb[i].getYm(j).isStatue()+"\
t"+yb[i].getYm(j).getVisit_count()+"\t"
+yb[i].getYm(j).isChange_site());
}
}
while(true){
System.out.println("****************************请求
分页存储系统****************************");
System.out.println("功能:");
System.out.println("\t 1.查看页表");
System.out.println("\t 2.访问页面");
System.out.println("\t 3.查看内存");
System.out.println("\t 4.退出程序");
int zhiling=kb.nextInt();
switch(zhiling){
case 1:
for(int i=0;i<2;i++){
System.out.println("页面"+i);
System.out.println("已经调入内存的个
数"+yb[i].getInto_memory_count());
System.out.println("页号\t 内存块号\t 状态\t 访问次
数\t 是否修改");
for(int j=0;j<yb[i].getYm().length;j++){
System.out.println(yb[i].getYm(j).getYehao()+"\
t"+yb[i].getYm(j).getMemory_block_number()
+"\t"+yb[i].getYm(j).isStatue()+"\
t"+yb[i].getYm(j).getVisit_count()+"\t"
+yb[i].getYm(j).isChange_site());

}
}
break;
case 2:
System.out.println("请输入要访问哪个进程");
visit_jc_number=kb.nextInt();
if(visit_jc_number>1||visit_jc_number<0){
System.out.println("输入有误,应为 0 或 1");
break;
}
System.out.println("请输入要访问那个页面");
visit_yemian_hao=kb.nextInt();
if(visit_yemian_hao>yb[visit_jc_number].getYm().length||
visit_yemian_hao<0){
int l=yb[visit_jc_number].getYm().length-1;
System.out.println("输入有误,应为 0—"+l);
break;
}
yebiao.search_yebiao(visit_jc_number,visit_yemian_hao,yb,
m);
break;
case 3:
memory.printMemory(m);
break;
case 4:System.exit(0);
}
}
}
}
2、Jincheng 进程类
package M;
public class Jincheng {
String jincheng_name;
int jincheng_size;
Jincheng(String jc_name,int jc_size){
this.jincheng_name=jc_name;
this.jincheng_size=jc_size;
}
剩余16页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0