九、内存管理(二)
6.3页式存储管理:分页
- 将主存划分为许多等长的小块,称为页框
- 将进程划分为若干页,一个页的大小与一个页框的大小相等
- 进程加载时,所有页被载入可用页框(不要求连续),同时建立页表————简单分页的主要数据结构
- 简单分页的进程加载示例
![image]()
6.3.1页表
- 操作系统通过页表的建立和维护进行内存管理:
- 操作系统为每个进程建立并维护一个页表
- 页表的每个表项包含该页在内存中对应的页框号(还包括保护、共享等信息)
- 页表以页号为索引
- 操作系统另外维护一个空闲页框的页表
![image]()
6.3.2简单分页中的重定位
- 程序中的逻辑地址由两部分组成
- 页号
- 页内偏移
- CPU的一对寄存器记录当前运行进程的页表起始物理地址、页表长度
- (页号,偏移)->(页框号,偏移)
- 页(页框)的大小必须为2的整数m次幂
- 当页(页框)的大小为2的m次幂时,逻辑地址与相对地址一致
- 页面大小为2的m次幂时,页面(逻辑地址)对程序员、编译器/汇编器、链接程序都是透明的
- 例:16位编址,若页面大小为1K(1024),则需(低)10位表示页内偏移,剩下高6位表示页号,则:
- 相对地址为1502的逻辑地址 = 1024 + 478 = (1,478)
- 逻辑地址为(1,478)的相对地址 = 1*1024 + 478 = 1502
分区、分页、分段的逻辑地址

简单分页地址重定位

- 例子
![image]()
6.3.3简单分页的特点
- 类似固定分区,不同在于
- 分页中的“分区”(页框)非常小(从而内碎片也小)
- 分页中的一个进程可以占用多个“分区”(页框),从而不需要覆盖
- 分页中不要求一个进程占用的多个“分区”(页框)连续,充分利用空闲“分区”
- 存在问题
- 不易实现共享和保护(不反应程序的逻辑组织)
- 不便于动态链接(线性地址空间)
- 不易处理数据结构的动态增长(线性地址空间)
6.4分段存储管理
- 基本原理
- 将程序及数据划分成若干段(不要求等长,但不能超过最大长度)
- 进程加载时,所有段被载入内存可用区域(不要求连续),同时建立段表
![image]()
6.4.1段表
- 操作系统通过段表管理内存
- 操作系统为每个进程建立并维护一个段表
- 段表的每个表项包括该段在内存中的起始物理地址、断长等
- 段表以段号为索引
- 操作系统另外还维护一个内存空闲块的表
6.4.2简单分段中的重定位
- 程序中的逻辑地址由两部分组成
- 段号
- 段内偏移
- 进程进入运行态时,其段表地址被载入CPU专用寄存器
- 逻辑地址(n,m)-> 物理地址转换过程:
- 根据n位计算段号
- 以段号为索引到段表查找得到段起始物理地址
- 比较偏移(m位)与段长(据段表),若前者大,则为非法地址
- 物理地址=段起始地址+偏移
![image]()
- 简单分段重定位的例子:
![image]()
6.4.3页式管理和段式管理的比较
- 分页是处于系统管理的需要,分段是出于用户的应用的需要
- 一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处
- 页大小是系统固定的,而段大小通常不固定
- 逻辑地址表示
- 分页是一维的,各个模块在链接时必须组织成同一个地址空间
- 分段是二维的,各个模块在链接时可以每个段组织成一个地址空间
- 通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度
- 分段对程序员可见,从而可用来对程序或数据进行模块化组织
- 分段方便实现模块化共享和保护,如程序可执行、数据可读写(段表表项要有保护位)
6.4.4动态分区管理和段式管理的比较
- 都存在外部碎片,但分段中可通过减少断长来减轻外部碎片浪费的程度
- 分段中一个进程可占用多个“分区”
- 分段中不要求一个进程占用的多个“分区”连续(但一般要求一个段所占用的多个“分区”连续)
- 分段克服了分页存在的问题(数据结构的动态增长、动态链接、保护和共享)
- 分段存在外部碎片,分页只有小的内碎片,分页内存利用率比分段高
![image]()








浙公网安备 33010602011771号