




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 保护模式及其编程 10.1 保护模式基础 10.2 虚拟内存管理 10.3 特权级保护 10.4 任务 10.5 中断和异常 10.6 虚拟8086模式 10.7 操作系统类指令 10.1 保护模式基础在保护模式下:n寻址高达4GB的物理地址空间 n支持存储器分段管理机制和分页管理机制n支持多任务n支持4个特权级和配套的特权检查机制n区分不同级别的代码 CPU内部结构CPU有8个处理单元:执行单元、分段单元、分页单元、总线单元、指令预取单元、指令译码单元、高速缓存单元和浮点运算单元。1总线单元n总线单元是CPU与存储器和I/O的接口 n总线接口对外提供:32位(或64位)数据总线、3
2、2位(或36位)地址总线以及控制总线 n总线单元负责完成所有外部总线操作,能够产生控制地址锁存器和数据总线收发器工作的控制信号。2指令预取单元 指令预取单元实现指令流队列的机制CPU可以预取16字节的指令代码预取进来的指令要保存在FIFO队列中 3指令译码单元 指令译码单元接收FIFO队列的输出指令译码单元将接收到的机器代码指令译码为微代码指令,并供执行单元使用 4执行单元执行单元取出译码后的指令并执行该操作,包括:n算术逻辑单元ALUn寄存器组n专用乘法器n移位器n控存(ROM) 5分段和分页单元分段和分页单元负责地址产生、地址转换和对总线接口单元的段检查。nCPU存储器管理的分段单元用硬件
3、进行高速地址计算,完成逻辑地址到线性地址的转换和保护性检查;n分页单元实现保护模式下的分页机制,它可以将线性地址转换成物理地址,并由总线单元输出。6浮点运算单元浮点运算单元集成在80486及以上的CPU中;对于80386,需要另外一个数学运算协处理器80387来执行浮点运算。7高速缓存单元高速缓存单元将最近被访问的内存单元的内容保存在CPU内部的Cache中。下次访问这些内存单元时,CPU直接访问Cache就可以存取这些单元的内容。由于Cache的访问速度比内存快,高速缓存单元能够显著提高程序的运行速度。CPU具有三种运行模式:实模式、保护模式和虚拟8086模式 ,关系如下:1实模式 CPU被
4、复位(加电)时,自动进入实模式。n实模式不支持硬件上的多任务切换 nCPU不能对内存进行分页管理 n实模式也不支持特权级 nDOS操作系统运行于实模式下 2保护模式实模式下对一系列的寄存器进行设置,就可以进入保护模式。nCPU提供了段式和页式内存管理功能 nCPU支持多任务和特权级 nWindows/Linux操作系统运行于保护模式下 3虚拟8086模式 虚拟8086模式是为了在Windows/Linux系统中执行DOS程序而设计的,它是一种经过“修改”的保护模式。 4特权级 在保护模式下,CPU有4个特权级(03),操作系统运行在高的特权级(0)上,而应用程序运行在低的特权级(3)上。 32
5、位CPU支持的寄存器有以下几种:1通用32位寄存器 分别是:EAX,EBX,ECX,EDX,ESI,EDI, EBP,ESP。主要用于算术运算、逻辑运算以及对内存操作数的寻址。2标志寄存器 标志寄存器EFLAGS也扩展为32位 ,位11到位0和8086完全相同。这里主要扩展了4个标志位: nV86模式位VM(位17)n此位为1时,表示当前CPU正工作在V86模式下;n此位为0,表示当前CPU工作在实模式或保护模式下。n嵌套任务位N(位14)n当前的任务嵌套在其他任务中,此位为1,否则为0n恢复位RF(位16)nI/O域IOPL(位13和12)3指令指针寄存器EIP和堆栈指针寄存器ESPn指令指
6、针寄存器EIP,它总是下一条要执行的指令的偏移地址,偏移地址指的是这条指令在代码段中的位置。n堆栈指针寄存器ESP,用于存放当前堆栈段中栈顶的偏移地址。 n他们的低16位分别是IP和SP4调试寄存器DR 调试寄存器提供高级的调试功能 例如:可以设置一个数据断点,在程序访 问某个数据时激活调试程序。 5测试寄存器TR 测试寄存器提供对TLB的测试。6全局描述符表寄存器 全局描述符表GDT是用来定义全局存储器空间的一种机制,它用段描述符说明一个全局存储器中的段,每个GDT最多含有8192个描述符(8192864KB)。用全局描述符表寄存器GDTR指出GDT的位置和大小。GDTR是48位的寄存器。其
7、最低16位是限长,给出GDT的字节大小;其高32位是基址,指出GDT在物理存储器中存放的基地址。例如:GDTR=0E003F0003FFH,则说明GDT的地址为0E003F000H,长度为3FFH+1=400H。其中可容纳400H/8=80H个段描述符。7中断描述符表寄存器 中断描述符表IDT中保存着中断门描述符;IDT最多包含256个门描述符,CPU最多支持256个中断。中断描述符表寄存器IDTR是48位的寄存器。其最低16位是限长,给出IDT的字节大小;其高32位是基址,指出IDT在物理存储器中存放的基地址。 中断描述符表寄存器例如:IDTR=0E003F40007FFH,则说明IDT的地
8、址为0E003F400H,长度为7FFH+1=800H。其中可容纳800H/8=100H个中断门描述符。8局部描述符表寄存器 局部描述符表LDT含有与系统中某一个任务相关的各个段的描述符;局部描述符表寄存器LDTR并不直接指出LDT的位置和大小,而是指向一个LDT描述符,由LDT描述符指出LDT的位置和大小。 9任务寄存器TR n任务寄存器TR在保护模式的任务切换机制中使用。nTR是16位的选择符,其内容为索引值,它选中的是TSS描述符。 n任务状态段TSS中包含启动任务所必需的信息。它在存储器的基地址和限长(大小)由TSS描述符指出,TSS描述符放在全局描述符表GDT中,而TR内容指出了TS
9、S描述符在GDT中的顺序号。 10控制寄存器 存在着4个系统控制寄存器CR0CR3。CR0的低5位是系统控制标志,被称为机器状态字MSW。MSW中各位的含意:nPE:保护模式允许标志 n等于0为实模,等于1为保护模式 nMP:运算协处理器存在位 n等于1表示系统中有运算协处理器。MSW中各位的含意(续)nEM :等于1时系统用软件模拟器执行数学运算 nTS:任务切换标志。n当任务切换时,自动设置此位为1 nPG:n等于1时,存储器管理单元允许分页; n等于0时,分页功能被关闭,线性地址等于物理地址。11段寄存器CS,DS,ES,SS,FS,GS32位CPU有6个段寄存器,比16位CPU增加了F
10、S和GS两个段寄存器。 n在实模式下,它们的用法和16位CPU相同 n在保护模式下,段寄存器不直接存放段基址,而是存放一个索引,由索引从GDT或LDT中找到段描述符,从而确定关于这个段的全部描述信息。这个索引被称为段选择符。段寄存器(续)n选择符的格式如下nRPL :请求特权级,2位二进制数字,求特权级是将要访问的段的特权级。nTI :表指示符。为0时,从GDT中选择描述符;为1时,从LDT中选择描述符。nIndex:索引。指出要访问描述符在段描述符表中的顺序号。CPU寄存器的值 要取得GDTR,IDTR,TR,LDT寄存器的值,分别使用SGDT,SIDT,STR,SLDT指令,这些指令将寄存
11、器的内容保存到内存单元中。程序举例:cpuregs.asm 10.2 虚拟内存管理 如果程序要访问的内容不在内存中,CPU会产生一个异常,由操作系统的存储器管理程序来处理,将所需的内容装入内存中。这就是所谓的虚拟存储器,它并不完全是真正的内存空间,也称做虚拟内存。 将虚拟地址转换为线性地址,由CPU的分段部件完成。 n虚拟地址:程序指令中使用的地址,由段和偏移两个部分组成 n线性地址:段的基地址再加上偏移量 n物理地址:从微处理器引脚上输出的地址信号 n虚拟地址到线性地址,再到物理地址的转换过程3段描述符 段描述符用于描述代码段、数据段和堆栈段。段描述符的格式如图 :段描述符段描述符位于GDT
12、或LDT中,占64位,由以下几个部分组成:段基址(32位)限长(20位)访问权限(8位)属性(4位)访问权限字节访问权限字节定义如下n P:存在位 n等于1时表示该段己装入内存;n等于0时表示该段没有在内存中,访问这个段会产生段异常。nDPL:描述符特权级,说明这个段的特权级 访问权限字节nS:描述符类型位 n为1时,这个段为代码段、数据段或堆栈段;n为0时,为系统段描述符。n E:可执行位,区分代码段和数据段n S=0且E=1时,这是一个代码段,可执行。nS=0且E=0时,这是一个数据段或堆栈段,不可执行。nE=0时,后面的两位为ED和W;n若E=1时,后面的两位为C和R。访问权限字节nED
13、:扩展方向位 n为0时,段从低地址向高地址扩展,偏移量小于等于限长。n为1时,段从高地址向低地址扩展,偏移量必须大于限长。n W:写允许位n为0时,不允许对这个数据段写入;n为1时,允许对这个数据段写入。 访问权限字节nC:一致位n为0时,这个段不是一致代码段n为1时,这个段是一致代码段nR:读允许位n为0时,不允许读这个段的内容n为1时,允许读这个段的内容nA:访问位n为1表示段已被访问过n为0表示段未被访问过。属性位 属性位包括G、D、AVL等 nG:粒度位。nG1时,限长以页为单位;nG0时,限长以字节为单位。nD:默认操作数宽度。nD1时,为32位数据操作段;nD1时,为16位数据操作
14、段。nAVL:可用位。n这一位保留给操作系统或应用程序来使用 段描述符高速缓存n在读写内存单元时,CPU需要检查段描述符的内容是否和当前操作相一致,CPU的运行效率极大地降低。为解决这个问题,CPU在内部设置了段描述符高速缓存。n在指令执行过程中,只有段寄存器的值发生改变时,才需要到GDT或LDT中装入段描述符。如果段寄存器的值不改变,高速缓存中的段描述符可以被直接引用,这样就避免了到主存中频繁读取段描述符。提高了CPU的效率。 n段式内存管理是将形如DS:EBX的虚拟地址,由DS的段基址再加上偏移部分,就得到了线性地址。n分页管理将分段管理机制得到的线性地址转换为物理地址。n使用分页机制的好
15、处: 可以把每个活动任务当前所必需的少量页面放在内存中,而不必将整个段调入内存,从而提高了内存的使用效率。 1分页n页的长度固定为4KB n页与页之间没有重叠 n页式内存简化了存储器管理 n不能充分地利用内存 ,会产生碎片2线性地址到物理地址的映射 线性地址按页为单位映射到物理地址 n每一个线性页面只能映射到一个物理页面上n多个线性页面可以映射到同一个物理页面上 3线性地址转换为物理地址的过程32位线性地址被划分为3个部分:页目录索引(10位),对页目录的索引页表索引(10位),对页表的索引字节索引(12位),线性地址在页面内的偏移。线性地址转换为物理地址的过程图线性地址转换为物理地址的过程n
16、以PDBR的值作为页目录的基地址,定位到页目录 。n用线性地址中的页目录索引(10位)在页目录表中找到一个页表描述符。 n页表描述符的高20位给出了页表的基地址 。n线性地址中的页表索引(10位),指示了被访问的页在页表中的序号。 n页描述符的高20位给出了物理页面的基地址。 n物理页面的基地址再加上线性地址中的12位字节索引,便得到32位线性地址对应的32位物理地址。 4片内转换检测缓冲器TLBn为了提高转换效率,CPU内部设置了片内转换检测缓冲器TLB,其中保存了32个页描述符,它们都是最近使用过的。n在从线性地址转换为物理地址时:n如果线性地址的页描述符已在TLB中,则无需再经二级转换就
17、可以直接引用。n如果线性地址的页描述符没有在TLB中,则需要访问页目录表和页表来取得页表描述符和页描述符,最后将这个页描述符存在TLB中。 5页表项页表项就是在分页转换时用到的页表描述符和页描述符,它们都是32位的,其格式:页表项的低12位提供保护功能和统计信息。nU/S位、R/W位、P位实现页保护机制;n而D位和A位提供统计信息。页表项nU/S:用户/管理员位 nU/S=0时,只有操作系统程序可以访问该页,而不允许用户程序访问 nU/S=1时,允许用户程序访问该页 nR/W:读写位 nR/W0,用户程序对页面只有读权限,不能写入;nR/W1时,可读/写 页表项nP:存在位。nP=1,页表或页
18、存在于物理内存中;nP=0,页表或页没有在物理内存中。 nA:访问标志。n如果对某页表或页访问过,CPU设置页表项中的A位为1。 nD:写入位。nD=1时表示对该页进行过写操作,nD=0时表示对该页还没有进行过写操作。 nAVL占3位,可以由操作系统使用 7Pentium的4MB页面Pentium的页表项增加了3个属性位:SIZ,PCD和PWT。 SIZ(Size)页尺寸位:nSIZ=0时,页面的大小为4KB。nSIZ=1时,页面的大小为4MB。 PCD位:nPCD=0时,允许页被缓存;nPCD=1时,禁止页被缓存。PWT位:nPWT=0时,使用回写策略;nPWT=1时,使用通写策略。n通写策
19、略指的是指令将数据写到页面Cache时,立即更新内存中的页面;n回写策略指的是指令将数据写到页面Cache后就认为指令已经完成,以后再将页面Cache中的数据更新到内存中。8Pentium的物理地址扩展功能第5位PAE位为1时,就启动物理地址扩展功能 n线性地址仍然为32位,分为4个部分:nPDPT索引(2位)n页目录索引(9位)n页表索引(9位)n字节索引(12位)n页表项,从原来的4字节扩展为8字节n页目录和页表的大小仍然为4KB nPAE功能启用且SIZ1时,线性地址的格式如图 9Pentium III的页面大小扩展功能 n在分页状态下,PAE=0、PSE=1时,就启用了PSE功能。n启
20、用PSE时,PAE功能必须关闭。 n启用PSE功能时,由页目录项中的SIZ位(也称PS位)来确定页面的大小。 10.3 特权级保护保护模式下设置了0、1、2、3共4个特权级,以区分操作系统程序和应用程序。n可以阻止用户程序对操作系统的非法访问n保证高特权级的代码或数据不被低特权级的程序所破坏。 n为段寄存器赋值时的检查 n当前是否在物理存储器 n段类型是否与目标段选择符类型一致 n当前程序是否具有可以访问这个段的特权级n访问内存时的检查n操作数的偏移量是否超出段的边界 n操作是否与段的保护属性匹配 n1直接转移的保护n程序控制在同一代码段内转移时,只需要检查限长,保证程序转移后的目标地址不超过
21、当前代码段的边界。n如果要进行段间调用或跳转,则需使用远跳转或远调用指令,这时既要检查限长,还要检查特权级CPL和DPL 。nCPL=DPL,允许跳转和调用。转移后,CPL没有改变 nCPLDPL,此时要检查段描述符的C位。 n如果C位为1,表示这是一致代码段,允许转移,CPL并不改变。n如果C位等于0,则禁止转移。2间接转移的保护间接转移采用JMP/CALL X:Y指令,X指门选择符 门可以看做是一种转换机构。门有4种类型:n调用门(用来改变任务或者程序的特权级别)调用门中包含了入口点的虚地址:n目标选择符n偏移量 n任务门(用来执行任务切换 )n中断门(指出中断服务程序的入口地址)n陷阱门
22、(指出中断服务程序的入口地址) 1系统描述符 门描述符属于系统描述符,格式如下16种系统描述符类型见书352页2调用门 调用门描述符中的参数计数值表示 :有多少个参数必须从主程序的堆栈复制到被调用子程序的堆栈。在使用调用门时,CPU也要进行权限检查,权限检查时要依据以下几个因素:1.当前特权级CPL 2.请求特权级RPL 3. DPLGATE,即门描述符的DPL 4.DPLCODE,即目标代码段描述符的DPL5.CCODE,即目标代码段描述符的C位 n使用CALL指令时,CPU检查以下两个条件:DPLGATEMAX(CPL, RPL)DPLCODECPLn使用JMP指令时,CPU检查以下两个条
23、件: DPLGATEMAX(CPL, RPL) CCODE为1且DPLCODECPL 或 CCODE为0且DPLCODECPL 只有条件满足了才能使用调用门 10.4 任务完成某项功能的多个程序的集合称为任务 nCPU允许系统中存在多个任务 n任务能以分时的方式使各程序轮流执行,n用户感觉到所有的任务是在同时运行n在保护模式下每个任务是独立的 n系统中至少存在一个任务每个任务都由两个部分组成:n任务执行环境TESn任务执行环境包括一个代码段、堆栈段和数据段等,任务在每一个特权级上执行时都有一个堆栈段n每个任务都有一个LDT描述符表,构成一个局部地址空间,局部空间的数据和代码不能被其他任务访问。
24、n任务状态段TSS 2任务状态段TSSnTSS中保存了任务的各种状态信息 nTSS描述符中规定了任务状态段的基地址和任务状态符的大小,格式如下:TSS的基本格式 nTSS的基本格式由104字节(000H065H)组成 ,这些字节可分为:n寄存器保存区域 n内层堆栈指针区域n地址映射寄存器区域 n链接字段 n调试陷阱位T nI/O许可位图寄存器保存区域 n用于保存n通用寄存器n段寄存器n指令指针n标志寄存器 n当TSS对应的任务正在执行时,保存区域中的值是无意义的;n在当前任务挂起时,这些寄存器的当前值就保存在该区域。 内层堆栈指针区域TSS的内层堆栈指针区域中有3个堆栈指针,分别指向0级、1级
25、和2级堆栈的栈顶。n当特权级提升时,从TSS中取出相应级别的堆栈指针装入SS及ESP寄存器,以切换到高特权级的堆栈,而原先SS及ESP的内容则保存在这个新的堆栈中。n当高特权级向低特权级转移时,CPU并不把高特权级的堆栈指针SS:ESP保存到TSS中。 地址映射寄存器区域 TSS中保存了任务的CR3和LDTR。在任务切换时,处理器自动从新任务的TSS中取出这两个字段,分别装入到寄存器CR3和LDTR。这样就改变了虚拟地址空间到物理地址空间的映射。链接字段链接字段位于在TSS偏移0开始的双字中,n其高16位未用n低16位保存前一任务的TSS的选择符调试陷阱位T在TSS内偏移64H处的16位是为任
26、务提供的属性。最低位T表示调试陷阱位。n发生任务切换时,如果新任务的T位为1,那么在切换到新任务后,立即产生调试陷阱。 I/O许可位图任务使用的I/O许可位图也存放在TSS中,以作为TSS的扩展部分。在TSS内偏移66H处的字用于存放I/O许可位图在TSS内的偏移(从TSS的头开始计算)。n1直接任务切换n段间跳转指令JMP X:Y或段间调用指令CALL X:Y可以用来执行任务切换。n在中断/异常或者执行IRET指令时也可能发生任务切换。n2.间接任务切换 n通过任务门可以进行任务的间接切换 任务A到B的切换步骤n检查目标任务B状态段的限长 n把寄存器现场保存到当前任务A的TSS n把指示目标
27、任务(任务B)TSS的选择符装入TR寄存器中,同时把对应TSS的描述符装入TR的高速缓冲寄存器中 n恢复当前任务(任务B)的寄存器现场 n把CR0中的TS标志置为1 任务A到B的切换步骤(续)n把TSS中的CS选择符的RPL作为当前任务特权级,设置为CPLn装载LDTR寄存器 n装载代码段寄存器CS、堆栈段寄存器SS和各数据段寄存器及其高速缓冲寄存器。 任务内特权级变化时TSS中堆栈指针的使用在特权级提升时:nTSS中相应的堆栈指针对SS及ESP寄存器进行初始化,建立起一个空栈 n把低特权级程序的SS及ESP寄存器的值压入堆栈 n从低特权级堆栈复制以双字为单位的调用参数到高特权级堆栈中 n调用
28、的返回地址被压入堆栈 RET指令及步骤nCALL指令不能向低特权级转移;nRET指令不能向高特权级转移。nRET指令所使用的返回地址的选择符也只能是代码段描述符,而不能是系统描述符或门描述符。执行“RETF n”指令时,步骤如下:nRET指令先从堆栈中弹出返回地址n为返回低特权级代码,跳过高特权级堆栈中的 RET指令(续)参数,再从高特权级栈中弹出指向低特权级堆栈的指针,并装入SS及ESP,切换到低特权级堆栈。n调整ESP,跳过主程序压入到低特权级堆栈的参数。 n检查数据段寄存器DS,ES,FS及GS,以保证寻址的段在低特权级是可访问的。n返回到主程序的下一条指令执行。n立即数n规定了堆栈中要
29、跳过的参数的字节数。 nCPU采用I/O特权级IOPL和TSS段中I/O许可位图的方法来控制输入/输出,实现输入/输出保护。1I/O敏感指令n在EFLAGS寄存器中,有两位是输入/输出特权级IOPL。CPLIOPL时,可以执行I/O敏感指令。 EFLAGS标志寄存器中的IOPL n任务状态段中的I/O许可位图也影响I/O敏感指令的执行。 I/O敏感指令列表2I/O许可位图nI/O许可位图就是一个二进制位串 n位串中的每一位对应一个I/O地址 n如果位串中的第n位为0,那么I/O地址n就可以由任何特权级的程序访问,而不加限制;n如果第n位为1,I/O地址n只能由在IOPL特权级或更高特权级运行的
30、程序访问。n一条I/O指令最多可涉及4个I/O地址 n这条指令用到的所有I/O地址的许可位都必须为0,才允许访问 3对IOPL的保护nEFLAGS中的IOPL ,VM和IF位不能随便更改n只有在高特权级程序中执行的IRET, POPF, CLI和STI等指令才能改变它们,如图I/O位图 n修改任务I/O位图的内核驱动程序举例: giveio.c 执行过程见书368页。10.5 中断和异常n中断分为内部中断和外部中断两大类。n外部中断通常称为“中断”;n内部中断通常称为“异常”;n通常在两条指令之间响应中断或异常;nCPU最多处理256种中断或异常。 1. 中断n中断是由异步的外部事件引起的,n
31、中断信号来自于CPU外部 nCPU有两根引脚INTR和NMI接受外部中断请求信号。nINTR接受可屏蔽中断请求nNMI接受不可屏蔽中断请求 n标志寄存器EFLAGS中的IF标志决定是否响应INTR的中断请求 nIF=0时,CPU不响应INTR信号nCPU在响应中断请求时,从外部硬件读出一个8位的中断类型号,来区分外部中断的来源。n对来自NMI的中断请求,CPU不检查IF标志。n在响应NMI中断时,不从外部硬件接收中断类型号,其中断类型号固定为2。2. 异常n异常是CPU在执行指令期间检测到不正常的或非法的操作所引起的 n发生异常时,在对该异常处理完毕前,引起该异常的指令就不能成功地被执行; n
32、异常发生后,处理器,根据异常号码,转到相应的异常处理程序。n根据引起异常的程序是否可被恢复和恢复点的不同,把异常分为:n 故障n陷阱n 中止故障 n故障是在引起异常的指令之前,把异常情况通知给系统的一种异常。 n故障是可排除的。n当控制转移到故障处理程序时,在堆栈中保存的断点CS及EIP的值指向引起故障的指令。n在故障排除后,执行IRET可以返回到引起故障的程序。 陷阱 n陷阱是在引起异常的指令执行之后触发的一种异常。n陷阱处理后,要返回到引起陷阱的指令的下一条指令。中止 n中止是在系统出现严重的不可恢复的事件时触发的一种异常。n产生中止后,系统要重新启动才能恢复正常运行状态。 2异常类型号
33、n每一种异常被赋予一个异常类型号 n某些异常以出错码的形式提供一些附加信息传递给异常处理程序 n一个号码如果已经作为异常类型号,就不能再作为中断类型号使用。n异常类型号列表见书371页3故障类异常(1)除法出错故障(异常0) n当执行DIV指令或IDIV指令时,如果除数等于0或者除数太小,以至于得到的商超过了操作数能容纳的范围,那么就产生这一故障。n除法出错故障没有出错码。(2)边界检查故障(异常5) n如果BOUND指令发现被测试的值超过了指令中给定的范围,那么就发生边界检查故障。n边界检查故障不提供出错码。故障类异常(3)非法操作码故障(异常6)如果CS和EIP所指向的不是一个合法的指令,
34、那么就发生非法操作码故障。 有下列情况:n操作码字段的内容不是一个合法的CPU指令代码;n要求使用内存操作数的场合,使用了寄存器操作数;n 不能被加锁的指令前使用了LOCK前缀。非法操作码故障不提供操作码。 故障类异常(4)无浮点处理器故障(异常7) 这个故障用来模拟数字协处理器。 该故障在下列两种情况下产生:n执行浮点指令时,控制寄存器CR0中的EM位或TS位为1;n执行WAIT指令时,控制寄存器CR0中TS位及EM位都为1。nEM位为1,CPU必须用整数指令来模拟符点计算;nTS位为1,CPU必须将上一个任务的浮点运算现场保存起来,再恢复当前任务浮点运算的现场。故障类异常(5)无效TSS故
35、障(异常0AH)n当发生任务切换时,需要使用任务状态段TSS。如果当前程序的特权级不能访问该TSS,或者TSS中保存的LDTR,CS,DS等寄存器不正确,就发生无效TSS故障。n无效TSS故障提供了一个出错码,格式 故障类异常n高13位是选择符的索引部分;nTI位是选择符的TI位;nEXT位等于1时,表示故障由外部事件引起。nIDT位等于1时,表示故障由于读取IDT表引起。引起无效TSS故障的原因如下:nTSS描述符中的段限长小于103;n无效的LDT描述符,或者LDT描述符的P位为0;n堆栈段不是一个可写段; n堆栈段选择符索引的描述符超出描述符表界限;故障类异常n引起无效TSS故障的原因如
36、下(续):n堆栈段DPL与新的CPL不匹配;n堆栈段选择符的RPL不等于CPL;n代码段选择符索引的描述符超出描述符表界限;n代码段选择符不指向代码段;n非一致代码段的DPL不等于新的CPL;n一致代码段的DPL大于新的CPL;n对应DS,ES,FS或GS的选择符指向一个不可读段(如系统段);n对应DS,ES,FS或GS的选择符索引的描述符超出描述符表的界限。 故障类异常(6)段不存在故障(异常0BH) n在给CS,DS,ES,FS或GS赋值时(不含SS),如果发现这些段寄存器指向的段描述符其他字段的值有效,而P位为0,产生段不存在故障。 n段不存在故障提供了一个包含引起该故障的段选择符的出错
37、代码。故障类异常(7)堆栈段故障(异常0CH)当处理器检测到与SS段有关的问题时,就发生堆栈段故障。出现故障的情况如下:n在堆栈操作时,偏移超出段界限所规定的范围。 出错码为0。n在由特权级变换所引起的对高特权级堆栈的操作时,偏移超出段界限所规定的范围,高特权级堆栈段的段描述符中的P位为1。 此时出错码中包含高特权级堆栈的选择符。n 装入到SS寄存器的段描述符中的P位为0。 此时出错码中包含有对应的选择符。 故障类异常(8)通用保护故障(异常0DH)除了明确列出的段异常外,其他的段异常都被视为通用保护故障。 通用保护故障可分为如下两类: n违反保护方式,但程序无需中止的异常。n出错码为0 n违
38、反保护方式,并导致程序终止的异常。n出错码可能为0,也可能不为0。故障类异常(9)页故障(异常0EH)启用分页机制后,线性地址要经过分页机制转换才能成为物理地址。转换过程中出现异常的原因: n页目录表项或页表项中的P=0,对应的物理页不在内存中;n发现试图违反页保护属性(U/S,R/W)的规定而对页进行访问。n提供出错码故障类异常(10)协处理器出错(异常10H)n协处理器出错故障指示协处理器发生了未被屏蔽的数字错误,如上溢或下溢。 n协处理器出错故障不提供出错码。4陷阱类异常n调试陷阱 n断点陷阱 n溢出 调试陷阱 调试异常有故障类型,也有陷阱类型 调试异常不提供出错码。几种陷阱如下:断点陷
39、阱 n调试程序可利用“INT 3”指令实现程序断点。n“INT 3”指令被看成是一种陷阱,而不是一个故障。 n“INT 3”陷阱不提供出错码。溢出 nINTO指令提供有条件的陷阱,n如果OF标志为1,那么INTO指令产生陷阱;n否则不产生陷阱,继续执行INTO后面的指令。 n溢出陷阱不提供出错码。 5中止类异常 (1)双重故障异常(异常8) 当系统正在处理一个异常时,如果又遇到另一个不能处理的异常,CPU就产生一个双重故障,双重故障属于中止类异常,出错码为0。n当正处理一个段故障异常时,又产生一个页故障。这时通知给系统的是一个页故障异常。n如果正在处理一个段故障或页故障时,又一个段故障被检测到
40、,或者如果正处理一个页故障时,又一个页故障被检测到,那么就引起双重故障。中止类异常双重故障通常指示系统表出现严重的问题 ,需要重启系统。(2)协处理器段越界(异常9) n协处理器段越界异常也属于中止类异常,引起该异常的指令不能被重新执行。n当浮点指令操作数超出段界限时,产生该异常。n协处理器段越界异常不提供出错码。 n中断描述符表IDT所含的描述符只能是中断门、陷阱门和任务门。 n中断门中断门和陷阱门n陷阱门n任务门前面已有介绍。在中断或异常产生后,CPU依据中断类型号或异常号进行中断响应或异常处理。步骤如下:(1)如果是异常处理,首先根据异常类型确定返回地址。如果有出错代码,则按照出错码格式
41、构造出错码,并把出错码压入堆栈。n对于故障,CS:EIP指向引起故障的指令;n对于陷阱,CS:EIP指向引起陷阱的指令的下一条指令。 中断和异常的处理过程(2)判断中断类型号要索引的门描述符是否超出IDT的界限。 若超出界限,就触发通用保护故障,出错码如右:(3)再从IDT中取得对应的门描述符,分解出选择符、偏移量和属性字节,并进行有关检查。 中断和异常的处理过程n如果是由INT n指令或INTO指令引起转移,还要检查该描述符中的DPL是否满足CPLDPLGATE;n对于其他的异常或中断,则不检查CPLDPLGATE条件。 (4)根据门描述符类型,分别转入中断或异常处理程序。 n如果门描述符是
42、中断门或陷阱门,那么控制转移到当前任务的一个处理程序过程,并且可以变换特权级,从中断门和陷阱门中获取指向处理程序的48位地址指针(16位段:32位偏移)。 n如果门描述符是任务门,后面的章节会讲到。中断和异常的处理过程取得48位地址指针后,CPU执行以下步骤:(1)若段选择符为0,则产生通用保护故障;(2)在GDT/LDT中取对应的描述符;(3)若描述符不是一个代码段描述符,则产生通用保护故障;(4)若代码段(C0)且DPLCPL,则产生通用保护故障;(5)调整段选择符的RPL0(不修改门中的段选择符,在CPU内部调整);中断和异常的处理过程(6)把段选择符装入CS;(7)若偏移超过段长,则产
43、生通用保护故障;(8)EFLAGS压入堆栈;(9)CS压入堆栈;EIP压入堆栈;这里的 CS:EIP是指中断/异常的返回地址;(10)置TF0,NT0;(11)若为中断门,则使IF0;(12)若有出错码,则把出错码压入堆栈;(13)把偏移装入EIP,跳转到处理程序。 中断和异常的处理过程n中断或异常可以转移到同一特权级或高特权级。是否要转移到高特权级,由代码段的描述符中的类型(C位)及DPL字段决定:n如果C位=1(一致性代码段),则不改变特权级。n如果C位=0(非一致性代码段)且DPLCPL,产生通用保护异常,因为不能通过中断或异常而降低特权级。 中断和异常的处理过程通过中断门的转移和通过陷
44、阱门的转移之间的差别只是对IF标志的处理。 n对于中断门,在转移过程中把IF置为0;n对于陷阱门,在转移过程中保持IF位不变。中断和异常的处理过程在有出错码的情况下,转入处理程序之前还要把出错码压入堆栈。下面给出四种情况:第1,3种情况没有出错码;第2,4种情况有出错码。 如果以中断类型号为索引,在中断描述符中取出的是一个任务门描述符,那么控制转移到新的任务。将任务门放在IDT表中,在响应对应的中断或异常时,可根据该任务门实现任务的自动调度。 这种任务调度由CPU直接执行,速度快,开销小。 各种转移方式的比较第一种情况(使用中断门或陷阱门 )n没有进行任务切换 n对当前任务的状态可直接进行访问
45、 n处理程序必须存在于当前任务的地址空间中 第二种情况(使用任务门) n要进行任务切换n转移到处理程序要花费较长时间 n访问原任务的状态较为复杂 3中断或异常处理后的返回指令IRET用于从中断或异常处理程序中返回。该指令的执行根据任务嵌套标志NT位是否为1分为两种情形: nNT位为1时,IRET执行的是嵌套任务的返回。这种情形在通过任务门转入的处理程序返回时出现。nNT位为0时,IRET执行的是当前任务内的返回。这种情形在通过中断门或陷阱门转入的处理程序返回时出现 4各种转移途径的总结 nJMP、CALL、INT和IRET指令都可以引起任务切换。n这些切换是主动的任务切换;n在执行这些指令时,
46、转移到一个新的任务。n中断和异常引起的任务切换是被动的任务切换。n可能在程序执行的任何时候发生。 n任务内特权级变换的途径如下图n任务内相同特权级转移如下图n构化异常处理,是Windows操作系统提供处理程序错误或异常的机制。 例如C/C+中的_try,_finally和_try,_except 等功能 举例:C语言的结构化异常处理程序seh.c 汇编程序捕获并处理异常程序except.asm 10.6 虚拟8086模式nV86模式是保护模式下的一种工作方式。n寻址的地址空间是1MB,地址为20位;n程序中使用的内存地址由两部分构成:16位段和16位偏移。 n在保护模式下,当标志寄存器EFLA
47、GS中的VM位为1时,处理器就处于V86模式。 1虚拟8086任务 nV86监控程序和在V86模式下的8086程序构成的任务称为虚拟8086任务,即V86任务。nV86任务形成一个由处理器硬件和监控程序组成的“虚拟8086”。nV86监控程序控制V86外部界面、中断和I/O。nCPU把V86任务作为与其他任务具有同等地位的一个任务。 nV86任务中,V86程序在V86模式下运行,而V86监控程序在保护模式下运行 2内存映射n在V86模式下,程序只能使用1MB的内存。n由段值乘以16加上偏移构成20位地址,这是线性地址。经过转换后,得到物理地址。 nCPU可同时运行多个V86任务,这些任务的内存
48、被映射到不同的物理内存上,相互之间互不影响。3V86模式下的敏感指令n指令CLI和STI的敏感条件不变,如果IOPL3,那么执行CLI或STI指令将引起通用保护故障。 n输入/输出指令IN, INS, OUT或OUTS是否执行由I/O许可位图对应位决定。如果输入/输出指令所使用的I/O地址对应的I/O许可位图内的各位都为0,则输入输出指令可正常执行,否则引起通用保护故障。 保护模式和V86模式之间的切换如图虚拟8086模式的进入和退出离开V86模式(2种)n在V86任务内离开V86模式n任务切换离开V86模式进入V86模式(2种)n通过IRET指令进入V86模式n通过任务切换进入zV86模式
49、10.7 操作系统类指令 系统指令可分为以下几类:n在实模式和任何特权级下可执行的指令n仅在实模式及特权级0下可执行的指令n仅在保护模式下可执行的指令课本394和395页列出了这些指令 1读取全局描述符表寄存器指令格式:SGDT QWORD PTR DST功能:把全局描述符表寄存器GDTR的内容保存到内存单元DST。说明:nDST是48位的内存操作数。nGDTR中的16位限长存入DST的低字,而32位基地址存入DST的高双字。在实模式和任何特权级下可执行的指令2读取中断描述符表寄存器指令格式:SIDT QWORD PTR DST功能:把中断描述符表寄存器GDTR的内容保存到内存单元DST。说明
50、:nDST是48位的内存操作数。nIDTR中的16位限长存入DST的低字,而32位基地址存入DST的高双字。在实模式和任何特权级下可执行的指令3读取机器状态字指令格式:SMSW DST功能:把机器状态字的内容保存到内存单元或寄存器中。说明:nDST可以是16位的内存操作数或寄存器;n机器状态字是CR0的低16位。在实模式和任何特权级下可执行的指令4读取性能计数器指令格式:RDPMC功能:读取由ECX指定的40位时间戳计数器,放入EDX:EAX中。说明:EDX存放模式寄存器的高8位,EAX存放模式寄存器的低32位。1清任务切换标志指令格式:CLTS功能:把CR0控制寄存器中的TS标志清零。说明:
51、TS标志置为1,表示已发生过任务切换,在当前任务使用协处理器指令时,产生陷阱。由陷阱处理程序完成协处理器现场的保存和恢复,随后执行CLTS指令清除TS标志,使得当前任务后续使用的协处理器指令不再产生故障。仅在实模式及特权级0下可执行的指令(续)2暂停指令格式:HLT功能:使处理器暂停执行。说明:系统进入暂停状态后,只有接收到一个外部中断或系统复位信号,才能离开暂停状态。仅在实模式及特权级0下可执行的指令(续)3设置全局描述符表寄存器指令格式:LGDT QWORD PTR SRC功能:把存储器中的6字节内容装入到全局描述符表寄存器GDTR中。说明:SRC是48位内存操作数。仅在实模式及特权级0下
52、可执行的指令(续)4设置中断描述符表寄存器指令格式:LIDT QWORD PTR SRC功能:把存储器中的6字节内容装入到中断描述符表寄存器IDTR中。说明:SRC是48位内存操作数 仅在实模式及特权级0下可执行的指令(续)5设置机器状态字指令格式:LMSW DST功能:把DST的内容装载到机器状态字。说明:nDST是16位的内存操作数或寄存器。n该指令可将机器状态字中的PE位置为1,以进入保护模式。n可以通过给CR0赋值的方法来设置机器状态字。仅在实模式及特权级0下可执行的指令(续)6系统寄存器数据传送指令格式:MOV DST, SRC功能:实现控制寄存器/调试寄存器/测试寄存器和32位通用寄存器之间的数据传送。说明:SRC和DST中有一个是通用寄存器另一个是控制寄存器、调试寄存器或者调试寄存器。 1设置局部描述符表寄存器指令 格式:LLDT SRC功能:把SRC中的内容作为指示局部描述符表LDT的选择符装入到LDTR寄存器。说明:nSRC可以是16位通用寄存器或存储单元。n该指令只能在特权级0执行 。仅在保护模式下可执
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025财务人员合同书范本
- 2025年上海企业(事业)单位劳动合同
- 2025劳动合同书(示范文本)
- 2025二手房买卖合同全文版
- 2025餐厅临时厨师劳动合同
- 2025水利工程建筑施工合同(范本)
- 《猫咪与花园:互动教学课件》
- 2025标准别墅装修合同范本
- 大学生职业规划190
- 申请甲方尽快签合同协议
- 油茶的加工厂可行性方案
- 《传播学教程》教案x
- 《小儿支气管肺炎》课件
- 皮肤科护士的实践经验与案例分享
- 代煎中药管理制度
- 转氨酶升高患者护理查房
- 《高中信息技术课分层教学的探索与研究》课题研究开题报告结题报告
- 对辊式破碎机设计
- 财产险水灾现场勘查及理赔定损标准
- JB-T 2302-2022 双筒网式过滤器 型式、参数与尺寸
- IPMP课程培训讲义
评论
0/150
提交评论