操作系统常见的内存管理方式

内存管理方式可以简单分为下面两种:

  • 连续内存管理:为一个用户程序分配一个连续的内存空间,内存利用率一般不高。
  • 非连续内存管理:允许一个程序使用的内存分布在离散或者说不相邻的内存中,相对更加灵活一些。

连续内存管理

        块式管理 是早期计算机操作系统的一种连续内存管理方式,存在严重的内存碎片问题。块式管理会将内存分为几个固定大小的块,每个块中只包含一个进程。如果程序运行需要内存的话,操作系统就分配给它一块,如果程序运行只需要很小的空间的话,分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间,我们称之为内部内存碎片。除了内部内存碎片之外,由于两个内存块之间可能还会有外部内存碎片,这些不连续的外部内存碎片由于太小了无法再进行分配。

存在的问题:

  • 外部碎片:块式管理虽然减少了内部碎片,但可能会导致外部碎片问题。即使有足够的内存可用,这些内存可能无法满足一个大块内存的需求,因为这些内存分散在不同的区域。

  • 内部碎片:固定大小的块可能会导致内部碎片,即一个块中未使用的部分。这是因为分配的块可能大于所需的实际内存。

  • 管理开销:块式管理需要维护一个数据结构来跟踪哪些块是空闲的,哪些块是已分配的。这增加了内存管理的复杂性和开销。

  • 不灵活性:固定大小的块在应对不同大小的内存需求时可能不够灵活。对于一些应用程序,可能需要不同大小的内存块,而固定大小的块无法满足这些需求。

非连续内存管理

  • 段式管理:以段(—段连续的物理内存)的形式管理/分配物理内存。应用程序的虚拟地址空间被分为大小不等的段,段是有实际意义的,每个段定义了一组逻辑信息,例如有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等。
  • 页式管理:把物理内存分为连续等长的物理页,应用程序的虚拟地址空间也被划分为连续等长的虚拟页,是现代操作系统广泛使用的一种内存管理方式。
  • 段页式管理机制:结合了段式管理和页式管理的一种内存管理机制,把物理内存先分成若干段,每个段又继续分成若干大小相等的页。

存在的问题:

        段式管理:

                外部碎片:由于段的大小可以不同,随着时间的推移,内存中会出现许多小的空闲区,导致外部碎片。这会使得尽管有足够的总内存,但无法找到一个足够大的连续内存块来满足分配请求。

                内存分配和回收的复杂性:动态分配和回收不同大小的段需要复杂的管理策略,增加了内存管理的复杂性。这包括如何高效地找到适合的空闲段和如何合并回收的内存。

                地址转换开销:段式管理需要在程序执行过程中频繁地进行段基址(base address)和段限长(limit)检查,这增加了地址转换的开销。

                段表的管理:每个进程都有一个段表,用于存储段的基址和限长。这些段表需要存储在内存中,并且需要在内存访问时进行查找,增加了内存管理的复杂性和开销。

        页式管理

                内部碎片:每个页的大小是固定的,但进程的内存需求可能不是固定大小的,这会导致页内未使用的部分成为内部碎片。例如,如果页大小为4KB,而一个进程只需要3KB,那么剩余的1KB就会浪费掉。

                地址转换开销:在页式管理中,每次内存访问都需要通过页表进行地址转换,从逻辑地址转换为物理地址。这增加了地址转换的开销,特别是在页表较大时。

                页表的存储开销:每个进程都有一个页表,记录着逻辑页和物理页框的对应关系。对于大的地址空间,页表可能非常大,需要大量的内存来存储页表。

                页表查找的性能影响:页表查找可能会影响内存访问的性能。尽管现代处理器使用了高速缓存(如转换后备缓冲区,TLB)来加速页表查找,但在TLB未命中时仍需要访问内存,这会影响性能。

现在相对较好的方式段页式管理机制。

段页式管理机制结合了段式管理和页式管理的优点,提供了更灵活和高效的内存管理。以下是段页式管理机制的主要优点:

  1. 减少外部碎片:段页式管理通过将段进一步划分为页,可以有效地减少外部碎片问题。段的大小可以根据程序的逻辑结构灵活定义,而每个段内的页具有固定大小,有助于简化内存分配和管理。

  2. 灵活的内存分配:这种机制允许段的大小可以动态调整,适应程序不同的数据结构和代码模块,同时页的固定大小简化了内存管理中的很多操作。

  3. 逻辑和物理地址分离:段页式管理通过将逻辑地址转换为段号和页号,使得程序可以更容易地管理和保护自己的内存空间,增强了内存访问的安全性。

  4. 高效的内存保护:每个段都有独立的段表和页表,可以为每个段和每个页设置不同的访问权限。这种机制提供了更细粒度的内存保护,防止非法访问和内存泄漏。

  5. 支持共享内存:通过段页式管理,不同进程可以共享同一个段中的页。这对于实现进程间的通信和资源共享非常有用,特别是在需要共享大量数据的应用场景中。

  6. 易于管理大内存空间:段页式管理机制适用于现代大内存系统,因为它可以通过多级页表和段表来管理更大的内存空间,减少单级表的存储和查找开销。

  7. 减少内存浪费:分段允许程序按照逻辑需要分配内存,分页则确保每个段内的内存分配是连续的固定大小块。这种组合减少了内存浪费,提高了内存利用率。

  8. 增强的内存访问速度:段页式管理可以结合使用TLB(转换后备缓冲区)来加速页表查找,从而提高内存访问速度。

  9. 简化的内存回收:页的固定大小使得内存回收变得更加简单和高效。操作系统可以更容易地回收和重用空闲页,而不需要考虑不同大小段的内存碎片问题。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值