计算机 *** 作系统——连续存储分配管理

计算机 *** 作系统——连续存储分配管理,第1张

计算机 *** 作系统——连续存储分配管理 一、 实验目的

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5704582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存