第2章 认识CPU-2.3 32位微处理器(2)

2.3.2 保护模式

80386提供了两种工作模式。其一为实模式,在此模式下,80386可以和8086、8088完全地兼容。其二为保护模式,它是80386提供的一种全新的强的工作模式。在保护模式下,不仅可寻址4GB的内存空间,扩充了内存的分段管理机制,并可对内存进行分页管理,而且还可实现虚拟内存,支持多任务。

保护模式最重要的是完善了多任务保护机制。其实在80286开始,就具备了保护工作方式,但当时还不是很完善,80386才得到真正的完善。有两种保护模式任务方式。

(1)不同任务之间的保护:通过把每个不同的任务放在不同的虚拟地址空间中,来实现不同任务间的隔离(即A程序不能访问和修改B程序的代码和数据),以达到程序间的隔离。

(2)同一任务的保护:在每一任务之内定义了4种保护级别。分别为0、1、2、3,按环的方式来表示。

其中,0级代表最高的权限级,3级代表最低的权限级。按环的方式来表示,数字小的在"内环",数字大的在外环。其中,环0、1、2为系统级,环3为用户级。原来的系统都是基于用户和系统来设计的,所以一般的系统只使用环0和环3这两个级。

2.3.3 80386的寻址方式

80386继续采用分段的方法管理主内存。内存的逻辑地址由段基地址(段的起始地址)和段内偏移两部分表示,存储单元的地址由段基地址加上段偏移得到。段寄存器指示段基地址,各种寻址方式决定段内偏移。

实模式下,段基地址仍然是16的倍数,段的最大长度仍然是64KB。段寄存器内所含的仍然是段基地址对应的段值,存储单元的物理地址仍然是段寄存器内的段值乘上16再加上偏移。所以,尽管386有32根地址线,可直接寻址物理地址空间达到4GB字节,但在实模式下,仍然与8086/8088相似。

在保护模式下,段基地址可长32位,并且无需是16的倍数,可以是内存内任意一个开始点,段的最大长度可达4GB。它的寻址就与8086/8088有很大的变化。

  1. 描述符

保护模式下的虚拟器由大小可变的存储块组成,这样的存储块还是称"段"。每个段由如下的三个参数进行定义:基地址、段界限、段属性。在保护下可以建立多个段。

这些描述符会放置在内存的某一块空间内。

  1. 选择子

在8086/8088和80386实模式下,段寄存器用来表示段值。而在80386的保护模式下,段寄存器就成为选择子。可以将选择子看做一个句柄。

选择子的作用就是指向对应的描述符。例如,代码选择子的值是02H(也就是CS=02H),那么它指向的就是02H个描述符。

  1. 简单的寻址过程

当在机器运行如下代码时:

MOV AX,DS:DX;

假设此时DS=04H,DX=2344H,那么CPU怎样才能在内存中找DS:[DS]的值呢?其步骤如下:

(1)从DS选择子中选取04H。

(2)从对应的描述符空间中查找到第04H个描述符。

(3)取出描述符中的三个参数,分别是段基地址、段界限和段属性。假设段的基地址等于00012345H,段界限等于5678H。

(4)这时,段基地址就是段的开始位置,通过EIP的32位偏移,

就可得到物理地址,由:

物理地址=段基地址+偏移

可得物理地址就是179BDH(00012345H+5678H)。

(5)此时就可以从179BDH中取出数据放入AX寄存器中。

相关推荐
晓蛋1 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿1 天前
重载、重写(覆盖)、重定义区别
c语言
phltxy1 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
phltxy2 天前
C 语言中的数据存储:从类型到二进制位
c语言
wuminyu2 天前
HotSpot的轻量锁与膨胀后的ObjectMonitor状态重建原理
java·linux·c语言·jvm·c++
码不停蹄Zzz2 天前
指针用法篇——malloc和free指针详解
c语言
彧azz2 天前
操作系统时间管理与系统核心板块学习总结
c语言·笔记·学习·系统架构
白色的北极熊2 天前
c语言 牛客网 BC15
c语言
老当益壮梁奶奶2 天前
ARM汇编学习笔记(六):【i.MX6ULL】时钟系统与定时器(EPIT & GPT)
c语言·arm开发·嵌入式硬件·学习·51单片机