操做系统——Linux内核彻底注释011c-3.0

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

4.21 内存寻址

物理内存

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

地址总线32位,共2^32个不一样的物理地址。即内存物理地址空间有4G,总共能够寻址4G字节的物理内存。数组

 

小端法

 

段寻址技术

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

段地址:16位,由端选择符指定操作系统

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

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

 

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

CS、DS、ES、SS、FS、GSblog

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

段间控制转移指令能够被用来为CS、EIP赋新值,将执行为之改到其余代码段,实现不一样段中程序的控制传递。get

SS:堆栈段,栈顶由ESP寄存器指定,所以堆栈顶地址SS:[ESP]。it

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

 

指令寻址方式

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

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

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

8086指令寻址方式的介绍:http://www.javashuo.com/article/p-wvaxbakd-gx.html

4.2.2 地址变换

保护

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

 

地址变换

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

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

 

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

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

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

映射过程:

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

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

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

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

 

 

 

相关文章
相关标签/搜索