安全执行模式下信任客户使用安全核心系统的制作方法

文档序号:6436566阅读:249来源:国知局
专利名称:安全执行模式下信任客户使用安全核心系统的制作方法
技术领域
本发明主要涉及内存管理系统和方法,特别是涉及提供安全计算环境的内存管理系统和方法。
背景技术
图1为由x86处理器产生的异常堆栈帧(exception stackframe)100的方框图,例如当运行视窗操作系统时(Windows操作系统,由位于华盛顿州的雷特蒙德的微软公司提供)。在异常处理程序的记录(entry)中,除了代码段(CS)、指令指针(EIP)、堆栈段(SS)、堆栈指针(ESP)寄存器和标志寄存器(EFLAGS)以外,保留了发生异常(亦即,错误应用程序)的应用程序的所有寄存器。在异常堆栈帧100中可取得这些寄存器的内容。
异常堆栈帧100开始于段地址SSESP,错误码位于异常堆栈帧100中的段地址SSESP+00h处,错误应用程序的指令指针寄存器的内容位于异常堆栈帧100中的段地址SSESP+04h处,错误应用程序的代码段寄存器的内容位于异常堆栈帧100中的段地址SSESP+08h处,错误应用程序的标志寄存器的内容位于异常堆栈帧100中的段地址SSESP+0Ch处,错误应用程序的堆栈指针寄存器的内容位于异常堆栈帧100中的段地址SSESP+10h处,错误应用程序的堆栈段寄存器的内容位于异常堆栈帧100中的段地址SSESP+14h处。应注意的是如果传送至异常处理程序的相关控制包含了优先权等级变更,则ESP和SS会出现在异常堆栈帧100中。
在段地址SSESP+04h的错误应用程序的指令指针寄存器的内容指向错误应用程序中产生异常的指令。在段地址SSESP+10h的错误应用程序的堆栈指针寄存器的内容为错误应用程序的堆栈帧在发生错误时的地址(亦即,指向此地址)。
有关段异常的错误码非常类似于保护模式选择器。最高的13位(位15:3)为选择器索引,而位2为表索引。然而,取代请求者(requestor)优先权等级,位0和1会碰到下列的情况若由外部事件引起程序错误,则位0(EXT)置位,若选择器指针涉及IDT内的门描述符,则位1(IDT)置位。
图2为用于先进微装置(AMD)公司制造的x86处理器中的SYSCALL/SYSRET目标地址寄存器(STAR)200的方框图。该SYSCALL/SYSRET目标地址寄存器200包括“SYSRET CS选择器和SS选择器基本”字段、“SYSCALL CS选择器和SS选择器基本”字段和“目标EIP地址”字段。
在执行SYSCALL指令之前的一些点,操作系统将用于适当的系统服务码的代码段的值写入至SYSCALL/SYSRET目标地址寄存器200的SYSCALL CS选择器和SS选择器基本字段。操作系统也将要被执行的系统服务码内的第一指令的地址写至SYSCALL/SYSRET目标地址寄存器200的目标EIP地址字段。STAR寄存器在系统启动配置。目标EIP地址可指向操作系统核心中的固定系统服务区。
在执行SYSCALL指令期间,将SYSCALL CS选择器和SS选择器基本字段的内容复制到CS寄存器中。将SYSCALL CS选择器和SS选择器基本字段的内容加上‘1000b’值,复制到SS寄存器中。如此有效地增量CS选择器的指针字段而使得所得到的SS选择器指向在描述符表中的CS描述符后的下一个描述符。目标EIP地址字段的内容复制到指令指针器寄存器中,并指定要被执行的第一指令的地址。
在执行相对于SYSCALL指令的SYSRET指令之前的一些点,操作系统将用于呼叫码的代码段的值写入至SYSCALL/SYSRET目标地址寄存器(STAR)200的SYSCALL CS选择器和SS选择器基本字段。SYSRET指令获得从ECX寄存器来的返回EIP地址。

发明内容
根据本发明的一个方面,提供了一种方法。该方法包括执行一不安全例程并接收来自该不安全例程的请求。该方法还包括在硬件中执行该请求的第一次评估,并在软件中的安全例程中执行该请求的第二次评估。
根据本发明的另一方面,提供了一种计算机系统。该计算机系统包括可配置来执行安全例程和不安全例程的处理器。该计算机系统还包括连接以执行与该不安全例程相关的请求的第一次评估的硬件。可进一步配置该硬件以将该请求的通知提供至该安全例程。可配置该安全例程以执行该请求的第二次评估。可进一步配置该安全例程以拒绝该请求的请求响应。


