第10章保护模式及其编程.ppt
《第10章保护模式及其编程.ppt》由会员分享,可在线阅读,更多相关《第10章保护模式及其编程.ppt(163页珍藏版)》请在三一办公上搜索。
1、第10章 保护模式及其编程,10.1 保护模式基础 10.2 虚拟内存管理 10.3 特权级保护 10.4 任务 10.5 中断和异常 10.6 虚拟8086模式 10.7 操作系统类指令,10.1 保护模式基础,在保护模式下:寻址高达4GB的物理地址空间 支持存储器分段管理机制和分页管理机制支持多任务支持4个特权级和配套的特权检查机制区分不同级别的代码,10.1.1 32位CPU内部结构,CPU有8个处理单元:执行单元、分段单元、分页单元、总线单元、指令预取单元、指令译码单元、高速缓存单元和浮点运算单元。,1总线单元,总线单元是CPU与存储器和I/O的接口 总线接口对外提供:32位(或64位
2、)数据总线、32位(或36位)地址总线以及控制总线 总线单元负责完成所有外部总线操作,能够产生控制地址锁存器和数据总线收发器工作的控制信号。,2指令预取单元,指令预取单元实现指令流队列的机制CPU可以预取16字节的指令代码预取进来的指令要保存在FIFO队列中,3指令译码单元,指令译码单元接收FIFO队列的输出指令译码单元将接收到的机器代码指令译码为微代码指令,并供执行单元使用,4执行单元,执行单元取出译码后的指令并执行该操作,包括:算术逻辑单元ALU寄存器组专用乘法器移位器控存(ROM),5分段和分页单元,分段和分页单元负责地址产生、地址转换和对总线接口单元的段检查。CPU存储器管理的分段单元
3、用硬件进行高速地址计算,完成逻辑地址到线性地址的转换和保护性检查;分页单元实现保护模式下的分页机制,它可以将线性地址转换成物理地址,并由总线单元输出。,6浮点运算单元,浮点运算单元集成在80486及以上的CPU中;对于80386,需要另外一个数学运算协处理器80387来执行浮点运算。,7高速缓存单元,高速缓存单元将最近被访问的内存单元的内容保存在CPU内部的Cache中。下次访问这些内存单元时,CPU直接访问Cache就可以存取这些单元的内容。由于Cache的访问速度比内存快,高速缓存单元能够显著提高程序的运行速度。,10.1.2 三种运行模式,CPU具有三种运行模式:实模式、保护模式和虚拟8
4、086模式,关系如下:,1实模式,CPU被复位(加电)时,自动进入实模式。实模式不支持硬件上的多任务切换 CPU不能对内存进行分页管理 实模式也不支持特权级 DOS操作系统运行于实模式下,2保护模式,实模式下对一系列的寄存器进行设置,就可以进入保护模式。CPU提供了段式和页式内存管理功能 CPU支持多任务和特权级 Windows/Linux操作系统运行于保护模式下,3虚拟8086模式,虚拟8086模式是为了在Windows/Linux系统中执行DOS程序而设计的,它是一种经过“修改”的保护模式。,4特权级,在保护模式下,CPU有4个特权级(03),操作系统运行在高的特权级(0)上,而应用程序运
5、行在低的特权级(3)上。,10.1.3 寄存器,32位CPU支持的寄存器有以下几种:1通用32位寄存器 分别是:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP。主要用于算术运算、逻辑运算以及对内存操作数的寻址。,2标志寄存器,标志寄存器EFLAGS也扩展为32位,位11到位0和8086完全相同。这里主要扩展了4个标志位:V86模式位VM(位17)此位为1时,表示当前CPU正工作在V86模式下;此位为0,表示当前CPU工作在实模式或保护模式下。嵌套任务位N(位14)当前的任务嵌套在其他任务中,此位为1,否则为0恢复位RF(位16)I/O域IOPL(位13和12),3指令指针寄存器
6、EIP和堆栈指针寄存器ESP,指令指针寄存器EIP,它总是下一条要执行的指令的偏移地址,偏移地址指的是这条指令在代码段中的位置。堆栈指针寄存器ESP,用于存放当前堆栈段中栈顶的偏移地址。他们的低16位分别是IP和SP,4调试寄存器DR,调试寄存器提供高级的调试功能 例如:可以设置一个数据断点,在程序访 问某个数据时激活调试程序。,5测试寄存器TR,测试寄存器提供对TLB的测试。,6全局描述符表寄存器,全局描述符表GDT是用来定义全局存储器空间的一种机制,它用段描述符说明一个全局存储器中的段,每个GDT最多含有8192个描述符(8192864KB)。用全局描述符表寄存器GDTR指出GDT的位置和
7、大小。,GDTR是48位的寄存器。其最低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=0E0
8、03F40007FFH,则说明IDT的地址为0E003F400H,长度为7FFH+1=800H。其中可容纳800H/8=100H个中断门描述符。,8局部描述符表寄存器,局部描述符表LDT含有与系统中某一个任务相关的各个段的描述符;局部描述符表寄存器LDTR并不直接指出LDT的位置和大小,而是指向一个LDT描述符,由LDT描述符指出LDT的位置和大小。,9任务寄存器TR,任务寄存器TR在保护模式的任务切换机制中使用。TR是16位的选择符,其内容为索引值,它选中的是TSS描述符。任务状态段TSS中包含启动任务所必需的信息。它在存储器的基地址和限长(大小)由TSS描述符指出,TSS描述符放在全局描述
9、符表GDT中,而TR内容指出了TSS描述符在GDT中的顺序号。,10控制寄存器,存在着4个系统控制寄存器CR0CR3。CR0的低5位是系统控制标志,被称为机器状态字MSW。MSW中各位的含意:PE:保护模式允许标志 等于0为实模,等于1为保护模式 MP:运算协处理器存在位 等于1表示系统中有运算协处理器。,MSW中各位的含意(续),EM:等于1时系统用软件模拟器执行数学运算 TS:任务切换标志。当任务切换时,自动设置此位为1 PG:等于1时,存储器管理单元允许分页;等于0时,分页功能被关闭,线性地址等于物理地址。,11段寄存器CS,DS,ES,SS,FS,GS,32位CPU有6个段寄存器,比1
10、6位CPU增加了FS和GS两个段寄存器。在实模式下,它们的用法和16位CPU相同 在保护模式下,段寄存器不直接存放段基址,而是存放一个索引,由索引从GDT或LDT中找到段描述符,从而确定关于这个段的全部描述信息。这个索引被称为段选择符。,段寄存器(续),选择符的格式如下RPL:请求特权级,2位二进制数字,求特权级是将要访问的段的特权级。TI:表指示符。为0时,从GDT中选择描述符;为1时,从LDT中选择描述符。Index:索引。指出要访问描述符在段描述符表中的顺序号。,10.1.4 显示CPU寄存器的值,要取得GDTR,IDTR,TR,LDT寄存器的值,分别使用SGDT,SIDT,STR,SL
11、DT指令,这些指令将寄存器的内容保存到内存单元中。程序举例:cpuregs.asm,10.2 虚拟内存管理,如果程序要访问的内容不在内存中,CPU会产生一个异常,由操作系统的存储器管理程序来处理,将所需的内容装入内存中。这就是所谓的虚拟存储器,它并不完全是真正的内存空间,也称做虚拟内存。,10.2.1 段式内存管理功能,将虚拟地址转换为线性地址,由CPU的分段部件完成。虚拟地址:程序指令中使用的地址,由段和偏移两个部分组成 线性地址:段的基地址再加上偏移量 物理地址:从微处理器引脚上输出的地址信号,虚拟地址到线性地址,再到物理地址的转换过程,3段描述符,段描述符用于描述代码段、数据段和堆栈段。
12、段描述符的格式如图:,段描述符,段描述符位于GDT或LDT中,占64位,由以下几个部分组成:段基址(32位)限长(20位)访问权限(8位)属性(4位),访问权限字节,访问权限字节定义如下 P:存在位 等于1时表示该段己装入内存;等于0时表示该段没有在内存中,访问这个段会产生段异常。DPL:描述符特权级,说明这个段的特权级,访问权限字节,S:描述符类型位 为1时,这个段为代码段、数据段或堆栈段;为0时,为系统段描述符。E:可执行位,区分代码段和数据段 S=0且E=1时,这是一个代码段,可执行。S=0且E=0时,这是一个数据段或堆栈段,不可执行。E=0时,后面的两位为ED和W;若E=1时,后面的两
13、位为C和R。,访问权限字节,ED:扩展方向位 为0时,段从低地址向高地址扩展,偏移量小于等于限长。为1时,段从高地址向低地址扩展,偏移量必须大于限长。W:写允许位为0时,不允许对这个数据段写入;为1时,允许对这个数据段写入。,访问权限字节,C:一致位为0时,这个段不是一致代码段为1时,这个段是一致代码段R:读允许位为0时,不允许读这个段的内容为1时,允许读这个段的内容A:访问位为1表示段已被访问过为0表示段未被访问过。,属性位,属性位包括G、D、AVL等 G:粒度位。G1时,限长以页为单位;G0时,限长以字节为单位。D:默认操作数宽度。D1时,为32位数据操作段;D1时,为16位数据操作段。A
14、VL:可用位。这一位保留给操作系统或应用程序来使用,段描述符高速缓存,在读写内存单元时,CPU需要检查段描述符的内容是否和当前操作相一致,CPU的运行效率极大地降低。为解决这个问题,CPU在内部设置了段描述符高速缓存。在指令执行过程中,只有段寄存器的值发生改变时,才需要到GDT或LDT中装入段描述符。如果段寄存器的值不改变,高速缓存中的段描述符可以被直接引用,这样就避免了到主存中频繁读取段描述符。提高了CPU的效率。,10.2.2 页式内存管理功能,段式内存管理是将形如DS:EBX的虚拟地址,由DS的段基址再加上偏移部分,就得到了线性地址。分页管理将分段管理机制得到的线性地址转换为物理地址。使
15、用分页机制的好处:可以把每个活动任务当前所必需的少量页面放在内存中,而不必将整个段调入内存,从而提高了内存的使用效率。,1分页,页的长度固定为4KB 页与页之间没有重叠 页式内存简化了存储器管理 不能充分地利用内存,会产生碎片,2线性地址到物理地址的映射,线性地址按页为单位映射到物理地址 每一个线性页面只能映射到一个物理页面上多个线性页面可以映射到同一个物理页面上,3线性地址转换为物理地址的过程,32位线性地址被划分为3个部分:页目录索引(10位),对页目录的索引页表索引(10位),对页表的索引字节索引(12位),线性地址在页面内的偏移。,线性地址转换为物理地址的过程图,线性地址转换为物理地址
16、的过程,以PDBR的值作为页目录的基地址,定位到页目录。用线性地址中的页目录索引(10位)在页目录表中找到一个页表描述符。页表描述符的高20位给出了页表的基地址。线性地址中的页表索引(10位),指示了被访问的页在页表中的序号。页描述符的高20位给出了物理页面的基地址。物理页面的基地址再加上线性地址中的12位字节索引,便得到32位线性地址对应的32位物理地址。,4片内转换检测缓冲器TLB,为了提高转换效率,CPU内部设置了片内转换检测缓冲器TLB,其中保存了32个页描述符,它们都是最近使用过的。在从线性地址转换为物理地址时:如果线性地址的页描述符已在TLB中,则无需再经二级转换就可以直接引用。如
17、果线性地址的页描述符没有在TLB中,则需要访问页目录表和页表来取得页表描述符和页描述符,最后将这个页描述符存在TLB中。,5页表项,页表项就是在分页转换时用到的页表描述符和页描述符,它们都是32位的,其格式:页表项的低12位提供保护功能和统计信息。U/S位、R/W位、P位实现页保护机制;而D位和A位提供统计信息。,页表项,U/S:用户/管理员位 U/S=0时,只有操作系统程序可以访问该页,而不允许用户程序访问 U/S=1时,允许用户程序访问该页 R/W:读写位 R/W0,用户程序对页面只有读权限,不能写入;R/W1时,可读/写,页表项,P:存在位。P=1,页表或页存在于物理内存中;P=0,页表
18、或页没有在物理内存中。A:访问标志。如果对某页表或页访问过,CPU设置页表项中的A位为1。D:写入位。D=1时表示对该页进行过写操作,D=0时表示对该页还没有进行过写操作。AVL占3位,可以由操作系统使用,7Pentium的4MB页面,Pentium的页表项增加了3个属性位:SIZ,PCD和PWT。SIZ(Size)页尺寸位:SIZ=0时,页面的大小为4KB。SIZ=1时,页面的大小为4MB。,PCD位:PCD=0时,允许页被缓存;PCD=1时,禁止页被缓存。PWT位:PWT=0时,使用回写策略;PWT=1时,使用通写策略。通写策略指的是指令将数据写到页面Cache时,立即更新内存中的页面;回
19、写策略指的是指令将数据写到页面Cache后就认为指令已经完成,以后再将页面Cache中的数据更新到内存中。,8Pentium的物理地址扩展功能,第5位PAE位为1时,就启动物理地址扩展功能 线性地址仍然为32位,分为4个部分:PDPT索引(2位)页目录索引(9位)页表索引(9位)字节索引(12位),页表项,从原来的4字节扩展为8字节页目录和页表的大小仍然为4KB PAE功能启用且SIZ1时,线性地址的格式如图,9Pentium III的页面大小扩展功能,在分页状态下,PAE=0、PSE=1时,就启用了PSE功能。启用PSE时,PAE功能必须关闭。启用PSE功能时,由页目录项中的SIZ位(也称P
20、S位)来确定页面的大小。,10.3 特权级保护,保护模式下设置了0、1、2、3共4个特权级,以区分操作系统程序和应用程序。可以阻止用户程序对操作系统的非法访问保证高特权级的代码或数据不被低特权级的程序所破坏。,10.3.1 对数据访问的保护,为段寄存器赋值时的检查 当前是否在物理存储器 段类型是否与目标段选择符类型一致 当前程序是否具有可以访问这个段的特权级访问内存时的检查操作数的偏移量是否超出段的边界 操作是否与段的保护属性匹配,10.3.2 对程序转移的保护,1直接转移的保护程序控制在同一代码段内转移时,只需要检查限长,保证程序转移后的目标地址不超过当前代码段的边界。如果要进行段间调用或跳
21、转,则需使用远跳转或远调用指令,这时既要检查限长,还要检查特权级CPL和DPL。CPL=DPL,允许跳转和调用。转移后,CPL没有改变,CPLDPL,此时要检查段描述符的C位。如果C位为1,表示这是一致代码段,允许转移,CPL并不改变。如果C位等于0,则禁止转移。2间接转移的保护间接转移采用JMP/CALL X:Y指令,X指门选择符,10.3.3 门,门可以看做是一种转换机构。门有4种类型:调用门(用来改变任务或者程序的特权级别)调用门中包含了入口点的虚地址:目标选择符偏移量 任务门(用来执行任务切换)中断门(指出中断服务程序的入口地址)陷阱门(指出中断服务程序的入口地址),1系统描述符,门描
22、述符属于系统描述符,格式如下16种系统描述符类型见书352页,2调用门,调用门描述符中的参数计数值表示:有多少个参数必须从主程序的堆栈复制到被调用子程序的堆栈。在使用调用门时,CPU也要进行权限检查,权限检查时要依据以下几个因素:1.当前特权级CPL 2.请求特权级RPL,3.DPLGATE,即门描述符的DPL 4.DPLCODE,即目标代码段描述符的DPL5.CCODE,即目标代码段描述符的C位 使用CALL指令时,CPU检查以下两个条件:DPLGATEMAX(CPL,RPL)DPLCODECPL使用JMP指令时,CPU检查以下两个条件:DPLGATEMAX(CPL,RPL)CCODE为1且
23、DPLCODECPL 或 CCODE为0且DPLCODECPL 只有条件满足了才能使用调用门,10.4 任务,完成某项功能的多个程序的集合称为任务 CPU允许系统中存在多个任务 任务能以分时的方式使各程序轮流执行,用户感觉到所有的任务是在同时运行在保护模式下每个任务是独立的 系统中至少存在一个任务,10.4.1 任务状态段,每个任务都由两个部分组成:任务执行环境TES任务执行环境包括一个代码段、堆栈段和数据段等,任务在每一个特权级上执行时都有一个堆栈段每个任务都有一个LDT描述符表,构成一个局部地址空间,局部空间的数据和代码不能被其他任务访问。任务状态段TSS,2任务状态段TSS,TSS中保存
24、了任务的各种状态信息 TSS描述符中规定了任务状态段的基地址和任务状态符的大小,格式如下:,TSS的基本格式,TSS的基本格式由104字节(000H065H)组成,这些字节可分为:寄存器保存区域 内层堆栈指针区域地址映射寄存器区域 链接字段 调试陷阱位T I/O许可位图,寄存器保存区域,用于保存通用寄存器段寄存器指令指针标志寄存器 当TSS对应的任务正在执行时,保存区域中的值是无意义的;在当前任务挂起时,这些寄存器的当前值就保存在该区域。,内层堆栈指针区域,TSS的内层堆栈指针区域中有3个堆栈指针,分别指向0级、1级和2级堆栈的栈顶。当特权级提升时,从TSS中取出相应级别的堆栈指针装入SS及E
25、SP寄存器,以切换到高特权级的堆栈,而原先SS及ESP的内容则保存在这个新的堆栈中。当高特权级向低特权级转移时,CPU并不把高特权级的堆栈指针SS:ESP保存到TSS中。,地址映射寄存器区域,TSS中保存了任务的CR3和LDTR。在任务切换时,处理器自动从新任务的TSS中取出这两个字段,分别装入到寄存器CR3和LDTR。这样就改变了虚拟地址空间到物理地址空间的映射。,链接字段,链接字段位于在TSS偏移0开始的双字中,其高16位未用低16位保存前一任务的TSS的选择符,调试陷阱位T,在TSS内偏移64H处的16位是为任务提供的属性。最低位T表示调试陷阱位。发生任务切换时,如果新任务的T位为1,那
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 保护 模式 及其 编程
链接地址:https://www.31ppt.com/p-6614834.html