《微机原理与接口技术(80386-Pentium)》-第3章80486系统原理.ppt_第1页
《微机原理与接口技术(80386-Pentium)》-第3章80486系统原理.ppt_第2页
《微机原理与接口技术(80386-Pentium)》-第3章80486系统原理.ppt_第3页
《微机原理与接口技术(80386-Pentium)》-第3章80486系统原理.ppt_第4页
《微机原理与接口技术(80386-Pentium)》-第3章80486系统原理.ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第3章80486系统原理 2 3 180486的体系结构80486微处理机是由提高了效率的80386微处理机 增强了性能的80387数值协同处理器 一个完整的片内Cache及其控制器组合而成 所以 80486芯片内的部件 都是经过优化处理的 集成度更高的部件 像与80386完全兼容的整数部件 IntegerUnit 与80387 完全兼容的浮点部件PFU 一整套虚拟存储管理与保护系统 一个标准统一的规模大小为8K字节的程序和数据共用的统一的高速缓冲存储器Cache 总线监视以及一些多重处理支持设施等 为提高某些性能指标和增强功能 又新增了一些局部部件和6条80386没有的指令 3 3 1 1寄存器组Intel为了在代码级向上兼容 80486微处理机在硬件设计上 在许多地方与80386微处理机都保持兼容 80486微处理机所具有的寄存器种类和数量都非常多 它的寄存器既有80386微处理机中使用的全部寄存器 又有80387数值协同处理器中使用的各种寄存器 80486 微处理机的寄存器种类可分为以下几种 4 1 基本体系结构寄存器 其中包括以下4种 通用寄存器 指令指针寄存器 标志寄存器 段寄存器 2 系统级寄存器 其中包括以下2种 控制寄存器 系统地址寄存器 3 浮点寄存器 其中包括以下5种 数据寄存器 标记字寄存器 状态字寄存器 指令和数据指针寄存器 控制字寄存器 4 调试和测试寄存器 5 1 通用寄存器80486共配置了8个32位的通用寄存器 如图3 1所示 这8个通用寄存器与80386的完全一样 它们的名字和用途分别为 EAX用来作累加寄存器 Accumulator EBX用来作基址寄存器 Base ECX用来作计数寄存器 Count EDX用来作存放数据寄存器 Data ESP用来作堆栈指针 Stackpointer EBP用来作基址指针 Basepointer EDI用来作目标变址寄存器 Destinationindex ESI用来作源变址寄存器 Sourceindex 6 80486的通用寄存器 7 2 指令指针寄存器EIP指令时针寄存器是一个32位寄存器 在指令指针寄存器内存放的是下一条要执行指令的偏移量 这个偏移量是相对于目前正在运行的代码段寄存器CS而言 偏移量加上当前段的地址 形成了下一条指令的地址 当80486在32位操作方式下进行时 就采用32位的指令指针寄存器 若80486工作在实模式 虚拟8086模式 或保护模式286兼容方式下时 就用16位指令指针寄存器 用于16位寻址操作 8 3 标志寄存器EFLAGS80486的标志寄存器是一个32位寄存器 如图3 3所示 它的作用是用来存放有关80486微处理机的状态标志信息 控制标志信息以及系统标志信息 80486的状态标志信息报告的是算术运算类指令在执行完之后的机器状态 控制标志仅有一个即DF标志 用来控制串操作过程中执行方向问题 即是给目标变址寄存器EDI 源变址寄存器EDI 源变址寄存器ESI增值还是增负值 减值 问题 系统标志信息用来控制输入 输出 屏幕中断 调试 任务转换和控制保护模式与虚拟8086模式间的转换等操作 对绝大多数系统来说 若通过应用程序改变系统标志寄存器中的标志状态 都将引起一个异常事故出现 拿80486的标志寄存器与80386的标志寄器进行比较后会发现 二者几乎完全一样 9 80486的标志寄存器 10 惟一差别是80486又新定义了一个AC标志位 即标志寄存器的位18 也就是对准校验标志 AlignmentCheckoutFlag 若AC位为1时 80486就允许对没有对准的数据进行对准检查 既可以是对字对准进行检查 也可以对双字甚至四字的对准进行检查 若80486发现在进行存储器操作时出现没有按边界对准情况 就发生数据访问异常事故 并把这种异常事故编号为异常事故17 若AC位为0则不检查 如果对存储器进行读写操作时 使用的是一个未对准的地址 80486就允许产生异常事故信号 若AC 1 若出现了单字存储操作时使用的是奇地址 双字存储操作使用的不是双字边界内地址 或者在进行四字 8个字节 存储操作时使用的不是四字边界内地址 就会出现数据访问不对准异常 11 标志寄存器中的位17是虚拟8086方式位VM标志寄存器中的位16是恢复标志位RF标志寄存器中的位16是恢复标志位RF标志寄存器中的位14是嵌套任务标志NT标志寄存器中的位14是嵌套任务标志NT标志寄存器中的位13 位12是输入 输出特权级标志位IOPL溢出标志位11F 12 标志寄存器中的位10是定向标志DF位标志寄存器中的位9是允许中断标志位IF标志寄存器中的位8是自陷标志位TF标志寄存器中的位7是符号标志位SF标志寄存器中的位6是零标志位ZF标志寄存器中的位4是辅助进位标志AF标志寄存器中的位2是奇偶校验标志位PF 标志寄存器中的位0是进位标志位CF 13 4 段寄存器80486配备有6个16位的段寄存器 段寄存器也叫选择符 Selector 它们的名字和用途与80386的一样 其名称分别是 代码段寄存器CS数据段寄存器DS堆栈段寄存器SS附加数据段寄存器ES附加数据段寄存器FS附加数据段寄存器GS 14 3 1 280486CPU系统原理80486微处理机是由提高了效率的80386微处理机 增强了性能的80387数值协同处理器 一个完整的片内Cache及其控制器组合而成 所以 80486芯片内的部件 都是经过优化处理的 集成度更高的部件 像与80386完全兼容的整数部件 IntegerUnit 与80387 完全兼容的浮点部件FPU FloatingPointUnit 一整套虚拟存储管理与保护系统 一个标准统一的规模大小为8K字节的程序和数据共用的统一的高速缓冲存储器Cache 总线监视以及一些多重处理支持设施等 为提高某些性能指标和增强功能 又新增了一些局部部件和6条80386没有的指令 15 在设计80486微处理时 围绕以下4个目标展开工作 1 保证与80386微处理机及80387数值协同处理器软件完全兼容 2 在相同时钟频率下 要比由80386和80387组成的系统的性能高2 3倍 3 扩充IBMPC80386体系结构标准 使80486带有小型计算机的某些特征 4 增加整个系统的集成度 16 图3 4示出80486微处理机CPU的逻辑框图 图中的Cache部件 8K 字节的统一Cache 以及浮点部件FPU和EP寄存器组在以80386为基础的系统内属于不同的独立芯件 并不在80386CPU芯片之内 而在80486中这些部件变成了80486CPU的一个组成部分 这两个新集成到80486CPU内的部件 一个是浮点部件FPU 它有效地提高了浮点操作性能 另一个是指令和数据共用的高速缓冲存储器Cache 17 图3 480486结构逻辑图 18 初看起来 剩下来的逻辑部件与80386CPU相应逻辑部件非常相似 但实际上还是有所差异 Intel把预取部件 指令译码部件 以及控制逻辑部件都进行了修订调整 同时把高速缓冲存储器Cache都集中到指令执行流水线中 使这些部件达到了最佳状态 经过改进之后 这几个关键部件能使一些最常用 最简单的指令在一个时钟周期完成 指令执行速度达到了小型计算机水平 19 图3 4示出的80486逻辑框图与前面的80386逻辑框图进行比较后我们会发现 80486芯片内较之80386又新添了三个新的子部件它们分别是浮点部件FPU 控制和保护部件和Cache部件 把浮点部件FPU也按排在80486的芯片之内 其目的就是要尽可能发挥片内Cache及其控制部件的作用 使存储器与CPU之间的接口操作速度提高了很多 与以前分立的80387浮点部件相比 把80387集成到80486 芯片之内 的确增强了80486芯片的整体性能 不可小看控制和保护部件的作用 它可是整个芯片的控制中心 它的作用之一就是协助分段部件开展工作 它的主要功能是把已经译好码的指令的微代码取到执行部件上去执行 以便最大限度地发挥指令流水线的作用 20 预取部件的作用是 负责从高速缓冲存储器Cache内取后面一部分指令用于执行 如果在高速缓冲存储器Cache内没有找到所需的这批指令 它就到主存储器去取这部分内容 与此同时还会把Cache充满 控制和保护部件的作用是把指令转换成微代码指令 这些微代码指令越过内部总线直接进入各执行部件去执行 21 3 1 380486微体系结构80486微处理机的微体系结构包括有9个功能部件 它们分别是 总线接口部件 片内高速缓冲存储器Cache 指令预取部件 指令译码部件 控制部件 整数运算和数据通路 浮点部件 分段部件 分页部件 22 3 1 3 1总线接口部件总线接口部件与片内Cache外部总线接口实行的是逻辑接口连接 当访问Cache出现没命中时 或当需更改系统存储器内容时 或当需向Cache写某些信息时 就要通过总线接口从外部存储器系统中取出一批数据 总线接口对填充Cache 时使用的成组传送方式以及为了遮掩向缓冲存储器写数据时出现的等待时间 总线接口都能提供技术细节上的支持 80486的总线接口还配备有包括总线监视功能设施 总线接口部件根据优先级高低协调数据的传送 指令的预取操作 并在处理机的内部部件和外部系统间提供控制 80486微处理机的总线接口部件拥有如下结构特征 23 80486微处理机的总线接口部件拥有如下结构特征 1 地址收发器和驱动器在地址总线上 驱动器不仅驱动地址总线上的A2 A31地址信号 同时也要驱动与地址信号相对应的字节允许信号BE0 BE3 在A2 A31这30个地址信号中的高序28个地址信号还是双向信号 这样就允许芯片外逻辑将Cache的无效地址驱动到处理机内 2 数据总线收发器数据信号D0 D31被驱动到微处理机的总线上 而接收数据信号也是从微处理机的总线上进行接收 3 总线规模大小控制在80486微处理机上 外部数据总线规模大小一共有三种可供选用 它们分别是32位宽 16位宽和8位宽的数据总线 用外部逻辑的两个输入端来说明所使用的数据总线的宽度 在一个时钟周期挨着一个时钟周期的基础上 总线规模大小是可以变化的 24 4 写缓冲总线接口部件最多可允许四个写请求可以采用缓冲技术 由于采用了这项技术 可使多个芯片内部操作在不必等待写周期情况下 可以继续去完成它们在总线上的操作 5 总线周期和总线控制总线接口部件的这一特征对总线周期的广泛选择和控制功能都给以支持 像成组传送 非成组传送 单个周期或多个周期的传送 总线的仲裁 其中包括总线请求 总线保持 总线保持确认 总线锁存 总线的伪锁存以及总线退出 BusBackoff 等操作 像浮点运算出错信号的发送 中断和复位等操作都给以支持 6 奇偶校验的生成和控制在向微处理机写时生成偶校验 而在进行读操作时则进行校验 而错误信号表示的是读奇偶校验错 7 Cache控制总线接口部件的Cache控制特征对Cache操作的控制和一致性操作提供支持 三个输入端允许外部系统对存放在片内的数据的一致性实施控制 两个专用的总线周期允许处理机对片外Cache的一致性实施控制 25 3 1 3 2Cache部件80486片内Cache中存放的是CPU最近要使用的 在主存储器中保存着指令 操作数以及其他一些数据的副本 若微处理机需用的信息正在Cache中 则称之为Cache命中 在Cache命中情况下 根本就不用总线读周期 直接到Cache读即可 若微处理机所需用的信息此时不在Cache内 则称之为Cache不命中 这时微处理机就会一次传送16个字节 经一次或多次传送将微处理机所需用的信息从主存储器读到Cache中去 这种操作就是Cache行的填充 CacheLineFills 当出现了向Cache某些存储单元的内部写请求 实际上进行的是两项操作 一是Cache内容被修改 二是把写到Cache中的内容经由Cache同时也写到了主存储器中 这种写操作就是Cache的写贯穿 CacheWrite Throngh 26 3 1 3 3指令预取部件当总线接口部件不执行总线周期时就去执行一个取指令周期 指令预取部件就利用总线接口去预取指令 微处理机总是提前把指令预取到预取部件 很少出现微处理机在总线上等待指令预取周期的现象 在指令预取周期读的是16个字节的指令模块 其起始地址比最后一次取指令所用地址在数值上是大的 起始地址是由预取部件生成的 其实 预取部件与分页部件之间是直接连接的 27 3 1 3 4指令译码部件80486微处理机的指令译码部件的作用是 对由预取部件提供的指令流给以译码 80486采用的是两步流水线译码方案 这种方案在每一时钟周期都能提供一个译好码的指令 这种指令译码部件还提供了许多硬连线的微指令 在把第一个微代码从控制存储部件读出来之前 用这些微指令启动并控制相应操作 因此 在微代码控制之前就已开始执行译好码的指令 28 3 1 3 5控制部件控制部件的作用是负责解释来自指令译码部件的指令字和微代码 控制部件的输出控制着整数部件和浮点部件 又由于对存储器段的选择可以由指令给以定义 所以控制部件还控制着分段部件 控制部件内拥有微处理机的微代码 由于有许多指令都有惟一的一行微代码 80486微处理机平均起来每一个时钟就能执行一条指令 后面还会详细讨论怎样将指令装入流水线和怎样执行的 29 3 1 3 6整数部件80486微处理机的主数据通路包括算术与逻辑运算部件ALU 桶形移位器 寄存器组以及标志寄存器等部件 为了支持流水线操作 可以用三个读端口和一个写端口来访问通用寄存器 80486微处理机芯片还配备有一专用逻辑 用来检测总线的争用情况 同时适时激励总线短程部件 BusShorters 在一个时钟周期内完成对数据的写操作 与此同时 在同一个时钟周期还可以作其他操作 这一点非常重要 像在执行完装入之后 紧接就要在下一个时钟周期执行后继操作那样 这种情况在80386 80486微处理机内经常发现 30 3 1 3 7浮点部件80486微处理机配置的浮点部件执行的指令系统 与80387数值协同处理器所执行的是同一个指令系统 二者不同之处在于 80486的浮点部件还配备有一个下推寄存器堆栈 以及一个用来解释依据IEEE标准规定的32位 64位和80位数据格式的专用硬件 浮点部件的经由微处理机总线传送给外部系统的输出信号 可用来表示浮点部件所出现的错误信息 外部系统本身也能对微处理机的这种输入信号加以确认 并可以表示微处理机将对浮点部件出现的错误不予理睬 继续它的正常的操作 31 3 1 3 8分段部件80486微处理机的分段管理部件是片内整个存储管理功能的一个组成部分 其内配备有一个段描述符Cache以及用来计算有效地址和线性地址所必需的电路 分段部件还配备了一种叫做面向分段的执行逻辑 进行例行保护规则测试 为了加快分段装入操作 在一个时钟周期时间内可以从Cache传送出64位数据 所谓段 就是一个被保护的 独立的80486存储器内的存储地址空间 分段的目的就是在各应用程序间实行强制性的隔离 去调用恢复的过程 并对在程序设计中所出现的错误实行隔离提供物质基础 分段部件的功能是把由程序提供的逻辑地址 转换成一种线性地址 32 3 1 3 9分页部件80486的分页管理部件 在整个存储管理系统内采用的是二级分页管理机制 分页部件配备了一种包含有32个登记项的转换旁视缓冲存储器TLB 分页部件也需要一种面向分页的执行逻辑 用来对分页规则给以检测 使用分页部件可以使程序能够访问比实际可用的存储空间大很多的数据结构 所采用的手段就是将这种大的数据结构的一部分保存在主存储器之内 而另一部分则保存在磁盘上 分页部件将线性地址空间 分成其大小规模为4 的若干页 也就是说80486微处理机将4K字节定义为一页 分页部件使用保存在存储器中的名为页表的这种数据结构 将线性地址转换成物理地址 33 3 2流水线操作在执行指令时 80486使用的指令流水线按每一个时钟周期执行一条指令的速度连续不断地执行 之所以有如此高的速率 其一是 Cache和流水线集成在一起了 其二是 流水线操作指令的译码也分两步完成 在进行整体设计时 力图实现使有的程序不仅能执行 而且还要很好地执行 并不需用编译程序来掩盖流水线中的任何低效现象 34 译码的两个步骤是 第一步对指令进行分类 选择微程序ROM的入口点 并确定是否需要访问存储器 然后将操作数地址发送给地址计算部件 同时操作码则被发送给二级译码器和微代码ROM 第二步把宏指令扩展成一个或多个已全部译码的微指令 在第4个流水线操作步骤中 由算术运算和逻辑运算部件ALU执行扩展了的微指令 在第5个流水线操作步骤中 则把计算结果存放到寄存器组上 第一个译码步骤可以检测出任何一种转移指令 并且进行一次目标操作码的预取 转移操作码在执行步骤之前是不会被进一步解释的 即使出现转移时 也会出现两个时钟周期的流水线延迟 若取出的不是条件转移 则指令仍从原来的预取点继续执行 当然也就不会招致附加延迟问题 35 3 2 1成组传送访问主存储器时 80386和80486主要不同点在于流水线与成组传送两个问题 当然不可避免也会涉及到80486片内Cache 为支持80486的成组方式 系统的运算要快 存储器的存取速度也要快 因此 选用何种存储器结构是令人关注的问题 当存储器向外传送数据 或从外向存储器传送数据 时 给定的标准是一个时钟时间 则首选存储器件应是DRAM 它的速度虽低 但价格比较便宜 需要说明的是 80486片内Cache用的是SRAM 36 下面说明80486用64位宽的数据总线构成的DRAM的运行步骤 时钟周期1 CPU开始访问 时钟周期2 存储器尚未准备好 增加一个等待状态 时钟周期3 传送第一个字 发出80486 成组传送准备好 信号 开始下一页64位的访问 时钟周期4 传送所存的存储器内容 也就是第2个字 发出成组传送准备就绪信号 时钟周期5 传送第3个字 按页 发出成组传送准备就绪信号 时钟周期6 传送第4个字 按页 发出成组传送准备就绪信号 37 3 2 2流水线和性能一个微处理机系统对于给定的任务或指令集 在执行时其速度到底有多快是衡量系统性能的一个很重要标志 由于80486微处理机的执行速度和信息流量都大大增加 所以80486微处理机整体系统性能都得以很大提高 其中最重要的一点是得益于80486的指令流水线操作 由于在80486微处理机系统内部 还存在着高速运行的80486CPU以及CPU的总线周期与对CPU总线响应速度比较慢的设备之间的矛盾 所以80486整个系统所表现出来的性能总比80486所能提供的潜在的性能稍低一些 38 3 2 3流水线操作设计80486时扩展了流水线技术 把主执行部件EU的流水线扩至5个步骤 即预取PF PreFetch 两级译码D1和D2 执行Ex Execution 和寄存器组的写回WB 在典型的RISC流水线中 仅仅锁住指令流动对流水线的影响并不严重 因为在某种情况下前面的步骤被锁住时 后续步骤可继续操作 39 并不是80486微处理机的每条指令都要用到全部九个功能部件 当一条指令需要用到几个功能部件参于操作时 每个功能部件都以并行方式与其他功能部件一起 在指令执行的不同阶段实施并行操作 虽然每条指令都是按步骤顺序执行地 但在任何给定时间内 都会有若干条指令在处理机的不同阶段并行操作着 这种操作方式就叫做指令流水线 像指令的预取 指令译码 微代码的执行 整数操作 浮点操作 分段操作 分页操作 Cache管理以及总线接口操作等 所有操作都是同时执行 40 图3 5中展示出的是指令流水线中单条指令操作的各个步骤 它们分别是取指令步骤 译码步骤1 译码步骤2 执行步骤和把执行结果寄存器写回步骤 流水线中的每一操作步骤都要占用一个时钟周期时间 80486CPU流水线5个操作步骤 时钟 41 3 2 3 1流水线操作步骤1 预取步骤 prefetchstage 在80486执行的5步骤流水线操作中 第一个操作步骤就是预取步骤 CPU总是从Cache内取出一个完整的Cache行 在一次16字节的Cache访问操作中 这个Cache行包括5条左右的指令 具体操作就是先从Cache或片外存储器预取出一批指令代码 然后将其存放到由两个大小均为16个字节组成的预取缓冲部件的其中一个之内 指令译码部件一旦将上一次填入的指令代码用完 就要用新的一批指令代码填充预取缓冲部件 以备指令译码部件使用 由于386或486体系结构决定的其指令长度是可变的 致使预取部件随着指令与指令之间的差异 在流水线各操作步骤中的状态也不尽相同 一般说来 预取部件操作与流水线中的其他一些操作步骤都是相互独立的 但是 出于对两级译码部件的支持 可以将预取缓冲部件中的内容读到两个独立的端口之上 每个端口都由指令译码部件单独给以控制 42 2 D1步骤流水线中的第二个操作步骤和第三个操作步骤均是译码操作步骤 分别称之为D1操作步骤和D2操作步骤 所有操作码和生成的地址信息码都是先由D1操作步骤分解 当开始处理一条预取指令时 D1逻辑首先检查它的操作码 然后再确定指令属哪一类 例如 对一个简单的单周期指令 由D1步骤确定在以后的执行步骤中它进行什么操作 D1步骤还要找出微指令ROM内 存有第一个执行周期控制字的入口点 并检索出计算地址所需的信息且送给分段部件 43 3 D2步骤D2步骤把每一80486的宏指令扩展成算术和逻辑运算部件ALU的控制信号 对单周期宏指令 这只是几位操作码的功能 D2步骤内还控制更加复杂的寻址方式的计算 这一步骤不仅要完成指令的译码 同时还要算出操作数在存储器中的地址 在每个时钟周期内 它可以对1 4个字节的存储器位移字段进行译码 或者对1 4个字节的立即常数地址进行译码 在D2步骤内 还要用译完码的位移量或立即常数 以并行方式计算出存储器地址 在第一个D2周期内 若有位移则译码 若有基址则把它加到基址寄存器上 若有变址 则在第二个D2周期进行变址计算 没有变址时 在一个D2步骤内即可完成地址的计算 据统计 大概仅有5 的指令需用两个D2步骤 44 4 Ex步骤第4个流水线操作步骤是指令的执行步骤 在这个操作步骤内 不仅包括有算术运算和逻辑运算 还包括有对Cache的访问操作以及对寄存器的修改等操作 一旦进入执行阶段 所有用户可见的变化都能实现 在执行Ex步骤期间 整数部件IU中的算术逻辑运算部件ALU执行指令规定的计算 80486与传统的RISC流水线不同之处在于 80486可以用几十个执行时钟周期执行一个复杂的宏指令 或者是处理复杂的数据结构 在这种情况下 总是用传统的微代码机控制算术和逻辑运算部件ALU 而在其他情况下 比如像存储器的装入和存储等操作 ALU总是处于空闲状态 45 5 WB步骤流水线中的第五个操作步骤是写回 WriteBack 步骤 这个操作步骤允许最后修改寄存器操作与下一条指令的执行步骤重叠执行 在写回操作步骤内 像LOAD STORE以及寄存器与寄存器之间的操作等许多经常使用的指令 只用一个执行时钟周期即可完成其操作 46 3 3工作模式 80486微处理机完全可以做到与8086 80286 80386系列机在目标代码级上完全兼容 也就是说 为8086 80286 80386微处理机编写的软件不用修改即可以在80486微处理机上运行 80486微处理机与80386微处理机一样 它也有两种操作方式 一种是实模式 也就是实地址方式 简称实方式 另一种就是保护模式 也就是通常所说的保护的虚拟地址模式 简称保护模式 47 3 3 1实模式当80486微处理机复位时 或者在加电时总是被初始化成实模式 这种操作模式与8086微处理机一样拥有同样的基本结构 在这种模式下 其寻址机构最大寻址范围为1M字节 其中断处理又与80286的实模式下的中断处理一样 在这种操作方式下 几乎所有的80486微处理机的指令都可以使用 80486之所以要采用实模式这种操作方式 是因为它还需要建立并使用保护模式这种操作方式 在实模式下 80486微处理机就像是一个高速运行的8086微处理机 在建立微处理机保护模式操作时需要实模式 在实模式下还可以直接访问由存储管理部件的分页机构管理的页和给微处理机提供特权的能力 48 3 3 2保护摸式保护模式也被称之为保护的虚拟地址方式 当各种应用程序在80486的保护模式下运行时 80486微处理机的各种能力都可以淋漓尽致地表现出来 在保护模式下 分段部件不仅要完成逻辑地址向线性地址的转换 而且还要在总线周期内完成多种保护性的检查 在保护模式下 除了可以实施分段保护之外 还可以任意选用分页保护 在保护模式下 由分页部件完成存储器管理的分页操作 它配备有一个转换旁视缓冲存储器TLB 用来存放近期使用的页目录和页表项 80486微处理机的线性地址空间为4GB 4吉字节 而虚拟的存储空间可达64TB 64太字节 目前所有的为8086 80286 80386编写的软件都可以在80486微处理机的保护模式下运行 在保护模式下 其寻址机制比起在实模式下的寻址机制来显得更加完美 其技术也更加先进 49 3 3 3虚拟8086模式虚拟8086模式只不过是80486微处理机保护模式下的一种子方式 它的最突出的特点是 8086程序可以使用80486微处理机保护方式下的分段和分页保护机制运行 所以 这种操作方式比起在实模式下运行的8086程序来说 其灵活性表现的更加充分 在保护模式下 软件可以把一项任务转换到指定的虚拟8086的模式下运行 每一项虚拟8086的任务就像8086任务一样 都可以由8086软件 像应用程序 整个8086操作系统 执行 50 3 3 4操作模式间的转换1 向保护方式的转换在向保护方式转换之前 必须建立一个系统数据结构最小集 并且把全局描述符描述符表GDT寄存器 中断描述符表IDT寄存器以及任务寄存器TR进行初始化处理 这些表一旦创建 系统软件就可以按步就班地转换成保护方式 保护方式的进入是通过将控制寄存器CR0中的PE位置成1实现的 可以用MOVCR0这种指令达到将PE位置成1的目的 进入保护方式之后 在段寄存器内继续保存着在实方式下的拥有的内容 软件将会重装所有段寄存器的内容 在保护方式下开始执行时的CPL的值为0 51 2 转换回实地址方式如果软件用MOVCR0这种指令将控制寄存器CR0中的PE位置成1 则Pentium微处理机就又再次进入实地址方式 再次进入实地址方式的过程如下 1 如果允许分页 则执行几个操作步骤 2 将控制转移到其段界限值是64K 即0FFFFH 的一个段 这次把段界限装入代码段寄存器需在实方式下 以确保全局描述符表和局部描述符表位于实地址存储器之内 3 用描述符内拥有下列适用于实方式下的值 装载堆栈段寄存器SS 数据段寄存器DS 附加数据段寄存器ES FS和GS各寄存器 4 在禁止中断期间 禁止用CALL指令调用INTR中断 使用外部电路的NMI中断也属于被禁止之列 5 将控制寄存器CR0中的PE位清0 6 刷新指令队列 并且将一适当的访问权限值放入代码段寄存器 7 用LIDT指令装载实方式下的中断向量表的基地址和段界限 8 允许中断 9 用实方式所需的代码装载段寄存器 52 3 4存储管理 80486微处理机是一种全32位体系结构微处理机 其内不仅配备有一个片内存储管理部件 一个数值协同处理部件 而且还配备了一个规模为8K字节的高速缓冲存储器Cache 80486不仅拥有80386的全部32位微处理机的特征 更重要的是它的性能在80386的基础上得以全面地 大幅度地提高 80486的片内存储管理部件MMU与80386的存储管理部件完全兼容 53 3 4 1分段存储管理分段存储管理方式是建立在可靠性和性能的基础之上一项管理技术 在80486微处理机系统内 系统给出的地址以及程序给定的地址都是逻辑地址 而逻辑地址又是由用来指示这个段的一个16位的段选择符和一个能直入这个段的32位的偏移量组成 在分段部件内 通过把这个32位的偏移量与这个段的基地址相加 就是将逻辑地址转换成了一个线性地址 段的基地址可从这个段的段描述符中得到 其实 段描述符是保存在存储器中的一种数据结构 其内不仅包括有段地址 而且还可以提供诸如像段的大小规模 段在存储器中的位置以及访问这个段的控制信息等 而段描述符又是保存在段描述表中的信息 而段描述符表又被进一步分成两个表 一个叫全局描述符表GDT 另一个叫局部描述符表LDT 全局描述符表是供系统中所有程序使用的 而局部描述符表则是供各自独立运行的程序使用的 54 在80486微处理机的各种段寄存器内不仅保存着要访问的存储器内各种段的类型 比如说要访问的是代码段 数据段还是堆栈段等 而且在段寄存器内还保存着目前正在使用的段的选择符 若欲访问其他各种段 首先要用传送指令MOV装欲被访问段的段寄存器 在80486微处理机内同时可以使用 四个数据段 一个是数据段 另三个则是附加数据段 再加一个代码段和一个堆段 所以80486微处理机总共配备有6个段寄存器 55 图3 9由TI位选择的描述符表 56 段选择符内有一个13位的索引字段 如图3 9所示 根据它的内容被索引进全局描述符表GDT或局部描述符表LDT 而基地址既可以是来自全局描述符表寄存器GDTR 也可以是来自局部描述表寄存器LDTR 在这两种寄存器中保存着描述符表的开始的线性地址 图3 9中示出了怎样用段选择符中的Ti位说明使用的是全局描述符表还是局部描述符表 57 逻辑地址经段转换后所形成的地址就是线性地址 如图3 10所示 若没有使用分页机构 这时的线性地址就是物理地址 如果使用了分页机构 二级地址转换机构 即分页机构 所生成地址就是物理地址 58 图3 10段的转换 59 每个段都是一个独立的地址空间 虽然这些段在物理存储器中可以是相邻的存储器模块 但分段机构能阻止越段进行访问 在每次存储器读 写操作时 都要对使用段的段界限进行检验 任何一种欲对超出段界限的存储器访问操作都会产生一个一般保护异常事故 分段机构要求在段描述符中一定要把段的地址范围说清楚 给每一个段指定各自独立的地址空间是操作系统的义务和责任 通常 可以把80486的程序分成许多个段 且一个程序至少也要有一个代码段和一个数据段 因为代码段不能被修改 数据段不能执行 所以能很容易检测出程序中一般类型的错误 因段是有界的 越界去访问代码或数据都是被禁止的行为 60 3 4 1 1段寄存器对每一种存储器段的访问都要涉及到一个段寄存器 在每次访问代码 段数据段或堆栈段时 都要用段寄存器的内容来说明使用的是哪一个段 在程序执行期间 通过把它们的段选择符装到段寄存器内 可以使用更多的段 每一个段寄存器又是由两部分组成 一部分为可见部分 另一部分为不可见部分 对段寄存器的可见部分来说 可用传送指令MOV装入 而不可见部分只能由处理机装入 用户是不能也不可能进行干预操作的 61 3 4 1 2段选择符段选择符指示着段的描述符 在段描述符中包含有定义段所用的全部信息 其实 一个程序可以拥有比6个段寄存器指示的段还要多的段 若某个程序使用的段多于6个 当程序需要去访问一个新段时就要使用传送类指令MOV 去改变这些寄存器中的内容 由段选择符 SegmentSelector 识别段描述符 SegmentDescriptor 而段描述符在段描述符表内被逐一登记造册 对应用程序来说 段选择符作为一个指针变量的一个组成部分是可见的 但段选择符的值通常是由连接编辑程序 LinkEditor 或连接装配程序 LinkingLoader 指定或修改的 而不是由应用程序指定 更不能由应用程序对其实施修改操作 62 图3 12中展示出了段选择符的格式 从图中可以看出 段选择符是由16位信息组成的 这16位信息又被进一步细分成三个字段 这三个字段分别是13位的索引字段 一位的指示符字段以及两位的请求特权级字段 注 1 位2 TI 字段是指示符字段当TI 0指向全局描述符表TI 1指向局部描述符表2 位1位0 RPL 请求特权级字段 其中00表示最高特权级11表示最低特权级 63 3 4 1 3段描述符段描述符 说到底是位于存储器内的一种数据结构 段描述符内保存着供微处理机使用的有关段的大小规模 段在存储器中的位置以及控制和状态信息 各段描述符都是由各种编译程序 各种连接程序 各种装入程序 或者是操作系统产生的而不是由各应用程序生成的 图3 13中展示出了通常使用的描述符格式 64 符号说明 1 AVL通过系统软件可以使用2 DPL描述符特权级3 S描述符类型 0 系统用 1 应用程序 4 G粒位5 P段存在位6 O缺省操作大小规模 只在代码段描述符中识别 0 16位的段 1 32位的段 65 1 基址字段80486微处理机用这个字段来规定某一个段在4GB物理地址空间中的位置 从图中可以看出 基址字段又是用基地址15 0 基地址23 16和基地址31 24这三个互相独立的部分表示的 80486微处理机是把这三个基地址字段按序组合在一起 从而形成一个惟一的32位的值 来表示这个段的基地址 另外 段的基地址值应该与16字节的边界对准 通过对准16字节代码段或数据段的边界可使程序最大限度地发挥其性能 66 2 粒位 GranularityBit G字段是用来解释段的界限所用长度单位大小的一个字段 且以4096倍数为段界定标 若这一位被清成0 则段的界限以一个字节为单位进行说明 若这一位被置成1 段的界限则以4K字节 即一个页 为单位给以说明 若使用了定标就不再测试最低12位地址 例如 若段的界限值是0 但由于粒位字段被置成1 就形成从0至4095这么大范围的有效偏移量 值得说明的是 只有段的界限字段会受影响 而段的基地址仍然是以字节为单位说明 67 3 段界限字段段描述符中的这个字段是用来定义段的大小规模的 从图3 13中可以看出 段界限是用段界限15 0和段界限19 16两部分表示的 但80486微处理机在用到段界限时 是把这两部分段界限组合在一起 从而形成了一个20位的段界限值 80486微处理机用下述两种方法中的一种来解释段界限 这要根据粒位字段的设置情况而定 1 如果粒位字段被清成0 段界限字段值的范围可以是从1个字节到1M字节 因为段界限为20位 220 1048576 范围 2 如果粒位字段被置成1 段界限字段的值可以是从4KB到4GB这么大范围 段界限字段的值在4K字节的基础上每次可增值4K字节 68 4 S位字段由这一位来确定给定的段是一个系统段呢 还是一个代码段或一个数据段 如果S位被置成1 这时这个段不是代码段就是数据段 如果S位被清成0 那么这个段就一定是一个系统段 5 D位字段这个D位字段只能在代码段描述符中使用 是用来指示代码段中的缺席的操作数的长度和有效地址长度的 若代码段中描述符中的D位被置成1则说明采用的是32位操作数和32位的有效地址这种寻址方式 如果D位被清成0 则说明使用的是16位的操作数 采用的是16位寻址方式 69 6 类型字段对这个字段的解释要根据是应用程序段的描述符 还是系统段的段描述符分别给以不同解释 系统段的段描述符格式与这里的段描述符的格式稍有不同 存储器描述符中的类型字段还要说明被访问段的种类以及增大的方向 表3 3中列出了在存储器描述符中说明的被访问的应用程序段的类型 70 7 描述符特权级DPL字段用这个字段来定义特权级 借助于保护机构用这个字段定义的特权级去控制对这个段的访问 8 段存在位P字段当一个段描述符的选择符装到段寄存器时 若段存在位被清成0 此时80486微处理机就会产生一个段不存在的异常事故 也就是说 可以用这个段存在位字段去检测要访问的段中的哪一个段是不能用 71 3 4 1 4段描述符表段描述符表就是段描述符的一个阵列 其实 段描述符表一共两类 它们分别是 1 全局描述符表GDT 2 局部描述符表LDT 全局描述符表GDT是供所有任务使用的描述符表 而局部描述符表LDT是为每一项任务运行时使用的描述符表 段描述符表实际上是段描述符的一个阵列 如图3 15所示 描述符表在长度上是可变的 最多可容纳8192 213 个描述符 80486微处理机并不使用全局描述符表GDT中的第一个描述符 因为它是一个 空描述符 NullDescriptor 当把这个空描述符的段选择符装到段寄存器时也不产生异常事故 但当试图去访问用这个描述符定义的存储器空间时 那就必定会产生一个异常事故 通过用这个段选择符对段寄存器的初始化处理 即使偶而一次访问未被使用的段寄存器 也要产生一个异常事故 72 图3 15描述符表 73 3 4 2分页存储管理80486微处理机配备有32位内部和外部地址总线 具有32位的寻址能力 所以 物理存储器的最大容量达4GB 物理存储器又被均分成大小为4KB的页 这些页以4KB地址为界按顺序排列 因此 可以把物理存储器想象成是由物理上的零地址开始的页阵列 无论如何 这些页也不会与应用程序结构建立起联系 通常 把实际存储器的页叫做物理页 或叫做页框 例如 若PC机的物理存储容量为2MB 那它就会有512个物理页 分配给程序的页叫虚拟页 当虚拟和物理存储标量均为4GB时 虚拟和物理页的最大数量均为1048576个 74

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论