内存分区实验报告.docx

上传人:b****6 文档编号:4413142 上传时间:2022-12-01 格式:DOCX 页数:7 大小:15.84KB
下载 相关 举报
内存分区实验报告.docx_第1页
第1页 / 共7页
内存分区实验报告.docx_第2页
第2页 / 共7页
内存分区实验报告.docx_第3页
第3页 / 共7页
内存分区实验报告.docx_第4页
第4页 / 共7页
内存分区实验报告.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

内存分区实验报告.docx

《内存分区实验报告.docx》由会员分享,可在线阅读,更多相关《内存分区实验报告.docx(7页珍藏版)》请在冰豆网上搜索。

内存分区实验报告.docx

内存分区实验报告

操作系统与Linux

实验报告

实验名称动态分区算法实验报告

姓  名       

学  号   

班  级              

教  师                

日  期    

一、实验目的

1.加深对可变分区的存储管理的理解;      

2.掌握用指针实现链表和在链表上的基本操作。

二、实验内容

用循环首次适应和最佳适应算法法模拟UNIX可变分区内存管理,实现对该内存区的分配和释放管理的功能。

三、实验原理

(1)循环首次适应算法  

模拟UNIX的进程管理程序采用的是循环首次适应算法,具体算法如下:

   

系统每次为进程分配资源时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。

(2)循环最佳适应算法

模拟UNIX的进程管理程序采用的是最佳适应算法,具体算法如下:

   

系统每次为进程分配资源时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求且最小的的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。

2.物理设计

(1)structWORK

{

stringNAME;    //作业名称

intAfter_SPACE;  //该作业跟上一个作业之间的空闲内存空间

intSPACE;      //需要的内存空间

intStartPoint;    //作业在内存里开始的位置

intEndPoint;    //作业在内存里结束的位置

WORK*next;

};

WORK*FWork;//从内存开始0位置向下数第一个作业

#defineFULL_MEM640  //定义内存空间大小为640KB

四、开发环境

Vs2010

五、程序流程图,具体步骤截图与代码注释

1.程序流程图

2.代码段:

#include

#include

#include

#include

usingnamespacestd;

/*****************/

/* 定义作业类 */

/*****************/

structWORK

{

stringNAME;    //作业名称

intAfter_SPACE;  //该作业跟上一个作业之间的空闲内存空间

intSPACE;      //需要的内存空间

intStartPoint;    //作业在内存里开始的位置

intEndPoint;    //作业在内存里结束的位置

WORK*next;

};

/*****************/

/* 定义基础信息*/

/*****************/

#defineFULL_MEM640 //总内存为640K

intstate=1;    //提示作业申请状态(1--->申请成果;0---->申请失败)

intFirst_FreeSpace=640;  //内存0到第一个作业间的空闲内存(初始化状态下,为640K即为整个内存)

WORK*FWork=NULL;    //第一个作业

voidFCFS(stringFile);

voidBest_Adaptation(stringFile);

/*****************/

/* 界面设计  */

/*****************/

voiddisplay_main()

{

cout<<"请输入写有你内存申请的文件:

";

stringFile;

getline(cin,File);

system("cls");

cout<<"请输入你选择的算法:

"<

cout<<"1.首次适应算法"<

cout<<"2.最佳适应算法"<

cout<<"3.退出"<

intn;

cin>>n;

system("cls");

switch(n)

{

case1:

cout<<"首次适应服务"<

case2:

cout<<"最佳适应算法"<

case3:

exit(0);break;

 

}

 

}

voiddisplay()  //输出每次作业活动的结果

{

WORK*temp=FWork;

cout<<"作业 起始位置 终止位置占用内存大小"<

cout<

while(temp!

=NULL)

{

if(temp->StartPoint==0)

{

cout<NAME<<"  00"<StartPoint<<"   "<EndPoint<<"    "<SPACE<

}

else

{

cout<NAME<<"  "<StartPoint<<"   "<EndPoint<<"    "<SPACE<

}

temp=temp->next;

}

cout<

Sleep(1000);

}

/*****************/

/* 首次适应算法*/

/*****************/

voidFCFS(stringFile)

{

ifstreamifile(File,ios:

:

in);  //打开txt文件

WORK*fWork=newWORK();

WORK*CurrentWork=newWORK();  

stringAction;    //作业行为(释放OR申请)

stringName;

 

for(;iFile>>CurrentWork->NAME;)

{

 

ifile>>Action;

 

if(Action=="申请")

{

ifile>>CurrentWork->SPACE;

cout<NAME<SPACE<<"kb"<

if(FWork!

=NULL)

{

if(First_FreeSpace>CurrentWork->SPACE)    //查看内存O到第一作业间是否有足够空间存放申请的作业

{

fWork->NAME=CurrentWork->NAME;

fWork->SPACE=CurrentWork->SPACE;

fWork->StartPoint=0;

First_FreeSpace=0;

fWork->EndPoint=fWork->StartPoint+fWork->SPACE;

fWork->After_SPACE=FWork->StartPoint-fWork->EndPoint;  //计算作业之间的空闲内存空间

fWork->next=FWork;

FWork=fWork;

}

else

{

for(fWork=FWork;fWork!

=NULL;fWork=fWork->next)

{

if(fWork->After_SPACE>CurrentWork->SPACE)

{

CurrentWork->After_SPACE=fWork->After_SPACE-CurrentWork->SPACE;

CurrentWork->StartPoint=fWork->EndPoint;

CurrentWork->EndPoint=CurrentWork->StartPoint+CurrentWork->SPACE;

fWork->After_SPACE=0;    //新作业进入,fWork与新作业之间的空闲内存空间变为0

CurrentWork->next=fWork->next;

fWork->next=CurrentWork;

CurrentWork=newWORK();

break;

}

}

}

}

else    //第一次有作业申请或内存完全空闲时有作业申请

{

 

fWork->NAME= CurrentWork->NAME;

fWork->SPACE=CurrentWork->SPACE;

fWork->After_SPACE=First_FreeSpace-fWork->SPACE;

fWork->StartPoint=0;

fWork->EndPoint=fWork->StartPoint+CurrentWork->SPACE;

fWork->next=NULL;

FWork=fWork;

First_FreeSpace=0;

}

}

else

{

iFile>>CurrentWork->SPACE;

cout<NAME<SPACE<<"kb"<

if(FWork->NAME==CurrentWork->NAME)  

{

if(FWork->SPACE==CurrentWork->SPACE)

{

First_FreeSpace=CurrentWork->SPACE+First_FreeSpace+FWork->After_SPACE;

FWork=FWork->next;

}

else

{

FWork->SPACE=FWork->SPACE-CurrentWork->SPACE;

FWork->After_SPACE=FWork->After_SPACE+CurrentWork->SPACE;

 

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

当前位置:首页 > 考试认证 > 其它考试

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

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