1. 设计目的
了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。
2. 设计内容
1)用C语言实现采用首次适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。
2)假设初始状态如下,可用的内存空间为640KB,并有下列的请求序列;
作业1申请130KB
作业2申请60KB
作业3申请100KB
作业2释放60KB
作业4申请200 KB
作业3释放100 KB
作业1释放130 KB
作业5申请140 KB
作业6申请60 KB
作业7申请50KB
作业6释放60 KB
请采用数组四种算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。
3.code
#include
#include
#include
#include
#include
#include
#include
#include
#include.txt","w",stdout);
Init();//一定先进行初始化
Oper();
return 0;
}
#include
#include
#include
附录:
input.txt输入文件格式:
1 1 130
2 1 60
3 1 100
2 0 60
4 1 200
3 0 100
1 0 130
5 1 140
6 1 60
7 1 50
6 0 60
Brain Stroming
1.采用首次适应算法和最佳适应算法,对内存块进行分配和回収速度有什么不同的影响?
首次适应算法从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区,这为以后到达的大作业分配大的内存空间创造了条件。低址部分不断被划分,会留下许多难以利用的,很小的空闲分区,称为碎片。而每次查找又都是从低址部分开始的,这无疑又会增加查找可用空闲分区时的开销。而最佳适应算法是指从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区的一种计算方法,这种方法能使碎片尽量小。
2.如何解决因碎片而造成的内存分配速度降低的问题?
调整算法,尽量少的产生不能被利用的内存空间,例如可以采用快速适应算法,将空闲分区根据容量大小进行分类,对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区(链)表。系统中存在多个空闲分区(链)表,同时在内存中设立一张管理索引表,每个表项对应了一种空闲分区类型,并指向该类型的空闲分区表的表头。空闲分区的分类是根据进程常用的空间大小进行划分的。这种方法具有的优点如查找效率高,找到该类后,取下第一块分配即可;不会产生碎片;故可以从根源上减少碎片的产生,从而提高内存分配速度和利用率。
原文链接:http://blog.csdn.net/fool_ran/article/details/42610297