什么是分段和分页?

内存管理的必要性

  • 很早之前计算机只能运行单个进程,就算运行批处理程序,也是棑好对,一个一个的进行处理,不存在多个进程并发运行,这时候内核对于内存管理相对比较简单,直接把物理内存地址拿过来是使用即可。

  • 随着计算机演进,支持多进程的OS,多个进程都都使用同一个物理地址空间,很容易多个进程之间相互干扰而引起进程的不可预期的行为。为了解决这个问题,CPU中的MMU(内存管理单元)引入了虚拟地址空间。以32位操作系统经为例,每个进程都可以拥有4G的寻址空间,当进程需要内存时候,通过转换技术和虚拟地址进行关联。MMU通过分页的机制,提供进程的虚拟地址到物理地址的映射方法。段页机制是MMU机制提供,Linux内核是使用者。

MMU的内存管理机制 

  • 在x86体系结构下CPU对内存寻址都是通过分段和分页方式进行,在保护模式下,一个段的可以理解为基地址+段的界线+类型。进程的虚拟地址就是在段中的偏移量;线性地址就是在某个段中基地址+偏移地址得出的地址;在x86中MMU提供了分页机制,如果未开启,那么线性地址就是物理地址;反之需要经过分页机制换算后,线性地址才能转为物理地址。MMU对于内存的管理主要是分段和分页,CPU把生成的逻辑地址交给MMU内的分段单元,分段单元为每个逻辑地址生成一个线性地址,然后再将线性地址交给MMU的分页单元,最终生成物理内存的地址。

分页(Paging) 

分页是一种无需连续分配物理内存的内存管理方案。进程的地址空间被划分为固定大小的块,称为页,而物理内存被划分为固定大小的块,称为帧。

关键概念

  • 页:进程地址空间的固定大小块。

  • 帧:物理内存的固定大小块。

  • 页表:用于将虚拟地址映射到物理地址的数据结构。页表中的每个条目对应一个页面,并包含该页面所在帧的编号。

地址转换过程分为 3 个步骤

  1. 逻辑地址空间:逻辑地址(由 CPU 生成)分为页码和页偏移量。

  2. 页表查找:页码作为页表的索引,用于查找相应的帧号。

  3. 物理地址形成:帧号与页偏移量相结合,形成内存中的物理地址。

优点

  • 消除外部碎片。

  • 简化内存分配。

  • 支持高效的交换和虚拟内存。

缺点

  • 可能导致内部碎片。

  • 页表需要额外内存。

  • 由于多次访问内存,地址转换速度较慢。

分段(Segmentation)

分段是一种内存管理技术,根据程序的逻辑划分(如函数、对象或数据数组),将内存划分为大小可变的段。

关键概念
  • 段:程序的逻辑划分,每个段的大小可变。

  • 段表:将段号映射到段的基地址和长度的数据结构。

地址转换过程分为 3 个步骤
  1. 逻辑地址空间:逻辑地址包括段号和段内偏移量。

  2. 段表查找:段号用作段表的索引,用于查找段的基地址。

  3. 物理地址形成:将基址与偏移量相加,形成内存中的物理地址。

优点
  • 为程序的不同部分提供逻辑分隔。

  • 便于保护和共享程序段。

  • 简化对不断增长的数据结构的管理。

缺点
  • 可能导致外部碎片。

  • 内存管理更复杂。

  • 由于多次访问内存,地址转换速度较慢。

分段和分页的比较

  • 内存分配:分页将内存划分为固定大小的单元,而分段将内存划分为可变大小的单元。

  • 碎片:分页消除了外部碎片,但可能导致内部碎片。分段可导致外部碎片,但可避免内部碎片。

  • 地址转换:分页涉及页表,而分段使用段表。

  • 逻辑视图:分页更直接,但不太符合程序的逻辑视图。分段与程序内的逻辑划分更为一致。

总之,分页和分段都有自己独特的内存管理方法,各有利弊。在某些系统中,它们还可以结合使用,以发挥两种技术的优势。

混合分页和分段

有些系统结合使用这两种技术,以发挥各自的优势。例如,可以将一个分段划分为多个页面,以便从分段的逻辑组织和分页的简便性中获益。这种混合方法有助于减轻单独使用其中一种技术的缺点。

优点
  • 结合了分页和分段的优点。

  • 减少外部碎片(来自分段)和内部碎片(来自分页)。

缺点
  • 增加了内存管理的复杂性。

  • 由于需要同时管理段表和页表,因此开销较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值