没有合适的资源?快使用搜索试试~ 我知道了~
首页操作系统 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页未读,继续阅读
Chenin_rain
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功