分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元。
每个段由三个参数定义:段基地址、段限长和段属性。段的基地址、段限长以及段的保护属性存储在一个称为段描述符的结构项中。
段可以用来存放程序的代码、数据和堆栈,或者用来存放系统数据结构。
系统中所有使用的段都包含在处理器线性地址空间中。
逻辑地址包括一个段选择符或一个偏移量,段选择符是一个段的唯一标识,提供了段描述符表,段描述符表指明短的大小、访问权限和段的特权级、段类型以及段的第一个字节在线性地址空间中的位置(称为段的基地址)。逻辑地址的偏移量部分到段的基地址上就可以定位段中某个字节的位置。因此基地址加上偏移量就形成了处理器线性地址空间中的地址。
如果没有开启分页,那么处理器直接把线性地址映射到物理地址,即线性地址被送到处理器地址总线上;如果对线性地址空间进行了分页处理,那么就会使用二级地址转换把线性地址转换成物理地址。
分页机制在段机制之后进行的,它进一步将线性地址转换为物理地址。
分页机制支持虚拟存储技术,在使用虚拟存储的环境中,大容量的线性地址空间需要使用小块的物理内存(RAM 或 ROM)以及某些外部存储空间来模拟。当使用分页时,每个段被划分成页面(通常每页为 4K 大小),页面会被存储于物理内存中或硬盘中。
操作系统通过维护一个页目录和一些页表来留意这些页面。当程序(或任务)试图访问线性地址空间中的一个地址位置时,处理器就会使用页目录和页表把线性地址转换成一个物理地址,然后在该内存位置上执行所要求的操作。