前言
上一篇讲了连续型分配,这篇开始介绍非连续型分配,也是现代操作系统所使用的内存分配方式。首先从内存分段开始。
分段管理
在内存分段管理中,程序是由若干个逻辑分段组成的,如可由代码分段、数据分段、栈段、堆段组成。不同的段是有不同的属性的,所以就用分段(Segmentation)的形式把这些段分离出来。
分段机制下的虚拟地址由两部分组成,段选择符和段内偏移量。
- 段选择符就保存在段寄存器里面。段表里面保存的是段描述符,包括这个段基地址、段界限和特权等级等。
- 虚拟地址中的段内偏移量应该位于 0 和段界限之间,如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。
段选择符
段选择符包括 3 个字段的内容:
- 请求特权级 RPL([0:1]):任务中的每一个段都有一个特定的级别。当一个程序试图