1 / 12
文档名称:

可变分区首次适应算法.docx

格式:docx   大小:59KB   页数:12页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

可变分区首次适应算法.docx

上传人:weizifan339913 2018/1/14 文件大小:59 KB

下载得到文件列表

可变分区首次适应算法.docx

文档介绍

文档介绍:可变分区首次适应算法
--操作系统实验报告
题目:可变分区首次适应算法
指导老师:
班级:
姓名:
学号:
时间:
实验三可变分区首次适应算法
一、实验目的
模拟内存分配, 了解并掌握动态分区分配中所用的数据结构、分区分配算法。回顾链表的创建,插入,删除等基本操作; 深刻理解首次适应内存分配算法。
二、实验内容
编程实现首次适应内存分配算法,并上机验证。
实验环境:Microsoft Visual Studio 2010
三、算法描述
该程序用一个链表来模拟内存的空间分布。从键盘输入链表长度和第一个结点的首地址、以及其他各个结点所占空间大小。然后进行申请空间,并判断所申请的大小是否符合要求,能不能进行分配。本程序主要包括两大模块,一是建立链表模块,二是申请并分配空间模块。
开始
程序流程图如下:
初始化
输出内存分配情况
输入申请内存空间大小
是否可以进行分配


是否继续
内存分配并输出分配结果


结束
四、程序清单及简单注释
// 内存分配算法:
#include<iostream>
#include<>
#include <>
using namespace std;
int size=0,count=0,part[1000],address[1000],flag[1000];//设定全局变量
//*******************输出可视结果*****************//
void Output()
{
int j;
cout<<" 输出内存分配情况: "<<endl;
cout<<endl;
cout<<" | 分区号| 分区大小| 起始地址| 状态|"<<endl;
for(j=1;j<=count;j++)
{
cout<<" | "<<j<<" ";
cout<<" | "<<part[j]<<" ";
cout<<" | "<<address[j]<<" ";
if(flag[j]==1)
cout<<" | "<<"已分配";
if(flag[j]==0)
cout<<" | "<<"未分配";
cout<<" |";
cout<<endl;
}
}
//******************创建原始环境******************//
void Create()//指明内存空间并初步地为作业分配内存
{
int i=1,m=0,s=0,start=0;
char contin='Y';
cout<<"请输入待分配的内存大小:";
cin>>size;
cout<<endl;
cout<<"开始为作业分配内存空间"<<endl;
cout<<endl;
cout<<"请输入第一次分区的首地址:";
cin>>start;
cout<<endl;
cout<<"输入每个分区的大小,以‘Y’继续操作,以‘N’结束分区操作:"<<endl;
cout<<endl;
while(contin!='N')
{
count=i;
cout<<"请输入第"<<i<<"个作业的大小:";
cin>>part[i];
address[i]=start;
start=start+part[i];
s=m;//m用来标记已分配内存的总的大小,s用来标记m之前的值
m=m+part[i];
flag[i]=1;//标识内存已分配

if(m==size)
{
cout<<endl;
cout<<"已分配完所有内存空间,请结束操作!"<<endl;
cout<<endl;
contin='N';
}
if(m<size)
{
cout<<endl;
cout<<"是否继续? Y/N:";
cin>>contin;
cout<<endl;
while(contin!='Y'&&contin!='N')
{
cout<<endl;
cout<<"输入‘N’或‘Y’继续操作:";
cin>>contin;
cout<<endl;
}
if(contin=='Y')
i++;
if(contin=='N')//如果不继续分配内存,将剩余的空间定义为一个分区,但标记为未分配
{
part[++i]=size-m;
count=i;//分区总数
address[i]=start;//起始地址
}
}//if(m<size)