加载中...

| 中文名 | 段式内存管理 |
| 英文名 | Segmentation |
| 地址组成 | 段号 + 段内偏移 |
| 关键结构 | 段表 |
| 主要缺点 | 外部碎片 |
段式内存管理(Segmentation)是一种内存管理机制,将进程的逻辑地址空间划分为若干长度可变的段,每段对应代码、数据、堆栈等逻辑单元。程序访问内存时通过段号与段内偏移两部分组成的逻辑地址进行寻址。
与按固定大小切分的分页机制不同,段的划分依据程序的逻辑结构,长度可变。系统为每个进程维护一张段表,记录每个段的基地址与段长(界限)。CPU 将逻辑地址中的段号作为索引查段表,取出基址与偏移相加得到线性地址,同时用段长做越界检查。x86 架构历史上曾采用段页式结合的方式,现代 64 位模式下段机制已大幅弱化。
段式管理常与分页结合成段页式,兼顾逻辑清晰与消除外部碎片的优点,早期 x86 保护模式即采用此方案。段的权限隔离思想仍影响着现代操作系统对代码段、数据段的保护设计;一些嵌入式系统在无 MMU 环境下也用简化的分段来隔离任务。
问:段式和页式哪个更好?答:各有优劣。段式贴合逻辑结构、便于共享保护但产生外部碎片;页式消除外部碎片、管理简单但缺乏逻辑含义。现代系统多以分页为主,段页式取长补短。
问:为什么 64 位系统淡化了分段?答:x86-64 长模式下大多数段基址被固定为 0、段长检查被忽略,内存管理主要交给分页完成,分段仅保留少量特权级与特殊寄存器用途。

| 中文名 | 段式内存管理 |
| 英文名 | Segmentation |
| 地址组成 | 段号 + 段内偏移 |
| 关键结构 | 段表 |
| 主要缺点 | 外部碎片 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