通过结合附图的下述详细说明,可易于了解本发明,各图中相同的参考数字表示相同或相似的组件,其中图1为由x86处理器产生的异常堆栈帧的方框图,例如运行Windows操作系统时;图2为SYSCALL/SYSRET目标地址寄存器的方框图;图3为根据本发明的一个方面的系统的一个实施例的方框图;图4A为可根据本发明的一个方面,可使用的计算机系统的一个实施例的方框图;图4B为根据本发明的一个方面的计算机系统的一个实施例的方框图,该计算机系统包括了含有输入/输出(I/O)安全检测单元(SCU)的中央处理器(CPU),该SCU用来保护设备硬件单元免于由该CPU产生的未经授权的存取;图4C为根据本发明的一个方面的计算机系统的一个实施例的方框图,该计算机系统包括了包含CPU安全检测单元(SCU)的CPU和包含主桥接器SCU的主桥接器;图5A显示根据本发明的一个方面的计算机系统实施例的各种硬件组件和软件组件间的一些关系的方框图;图5B显示根据本发明的一个方面的计算机系统实施例的各种硬件组件和软件组件间的一些关系的另一个方框图;图5C显示根据本发明的一个方面的计算机系统实施例的各种硬件组件和软件组件间的一些关系的又一个方框图;图6A为根据本发明的一个方面的一个CPU实施例的方框图;图6B为根据本发明的一个方面的另一个CPU实施例的方框图;
图6C为根据本发明的一个方面的另一个CPU实施例的方框图;图7为根据本发明的一个方面的包括了具有中央处理器SCU的分页单元的一个MMU实施例的方框图;图8A为根据本发明的一个方面的显示输入/输出SCU的一个实施例的方框图;图8B为根据本发明的一个方面的中央处理器SCU的一个实施例的方框图;图9为根据本发明的一个方面用来处理安全执行模式(SEM)异常的安全模式SMCALL/SMRET目标地址寄存器(SMSTAR)和安全模式GS基址(SMGSBASE)寄存器的实施例的方框图;图10A为根据本发明的一个方面,当SEM异常发生时,所产生的SEM异常堆栈帧的一个实施例的方框图;图10B为根据本发明的一个方面,SEM异常堆栈帧的错误码的示例性格式的方框图;图11为根据本发明的一个方面,处理安全执行模式异常的方法的实施例的流程图;图12为根据本发明的各种方面,结合了在计算机系统中用来维持安全的各种实施例的方框图;图13为根据本发明的一个方面,用来存取选择的内存页的安全属性表(SAT)记录以获得选择的内存页的额外的安全信息的机制的一个实施例的方框图;图14A为根据本发明的一个方面,SAT默认寄存器的一个实施例的方框图;图14B为根据本发明的一个方面,SAT目录记录格式的一个实施例的方框图;图15为根据本发明的一个方面,SAT记录格式的一个实施例的方框图;图16A为根据本发明的一个方面,包含主桥接器SCU的主桥接器的一个实施例的方框图;图16B为根据本发明的一个方面,包含主桥接器SCU的主桥接器的另一个实施例的方框图;
图17为根据本发明的一个方面,主桥接器SCU的一个实施例的方框图;图18为根据本发明的一个方面,包括存取授权表的主桥接器SCU的另一个实施例的方框图;图19为根据本发明的一个方面,根据本发明的一个实施例,图2中所示的处理单元的更详细方框图;图20为根据本发明的一个实施例,图19中所示的I/O存取接口的更详细方框图;图21A和图21B为显示根据本发明的各种方面,由图19至20所示的处理器所执行的I/O空间和/或I/O内存存取的方框图表示;图22为显示根据本发明的各种方面,储存在内存内的SEM I/O允许位图的一个实施例及用来存取SEM I/O允许位图的机制的一个实施例的方框图;图23为显示根据本发明的各种方面,图22的SEM I/O允许位图的另一个实施例及用来存取SEM I/O允许位图的机制的又一个实施例的方框图;图24为根据本发明的一个方面,显示计算机系统的各种硬件和软件组件之间的关系图,其中第一设备驱动器和对应的第一设备硬件单元放置于第一安全“室(compartment)”中,而第二设备驱动器和对应的第二设备硬件单元放置于第二安全室中,该第二安全室与该第一安全室分离并可独立地操作;以及图25为根据本发明的一个方面,显示操作该计算机系统用以改进安全性的方法的实施例的流程图。
具体实施例方式
虽然本发明易受到许多不同形式的实施例的影响,然本发明已以方框图显示了特定的实施例并予以详细说明。但是应了解的是,此处特定实施例的说明并非将本发明限制于所揭示的特定形式,反之,本发明将涵盖所有落入由所附的权利要求所界定的精神和范围内的所有的修饰、等效和改变。
下面将说明本发明的具体实施例。为了清楚起见,本说明书中并未对所有实际执行本发明的特征进行了说明。然而应当理解的是,开发任何这种实际的实施例时,必须作出许多与实施相关的决定,以便达到发明者的特定目标,比如符合随着实施例的不同而有所变化的与系统相关及与商业相关的限制条件。此外,我们应当了解,这种开发工作可能是复杂且耗时的,然而对于受益于本揭示的本领域技术人员来说仅为一种例行工作。
现在参照图3,显示了根据本发明的系统300的一个实施例。系统300包括处理单元310;多个输入/输出装置,比如键盘330、鼠标340和输入笔350;及显示单元320,比如监视器。在一个实施例中,由本发明所揭示的安全等级系统设置在处理单元310中。根据本发明的一个方面,从输入/输出装置330、340及350的其中之一进来的输入,可启动执行在处理单元310中的一个或多个软件结构,包括操作系统。然后存取相关存在于系统300中的输入输出空间和/或与输入/输出空间相关的内存,以执行存在于处理单元310中的各种软件结构。本发明的实施例将根据编程进系统300的预定安全记录来限制由一个或多个软件结构所启动的输入/输出空间存取。
图4A为计算机系统400A的一个实施例的方框图,该计算机系统400A包括中央处理器402、系统或“主”桥接器404、内存406、第一设备总线408(例如,外围设备互连或PCI总线)、设备总线桥接器410、第二设备总线412(例如,工业标准架构或ISA总线)以及四个设备硬件单元414A至414D。主桥接器404连接到CPU 402、内存406和第一设备总线408。主桥接器404转换CPU 402和第一设备总线408之间的信号,并可操作地将内存406连接至CPU 402和第一设备总线408。设备总线桥接器410连接于第一设备总线408和第二设备总线412之间,并转换第一设备总线408和第二设备总线412之间的信号。
在图4A的实施例中,设备硬件单元414A和414B连接于第一设备总线408,而设备硬件单元414C和414D连接于第二设备总线412。举例而言,一个或多个的设备硬件单元414A至414D可以是储存装置(例如,硬盘驱动器、软盘驱动器和光盘驱动器)、通讯装置(例如,调制解调器和网络适配器)或输入/输出装置(例如,视频装置、音频装置和列表机)。应注意的是在其它实施例中,主桥接器404可以为CPU 402的一部分,如图4A中所示。
在图4B的实施例中,CPU 402包括I/O安全检测单元417。设备硬件单元414A至414D可映射至CPU 402的I/O空间的各种I/O端口,和CPU 402可通过对应的I/O端口而与设备硬件单元414A至414D通讯。在这种情况下,输入/输出SCU 417用来保护设备硬件单元414A至414D避免由CPU 402所产生的未经授权的存取。应注意的是在其它实施例中,主桥接器404可以为CPU 402的一部分,如图4B中所示。
在图4C的实施例中,CPU 402包括CPU安全检测单元416,而主桥接器404包括主桥接器SCU 418。将在下文中更详细说明之,中央处理器SCU 416保护内存406免于由该CPU 402所产生的未经授权的存取(即,“软件启动的存取”),而主桥接器SCU 418保护内存406免于由设备硬件单元414A至414D所启动的未经授权的存取(即,“硬件启动的存取”)。
图5A为显示图4A或图4B的计算机系统400的各种硬件组件和软件组件间的一些关系的方框图。在图5A的实施例中,多个应用程序500、操作系统502、安全核心504和设备驱动器506A至506D储存在内存406中。应用程序500、操作系统502、安全核心504和设备驱动器506A至506D包括了由CPU 402所执行的指令。操作系统502提供了用户接口和其上可运行应用程序500的软件平台。操作系统502也可提供例如基本支持功能,该基本支持功能包括文件系统管理、处理管理和I/O控制。
操作系统502也可提供基本安全功能。例如,CPU 402可以是执行x86指令集的指令的x86处理器。在这种情况下,CPU 402可包括特殊的硬件组件以提供如上所述的在保护模式中的虚拟内存和物理内存保护特征。操作系统502也可为例如在保护模式下操作CPU 402的Windows操作系统家族其中之一,以及操作系统502使用CPU 402的特定的硬件组件以提供在保护模式下的虚拟内存和物理内存保护。安全核心504提供由操作系统502所提供的安全功能之外的额外的安全功能,例如,保护储存在内存406中的数据免于未经授权存取。
在图5A的实施例中,设备驱动器506A至506D操作上相关于且连接到各个对应的设备硬件单元414A至414D。设备硬件单元414A和414D例如可以是“安全”装置,而对应的设备驱动器506A和506D可以是“安全”设备驱动器。安全核心504连接于操作系统502和安全设备驱动器506A与506D之间,并可通过应用程序500和操作系统502来监视所有的存取,以确保设备驱动器506A和506D和对应的安全设备414A和414D的安全。安全核心504可通过应用程序500和操作系统502来防止对安全设备驱动器506A和506D和对应的安全装置414A和414D的未经授权的存取。另一方面,设备驱动器506B和506C可以是“非安全”设备驱动器,且对应的设备硬件单元414B和414C可以是“非安全”设备硬件单元。设备驱动器506B和506C和对应的设备硬件单元414B和414C可以是例如“遗留”的设备驱动器和设备硬件单元。
应注意的是在其它实施例中,安全核心504可以是操作系统502的一部分。在其它的实施例中,安全核心504、设备驱动器506A和506D和/或设备驱动器506B和506C可以是操作系统502的一部分。
如图5B中所示,安全核心504可以连接到输入/输出SCU 417。如将于下文中详细说明的,输入/输出SCU 417监视至I/O地址空间中I/O端口的所有软件启动的存取,并仅允许经过授权的存取至I/O端口。
如图5C中所指示的,安全核心504连接到中央处理器SCU 416和主桥接器SCU 418(例如,通过一个或多个设备驱动器)。如将在下文中详细说明的,中央处理器SCU 416和主桥接器SCU 418控制至内存406的存取。中央处理器SCU 416监视所有的至内存406的软件启动的存取,而主桥接器SCU 418监视所有的至内存406的硬件启动的存取。一旦由安全核心504配置后,中央处理器SCU 416和主桥接器SCU 418仅允许经过授权的存取至内存406和I/O空间。应注意在一个实施例中,中央处理器SCU 416保护着寄存器空间。
图6A为图4A的计算机系统400A的CPU 402的一个实施例的方框图。在图6A的实施例中,CPU 402A包括执行单元600、内存管理单元(MMU)602、高速缓存(cache)单元604、总线接口单元(BIU)606、一组控制寄存器608和一组安全执行模式寄存器610。该组安全执行模式寄存器610可用来执行在图4A的计算机系统400A中的安全执行模式。安全执行模式寄存器610由安全核心504所存取(即,写入和/或读取)。
在图6A的实施例中,该组安全执行模式寄存器610包括安全执行模式位609。例如当(i)CPU 402为在x86保护模式下操作的x86处理器,(ii)内存分页被使能,(iii)SEM位设定为“1”时,则图4A的计算机系统400A可以操作于安全执行模式。也可以使用在安全执行模式中指示操作的其它方法和安全执行模式的其它操作。
一般而言,该组控制寄存器608的内容被用来管理CPU 402的操作。因此,该组控制寄存器608的内容被用来管理执行单元600、MMU602、高速缓存单元604和/或BIU 606。该组控制寄存器608可包括,例如,x86处理器架构的多个控制寄存器。
CPU 402的执行单元600取得指令(例如,x86指令)和数据,执行该取得的指令及在指令执行期间产生信号(例如,地址、数据、和控制信号)。执行单元600连接至高速缓存单元604,并可通过高速缓存单元604和BIU 606而接收从内存406来的指令。应注意的是执行单元600可根据所执行的内容而执行标准指令、安全指令和/或微码。在一个实施例中,在处理器中执行的微码是硬件而非软件。
计算机系统400A的内存406(例如,图4A)包括多个内存位置,各具有唯一的物理地址。当操作在具有能够分页的保护模式时,CPU 402的地址空间划分成称为页帧(page frame)或“页”的多个区块。在其它的实施例中,内存可划分成定义不同的内存区域或通过这些内存区域存取。一般而言,仅对应于各页的一部分的数据在指定的时间储存在内存406中。
在图6A的实施例中,在指令执行期间由执行单元600所产生的地址信号表示段(即,“逻辑”)地址。MMU 602将由执行单元600所产生的段地址转换到对应的内存406的物理地址。MMU 602将物理地址提供至高速缓存单元604。高速缓存单元604为用来储存由执行单元600最新取得的指令和数据的相当小的储存单元。BIU 606连接在高速缓存单元604和主桥接器404之间,并用来通过主桥接器404获取不在高速缓存单元604中的来自内存406的指令和数据。应注意的是高速缓存单元604为可选择的,但其有利于为CPU 402提供更高的操作效率。
当图4A的计算机系统400A在安全执行模式下操作时,安全核心505在内存406中产生并维持一个或多个安全属性数据结构(例如,表)。各内存页具有对应的安全上下文(security context)识别(SCID)值,且该对应的SCID值可储存在安全属性数据结构内。MMU 602使用在指令执行期间所产生的地址(例如,物理地址)来存取一个或多个安全属性数据结构以获得对应于内存页的SCID。一般而言,计算机系统400A具有n个不同的SCID值,其中n为大于等于1的整数。
当图4A的计算机系统400A在安全执行模式下操作时,由违反安全机制的软件所产生的各种活动将引起安全执行模式安全异常。可通过一对类似于x86“SYSENTER”和“SYSEXIT”指令操作的寄存器(例如,模式指定寄存器或MSR)而迅速处理安全执行模式安全异常。该对寄存器可以是“安全异常记录点”寄存器,并且当安全执行模式安全异常发生时可定义对于指令执行的分支目标地址。该安全异常记录点寄存器可定义代码段、然后指令指针(IP,或64位形式RIP)、堆栈段和用于至安全执行模式安全异常处理程序1210的记录的堆栈指针(SP,或64位形式RSP)值(请参阅图12)。
在软件控制下,执行单元600可将前面的SS、SP/RSP、EFLAGS、CS和IP/RIP值推到新的堆栈以指示异常发生处。此外,执行单元600可将错误码推进堆栈。应注意的是,IRET指令可不用作为之前总是储存着的SS和SP/RSP值,而即使当前优先权等级未发生改变,也总可完成堆栈交换。因此,可以定义新的指令以完成从SEM安全异常处理程序1210(SMRET)来的返回。
图6B为图4B的计算机系统400B的CPU 402B的一个实施例的方框图。在图6B的实施例中,CPU 402B包括执行单元600、内存管理单元(MMU)602、高速缓存单元604、总线接口单元(BIU)606、一组控制寄存器608、和一组安全执行模式(SEM)寄存器610。BIU 606连接至主桥接器404(图4),并在CPU 402B和主桥接器404之间形成接口。BIU 606还通过主桥接器404连接至内存406(图4),并在CPU 402B和内存406之间形成接口。在图6B的实施例中,输入/输出SCU 417位于BIU 606内。
在图4B的计算机系统400B内,可使用该组SEM寄存器610以执行安全执行模式(SEM),而由该组SEM寄存器610的内容管理输入/输出SCU 417的操作。由安全核心504而存取(亦即,写入和/或读取)SEM寄存器610。
在图6B的实施例中,该组SEM寄存器610包括SEM位609。图4B的计算机系统400B例如当(i)CPU 402B为在x86保护模式下操作的x86处理器(ii)内存页被使能,及(iii)SEM位设为“1”时,则可在安全执行模式下操作。
一般而言,该组控制寄存器608的内容管理CPU 402B的操作。因此,该组控制寄存器608的内容管理执行单元600、MMU 602、高速缓存单元604和/或BIU 606的操作。该组控制寄存器608可包括诸如x86处理器架构的多个控制寄存器。
CPU 402B的执行单元600在指令执行期间取得指令(例如,x86指令)和数据、执行取得的指令及产生信号(例如,地址、数据和控制信号)。执行单元600连接至高速缓存单元604,并可通过高速缓存单元604和BIU 606而接收从内存406来的指令。
计算机系统400B的内存406包括多个内存地址,各地址具有唯一的物理地址。当在具有页使能的保护模式下操作时,CPU 402B的地址空间划分成称之为页帧或“页”的多个区块。也可考虑其它方式的内存单元或划分。在任何指定的时间,仅有对应于各页的一部分的数据储存在内存406中。在图6B的实施例中,由执行单元600在指令执行期间所产生的地址信号表示段(即“逻辑”)地址。MMU 602将由执行单元600所产生的段地址转换为对应内存406的物理地址。MMU 602将物理地址提供至高速缓存单元604。高速缓存单元604为用来储存最近由执行单元600所取得的指令和数据的相当小的储存单元。
BIU 606连接于高速缓存单元604和主桥接器404之间。BIU 606用于通过主桥接器404取出不在高速缓存单元604中的来自内存406的指令或数据。BIU 606还包括输入/输出SCU 417。输入/输出SCU 417连接至SEM寄存器610、执行单元600和MMU 602。如上所述,输入/输出SCU 417监视在I/O地址空间中的到I/O端口的所有软件启动的存取,并仅允许至I/O端口的授权存取。
图6C为图4C的计算机系统400C的CPU 402C的一个实施例的方框图。在图6C的实施例中,CPU 402C包括执行单元600、内存管理单元(MMU)602、高速缓存单元604、总线接口单元(BIU)606、一组控制寄存器608、和一组安全执行模式(SEM)寄存器610。中央处理器SCU 416位于MMU 602内。
可使用该组SEM寄存器610以执行图4C的计算机系统400C内的安全执行模式,且由该组SEM寄存器610的内容管理中央处理器SCU416和主桥接器SCU 418的操作。由安全核心504存取(亦即,写入和/或读取)SEM寄存器610。图4C的计算机系统400C例如当(i)CPU 402C为在x86保护模式下操作的x86处理器,(ii)内存页被使能,及(iii)SEM寄存器610的内容指定SEM操作时,则可在安全执行模式下操作。
在图6C的实施例中,该组SEM寄存器610包括SEM位609。计算机系统400C的操作模式包括“正常执行模式”和“安全执行模式(SEM)”。计算机系统400C通常操作于正常执行模式。使用该组SEM寄存器610来执行在计算机系统400C内的安全执行模式。由安全核心504来存取(亦即,写入和/或读取)SEM寄存器610。计算机系统400C例如当(i)CPU402C为在x86保护模式下操作的x86处理器,(ii)内存页被使能,及(iii)SEM位设定为“1”时,则可在安全执行模式下操作。
一般而言,该组控制寄存器608的内容管理CPU 402C的操作。因此,该组控制寄存器608的内容管理执行单元600、MMU 602、高速缓存单元604和/或BIU 606的操作。该组控制寄存器608可包括诸如x86处理器架构的多个控制寄存器。
CPU 402C的执行单元600在指令执行期间取得指令(例如,x86指令)和数据、执行取得的指令及产生信号(例如,地址、数据和控制信号)。执行单元600连接至高速缓存单元604,并可通过高速缓存单元604和BIU 606来接收来自内存406的指令。
计算机系统400C的内存406包括多个内存地址,各地址具有唯一的物理地址。当在具有页使能的保护模式下操作时,CPU 402的地址空间划分成称之为页帧或“页”的多个区块。也可考虑其它方式的内存单元或划分。如上所述,在任何指定的时间,仅对应于各页的一部分的数据可储存在内存406中。在图6C的实施例中,由执行单元600在指令执行期间所产生的地址信号表示段(即“逻辑”)地址。如下所述,MMU 602将由执行单元600所产生的段地址转换为对应内存406的物理地址。MMU 602将物理地址提供给高速缓存单元604。高速缓存单元604为用来储存最近由执行单元600所取得的指令和数据的相当小的储存单元。BIU 606连接在高速缓存单元604和主桥接器404之间,并用来通过主桥接器404取出不在高速缓存单元604中的来自内存406的指令或数据。
图6D为计算机系统400的CPU 402的另一个实施例的方框图。在图6D的实施例中,CPU 402D包括上述关于图6A的描述中的执行单元600、MMU 602、高速缓存单元604、BIU 606、该组控制寄存器608和该组安全执行模式(SEM)寄存器610。此外,CPU 602D包括微码引擎(microcode engine)650和包含了安全检测码654的微码储存器652。微码引擎650连接至执行单元600、MMU 602、高速缓存单元604、BIU606、该组控制寄存器608和该组安全执行模式(SEM)寄存器610。这一连接方式显示为共享总线结构,虽然也可考虑使用其它的连接方式。微码引擎650执行储存在微码储存器652内的微码指令,并根据该微码指令、该组控制寄存器608的内容和该组SEM寄存器610的内容,产生控制执行单元600、MMU 602、高速缓存单元604和BIU 606操作的信号。在图6D的实施例中,执行储存于微码储存器652内的微码指令的微码引擎650可替代一个或多个中央处理器SCU 416和输入/输出SCU 417。在一个x86实施例中,微码引擎650可帮助执行单元600执行x86指令集的更复杂的指令。
在图6D的实施例中,储存在微码储存器652中的一部分的微码指令形成安全检测码654。当计算机系统400在安全执行模式下操作时,可执行安全检测码654,而一个指令已经传输到执行单元600用于执行。本质上,安全检测码654的微码指令的执行引起微码引擎650和执行单元600、MMU 602及BIU 606的其中数种以执行如上所述的一个或多个中央处理器SCU 416和输入/输出SCU 417的功能。
举例而言,当I/O指令传输到执行单元600以用于执行时,执行单元600可发送I/O指令存在的信号至微码引擎650。微码引擎可确认信号至MMU 602和BIU606。响应来自微码引擎650的信号,MMU 602可提供内存页的安全上下文识别(SCID)值,该内存页包含至BIU 606的I/O指令的。执行单元600可将由I/O指令存取的I/O端口号提供给BIU 606。
响应来自微码引擎650的信号,BIU 606可使用安全上下文识别(SCID)值和接收的I/O端口号以存取SEM I/O允许位图2200、2300(参阅图22和23),并可以将来自SEM I/O允许位图2200、2300的对应位提供给微码引擎650。若将来自SEM I/O允许位图2200、2300的对应位清零,则微码引擎650将继续支持执行单元600完成I/O指令的执行。另一方面,若对应的位设定为“1”,则微码引擎650可发送信号至执行单元600以停止执行I/O指令,并开始执行SEM异常处理程序1210的指令。
还值得注意的是,根据执行的情况,执行单元600可执行标准指令、安全指令和/或微码。在一个实施例中,执行单元600和微码引擎650都执行微码。
图7是MMU 602的一个实施例的方框图,比如图6C中显示说明的x86实施例。在图7的实施例中,MMU 602包括分段单元700、分页单元702及用于在分段单元700和分页单元702的输出之间作选择以产生物理地址的选择逻辑704。如图7中所指示,分段单元700接收从执行单元600来的段地址,并可使用公知的x86处理器架构的段至线性(segmented to linear)地址转换机制,以在输出处产生对应的线性地址。如图7所示,当启用“分页”信号时,分页单元702接收由分段单元700所产生的线性地址,并在输出处产生对应的物理地址。分页信号可映像(mirror)在x86处理器架构和该组控制寄存器608的控制寄存器O(CRO)中的分页标记(PG)位。当分页信号解除确认时,内存分页被禁用,而选择逻辑704产生从分段单元700所接收的线性地址以作为物理地址。
当分页信号确认时,启用内存分页,而分页单元702使用x86处理器架构的线性至物理地址转换机制将分段单元700所接收的线性地址转换到对应的物理地址。在线性至物理地址转换操作期间,若至页帧的存取经授权,则选择的页目录记录和选择的页表记录的U/S位的内容逻辑上由“与”运算决定。同样地,若至页帧的存取经授权,则选择的页目录记录和选择的页表记录的R/W位的内容逻辑上由“与”运算决定。若U/S和R/W位的逻辑组合显示至页帧的存取经授权,则分页单元702生成由线性至物理地址转换操作所产生的物理地址。选择逻辑704接收由分页单元702所产生的物理地址,将从分页单元702所接收的物理地址生成为物理地址,并将该物理地址提供给高速缓存单元604。
在另一方面,若在线性至物理地址转换操作期间U/S和R/W位的逻辑组合指示至页帧的存取未经授权,则分页单元702不产生物理地址。取而代之,分页单元702声明一页错误(PF)信号,且MMU 602将该页错误信号传输到执行单元600。响应该PF信号,执行单元600可执行异常处理程序例程,并当声明页错误信号时,可最终停止执行应用程序500之一。
在图7的实施例中,中央处理器SCU 416位于MMU 602的分页单元702内。分页单元702还可包括用来储存最新决定的线性至物理地址转换的相当小数量的旁路转换缓冲(translation lookasidebuffer,TLB)。
图8A为显示图4B的输入/输出SCU 417的一个实施例的方框图。在图8A的实施例中,输入/输出SCU 417包括安全检测逻辑800A。安全检测逻辑800A接收从执行单元600来的“使能”信号和I/O端口号,并接收从MMU 602来的SCID值。在执行I/O指令之前,执行单元600可确认使能信号,该I/O指令存取在I/O地址空间中的“目标”I/O端口。该I/O端口号为目标I/O端口的号码。该SCID值指示包含I/O指令的内存页的安全上下文等级。
当计算机系统在安全执行模式下操作时,安全核心504在内存406中产生和维持一个或多个安全属性数据结构(例如,表)。各内存页具有对应的SCID值,而对应的SCID值可以储存在安全属性数据结构内。MMU 602使用在指令执行期间所产生的地址(例如,物理地址)来存取一个或多个安全属性数据结构,以获得对应于内存页的SCID。一般而言,计算机系统400具有n个不同的SCID值,其中n为大于等于1的整数值。
当计算机系统400在安全执行模式下操作时,安全核心504还可在内存406中产生和维持SEM I/O允许位图2200,2300(例如,第22至23图)。当执行单元600执行任务的I/O指令,则在CPU 402B内的逻辑可首先比较任务的CPL与I/O优先权等级(IOPL)。若任务的CPL为至少有与IOPL同样的优先权(即,数字上为少于或相等),则在CPU402B内的逻辑可检测SEM I/O允许位图2200,2300。另一方面,若任务的CPL没有与IOPL同样的优先权(即,数字上大于),则执行单元600将不执行I/O指令。在一个实施例中,将发生一般的保护错误(GPF)。
当执行单元600确认使能信号时,安全检测逻辑800A将使能信号、接收的SCID值和接收的I/O端口号提供给BIU 406内的逻辑。在BIU406内的逻辑使用SCID值和接收的I/O端口号以存取该SEM I/O允许位图2200,2300,并将来自SEM I/O允许位图2200,2300的对应位提供给安全检测逻辑800A。若来自该SEM I/O允许位图2200,2300的对应位清除为“0”,则安全检测逻辑800A可确认输出“执行(EXECUTE)”信号提供至执行单元600。响应该确认的执行信号,执行单元600将执行I/O指令。另一方面,若对应的位设定为“1”,则安全检测逻辑800A可确认输出“SEM安全异常(SEM SECURITY EXCEPTION)”信号提供至执行单元600。响应该确认的SEM安全异常信号,执行单元600可不执行I/O指令,并可替代地执行一SEM异常处理程序(请见下文说明)。
当I/O指令尝试存取16位字I/O端口或32位双字I/O端口,则执行单元600可连续提供多个字节I/O端口号至安全检测逻辑800A。若安全检测逻辑800A确认对于各字节I/O端口号的执行信号,则执行单元600可执行I/O指令。另一方面,若安全检测逻辑800A确认对于一个或多个字节I/O端口号的SEM安全异常,则执行单元600可不执行I/O指令,而可替代地执行该SEM异常处理程序。
图8B为中央处理器SCU 416的一个实施例的方框图。在图8B的实施例中,中央处理器SCU 416包括连接到该组SEM寄存器610和安全属性表(SAT)记录缓冲器802的安全检测逻辑800B。该SAT记录1225(参阅图12)可包括对应于各内存页的页目录和各页表记录的U/S和R/W位上方的额外的安全信息。安全检测逻辑800B使用储存在给定的其中一个SAT记录1225内的额外的安全信息,以防止至对应的内存页的未经授权的软件启动的存取。SAT记录缓冲器802被用来储存最近存取的内存页的相当小数目的SAT记录1225。
如上所述,可使用该组SEM寄存器610来执行在计算机系统400内的安全执行模式。该组SEM寄存器610的内容管理中央处理器SCU416的操作。安全检测逻辑800B通过图8B中所示的通讯总线接收从MMU 602来的将储存于SAT记录缓冲器802中的信息。安全检测逻辑800B也接收由分页单元所产生的物理地址。
图9为安全模式SMCALL/SMRET目标地址寄存器(SMSTAR)900和用来处理该SEM安全异常的安全模式GS基址(SMGBASE)寄存器902的方框图。
基于安全理由,当SEM安全异常发生时,SEM安全异常机制不能依赖任何负载控制寄存器的内容或数据结构来提供SEM异常处理程序和堆栈的地址。
SMSTAR寄存器900包括“SMRET CS选择器和SS选择器基础(SMRETCS Selector and SS Selector Base)”字段、“SMCALL CS选择器和SS选择器基础(SMCALL CS Selector and SS Selector Base)”字段和“目标EIP地址(Target EIP Address)”字段。SMGSBASE寄存器902包括安全模式GS基址。储存在SMSTAR寄存器900和SMGSBASE寄存器902中的值一般在启动时间设定。
图10A为当SEM异常发生时,由操作系统502所产生的SEM异常堆栈帧1000的一个实施例的方框图。SEM异常堆栈帧1000开始于GS

