分区式储器管理.docx

上传人:b****8 文档编号:10347554 上传时间:2023-02-10 格式:DOCX 页数:12 大小:105.42KB
下载 相关 举报
分区式储器管理.docx_第1页
第1页 / 共12页
分区式储器管理.docx_第2页
第2页 / 共12页
分区式储器管理.docx_第3页
第3页 / 共12页
分区式储器管理.docx_第4页
第4页 / 共12页
分区式储器管理.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

分区式储器管理.docx

《分区式储器管理.docx》由会员分享,可在线阅读,更多相关《分区式储器管理.docx(12页珍藏版)》请在冰豆网上搜索。

分区式储器管理.docx

分区式储器管理

实验四:

分区式储器管理

目录

一.实验目的---------------------------------------------3

二.实验内容--------------------------------------------3

三.实验步骤----------------------------------------------3

Java源代码-----------------------------------------------8

实验四:

分区式储器管理

一.实验目的

模拟实现一个简单的固定(或可变)分区存储管理系统,进一步加深对分区分配方案设计思想的理解。

二.实验要求

本实验要求2学时完成。

本实验要求完成如下任务:

(1)建立相关的数据结构,作业控制块、已分配分区及未分配分区;

(2)实现一个分区分配算法,如最先适应分配算法、最优或最坏适应分配算法;

(3)实现一个分区回收算法;

(4)给定一批作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理;

(5)将整个过程可视化显示出来。

三.实验步骤

1添加作业

classLink{//用Link类来模拟连接各个内存,并添加作业

publicvoidaddJob(intsize,intjobNo,Nodea[]){

for(inti=0;i

if(a[i]!

=null){//当前内存有内容时

if(size

for(intj=1;j

if(a[j]==null){

a[j]=newNode(a[i].start,size,true,jobNo);

a[i].size=a[i].size-size;

a[i].start=a[i].start+size;

break;//当找到未被使用的内存及填入内容后跳出循环

}

}

break;

}

}

}

}

2删除作业

publicvoiddelete(Nodea[],intjobNo){//删除某一个进程,当该进程被删除后,进程所在内存的状态变为false

for(inti=0;i

if(a[i]!

=null){

if(a[i].jobNo==jobNo){

//a[i].size=0;

a[i].state=false;

a[i].jobNo=0;

}

}

}

}

3合并分区

publicvoidback(Nodea[]){//进行状态为false的内存的回收删除内存状态为false的内存节点。

并将该节点与起始点结合

for(inti=a.length-1;i>0;i--){

if(a[i]!

=null){

if(a[i].state==false){

if(a[i-1].state==false){

a[i-1].size=a[i].size+a[i-1].size;

a[i]=null;

}

}

}

}

}

4程序截图

源代码:

packagemin;

 

classNode{//用Node来模拟内存的当前状态

intstart;

intsize;

booleanstate;

intjobNo;

publicNode(){}

publicNode(intstart,intsize,booleanstate,intjobNo){

this.start=start;

this.size=size;

this.state=state;

this.jobNo=jobNo;

}

publicvoidprint(){//打印Node类

if(this!

=null){

System.out.println("起始位置"+this.start+"大小"+this.size+"状态"+this.state+"工作号"+this.jobNo);

}

}

};

 

packagemin;

classLink{//用Link类来模拟连接各个内存,并添加作业

publicvoidaddJob(intsize,intjobNo,Nodea[]){

for(inti=0;i

if(a[i]!

=null){//当前内存有内容时

if(size

for(intj=1;j

if(a[j]==null){

a[j]=newNode(a[i].start,size,true,jobNo);

a[i].size=a[i].size-size;

a[i].start=a[i].start+size;

break;//当找到未被使用的内存及填入内容后跳出循环

}

}

break;

}

}

}

}

publicvoiddelete(Nodea[],intjobNo){//删除某一个进程,当该进程被删除后,进程所在内存的状态变为false

for(inti=0;i

if(a[i]!

=null){

if(a[i].jobNo==jobNo){

//a[i].size=0;

a[i].state=false;

a[i].jobNo=0;

}

/*

*if(a[i]!

=null){a[i].print();}

*/

}

}

}

publicvoidback(Nodea[]){//进行状态为false的内存的回收删除内存状态为false的内存节点。

并将该节点与起始点结合

for(inti=a.length-1;i>0;i--){

if(a[i]!

=null){

if(a[i].state==false){

if(a[i-1].state==false){

a[i-1].size=a[i].size+a[i-1].size;

a[i]=null;

//a[i-1].start=a[i-2].start;

}

}

}

}

/*

*for(intj=0;j

=null){a[j].print();}}

*/

}

publicvoidzprint(Nodea[]){

System.out

.println("...................已用的内存..................................");

for(inti=0;i

if(a[i]!

=null){

if(a[i].state==true){

a[i].print();

}

}

}

System.out

.println(".............................................................");

}

publicvoidkprint(Nodea[]){

System.out

.println("...................未用的内存..................................");

for(inti=0;i

if(a[i]!

=null){

if(a[i].state==false){

a[i].print();

}

}

}

System.out

.println(".............................................................");

}

}

packagemin;

 

publicclassOSJob{

publicstaticvoidmain(Stringargs[]){

NodejobArray[]=newNode[70];

jobArray[0]=newNode(0,25,false,0);

Linkl=newLink();

System.out.println("...................起始的内存..................................");

jobArray[0].print();

System.out.println(".....................增加第一个作业后的内存情况.....................");

l.addJob(4,1,jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println(".....................增加第二个作业后的内存情况.....................");

l.addJob(6,2,jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println(".....................增加第三个作业后的内存情况.....................");

l.addJob(7,3,jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println(".....................增加第四个作业后的内存情况.....................");

l.addJob(5,4,jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println("...............删除作业二后的内存情况....................");

l.delete(jobArray,2);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println("...............删除作业三后的内存情况....................");

l.delete(jobArray,3);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println("...............此后再添加作业五后的内存情况....................");

l.addJob(8,5,jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println("...............进行空闲内存的回收....................");

l.back(jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println("...............此后再添加作业五后的内存情况....................");

l.addJob(8,5,jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

System.out.println("...............此后再添加作业六后的内存情况....................");

l.addJob(4,6,jobArray);

l.zprint(jobArray);

l.kprint(jobArray);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1