- 内存寻址:对存储在内存中的某个数据对象的地址进行定位
80X86CPU中,一条操作由操作码和操作数组成
段:一种内存寻址技术把内存分为一个或多个线性区域(段)
80X86有6个存放段选择符的段寄存器:CS、DS、ES、SS、FS、GS
CS:总是用于寻址代码段,由CS 寻址代码段称为当前代码段
SS:堆栈段使用SS寄存器,栈顶由ESP寄存器内容内容指定,堆栈顶的地址为SS:[ESP]
指令的偏移由三部分相加组成:基地址寄存器、变址寄存器和偏移常量
即:偏移地址 = 基地址 + (变址 * 比例因子) + 偏移量 - 地址变换:将程序的逻辑地址变换或映射到物理内存地址上
两种主要技术:分段机制、分页机制
过程:
(1)使用分段机制将逻辑地址转换为处理器能够寻址的内存空间(线性地址空间)
(2)使用分页机制将线性地址转换为物理地址(可选)
*如果没有启用分页机制,那么线性地址将会直接映射到处理器的物理地址空间上
- 分段机制:提供了隔绝各个代码、数据和堆栈区域的机制
(1)提供了一种机制将线性地址空间划分为一些称为段的受保护的区域
(2)段可以用来存储代码、数据、堆栈和系统数据结构(TSS、LDT)
(3)可以对段进行分类,对特定段的操作可以被限制
(4)逻辑地址 = 段选择符 + 偏移量
段选择符:是一个段的唯一标识,提供了段描述表中的一个数据结构的偏移量,并指明段的大小,访问权限和段的特权级、段类型和段的基地址
逻辑地址的偏移量加上段的基地址就可以定位段的某个字节的位置(即为处理器线性空间地址)
Linux内核学习第3天
保护模式内存管理