内存的连续分配方式

连续分配方式:是指为一个用户程序分配一个连续的内存空间。

连续分配方式可以进一步分为单一连续分配、固定分区分配、动态分区分配和动态重定位分区分配。

单一连续分配

使用这种内存分配方式,内存空间会被分成 系统区 和 用户区 两部分,系统区仅提供给OS使用,系统区外的用户区提供给用户使用。
这种存储管理方式只能用于单用户、单任务的操作系统中。

固定分区分配

固定分区分配是将内存用户空间划分为若干个大小固定的区域,在每个分区只装入一个作业,这是最简单的一种可以运行在多道程序的存储管理方式。

动态分区分配

1.分区分配中的数据结构
(1) 空闲分区表。 (2) 空闲分区链。

2.分区分配算法
1) 首次适应算法(first fit)
以空闲分区链为例,每次从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区为止,,然后按照作业的大小,从该分区划分出一块大小合适的内存空间给请求者,剩下的内存空间仍在空闲链中。
其缺点是低址部分不断被划分,会留下许多难以利用的、很小的空闲分区。

2) 循环首次适应算法(next fit)
该算法是由首次适应算法演变而成的。不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区。该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区时的开销,但这样会缺乏大的空闲分区。

3) 最佳适应算法(best fit)
所谓“最佳”是指每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区。为了加快查找速度,该算法要求将所有的空闲分区按其容量从小到大形成一个空闲分区链。
因为每次分配后所切割下来的剩余部分总是最小的,这样,在存储器中会留下许多难以利用的小空闲区。

4) 最坏适应算法(worst fit)
该算法与best fit 相反,它每次将最大的一个空闲分区分割给请求着,其优点是可使剩下的空闲区不至于太小,产生碎片的几率最小,对中、小作业有利,同时最坏适应分配算法查找效率很高。最坏适应算法与前面所述的首次适应算法、循环首次适应算法、最佳适应算法一起,也称为顺序搜索法。

5) 快速适应算法(quick fit)
该算法又称为分类搜索法,是将空闲分区根据其容量大小进行分类,空闲分区的分类是根据进程常用的空间大小进行划分,如 2 KB、4 KB、8 KB 等,对于其它大小的分区。该算法的优点是查找效率高。另外该算法在进行空闲分区分配时,不会对任何分区产生分割,所以能保留大的分区,满足对大空间的需求,也不会产生内存碎片。该算法的缺点是在分区归还主存时算法复杂,系统开销较大。

动态重定位分区分配

1.动态重定位的引入
在前面动态分区分配中我们可以看到很多情况下一个空闲分区都会被分割,剩下一个较小的分区,有时候甚至遍历完空闲分区之后还找不到一个合适的空闲分区满足请求者。

假设现在有这样一个情况,用户内存空间中有几个较小的空闲分区,但是现在有一个作业请求连续的内存空间,这几个较小的空闲分区任何一个都不能单独满足请求空间的大小。 现在一种可行的办法就是:将内存中的所有作业进行移动,使他们全都相邻接,这样可以把原来分散的较小空闲分区连接成一个较大的空闲分区,这样就达到了作业请求的连续内存空间要求。
这种通过移动内存中的作业位置,将原来分散的小分区拼接成一个大分区的思想就是 “紧凑”。 说的直白一点,动态重定位分区分配就是动态分区分配+紧凑

2.动态重定位的实现
在动态运行时装入方式中,作业装入内存后的所有地址都是相对地址,在程序将要执行的时候,才会将相对地址转换为物理地址。为了不影响指令执行的速度,系统中增设了一个重定位寄存器,用它来存放程序(数据)在内存中的起始地址。
程序真正执行时访问的地址是 重定位寄存器中的地址+相对地址

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值