操作系统连续内存分配和非连续内存分配

目录

一、连续内存分配

1、内存碎片问题

2、分区的动态分配

3、连续内存分配策略

二、非连续内存分配

1、优缺点

2、分段

3、分页


一、连续内存分配

1、内存碎片问题

内存碎片指的是空闲内存不能被利用。内存碎片又分外部碎片和内部碎片,外部碎片是指在分配单元之间的未使用内存,而内部碎片是指在分配单元中的未使用内存。

2、分区的动态分配

分区的动态分配就是简单的内存管理方法,当一个程序准许运行在内存中时,就会给这个程序分配一个连续的区间,当一个程序需要更多的空间时,也会分配一个连续的内存区间给运行的程序以访问数据。

3、连续内存分配策略

一、首次适配

首次适配就是当一个程序需要分配n字节大小的空间时,使用第一个比n大的可用空闲块

优点:简单,易于产生更大的空闲块

缺点:容易产生外碎片

二、最优适配

最优适配就是当一个程序需要分配n字节大小的空间时,使用比n大的最小的可用空闲块

优点:当大部分分配是小尺寸时,非常有效,避免分割大空闲块,比较简单

缺点:容易产生外碎片和很多没用的微小碎片

三、最差适配

最差适配就是当一个程序需要分配n字节大小的空间时,使用比n大的最大的可用空闲块

优点:如果分配是中等尺寸效果最好

缺点:重分配慢,易产生外碎片,容易破坏大的空闲块以致大分区无法被分配

四、压缩式碎片整理

如下图,目前有四个程序占据着内存空间,当现在有一个需要5个块空间大小的程序也要运行,而如果采用上述三种连续分配策略,显然是无法做到的,因为内存中已经不具有连续的5个块大小的空间,但是我们发现,内存中有着5个不连续的块空间,如果对P1,P2,P3,P4四个程序进行压缩,那么我们将得到一个连续的5个大小的块空间,而这正好能够满足了另一个程序的需求,这就是压缩式碎片整理的思路。

压缩式碎片整理要注意几点,要求所有程序是动态可重置的,当程序在运行的时候,肯定是不能重置的。如果不停的对程序进行压缩,重置,会导致开销很大。

五、交换式碎片整理

程序P1、P2、P3、P4都处于内存中,P1、P2、P4处于等待状态,P3处于运行状态,当P3运行到某时刻还需要3个内存块的空间大小,而这时内存空间已经满了,不能够给P3分配更多的空间了,就可以采用交换式碎片整理的方法,可以把P4这个程序放到磁盘上去,也就是虚拟内存上,这样主存就可以提供3个内存块的空间供P3使用,虽然P4放到了磁盘中,但是它的数据并没有丢失,也是保存在磁盘中。

二、非连续内存分配

1、优缺点

优点:一个程序的物理地址空间是非连续的,可以使用非连续内存分配;更好的内存利用和管理;

允许共享代码与数据;支持动态加载和动态链接

缺点:建立虚拟地址和物理地址之间的转换,开销很大,所以要和硬件结合一起来管理

2、分段

程序的分段地址空间,把程序的逻辑地址空间分散到多个物理地址空间。

 一、分段寻址方案

首先段访问机制有两种,一种是段寄存器+地址寄存器实现方案,另一种是单地址实现方案。

应用程序的逻辑地址空间是一个连续的地址空间,通过分段有效的隔离开来,程序可以把它的堆栈段分离开来,放到某一特定的地址,这样能更有效的进行管理和分配,同时也能够让这种有效的保护机制的实现。如下图,左边是一些连续的逻辑地址,右边是一些非连续的物理地址,逻辑地址有段号和段偏移,程序访问内存地址需要段号和段偏移,段表里的内容是段的起始地址和段的长度限制,而段的起始地址又包括逻辑地址段号和对应的物理地址段号,段的长度限制就是段偏移。每次寻址时,先在段表里查询逻辑地址段号对应的物理地址段号,然后再加上段的长度限制,就可以得到了物理地址。

 

3、分页

一个程序的逻辑地址空间被划分为大小相等的页,而物理内存被分割为大小相等的帧,页帧包括页帧号和帧内偏移。

一、页寻址机制

页寻址机制就是页映射到帧,页是连续的虚拟内存,帧是非连续的物理内存,不是所有的页都有对应的帧。页表保存了逻辑地址和物理地址之间的映射关系,页表的索引是页号,所对应的内容是帧号。操作系统建立了页表,页表里有个驻留位,0表示没有这个页帧映射,1表示会有这个页帧映射。

性能问题:页表可能非常大,因为一个程序就需要一个页表;访问一个内存单元需要两次访问内存,一次用于获取页表项,一次用于访问数据。

如何处理这些性能问题?

通过缓存,把页表放到离CPU比较近的地方,或者通过间接访问。具体点从速度上解决,就是把经常访问内存地址的页帧映射存放到CPU中的TLB表中。从空间上解决就是采用多级页表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值