资源描述
第二章 微处理器,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 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的内部结构,指令译码:从指令预取队列取机器码转换成控制信号。 两步译码:指令执行时要访存,产生 总线 周期取存储器操作数。 指令译码由机器码产生对其 它处理部件的控制信号。 控制部件:对整数、浮点运算和分段部件控制 整数部件: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,命中,预取部件,不命中,内存,未命中行填充,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预测,动态分支预测算法,无分支,有分支,线性预取,预取分支后指令,预取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接口;简单整数,FXCH/1T 5. 流水线式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保存下一条将要执行的指令相对于段基址的偏移量。,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,CRX 1. CR0 控制或指示用于整个系统条件的标志,低16位为MSW。 0 PE:保护模式允许 PE1 系统在保护模式下工作 PE0 系统在实地址模式工作,2.2.5 控制寄存器,1 MP:监视协处理器 MP1并且TS1,WAIT指令发生异常7:协处理器不可用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。 上电时检测80387的 引脚,设置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对齐检查,非对齐 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才有效 某页不在内存中,页转换时发生分页错误,这是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:Pentium扩充,位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断点有效。 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,DRx 1. 断点寄存器:DR0DR3 每个寄存器存放一个断点的线性地址。 断点的发生条件由DR7分别设定。 2. 调试控制:DR7 (1)4个断点发生的条件和访问类型。 (2)I/O断点。 (3)精确断点。 (4)GD位使能由DR6.BD标志的调试寄存器保护状态。 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中没有允许/不允许这种异常的位。仅受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,使用指令 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复位和自测试启动 (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测试:使用微代码增加不同常数,检查结果值与存储值是否相等。 复位结束时,程序从FFFFFFF0H开始执行, 段间调用/转移指令时,转到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 限长单位为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,代码段,可执行;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.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位偏移量形成例程或子程的首地址。,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的任务能够访问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),特权级检查的原则 数据段:只允许同级和高级的代码段访问。 代码段:只允许向同级和更高级别的代码段转移控制。 堆栈段:其特权级和执行代码段相同,控制转移时随之变化 。 特权级检查的规则 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. IOPL规则 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、WRMSR f. 页访问规则 违反页表项、页目录项规定权限或访问不存在页将发生异常14。,2.4.2 保护模式,(2)存储器保护 MOV、POP、LDS、LES、LFS、LGS、LSS指令将选择符装入DS、ES、FS、GS、SS; JMP、CALL、RET、IRET指令进行段间转移、更新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.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与调用者段选择符中的CPL比较取特权级低者。,2.4.2 保护模式,(4)保护模式下的转子与返回 无任务转换时段间调用的转子与返回 CALL 段值:偏移量 子程的段选择符值 段描述符中C 代码段证实性 子程在证实代码段,调子不改变CPL,段选择符 子程段描述符 子程在非证实代码段,若CPLDPL,段选择符 子程段描述符 若CPLDPL,段选择符 调用门描述符 此时要进行系列保护属性检查:调用非证实代码段中更高级子程 序。,2.4.2 保护模式,现行程序CS,16位可见选择符,不可见描述符 CPL,CALL选择符,目标段选择符 RPL,选择符装入CS并指向调用门(在GDT或LDT中),调用门描述符,可执行段描述符,Selector Offset Offset DPL Count,调用门是实现任务从CPL级到更高级的 间接控制转换,它的目标选择符又装入 CS,指向调用的代码,Base Limit Base Limit DPL Base,段描述符,它又被缓存。它的基址和 调用门中偏移量定位被调用的子程 入口地址,2.4.2 保护模式,调用门检查 调用程序 CPL=调用门DPL。 调用程序选择符中RPL=调用门DPL,否则发生异常13。 调用门中P1,否则发生异常11。 调用门不越限,否则发生异常13。 子程代码段检查,不合法时发生异常13。 选择符非全0 描述符不越限 可执行代码段 选择符中RPL=DPL 子程的首址中新EIP不越限,2.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中CPL 子程代码段偏移量 EIP RET 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模式下,当IOPL3时,执行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级代码段: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中相应项装入EFLAGS VM0,表明新任务已退出虚拟8086模式,2.4.4 工作模式的转换,1. 实模式 保护模式 建立数据结构和初始化GDTR,IDTR和TR CR0.PE1: MOV CR0,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,P1 CLI屏蔽INTR,外部屏蔽NMI CR0.PE0 远程JMP跳转到实模式 LIDT指令装实模式下中断向量表的基址和限长 STI开中断 实模式下的代码装段寄存器,2.5 中断与异常,在程序正常执行过程中,为了处理外部事件和报告错误或异常状态而中止现行程序的运行,将CPU的控制权转向处理程序,待处理完以后再继续执行被中断程序的过程称为中断。 32位微处理器的中断分为两大类:中断(Interrupt)和 异常(Exception).,2.5.1 中断与异常的类型,中断:由外部设备引起的异步事件(外中断、硬 中断) INTR:受TF影响(STI/CLI),由PIC接入 NMI:不受TF影响,处理器设有防止NMI的机制, 系统可屏蔽,NMI服务程序由2号中断描述 符确定,2.5.1 中断与异常的类型,异常:指令执行期间,处理机响应检测的某种状态的同步事件 微处理器检测的异常(内中断、软中断) Trap:出现异常的指令后边界检测,出现异常立即报 告,返回执行下条指令。像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 Exceptions 调试异常 排错异常 Fault:DR中的断点与代码段中指令地址一致时发生的调试异常。 Trap:单步执行 数据断点,I/O断点,任务转换断点引起调试Trap。,2.5.2 32位CPU的中断与异常,2 NMI 非屏蔽中断,响应时直接转入INT 2处理程序,不受IF影响。 3 INT3 Breakpoint Instruction Trap 单字节断点指令 断点指令的操作码是单字节。 调试程序装断点:一条指令的第一个操作码字节置换成断点指令的操作码(CCH)。 程序执行到断点处,INT3的执行调用异常处理程序,返回地址应是指向INT3指令后的指令的第一个字节,但处理程序应该在返回时,把原被CCH置换出去的断点 处指令的第一个操作码字节再置换回来,以便断点处的指令能够执行。 INT3的作用: 16位处理器中用于设置指令断点; 32位CPU用调试寄存器设置指令断点。 调用其它异常处理程序。 设置比调试寄存器允许的更多的断点。 置于开发程序的源代码中。,2.5.2 32位CPU的中断与异常,4 INTO Overflow Trap 溢出中断 溢出陷阱 OF1 INT 4 溢出中断处理程序 INTO CPU要了解符号数的运算是否发生了溢出 5 Bounds Check Fault 边界检查故障 执行Bound指令的处理器发现操作数超越指令的界限 Bound r16,m16取指,访存;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级),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指令前冻结系统外 部中断(由响应 引起的)带出不管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位段指针。 地址能被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 Fault Pentium处理器的模型专用寄存器产生的异常。 CPUID:当EAX1时,执行后,EDX(7) 机器检查异常处理。 当CR4.MCE=1,系统可执行机器检查异常处理。 Pentium中 输入,当 0,通知CPU发生了读数据检验错; 或 输入,当 0,通知CPU发生了总线周期错。 当前总线周期地址 MSR00H:MCA 机器检查地址R 当前总线周期类型 MSR01H:MCT 机器检查类型R 63 4 3 2 1 0 数据锁存到MCT:CHK1,读MCT:CHK0 用RDMSR读MCA和MCT EDX:EAX MSRECX MOV ECX,Imm; Imm代表寄存器编号,如00H,01H RDMSR,Lock M/IO D/C W/R CHK,2.5.2 32位CPU的中断与异常,2.5.3中断和异常的处理过程,1、中断检测和响应 (1)外部中断请求在指令后边界检测。 (2)Trap异常也在指令后边界检测。 (3)Fault异常在指令前边界检测。 2、中断处理和服务 实地址模式下的中断如图:,2.5.3 中断和异常的处理过程,2.5.4 实模式下的中断和异常,32位微处理器运行在实地址下,可以响应和处理异常0、1、3、4、5、6、7、8、9、12、13、16。,2.中断向量表,位于内存地址0000 : 0000开始的1KB范围内。,按中断类型号顺序存放中断向量。,3.中断向量指针,指向存放中断向量地址第一字节的指针。,中断向量指针=中断类型号4。,软件中断中自由中断的中断向量需用户自己装入。,1.中断向量,对应中断类型号的中断服务程序入口地址。,每个中断向量占4字节。,实模式下中断向量表,2.5.5 保护模式下的中断和异常,1、中断的处理 (1)通过中断门和异常门的中断处理,中断/异常:向量号8,。,中断/异常 门描述符,。,。,代码段描述符,CS段选择符,描述符高速缓存器,。,代码段,门选择符,段选择符,段偏移量,段选择符,段基址、段限长、 访问权限,段基址,程序入口,段限长,IDT,GDT/ LDT,15,0,63,0,中断/异常 门描述符,IDT,GDT/ LDT,代码段描述符,CS段选择符,描述符高速缓存器,代码段,代码段,(2)中断/异常后的堆栈结构,2.5.5 保护模式下的中断和异常,(3)通过任务门的中断处理,2.5.5 保护模式下的中断和异常,中断:向量号8,。,任务 门描述符,。,。,描述符,CS段选择符,描述符高速缓存器,。,中断任务的 ,门选择符,TSS选择符,TSS选择符,TSS段基址、段限长,TSS段基址,TSS段限长,IDT,GDT,15,0,63,0,IDT,任务 门描述符,GDT,描述符,CS段选择符,描述符高速缓存器,中断任务的 ,中断任务的 ,2、特权级保护 通过中断门或异常门的转移控制,目标代码段DPL=现行代码段CPL。 通过任务门的中断不对目标代码段的特权级进行检查。 对INT N和INTO指令产生的中断:门的DPL=现行代码段CPL。 对于外部中断和异常,不进行门的特权级的检查。,2.5.5 保护模式下的中断和异常,优点:中断任务和被中断任务完全隔离。 缺点:中断响应过程耗时长。,2.5.6 虚拟8086模式下的中断和异常,(1)要求中断和异常处理程序必须具有0级特权级。 (2)保存现场时压入堆栈的内容增多,按32位操作来保存现场。 (3)将EFLAGS寄存器内容压栈后将17位清0。 (4)执行IRET时,检测CPL的特权级。,2.6 存储管理,三种工作模式下如何完成存储管理?,2.6.1 实模式存储管理,1. 物理地址的形成,2.6.1 实模式存储管理,2. 段式存储管理 CR0.PG=0:页部件不工作,线性地址即物理地址。 段值16 相应描述符的段基址(Base190) 段限长:64KB,P1,G0,ED0 代码段:CPL0,R1,C0 其他段:DPL0,W1,数据段:ED0, FFFF 0000H偏移量 限长 段基址 0000 堆栈段 ED1 段基址 FFFF 0000 限长+1 偏移量 FFFFH,。,。,2.6.2 保护模式存储管理,CR0.PE=1,CPU处于保护模式。 存储器的保护机制。 分段机制不同,引入虚存概念。 1. 段式存储管理 (1)地址空间变换 虚拟(逻辑)存储空间:21423224664TB 实模式:21624216220216,2.6.2 保护模式存储管理,(2)虚拟地址到线性地址的变换,GDTR(TI=0)/LDTR(TI=1),索引,TI,RPL,偏移量,虚拟地址,段描述符,段基址,段限长,属 址,段Cache (8B),索引8,线形地址,GDT/LDT基址,索引,TI,GDTR(TI=0)/LDTR(TI=1),GDT/ LDT,段描述符,偏移量,2.6.2 保护模式存储管理,2. 页式存储管理 CR0.PG1,页部件自动将线性地址转换成物理地址 段长可变:04GB 页长固定:CR4.PSE=1,页4MB; CR4.PSE0,页4KB 物理地址:CR4.PAE=1,超过32位 (1)页变换原理,2.6.2 保护模式存储管理,物理地址,Y 不分页,页目录表基址,CR3,段管理部件,选择符,偏移量,PG=0?,页目录号(10位),页号(10位),偏移量(12位),0,虚拟地址,线性地址,页表项,4KB,31,0,31,0,7,0,1023,1023,线形页号,分页 N,0,0,31,21,22,12,11,0,段管理部件,物理地址,Y 不分页,分页 N,页目录表基址,页目录号(10位),页号(10位),偏移量(12位),2.6.2 保护模式存储管理, CR3(页目录基址)线性地址高10位(页目录号)4 页目录项低位地址;得到页表基址 页表基址线性地址中10位(页号)4 页表项低位地址;得到页基址 页基址线性地址低12位(偏移量) 页内单元的偏移地址 页变换:线性地址高20位的线性页号变换为物理页号 页内的偏移量不变换。,2.6.2 保护模式存储管理, P 存在: P1,页目录项/页表项在内存中; P0则表示其不在内存中 。 R/W 读/写: R/W1,页目录项/页表项可读、写、执行; R/W0,页目录项/页表项可读、执行。 U/S 用户/监控: U/S1,页的用户级段的PL3。 U/S0,页的监控级段的PL0,PL1, PL2 。,(2)页目录项和页表项,2.6.2 保护模式存储管理, PWT 页通写(外部Cache):PWT1,当前页通写; PWT0,当前页回写。 PCD为页Cache禁止位。PCDl表示禁止片上Cache;PCD0表示允许片上Cache工作。 A 访问性:A1,页表项/页中内容被访问。 A0,页表项/页中内容未被访问。 D 页修改位:D1,页被修改过。 (二级页表) D0,页未被修改过。 AVAIL 保留附加信息 (对应页表或页)。,2.6.2 保护模式存储管理,(3)转换后援缓冲器TLB TLB是页部件中的相联存储器。 CPU近期访问过的32个页的有关信息: 线性页号、物理页号、D、A、U/S、R/W、P。 线性页号在TLB中,找出物理页号,快速完成转换,有效 线性页号不在TLB中,查页目录表、页表、页方式访问内存,注意P、A、R/W属性将其线性页号、物理页号、属性 调入TLB。 当TLB满时,按LRU算法调出最近最少使用的页信息及调入刚访问的页。 程序局部性和数据的簇聚性可使CPU访问TLB的命中率在 98以上。,2.6.2 保护模式存储管理, 线性地址高17位当作TAG,在同一组号的4项中按内容相联查找; 若命中,找出其20位物理页号拼接线性地址低12位形成物理地 址,表TLB中有符合的项,但权限及页目录项/页表项中P0, 产生异常14。 产生异常的线性地址 CR2 错误代码 异常14处理程序的堆栈中 关键程序和数据常驻内存,使页请求虚拟存储系统能正常工作 页目录表。如: IDT、GDT、TSS及0级堆栈及其页表。 页Fault处理程序代码和数据及其页表。,2.6.2 保护模式存储管理,2.6.2 保护模式存储管理,段寄存器,选择符,RPL,分段部件,分页部件,物理存储器,有效地址,逻辑地址,线性地址,分页,不分页,物理地址,选择符,14,分段部件,分页部件,物理地址,物理存储器,物理存储器,2.6.3 虚拟8086模式存储管理,1. 段式管理 与实模式下存储管理相同:段基址=段R值16,Limit=FFFFH,DPL=3,P=1,代码段C=0,E=1,R 数据段:ED=1,R=1,W 2. 页式管理 (1)多个VM8086任务的1MB线性地址空间映射到物理空间的不同区域 (2)VM8086地址偏移量超过1MB时,可仿真实现8086地址回绕 (3)页请求虚拟存储系统和调页Fault(异常14)在虚拟空间的内存和外存 之间实现页的调度 (4)多个VM8086任务共享8086 OS或ROM代码 (5)由存储器映射I/O编址的设备,其端口地址可对应不同线性地址,2.7 多任务与多处理,2.7.1 任务状态段TSS 2.7.2 TSS D、Task G、TR 2.7.3 任务转换 2.7.4 32位CPU的多处理,2.7.1 任务状态段TSS,需要重存一个任务的处理器状态信息被存于一种叫做TSS的段类型 1. 动态域:每个任务转换时处理器更新 通用寄存器(EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI) 段寄存器(ES、CS、SS、DS、FS、GS) 标志寄存器(EFLAGS) 指令指针(EIP) 老任务TSS选择符(仅当返回执行时更新) 在TSS0102H:Link与NT1配合返回调用/被中断程序,2.7.1 任务状态段TSS,2. 静态域:处理器可以读,但不改变;这些域在任务建立时设置 任务的LDT的选择符 CR3寄存器(DDBR:页目录基址寄存器) 特权级0、1、2堆栈的逻辑地址 SS0:ESP0 SS1:ESP1 SS2:ESP2 调试陷阱位T 当T1(偏移量64H的0位),在任务转换发生时,在新任务第一条指令执行前,处理器将发生一个调试异常,使软件在任务之间根据需要有效地共享调试寄存器,2.7.1 任务状态段TSS,I/O允许位图和中断重定向位图基址 基址指向I/O位图开始处及中断重定向的结束处。 CPLIOPL I/O位图对应位为0的端口,否则产生异常13。 位图偏移量:位图首地址,TSSD的Limit限制长度,最后全1字节,在限长内。 关于分页 避免页边界放在TSS内,如果页边界放在TSS内,那么边界的每一个边都要同时在TSS内。 当分页使用时,老任务的TSS、新任务的TSS和描述符表项都应该被标记为存在和可读/写,处理器开始读TSS后再收到一个页故障或一般保护异常将是一个不可恢复的错误。,2.7.2 TSS D、Task G、TR,1. TSSD 忙的任务是现行运行或等待运行的任务 驻留在GDT中,2.7.2 TSS D、Task G、TR,2. Task G,2.7.2 TSS D、Task G、TR,(1)DPL控制对任务转换的门描述符的访问 当一个过程的CPL和选择符RPL数值小于等于TSS D的DPL时,这个过程不需要选择门描述符来实现任务转换。这防止低优先级的过程引起一个任务转换。 当任务门被用时,目标TSS D的DPL不用。CPL,RPL只和门DPL比较。,2.7.2 TSS D、Task G、TR,(2)Task G和TSS D满足多项要求,一个任务仅有一个忙位,忙位存在TSS D中,每个任务都只有一个TSS D。 任务门能够在LDT中:门的DPL与TSS D中 DPL不同,没有足够的特权使用GDT中TSS D(DPL0)的过程能够访问LDT中的任务门,用任务门,OS能够限制任务转换到特殊的任务。 任务门在IDT中:当中断或异常的向量指向IDT中的任务门时,中断或异常能够引起任务转换。 多个任务门可以指向同一个任务。 任务门中指向TSS D的选择符其RPL不用,门中偏移量也不用。 任务门可以在GDT、LDT和IDT中,但TSS D只能在GDT中,TSS可以定 位在内存中任何位置 。,2.7.2 TSS D、Task G、TR,3. TR,2.7.2 TSS D、Task G、TR,(1)LTR 16位段选择符装入TR的可见部分,指向GDT中的TSS D。 48位的段基址和段限长从TSS D中装入TR不可见部分段Cache。 特权指令,仅在CPL0程序中执行。 用于系统初始化时给TR赋初值,以后由引起任务转换的时 间改变其中的内容。 (2)STR TR中的可见部分存入存储器或通用寄存器。 非特权指令,可以在任务特权级程序中运行。,2.7.3 任务转换,1. 任务转换的启动 段间JMP或CALL指令操作数选择符直接选择GDT中TSS D 段间JMP或CALL指令操作数选择符通过Task G选择符指向 GDT中TSS D。 中断或异常指向IDT中的任务门,Task G选择GDT中TSSD。 注意:索引IDT中的中断门或陷阱门不会发生任务转换。 当EFLAGS.NT1时现行任务执行IRET/IRETD指令。返回任务的选择符在现行任务的TSS的Link字段中(Old TSS Selector)。,2.7.3 任务转换,2. 任务转换的过程,检查现行任务允许转换到新任务。数据访问特权规则应用到JMP、CALL。 CALL、JMP:现行CPL,选择符RPL67H,B0(即Type9)。 存现行任务的状态TSS中:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI、ES、CS、SS、DS、FS、GS、EFLAGS、EIP(引起任务转换指令的下一条指 令)。
展开阅读全文