1 / 5
文档名称:

操作系统实验--内存分配.doc

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

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

分享

预览

操作系统实验--内存分配.doc

上传人:mh900965 2018/3/31 文件大小:44 KB

下载得到文件列表

操作系统实验--内存分配.doc

文档介绍

文档介绍:一、实验目的和内容
1、实验目的
用高级语言编写和调试多道环境下连续可变式内存分配的模拟程序,以加深对连续可变式内存分配算法的理解。
2、实验内容
编写并调试一个连续可变式内存分配模拟程序。
采用链表来管理连续的内存分区,在进程随意创建和撤销的情况下,对空闲分区进程进行分配和合并。
系统中的进程信息可以采用连续表或PCB链的方式来模拟。
二、实验方案
1、设计思路
题目要求可以随时创建和撤销一块内存的分区,采用链式表满足这项要求。在分配算法方面,选择首次适应算法,其原理是:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。
2、源代码
#include<iostream>
#define memsize 1024 //定义内存大小为1024
using namespace std;
typedef struct space{
int startad;
int endad;
int ID;
space *next;
}space;
void job(); //函数定义
void showjob();
void showmem();
void recyclejob();
space *freehead,*freetag,*usinghead,*usingtag,*newjob;

void job() //创建进程
{
int size,ID;
a:cout<<"\t输入装载进程的大小和ID(内存大小不能超过1024)"<<endl;
cin>>size>>ID;
space *searchfree=freehead;
while((searchfree->endad)-(searchfree->startad)<size)
{ if(searchfree->next!=NULL) searchfree=searchfree->next;
else {cout<<"\t内存分配出错请回收进程以释放内存"<<endl;goto a;}
};
newjob=new space;
newjob->ID=ID;
newjob->startad=searchfree->startad;
newjob->endad=(newjob->startad)+size;
newjob->next=NULL;
searchfree->startad=(searchfree->startad)+size;
if(usinghead==NULL&&usingtag==NULL) usinghead=usingtag=newjob;
else {usingtag->next=newjob;usingtag=newjob;};
cout<<"\t进程已成功装入内存!!"<<endl<<endl;
};
void recyclejob(){ //回收进程
int ID;
int i=0;
space *searchfree=freehead;
space *searchusing=usinghead;
space *forward=new space