8086是标准16位微处理器,内、外数据总线均为16位。8088是准16位微处理器,内部数据总线为16位,外部数据总线为8位。8086和8088除了外部数据总线宽度及相关逻辑稍有差别外,内部结构和基本性能相同,其指令系统也完全兼容。
1.8086/8088微处理器的内部结构
微处理器执行一段程序通常是通过循环往复地执行如下步骤来完成的,即:
1)从内存储器中取出一条指令,分析指令操作码。
2)从内存储器或寄存器中获取操作数(如果指令需要操作数)。
3)执行指令。
4)将结果存入内存储器或寄存器中(如果指令需要)。
在8位微处理器中,上述步骤是按一个接一个的顺序串行完成的。微处理器在取操作码、存取操作数时要占用总线,而在分析操作码和执行指令时不占用总线。由于微处理器以串行方式工作,在执行指令的过程中,总线会出现空闲时间,而不能被利用,这便相对地增加了指令的执行时间。为了提高程序的执行速度,充分利用总线,8086/8088微处理器针对原8位微处理器在其内部结构设计上进行了改进。8086/8088微处理器的内部结构从功能上被设计为两个独立的功能部件:总线接口单元(Bus Interface Unit,BIU)和执行单元(Execution Unit,EU)。其内部结构如图2-1所示。
图2-1 8086/8088微处理器的内部结构示意图
(1)执行单元EU
执行单元EU由8个16位的通用寄存器、1个16位的标志寄存器、1个16位的运算数据暂存器、1个16位的算术逻辑单元ALU及EU控制电路组成。
8个16位的通用寄存器中,AX、BX、CX、DX为数据寄存器,用于存放参加运算的操作数或操作结果,它们中的每一个既可作为1个16位的寄存器使用,又可将其高、低8位分别作为2个独立的8位寄存器使用。当作为8位寄存器使用时,它们分别被称为AH、AL、BH、BL、CH、CL、DH、DL。这些寄存器除用作通用寄存器外,还在一些指令中有自己的习惯用法,如:AX作累加器;BX作基址寄存器,存放数据块的基地址;CX作计数寄存器,在循环和串操作中用作计数器;DX作数据寄存器,在I/O指令中用于保存端口地址;指针寄存器SP和BP分别为堆栈指针寄存器和基址指针寄存器,它们常常用来存放内存单元的偏移地址,但它们也可作为通用寄存器用于存放数据;变址寄存器DI、SI则主要用于变址寻址方式的目的变址和源变址。
执行单元EU的主要作用是分析和执行指令,即EU控制电路从指令队列取出指令操作码,经过译码电路译码后,发出相应的控制信号;数据在ALU中进行运算;运算过程及结果的某些特征保留在标志寄存器(FLAGS)中。
(2)总线接口单元BIU
总线接口单元BIU由4个16位的段寄存器(CS、DS、SS、ES)、1个16位的指令指针寄存器IP、1个与EU通信的内部暂存器、1个指令队列、1个20位的地址加法器∑及总线控制电路组成。
在BIU中,4个16位的段寄存器分别存放代码段(CS)、数据段(DS)、附加段(ES)和堆栈段(SS)的段基址。指令指针寄存器IP始终指向下一条待取指令在当前代码段中相对于代码段段基址的偏移地址。指令队列是一组先入先出(FIFO)的寄存器组,用于存放预取的指令。8088的指令队列长度为4个字节,8086的指令队列长度为6个字节。20位的地址加法器∑用于把段基址与偏移地址按一定的规则相加,形成系统所需的20位物理地址。总线控制电路用于产生总线的控制和状态信号。
总线接口单元BIU的主要作用是负责执行所有的“外部总线”操作,即当EU从指令队列中取走指令时,BIU从内存中取出后续的指令代码放入指令队列中;当EU需要数据时,BIU根据EU输出的地址,从指定的内存单元或外设中取出数据供EU使用;当运算结束时,BIU将运算结果送给指定的内存单元或外设。最初指令队列尚空时EU处于等待状态,直到指令队列中有指令时,EU才开始执行。每当指令队列中空出1个(对8088)或2个(对8086)字节,且EU没有要求BIU进入外部总线操作周期时,BIU便自动执行取指周期,将指令队列填满,以保证EU能连续执行指令。若BIU正在取指令时,EU发出访问总线的请求,则必须等BIU取指令执行完毕后,该请求才能得到响应。当程序遇到跳转指令时,BIU将使指令队列复位(清除),且从新地址取出指令,并立即通过指令队列传给EU执行。
2.指令流水线和存储器的分段模式
在8086/8088CPU的设计中,引入了指令流水线和存储器分段两个重要的概念。这两个概念在以后升级的Intel系列微处理器中一直被沿用和发展。正是这两个概念的引入,使8086/8088与原来的8位微处理器相比,在运行速度、处理能力和存储器访问等性能方面都有了很大提高。
(1)指令流水线
如前所述,原来的8位微处理器是按串行工作方式执行指令的,即只有当第 i 条指令通过取指令操作码、分析和执行后,才能对第 i +1条指令进行取指令操作码、分析和执行。在8086/8088CPU中,由于其内部结构发生了变化,它具有EU和BIU两个独立的功能部件,指令队列的存在,使8086/8088CPU的EU和BIU可以并行工作,取指令操作码和分析、执行操作重叠进行,从而形成了两级指令流水线结构,如图2-2所示。
图2-2 取指令和执行指令的重叠进行示意图
由图2-2可见,由于EU和BIU能相互独立地并行工作,在大多数情况下,使得取指令和执行指令可重叠进行,即某时刻EU执行的是BIU在前一时刻取出的指令,与此同时,BIU又在取EU下一时刻要执行的指令。由此可见,在大多数情况下,取指令所需的时间包含在了上一条指令的执行之中。因此,该指令流水线技术的引入,减少了CPU为取指令而必须等待的时间,提高了CPU的利用率,加快了整机的运行速度。同时也降低了对存储器存取速度的要求。
(2)存储器的分段模式
8086/8088有20根地址线,可寻址的存储空间为2 20 B即1MB。但8086/8088CPU内部数据总线和寄存器均为16位,内部ALU只能进行16位运算,在程序中能使用的地址信息也为16位,故其最大寻址空间被局限在2 16 B即64KB。为解决这一矛盾,达到可直接寻址1MB存储空间的目的,8086/8088引入了“分段”的概念。即把1MB的物理存储空间分成若干逻辑段,每个逻辑段最大可为64KB。每个段的起始单元地址被称为段的首地址,由20位二进制数表示,它是一个能被16整除的数,即段的首地址的低4位地址总是为“0”;段的首地址的高16位地址被称为段的基地址,简称段基址;段中某存储单元相对于段基址的偏移量被称为段内偏移地址,也叫段内偏移量。这样,一个具体的存储单元在存储空间的位置就可由该单元所在段的起始地址和段内偏移地址来标识。
BIU中的4个16位的段寄存器(CS、SS、DS、ES)为8086/8088的存储器分段管理提供了主要硬件支持。这4个段寄存器CS、SS、DS和ES分别存放着4个当前段(代码段、堆栈段、数据段和附加段)的段基址,通过4个段寄存器,CPU每次可同时对4个段(这4个段被称为4个当前可寻址段)进行寻址,即同时提供容量达64KB的程序区、64KB的堆栈区和128KB的数据区。
存储器的分段方式不是唯一的,各段之间可以连续、分离、部分重叠或完全重叠。这主要取决于对各个段寄存器的预置内容。例如,设代码段寄存器CS=1000H,数据段寄存器DS=2000H,则代码段的地址范围最大可为10000H~1FFFFH;数据段的地址范围最大可为20000H~2FFFFH;此时两个段彼此独立且不重叠的。若设CS=1000H,DS=1700H,其代码段的地址范围最大可为10000H~1FFFFH;数据段的地址范围最大可为17000H~26FFFH;由此可见,此时两个段有部分地址是重叠的。因此,在1MB的存储空间中,某存储单元可以属于一个逻辑段,也可以同属几个逻辑段。
采用存储器分段管理后,存储器地址有物理地址和逻辑地址之分。物理地址是1MB存储器空间中的某一存储单元所在位置的实际地址,用20位地址信息表示,其编码范围是00000H~FFFFFH。CPU访问存储器时,地址总线AB上送出的是物理地址,编程时则采用逻辑地址。逻辑地址由段基址和段内偏移地址两部分组成,两者都是16位。由16位逻辑地址变换为20位物理地址的关系式为
物理地址=段基址×16+段内偏移地址
物理地址的生成是在BIU的地址加法器中完成的,如图2-3所示。
图2-3 物理地址生成示意图
80286是继8086之后推出的一种增强型标准16位微处理器。与8086/8088相比,它在结构上有很大改进,性能上有明显提高。主要表现在:
1)内部由执行单元EU(Execution Unit)、总线单元BU(Bus Unit)、指令单元IU(Instruction Unit)和地址单元AU(Address Unit)4个部分组成,可实现4级流水线作业,使数据吞吐率大大提高,加快了处理速度。
2)80286 CPU有24位地址线、16位数据线,且地址线与数据线不再复用,可直接寻址的存储空间为16MB。
3)对8086向上兼容。具有8086/8088 CPU的全部功能,在8086/8088上运行的汇编语言程序不需修改就可在80286 CPU上运行。
4)80286有两种工作方式:实地址模式(也称实模式或实地址方式)和保护虚拟地址模式(也称保护模式或保护方式)。80286CPU片内具有存储器管理部件(Memory Management Unit,MMU)和保护结构,能够实现在实地址和保护虚拟地址两种模式下访问存储器。
实地址模式下,80286相当于一个快速的8086,可寻址1MB的物理地址空间,同样采用分段的方法管理存储器,每个段最大为64KB,从逻辑地址到物理地址的转换也与8086一样。这相当于8086/8088的工作方式,只是速度更快,所以也叫8086方式。80286CPU在开机复位后自动进入实地址方式。
实地址模式下,4个段寄存器装入的是段基址,可存放偏移地址的寄存器有指针寄存器、变址寄存器和基址寄存器。
保护虚拟地址模式下,80286可直接寻址的存储器空间为16MB,并可提供1GB(2 30 字节)的虚拟地址空间。此时,CPU能够支持对虚拟存储器的访问。所谓虚拟存储器是一种设计技术,它通过CPU内部的存储器管理部件(MMU)向用户程序提供比实际内存储器大得多的存储器空间。虚拟存储器管理要解决的问题是将较小的物理存储器空间分配给具有较大虚拟存储器空间的多用户、多任务。
80286的保护功能包括段寄存器的保护;任务之间、任务与操作系统之间、任务内程序与数据之间的分离与保护;对存储器的访问保护及特权级保护等。所以,80286 CPU能够可靠地支持多用户、多任务系统。这是80286的最大优势,该优势必须在多任务操作系统(如Windows等)的支持下才能充分发挥。在DOS环境下,它仅工作在实地址方式下,可直接访问的内存只有lMB,这时的80286只是一个快速的8086。
保护模式下,4个段寄存器装入的不再是段基址,24位的段基址存放在一个段描述符表中,段寄存器中装入的是段选择符,通过段选择符从段描述符表中找到相应的描述符(包括24位段基地址、段界限和访问权限等),由该描述符便可获得待操作存储单元所在段的段基址。该模式下,存储单元的物理地址仍由段基址和偏移地址通过运算而得。
下面介绍保护方式下地址转换所涉及的常用名词。
1)描述符:说明存储器段的起始地址、界限(本段的实际长度)和访问权限。每个存储器段(如某代码段)对应一个描述符,每个描述符长8个字节(64位),如图2-4所示。
图2-4 80286微处理器的描述符构成示意图
对于80286而言,一个描述符由24位段基址、16位段长度、8位访问权限构成,剩下16位(两个字节)为80386以后的CPU使用。
2)描述符表:所有描述符的集合构成了描述符表。一张描述符表可存放8192(2 13 )个描述符。系统中所拥有的描述符表不止一张。
3)全局地址空间:80286工作在保护虚拟地址模式下时,可支持多用户、多任务系统。系统中一个任务便是一段程序,它需占用一片存储地址空间,多个任务便对应有多片存储地址空间,系统中全部的任务所共有的那片空间(如系统程序所占有的空间)即为全局地址空间。
4)局部地址空间:每个任务分别独立占有的那片地址空间。
5)全局描述符表GDT:用于管理全局地址空间,存放操作系统使用的和各任务公用的段描述符。
6)局部描述符表LDT:用于管理局部地址空间,存放着某个任务专用的段描述符。
7)段选择符:用于选择描述符表中的一个描述符,其格式如图2-5所示。
图2-5 段选择符构成示意图
图2-5中的D 1 D 0 位为请求特权级字段RPL,这两位提供4个特权级用于保护,即防止低特权级的程序对高特权级程序的数据进行访问;D 2 位为段描述符指示符字段TI,用于指明本段描述符是在GDT中还是LDT中;D 3 ~D 15 这13位为描述符索引字段INDEX,用于指明段描述符在指定描述符表中的序号。
由该段选择符提供的信息便可计算出所要寻找的描述符在描述符表的位置,即目标描述符的位置,如图2-6所示。
图2-6 获得目标描述符位置的计算方法
保护模式下,由逻辑地址获得物理地址的方法如图2-7所示。
图2-7 保护模式下获取存储单元物理地址示意图
例2-1 设某段选择符为0010H(即0000 0000 0001 0000B),全局描述符表的表首地址为100000H,某局部描述符表的表首地址为000000H,问:
①目标描述符在表中的位置(地址)是多少?
②若从描述符表中取出的描述符为0000 xx50 0000 1000H,待操作存储器段的段长度是多少?待操作存储器段的段基址是多少?
③若待操作存储单元所在位置的偏移地址(偏移量)为0200H,待操作存储单元所在位置的物理地址是多少?
解 :①由题目所给的段选择符可得TI=0,则表明该描述符在全局描述符表中;RPL=0表明该程序段特权级为00;描述符索引字段INDEX为0000000000010,由图2-6可知目标描述符(所要寻找的描述符)的位置(地址)=100000H+0002H×8=100010H。
②由图2-4可知,存储器段的段长度在描述符中有16位(L 15 ~L 0 )、段基址24位(B 23 ~B 0 ),故待操作存储器段的段长度为1000H即4096个单元;段基址为500000H。
③待操作存储单元所在位置的物理地址=待操作存储单元所在位置的段基址+偏移地址
=500000H+0200H
=500200H
80386/80486是Intel公司推出的与8086、80286相兼容的32位微处理器,是针对多用户、多任务操作系统的需要而设计的,它们和8086、80286在目标代码级保持了完全的兼容性,性能又有较大的提高。与80286相比,它们在结构和性能上的主要特点如下:
1)内部由总线接口单元、指令预取单元、指令译码单元、指令执行单元、段管理单元和页管理单元6个独立的部件组成,可同时并行实现取指令、指令译码、地址生成、取操作数、执行指令和回写结果6个操作,构成了6级流水线结构。微处理器的运算速度大大加快,其性能也有了很大的提高。
2)内部寄存器数量明显增加。除80286具有的各种寄存器外,80386增加了多个控制寄存器、调试寄存器和测试寄存器,所有内部寄存器和算术逻辑单元ALU均为32位,具有32位数据处理能力。另外,80386/80486还可进行64位的数据运算,如32位乘32位的乘法运算和64位除以32位的除法运算等,并且进一步增强了位处理指令的功能。数据总线以及地址总线也为32位,故能寻址的物理空间为2 32 B,即4GB。
3)具有片内集成的存储器管理部件(MMU),可实现段式、页式和段页式存储管理,与80286相比,可提供更大的虚拟存储空间(2 46 B,即64TB)和物理存储空间(2 32 B,即4GB)。
4)提供32位外部总线接口,最大数据传输率显著提高,具有自动地在16位和32位数据总线之间进行切换的功能,以适应不同位数的存储器和I/O设备。
5)具有三种工作方式,实地址方式、保护虚拟地址方式和虚拟8086方式。虚拟8086方式允许在受保护的和分页的系统中运行8086软件。
当80386/80486加电或复位后,就自动进入实地址工作方式。此时的80386/80486相当于一个高速的8086,可寻址1MB的物理地址空间,同样采用分段的方法管理存储器,每个段最大为64KB,因此32位的有效地址必须小于或等于0000FFFFH。从逻辑地址到物理地址的转换也与8086一样。
通过对控制寄存器的设置,可使80386/80486进入虚拟8086模式。此时CPU可运行实模式下的8086的应用程序。同时,利用80386的虚拟保护机构,又可实现多个用户程序同时运行的功能,而且这些程序都能得到保护,就像有多个独立工作在实模式下的8086 CPU一样。
当80386/80486工作在保护虚拟地址方式时,可支持多用户、多任务系统。其访问的线性地址空间可达4GB(2 32 B),访问的逻辑地址空间,即虚拟存储器地址空间可达64TB(2 46 B)。
与80286一样,在保护模式下,段寄存器中的内容不再是段基址,而是段选择符,通过该段选择符可在描述符表中找到对应的描述符,该描述符中的段基址(32位)与指令给出的32位偏移地址相加得到线性地址,再通过分页部件进行转换,最后得到物理地址。如果不分页,线性地址就等于物理地址。
80486在80386的基础上的所做的改进,见2.2节。
1.Pentium微处理器
Pentium作为Intel系列微处理器的新成员,不仅继承了Intel公司早期产品的所有优点,而且在许多方面有所创新,是一种高性能的64位微处理器。Pentium对80486做了重大改进:采用超标量体系结构,内含两条指令流水线,在一个时钟周期内可执行两条整数运算指令或一条浮点运算指令;内置的浮点运算部件采用超流水线技术,有8个独立执行部件进行流水线作业;增加了分支指令预测;内置了指令和数据两个独立的超高速缓存器(分别为8KB),避免了预取指令和数据可能发生的冲突;采用64位外部数据总线,使经总线访问内存数据的速度高达528MB/s,是66MHz的80486DX2最高速度(105MB/s)的5倍;为保持数据的完整性、安全性,引入了大型计算机中采用的内部错误检测、功能冗余校验和错误报告等自诊断功能;进行了更多的可测性设计(如边界扫描、探针方式等);提供了独特的性能监察功能,以利于软、硬件产品的优化和升级;提供了灵活的存储器页面管理,既支持传统的4KB存储器页面,又可使用更大的4MB存储器页面。
与Pentium微处理器等同的64位微处理器有多种,详细内容读者可查阅相关资料。
2.多核技术
64位微处理器的主要性能指标有频率、核心数量、所支持的指令集、缓存大小、最大内存、是否支持超线程技术以及是否支持睿频智能加速技术(Turbo Boost)等。核心数量指CPU内集成有几个运算核心。多核技术是64位微处理器面世后发展起来的新技术,提高微处理器的工作频率可提高微处理器性能;64位微处理器面世以来,通过Intel提出的微处理器新技术——超线程技术、多核技术和睿频智能加速技术等的使用也大大提高了64位微处理器的性能。
(1)超线程技术(Hyper-Threading Technology)
在单核微处理器的时代,支持多任务的操作系统能够“同时”运行多个应用程序,但实际上一个CPU一次只能处理一个“事件”。所谓多任务“同时”运行,实际上是通过任务切换方式实现的,即CPU将一个“事件”挂起,转而处理另一个“事件”,对CPU来讲始终只有一个“事件”在执行。多任务执行实际是指在时间段上是并行的,时间点上是串行的。所以当算术逻辑单元ALU执行整数运算时,CPU内的浮点运算单元FPU就处于空闲状态,反之亦然。
Intel公司提出的超线程技术在CPU内增加了一个逻辑处理单元,使一个CPU能够同时执行两个“事件”,看上去就像有两个CPU一样。但是由于两个“事件”共享一个CPU的其他资源,当两个“事件”都需要同一资源时,其中一个要暂停执行,让出资源,直到这些资源空闲后才能继续执行。采用超线程技术后,虽然看似有两个同样的CPU,但其实际性能远远低于两个CPU,超线程技术的应用在单核微处理器中可使其性能得到一定的提高。
(2)双核/多核技术(Dual/Multi Core Technology)
双核微处理器指一个微处理器内部集成有两个独立的内核(Core),每个内核有自己的高速缓存和控制器,均能独立读取并执行指令,实现了指令级的并行工作。使用中支持多微处理器的操作系统将每个内核辨识成一个CPU,但并非任何时候这两个CPU都同时工作。某时刻,如果用户只运行单任务,则此时只有一个内核工作,另一个内核处于闲置状态。
自2005年推出双核技术以来,Intel和AMD都通过增加内核个数来提升CPU性能,内核个数从2核增加到4核、6核。2011年下半年AMD公司推出了8核的FX-8100系列微处理器,可以预见,在今后一段时间内,多核技术将是提升CPU性能的主要途径。
(3)睿频加速技术(Turbo Boost Technology)
睿频加速技术是Intel新一代的能耗管理方案。即在不超过散热设计功耗(Thermal Design Power,TDP)的前提下,尽量提高CPU性能。睿频加速技术的实质是动态超频,根据工作负载的变化,降低不活跃内核的功耗,动态提升活跃内核的工作频率,以更好地满足性能要求。内核的最大工作频率受微处理器的功耗、电流和散热等的限制。