错误码存在于SEM异常堆栈帧1000的GS
。错误应用程序的指令指针(EIP)的内容存在于SEM异常堆栈帧1000的GS
。错误应用程序的代码段寄存器的内容存在于SEM异常堆栈帧1000的GS
。错误应用程序的标志寄存器的内容存在于SEM异常堆栈帧1000的GS
。错误应用程序的堆栈指针(ESP)寄存器的内容存在于SEM异常堆栈帧1000的GS[10h]。错误应用程序的堆栈段(SS)寄存器的内容存在于SEM异常堆栈帧1000的GS[14h]。
图10B为图10A的SEM异常堆栈帧1000的错误码的示例性格式1010的方框图。在图10B的实施例中,错误码格式1010包括写入/读取(W/R)位、用户/监督者(U/S)位、模式指定寄存器位和系统管理中断(SMI)位。在写入操作期间当发生SEM安全异常时,写入/读取(W/R)位为“1”,而在读取或执行操作期间当发生SEM安全异常时,写入/读取(W/R)位为“0”。在用户模式(CPL=3)当发生SEM安全执行模式异常时,用户/监督者(U/S)位为“1”,而在监督模式(CPL=0)下发生SEM安全异常时,用户/监督者(U/S)位为“0”。
在尝试存取安全模式指定寄存器(MSR)期间发生SEM安全异常时,模式指定寄存器(MSR)位为“1”,而在尝试存取安全MSR期间未发生SEM安全异常时,模式指定寄存器(MSR)位为“0”。在系统管理中断(SMI)期间发生SEM安全异常时,系统管理中断(SMI)位为“1”,而在SMI期间未发生SEM安全异常时,系统管理中断(SMI)位为“0”。
图11为显示根据本发明的一个方面处理SEM安全异常的方法1100的实施例的流程图。方法1100可包括在步骤1105,通过硬件或通过软件,比如通过SMCALL指令,来产生SEM安全异常。方法1100包括在步骤1110,在基址加上偏移量(offset)上建立SEM堆栈帧1000。从SMGSBASE寄存器902读取安全模式GS基址。可通过在SEM堆栈帧中的字节号码而由安全模式GS基址的偏移量形成堆栈指针。SEM堆栈帧1000写入到内存中,而使得错误码是由安全模式而指向储存在SMGSBASE寄存器902中的GS基址。通过SEM异常硬件而产生SEM安全异常的错误码。SEM安全异常其本身可通过操作系统502、通过设备驱动器码506、通过应用码500等而产生。如图10A中所示,错误代码段值写入到GS空间。
方法1100其次在步骤1115读取从SMSTAR寄存器900来的目标EIP地址和SMCALL CS和SS选择器值,并将该目标EIP地址和SMCALL CS和SS选择器值储存在适当的寄存器。目标EIP地址载入EIP寄存器。CS选择器值载入CS寄存器,而SS选择器值载入SS寄存器。SS选择器地址可由CS选择器地址导出。目标EIP地址指向SEM安全异常处理程序码的第一指令。
方法1100在步骤1120还执行SWAPGS指令。SWAPGS指令的执行交换SMGSBASE寄存器902与缓存在CPU 402中GS段描述符的基址的内容。后续的SEM安全异常处理程序指令能使用GS空间仅移位寻址(displacement-only addressing)以存取SEM安全异常堆栈帧1000和SEM安全异常堆栈帧1000之上和之下的内存。GS空间寻址提供用于SEM安全异常处理程序的安全内存。
在安全核心504中的SEM安全异常处理程序可包括几页由安全位所保护的虚拟内存,该安全位比如为储存于SEM寄存器610,或此处所说明的其它的安全测量单元中。SEM安全异常处理程序可包括几页由比如储存在SEM寄存器610中或此处所说明的其它的安全测量单元中的安全位来保护的受保护的物理内存。
方法1100接着在步骤1125中分析错误码。当决定了SEM安全异常的来源以后,一次可分析一个错误码位。可选地,方法1100在步骤1130译码一个或多个在产生SEM安全异常前被执行或准备执行的指令。特定的指令和他们的操作数可提供SEM安全异常来源额外的信息。方法1100在步骤1135根据错误码,有可能和引起产生SEM安全异常的指令之前或之后的指令,来评估SEM安全异常。步骤1135的评估可包括参照一查找表或执行一安全算法。该查找表可由一个或多个的错误码、错误码的一个或多个位、以及一个或多个的特定指令和/或他们的操作数所索引。安全算法可包括由安全核心504所执行的码树(codetree)。查找表和安全算法将决定于正确的硬件310等、和执行于计算机系统300中的操作系统402。
一旦该方法1100在步骤1135评估了SEM安全异常,则该方法1100当需要时在步骤1140根据评估结果动作。SEM安全异常可被忽略和继续操作。错误指令或代码段可被忽略。可包含错误指令或代码段以便由在虚拟内存或I/O空间中的代理主机所执行。
方法1100在步骤1145主要将计算机系统300恢复至其预先SEM安全异常配置。在步骤1150,当SEM安全异常处理程序退出时,执行另一SWAPGS指令将安全模式基址值返回至其原来的值,并执行SMRET指令以返回至其先前的操作模式。当执行SWAPGS指令时,安全核心504将用于错误码的代码段值写至SMSTAR寄存器900的SMRET CS选择器和SS选择器基本字段。SMRET指令可将系统返回至正常模式。不像SYSRET指令,SMRET指令可将CPL保留在0,而不设定EFLAGS.IF位。
应注意在一实施例中,方法1100的步骤1105至1115主要在硬件中执行,而步骤1120至1145主要在软件中执行。在另一个实施例中,方法1100主要在软件中执行。又在另一个实施例中,方法1100主要在硬件中执行。注意在一个实施例中,修改EIP地址以避免可能引起SEM安全异常的指令。
现在回头参照图8B,当计算机系统300在安全执行模式下操作时,安全检测逻辑800B接收当前执行任务(亦即,当前执行指令)的CPL,伴随着正常控制位和一个或多个与其中具有物理地址的选择的内存页相关联的SEM位509。安全检测逻辑800B使用上述信息来决定至内存406的该部分的存取是否经过授权。
CPU 402可以是x86处理器,而可包括代码段寄存器、x86处理器架构的各16位段寄存器的其中一个。各段寄存器选择一个64k的内存区块,称之为一段。在具有分页使能的保护模式中,CS寄存器加载了指示内存406的可执行段的段选择器。使用段选择器的最高(亦即,最高有效)位来储存指示内存的段的信息,该内存包括将由CPU 402的执行单元600所执行的下一个指令。使用指令指针寄存器以将偏移量储存在由CS寄存器所指示的段中。CSIP对(CSIP pair)指示了下一个指令的段地址。使用CS寄存器的两个最低(亦即,最低有效)位来储存指示现正由执行单元600所执行的任务的CPL的值(亦即,现行任务的CLP)。
中央处理器SCU 416的安全检测逻辑800B可产生页错误(PF)信号和如“SEM安全异常”信号,并将PF和SEM安全异常信号提供给在分页单元702内的逻辑。当安全检测逻辑800B确认PF信号时,MMU 602将PF信号传输至执行单元600。响应该PF信号,执行单元600可使用已知的x86处理器架构的中断描述符表(IDT)指引机制来存取和执行PF处理器例程。
当安全检测逻辑800B确认SEM安全异常信号时,MMU 602将SEM安全异常信号传输至执行单元600。不像使用x86处理器架构的IDT指引机制的一般处理器异常,可使用不同的指引方法来处理SEM安全异常。可通过一对类似于x86“SYSENTER”和“SYSEXIT”指令操作方法的寄存器(例如,MSRs)来传输SEM安全异常信号。该对寄存器可以是“安全异常记录点”寄存器,并且可定义一用于当SEM安全异常发生时指令执行的分支目标地址。
安全异常记录点寄存器可定义将用于SEM安全异常处理程序的记录的代码段,之后的指令指针(EIP,或64位形式RIP)、堆栈段(SS)、和堆栈指针(ESP,或64位形式RSP)值。执行单元600可将前面的SS、ESP/RSP、EFLAGS、CS和EIP/RIP值推入新的堆栈以指示何处发生了SEM安全异常。此外,执行单元600可将错误码推入堆栈。如上所述,可不使用IRET指令作为之前储存的SS和ESP/RSP值,而即使在CPL中未发生改变,也可完成堆栈交换。通过SMRET指令从SEM安全异常处理程序返回。
图12为根据本发明的各种方面,结合了各种实施例以维持计算机系统的安全的方框图。如图12中所示,操作系统可包括安全核心504。安全核心504可包括SEM安全异常处理程序1210和/或页管理例程1215。安全核心504接收SEM安全异常1205。安全核心504接收一个或多个值,这些值通过一个或多个信号1255而传输当前的CPU状态1230。安全核心504也可通过一个或多个信号1255而修正当前的CPU状态1230。可由储存在控制寄存器1235和MSRs 1240中的值来决定CPU状态1230。这些值可包括储存在CR3控制寄存器1242、CPL 1244和SEM使能位1246中的值。
可被考虑的其它值包括,例如,将页打开和关闭的CRO、扩展特征寄存器或用于扩展寻址的页地址扩展模式寄存器等。如果需要的话,也可排除所示的值1242、1244、1246的其中一个或多个。安全核心504从CPU状态1230、虚拟内存配置1220和安全属性记录1225的其中一个或多个接收安全值和信号1250。安全值1250A显示在安全核心504和虚拟内存配置1220之间。安全值1250B显示在安全核心504和安全属性记录1225之间。安全值1250C显示在安全核心504和CPU状态1230之间。
在一个实施例中,虚拟内存配置1220通过页管理例程1215的安全核心504,而通过1250A来监视,以维持至内存406的存取的安全性。安全核心504也监视CPU状态1230,而使得通过页管理例程1215来应用适当的安全性。也可通过页管理例程1215至1250A来修正虚拟内存配置1220。页管理例程1215可以是操作系统502的一部分。页管理例程1215亦可以使用SEM安全异常处理程序1210来监督虚拟内存配置1220的改变。
在一个实施例中,安全属性记录1225由安全核心504通过1250B来监视。一个尝试对内存位置的存取可产生SEM安全异常1205至SEM安全异常处理程序1210,并引导在CPU状态1230中的一个改变至SEM。根据相关的其中一个安全属性记录1225,而可允许或拒绝对内存位置的存取。各安全属性记录1225可在内存406中的一个保护页中。
在一个实施例中,CPU状态1230由安全核心504通过1250C来监视。这为一典型的实施例。一个对内存位置的尝试存取可产生至SEM安全异常处理程序1210的SEM安全异常1205。可根据在尝试存取时的CPU状态1230而允许或拒绝对内存位置的存取。
在CPU 402内的通用寄存器的内容(图中未显示)可在任何指定时间获得。在一个实施例中,对控制寄存器1235的存取关于一安全位值,例如,在控制寄存器1235中的TX(信任已执行)位,或在MSRs 1240中的安全指令(SIE)位。同样地,对MSRs 1240的存取也可关于一安全位值。若未设定安全位,则任何尝试对安全感测控制寄存器1235和MSRs 1240的改变将导致SEM安全异常1205。在另一个实施例中,执行页值可控制对控制寄存器1235的存取。
从例如SEM的安全模式转移到例如正常模式的不安全模式,将清除某些寄存器的内容。内存内容维持固定,但是不能再读取某些内存地址。当使用虚拟内存配置1220来执行安全保护时,可以再加载CR3寄存器1242的内容。这为不信任码提供了不同于由信任码所使用的虚拟内存配置1220的一个虚拟内存配置1220。当使用安全属性记录1225时,与安全页相关联的各记录可标记为在各页表中受到保护,以防止CPU状态1230不是在安全(或是受保护)模式下的存取。当使用CPU状态1230来执行安全保护时,在允许对保护的内存存取之前,CPU状态1230必须是在安全模式。
在一个实施例中,在SEM中的安全核心504可通过执行页管理例程1215而提供对整个虚拟内存配置1220的保护。该保护需要最少的硬件,且主要以执行最高优先权(SCID)等级的软件实现。
SEM可通过使能的分页而应用于保护模式环境中。为了防止通过建立不适当或干扰的线性至物理地址映射而对SEM进行攻击,则必须保护分页指令和控制寄存器1235和/或与分页(比如CR3 1241)相关联的MSRs 1240,以避免不适当的修改。
应注意使用图12中所描绘的虚拟内存配置1220、安全属性记录1225、和CPU状态1230的其中一种机制所执行的安全措施也可使用其它的专用机制。在其它的实施例中,可以结合使用这些机制中的其中两个或多个机制。
现在参照图13至15来说明选用的内存页的额外的安全信息,如何使用可用于图4A至4C的计算机系统400中的地址转换机制。图13为用来存取用于所选择的内存页相关的SAT记录1225之一的机制1300的一个实施例的方框图,以获得所选择内存页的额外的安全信息。图13的机制1300可在图8A至8B的安全检测逻辑800内可被实现,并且当图4A至4C图的任何一个计算机系统400在安全执行模式下操作时可被实现。机制1300包括由使用x86地址转换机制的分页机制702所产生的物理地址1302、SAT目录1304、包括SAT 1306的多个SAT及该组SEM寄存器610的SAT基址寄存器1308。SAT目录1304和包括SAT1306的多个SAT为建立的SEM数据结构,并由安全核心504维持。如下所述,SAT目录1304(当存在时)和任何需要的SAT 1306在存取之前复制到内存406中。
SAT基址寄存器1308包括存在(P)位,该存在位指示在SAT基址寄存器1308内的存在的有效SAT目录基址。SAT基址寄存器1308的最高(亦即,最有效)位保留用于SAT目录基址。SAT目录基址为包含SAT目录1304的内存页的基址。若P=1,则SAT目录基址为有效,而SAT表1306指定内存页的安全属性。若P=0,则SAT目录基址为无效,并无SAT表存在,而内存页的安全属性由SAT默认寄存器决定。
图14为SAT默认寄存器1400的一个实施例的方框图。在图14A的实施例中,SAT默认寄存器1400包括安全页(SP)位。该SP位指示是否所有的内存页为安全页。举例而言,若SP=0,则所有的内存页可能并非安全页;而若SP=1,则所有的内存页可能是安全页。
回头参照图13,现在假设SAT基址寄存器1308的P位为“1”,则由分页逻辑702所产生的物理地址1302分成三个部分以存取用于所选择的内存页的相关SAT目录1225其中之一。如上所述,SAT基址寄存器1308的SAT目录基址为包含SAT目录1304的内存页的基址。SAT目录1304包括多个SAT目录记录,其中包含了SAT目录记录1312。各SAT目录记录可具有在内存406中的对应的SAT。物理地址1302的“上”部分,包含物理地址1302的最高位或最有效位,是用作SAT目录1304内的索引。SAT目录记录1312从使用SAT基址寄存器1308的SAT目录基址和物理地址1302的上部分的SAT目录1304内选择。
图14B为SAT目录记录格式1430的一个实施例的方框图。根据图14B,每个SAT目录记录包括指示在SAT目录记录内的有效SAT基址存在的存在(P)位。在图14B的实施例中,各SAT目录记录1310的最高(亦即,最有效)位保留用于SAT基址。SAT基址为包含对应SAT的内存页的基址。若P=1,则SAT基址为有效,而对应的SAT储存于内存406中。
若P=0,则SAT基址为无效,而对应的SAT并不存在于内存406中,而是必须从一个储存装置(例如,磁盘驱动器)复制到内存406中。若P=0,则安全检测逻辑800可以发送页错误信号至分页单元702内的逻辑,而MMU 602可以传输页错误信号至执行单元600(图6中)。响应该页错误信号,执行单元600可执行页错误处理器例程,该例程从储存装置恢复所需的SAT,并将所需的SAT储存到内存406中。将所需的SAT储存到内存406中后,将对应SAT目录记录的P位设定为“1”,而继续机制1300。
回头参照图13,使用物理地址1302的“中间”部分作为进入SAT1306的索引。因此使用SAT目录记录1312的SAT基址和物理地址1302的中间部分而在SAT 1306内选择SAT记录1312。
图15为SAT记录格式1500的一个实施例的方框图。在图15的实施例中,各SAT记录包括安全页(SP)位。该SP位指示所选择的内存页是否为一安全页。举例而言,若SP=0,则所选择的内存页不是一安全页,而若SP=1,则所选择的内存页是一安全页。
BIU 606从内存406中取得所需的SEM数据结构记录,并将该SEM数据结构记录提供给MMU 602。回头参照图8B,安全检测逻辑800B通过通讯总线接收来自MMU 602和分页单元702的SEM数据结构记录。如上所述,使用SAT记录缓冲器来储存最近存取内存页的相当小数量的SAT记录。安全检测逻辑800B将给定的SAT记录1312与对应的物理地址的“卷标”部分一起储存在SAT记录缓冲器802中。
在后续的内存页存取期间,安全检测逻辑800B可将由分页单元702所产生的一物理地址的“卷标”部,与储存在SAT记录缓冲器1102中的对应于SAT记录1225的物理地址的卷标部分相比较。若物理地址的卷标部分与储存在SAT记录缓冲器1102中的对应于SAT记录1225的物理地址的卷标部分相匹配,则安全检测逻辑800B可存取在SAT记录缓冲器1102中的SAT记录1312,而免除了图13的从内存406获得SAT记录1312的所需执行的处理。安全核心504修正在CPU 402中(例如,于处理关系交换期间)的SAT基址寄存器1308的内容。响应该SAT基址寄存器1308的修正,中央处理器SCU 417的安全检测逻辑800B可充满SAT记录缓冲器802。
当图4A至4C的计算机系统400在安全执行模式下操作时,安全检测逻辑800B接收当前执行的任务(即,正在执行的指令)的CPL、页目录记录(PDE)U/S位、PDE R/W位、页表记录(PTE)U/S位、和其中存在有物理地址的选择的内存页的PTE R/W位。安全检测逻辑800B使用上述的信息及对应于所选择的内存页的SAT记录1312的SP位来确定内存406的存取是否经授权。
图4B的CPU 402B可以是x86处理器,并可包括代码段寄存器,其为x86处理器架构的16位段寄存器其中之一。各段寄存器选择内存的一64k区块,称之为一段。在具有分页使能的保护模式下,CS寄存器加载了可指示内存406的可执行段的段选择器。段选择器的最高(亦即,最有效)位用来储存指示内存段的信息,包括了将由CPU 402B的执行单元600所执行的下一个指令。使用指令指针(IP)寄存器来将偏移量储存到由CS寄存器所指示的段中。CSIP对指示下一个指令的段地址。CS寄存器的两个最低(亦即,最低有效)位用来储存指示由执行单元600当前执行的任务的CPL的值(亦即,当前任务的CPL)。
下列表1显示当计算机系统400B在安全执行模式下操作时,用于CPU启动(亦即,软件起始)的内存存取的示例性规则。当计算机系统400B在安全执行模式下操作时,中央处理器SCU 417和安全核心504一起操作来执行表1的规则,以提供在由操作系统502所提供的数据安全之上的对于储存在内存406中的数据的额外的安全保护。
表1.当计算机系统400B操作于SEM时,对于软件启动的内存存取的示例性规则

