《微处理器结构及其特点.ppt》由会员分享,可在线阅读,更多相关《微处理器结构及其特点.ppt(173页珍藏版)》请在三一办公上搜索。
1、第八章 80286 微处理器结构及其特点,8.1 80286微处理器结构概述 8.2 80286微处理器的指令设置 8.3 虚拟地址变换和存贮器管理 8.4 描述符 8.5 保护机构和控制转移 8.6 任务切换 8.7 中断 8.8 80286总线及系统初始化,8-1 80286微处理器结构概述,一、实模式和保护模式 80286具有两种工作模式。第一种是仿真8086的实模式(或称实地址模式)。另一种是80286新增加的,功能非常强的保护模式(或称保护虚拟地址模式)。实模式工作的80286,实质上是兼容8086的高速型工作模式。,二、80286的内部结构 8086微处理器内部由执行单元和总线接口
2、单元两大部分组成。而80286恰好与此不同,它由总线单元、指令单元、执行单元及地址单元4大部分组成。这些单元可以同步地并行工作,实现流水线作业,避免了传统的顺序处理方式,最大限度地发挥了处理器的性能,从而使总线的利用率处于最佳状态。80286内部结构框图崐如图8-1所示。,图8-1 80286的内部结构框图,1.总线单元(BUS Unit:BU)总线单元生成存贮器及I/O请求所必须的地址、数据、指令信号,并执行CPU的所有总线操作。另外,总线单元还控制与80287浮点处理器的接口。2.指令单元(Instruction Unit:IU)指令单元从预取队列中按字节取出指令代码,并进行译码。译码后的
3、指令以69位的内部格式展开,然后放入能容纳3个指令的译码缓冲器(69位3)中。,3.执行单元(Execution Unit:EU)在执行单元中,除ALU外,还包括1536字35位(约54000位)的微代码ROM,寄存器阵列,中断控制电路及向段寄存器装载时的测试电路等。这些电路能保证有效地执行已被译码的命令。4.地址单元(Address Unit:AU)在地址单元中,由偏移量加法器进行有效偏移地址计算时,要对其偏移量的段界限进行检查,并且还要对段的存取权进行检查,最后才进行从虚拟地址到物理地址的转换。,三、流水线作业的高速总线周期 80286与8086时分总线不同,它的地址总线和数据总线相互独立
4、。在一个总线周期中,当有效数据置于数据总线上时,下一个总线的地址已开始输出到地址总线上,从而实现流水线作业的总线周期方式。另外,8086的总线周期基本上由T1、T2、T3、T4 4个时钟周期构成,而80286的总线周期基本上由TS(Send Status)和TC(Perform Command)两个时钟周期来实现。,在图8-2中示出了在假定存取时间完全相同情况下,80286的总线周期和以往的CPU的总线周期相比,采用流水线作业后,其性能是怎样提高的。当然图8-2中的定时关系完全是概略的,不是正确的定时关系。,图8-2 80286总线周期和以往CPU总线周期的比较,四、内部寄存器的设置 在808
5、6内部寄存器设置的基础上,为了适应保护模式的需要,80286增加了几个寄存器。在图8-3中示出了80286的寄存器设置情况。,图8-3 80286内部寄存器设置,由图8-3可知,80286内部寄存器可以分成四类:通用寄存器;状态控制寄存器;段寄存器;系统表寄存器。,首先是通用寄存器,它们的设置和8086一样,共有8个16位的寄存器,即AX,BX,CX,DX,BP,SP,SI,DI。在状态控制寄存器中,又可分成三个:IP(Instruction Pointer);标志寄存器 MSW。标志寄存器及MSW(处理器状态字)的设置情况如图8-4所示。,图8-4 80286标志寄存器及MSW设置情况,图8
6、-3(d)中的系统表寄存器,是为了管理保护模式下的四个系统表而设置的。这四个系统表是:GDT(Global Descriptor Table:全局描述符表);IDT(Interrupt Descriptor Table:中断描述符表);LDT(Local Descriptor Table:局部描述符表);TSS(Task State Segment:任务状态段)。,8-2 80286微处理器的指令设置,一、按处理器级别进行分类 80286的指令设置,如从处理器级别来看,如图8-5所示,有三个台阶,可以分成三类:8086的指令设置;80186增加的扩充指令设置;只能允许80286使用的系统控制指
7、令和存取权操作指令,图8-5 80286指令设置的台阶,1.扩充指令设置 80286中属于扩充的指令主要有:8位立即数操作的移位/循环指令;16位寄存器/存贮器操作和8/16位立即数的带符号乘法,其积存入16位寄存器的IMUL指令;对立即数操作的PUSH指令;8个通用寄存器可以一次压入/弹出的PUSHA/POPA指令;I/O与存贮器之间可以进行数据块传送的INS/OUTS指令;,保护主程序堆栈指示器,生成新的堆栈区及工作区的ENTER指令;释放由ENTER指令生成的堆栈区或工作区,恢复主程序堆栈指示器的LEAVE指令;8检查数组索引是否在指定范围内的指令BOUND。,2.系统控制及存取权操作指
8、令设置 下面所列出的指令,是为了在保护模式中对系统表及系统状态进行控制和进行段存取操作而设置的。(1)系统控制命令设置 首先是系统表操作命令。由于在保护模式中有四个系统表寄存器,即GDTR、IDTR、LDTR、TR。因此配备了相应的装入及存贮指令。,LGDT/SGDT(Load GDTR/Store GDTR)装入和存贮全局描述符表寄存器指令;LIDT/SIDT(Load IDTR/Store IDTR)装入和存贮中断描述符表寄存器指令;LLDT/SLDT(Load LDTR/Store LDTR)装入和存贮局部描述符表寄存器指令;LTR/STR(Load TR/Store TR)装入和存贮任
9、务状态段指令。,另一种是系统状态控制指令。它们是装入/存贮MSW指令及清除MSW中的TS位指令。LMSW/SMSW(Load MSW/Store MSW)装入和存贮MSW指令;CLTS(Clear Task Switched Flag)清除MSW中的TS位指令。这三条指令在实模式中同样也是有效的。,(2)存取权操作指令设置 虽然80286在工作中可以由硬件对段的存取权进行自动的检查,但是,还准备了进一步强化该功能的软件检查指令。这些指令的详细内容,在后面章节中再作说明,这里只作一概要归纳。,ARPL(Adjust RPL field of selector)禁止使用不正确的段参数;VERR/V
10、ERW(VERify a segment for Reading/Writing)段读/写权的检查;LSL(Load Segment Limit)段界限的取出;LAR(Load Rights byte)存取权字节的取出。,二、按特权级进行分类 除英特尔公司以外,几乎所有的其它公司生产的16位及32位微处理器中,都有两种不同的软件执行模式,即管理模式(系统模式)和用户模式(正常模式)。所谓管理模式,就是系统处于执行系统程序的状态;所谓用户模式就是系统处于执行用户程序的状态。在系统中系统程序和用户程序是分离的,存放于不同的存贮空间之中,分别处于二种不同的级别。这样就可以避免用户程序对系统程序区的错
11、误操作。,在8086的系统中,由于系统程序和用户程序是放在一起的,同属一个级别,因此用户程序运行中就有可能破坏系统程序。80286的保护模式就改善了这样的系统环境,如图8-6所示,不是2级而是扩展到4级。,图8-6 4级特权保护结构示意图,另一方面,虽然I/O空间是各任务共有的,可共同使用64 K字节的I/O空间。但是,每个任务对I/O的存取操作的最大特权级是可以规定的,决定这个特权级的是标志寄存器新增加的IOPL域(I/O特权域),共有2位。与这2位的值(从03)比较,现行程序的特权级低时,就禁止现行程序对I/O进行操作。“现行程序的特权级别”简称为CPL(Current Privilege
12、 Level)。,1.非特权级指令 与CPL及IOPL的值无关的指令,都属于这类指令。2.信任指令(trusted instruction set)这类指令只是在CPLIOPL时才能执行的指令。在CPLIOPL的情况,如果执行这类指令就会产生13类中断(一般保护异常中断)。信任指令有以下几条。IN/OUT;INS/OUTS;CLI/STI;LOCK。,3.特权指令(privileged instruction set)这类指令只有在CPL=0情况下才能执行,即特权级为0的可靠性最高的程序(通常是操作系统的内核)才能使用。如果特权级不为0的程序使用了这些指令,就会产生13类中断(一般保护异常中断
13、)。其特权指令如下:,LGDT;LIDT;LLDT;LTR;LMSW;CLTS;HLT。,8-3 虚拟地址变换和存贮器管理,一、80286虚拟存贮的概述 在8086情况下,从程序的角度来看,逻辑地址空间(软件上的空间)和实际物理地址空间(硬件上的空间),最大为1M字节。,在保护模式下的虚拟存贮系统中,16M字节实存贮器装不下的那些程序段(一段为64K字节以下,长度可变),可以以文件形式存于外部高速存贮器中,如硬磁盘、光盘等。由于在程序中可以使用当前在实存中不存在的逻辑地址,因此,通常把逻辑地址称为虚拟地址。在应用程序中,程序员只需参照虚拟地址,而无需关心系统是如何对物理地址进行操作的。当然,外
14、存贮器容量愈大,虚拟地址也可以扩至更大。,图8-7 虚拟地址至实地址的变换示意图,二、根据描述符表进行虚拟地址变换 在8086中,对1 M字节的实存空间进行寻址时,其地址是这样产生的,即将16位段寄存器的内容左移4位,形成20位的段基地址,再加上16位的偏移地址,最后就得到要寻址的地址。80286的实模式与上述情况完全一样。只是8086中的段寄存器对应于80286 64位段寄存器中的选择器域(16位)。另外,在这种情况下一个段的物理尺寸为64 K字节,是固定不变的。,在保护模式中,80286的段寄存器的选择器域的作用,尽管也是用来指定一个段的存贮空间。但是,选择器域的值作为一个指示器,将指向描
15、述符表的表地址,经查表再间接地确定实存上的段地址。图8-8对二种工作模式下的寻址情况作了比较。图8-9示出了保护模式下的段选择器的格式。,图8-8 实模式和保护模式寻址比较,图8-9 段选择器的格式,在图8-9中,最低2位的RPL(Requested Privilege Level)域不作虚拟地址变换,用于特权级间的保护检查。段选择器余下的14位(TI位和索引域)能够用来选择虚拟地址空间的一个段。这样,虚拟地址空间可有214个段。由于段偏移量为16位,一个段的最大尺寸为64 K字节,因此虚拟地址的最大空间应为214216=230(字节),即为1G字节。上述的1 G字节虚拟地址空间再一分为二,各
16、自分配作全局地址空间和局部地址空间(每个部分为213个段)。,全局地址空间由所有任务共享,这样就避免了相同功能的系统服务程序在各任务中重复出现,使数据共享和中断处理控制变得更容易。因此,在全局地址空间中可以放置操作系统软件、库程序、可公共调用的系统服务程序过程及数据等。局部地址空间是每个任务独立的地址空间,它放置各任务固有的代码和数据。这样做能使各任务的虚拟地址空间分离,如图8-10所示。,图8-10 全局和局部地址空间示意图,图8-11 用描述符表进行从虚拟地址到实地址的变换,描述符的种类很多,如果用段选择器来选择代码/数据段描述符时,那么一个段物理地址信息(即段基地址24位和界限16位)就
17、随之被确定下来了。这时,实存中所指定段内的某一个地址就由段的基地址和16位的偏移地址所决定。这样一来,1 G字节的虚拟地址空间就变换成了16 M字节的实地址空间,这个变换过程如图8-12所示。,图8-12 从虚拟地址至实地址的变换示意图,1.段地址变换寄存器 在保护模式中,每次段内操作都要通过实存中的描述符,将虚拟地址变换成实存的物理地址。这样做系统开销太大,很难在实际中应用。为此,在装载段寄存器时,段选择器所选择的描述符的6个字节(48位)有效信息,也自动地装入到80286内部的段寄存器高速缓冲器域(48位)。此后,在段内进行存取操作时,就可以使用高速缓冲器域的值进行高速的虚拟地址变换。通常
18、,段寄存器变更总是不太频繁的,所以采用段高速缓冲器的方法是非常有效的。在图8-13中表示了使用段高速缓冲器进行虚拟地址变换的过程。,图8-13 利用段高速缓冲器进行虚拟地址变换的过程,2.描述符表寄存器 描述符表寄存器有三种,即GDTR、IDTR、LDTR,它们分别与GDT、IDT、LDT相对应,如图8-14所示。GDTR是存放GDT的基地址(24位)、界限(16位)的40位寄存器。根据GDT的界限规定,系统禁止超出GDT界限范围的存取操作。GDTR用LGDT指令将存贮器中的6个连续字节装载其中,从而完成初始化操作。IDTR的初始化和GDTR完全相似,LIDT/SIDT是IDTR的装载和存贮指
19、令,其各自操作情况与LGDT/SGDT相同,如图8-15所示。,图8-14 描述符表寄存器,图8-15 GDTR和IDTR的操作,8-4 描 述 符,一、描述符的分类 描述符表内所包含的描述符如表8-1所示。如按大类来分,可以分为段描述符和控制门描述符。段描述符再进一步细分,还可分为一般的段(代码段和数据段的描述符)和特殊段(与LDT和TSS有关的LDT描述符和TSS描述符)。,表8-1 描述符分类,控制门描述符有以下4种:控制门;任务门;中断门;陷井门。,表8-2 在描述符表中可配置的描述符种类,二、段描述符 段描述符有一般段描述符和特殊段描述符两种。它们最前面的2个字节为段界限,接着三个字
20、节为段基地址。再后面一个字节就是描述符的存取权字节,其中位4的S位为段分类标志位。若S=1,则该描述符为一般段描述符;若S=0,则为特殊段描述符(门描述符的S位也应为0)。,1.一般段描述符 一般段描述符分为代码段描述符(图8-16(a)和数据段描述符(图8-16(b),两者用存取权字节的位3 E位(Executable:可执行)的值加以区分。若E=1,则该描述符为代码段描述符;否则,E=0则为数据段描述符。,图8-16 一般段描述符(a)代码段描述符;(b)数据段描述符,图8-17 2类数据段的结构,图8-18 段寄存器,代码/数据段描述符及 代码/数据段之间的关系,表8-3 可装入段寄存器
21、的描述符种类,2.特殊段描述符 特殊段描述符如图8-19所示,可分成LDT描述符和TSS描述符。这2个描述符的存取权字节的位4(S位)都是“”。另外,若存取权字节的低4位的值为2,表示该描述符为LDT描述符;若低4位的值是1或3,则该描述符为TSS描述符。因此,所谓特殊段,即是指LDT或TSS段。,图8-19 特殊段描述符(a)LDT描述符(2类型);(b)TSS描述符(1或3类型),LDT已经说明,有关TSS的情况将在任务切换章节中说明。需要指出的是TSS描述符所指定的段是一个由44个字节组成的任务状态段,在这个段中存放着的是各任务执行时的CPU寄存器内容。每个任务都有自己的LDT和TSS,
22、随着任务的切换,LDT和TSS也将自动地更新。这时新任务的LDT描述符和TSS描述符被自动地装载到LDTR和TR的高速缓冲器域。,GDT和IDT虽然也是特殊段,但是由于它们是所有任务共享的,在系统中分别只有一个。为此,不需要有指定它们的描述符。这样,在GDTR和IDTR中就没有设置选择器域。LDT/TSS描述符的最前面的两个字节是LDT/TSS的界限,接着3个字节是LDT/TSS的基地址。由于TSS的尺寸为44个字节,所以TSS描述符的界限域值必须大于43。在图8-20中表示了LDTR、LDT描述符及LDT的关系。另外,在图8-21中还表示了TR、TSS描述符及TSS的关系。,图8-20 LD
23、TR、LDT描述符及LDT的关系,图8-21 TR、TSS描述符及TSS的关系,三、门描述符 门描述符(以下只简称为门)如图8-22所示,有在同一任务内进行控制转移用的调用/中断/陷井门及任务间进作控制转移的任务门。使用这些门,可以使处理器转向执行另外的程序。在用程序访问门时,只使用虚拟地址的选择器,而忽略地址偏移量,因为门描述符是一个特殊的段。,图8-22 门描述符(a)调用门描述符(类型4);(b)任务门描述符(类型5)(c)中断门描述符(类型6);(d)陷井门描述符(类型7),表8-4 各类描述符的构成,8-5 保护机构和控制转移,一、保护机构的分类 80286的保护机构可以分为如下三类
24、。1.段属性和界限保护 根据对段属性(只执行,可读,只读,可写)和界限的检查,禁止不正确的段操作。,2.特权级之间的保护 最多可使用4个特权级,使得OS等系统程序和应用程序明确分开。为了支持这种功能,准备了三个特权级参数(DPL、CPL、RPL)及门。3.任务间的保护 每个任务都可以使用由LDT所定义的专用局部虚拟地址空间,防止带有错误的应用任务对其它任务进行不正常的干涉。,二、段存取时的保护 1.装载段寄存器时的检查 在用JMP/CALL/RET及IRET指令向段外转移时,要更新CS寄存器内容;或者用MOV,POP,LDS,LES指令装入SS,DS,ES时都要进行保护检查。下面以“MOV D
25、S,AX”指令的装入过程崐为例作一说明。使用其它指令装入段寄存器的检查过程也与此相同。,“MOV DS,AX”指令执行时的检查过程如图8-23所示。首先用AX寄存器中的选择器的TI位选择GDT(“0”)或LDT(“1”)。然后将索引域的值乘8,加上描述符的基地址,就得到描述符地址。这时检查一下,所访问的描述符位置是否在界限之内,若不在有效的界限内,就产生13类一般保护异常中断。,图8-23 装载段寄存器时的检查(a)第一步:界限检查;(b)第二步:存取权检查,图8-23 装载段寄存器时的检查(a)第一步:界限检查;(b)第二步:存取权检查,2.实地址计算时的检查 所谓实地址计算检查,就是在对由
26、段寄存器的缓冲器所指定的段进行存取操作时所作的检查。在这种检查中,首先是检查段缓冲器的存取权域,检查指令的有效性。譬如,VAR为一个字变量,“MOV CS:VAR,AX”指令是对CS段进行写操作,这是不允许的。另外“MOV AX,CS:VAR”指令,只是在CS寄存器中装入可读段描述符时才能有效。,图8-24 实地址计算时的检查,三、特权级保护链的使用方法 如前所述,80286具有用03个序号所表示的4个特权级组成的保护链结构。这个结构如图8-6所示,每个任务都是分离的。其中特权级0是最高可靠性的特权级;3级是最低特权级。,在特权级0级中,通常配置操作系统的内核。在内核中,使用特权指令进行与CP
27、U密切相关的那些处理。在特权级1级中,进行不属于内核的系统标准服务程序处理。在特权级2级中通常配置对操作系统进行扩充的用户化的程序。这些特权级的程序对内核的安全性不会产生什么影响,因而从应用程序中将它们分离出来。,特权级3级分给应用程序,从而可以禁止应用程序对特权级高的OS程序进行不正崐确的存取操作。4个特权级不是都必须使用,究竟采用几个特权级别应视实际OS不同而不同。但是,为了使系统可以执行特权指令,特权级0级通常是必须使用的。,四、特权级对数据存取的限制 如前所述,在段寄存器装载时,为了要进行特权级检查,采用了表示特权级别的三个量值DPL、CPL、RPL。DPL(Descriptor Pr
28、ivilege Level:描述符特权级),如前说明,存放在DPL域中。,CPL(Current Privilege Level:现行特权级),用它来表示现行程序代码段的特权级别(但除一致段以外),存放在CS及SS段寄存器的选择器域。RPL(Requested Privilege Leve1:请求特权级),它用选择器的RPL域表示。,五、任务内的控制转移 在一个任务中进行控制转移有以下三种情况。(1)段内转移 不访问描述符,不改变特权级,使用JMP/CALL/RET指令,实现段内控制转移。(2)同一特权级内的段间转移 在同一特权级内的段间转移又可分成如下三种情况。,访问代码段描述符的长转移指令
29、JMP/CALL/RET和NT位=0时的IRET指令;访问调用门的长转移JMP/CALL指令;访问中断/陷井门的INT指令,外部中断,异常中断。,(3)特权级间的段间转移 特权级间的段间转移也有以下三种情况。访问调用门的长CALL指令;访问中断/陷井的INT指令,外部中断,异常中断。在(1)的情况下,因为不访问描述符,故没有涉及特权级有关的问题。,在(2)和(3)的情况下,为了存取描述符,必须受特权级控制,特别是用CALL指令向更高的特权级转移时,就必须使用调用门。另外,在中断发生时,就必须通过中断/陷井门。有关控制转移的说明如表8-5、8-6及图8-25,8-26所示。,表8-5 控制转移分
30、类,表8-6 控制转移的类型,图8-25 任务内控制转移和调用门,图8-26 任务内控制转移的有效性,1.段间直接控制转移(同一个特权级内)如图8-27所示,在访问代码段的长JMP/CALL/RET指令和IRET指令(NT=0)中,当选择器所指定的段描述符装入CS段寄存器的高速缓冲器时(注意,该选择器可能是操作数,也可能是位于堆栈的返回地址的段选择器),这个装载操作只有在选择器的RPLCPL,且DPL=CPL的情况下才能进行。,=,图8-27 段间直接控制转移,2.利用调用门进行段间的间接控制转移(不同特权级之间或同一特权级内)通常使用长转移JMP/CALL指令来访问调用门,从程序角度来看,与
31、直接对代码段的描述符进行存取的情况没有什么不同。用CALL指令来访问调用门,就有可能使控制权向比调用者的特权级更高的代码段转移。但是,用JMP指令访问调用门时,只能使控制权在同一特权级的代码段间进行转移。总之,为了通过调用门将控制权移向更高的特权级,必须使用CALL指令。,图8-28 用调用门进行段间间接转移,3.调用门的堆栈处理 为了保证系统的安全性,一个任务内的各特权级可以各自设置独立的堆栈。这样,为了能够满足较低特权级提出的处理要求,就要有足够大的堆栈空间。如果不这样处理,而想使所有特权级都使用同一个堆栈段,那么在用户程序出现堆栈溢出情况下,会引起OS的异常处理。而这异常处理又将再次引发
32、堆栈溢出 堆栈来传递参数的情况如图8-29所示。,图8-29 堆栈转移和参数的传递,4.特权级之间的返回 在执行长RET指令或IRET指令(NT=0)时,若压入堆栈的返回地址,其CS选择器中的RPLCPL的条件不能满足,则这些指令就不能执行。也就是说,只有在返回目的特权级与现行的特权级相同或较低时,才能执行返回指令。在堆栈中存放的CS选择器的RPL指出了要返回的目的特权级。若RPL=CPL,表示同一特权级内返回;若RPLCPL,则表示不同特权级之间返回。,=,=,5.一致代码段 通常,调用较高特权级代码段时,必须通过门。但是,如果特权级高的段是一致代码段,此时既使不使用门也能调用。也就是说,一
33、致代码段不是在它本身的DPL特权级上,而是在调用者的特权级上执行。总之,CPL不变,堆栈段也不切换。因此,从应用程序角度来看,是可以对它进行存取操作的。这种处理方法适用于不希望给予高特权级的OS中的那些过程代码段等。在图8-30中,用图示方法表示了一致代码段的功能。,图8-30 一致代码段功能示意图,六、用软件强化保护功能 至此,已对硬件保护机构的功能作了详细的叙述。但是硬件保护机构的功能并不能完成全部的保护功能。例如,检查选择器参数的有效性问题就是一个例证。为弥补硬件的不足,准备了ARPL指令,通过软件来进行检查,这是很有必要的。,1.用ARPL指令确认选择器参数的有效性 首先看一下图8-3
34、1中使用非法参数的例子。图中特权级3的应用程序将指示OS数据段(特权级为0)的选择器(预先用程序使RPL域置为0),以参数方式压入堆栈。接着调用调用门,将控制转移到特权级0的过程DELETE(这个过程的最前面一条指令“ENTER”的功能与“PUSH BP”、“MOV BP,SP”二条指令的作用相同)。因此,以参数方式传递的选择器就可装入DS寄存器。,图8-31 使用非法选择器参数的实例,2.用VERR及VERW指令检查段地址属性 VERR和VERW指令都带有用来指定选择器的操作数(寄存器或存贮器),用以对选择器所指定的描述符,并由其所确定的段属性进行检查。当DPLmax(CPL,RPL),且操
35、作数的选择器所指定的描述符是数据段或可读段的描述符时,用VERR指令可使零标志位(ZF位)置位;若不满足上述条件,零标志位就清零。在可读一致代码段的情况下,由于无论从哪一个特权级,都可以对它进行读操作,故没有必要进行特权级检查。,当DPLmax(CPL,RPL)时,且操作数的选择器所指定的描述符是可写数据段的描述符时,使用VERW指令就可使零标志位置位;若不是可写数据段则零标志位崐就清零。,3用LSL及LAR指令确认段的有效范围 LSL及LAR指令都带两个操作数。第一个操作数是寄存器;第二个操作数是存贮器或寄存器。在执行LSL指令时,把第二个操作数中的选择器所指定的描述符的界限域装入到第一操作
36、数的寄存器中。,8-6 任 务 切 换,一、任务状态段 如前所述,各任务必须有存放任务状态的TSS段。TSS段的基地址和界限由TR的缓冲器域(从TSS描述符加载得到)所指定。TSS的示意图如图8-33所示。,图8-33 任务状态段(TSS),二、任务切换 任务切换发生在下述4种情况。用长JMP/CALL指令的目的选择器访问TSS描述符(忽略目的地址的偏置量);当标志字的NT位为“1”,执行IRET指令时,TSS内的返回连接选择器作为新任务的TSS选择器;用长JMP/CALL指令的目的选择器访问任务门(忽略目的地址的偏移量),新任务的TSS选择器由任务门加载;中断发生,访问IDT中的任务门,新任
37、务的TSS选择器由任务门加载。,在上述发生任务切换的起因中,和受特权保护。若目的选择器所访问的TSS描述符和任务门中的特权级参数不能满足DPL(CPL,RPL)关系,则不能进行任务切换,并发生一般保护异常中断。如果经检查,允许对TSS进行正常的存取,那么再经过以下所示三个步骤,即可实现任务的切换。,第一步:将各寄存器内容写入现行任务TSS的可动部分。第二步:将新任务的TSS选择器和其所指定的TSS描述符装入TR的选择器域和缓冲器域,并使该TSS描述符的B位置“1”。第三步:将新任务的TSS的动态部分内容分别装入对应的各寄存器。,图8-34 任务之间的控制转移a,图8-34 任务之间的控制转移a
38、,三、任务的链接 当用CALL指令及中断启动“不忙”的新任务时,该任务的标志寄存器的NT位就置位。此时,原任务的TSS选择器将拷贝到新任务TSS内的返回连接选择器域。以后,当新任务处理结束,为了返回原来的任务可使用IRET指令。,在由JMP指令而引起任务切换时,由于该指令执行的前提是不返回原任务,因此新任务的NT位将被清除,返回连接选择器也不设定。另外,原任务的TSS描述符的B位被清除。图8-35示出了由于任务切换,B位、NT位、及返回连接选择器的变化情况。,图8-35 由于任务切换,状态位变化情况,四、由任务门进行任务切换的优点 利用任务门进行间接的任务切换与利用任务门内的TSS选择器所指定
39、的TSS描述崐符进行直接的任务切换,这两种切换方式都能得到同样的效果。当使用任务门时,对任务的控制更具有灵活性。所有的TSS描述符必须配置在GDT表中,为了限制任务只能向特权级更高的任务切换,通常其DPL应预置为0。另外,若将任务门预先放置在某一任务的LDT表中,那么无论从其任务还是从专用的特权级以外的级别都可进行任务切换。,8-7 中 断,一、中断源 中断源如表8-7所示,分为外部中断源和内部中断源。,表8-7 中断源分类,二、实模式的中断 1.中断矢量表 在实模式中,与8086情况相同,配置在物理地址最前面的1 K字节(00 000H003FFH)。位于中断矢量4倍的地址中存放着两个字的指
40、示器(按IP、CS顺序存放),由它来指定处理程序的入口地址。事实上,80286系统的中断矢量表比8086时更具灵活性,如图8-36所示,中断矢量表的基地址和界限由IDTR来确定。,图8-36 实模式中的中断矢量表,2.在实模式中添加的中断类型 如表8-8所示,实模式的中断类型与8086情况相比,增加了许多。在这个表中,“返回地址”栏目指示了在中断发生时压入堆栈的断点地址。所谓“第一字节”是指引起中断的指令的首地址。“下一条指令”是指引起中断的指令后跟着的下一条指令的首地址。所谓“无关”是指中断源和发生中断时所执行的指令没有有机的关系。,表8-8 实模式中断,(1)中断8(中断表界限过小异常中断
41、)如图8-37所示。譬如,为了进行保护模式的初始设定,在用LIDT指令改变IDT的界限以后,发生了中断n(n255)。若与这个中断对应的入口地址指示器(CS:IP)不在IDT的界限之内(IDT界限n4+3的情况),就会产生13类型中断。,图8-37 在实模式中IDT界限的影,(2)中断13(段越界异常中断)该类中断除在中断8中已说明的原因以外,由于下述原因也可引起中断。在以段偏移地址为FFFFH对存贮器进行字操作时,字的第二字节超出了段的有效范围。指令代码的第二个字节以后的内容超出了段最大偏移地址FFFFH,即在取指令代码操作中发生了段的越界,也会发生13类中断。在SP寄存器的值为奇数时发生了
42、段越界,例如,在SP=5时执行PUSHA指令引起了该中断。,三、保护模式的中断 1.中断描述符表(IDT)在保护模式中,如图8-38所示,由配置在中断描述符表(IDT)内的中断门可知,至多可有256种中断。在实模式或保护模式的特权级0中可以用LIDT指令对IDTR进行初始设定。,图8-38 保护模式中的中中断描述符表(IDT),在IDT中可以放置3种门:中断门、陷井门、任务门。如图8-39所示,当通过中断门和陷井门进行中断处理时,中断处理(中断过程)将在被中断的任务内执行,仍使用原任务文本。通过任务门进行中断处理的情况如图8-40所示。中断处理程序与被中断的任务文本不同,它使用独立的程序文本。
43、,图8-39 通过中断门/陷井门的中断处理,图8-40 通过任务门的中断处理,2.错误码 在保护模式中,发生异常的起因通常用一个代码字来指示,不同的错误对应着内容不同的代码,故称它为错误码。该错误码在发生异常中断时,被压在堆栈中。错误码的格式如图8-41所示,虽然看起来与选择器的格式很相似,但是低2位不是RPL域,位0为EXT位,位1为IDT位。,图8-41 错误码的格式,图8-42 访问IDT得到的错误码格式,3.由中断门和陷井门引起的中断处理 中断门和陷井门都配置在IDT表内,门内的选择器域和偏移地址域可指定对应的中断过程。这两个门的不同之处是IF位的状态,在中断门时IF=0,禁止可屏蔽中
44、断;在陷井门时不改变IF位的状态,允许可屏蔽中断。中断发生后的堆栈情况如图8-43所示。在图中还表示了带有错误码的异常中断的情况。,图8-43 带有错误码的异常中断的堆栈情况,表8-9 中断时的特权保护,4.任务门的中断处理 在中断方面,任务门与中断/陷井门比较有如下几个优点。用任务门进行任务切换时,被中断任务文本的保护以及中断任务的加载都可以自动地完成。而在中断/陷井门中,只保护标志寄存器,CS,IP三个寄存器的内容(特权级变化时,原级别的SS和SP的内容也会保护)。,中断任务和被中断的任务完全隔离。在使用中断/陷井门的情况下,中断过程的特权级与被中断程序的特权级相比,必须是相同的或是更高的
45、才行。中断类型8的表界限过小异常及中断类型10的无效TSS异常,必须通过任务门在中断任务内处理。,5.在保护模式中增加的中断类型 与实模式相比,保护模式增加了较多的中断类型,如表8-10所示。它改变了实模式中的8类中断和13类中断功能,进一步使用了在实模式中预留的1012类中断。另外,与实模式情况相同,在中断类型031中未定义的中断类型是为以后使用而预留的。,表8-10 保护模式的中断,(1)中断5(界限检查异常中断)BOUND指令有2个操作数,第一个操作数为16位寄存器,第二个操作数为存贮器变量。(2)中断6(无效操作码异常中断)如果执行如下的无效指令,这种中断就会发生。操作码是没有定义的(
46、包括在实模式中使用保护模式的指令);必须使用存贮器操作数的指令,使用了寄存器,例如,“LGDT AX”在对源程序汇编时,会给出错误信息。包含前缀的指令总长度超过10个字节。,(3)中断7(扩展处理器无效异常中断)当下述任何一种情况出现时,这种异常中断就会发生。MSW的EM位为“1”时,执行了ESC指令。利用该功能,可仿真80287软件;MSW的MP位和TS位都为“1”时,执行了ESC或WAIT指令,就会发生该异常中断。MSW的EM和TS都为“1”时,执行了ESC指令。表8-11表示了MSW有关位的功能,表8-12还表示了与异常有关的MSW中3位(TS,MP,EM)相互组合时的含义。,表8-11
47、 MSW各有关位功能,表8-12 MSW有关各位组合的含义,(4)中断8(两次错误异常中断)所谓两次错误异常中断,就是某一个异常中断发生后,当启动该异常中断处理程序时,又发生了另一个异常中断。常见的两次异常中断的例子有如下几种。一次错误异常处理程序的代码段不在实存上,即该代码段描述符的P位被清除;一次错误异常处理中,堆栈发生了溢出,没有足够的堆栈空间压入标志寄存器,返回地址,错误码等。,(5)中断9(扩展处理器段越界中断)在具有多个字操作数的ESC指令中,如果存贮器操作数的第一个字处于段的范围之内,而第二个字以后,无论哪一个超出了段界限的范围,在80287执行ESC指令时,就会产生这类中断。,
48、图8-44 80287占用的I/O地址空间,(6)中断10(无效TSS异常中断)当系统处于以下状态时,就会发生该异常中断。TSS界限小于43(在任务切换时被检查出来)。TSS内的LDT选择器或其所指定的描述符无效(LDT描述符的P位为“0”也包含在内)。TSS内的段选择器(SS、CS、DS、ES的选择器)或由它们所指定的描述符,无论哪一个无效(任务切换时被检查出来)。,特权级0,1,2的初始堆栈值(SS:SP)无论哪一个无效(在执行CALL指令或由中断引起的特权级控制转移时被检查出来)。返回选择器或它的描述符无效(由执行IRET指令进行任务切换时被检查出来)。,(7)中断11(段不存在异常中断
49、)由于以下任何一个原因,都会发生这种异常中断。在CS、DS或ES的段缓冲器中,装入了表示段不存在的代码/数据段描述符(P=0)。对于SS来说,则不会发生这种异常中断,而是产生堆栈异常中断(中断12)。访问了P位为“0”的门描述符或TSS描述符。使用LLDT指令将P=0的LDT描述符装到了LDTR中。,(8)中断12(堆栈异常中断)这种异常中断是由于下述的超越堆栈界限或堆栈段不存在而产生。使用SS寄存器访问堆栈时,进行了超越界限的存取。P位为0的数据段描述符装入了SS寄存器的段缓冲器。,(9)中断13(一般保护异常中断)这种异常中断是除去上述异常中断以外,由于违反保护约定而产生的中断。下面举几个
50、这种违反保护约定的例子。对CS、DS、ES寄存器所指定的段界限进行越限存取。进行了超越描述符表界限的存取操作;对代码段或专供读出的数据段进行了写操作;对专用代码段进行了读操作;,在控制转移时,将数据段描述符装入了CS寄存器;将专供读出用的数据段装入了SS寄存器;将门描述符及TSS描述符装入了SS、DE、ES寄存器;将执行专用代码段描述符装入了SS、DS、ES寄存器;使用了无效选择器所加载的DS或ES寄存器,对存贮器进行存取操作;10 对“忙”的任务进行了任务切换;11 在特权级检查中发现了错误。,(10)中断16(扩展处理器错误异常中断)80287和8087一样,在ESC指令执行时可以检测出6