以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- CPU保护模式深入探秘 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=49878) |
-- 作者:卷积内核 -- 发布时间:7/13/2007 3:28:00 PM -- CPU保护模式深入探秘 保护方式的体系结构 主要问题: 一、保护方式的寄存器模型 1、GDT 与 GDTR 2、LDTR 3、IDTR 4、CR 5、TR |
-- 作者:卷积内核 -- 发布时间:7/13/2007 3:29:00 PM -- 二、 保护方式的描述符与页表项 高档微处理器的保护方式支持多种“描述符”,他们分别服务于不同的系统功能,如系统段描述符、局部描述符、调用门描述符、任务状态段描述符、任务门描述符、中断描述符,等等。 “描述符”是用以管理64T字节虚拟存储空间分段的基本元素。一个描述符对应于虚拟存储空间中的一个存储“段”,它负责将代码、数据、堆栈和任务状态段的“虚拟地址”映像到线性地址,并给段指定“访问属性”。 每个描述符8字节, BYTE1~0 LIMIT : 位 15 --- 位0 (或OFFSET) BYTE6 的低四位 位 19 --- 位16 BYTE4~2 BASE: 位 23 --- 位0 BYTE7 BASE: 位 31 --- 位24 BYTE5 位0 A 1访问过 在分段模型中: 64T 的空间 = 低32T全局空间 + 高32T的局部空间 2、物理地址和虚拟地址转换 分段和分页机制均支持48位虚拟地址 ==》32位物理地址的映射。 2.1 段式地址转换 每个段选择符寄存器Selector 都有一个64位的内部段描述符缓存寄存器,在指令执行时“透明”地装入描述符。 例如 MOV DS,AX 实际上,给段描述符缓存寄存器装入值,就实现从16位的选择符Selector 到对应的32位段基址的映射。段描述符缓存寄存器中的“描述符”将随任务的执行而动态改变。MMU只允许6个存储器处于活动状态, 分别对应CS、DS、ES、SS、FS、GS 2.2 页式地址转换 分页机制简化了MMU程序的实现。段转换过程产生的线性地址不再用作物理地址,还要经过第二个转换过程(页转换)。 存储器页目录表的地址由CR3中的页目录基址寄存器PDBR确定。PDBR的 这20位实际上是基址的MSB,低12位指示页内地址。这样页目录就包含4K字节存储器地址,所有的页目录组成1K个32位的地址。这些地址每个都指向一个物理存储器中的页表。 线性地址的10位页域从页表中选择一个1K的32位页表项(也被缓存在转换检测缓存器中)。 转换检测缓存器可以保存32个表项,因此共有128K字节的存储区总可以直接被访问,无须从页表中读出而可直接存取。如果要访问的“内容”不在这些页中,则存在将页表项读进转换检测缓存器的额外开销。 |
-- 作者:卷积内核 -- 发布时间:7/13/2007 3:29:00 PM -- 四、 多任务机制与保护实现 80286以上的高档微处理器实现了多任务的软件体系结构。所谓任务是指其硬件允许软件系统中存在多个任务并能够以分时的方式安排进行,即程序控制在一段固定长度时间后从一个任务转到另一个任务。 比如,任务可以循环方式执行,即最近执行的任务回到执行清单的末尾。尽管该过程时以分时的形式进行,CPU执行起来还是会让"人"觉得所有任务都是同时运行。 所谓任务指执行特定功能的程序集合,也可称作过程。软件系统通常需要执行许多过程。在保护模式的微处理器系统中,每个过程都是独立的任务,CPU提供一种称为任务切换的高效机制保证在任务之间进行切换。例如,一个以16MHZ运行的80386DX执行任务切换操作只需要19us。 当一个任务调入运行时,它既有全局又有局部存储器资源。局部存储器地址空间按任务进行划分,这意味着每个任务一般都有自己的局部存储器段。全局存储器中的段可被所有任务共享。从而,一个任务可以访问全局存储器中的所有段。 1、 保护和保护模式 可以在保护模式软件系统中加入防护措施以拒绝任务存储器资源未经授权或不正确访问。这种存储器防护措施称为保护,CPU硬件实现了一种保护机制。在多任务环境中,该机制对任务的局部和系统资源访问作了限制,使得各个任务之间隔离开来。 分段、分页和描述符是CPU 保护机制的关键元素。在分段存储器模型中,段是具有一项保护属性的虚拟存储器地址空间中的最小单位。其属性由段描述符中的访问权限信息和限长域定义。在存储器访问过程中硬件保护机制执行一系列检查。举个例子,当写存锗器缓存一致,还要检查偏移量以确定该区在段限长之内。CPU加在软件上的保护性检查和限制清单: 回顾一下段描述符中访问权限信息的有关属性。P位定义该段是否在物理存储器中。假定该段在物理存储器,类型域的第4位C/D说明它是代码段还是数据段(0表示数据段,1表示代码段)。其他诸如可读ER、可写EW、证实EC、向上ED和向下扩充以及是否已访何过A等段属性由类型域中其他位指定。特权级由DPL域指定。 当一段被访问过后,其基址和限长要缓存到CPU中。但是在装入描述符之前MMU要验证选中段当前是否在物理存储器中,当前程序是否由可访问的特权级,其类型是否同目标段选择符寄存器(CS代码段,DS,ES,FS,GS或SS堆栈段)一致,以及对该段的引用没有超出段边界。如果一项违反则发出一错误报告。存储管理程序可以确定原因,解决问题并重启操作。 违例一: 如果装入CS的选择符指向数据段的描述符,则类型检查产生 违规错误。 CPU为每个任务提供四种特权级: 0、1、2和3。其中 0级是最高的特权级,3级是最低的特权级。 系统软件和应用软件通常划分: 内核、系统服务、常规扩展、应用程序...... 核心代表提供面向微处理器功能(I/O控制、任务安排和存储器管理)的应用程序独立的软件。出于此原因它是最高的特权级0级。 这种划分还显示了是如何利用特权级将系统级软件(从级0到级2)同用户级应用程序(级3)分开的。某一级别的任务可以使用更高级的程序但是不能修改其内容。这样应用程序就可以使用高3级的系统程序而不必担心破坏其完整性。 最后,指令集上加有一些保护性措施。如系统控制指令只能在保护级为0的代码段中执行。 每个任务都有它自己的局部描述符表。因此,只要该任务的局部描述符表中的描述符不能被其他任务引用,那么就将该任务同其他任务隔离了开来。也就是说,该任务已经指定了一块独立的虚拟地址空间。 以上说明了段、特权级和局部描述符表为任务中的代码和数据提供了保护性措施。这类保护措施提高了软件的可靠性,因为一个应用程序中的错误不会影响到操作系统和其它应用程序。 再看一看特权级是怎样指定给代码段或数据段的。 任务运行的时候既可对局部又可对全局的代码段、数据段和堆栈段访问。特权级通过段描述符中访问权限信息指定给每个段。只要将级别号写入DPL位就可对段指定任意特权级。为提供更多的灵活性,输入/输出有两个特权级。 首先I/O驱动程序属于系统资源,指定一个特权级。I/O控制程序属于核心的一部分,它指定了特权级0。 指令 IN、INS、OUT、OUTS、CLI和STI称为信任指令。因为CPU保护模型给它们的使用加上了额外的限制。它们只能在大于或等于IOPL (输入/输出特权级) 码的特权级上执行。 IOPL是I/O的第二个特权级。IOPL位是在保护模式的标志寄存器中。IOPL位必须通过软件指定要给输入/输出指令的特权级。IOPL值随任务不同而不同。 假定高于特权级3的I/O指令限制应用程序直接执行I/O,那么应用程序如果要想进行I/O操作,它必须通过操作系统的I/O驱动程序请求程序。 |
-- 作者:卷积内核 -- 发布时间:7/13/2007 3:30:00 PM -- 2、在保护模式下访问代码和数据 在任务执行过程中,CPU可能需要将控制转给其他优先级的程序,或者访问不同特权级的段中数据。访问不同特权级的段中代码或数据通常有严格的限制,这些规则将保证高特权级的代码或数据不被低特权级的程序所破坏。 在讨论程序怎佯访问相同或不同特仅级中的数据之前,让我们先知道一些关于特权级的术语。我们曾经使用过术语DPL(描述符特权级)和IOPL(I/O特权级)。在讨论数据或代码访问中的保护机制时还用到了两个术语 CPL(当前特权级)和RPL(申请特权级)。CPL是任务当前访问的代码或数据段的特权级。 CPU保护规则决定程序能访问哪些代码或数据。在讨论程序控制怎样转给不同保护级的代码前,我们先看一看数据段怎样被当前特权级的代码所访问。 一般规则是代码只能访问相同或较低特权级的数据。例如,任务的当前特权级为1,那么它能访问DPL为1、2或3的数据段中操作数。只要DS、ES、FS或GS寄存器装入了新的选择符,那么就得检查目标数据段的DPL以确保它小于等于CPL和RPL得最大特权级。如果DPL满足条件,则描述符被缓存入CPU中,可以访问数据。 这条规则的一个例外是SS寄存器赋值时,DPL必须等于CPL。也就是说,活动的堆栈(每个特权级有一个)总是处在CPL级。 【例12】 假定 DPL=2,CPL=0,RPL=2,可以进行数据访问吗? 为将控制转给相同或不同特权级的另一段中代码,心须使用远转移或调用指令。对于这类程序控制转移,既要检查限长又要检查类型。发生程序控制转移需要两个条件。 将控制转移给不同特权级的段中代码时所遵循的一般规则是新代码段的特权级必须更高。一种称为门描述符的描述符用来实现特权级的改变。将控制转给高特权级代码段的指令依旧是远调用或远转移指令。这次指令并不直接规定目标代码的位置,它是引用一个门描述符。这种情况下CPU执行更为复杂的程序控制转移机制。 4种类型的门描述符:调用门、任务门、中断门和陷阱门。调用门实现任务从CPL级到更高特权级的间接控制转移。它在更高特权级段中定义了一个有效入口点,调用门的值就是入口点的虚拟地址:目标选择符和目标偏移量。目标偏侈量指向该段中要执行的指令,调用门可以放在GDT或LDT中。 调用指令包括偏移量和选择符。当指令执行时,该选择符装入CS并指向调用门。反过来,调用门又会导致它的目标选择符装入CS。这导致被调用代码段的描述符被缓存,该代码段描述符位存储器代码段提供了基址。注意到调用门描述符中的偏移量将定位代码段中的入口点。 每当任务的当前特权级改变时都会激活一个新的堆栈。作为程序上下文切换序列的一部分,旧的ESP和SS随同旧的EIP和CS以及其它参数被保存到新的堆栈中,需要保存这些信息用以返回旧的程序环境。现在高特权级的过程就开始执行。 执行结束时RET指令将程序控制返回给调用的程序。RET指令将导致旧EIP和CS值,一些参数及其旧的ESP和SS值从堆栈中弹出。这就恢复了原来的的程序环境。现在程序则从低特权级代码段中调用指令的后一条指令开始执行。对于成功的调用门的DPL必须等于CPL,被调用码的RPL必须比CPL特权级更高。
|
-- 作者:卷积内核 -- 发布时间:7/13/2007 3:30:00 PM -- 3、任务切换和任务状态段表 任务是CPU多任务软件体系结构中的关键元素,并指出它的另外一个重要特点就是高性能的任务切换机制。任务可以间接或直接地被激活,这只需要执行段间转移或段间调用指令即可。在利用转移指令启动任务切换时,不保存前一个任务的返回链接。但是如果利用调用切换到新任务,那么将自动保存返回链接信息,该信息保证新任务执行完后返回到旧任务中调用指令后面的一条指令。 CPU执行的每一个任务都指定了一个选择符,称为任务状态选择符。该选择符是全局描述符表中任务状态段描述符对应的索引。 如果转移或调用指令将任务状态选择符作为其操作数,那么任务有一个直接的入口。执行一条调用指令时,选择符装入CPU的任务寄存器(TR)。然后从GDT中读出相应的任务状态段描述符并装入任务寄存器缓存,以上只有在描述符的访问权限信息声明的条件满足时才会发生。也就是说,描述符在物理存储器中(P=1);任务不是忙状态(B=0);未违反保护性措施(CPL必须等于DPL);装入之后描述符中的基址和限长将定义任务状态段(TSS)的初始点和大小。该TSS包含启动或停止任务的所有信息。 任务段中的内容。 任务启动的过程。 旧的程序上下文通过将旧的TSS选择符作为返回链接选择符保存到TSS中而得以保留。在新任务得末尾执行返回指令,那么返回链接选择符将自动重新装入TR。这就激活了旧的TSS,前面的程序环境得以恢复,现在程序从旧任务中离开的地点开始执行。 间接激活任务的方法时转移到或调用一个任务门。这是一种将控制传给其RPL比CPL高的任务的方法。这次指令包括指向任务门的选择符,而不是任务状态选择符,该选择符可能在GDT或LDT中。门中的TSS选择符装入TR用以选择TSS并启动任务。 一个任务切换原则的例子。 |
-- 作者:卷积内核 -- 发布时间:7/13/2007 3:31:00 PM -- 五、虚拟 8086 模式 8086/8088应用程序,例如那些为PC系列机操作系统编写的程序可直接运行在高档CPU的实模式下。保护模式的操作系统例如UNIX也可以不加修改地运行DOS应用程序。这是由虚拟8086模式完成的。CPU支持在此模式下的8086CPU编程模型,并且可直接运行8086/8088中的程序。或者说它创建了一个为执行程序用的虚拟8086机。 对干此类应用,CPU将在保护模式和虚拟8086模式之间来回切换。 UNIX操作系统和UNIX应用程序运行在保护模式,如果要运行DOS操作系统和DOS应用程序,那么CPU将切换到虚拟8086模式。该模式切换由称作虚拟8086管程的程序控制。 虚拟8086模式由扩展标志寄存器中的虚拟模式(VM)位选择。VM切换到1则允许虚拟8086模式操作。实际上EFLAGS中的VM位并不是由软件直接切换到1。这是因为虚拟8086模式一般是以保护模式任务进入的。从而,拷贝EFLAGS的值应该包括VM等于1,给EFLAGS赋值也是任务切换过程的一部分。这样反过来则启动了虚拟8086模式。虚拟8086程序运行在特权级3。虚拟8086管程负责设置和清除任务对EFLAGS的拷贝中的VM位,并且允许保护模式任务和虚拟8086模式任务同时存在于多任务程序环境中。 另外一种启动虚拟8086模式的方法是通过中断返回。在这种情况下EFLAAGS从堆栈中重新装入。同样,EFLAGS拷贝中的VM位应先设为1以进入虚拟8086模式操作。 |
-- 作者:一分之千 -- 发布时间:7/14/2007 8:56:00 AM -- 好文章 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
3,796.875ms |