可变分区存储管理方案中的内存分配

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可变分区存储管理方案中的内存分配

用户提出内存空间的申请;系统根据申请者的要求,

按照一定的分配策略分析内存空间的使用情况,找出能满足请求的空闲区,分给申请者;当程序执行完毕或主动归还内存资源时,

系统要收回它所占用的内存空间或它归还的部分内存空间。

1.程序运行时首先接收输入:空闲区数据文件,包括若干行,

每行有两个数据项:起始地址、长度(均为整数),各数据项以逗号隔开。

2.建立空闲区表并在屏幕上显示输出空闲区表内容,

空闲区表中记录了内存中可供分配的空闲区的始址和长度,

用标志位指出该分区是否是未分配的空闲区。

3.从用户界面根据用户提示接收一个内存申请,格式为:作业名、申请空间的大小。

4.按照最差(最坏)适配算法选择一个空闲区,分割并分配,

修改相应的数据结构(空闲区表),填写内存已分配区表(起始地址、长度、标志位),其中标志位的一个作用是指出该区域分配给哪个作业。

5.重复3、4,直到输入为特殊字符(0)。

6.在屏幕上显示输出新的空闲区表和已分配区表的内容

#include

#include

#include

#define MAX 10

struct data1 /*空闲区表*/

{

int address;

int length;

int flag;

};

struct data2 /*已分配区表*/

{

int address;

int length;

char name[20];

};

struct data1 empty[MAX];

struct data2 busy[MAX];

void initialize( );

int read_data( ); /*从文件中读如数据*/

void display_empty_table(int); /*显示空闲区表*/

void display_busy_table(int); /*显示已分配区表*/

void badest_fit( int *,int *,char *name,int s );/*最坏适应算法*/

void first_fit( int *,int *,char *name,int s ); /*最先适应算法*/

void best_fit( int *,int *,char *name,int s ); /*最佳适应算法*/

void main( )

{

int num1,num2,size; /*num1用于统计空闲表的,num2用于统计分配区表*/ char name[20];

num2=0;

initialize( ); /*初始花空闲区表和分配区表*/

num1=read_data( );

if( num1==0 ) /*表示文件中没有数据*/

printf("there has no data in empty table\n");

printf("the initialial empty table is:\n");

display_empty_table( num1 ); /*显示空闲区表*/

while(1)

{

printf("please input job's name and job's size\n");

puts("input exit to exit");

scanf("%s",name);

if( strcmp(name,"exit")==0 )

{

getch( );

break;

}

scanf("%d",&size);

badest_fit( &num1,&num2,name,size );/*这里可以改为最佳适应和最先适应*/ }

puts("the empty table after assigning");

display_empty_table( num1 );

puts("the busy table:");

display_busy_table( num2 );

}

void initialize( )

{

int i;

for( i=0;i

{

empty[i].address=0;

empty[i].length=0;

empty[i].flag=0;

busy[i].address=0;

busy[i].length=0;

strcpy(busy[i].name,"");

}

}

int read_data( )

{

FILE *fp;

int n=0;

fp=fopen("A.txt","rb");

if( fp==NULL )

{

puts("can't open A.txt");

getch( );

exit(1);

}

while( !feof(fp) )

{

fscanf(fp,"%d,%d",&empty[n].address,&empty[n].length);

if( feof(fp) )

break;

n++;

}

fclose(fp);

return n;

}

void display_empty_table( int num )

{

int i;

printf("address\tlength\tflag\n");

for( i=0;i

printf("%d\t%d\t%d\n",empty[i].address,empty[i].length,empty[i].flag); printf("\n");

}

void display_busy_table( int num )

{

int i;

printf("address\tlength\tname\n");

for( i=0;i

printf("%d\t%d\t%s\n",busy[i].address,busy[i].length,busy[i].name); printf("\n");

}

void badest_fit( int *n1,int *n2,char *name,int s )

{

相关文档
最新文档