什么是分段、什么是分页
分段(Segmentation)
分段是根据进程的逻辑结构,将内存划分为多个大小不等的区域,称为段(Segment)。每个段都有自己的意义,如代码段、数据段、堆栈段等。
每个段可以有不同的大小,段的长度取决于程序的实际需求,段与段之间可能不连续
分段管理提供了一种更贴近程序结构的内存管理方式,有助于提高程序的可读性和可维护性
工作原理
地址转换:虚拟地址由段号和段内偏移量组成,通过段表(Segment Table),将段号映射到物理内存中的地址,从而计算出物理地址
内存管理:操作系统根据进程的需求,分配大小合适的内存段。段的大小可变,符合程序的逻辑结构
分页(Paging)
分页是将内存划分为固定大小的块,称为页帧(Page Frame),通常为 4KB 或 8KB。相应地,进程的虚拟地址空间也被划分为同样大小的页面(Page)。
逻辑地址空间被划分为若干个固定大小的页,物理内存则被划分为相同大小的页框,页通过页表映射到页框
工作原理
地址转换:进程访问内存时,使用虚拟地址。虚拟地址由页号和页内偏移量组成。通过页表(Page Table),将虚拟页号映射到物理页帧号,进而计算出物理地址。
内存管理:当进程需要更多内存时,操作系统为其分配新的页面。由于页面大小固定,内存分配和回收效率高。
两者区别
特点 | 分页 | 分段 |
---|---|---|
划分方式 | 固定大小的页面 | 大小可变的段 |
地址空间 | 一维地址(页号 + 页内偏移) | 二维地址(段号 + 段内偏移) |
内存碎片 | 可能有内部碎片,无外部碎片 | 可能有外部碎片,无内部碎片 |
共享与保护 | 页面级别,可实现简单的保护 | 段级别,更灵活的共享和保护 |
符合程序逻辑 | 与程序逻辑无关 | 反映程序的逻辑结构 |
实现复杂度 | 硬件支持,效率高 | 需要复杂的内存管理 |
分段与分页的结合
现代操作系统通常将分段和分页结合使用,以发挥二者的优点。
分段管理逻辑空间:程序员从逻辑上将程序划分为多个段。
分页管理物理内存:每个段再划分为固定大小的页面,映射到物理内存中的页帧。
优点:
提升内存利用率:通过分页减少碎片,提高内存分配效率。
灵活的共享和保护:分段提供了更灵活的内存共享和访问控制机制。