实验五 存储管理(实验报告格式)

更新时间:2023-09-16 15:31:01 阅读量: 高中教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验五: 存储管理

一、实验目的

(1)熟悉内存空闲分区的分配方式; (2)理解动态分区存储管理方式;

(3)掌握动态分区的分配与回收的过程。 二、实验环境

微型计算机,Ubuntu Linux10.04 ,gedit,gcc 三、实验内容

根据流程图和参考程序,完成模拟内存分配和回收过程。内存空间大小为100,

进程数为5,每个进程所需空间为随机产生,大小为1~20,编制程序,首先对5个进程进行内存分配,然后回收指定的进程空间,并进行适当的空闲分区合并操作,要求每次操作结束后都能显示当前的内存分配情况。

四、实验结果

截图一

截图二

截图三

五、源代码

#include #include

typedef struct MEMORY_BLOCK{

int name; //进程名 int address;

//起始地址

int length; //长度 int flag;

//标志,表示该块是否被分配。

struct MEMORY_BLOCK *next; //指向下一个进程

}MEMORY_BLOCK; #define NUM 5

#define LEN sizeof(MEMORY_BLOCK)

void allocation(MEMORY_BLOCK *Header,int name,int length_p){

MEMORY_BLOCK *temp,*t,*tt; int minsize=2;

//不可切割的分区阈值

t=Header; while(t!=0){

if(t->length>length_p&&t->flag==0) break;

t=t->next;

//分割

}if(t->length-length_p>minsize){

temp=(MEMORY_BLOCK*)malloc(LEN); temp->name=-1; temp->flag=0;

temp->length=t->length-length_p; temp->address=t->address+length_p; t->name=name; t->flag=1;

t->length=length_p; temp->next=t->next; t->next=temp;

//直接分配

}else{

t->name=name; t->flag=1; } }

void reclaim(int processname, MEMORY_BLOCK *Header){

MEMORY_BLOCK *temp,*t,*tt;

t=Header; temp=t;

while(t->name!=processname){

temp=t; t=t->next;

//t非尾结点

//左右为空

}if(t->next!=NULL){

if(temp->flag==0&&t->next->flag==0){

temp->name=-1;

temp->length=temp->length+t->length+t->next->length; tt=t->next;

temp->next=tt->next;

//左为空

}else if(temp->flag==0){

temp->name=-1;

temp->length=temp->length+t->length; temp->next=t->next;

//右为空

}else if(t->next->flag==0){

t->name=-1;

t->length=t->length+t->next->length; t->flag=0; tt=t->next; t->next=tt->next;

//左右不为空

}else{

t->name=-1; t->flag=0;

//t是尾结点

//左为空

}else{

if(temp->flag==0){

temp->name=-1;

temp->length=temp->length+t->length; temp=t->next;

}else{ //左不为空

t->name=-1;

}

void main(){

//主函数

}

}

t->flag=0;

int length_p,i,processname; MEMORY_BLOCK *Header,*t;

Header=(MEMORY_BLOCK*)malloc(LEN); //初始化存储空间 Header->name=-1; Header->address=0; Header->length=100; Header->flag=0; Header->next=NULL;

srand((int)time(0)); for(i=1;i<=NUM+1;i++){

length_p=rand() +1;

//随机产生进程所需存储空间,至少为1

allocation(Header,i,length_p); }printf(\当前内存分配情况:\\n\t=Header; while(t!=0){

printf(\>address,t->length,t->flag);

t=t->next;

}printf(\请输入回收的进程号(输入0结束):\\n\

scanf(\while(processname!=0){

printf(\回收 process name %d\\n\reclaim(processname,Header); printf(\当前内存分配情况:\\n\t=Header; while(t!=0){

printf(\t->address, }

t=t->next;

t->length,t->flag);

本文来源:https://www.bwwdw.com/article/xmxh.html

微信扫码分享

《实验五 存储管理(实验报告格式).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top