- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8动态存储管理
第八章 动态存储管理(数据结构) 第八章 动态存储管理 8.1 概述 8.2 可利用空间表及分配方法 8.3 边界标识法 8.3.1 可利用空间表的结构 8.3.2 分配算法 8.3.3 回收算法 8.4 伙伴系统 8.4.1 可利用空间表的结构 8.4.2 分配算法 8.4.3 回收算法 8.1 概述 对每一种数据结构虽然都介绍了它们在内存储器中的映像,但只是借助高级语言中的变量说明加以描述,并没有涉及具体的存储分配。 对操作系统和编译程序来说,存储管理是一个复杂的问题。这里仅就动态存储管理中涉及的一些基本技术进行讨论。 统称已经分配给用户使用的地址连续的内存区为“占用块”,称没有分配的地址连续的内存区为“可利用空间块”或“空闲块”。 在刚开始工作时,整个内存区是一个“空闲块”,在编译程序中称为“堆”。 在系统运行初期,整个内存区基本分为2大部分:低地址区包含若干占用块;高地址区是空闲块。经过一段时间后,有的用户运行结束,所占用内存变成空闲块,使整个内存呈现交错状态。 如果有新的用户进入系统请求分配内存,系统通常有两种做法。 一种策略是系统继续从高地址的空闲块中进行分配,而不理会已经分配给用户的内存区是否已经空闲,直到分配无法进行时,系统才去收回所有用户不再使用的空闲块,并且重新组织内存,将所有空闲区连接成为大的空闲区。 一种是用户一旦运行结束,便将它所占内存释放成为空闲块;同时,当新用户请求分配时,系统需要巡视整个内存的空闲块,并找到合适的空闲块分配。那么,系统需要建立一张记录所有空闲块的“可利用空间表”。 8.2 可利用空间表及分配方法 可利用空间表进行动态存储分配,目录表的情况比较简单,我们主要针对链表的情况进行讨论。 可利用空间表也称为“存储池”。表中包含所有可分配的空闲块,每块是链表中的一个结点。当用户请求分配时,系统从可利用空间表中删除一个结点分配;当用户释放所占内存时,系统回收并将其插入到可利用空间表中。 可利用空间表有3种不同的结构形式。 第一种情况是系统运行期间所有用户请求分配的存储量大小相同。这种情况下的可利用空间表实质上是一个链栈。 第二种情况,系统运行期间用户请求分配的存储量有若干种大小的规格。对于这种系统,一般建立若干个可利用空间表,同一链表中的结点大小相同。特殊问题:当结点与请求相符的链表和结点更大的链表均为空时,分配不能进行,而实际上内存空间并不一定不存在所需大小的连续空间,此时若要系统继续运行,必须重新组织内存,执行“存储紧缩”的操作。 第三种情况,系统在运行期间分配给用户的内存块的大小不固定,可以随请求而变。因此,可利用空间表中的结点即空闲块的大小也是随意的。通常的操作系统中的可利用空间表属于这种类型。由于链表中结点大小不同,则结点的结构与前两种也不同。由于可利用空间表中的结点大小不同,则在分配时也存在一个如何分配的问题。通常可以有3种不同的分配策略。 第一种:首次拟合法。从表头指针开始查找可利用空间表,将找到的第一个大小不小于用户需要的空闲块的一部分分配给用户。可利用空间表本身既不按结点的初始地址有序,也不按接点的大小有序。在回收时,只要将释放的空闲块插入在链表的表头就可以了。 第二种,最佳拟合法。将可利用空间表中一个不小于n而且最接近n的空闲块的一部分分配给用户。系统在分配前首先要对可利用空间表从头到尾查询,然后从中找到最佳块进行分配。为了避免每次分配都要查询整个链表,一般预先设定可利用空间表的结构按空间快的大小自小到大有序;但是在回收时,必须将释放的空闲块插入到合适的位置上。 第三种方法:最差拟合法。将可利用空间表中不小于n而且是链表中最大的空闲块的一部分分配给用户。为了节省时间,此时的可利用空间表的结构应该按照空闲块的大小自大到小有序。每次分配时不需要查找,只需要从链表中删除第一个结点,并将其一部分分配给用户即可;剩余部分要作为一个新的结点插入到可利用空间表的适当位置。同样,在回收的时候也需要将释放的结点插入到适当的位置。 最佳拟合法适用于请求分配的内存大小范围较广的系统。而且使整个链表趋向于结点大小差别很远的状态。 最差拟合每次都选取最大的结点,从而使链表中的结点大小趋于均匀。适合于请求分配的内存大小范围较窄的系统。 首次拟合法介于两者之间。 另外,为了有效利用内存,必须考虑回收时将地址相邻的空闲块合并。 8.3 边界标识法 边界标识法是操作系统中用以进行动态分区分配的一种存储管理方法。它属于第三种方法,系统在运行期间分配给用户的内存块的大小不固定,可以随请求而变。 系统将所有的空闲块链接在一个双重循环链表结构的可利用空间表中。 特点在于,在每个内存区的头部和底部两个边界上分别设有标识,以标识该区域为占用块或空闲块。 8.3.1 边界标识法可利用空间表的结构 head 8.3.
文档评论(0)