1) 理解内存管理相关理论;
2) 掌握连续内存管理理论;
3) 掌握动态连续内存管理理论。
计算机1台、VC++ 6.0
三、实验原理或算法连续内存分配:为一个用户程序分配一个连续的内存空间,它分为单一连续分配,固定分区分配和动态分区分配,在本实验中,我们主要讨论动态分区分配。
动态连续分配:根据进程的实际需要,动态地为之分配内存空间。在实现可变分区分配时,将涉及到分区分配中的所用的数据结构、分区分配算法和分区的分配与回收 *** 作这几个问题。
- 分区分配中的数据结构
(1) 空闲分区表:一张数据表,用于记录每个空闲块的情况,如起始地址、大小,使用情况等。
(2) 空闲分区链:为了实现对空闲分区的分配,把所有的空闲内存块连成一个双向链,便于分配和回收。分区分配算法
(1) 首次适应算法:从链首出发,寻找满足申请要求的内存块。
(2) 循环首次适应算法:从上次查找的下一个空闲块开始查找,直到找到满足要求的内存块。
(3) 最佳适应算法:在每次查找时,总是要找到既能满足要求又最小的内存块给分配给用户进程。为了方便查找,所有的空闲内存块按从小到大的顺序存放在空闲链表中。内存分配 *** 作
利用分配算法查找到满足要求的内存块,设请求内存大小为 u.size,而分配的内存块大小为 m.size,如果 m.size-u.size≤size (size 为设定的不可再分割的内存大小),则不再切割;反之,按 u.size 分配给申请者,剩余的部分仍留在内存链中。回收内存
根据回收区地址,从空闲链表中找到相应的插入点。
(1) 回收区与插入点的前一个空闲分区相邻,此时将回收区与前一分区合并,不为回收区分配新表项。
(2) 回收区与插入点的后一个空闲分区相邻,将回收区与后一分区合并成一个新区,回收区的首址最为新分区的首址。
(3) 回收区与前(F1)后(F2)分区相邻,则把三个分区合并成一个大的分区,使 F1 的首址作为新分区的首址,修改 F1 大小,撤销 F2 表项。
(4) 回收区不与任何分区相邻,为回收区建立一个新表项。
初始空闲表,未进行作业分配:
- 使用first fit算法申请作业名为work1,长度为18的空间:
Work1长度为18,优先选择起始地址为50,长度为20的空闲空间,申请完成起始地址更新为50+18即68,长度更新为20-18即2
接着使用best fit算法申请作业名为work2,长度为10的空间:
Work2长度为10,best fit算法先将空闲分区表按空闲分区大小的升序组织,再从头查找符合要求的第一个分区。所以优先选择起始地址为80,长度为10的空闲空间,申请完成起始地址更新为80+10即90,长度更新为12-10即2
接着使用worst fit算法申请作业名为work3,长度为5的空间:
Work3长度为5,worst fit算法先将空闲分区表按空闲分区大小的降序组织,再从头选择最大的空闲分区。所以优先选择起始地址为120,长度为25的空闲空间,申请完成起始地址更新为120+5即125,长度更新为25-5即20
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)