主存空间的分配与回收Word文件下载.docx

上传人:b****5 文档编号:21495160 上传时间:2023-01-30 格式:DOCX 页数:12 大小:206.75KB
下载 相关 举报
主存空间的分配与回收Word文件下载.docx_第1页
第1页 / 共12页
主存空间的分配与回收Word文件下载.docx_第2页
第2页 / 共12页
主存空间的分配与回收Word文件下载.docx_第3页
第3页 / 共12页
主存空间的分配与回收Word文件下载.docx_第4页
第4页 / 共12页
主存空间的分配与回收Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

主存空间的分配与回收Word文件下载.docx

《主存空间的分配与回收Word文件下载.docx》由会员分享,可在线阅读,更多相关《主存空间的分配与回收Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

主存空间的分配与回收Word文件下载.docx

}NODE;

NODEOS[COUNT];

//数组

intcount;

//被分成的块数统计

intapplyfree;

floatnumb;

charc;

//先对数组进行初始化,使没有分配的名称为P

voidinit()

count=1;

OS[0].name='

P'

;

OS[0].start=0;

OS[0].end=COUNT;

OS[0].flag=1;

}//对数组的插入操作

voidinsert(intm,floatst,floaten)

inti;

count++;

for(i=count;

i>

m+1;

i--)

{

OS[i]=OS[i-1];

}

OS[m].start=st;

OS[m].end=en;

}//移动操作,即对数组的删除操作

voidmove(intm)

for(i=m;

i<

count-1;

i++)

OS[i]=OS[i+1];

count--;

}//如果相邻块都没有分配,则要合并到一起

voidrremove(intm,floatst,floaten)

if(!

OS[m-1].flag&

&

!

OS[m+1].flag)

OS[m].name='

OS[m].flag=1;

if(OS[m-1].flag)

OS[m-1].end=OS[m-1].end+en;

move(m);

if(OS[m+1].flag)

OS[m].end=OS[m].end+OS[m+1].end;

move(m+1);

}//打印输出

voidshow()

printf("

名称标识起址长度状态\n"

);

for(i=0;

count;

if(OS[i].flag)

printf("

P"

else

%c"

OS[i].name);

printf("

%d%1.0f%1.0f"

i,OS[i].start,OS[i].end);

未分配\n"

已分配\n"

}//从键盘输入数据

voidputin()

请输入申请或者释放的进程名称及资源数量:

\n"

rewind(stdin);

scanf("

%c"

&

c);

%d"

applyfree);

%f"

numb);

}

intapply()

inti=0;

intapplyflag=0;

intfreeflag=0;

if(applyfree)//提出申请资源

while(!

applyflag&

count)

{

if(OS[i].end>

=numb&

OS[i].flag)

{

if(OS[i].end==numb)

{

OS[i].name=c;

OS[i].flag=0;

}

else

{insert(i+1,OS[i].start+numb,OS[i].end-numb);

OS[i+1].flag=1;

OS[i+1].name='

OS[i].start=OS[i].start;

OS[i].end=numb;

applyflag=1;

}

i++;

}

if(applyflag)

{printf("

申请成功!

return1;

申请失败!

没有足够大的空闲空间。

return0;

else//提出释放资源

freeflag&

if(OS[i].name==c)

rremove(i,OS[i].start,OS[i].end);

if(OS[i].end>

numb)

{insert(i+1,OS[i].start+numb,OS[i].end-numb);

OS[i+1].name='

OS[i+1].flag=0;

OS[i].end=numb;

OS[i].flag=1;

if(OS[i-1].flag)

{rremove(i,OS[i].start,OS[i].end);

}

}

else

{printf("

释放失败,因为正使用的数量小于要求释放的数量。

return0;

freeflag=1;

if(freeflag)

释放成功!

释放失败!

未找到匹配的进程名称。

voidmain()

init();

show();

while

(1)

putin();

apply();

show();

测试结果如下图所示:

测试运行如图所示:

1、开始有512K的空间,未分配。

用名称P来表示。

进程A申请200K的空间,(申请用1表示,释放用0表示),其结果显示如下。

2、进程B申请150K的空间,

3.进程A释放200K的空间,

4、进程C申请100K的空间,进程D申请50K的空间

5、进程E申请30K的空间,进程F申请70K的空间

五、实验总结

本次实验即主存空间分配与回收,通过实验得出:

一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。

当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。

当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。

主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验我们理解了在可变分区管理方式下应怎样实现主存空间的分配和回收。

在清楚主存储器分配和回收的情况下,做些实验还是比较简单的。

关键是注意当找到一个大的块时,如何将这个大块分成两小块,一块用于分配,另一块依旧是未分配。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1