注释(1)一般存取页内容包括安全核心和SEM数据结构。
注释(2)写入尝试引起GPF;若选择的内存页为安全页(SP=1),则发出SEM安全异常信号以代替GPF。
注释(3)一般存取页内容包括高安全程序类型。
注释(4)一般存取页内容包括OS核心和环0设备驱动器。
注释(5)任何存取尝试引起GFP;若选择的内存页为一安全页(SP=1),则发出SEM安全异常信号以代替GPF。
注释(6)一般存取页内容包括应用程序。
在表1中,当前执行指令的SP位为对应于包含当前执行指令的内存页的SAT记录1312的SP位。选择的内存页的U/S位为PDE U/S位存页的SAT记录1312的SP位。选择的内存页的U/S位为PDE U/S位和选择的内存页的PTE U/S位的逻辑“与”。选择的内存页的R/W位为PDE R/W位和选择的内存页的PTE R/W位的逻辑“与”。符号“X”表示“任意项”逻辑值可以是“0”或“1”。
现在回头参照图8B,中央处理器SCU 417的安全检测逻辑800B产生一般的保护错误(GPF)信号和“SEM安全异常”信号,并提供GPF和SEM安全异常信号至在分页单元702中的逻辑。当安全检测逻辑800B确认GPF信号时,MMU 602将GPF信号传输给执行单元600。响应该GPF信号,执行单元600可使用公知的x86处理器架构的中断描述符表(IDT)指引机制来存取和执行GPF处理器例程。
当安全检测逻辑800B确认SEM安全异常信号时,MMU 602将SEM安全异常信号传输至执行单元600。不像一般处理器异常的使用x86处理器架构的中断描述符表(IDT)指引机制,而可使用不同的指引方法来处理SEM安全异常。可以通过类似于x86“SYSENTER”和“SYSEXIT”指令运作方式的一对寄存器(例如,MSRs)来调配SEM安全异常。该对寄存器可以是“安全异常记录点”寄存器,并且当SEM安全异常发生时,可以定义用于指令执行的分支目标地址。安全异常记录点寄存器可以定义代码段,之后的指令指针(IP,或64位形式RIP)、堆栈段(SS)、和将用于至SEM安全异常处理程序1210的记录的堆栈指针(SP,或64位形式RSP)值。在软件控制下,执行单元600可以将前面的SS、SP/RSP、EFLAGS、CS和IP/RIP值推入新的堆栈以指示异常发生的位置。此外,执行单元600可将错误码推入堆栈。如上所述,IRET指令可不用作为之前总是储存着的SS和SP/RSP值,以及即使未发生CPL的改变,也总可完成堆栈交换。通过SMRET指令从SEM安全异常处理程序1210返回。
下列表2显示用于内存页存取的示例性规则,该内存存取当计算机系统4400在安全执行模式下操作时,由设备硬件单元414A至414D启动(亦即,硬件启动的内存存取)。这些硬件启动的内存存取可以通过在设备硬件单元414A至414D内的总线主控电路,或通过在设备硬件单元414A至414D的请求的DMA装置而进行启动。当计算机系统400在安全执行模式下操作时,安全检测逻辑800可执行表2的规则以给的额外的安全。在下列表2中,该“目标”内存页为在其内存在有由内存存取的内存存取信息所传输的物理地址的内存页。
表2.当计算机系统400B操作于SEM时,对于硬件启动的内存存取的示例性规则

