《《微处理器》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《微处理器》PPT课件.ppt(189页珍藏版)》请在三一办公上搜索。
1、第二章 微处理器,2.1 内部结构2.2 寄存器组2.4 工作模式2.5 中断与异常2.6 存储管理2.7 多任务与多处理2.8 高速缓存2.9 引脚和功能2.10 总线周期,本章学习目标,80486各部件的功能和相互关系,Pentium在体系结构上的新特点。32位CPU的寄存器以及和16位CPU的区别。在保护模式下中断和异常。在实模式、保护模式和虚拟8086模式下存储管理。任务设置,任务转换过程及检查的内容。80486和Pentium高速缓存的结构和功能。80486和Pentium引脚的功能及差别。80486和Pentium主要总线周期时序、总线状态变化及区别。,2.1 内部结构,2.1.1
2、 80486的内部结构2.1.1 Pentium的内部结构,2.1.1 80486的内部结构,2.1.1 80486的内部结构,BIU:与芯片总线、指令预取部件、Cache部 件相连,执行总线访问请求。读:预取指令、读内存、Cache行填充 写:写M和I/O、Cache通写写内存;写缓冲(432b)。指令预取:总线空闲时产生存储器地址向Cache或通过BIU向内存取16B代码命中Cache放入32B的指令队列中产生预取周期 跳转、中断、调子程时清空预取队列。,2.1.1 80486的内部结构,指令译码:从指令预取队列取机器码转换成控制信号。两步译码:指令执行时要访存,产生 总线 周期取存储器操
3、作数。指令译码由机器码产生对其 它处理部件的控制信号。控制部件:对整数、浮点运算和分段部件控制整数部件:9个32位REG、1个64位桶形移位 器、ALU。1T内完成整数传送、加减运算和逻辑操作,分段和分页部件:进行存储器保护和虚存管理,FPU:增强80387,Cache:L1Cache:8KB 数据和指令Cache。L2Cache:128KB256KB,逻辑地址,分段,段Cache,2.1.1 80486的内部结构,线性地址,分页,TLB,物理地址,CPU,64位,FPU,64位,Cache,MEM,BIU,32位,32位,成组传送,L1Cache,128b,命中,预取部件,不命中,内存,未命
4、中行填充,2.1.2 Pentium的内部结构,2.1.2 Pentium的内部结构,8KB的指令Cache和8KB数据Cache 各自的TLB Cache和BIU的DB是64位 支持突发式总线周期和流水线总线周期,1.哈佛结构的Cache,预取顺序请求 预取B1 线性预取 无分支 BTB预测 有分支 动态分支预测算法 预取B2 预取分支后指令,2.1.2 Pentium的内部结构,记录分支地址,一个工作,从Cache或内存预取指令,2.BTB和预取B,2.1.2 Pentium的内部结构,2.BTB和预取B,预取顺序请求,预取B1,BTB预测,动态分支预测算法,无分支,有分支,线性预取,预取
5、分支后指令,预取B2,纪录分支地址,分支指令,2.1.2 Pentium的内部结构,指令 控制信号 预取B 指令译码器 CU IU、FPU 微码 控制ROM IU(U、V流水线)操作序列,3.指令译码、控制ROM和CU,2.1.2 Pentium的内部结构,4.超标量体系结构IU 超标量处理机:1T内同时发射多条指令,资源重复,空间并行,提高指令执行的平均速度。超流水线处理器:1T内分时发射多条指令,时间重迭,时间并行,提高指令执行的平均执行速度桶形移位器。U流水线:地址生成、REG、ALU、数据Cache接口;整数或浮点指令/1T共享。V流水线:地址生成、REG、ALU、数据Cache接口;
6、简单整数,FXCH/1T5.流水线式FPU 组成:控制器、REGS、加法器、乘法器、除法器、80位宽通道 速度:8级流水线,每T完成12个浮点运算,快80486十倍以上,2.2 寄存器组,通用寄存器从16位 32位。段寄存器仍为16位,增加2个:FS、GS;每个段寄存器都有一个描述符寄存器。32位EIP和EFLAGS。增加了CR、DR、TR、系统地址寄存器和 Pentium的专用模型寄存器。,2.2.1 通用寄存器,2.2.2 段寄存器和描述符寄存器,2.2.3 指令指针,IP:16位操作方式:实地址模式、虚拟8086模式。EIP:32位操作方式:保护模式。(E)IP保存下一条将要执行的指令相
7、对于段基址的偏移量。,2.2.4 标志寄存器EFLAGS,32位中位1为1,位31位22,位15,位5,位3为0。其它16位分为状态标志,控制标志(DF)和系统标志。21 20 19 18 17 16 14 1312 11 10 9 8 7 6 4 2 0,2.2.5 控制寄存器,2.2.5 控制寄存器,MOV CRX,r32;MOV r32,CRX1.CR0 控制或指示用于整个系统条件的标志,低16位为MSW。0 PE:保护模式允许 PE1 系统在保护模式下工作 PE0 系统在实地址模式工作,2.2.5 控制寄存器,1 MP:监视协处理器 MP1并且TS1,WAIT指令发生异常7:协处理器不
8、可用Fault。2 EM:仿真协处理器(80386用80486以上FPU在片内)。系统有FPU:EM0,MP1 系统无FPU:EM1,MP0 遇到ESC前缀的FDU指令,发生异常7。异常7程序:模拟ESC指令在无FPU时执行协处理器。3 TS:任务转换。任务切换完成,CPU自动把TS置1。若MP1,在遇到FPU opcode或Wait指令可正常工作。任务转换时未切换FPU的运行状态,只是在新任务需要FPU时才进行切换。,2.2.5 控制寄存器,4 ET:协处理器类型(仅对80386)ET1,FPU为与80387兼容的32位FPU。ET0,FPU为与80386兼容的32位FPU。上电时检测803
9、87的 引脚,设置ET。软件设置ET。31 PG:页管理使能 PG1 分页存储管理 线性地址 页变换 物理地址。PG0 无分页管理 线性地址 物理地址。,2.2.5 控制寄存器,以下各位对80486/Pentium有效5 NE:数据错误异常控制位 NE1 数字错误引起异常16,实现与80386兼容的数字异。NE0 0,忽略数字异常。1,CPU停止工作,等待由。产生的中断模拟8087/80387的。16 WP:写保护 WP1 核心代码不能对用户级页面进行改写。WP0 核心代码能够对用户级只读页进行改写。,2.2.5 控制寄存器,18 AM:对齐标志控制位 AM1 允许对齐检查 CPU对齐检查,非
10、对齐 EFLAGS的AC1 时,要产生异常17,CPL3的MEM操作 对齐检查异常。29 不通写位 NW(Not Writethrough)NW0:允许通写,既写Cache,又写内存。NW1,不许通写(此时CD1,Cache不使 能)。,2.2.5 控制寄存器,30 CD:Cache不使能。CD0,Cache使能。CD1,Cache作废 访问Cache未命中,则不填充Cache。访问Cache命中,Cache仍可工作。完全使Cache停止工作,要刷新Cache。CD0,NW0,Cache才能正常工作,产生Cache的有效周期。2.CR2:页故障的线性地址。CR0中PG1时CR2才有效 某页不在
11、内存中,页转换时发生分页错误,这是CPU将缺页的线性地址保存在CR2中。,2.2.5 控制寄存器,3.CR3:页目录表基址及页级外Cache使能和写属性。CR0中PG1时CR3才有效。位4:页外Cache不使能PCD位,控制使外部页Cache是否工作的引脚PCD。PCD1,对页目录不进行外部高速缓存。PCD0,对页目录进行外部高速缓存。PCD位驱动CPUPCD引脚控制外部Cache工作。位3:页通写位PWT。PWT1,外部Cache对页目录通写,PWT0,回写。PWT位驱动CPUPWT引脚控制外部Cache工作位31位12:当前任务的页目录表基址。,2.2.5 控制寄存器,4.CR4:Pent
12、ium扩充,位31位7保留。0 VME:虚拟8086模式扩充。VME=1,允许虚拟8086模式扩充,即允许虚拟8086中断,在VM8086下,VME=1,支持VIF。1 PVI:保护模式虚拟中断。PVI=1,允许保护模式虚拟中断。在保护模式下,VME=1,支持VIF。2 TSD:禁止RDTSC指令,时间日期标记禁止。TSD=0,读时间标志计数器指令RDTSC可在任何特权级上执行。TSD=1,RDTSC仅在CPL=0的程序执行,否则发生异常13,即RDTSC为特权指令。,2.2.5 控制寄存器,3 DE:允许调试扩充(Debug Extensions)。DE=1,允许支持I/O断点,I/O断点有
13、效。4 PSE:允许页面大小扩充。PSE=1,允许采用4MB、2MB页。5 PAE:允许物理地址扩充。PAE=1,允许采用32位以上物理地址,否则 只用232物理地址。6 MCE:允许机器检查异常。MCE=1,允许机器检查异常功能有效。,2.2.6 系统地址寄存器,2.2.7 调试寄存器DR,CPL=0的代码段MOV DRx,r32 MOV r32,DRx1.断点寄存器:DR0DR3 每个寄存器存放一个断点的线性地址。断点的发生条件由DR7分别设定。2.调试控制:DR7(1)4个断点发生的条件和访问类型。(2)I/O断点。(3)精确断点。(4)GD位使能由DR6.BD标志的调试寄存器保护状态。
14、GD位进入调试异常处理程序时由CPU清0,这允许 处理程序任意访问调试寄存器。,2.2.7 调试寄存器DR,3.调试状态:DR6(1)B3B0:在DR、LEN、R/W中的条件为真,Bi置1,即使断 点未被G或者L允许,说明断点已经发生,不一定能够进入 调试异常程序。(2)BD:下条指令将读/写调试寄存器,而它们又被Intel在线仿 真器使用时置1,并发生异常1(一般检测故障)。(3)BS:为1表示异常1是由EFLAGS中TF1时单步陷阱引起的。单步方式是最高优先级的调试异常。当BS1时,任何其他 调试状态位也能被置。(4)BT:为1表示因转换到一个TSS中T1的任务而发生的异 常1。DR7中没
15、有允许/不允许这种异常的位。仅受TSS中T位 使能。,2.2.7 调试寄存器DR,4.DR4和DR5 当CR4.DE0时,Pentium用DR4和DR作为 DR6和DR7的别名寄存器。当CR4.DE1时,引用DR4和DR5将产生未定义的操作的异常。,2.2.8 测试寄存器,TR0:未定义。TR1:奇偶校验逆寄存器。TR2:指令Cache结束位。TR3、TR4、TR5:Cache数据、状态、控制测试寄存器。TR6、TR7:TLB命令,数据测试寄存器。,2.2.9 Pentium模型专用寄存器,控制:可测试性、执行跟踪、性能检测、机器检查错误。R/W:用MOV指令直接访问其中TR会发生异常6,使用
16、指令 RDMSR和WRMSR。,2.4 工作模式,Intel的32位微处理器有三种工作模式:实地址模式保护模式虚拟8086模式。,2.4.1 实地址模式,1.实模式的复位进入 RESET=15T当 复位:350T400T,控制ROM和大部分随机逻辑当 RESET=78T 自测试:220T,然后复位且 Pentium INIT或 80486 AHOLD或 80386,2.4.1 实地址模式,寄存器的状态 EDX 80486:00000400分级ID Pentium:00000500分级ID CR0,0 1 1 0 0 0 1 0 0 0 0,2.4.1 实地址模式,2.Pentium复位和自测试
17、启动(1)Pentium的复位方式,2.4.1 实地址模式,(2)REGS的状态 见表2.4(3)引脚的状态 高电平:低电平:HLPA、BREQ、BP3、BP2、PRDY、IBT、IU、IV、BT3BT0 高阻抗:D3D0、DP7DP0 未定义:A31A3、AP、PM0/BP0、PM1/BP1、W/、M/、PCD、PWT、TDO、SCYC,PCHK,2.4.1 实地址模式,(4)内部自测试 时间:220 组成:硬件自测试和微代码自测试 方法:对Cache、TLB和BTB进行两项阵列测试:原码和补码。常数ROM测试:使用微代码增加不同常数,检查结果值与存储值是否相等。复位结束时,程序从FFFFF
18、FF0H开始执行,段间调用/转移指令时,转到000FFFFFH以内的地址。,2.4.2 保护模式,选择符,描述符,描述符的分类:,段描述符系统控制描述符,数据段描述符代码段描述符,堆栈段描述符一般数据段描述符,系统描述符门描述符,任务状态段描述符特殊系统段描述符,任务门描述符调用门描述符中断门描述符陷阱门描述符,2.4.2 保护模式,1.选择符2.段描述符:数组、把逻辑地址变换成物理地址,定义MEM用法,控制转移,切换任务,2.4.2 保护模式,(1)段基址:段起始的32位线性地址(2)段限长:20位限长与G位共同计算(3)G:G0 限长单位为1B 限长1MB 最大地址000FFFFFH。G1
19、 限长单位为1P(4KB)限长4GB 最大地址 FFFFFFFFH 表中20位段限长值左移12位(即乘以212或1000H)加FFFH。(4)D/B D 代码段:1 32位操作和寻址;0 16位操作和寻址。B 数据段:1 32位数据;0 16位数据。堆栈段:1 32位堆栈操作,ESP;0 16位堆栈操作,SP。(5)访问权限:,2.4.2 保护模式,P 存在位:P1,段在内存中;P0,段不在内存中,访问该段引起异常。DPL:描述符特权级,该段被访问的特权级,从0到3特权级降低。S 描述符类型:S1,代码段,数据段,堆栈段。S0,系统控制,TSS、LDT、门描述符。E 段可行性:E1,代码段,可
20、执行;E0,数据段,不可执行。,2.4.2 保护模式,ED/C和W/R 数据段:ED W ED:扩展方向 ED0 向上 偏移量段限长。W:可写性 W0 不可写;W1可写 代码段:C R C(Confirming):C1 要证实代码段,访问和被访问特 权级不总是相同;C0 非证实代码段,访问和被访问特 权级总是相同A(Accessed):访问过 A1 段被访问过;A0 段未被访问过,2.4.2 保护模式,3.系统描述符(与门描述符一起包含在系统控制和描述符中)段基址、段限长、G位和段描述符相同 访问权限字节不都相同,2.4.2 保护模式,2.4.2 保护模式,4.中断描述符(又称门描述符),2.
21、4.2 保护模式,P 门描述符符的有效性:P1,有效;P0,无效DPL:描述符特权级TYPE:4,6,7 286调用门、中断门、异常门 C,E,F 32位调用门、中断门、异常门 5 任务门字计数:调子时,须从调用程序级堆栈拷贝到子程级堆栈去的参数个数(16/32栈分别指字/双字个数),2.4.2 保护模式,选择符和偏移量对中断、异常、调用门表示服务程序或子程的首址。对于任务门,偏移量无效,选择符指向任务的TSS描述符。TSSD时系统描述符:段线性基址、限长和属性 段线性基址和限长确定TSS的位置和大小 中断,异常,调用门中的选择符选中某一个代码段描述符代码段D中的32位线性基 址门D中的32位
22、偏移量形成例程或子程的首地址。,2.4.2 保护模式,5.描述符表,2.4.2 保护模式,2.4.2 保护模式,6.保护:特权级保护、存储器保护、OS保护(1)特权级保护:数据存储、控制转移、指令集的限制,软件之 间实现隔离。(最高)PL0 PL1 PL2 PL3(最低)OS内核 系统服务 OS扩展 App特权级低的程序 允许向外提取数据 调用特权级高的过程,2.4.2 保护模式,特权级32位微处理器采用4级特权级,操作系统为0级,系统服务为1级,操作系统扩展为2级,用户程序为3级。CPL:当前代码段具有的访问特权级,CS中最低2位。通过描述符转移控制到新代码段时,CPL改变。CPL0的任务能
23、够访问GDT及任务LDT中描述符对应的数据段。DPL:段被访问特权级 非证实代码段 CPLDPL。DPL0或LDT中描述符,CPL0的程序可访问。DPL3,所有程序都可以访问。,2.4.2 保护模式,RPL:选择符的特权级,指向同一描述符的选择 符可有不 同RPL对描述符指向段的访问须RPLIOPL时,执行I/O敏感执令产生保 护异常13。IN、OUT、INS、OUTS、STI、CLI和 LOCK前缀EPL:有效特权级 EPLMAX(CPL、RPL),特权级检查的原则 数据段:只允许同级和高级的代码段访问。代码段:只允许向同级和更高级别的代码段转移控制。堆栈段:其特权级和执行代码段相同,控制转
24、移时随之变化。特权级检查的规则 a.读/写数据类段规则 现行代码段堆栈操作:CPLDPL 现行代码段R/W数据段:CPL=DPL,否则发生异常13。,2.4.2 保护模式,2.4.2 保护模式,b.数据类段寄存器装入规则 装入堆栈段选择符:CPLRPLDPL,否则发生异常12。装入数据类段选择符:EPL=中断/异常处理程序DPL 异常:异常门的DPL=CPL通过门的段间调用:EPL=代码段的DPL任务转换时,转入任务的CPL=任务门的DPL JMP:只能转移到与CPL具有相同级的段 CALL:使用调用门把控制转移到更高级代码段 RET:把控制转移到更低级代码段,2.4.2 保护模式,d.IOP
25、L规则 IO敏感指令:IN、OUT、INS、OUTS、STI、CLI和LOCK前缀 CPL=IOPL TSS的I/O位图允许,否则将发生异常13。e.特权级指令使用规则 仅CPL0的代码段才能执行如下特权指令,否则发生异常13。CLTS、HLT、LGDT、LIDT、LLDT、LMSW、LTR;涉及CR、DR、TR的MOV指令,RDMSR、WRMSRf.页访问规则 违反页表项、页目录项规定权限或访问不存在页将发生异常14。,2.4.2 保护模式,(2)存储器保护MOV、POP、LDS、LES、LFS、LGS、LSS指令将选择符装入DS、ES、FS、GS、SS;JMP、CALL、RET、IRET指
26、令进行段间转移、更新CS时保护检查:段类型、R/W权限、段限长、存在性。段类型检查 代码段选择符 CS 可写数据段选择符 SS 可读代码段/数据段选择符 DS、ES、GS、FS 读写权限检查 代码段/只读数据段不能写 不可读代码段不能读 违反读写权限将发生异常13,2.4.2 保护模式,段限长检查 对数据段和代码段,ED0,向上扩展,偏移量段限长;堆栈段越限发生异常12,其它数据段越限发生异常13。存在性检查 将P0的段选择符 SS,发生异常12;将P0的段选择符 其它段REG/中断门/异常门,发生异常11;访问的段无效(段选择符为全0)时,发生异常13;访问的页不在内存时,发生异常14。,2
27、.4.2 保护模式,(3)对OS的保护 子程在要证实代码段,用户程序调用它时,CPL不变化。有效保护OS的数据结构。子程在非证实代码段,用户通过调用门进入子程时,CPL将提高到非证实代码段的0级。用户程序可以破坏未加保护的OS的数据结构,子程可以防止用户程序对OS的破坏。PROC FAR MOV EBP,ESP EBP0处是EIP的值 MOV AX,WORD PTREBP4;0级堆栈中断点处CS值取调用者的CPL ARPL SELECTOR-PARM,AX;CPL与用户传给OS的指针选择符RPL比较,使指针选择符的RPL为两者特权级低者 用户传给OS的指针中选择符RPL与调用者段选择符中的CP
28、L比较取特权级低者。,2.4.2 保护模式,(4)保护模式下的转子与返回 无任务转换时段间调用的转子与返回 CALL 段值:偏移量 子程的段选择符值 段描述符中C 代码段证实性子程在证实代码段,调子不改变CPL,段选择符 子程段描述符子程在非证实代码段,若CPLDPL,段选择符 子程段描述符 若CPLDPL,段选择符 调用门描述符 此时要进行系列保护属性检查:调用非证实代码段中更高级子程序。,2.4.2 保护模式,现行程序CS,16位可见选择符,不可见描述符 CPL,CALL选择符,目标段选择符 RPL,选择符装入CS并指向调用门(在GDT或LDT中),调用门描述符,可执行段描述符,Selec
29、tor Offset Offset DPL Count,调用门是实现任务从CPL级到更高级的间接控制转换,它的目标选择符又装入CS,指向调用的代码,Base LimitBase Limit DPL Base,段描述符,它又被缓存。它的基址和调用门中偏移量定位被调用的子程入口地址,2.4.2 保护模式,调用门检查 调用程序 CPL=调用门DPL。调用程序选择符中RPL=调用门DPL,否则发生异常13。调用门中P1,否则发生异常11。调用门不越限,否则发生异常13。子程代码段检查,不合法时发生异常13。选择符非全0 描述符不越限 可执行代码段 选择符中RPL=DPL 子程的首址中新EIP不越限,2
30、.4.2 保护模式,子程序堆栈段检查 下列条件都要符合,否则发生异常10。选择符非全0;选择符中RPL子程代码段DPL;堆栈段DPL子程代码段DPL;堆栈段为可写数据段。下列条件都要符合,否则会发生异常12。描述不越限;堆栈段须存在;堆栈段地址空间=参数个数416B(32位模式)=参数个数48B(16位模式)CALL指令的堆栈操作 从TSS中取具有子程特权级的堆指针 SS:ESP,2.4.2 保护模式,压调用程序的:全0 旧栈SS选择符 旧栈ESP值压调用门中的:参数1“字计数”。参数M压调用程序的:全0 断点CS选择符 断点EIP从调用门中取子程所在段选择符 CS 子程代码段中DPL CS中
31、CPL 子程代码段偏移量 EIPRET m中m使参数个数的4倍,2.4.2 保护模式,2.4.3 虚拟8086模式,1.虚拟8086模式与实模式的区别 虚拟8086模式是保护模式,可运行多个OS 实模式是整个CPU的工作模式,CPU相当快速8086虚拟8086模式下各段特权级为3,执行特权指令发生异常13;LIDT,LGDT,LMSW,CLTS,HLT,INVD,WBINVD,INVLPG及传给CR、TR、DR的MOV,RDMSR,WRMSR都不能使用下列指令,否则发生异常6(非法操作码)APRL,LAR,LSL,VERR,VERW,STR,LTR,SLDT,LLST在虚拟8086模式下,当I
32、OPL3时,执行I/O敏感指令发生异常13 CLI,STI,PUSHF,POPF,INT n,IRET,带LOCK的指令在虚拟8086模式下,IOPL3,当I/O位图不允许时,执行I/O指令也发生异常13 IN,OUT,INS,OUTS虚拟8086模式下,CR4.TSD0不允许执行RDTSC,否则发生异常13,2.4.3 虚拟8086模式,2.虚拟8086模式与保护模式的区别(1)VM8086在形成20位线性地址与实模式一样,不需要像保护模式那样使用段描述符的基址和限长及属性(2)各种描述表中不会有VM8086的段描述符3.虚拟8086模式的进入与退出(1)32位CPU进入虚拟8086模式 0
33、级代码段:EFLAGS.VM=1的堆栈映像,IRET把栈映像压入EFLAGS和CS:IP。任务转换:32位新任务:EFLAGS.VM=1(在高位字b17中)TSS保存的值装入段寄存器:段基址,限长,属性(2)32位CPU退出虚拟8086模式 虚拟8086模式下的中断/异常使CPU退出该模式:中断/异常处理程序为0级保护模式代码段,EFLAGS.VM=0,2.4.3 虚拟8086模式,任务转换32位新任务:TSS中相应项装入EFLAGSVM0,表明新任务已退出虚拟8086模式,2.4.4 工作模式的转换,1.实模式 保护模式建立数据结构和初始化GDTR,IDTR和TRCR0.PE1:MOV CR
34、0,REG进入保护模式后:用CPL0的程序重装段寄存器,2.4.4 工作模式的转换,2.保护模式 实模式 CR0.PE0:MOV CR0,REG保护模式下的分页转移过程 使线性地址、GDT,IDT映射到实模式;CR0.PG0;CR30,清洗TLB设CS段限长为64KB,使GDT,IDT在1MB内选择符装入SS、DS、ES、FS、GS时,段基址任意,描述符 中限长64KB G0,E0,W1,P1CLI屏蔽INTR,外部屏蔽NMICR0.PE0远程JMP跳转到实模式LIDT指令装实模式下中断向量表的基址和限长STI开中断实模式下的代码装段寄存器,2.5 中断与异常,在程序正常执行过程中,为了处理外
35、部事件和报告错误或异常状态而中止现行程序的运行,将CPU的控制权转向处理程序,待处理完以后再继续执行被中断程序的过程称为中断。32位微处理器的中断分为两大类:中断(Interrupt)和 异常(Exception).,中断与异常的类型,中断:由外部设备引起的异步事件(外中断、硬 中断)INTR:受TF影响(STI/CLI),由PIC接入 NMI:不受TF影响,处理器设有防止NMI的机制,系统可屏蔽,NMI服务程序由2号中断描述 符确定,2.5.1 中断与异常的类型,异常:指令执行期间,处理机响应检测的某种状态的同步事件 微处理器检测的异常(内中断、软中断)Trap:出现异常的指令后边界检测,出
36、现异常立即报 告,返回执行下条指令。像INT n、INTO,单步.Fault:出现异常的指令前边界检测,异常处理后的返 回地址是引起异常指令,可以重启动。Abort:出现异常的指令无须精确定位,无法重启 动,例如:将控制转移到0号、10号、12号或13号异常时又发生一个异常,为双异常;硬件错。可编程的异常:INT 3、INTO、INT n、BOUND 指令引起异常、称为软中断,处理器当作异常处理,0 Divide Error 除法错异常 DIV or IDIV指令的除法为0,Fault 商太大使目标寄存器容纳不下。入 栈是指令的段值和指针,0号中断是除法指令的一部分。1 Debug Excep
37、tions 调试异常 排错异常Fault:DR中的断点与代码段中指令地址一致时发生的调试异常。Trap:单步执行 数据断点,I/O断点,任务转换断点引起调试Trap。,32位CPU的中断与异常,2 NMI 非屏蔽中断,响应时直接转入INT 2处理程序,不受IF影响。3 INT3 Breakpoint Instruction Trap 单字节断点指令 断点指令的操作码是单字节。调试程序装断点:一条指令的第一个操作码字节置换成断点指令的操作码(CCH)。程序执行到断点处,INT3的执行调用异常处理程序,返回地址应是指向INT3指令后的指令的第一个字节,但处理程序应该在返回时,把原被CCH置换出去的
38、断点 处指令的第一个操作码字节再置换回来,以便断点处的指令能够执行。INT3的作用:16位处理器中用于设置指令断点;32位CPU用调试寄存器设置指令断点。调用其它异常处理程序。设置比调试寄存器允许的更多的断点。置于开发程序的源代码中。,32位CPU的中断与异常,4 INTO Overflow Trap 溢出中断 溢出陷阱 OF1 INT 4 溢出中断处理程序 INTO CPU要了解符号数的运算是否发生了溢出5 Bounds Check Fault 边界检查故障 执行Bound指令的处理器发现操作数超越指令的界限 Bound r16,m16&16 Bound r32,m32&32 IF(Left
39、SRCRightSRC+OperandSize/8)Then Interrupt 5 6 Invalid Opcode Fault 检测指令流中的错误 检测时间:虽预取了一个非法操作码,不异常,到执行部件才引起异常。,&,32位CPU的中断与异常,7 Device Not Available Fault 协处理器不可用故障 无FPU:CR0.EM=1 or CR0.TS=1,ESC 协处理器仿真,80386和80486 SX用模拟在没有FPU的情况下执行协处理器指令(有些软件需要)。有FPU:CR0.MP=1 and CR0.TS=1,ESC、WAIT 设置协处理器运行现场只是在新任务需要FP
40、U时才切换FPU的运行现场。,32位CPU的中断与异常,32位CPU的中断与异常,8 Double Fault Abort 双故障在指令预取时遇到了一个段或页故障,当处理器试图把控制转移到处理程序时又发生了故障,导致双故障。双故障处理程序推到堆栈上的错误码为0。引起双故障的指令不能再启动,指令的重新启动不支持双故障。异常8处理程序调用时又遇到一个异常,CPU进入Shutdown模式类似于要执行HLT的状态。用NMI(保护模式)或RESET(实模式)退出(CPU执行NMI处理程序时发生了 Shutdown)。双异常:系统表(描述符表,页表)发生了严重问题。系统一个段或页故障时,又检测到一个段故障
41、,或者系统一个页故障时,又检测到一个段或页故障,都会引起双故障。系统一个段故障时又检测到一个页故障,这是页故障而不是双故障。,9 Coprocessor Segment Overrun Trap 协处理器越限异常在传送80387 FPU操作数的中间部分时80386检测到页或段的违反。80486/Pentium不会发生异常9,对协处理器段超越限将引起异常13。10 Invalid TSS Fault 非法TSS故障 任务转换向一个有非法TSS的段(即发生除段不存在以外的段异常时)。非法TSS状态涉及到TSS段,LDT段,堆栈段,数据段和码段。为了确保处理异常的TSS是可采用的,非法TSS异常处理
42、程序必须是一个使用任务门调用的任务。错误码中EXT位表示使用一个任务门的外部中断试图将一个任务转向一个无效的TSS。当无效故障发生装入故障处理程序时,压入栈中的CS及EIP值指向引起此故障的指令;而与该故障作为任务切换的一部分发生时,则指向任务切换的第一条指令。,2.5.2 32位CPU的中断与异常,TSS 段:TSS段限长小于103BLDT段:无效LDT或LDT不存在堆栈段:选择符超出描述符表的限长 堆栈段是不可写的 描述符的DPL与CPL不相等(兼容)选择符的RPL与CPL不相等(兼容)代码段:选择符超出描述符表的限长 代码段是不可执行的 非证实代码段:DPLCPL 证实代码段:DPLCP
43、L数据段:选择符超出描述符表的限长 数据段不可读,2.5.2 32位CPU的中断与异常,11 Segment Not Present 段不存在异常 Fault 有错误码(1)CPU检测到描述符中P0在试图装入CS、DS、ES、FS、GS时,P0,Fault 异常11。装入SS时P0,引起堆栈Fault 异常12。在用LLDT装入LDTR时P0,Fault 异常11。任务转换时装入LDTR时P0,引起非法TSS异常 异常10,使用了一个段不存在的门描述符。(2)本Fault是可以重启动的 段不存在异常发生进入故障处理程序时,压入栈的CS、EIP是引起故障的指令,或当该故障作为任务切换时的一部分发
44、生时,指向任务切换的第一条指令。,2.5.2 32位CPU的中断与异常,与段相关错误代码,1.中断/异常时又发生异常2.错误原因与返回地址的指令无关,访问IDT中门时发生异常,1.引起异常的段S2.访问IDT时产生错误时D103为8位向量号,IDT=0有效 0 1GDT LDT,2.5.2 32位CPU的中断与异常,12 Stack Exception 堆栈异常 Fault 有错误码(1)涉及SS任何操作的限长违反 POP、PUSH、ENTER、LEAVE 显式、隐式使用SS的存储器操作(2)P0的描述符在装载SS时检测到 任务转换 调用不同特权级的CALL指令 返回不同特权级的返回指令 装入
45、SS的MOV、POP(3)堆栈异常的指令是可以重启动的 引起异常的指令 在任务转换时由于装入不存在的堆栈级描述符引起的堆栈异常,处理后启动的指令是新任务的第一条指令。,2.5.2 32位CPU的中断与异常,13 General Protection 一般保护异常Fault所有没有引起其它异常的保护违反引起一般保护异常使用CS、DS、ES、FS、GS时段越限长涉及描述符表的段越限:控制转移到一个不可执行的段 写只读的码段或数据段 读只执行的码段 用涉及只读段的选择符装SS 用涉及系统段的选择符装SS 用涉及系统段的选择符装DS、ES、FS、GS 用涉及执行码段的选择符装数据段寄存器DS、ES、F
46、S、GS 用涉及可执行码段的选择符装SS 用空选择符(全0)的DS、ES、FS、GS访问存储器,2.5.2 32位CPU的中断与异常,切换到一个忙的任务 违反特权规则 指令长度超过15B,有太多的前缀加在指令前面 用PG1和PE0装入CR0 从VM8086通过中断门或异常门的中断或异常的处理程序的特权级不是0。企图把1写进CR4的保留位 实方式下,内存操作数地址超越段内限制时,产生异常13,但无错误码压栈。*关于错误码 全0错误码:异常8,17 无错误码:异常0,1,2,3,4,5,6,7 存在错误码:异常10,11,12,13,2.5.2 32位CPU的中断与异常,14 Page Fault
47、;取指,访存;Fault 页故障。有特殊格式的错误码(1)CR0.PG=1,在线性地址转换成物理地址时CPU检测下列状态 地址转换所需的页目录项或页表项中P0,指示页表或包含 操作数的页不在物理存储器 程序没有足够的特权访问指向的页 用不适当的访问类型访问一内存页(2)页级保护违反引起异常,这时 页目录项中访问位A1 页表项中访问位A1时是没有页级保护违反,2.5.2 32位CPU的中断与异常,页故障错误码在堆栈上 P0,页Fault由页不在内存引起,P1,页故障是由页级保护违反引起 W/R0,Fault由R操作,W/R1,Fault由W操作 U/S0,CPU在SuperVisor(0,1,2
48、级),U/S1,CPU在用户级(3)用32位线性地址装入CR2引起异常 异常处理程序能用此地址定位相应的页目录项和页表项,在页故障处理程 序执行时发生了另一个页故障,处理程序将把CR2的内容推向堆栈。(4)页故障是可以重新启动的异常,一旦引起页故障的原因在处理程序中被排 除,即可由IRET返回,重新执行产生过故障的指令。,2.5.2 32位CPU的中断与异常,16 FloatingPoint Error CR0.NE=1,非屏蔽数的浮点异常将产生异常16。在执行下一条非控制的的浮点 指令或WAIT指令。CR0.NE=0 1 CPU在执行下一条非控制浮点指令或WAIT指令前冻结系统外 部中断(由
49、响应 引起的)带出不管NE值,非屏蔽的数值 异常而引起 0这时外部中断能够调用异常处理程序。0,CPU将忽略数字异常。数字异常处理的基本步骤 a.存FPU环境:控制、状态和标记字,操作数和指令指针。b.清状态字中的异常位。c.如果是由于INTR、NMI、SMI异常屏蔽了中断时使能它。d.由存在环境中的状态和控制字检查标识异常。e.为纠正(rectify)异常进行一些依赖系统的活动。f.返回被中断的程序继续正常执行。,2.5.2 32位CPU的中断与异常,17 Alignment Check Fault(1)访问非对齐的操作数产生对齐检查故障 地址能被2整除的数据类型:字、选择符、32位段指针。
50、地址能被4整除的数据类型:双字、短实数、48位段指针、32位Flat指针、48位伪描述符(描述符表基寄存器内容的MEM映像)。地址能被8整除的数据类型:长实数、TEMPREAL。地址能被4或2(取决于操作数的尺度)的数据类型。FSTENV/FLDENV save area FSAVE/FRSTOR save area(2)对齐检查的条件:CR0.AM=1;EFLAGS.AC=1;CPL3 存储器引用(references)约定在CPL0,为段描述符装入不会产生对齐检查Fault,即使是在用户模式下引起的存储器引用。,2.5.2 32位CPU的中断与异常,18 Machine Check Fau