4.6 分段存储管理方式

L27

学习目标

页表、地址变换;段表与段的逻辑意义。为第五章虚存打基础。

  • 页是物理管理单位,段是逻辑单位。
  • 无 MMU 的 MCU 用「编译期分区」近似。

原理 · 深入理解

分页:虚页号 → 页表 → 帧号 逻辑地址 页号 P + 页内偏移 页表 P0 → F3 P1 → F0 P2 → F5 物理地址 帧号 F + 偏移 页表项还可含存在位、修改位 · TLB 加速转换

4.6 分段存储管理方式

本节概览:先建立「分段存储管理方式」的框架,再依次展开下列小节。

  1. 分段存储管理方式的引入
  2. 分段系统的基本原理
  3. 信息共享
  4. 段页式存储管理方式

4.6.1 分段存储管理方式的引入

用户按逻辑关系将作业分成若干段,每段从0编址并有名字和长度。

程序员用段名(段号)和段内偏移访问逻辑地址,编程方便且程序直观可读。如 LOAD 1,[A]|〈D〉;STORE 1,[B]|〈C〉。

共享以信息逻辑单位为基础,如过程、函数或文件。

分页系统中页只是存放信息的物理单位,无完整逻辑意义;一个可共享过程可能占数十页面,共享困难。

分段存储管理中信息保护与动态增长的需求。

信息保护

以信息的逻辑单位为基础,常以过程、函数或文件为单位进行保护。

动态增长

数据段在数据量增加时需要动态增长存储空间,分段便于按段扩展。

动态链接:作业运行前不把所有目标程序段都链接,只装入主程序和立即需要的段启动运行。运行过程中需要调用某段时,才将该段调入内存并链接,提高内存利用率。

4.6.2 分段系统的基本原理

分段存储将作业地址空间划分为若干段,每段定义一组逻辑信息,如主程序段MAIN、子程序段X、数据段D、栈段S。

分段地址由段号和段内地址两部分组成。为每段分配一个连续分区,各段可离散装入内存不同分区。

系统设段表寄存器存放段表始址和段表长度TL。

地址变换时将逻辑地址中的段号与TL比较,若越界则出错;否则由段号索引段表得段始址和段长,与段内地址拼接成物理地址。

图4-19 利用段表实现地址映射 段号 段表 段内址 物理地址
图4-19 利用段表实现地址映射

地址变换机构:系统设置段表寄存器存放段表始址和段表长度 TL。地址变换时将逻辑地址中的段号与段表长度 TL 比较,若越界则越界中断;否则由段号查段表得到段始址和段长,再由段内地址查物理地址。

图4-20 分段系统的地址变换过程 逻辑地址 表项 物理块 / 段 内存 逻辑地址 → 查表 → 物理地址
图4-20 分段系统的地址变换过程

分页和分段的主要区别。

  1. 页是信息的物理单位,段是信息的逻辑单位
  2. 页的大小固定且由系统决定,段的大小不固定由用户决定
  3. 分页的用户程序地址空间是一维的,分段的地址空间是二维的

4.6.3 信息共享

分段存储管理按逻辑关系将作业划分成若干段,便于编程、共享、保护与动态链接。

  1. 分段存储管理方式的引入
  2. 分段系统的基本原理
  3. 段页式存储管理方式
图4-21 分页系统中共享editor的示意图 editor 页 进程 A 进程 B 各进程页表指向同一组物理块
图4-21 分页系统中共享editor的示意图

分段系统中程序和数据的共享

在分段系统中,由于是以段为基本单位的,不管该段有多大,我们都只需为该段设置一个段表项,因此使实现共享变得非常容易。我们仍以共享editor为例,此时只需在(每个)进程1和进程2的段表中,为文本编辑程序设置一个段表项,让段表项中的基址(80)指向editor程序在内存的起始地址。

图4-22 分段系统中共享editor的示意图 editor 段 进程 A 进程 B 段表项指向同一段
图4-22 分段系统中共享editor的示意图

4.6.4 段页式存储管理方式

段页式系统是分段与分页的结合:先将用户程序分成若干段,再把每段分成若干页,为每段赋予段名。

地址结构由段号、段内页号、页内地址三部分组成。页面大小如4KB。

图4-23 作业地址空间和地址结构 段号 页号 页内位移
图4-23 作业地址空间和地址结构

在段页式系统中,为了实现从逻辑地址到物理地址的变换,系统中需要同时配置段表和页表。段表的内容与分段系统略有不同,它不再是内存始址和段长,而是页表始址和页表长度。图4-24示出了利用段表和页表进行从用户地址空间到物理(内存)空间的映射。

图4-24 利用段表和页表实现地址映射 段号 段表 页号 页表 块号
图4-24

结合插图「图4-24 利用段表和页表实现地址映射」理解本节要点。

图4-24 利用段表和页表实现地址映射 段号 段表 页号 页表 块号
图4-24 利用段表和页表实现地址映射

地址变换过程

在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长TL。进行地址变换时,首先利用段号S,将它与段长TL进行比较。

若S < TL,表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。

图4-25 段页式系统中的地址变换机构 段表 页表 物理块
图4-25 段页式系统中的地址变换机构

做 · 交互动画

  • 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。

分段存储管理方式

用控件单步操作;日志区记下每一步发生了什么。

总结与提升

  • 能对比页式与段式的优缺点各一条。
  • 能用自己的话复述学习目标,并指出概念与板上实验的对应。

延伸思考

  • ESP32 的 MMU/Cache 与教材页表哪一层接近?
  • 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?

← 本阶段封面 · 课程列表