在上列表2中,通过使用内存存取的物理地址的主桥接器SCU 418及上述图9的用来获得对应的内存页的SAT记录1225的机制900,而获得目标内存页的SP位。
如表2中所指示,当SP=1指示目标内存页为安全页时,则内存未经授权。在这种情况,安全检测逻辑800并未提供内存存取信息给内存控制器。内存存取信息(例如,控制信号)的部分指示内存存取类型,而其中该内存存取类型为读取存取或写入存取其中之一。当SP=1和内存存取信息指示内存存取类型为读取存取时,该内存存取为未经授权的读取存取,且安全检测逻辑800通过提供所有的“F”而非实际的内存内容(亦即,假读取数据),而响应该未经授权的读取存取。安全检测逻辑800也可通过上述登录未经授权的读取存取,而响应未经授权的读取存取。
当SP=1和内存存取信息指示内存存取类型为写入存取时,该内存存取为未经授权的写入存取。在这种情况,安全检测逻辑800通过舍弃由该内存存取信息所传输的写入数据,而响应未经授权的写入存取。安全检测逻辑800也可通过上述登录未经授权的写入存取,而响应未经授权的写入存取。
图16A为图4C的主桥接器404C的一个实施例的方框图。在图16A的实施例中,主桥接器404C包括主接口1600、桥接器逻辑1602、主桥接器SCU 418、内存控制器1604和设备总线接口1606。主接口1600连接到CPU 402,且设备总线接口1606连接到设备总线408。桥接器逻辑1602连接到主接口1600和设备总线接口1606之间。内存控制器1604连接到内存406,并执行对内存406的所有存取。主桥接器SCU 418连接到桥接器逻辑1602和内存控制器1604之间。如上所述,主桥接器SCU 418控制通过设备总线接口1606到内存406的存取。该主桥接器SCU 418监视通过设备总线接口1606到内存406的所有存取,并仅允许对内存406的经授权的存取。
图16B为图4C的主桥接器404C的另一个实施例的方框图。在图16B的实施例中,主桥接器404C包括主接口1600、桥接器逻辑1602、主桥接器SCU 418、内存控制器1604、设备总线接口1606和总线仲裁器1608。主接口1600连接到CPU 402,且设备总线接口1606连接到设备总线408。桥接器逻辑1602连接到主接口1600和设备总线接口1606之间。内存控制器1604连接到内存406,并执行对内存406的所有存取。主桥接器SCU 418连接到桥接器逻辑1602和内存控制器1604之间。如上所述,主桥接器SCU 418控制通过设备总线接口1606到内存406的存取。该主桥接器SCU 418监视通过设备总线接口1606到内存406的所有的存取,并仅允许对内存406的经授权的存取。
在图16B的实施例中,总线仲裁器1608连接到设备总线接口1606、桥接器逻辑1602和主桥接器SCU 418。总线仲裁器1608在桥接器逻辑1602、设备硬件单元414A和414B及设备总线桥接器410之间作仲裁,该设备总线桥接器410用来控制设备总线408。(设备硬件单元414C和414D通过设备总线桥接器410存取设备总线408)。一般而言,设备总线408可包括传输许可信号的一条或多条信号线,其中该允许的信号是多状态的其中之一,该多状态指示连接至设备总线408的这些装置的其中具有设备总线控制408者。总线仲裁器1608可根据传输许可信号的一条或多条信号线来驱动许可信号。在正常情况下总线仲裁器1608可接收从设备硬件单元414A和414B以及设备总线桥接器410来的分离的请求信号,其中当该对应的装置需要控制设备总线408时,各请求信号由对应的装置所确认。总线仲裁器1608可发布分离的许可信号至设备硬件单元414A和414B以及至设备总线桥接器410,其中许可信号的给定之一被确认以指示对应的装置允许控制设备总线408。总线仲裁器1608可与主桥接器SCU 418工作以提供在计算机系统400C内的设备间的安全存取。
图17为图16A或16B的主桥接器SCU 418的一个实施例的方框图。在图17的实施例中,主桥接器SCU 418包括连接到一组SEM寄存器1702和SAT记录缓冲器1704的安全检测逻辑1700。该组SEM寄存器1702管理安全检测逻辑1700的操作,并包括了图9的第二SAT基址寄存器908。该组SEM寄存器1702的第二SAT基址寄存器908可以是可寻址寄存器。当安全核心504修改在CPU 402的该组SEM寄存器610中的SAT基址寄存器908的内容时(例如,在上下文切换期间),安全核心504也可将相同的值写入到在主桥接器SCU 418的该组SEM寄存器1702中的第二SAT基址寄存器908。响应该修改的第二SAT基址寄存器908,主桥接器SCU 418的安全检测逻辑1700可清除SAT记录缓冲器1704。
安全检测逻辑1700接收由硬件装置单元414A至414D通过设备总线接口1606和桥接器逻辑1602所启动的内存存取的内存存取信息。内存存取信息传输来自硬件装置单元414A至414D的物理地址及相关的控制和/或数据信号。安全检测逻辑1700可具体实施用来获得对应于内存页的SAT记录1225的机制1300,并且当计算机系统400在安全执行模式下操作时可执行机制1300。SAT记录缓冲器1704类似于上述的中央处理器SCU 416的SAT记录缓冲器802,并用来储存最近存取的内存页相当小数目的SAT记录1225。
当计算机系统400在安全执行模式下操作时,图17的安全检测逻辑1700可使用与所选择的内存页相关的SAT记录1312的额外的安全信息,以判定是否给定的硬件启动的内存存取已经授权。若给定的硬件启动的内存存取已经授权,则内存检测逻辑1700提供内存存取的内存存取信息(亦即,地址信号传输物理地址和相关的控制和/或数据信号)给内存控制器1604。内存控制器1604使用物理地址和相关的控制和/或数据信号来存取内存406。若内存406存取为写入存取,则由数据信号所传输的数据写入到内存406。若内存406存取为读取存取,则内存控制器1604从内存406读取数据,并将所获得的读取数据提供给安全检测逻辑1700。安全检测逻辑1700将读取数据传输到桥接器逻辑1602,而桥接器逻辑1602将数据提供给设备总线接口1606。
另一方面,若给定的硬件启动的内存存取未经授权,则安全检测逻辑1700并不提供物理地址及内存406相关的控制和/或数据信号对内存控制器1604的存取。若未经授权的硬件启动的内存存取为内存写入存取,则安全检测逻辑1700可发信号完成写入存取并舍弃写入数据,保留内存406未改变。安全检测逻辑1700也可在日志(log)中建立(例如,设定或清除状态寄存器的一个或多个位)日志记录,以便记载违反安全的存取。安全核心504可周期性地存取该日志以检测这种日志记录。若该未经授权的硬件启动的内存存取为内存读取存取,则安全检测逻辑1700可通过桥接器逻辑1602将错误的结果(例如,所有的“假(F)”)送回到设备总线接口1606以作为读取数据。安全检测逻辑1700也可建立如上所述的日志记录,以为了记载违反安全的存取。
图18为主桥接器SCU 418的另一个实施例的方框图,其中该主桥接器SCU 418包括存取授权表1800。一般而言,存取授权表1800具有连接到设备总线408并能够驱动设备总线408(亦即,各装置具有相关的REQ#和GNT#信号)的用于各装置的不同组的记录。对应于设备硬件414A的第一组记录和关联于设备硬件414B的第二组的记录如图18所示。也可考虑使用额外组的记录。
存取授权表1800的各记录对应于连接到设备总线408并能够驱动设备总线408的装置。例如,在图18中,对应于设备硬件414A的第一组记录中的第一记录是针对设备硬件414B。第一记录包括“许可信号状态(GRANT SIGNAL STATE)”字段,该许可信号状态字段包含术语“许可#2确认(GNT#2 ASSERTED)”,以指示当确认GNT#2信号时,应用第一记录。该第一记录还包括对应于设备硬件414B并指示设备硬件414B是否已授权来存取设备硬件414A的“存取已授权”值。也可建立存取授权表1800,并由安全核心504所维持。
根据PCI总线协议,“启动器”装置存取“目标”装置以启动总线传送或“事务”。可通过确认“停止#(STOP#)”信号而使目标装置终止事务。当启动器装置侦测确认的STOP#信号时,该启动器装置必须终止事务并再仲裁PCI总线的控制,以便完成事务。若在任何数据传送之前目标装置确认STOP#信号,则该终止称之为“重试”。
在一个实施例中,设备总线408为PCI总线,设备总线408包括多条地址和数据(A/D)信号线。连接到设备总线408的启动器装置通过驱动设备总线408的多条A/D信号线存取连接到设备总线408的目标装置,该设备总线408具有输送指定到目标装置的地址的地址信号。举例而言,为了控制连接至设备总线408的设备硬件414B的存取,主桥接器SCU 418首先通过PCI总线而编程设备硬件414B,以配置设备硬件414B通过确认STOP#信号(亦即,通过起始PCI总线重试而阻断所有的存取尝试)而响应所有的存取尝试。
主桥接器SCU 418通过设备总线接口1606连接到设备总线408的信号线,并监视设备总线408的GNT#和A/D信号线,以侦测装置存取尝试。例如,假设设备硬件414A尝试存取设备硬件414B。当“启动器”设备硬件414A尝试存取“目标”设备硬件414B时,设备硬件414B通过启动PCI总线重试(亦即,在侦测指定到设备总线408的A/D信号线上的设备硬件414B的地址之后,确认STOP#信号)而阻止存取尝试。该动作迫使设备硬件414A通过后续的存取尝试而重试存取尝试。
当设备硬件414B阻止存取尝试时,主桥接器SCU 418通过指定到在设备总线408的A/D信号线上驱动的设备硬件414B的地址而侦测存取尝试。当设备硬件414A具有设备总线408的控制时,GNT#1信号被确认,而主桥接器SCU 418通过确认的GNT#1信号而辨识作为启动器的设备硬件414A。
主桥接器SCU 418然后决定是否将允许由设备硬件414A所产生的之后的存取尝试。主桥接器SCU 418存取对应于设备硬件414B的第二组的记录存取授权表1800,并选择在许可信号状态字段中具有“已经确认允许#1”的该第二组的第一记录。该第一记录的存取已授权值为“1”,其指示通过设备硬件414A的设备硬件414B的存取已经授权,并将允许设备硬件414A的后续的存取尝试。
当存取已授权值指示将允许设备硬件414A的后续的存取尝试时,主桥接器SCU 418送出信号至总线仲裁器1608以确认设备硬件414A。就在下一个至设备硬件414A的设备总线408的允许控制之前,总线仲裁器1608将设备总线408的控制授权给主桥接器SCU 418。主桥接器SCU 418驱动在设备总线408的信号线上的信号,该设备总线408配置设备硬件414B以允许由设备硬件414A产生的后续存取尝试。
紧接着设备硬件414A的后续存取尝试之后,总线仲裁器1608立即将设备总线408的控制再授权给主桥接器SCU 418。主桥接器SCU 418驱动在PCI总线的信号线上的信号,该PCI总线配置设备硬件414B以响应通过启动PCI总线重试的所有的存取尝试(亦即,在侦测指定至在设备总线408的A/D信号线上的设备硬件414B的地址之后,通过确认STOP#信号而阻止所有的存取尝试)。
当存取授权表1800的选择的记录中的存取已授权值为“0”时,则表示启动器装置并未被授权存取目标装置,且由启动器装置所产生的后续存取尝试将不被允许,主桥接器SCU 418不配置目标装置以允许由启动器装置所产生的后续的存取尝试,且目标装置继续阻隔由启动器装置所产生的通过起始PCI总线重试的存取尝试。应注意的是,为了保护的目的,上述的基本的(atomic)配置-存取-配置机制仅要求存在的PCI装置可编程以启动PCI总线重试即可。
现在参照图19,显示了根据本发明的处理单元1910的一个实施例的简化方框图。在一个实施例中,处理单元310包括处理单元1910、I/O存取接口1920、I/O空间1940和比如软件目标或结构的可编程目标1950。处理器1910可以是微处理器(例如,CPU 420),并可包括多个处理器(未示出)。
在一个实施例中,I/O空间1940提供“通路(gateway)”给I/O装置1960,比如调制解调器、软盘驱动器、硬盘驱动器、光驱、数字激光视盘(DVD)机、PCMCIA卡和各种的其它输入输出外围设备(例如,414A至414D)。在另一个实施例中,I/O空间1940集成在I/O装置1960内。在一个实施例中,I/O空间1940包括内存单元1947,该内存单元1947包含相关于寻址和与I/O空间1940通讯的数据。内存单元1947包括物理内存部件,该物理内存部件包括比如磁带存储器、高速缓存、随机存取存储器、设置在半导体芯片上的内存以及此类的物理内存。设置在半导体芯片上的内存可采用任何各种不同的形式,比如同步动态随机存取存储器(SDRAM)、双倍同步动态随机存取存储器(DDRAM)等。
处理器1910通过系统I/O存取接口1920而与I/O空间1940通讯。在一个实施例中,I/O存取接口1920为一种公知的结构,提供I/O空间地址和逻辑信号给I/O空间1940,以描述所希望的输入/输出数据事务。本发明的实施例提供I/O存取接口1920以执行多重表、基于安全的存取系统。
在一个实施例中,处理器1910连接至主总线1915。处理器1910通过主总线1915而与I/O存取接口1920及目标1950通讯。I/O存取接口1920连接至主总线1915和I/O空间1940。处理器1910还连接至主要总线1925,该主要总线1925用来与外围设备通讯。在一个实施例中,主要总线1925为一个外围设备互连(PCI)总线(参阅PCI规格,2.1版)。驱动显示单元320和其它装置(例如,PCI装置)的视频控制器(未示出)连接到主要总线1925。计算机系统200可包括其它的总线比如第二PCI总线(未示出)或本领域技术人员公知的其它的外围设备(未示出)。
处理器1910根据从目标1950来的指令,而执行多个计算机处理操作。目标1950可包括软件结构,该软件结构提示处理器1910以执行多个功能。此外,目标1950的多个子段,比如操作系统、例如Microsoft Word等用户接口软件系统,可同时存在于处理器1910内并执行操作。本发明的各实施例提供安全等级存取及用于处理器1910的优先权。
响应由目标1950所提供的执行软件码,处理器1910可执行一个或多个I/O装置存取,包括内存存取,以执行由一个或多个目标1950的启动所提示的任务。由处理器1910所执行的I/O存取,可包括存取I/O装置1960以控制I/O装置1960的个别功能,比如调制解调器的操作。由处理器1910所执行的I/O存取,也可包括为储存执行码和内存存取而存取I/O装置1960的内存地址,以获得从储存的内存地址来的数据。
许多时候,可通过一个或多个选择的目标1950,来限制某些I/O装置1960或I/O装置1960的各部分的存取。同样地,可通过一个或多个选择的目标1950来限制储存于I/O装置1960的特定的内存地址的某些数据的存取。本发明的各实施例提供了多重表安全存取来限制存取到系统200中的特定的I/O装置1960或I/O装置1960的内存地址。处理器1910通过I/O存取接口1920执行I/O空间存取。I/O存取接口1920提供对I/O空间1940的存取,该I/O空间1940可包括到多个I/O装置1960的通路。通过本发明的至少一个实施例,而提供多重表虚拟内存存取协议。
现在参照图20,显示了根据本发明的I/O存取接口1920的一个实施例的方框图。在一个实施例中,I/O存取接口1920包括I/O存取表2010、第二I/O表2030和I/O空间接口1945。在一个实施例中,I/O空间接口1945代表一个“虚拟”I/O空间地址,可用来寻址关于I/O装置1960或关于I/O装置1960的一部分的物理地址。处理器1910可通过寻址I/O空间接口1945而存取I/O空间1940。
本发明的实施例提供使用多重表I/O和内存存取系统而执行的I/O存取。由本发明的实施例所使用的多重表I/O和内存存取系统使用了多级表寻址设计(亦即,使用I/O存取表2010结合第二I/O表2030)以通过I/O空间接口1945存取I/O空间地址。处理器1910使用I/O内存地址来定位所希望的物理I/O地址。
系统300可利用I/O存取表2010结合一个或多个其它的表比如第二I/O表2030,来定义一虚拟I/O空间地址。使用I/O存取表2010和第二I/O存取表2030来转换可引导至物理I/O地址的虚拟I/O空间地址。物理I/O地址指向I/O装置360的物理地址,或指向在I/O装置1960中的内存地址。由本发明的实施例所提供的多级I/O存取表系统允许第二I/O表2030来定义全部各段的I/O存取表2010。在一些例子中,第二I/O表2030可定义并不出现于I/O存取表2010中的一部分的虚拟I/O地址。第二I/O表2030可被用作微调装置,该微调装置可根据由I/O存取表2010所产生的虚拟I/O地址来进一步定义物理I/O地址。如此将得到更正确和快速的虚拟I/O地址定义。
在一个实施例中,在其中可包括多个子集合表的第二表2030储存在内存单元1947中或在系统300的主存储器(图中未显示)中。第二I/O表2030可储存于高安全等级以防止不安全或未经验证的软件结构或目标1950获得对第二I/O表2030的存取。在一个实施例中,处理器1910根据通过目标1950所送出的指令,而请求对物理I/O装置地址中的地址的存取。响应由处理器1910所作的内存存取请求,I/O存取接口1920提示I/O存取表2010产生虚拟I/O地址,该虚拟I/O地址进一步由第二I/O表2030所定义。虚拟I/O地址然后指向在I/O空间接口1945中的一位置。处理器1910然后请求对虚拟I/O地址的存取,然后可使用该虚拟I/O地址来定位在I/O装置1960中对应的位置。
以下说明在图21A和图21B中所示的执行由处理器1910所执行的内存存取的一个实施例。现在参照图21A,显示了用来储存和取得在数据处理器或系统300中的安全等级属性的I/O存取系统2100的一个示例性实施例。在一个实施例中,I/O存取系统2100集成到系统300中的处理单元1910。I/O存取系统2100对于使用多重表安全方案来存取I/O空间1940的数据处理器(图中未显示)是有用的。举例而言,当使用诸如在x86型的微处理器中执行的分页设计的分页设计寻址I/O空间1940时,处理器1910可使用I/O存取系统2100。在一个实施例中,x86系统中的单一内存页包括4k字节的内存。再者,I/O存取系统2100找到在处理器1910中的特殊的应用,该处理器1910指定在页级的适当安全等级属性。
I/O存取系统2100接收I/O空间地址2153,该I/O空间地址2153由页部分2110和偏移部分2120组成,相对于将由x86型的微处理器中的分页单元所接收的虚拟、线性或中间地址。在一个实施例中,页部分2110数据寻址于适当的内存页,而偏移部分2120数据寻址于选择的页部分2110内的特定偏移I/O位置。I/O存取系统2100接收比如将由x86类型的微处理器中的分页单元(图中未显示)所产生的物理地址。
通常称之为扩展安全属性表(ESAT)的多级查找表2130接收物理I/O地址的页部分2110。多级查找表2130储存与内存的各页2110相关的安全属性。换言之,各页2110具有关于该页2110的某些安全等级属性。在一个实施例中,关于页2110的安全属性储存在多级查找表2130中。举例而言,关于各页2110的安全属性可包括下查(look down)、安全上下文ID(security context ID)、轻权值调用门(lightweightcall gate)、读取使能、写入使能、执行、外部主控写入使能、外部主控读取使能、加密内存及安全指令使能等。本领域技术人员结合本发明揭示的内容将易于了解许多的这些属性。
在一个实施例中,多级查找表2130位于系统300的系统内存(图中未显示)中。在另一个实施例中,多级查找表2130集成入处理器1910,该处理器1910包括使用了系统300的微处理器。因此,多级查找表2130能够操作的速度依赖于至少是部分依赖于系统内存的速度。系统内存的速度相对于处理器310的速度来说一般相当的慢。因此,使用多级查找表2130的取得安全属性的处理可放慢系统300的整个操作速度。为了减少定位需要的时间周期并取得安全属性,而同时使用高速缓存2140和多级查找表2130。高速缓存2140可位于与处理器1910(亦即,高速缓存2140和处理器1910集成于一个半导体芯片上)相同的晶粒上,或设在处理器晶粒的外部,或者二种情况都有。一般而言,高速缓存2140的速度实质上快于多级查找表2130的速度。高速缓存2140包括包含在多级查找表2130内的页2110和其安全属性的较小的子集。于是,对于储存在高速缓存2140中的页2110,获取安全属性的操作实质上被增强。
现在回头参照图21B,显示了使用相关于内存中的页2110而用来储存和获取安全属性的多级查找表2130的一个实施例。多级查找表2130包括通常称之为ESAT目录的第一表2150,和通常称之为ESAT的第二表2152。一般而言,第一表2150包含用于多个ESAT 2152的开始地址的目录,其中储存了关于各页2110的安全属性。在此处所示的实施例中,可使用单一ESAT目录2150来映射在I/O装置1960内的I/O地址和/或内存的整个范围。
I/O空间地址2153的第一部分用来作为进入第一表2150中的指针,其包括了最高位和通常称之为目录2154者。I/O空间地址2153还可包括含有表数据2170的部分,表数据2170能够确认正被寻址的表2150、2152。I/O空间地址2153进一步包括在表2150、2152内的偏移2120,该表2150、2152引导至一特定的记录2160、2180。第一表2150位于系统内存中基址2155处。将I/O空间地址2153的目录部分2154加至基址2155以确认记录2160,记录2160指向第二表2152其中之一的适当的地址的基址。在一个实施例中,有多个第二表2152可存在于多级查找表2130中。一般而言,在第一表2150中的各个记录2160指向第二表2152中其中一个地址的开始地址。换言之,各记录2180可指向其自己单独的ESAT 2152。
在一个实施例中,第一表2150和各第二表2152占据在物理内存中的一页2110。因此,在公知的具有分页使能的x86型的微处理器中的内存管理单元在需要时能够交换进入和离开系统内存的表2150、2152。也就是说,因为表2150、2152的多级管理,而希望所有的表2152同时存在于I/O空间340。若其中一个当前不在内存单元1947中的表2152由第一表2150中的记录2160所请求时,公知的x86微处理器的内存管理单元(图中未显示)可从比如硬盘驱动器的主存储器读取页2110,并将请求的页2110储存于也许可被存取的系统内存中。此一页大小的表2150、2152减少需要储存多级查找表2130的系统内存的量,并且减少需要使用表2150、2152存取I/O空间1940的交换的内存量。
在一个实施例中,各页为4k字节大小,而系统内存总共有十六兆字节或更多。因此,大约有4000个ESAT表2152位于一页2110内。在一个实施例中,4000个ESAT表2152各可包含4000组的安全属性。再者,ESAT目录2150包含用于各4000个ESAT表2152的开始地址。第一表2150的记录2160指向适当的第二表2152的基址。通过将I/O空间地址2153的第二部分2152(表部分)加至包含于记录2160中的基址2155,而确认在适当的第二表2152中的所需的记录2180。在一个实施例中,记录2180包含与I/O空间240中确认的页2110相关的预定的安全属性。在图21A和21B图中显示的多重表设计为一示范实施例,本领域技术人员结合本发明揭示的技术内容后,可根据本发明而实现变化的多重表设计。
图22显示SEMI/O允许位图(在图22中标号为2200)的一个实施例的方框图,和用来存取SEM I/O允许位图2200的机制的一个实施例。图22的机制可在BIU 406内的逻辑内具体实施,并当计算机系统400在安全执行模式下操作时可加以应用。在图22中,该组SEM寄存器610包括模式指定寄存器(MSR)2202。MSR 2202用来储存SEM I/O允许位图2200的开始地址(即,基址)。如上所述,计算机系统400具有n个不同的SCID值,其中n是整数且n大于等于1。SEM I/O允许位图2200包括用于各n个不同的SCID值的不同的I/O允许位图。各分离的I/O允许位图包括64k位或8k字节。
在图22的实施例中,包括存取I/O端口的I/O指令的内存页的SCID值用来作为从模式指定寄存器2202(亦即,SEM I/O允许位图2200的基址)的内容来的进入到用来偏移SEM I/O允许位图2200的一个或多个64k位(8k字节)I/O允许位图的偏移。结果,对应于SCID值的I/O允许位图被存取。然后I/O端口号用作为位偏移进入对应于SCID值的I/O允许位图。以这种方式存取的位是由I/O端口号所定义的对应于I/O端口的位。
图23为显示在该图中标号为2300的SEM I/O允许位图的另一个实施例,以及用来存取SEM I/O允许位图的机制的另一实施例的方框图。可在BIU 406内的逻辑内具体实施图23的机制。在图23的实施例中,SEMI/O允许位图2300包括单一64k位(8k字节)I/O允许位图。I/O端口号用来作为从模式指定寄存器2202(亦即,安全执行模式I/O允许位图2200的基址)的内容来的进入到I/O允许位图的偏移。以这种方式存取的位是由I/O端口号所定义的对应于I/O端口的位。应注意的是除非有其它的指示,该SEM I/O允许位图2200和该SEMI/O允许位图2300是可交换的。
图24可用来说明指定的SCID值和建立的对应SEM I/O允许位图2200、2300,如何用作在计算机系统400内为了安全目的而“划分”设备驱动器和相关的设备硬件单元。图24显示计算机系统400的各种硬件和软件组件之间关系的方框图,类似于图5B,其中设备驱动器506A和对应的设备硬件单元414A位于第一安全“室”2400,而设备驱动器506D和对应的设备硬件单元414D位于第二安全室2404。安全室2400和2404彼此分开并操作上隔离。仅允许设备驱动器506A存取设备硬件单元414A,且仅允许设备驱动器506D存取设备硬件单元414D。这种室化(compartmentalization)的设备驱动器和相关的设备硬件单元有助于防止恶意的或错误的代码对设备硬件单元的状态的负面影响,或干扰计算机系统400的适当操作。
举例而言,在图24的实施例中,包括设备驱动器506A和506D的指令的内存页可指定不同的SCID值。为设备驱动器506A的SCID值建立的第一个SEM I/O允许位图2200、2300可允许设备驱动器506A存取指定到设备硬件单元414A的计算机系统400的I/O地址空间的第一部分,而不允许设备驱动器506A存取指定到设备硬件单元414D的I/O地址空间的第二部分。同样地,为设备驱动器506D的SCID值建立的第二个SEM I/O允许位图2200、2300可允许设备驱动器506D存取指定到设备硬件单元414D的I/O地址空间的第二部分,而不允许设备驱动器506A存取指定到设备硬件单元414A的I/O地址空间的第一部分。结果,仅有设备驱动器506A允许存取设备硬件单元414A,且仅有设备驱动器506D允许存取设备硬件单元414D。
鉴于上述的系统300和说明的其相关各种特征,图25显示了操作计算机系统400的方法3300的实施例,其可用于任何其它各实施例中。方法3300包括在步骤3305中执行不安全例程。不安全例程可为一般的操作时不需要安全保护的软件例程。不安全例程也可为具有最少安全保护的软件例程。不安全例程可包括操作系统呼叫。
方法3300还包括在步骤3310中接收从不安全例程来的请求。该请求可包括例如内存事务、I/O事务、设备间事务或软件例程。该请求通常会遇到计算机系统400作出的所期望的响应。方法3300在步骤3315执行硬件中请求的第一次评估。第一次评估可包括特征化或其它较广的潜在的安全风险判定。第一次评估可用标记标示请求,除了落于一类型或包括可能或潜在的安全风险的事务类型之外,并不具有真正的安全风险。
方法3300接着在决定步骤3320中判定是否请求有潜在的安全风险。若在决定步骤3320中判定请求似乎并没有潜在的安全风险,则方法3300在步骤3325赋加(fill)此请求。可赋加此请求以便将任何安全风险降至最小和/或将计算机系统400的响应时间变得最大。若在决定步骤3320中判定请求似乎有潜在的安全风险,则方法3300在步骤3330用软件执行更详细的第二次评估。该第二次评估包括对请求的更完全的评估和以所期望的响应赋加请求的任何可能的安全风险。
方法3300接着在决定步骤3335中判定请求是否看起来有安全风险。若请求在决定步骤3335中看起来并没有安全风险,则方法3300在步骤3325赋加此请求。可赋加此请求以便将任何安全风险降至最小和/或将计算机系统400的响应时间变得最大。若在决定步骤3335中判定请求似乎有潜在的安全风险,则方法3300在决定步骤3340判定该风险是否可用本发明说明书中所举出的一种或多种方面来管理该风险,以安全地响应该请求。若在决定步骤3340赋加的请求的安全风险看起来为可管理,则方法3300在步骤3345赋加安全形式的请求。在一个实施例中,当不安全例程未接收到指示该请求并未如所请求的被赋加时,通过虚拟化而执行响应。该请求通过软件结构而替代赋加,该软件结构允许计算机系统400陷捕或包含关于请求的安全问题。若赋加请求的安全风险看起来为不可管理,则方法3300在步骤3350拒绝或忽略该请求。方法3300也可响应具有仿造或预定响应的请求。
在步骤3315可在硬件中快速有利地执行第一次评估。在步骤3330可在软件中更有利地完全执行第二次评估。当开发出新的安全风险算法时,可很容易更新软件评估。
下列的请求和可能的安全反应仅作例示用,并不欲限制任何特定的权利要求范围。现在考虑一请求写入到包括已作安全处理的保密数据的内存页。写入不能允许作为请求。内存页可虚拟化成虚拟页,而写入允许写入到虚拟页。然后计算机系统400能够评估至虚拟页的改变。
现在考虑对于写入到保护的寄存器的下一个请求。保护的寄存器可虚拟化成虚拟寄存器。可允许写入至虚拟寄存器,并评估安全风险。亦可考虑一请求以修正实时时钟。可将实时时钟虚拟化成虚拟时钟。可将请求赋加为不安全例程而不会改变实时时钟。
以上揭示的本发明的一些方面可用硬件或软件的方式来实施。因此,此处详细说明的一些部分结果表现为所谓的硬件执行的处理,和此处详细说明的一些部分结果表现为所谓的软件执行的处理,该软件执行的处理包含在计算机系统或计算机装置的内存内数据位操作的符号表示。这些说明和表示为本领域技术人员更有效地将其工作的实质传达给使用硬件和软件的本领域技术人员所使用的手段。二者的处理和操作需要实际数量的物理操作。通常对于软件,虽然并不是必须的,这些数量是采用能够储存、传输、组合、比较和其它操作的电学、磁性或光学信号的形式。主要为了普通用途的目的,在许多情况下可将这些信号方便地表示为位、数值、元素、信号、字符、术语和数字等。
然而,应该理解的是,所有的这些和相似的术语将有关于适当的物理量,且仅为方便而将标记应用于这些数量。除非经特别说明或可明显地看出,所有本发明揭示的这些说明将参照电子装置的动作和处理,该装置操作和转变代表在储存到相似表现在储存器内的物理量的其它数据的一些电子装置内,或在传输或显示装置内的物理(电学、磁性或光学)量的数据。表示如此说明的各术语的范例为“处理”、“计算(computing)”、“核算(calculating)”、“判定”和“显示”等,但是并不受限于这些术语。
还应注意的是,本发明的软件执行的方面一般编码在程序储存介质或执行于一些传输介质的形式。程序储存介质可为磁性(例如,软盘驱动器或硬盘驱动器)或光学(例如,光盘只读存储器,或“CD ROM”)的储存媒体,并可为只读的或随机存取。同样地,传输介质可为双绞线、同轴电缆、光学电缆或一些在此技术方面公知的其它的适合传输介质。本发明并不受所给予的任何这些实施方面的限制。
上述揭示的特殊实施例仅作说明用,而本发明可作修饰以及以不同的方式实施,但是对于本领域技术人员而言在理解本说明书的揭示后,应该了解本发明可以多种等效方式实施。再者,除了以下的权利要求范围中说明之外,并不欲对其中所示的构造或设计的细部作限制。因此,很明显可对本发明揭露的特定实施例作更改或修饰,而所有这些变化都包含在本发明的精神和范围内。由此,本发明提出下列权利要求请求保护。
权利要求
1.一种计算机系统(400A-B),包括一处理器(404),可配置用来执行安全例程和不安全例程;以及硬件,其连接以执行与该不安全例程相关的请求的第一次评估,其中该硬件进一步配置以提供一请求的通知给该安全例程;其中该安全例程配置以执行请求的第二次评估,以及其中该安全例程进一步配置以拒绝该请求所请求的响应。
2.如权利要求1所述的计算机系统,其中该安全例程包括配置用来执行该请求的第二次评估的软件安全异常处理程序(1210)。
3.如权利要求2所述的计算机系统,其中若该请求递送该第二次评估,则该软件安全异常处理程序(1210)配置以允许该请求的响应。
4.如权利要求1所述的计算机系统,其中该安全例程为安全核心(505)的组件,以及其中该安全核心(505)为操作系统(502)的组件。
5.如权利要求1所述的计算机系统,其中该第一次评估为分类,而其中该第二次评估为安全风险评估。
6.如权利要求5所述的计算机系统,其中该分类包括比较该请求与多个包括具有最小安全风险的类目及具有潜在的高安全风险的类目的类目,及其中若该请求是在其中一个具有潜在的高安全风险的类目,则该硬件通知该请求的安全例程。
7.如权利要求1所述的计算机系统,其中该硬件包括储存了至少一个安全执行模式位(609)的安全执行模式寄存器(610),储存了输入/输出保护位图(2200)与安全属性数据结构的内存(406),以及其中该安全例程包括微码(650)和有限状态机的至少其中一个。
8.一种内存管理方法,包括执行不安全例程;接收从该不安全例程来的请求;执行在硬件中该请求的第一次评估;以及执行在软件中的安全例程中该请求的第二次评估。
9.如权利要求8所述的方法,其中执行在硬件中该请求的第一次评估包括执行在硬件中该请求的分类;以及其中执行在软件中该安全例程中该请求的第二次评估包括执行在软件中该安全例程中该请求的安全风险评估。
10.如权利要求9所述的方法,其中执行在硬件中该请求的该分类包括比较该请求与多个包括具有低安全风险的类目,和具有潜在的安全风险的类目的类目;及若该请求是在其中一个具有潜在的安全风险的类目,则该硬件递送该请求至该安全例程。
全文摘要
本发明提供一种在安全计算环境中执行内存管理的方法和系统(400A-B)。该方法包括执行一不安全例程并接收来自该不安全例程的请求。该方法还包括在硬件中执行该请求的第一次评估,和在软件中的安全例程中执行该请求的第二次评估。计算机系统(400A-B)包括可配置用来执行安全例程和不安全例程的处理器(404)。该计算机系统(400A-B)还包括连接以执行与该不安全例程相关的请求的第一次评估的硬件。该硬件进一步配置提供该请求的通知至该安全例程。该安全例程配置可执行该请求的第二次评估。该安全例程进一步配置以拒绝该请求所请求的响应。
文档编号G06F21/00GK1630849SQ02829057
公开日2005年6月22日 申请日期2002年12月17日 优先权日2002年5月31日
发明者R·W·施密特, B·C·巴恩斯, G·S·斯特龙金, D·S·克里斯蒂 申请人:先进微装置公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1