操作系统——Linux内核完全注释011c-3.0

4.2保护模式和内存管理(80X86)

4.21 内存寻址

物理内存

计算机的物理内存是字节的线型数组,每个字节具有一个唯一地物理地址。

地址总线32位,共2^32个不同的物理地址。即内存物理地址空间有4G,总共可以寻址4G字节的物理内存。

 

小端法

 

段寻址技术

为了进行内存寻址,80X86使用了段寻址技术。寻址通过段地址+段内偏移地址

段地址:16位,由端选择符指定

段内偏移地址:32位,故一个段最大长度可达4G。

程序中由16位的段和32位的段偏移构成48位地址,称为一个逻辑地址(虚拟地址)。它唯一确定了一个数据对象的段地址和段内偏移地址。

 

6个存放段选择符的段寄存器

CS、DS、ES、SS、FS、GS

CS:代码段,在任何指定时刻由CS寻址的段称为当前代码段。此时EIP寄存器中包含当前代码段内下一条要执行指令的段内偏移地址。因此要执行指令的地址可表示为CS:[EIP]。

段间控制转移指令可以被用来为CS、EIP赋新值,将执行为之改到其他代码段,实现不同段中程序的控制传递。

SS:堆栈段,栈顶由ESP寄存器指定,因此堆栈顶地址SS:[ESP]。

另外4个段寄存器是通用段寄存器,当指令中没有指定所操作数据的段时,DS作为默认的数据段寄存器。

 

指令寻址方式

通俗讲就是指令中寻找操作数地址的方式。

指令的偏移量由三部分相加组成:基地址寄存器、变址寄存器和一个偏移常量。即:

偏移地址 = 基地址 + (变址 * 比例因子)+偏移常量

8086指令寻址方式的介绍:https://www.cnblogs.com/lfri/p/10781186.html

4.2.2 地址变换

保护

防止一个任务访问另一个任务或操作系统的内存区域。地址变换可以让某些地址不被任何逻辑地址映射,所以地址变换过程也提供内存保护功能。

 

地址变换

程序中的地址是由两部分构成的逻辑地址,不能直接用于访问物理内存。

需要将逻辑地址转为物理地址。

 

将逻辑地址转为物理地址——分段和分页机制

分段机制和分页机制是两种广泛使用的地址变换技术。

都使用驻留在内存中的表来指定变换信息,这些表只能由操作系统访问,以防应用程序篡改。

映射过程:

第一阶段:分段机制。逻辑地址→处理器可寻址内存空间(称为线性地址空间)中的地址

第二阶段:分页机制。线性地址→物理地址

  • 注:第二阶段是选用的,如果无第二阶段,则第一阶段直接将逻辑地址映射为物理地址。

  • 物理地址空间:地址总线能产生的地址范围

 

 

 

原文地址:https://www.cnblogs.com/Ivan-Luo/p/11651483.html