没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论















实验四 模拟内存管理
一、实验目的
模拟动态分区管理凡是来管理内存,实现内存的虚拟分配和回收,,观察内存空闲链
表和内存分配表在内存分配和回收过程中数据的变化,分析用户程序虚拟地址空间分布。
二、实验内容:
随机产生数据,或随机产生进程,或由用户输入进程相应信息,实现动态请求分页内
存管理,主要功能包括:内存分配、内存回收、内存空闲链表的变化、页表、快表、内存
分配和回收过程的模拟。
三、实验预备内容
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页未读,继续阅读
资源评论

- 琉璃纱2023-07-29对于初学者而言,这个文件的难度适中,能够帮助他们快速上手和理解操作系统的相关知识。
- 被要求改名字2023-07-29报告中还附带了完整的Java源码,对于想要深入学习或者进行进一步实验的同学来说,非常有帮助。
- 韩金虎2023-07-29作者在实验报告中使用了简单明了的代码演示,为读者提供了直观的视觉效果,使得实验结果更加易于理解。
- shashashalalala2023-07-29整个实验报告的结构清晰,逻辑性很强,让人容易理解和跟随。
- 透明流动虚无2023-07-29这个文件对于学习操作系统的同学来说是一个很好的参考,内容实用,能够帮助理解分页和模拟内存管理的实验原理。

Chenin_rain
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


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