存储管理方案分类主要包括段式管理、页式管理和段页式管理,它们各自有不同的特点和适用场景:
-
段式管理:
按照程序的逻辑结构(如主程序、子程序、数据段、堆栈段等)将程序划分为若干个“段”,每个段有独立的名字和地址空间,支持按段进行共享和保护。由于各段长度不同,导致内存分配时容易产生外部碎片,且内存利用率较低。地址由“段号 + 段内偏移”构成,通过段表实现地址映射。 -
页式管理:
将逻辑地址空间和物理内存都划分为固定大小的“页”(Page)和“页框”(Frame),通过页表将虚拟页号映射到物理页框号。优点是消除了外部碎片,内存利用率高;缺点是页没有逻辑意义,不利于程序的模块化保护与共享。地址由“页号 + 页内地址”组成。 -
段页式管理:
结合段式和页式的优点,先将程序按逻辑结构划分为多个段,再在每个段内部划分为固定大小的页。段表中每一项指向一个页表,页表完成页到物理帧的映射。这样既保持了程序的逻辑独立性,又提高了内存利用率,但地址变换过程更复杂,系统开销较大。
页式虚拟存储的地址变换流程如下:
-
虚拟地址被划分为两部分:
- 虚页号(Virtual Page Number)
- 页内地址(Offset)
-
利用虚页号查找页表中的对应项,获取对应的物理页框号(Frame Number)。
-
若该页不在内存中(装入位为0),则触发缺页中断(页面失效中断),操作系统从磁盘调入该页到内存,并更新页表。
-
若页在内存中,则将物理页框号与页内地址拼接,形成实际的物理地址。
页表项通常包含以下控制位:
- 装入位(Valid/Invalid bit):表示该页是否已在内存。
- 修改位(Dirty bit):表示该页是否被写过,决定换出时是否需要回写磁盘。
- 访问位(Referenced bit):用于页面置换算法(如LRU)。
- 保护位:控制读/写/执行权限。
加速地址变换的优化技术:
-
转换检测缓冲器(TLB, Translation Lookaside Buffer):
是一种位于CPU中的高速缓存,用于缓存最近使用的页表项。当进行地址变换时,首先查找TLB,命中则直接获得物理页框号,避免访问主存中的页表,显著提升速度。若未命中,则需查页表,并将新条目加入TLB(可能替换旧条目)。TLB采用全相联或组相联方式组织,容量小但速度快,是提高虚拟内存性能的关键机制。
段式管理和页式管理在地址映射上的主要区别体现在地址结构、映射机制、逻辑意义以及碎片问题等方面。具体对比如下:
| 对比维度 | 段式管理(Segmentation) | 页式管理(Paging) |
|---|---|---|
| 地址结构 | 二维地址:(段号,段内偏移) | 一维地址:(页号,页内偏移) |
| 划分方式 | 按程序的逻辑单位划分(如代码段、数据段、堆栈段等),段长可变 | 按固定大小划分(如4KB/页),页长固定 |
| 映射机制 | 通过段表进行映射: 段表项包含:段基址、段长度、访问权限等 | 通过页表进行映射: 页表项包含:物理页框号、装入位、修改位等 |
| 逻辑独立性 | 高。每一段具有明确的程序语义,便于共享与保护 | 低。页是物理划分单位,无逻辑意义 |
| 内存碎片 | 外部碎片严重(因段长度不一,回收后留下分散空洞) | 无外部碎片,仅有少量内部碎片(最后一页未用满) |
| 地址变换过程 | 根据段号查段表 → 得到段基址 → 基址 + 段内偏移 = 物理地址 | 根据页号查页表 → 得到物理页框号 → 拼接页内偏移 = 物理地址 |
| 支持虚拟存储 | 支持(段可调入调出) | 广泛用于虚拟存储系统(按页换入换出) |
示例说明:
-
段式地址映射示例:
虚拟地址(2, 50)表示第2段的第50个字节。
查段表第2项,得基址为1000,段长为200(合法)。
则物理地址为:1000 + 50 = 1050。 -
页式地址映射示例:
设页面大小为1KB,虚拟地址3072→ 页号 = 3,页内偏移 = 5(因为 3072 ÷ 1024 = 3 余 0)
查页表第3项,得物理页框号为7,则物理地址 =7 × 1024 + 0 = 7168。



被折叠的 条评论
为什么被折叠?



