可变分区首次适应算法

时间:2025-07-10

Java版的可变分区首次适应算法,有图形界面。

可变分区首次适应算法

题 目 指导老师 班 级 姓 名 学 号 时 间

--操作系统实验报告

:可变分区首次适应算法::: : :

Java版的可变分区首次适应算法,有图形界面。

实验三 可变分区首次适应算法

一、实验目的

模拟内存分配, 了解并掌握动态分区分配中所用的数据结构、分区分配算法。回顾链表的创建,插入,删除等基本操作; 深刻理解首次适应内存分配算法。 二、实验内容

编程实现首次适应内存分配算法,并上机验证。 实验环境:Microsoft Visual Studio 2010 三、算法描述

该程序用一个链表来模拟内存的空间分布。从键盘输入链表长度和第一个结点的首地址、以及其他各个结点所占空间大小。然后进行申请空间,并判断所申请的大小是否符合要求,能不能进行分配。本程序主要包括两大模块,一是建立链表模块,二是申请并分配空间模块。

Java版的可变分区首次适应算法,有图形界面。

四、程序清单及简单注释 // 内存分配算法: #include<iostream> #include<stdlib.h> #include <conio.h> using namespace std;

int size=0,count=0,part[1000],address[1000],flag[1000];//设定全局变量

//*******************输出可视结果*****************// void Output() { int j;

cout<<" 输出内存分配情况: "<<endl; cout<<endl;

cout<<" | 分区号 | 分区大小 | 起始地址 | 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; 状态 |"<<endl;

Java版的可变分区首次适应算法,有图形界面。

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) { } if(m<size) {

cout<<endl;

cout<<"是否继续? Y/N:"; cin>>contin; cout<<endl;

while(contin!='Y'&&contin!='N') {

cout<<endl; cout<<endl;

cout<<"已分配完所有内存空间,请结束操作!"<<endl; cout<<endl; contin='N';

Java版的可变分区首次适应算法,有图形界面。

}

cin>>contin; cout<<endl;

if(contin=='Y')

i++;

if(contin=='N')//如果不继续分配内存,将剩余的空间定义为一个分区,但标记

为未分配 }

//**************************分配内存********************// void Distribute()

{

part[++i]=size-m; count=i;//分区总数 address[i]=start;//起始地址

}

}//if(m<size) if(m>size) {

cout<<endl;

cout<<"申请空间超出未分配的空间大小,是否重新分配? Y/N:"; cin>>contin; cout<<endl; if(contin=='N') { flag[i]=0; } else {

start=start-part[i];//如果重新分配,恢复原来的起始地址 m=s; part[i]=size-s;

flag[i]=0; }

}//if(m>size)

}//while

Java版的可变分区首次适应算法,有图形界面。

int tag=0,space=0,i,j,situation=0;//situation用来表示分配是否成功 cout<<endl;

cout<<"输入作业所需的内存空间:"; cin>>space; cout<<endl; for(i=1;i<=count;i++) {

if(part[i]==space&&flag[i]==0) { }

if(part[i]>space&&flag[i]==0) {

flag[i]=1;

cout<<"分配成功!"<<endl; cout<<endl;

for(j=count+1;j>=i+2;j--) {

part[j]=part[j-1]; }

flag[i+1]=0;//多余的内存部分状态为未分配 part[i+1]=part[i]-space;

part[i]=space;//划出一部分内存空间分配给作业 flag[count+1]=0; ++count;

flag[j]=flag[j-1]; flag[i]=1; Output(); situation=1; break;

//重新定义分区的首地址

for(j=1;j<count;j++) { }

address[j+1]=address[j]+part[j];

Java版的可变分区首次适应算法,有图形界面。

}

}

}

situation=1; break;

if(situation==0) { }

cout<<"分配失败!"<<endl; cout<<endl;

for(j=1;j<=count;j++)//判断是什么原因造成分配失败 { } if(tag==1)

cout<<"所有的空间大小都不足以分配!"<<endl<<endl; if(flag[j]==0) { }

tag=1; break;

if(tag= …… 此处隐藏:2428字,全部文档内容请下载后查看。喜欢就下载吧 ……

可变分区首次适应算法.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219