天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx

上传人:b****0 文档编号:13240410 上传时间:2022-10-08 格式:DOCX 页数:25 大小:62.15KB
下载 相关 举报
天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx_第1页
第1页 / 共25页
天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx_第2页
第2页 / 共25页
天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx_第3页
第3页 / 共25页
天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx_第4页
第4页 / 共25页
天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx

《天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx(25页珍藏版)》请在冰豆网上搜索。

天津理工大学操作系统存储器的分配与回收算法实现实验报告Word格式.docx

课程代码

0668036

实验时间

8节第7、122012年月13日节172012年12月日第3、47、8节2012年12月20日第

实验地点

软件实验室7-215

批改意见

成绩

教师签字:

实验内容:

1.模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。

2.采用最先适应法、最佳适应法、最坏适应法分配主存空间。

3.当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。

若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。

4.当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。

5.运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。

实验要求:

1.详细描述实验设计思想、程序结构及各模块设计思路;

2.详细描述程序所用数据结构及算法;

3.明确给出测试用例和实验结果;

4.为增加程序可读性,在程序中进行适当注释说明;

5.认真进行实验总结,包括:

设计中遇到的问题、解决方法与收获等;

6.实验报告撰写要求结构清晰、描述准确逻辑性强;

实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。

.7.

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】

源程序:

MemoryBlock.java:

//内存块类,包含各种操作

publicclassMemoryBlock{

staticfinalintBLOCK_SIZE=4096;

privateintbaseBlock;

//内存块基地址

privateintblockNum;

//大小

privatebooleaninUse;

//是否已分配

privateMemoryBlockprev,next;

publicMemoryBlock(intblockNum){

this.baseBlock=0;

this.blockNum=blockNum;

inUse=false;

prev=null;

next=null;

}

publicMemoryBlock(intbase,intblockNum){

this.baseBlock=base;

publicintgetBlockNum(){

returnblockNum;

publicvoidsetBlockNum(intblockNum){

publicMemoryBlockgetPrev(){

returnprev;

publicvoidsetPrev(MemoryBlockprev){

this.prev=prev;

}

publicMemoryBlockgetNext(){

;

nextreturn}

setNext(MemoryBlocknext){publicvoid

=next;

next.this

inUse(){publicboolean

;

inUsereturn

setUse(){voidpublic

true=inUse

free(){voidpublic

false=inUse}

getBaseBlock(){publicint;

baseBlockreturn}

baseBlock){intpublicvoidsetBaseBlock(=baseBlock;

baseBlock.this}

分配内存块,如果可分配,则返回剩余内存块//blockNum){publicMemoryBlockallocate(int-blockNum>

0){blockNum(this.if

+blockNum;

newBase=baseBlockint-blockNum;

.thisintnewBlock=blockNum=blockNum;

blockNum.this

setUse();

MemoryBlock(newBase,newBlock);

newreturn}

-blockNum==0){elsethis(ifblockNum.=0;

blockNum.this}

nullreturn}

//判断内存块是否能合并

publicbooleanmerge(MemoryBlockmemBlock){

if(baseBlock+blockNum==memBlock.getBaseBlock()){

setBlockNum(blockNum+memBlock.blockNum);

memBlock.setBaseBlock(0);

memBlock.setBlockNum(0);

returntrue;

else;

falsereturn

@Override

StringtoString(){public;

StringinUse=null;

已分配(inUse())inUse=if;

未分配elseinUse=+

blockNum++基地址return内存块[尽+baseBlock,大小尽;

+inUse+?

尠嵜}

MemoryTable.java:

,提供内存链表的各种基本方法MemTable//虚类publicabstractclassMemoryTable{

//MemoryBlock链表表头

protectedMemoryBlockmemList;

blockNum){MemoryTable(intpublicMemoryBlock(0,blockNum);

memList=new}

//把newBlock前面插入到memBlock

insertBefore(MemoryBlockmemBlock,MemoryBlockpublicvoid

newBlock){

)(memBlock.getPrev()!

=ifnullmemBlock.getPrev().setNext(newBlock);

==memBlock)

if(memList=newBlock;

memList

newBlock.setPrev(memBlock.getPrev());

newBlock.setNext(memBlock);

memBlock.setPrev(newBlock);

//在memBlock后插入newBlock

publicvoidinsert(MemoryBlockmemBlock,MemoryBlocknewBlock){

if(memBlock.getNext()!

=null)

memBlock.getNext().setPrev(newBlock);

newBlock.setNext(memBlock.getNext());

memBlock.setNext(newBlock);

newBlock.setPrev(memBlock);

删除块的连接关系,但不释放块//

remove(MemoryBlockmemBlock){voidpublic

)(memBlock==memListif

=memBlock.getNext();

memList

)if(memBlock.getNext()!

=nullmemBlock.getNext().setPrev(memBlock.getPrev());

)if(memBlock.getPrev()!

=nullmemBlock.getPrev().setNext(memBlock.getNext());

print(){publicvoid

memListMemoryBlockmemBlock=

i=0;

int){(memBlock!

=nullwhile);

.print(i+out?

System..println(memBlock);

outSystem.i++;

memBlock=memBlock.getNext();

合并邻接的空闲内存//merge(MemoryBlocknewBlock){voidpublic

MemoryBlockmemBlock=memList){(memBlock!

=whilenull(!

memBlock.inUse()){if

(memBlock.merge(newBlock)){

if

memBlock.setBlockNum(memBlock.getBlockNum()+

newBlock.getBlockNum());

remove(newBlock);

break;

if(newBlock.merge(memBlock)){

newBlock.setBlockNum(newBlock.getBlockNum()+

memBlock.getBlockNum());

remove(memBlock);

break;

//分配内存(抽象函数)

publicabstractbooleanallocate(intblockNum);

//释放内存(抽象函数)

publicabstractbooleanfree(intbaseBlock);

FirstFit.java:

publicclassFirstFitextendsMemoryTable{

publicFirstFit(i

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

当前位置:首页 > 初中教育

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

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