首页 / 专利库 / 专利权 / 实施例 / 用于执行安全嵌入式容器的处理器扩展

用于执行安全嵌入式容器的处理器扩展

阅读:105发布:2021-09-19

专利汇可以提供用于执行安全嵌入式容器的处理器扩展专利检索,专利查询,专利分析的服务。并且描述了涉及用于执行安全嵌入式容器的处理器扩展的方法和装置。在一 实施例 中,提供了用于管理功能的可扩展方案,例如用于UMPC环境,或者其中使用专用处理器或微 控制器 来实现可管理性是不适合或不切实际的环境。例如,在一实施例中,独立于OS( 操作系统 )或VMM( 虚拟机 管理器)的(本文通常称为“OI”)架构涉及在处理器上创建一个或多个容器,这是通过在主机OS/VMM与OI容器之间动态地划分资源(例如,处理器周期、 存储器 、设备)来实现的。还描述并要求保护了其它实施例。,下面是用于执行安全嵌入式容器的处理器扩展专利的具体信息内容。

1.一种用于动态地对资源进行安全划分的装置,包括:
存储单元,其具有多个分区,其中,所述多个分区中的第一分区用于存储独立于操作系统(OS)的分区,该独立于OS的分区具有独立于操作系统和虚拟机管理器、并且不受操作系统和虚拟机管理器影响的执行环境,并且所述多个分区中的第二分区用于存储OS;以及固件实现的独立于操作系统/虚拟机管理器的资源管理器,其将所述多个分区耦合到处理器,其中,所述资源管理器用于在所述第一分区与所述第二分区之间动态地划分所述处理器的周期,并且其中,运行在所述处理器上的、来自所述第二分区的应用程序能够从所述资源管理器获得密钥二进制大对象以访问所述第一分区中的数据,所述密钥二进制大对象包含应用程序生成的、由所述资源管理器使用仅能由所述资源管理器访问的嵌入式密钥加密的密钥。
2.根据权利要求1所述的装置,其中,所述存储单元将独立于操作系统/虚拟机管理器的驱动程序存储在所述第二分区中,其中,所述驱动程序用于向所述资源管理器指示存储在所述第一分区中的一个或多个指令是否要被调度执行。
3.根据权利要求1所述的装置,其中,所述资源管理器基于确定出所述资源管理器未能调度存储在所述第一分区中的一个或多个指令在选择时间段内执行,为所述一个或多个指令分配最短保证执行持续时间。
4.根据权利要求1所述的装置,其中,所述资源管理器向所述第一分区分配所述处理器的空闲周期。
5.根据权利要求1所述的装置,其中,所述处理器包括一个或多个处理器核心,并且所述资源管理器用于确定是分配所述一个或多个处理器核心中一个处于C0状态的处理器核心的周期,还是唤醒所述一个或多个处理器核心中另一个处于C-X状态的处理器核心。
6.根据权利要求1所述的装置,其中,所述第一分区包括设备过滤器,用于指示是根据存储在所述第一分区中的第一中断重映射表还是根据存储在所述第二分区中的第二中断重映射表来处理中断。
7.根据权利要求6所述的装置,还包括中断重映射单元,用于接收所述中断并且引起所述设备过滤器的查找。
8.根据权利要求1所述的装置,其中,所述资源管理器基于范围寄存器的一个或多个比特来阻止来自所述第二分区的对所述第一分区的访问。
9.根据权利要求1所述的装置,其中,所述资源管理器基于存储在所述第一分区中的扩展页表中存储的数据来阻止来自所述第一分区的对所述第二分区的访问。
10.根据权利要求1所述的装置,其中,所述处理器包括存储器,用于存储未加密的信息,其中,所述未加密的信息对所述处理器的外部是不可用的。
11.根据权利要求1所述的装置,还包括完整性校验值阵列,用于存储对应于所述第一分区中的一个或多个页的数据,其中,所述阵列中的每个条目用于指示所述第一分区中的对应的页的安全散列算法值、有效性和直接存储器访问。
12.根据权利要求11所述的装置,其中,所述资源管理器基于存储在所述完整性校验值阵列的对应的条目中的值,确定所述第一分区中的所述一个或多个页的完整性。
13.根据权利要求11所述的装置,其中,响应于检测到对所述第一分区中的对应的页的修改,所述资源管理器引起对存储在所述完整性校验值阵列中的值的更新。
14.一种用于动态地对资源进行安全划分的方法,包括:
将多个分区存储在存储器中,其中,所述多个分区中的第一分区用于存储独立于操作系统(OS)的分区,该独立于OS的分区具有独立于操作系统和虚拟机管理器、并且不受操作系统和虚拟机管理器影响的执行环境,并且所述多个分区中的第二分区用于存储OS;
经由独立于操作系统/虚拟机管理器的资源管理器,将所述多个分区耦合到处理器;以及
所述资源管理器在所述第一分区与所述第二分区之间分配所述处理器的周期,其中,运行在所述处理器上的、来自所述第二分区的应用程序能够从所述资源管理器获得密钥二进制大对象以访问所述第一分区中的数据,所述密钥二进制大对象包含应用程序生成的、由所述资源管理器使用仅能由所述资源管理器访问的嵌入式密钥加密的密钥。
15.根据权利要求14所述的方法,还包括:将独立于操作系统/虚拟机管理器的驱动程序存储在所述第二分区中,其中,所述驱动程序用于向所述资源管理器指示存储在所述第一分区中的一个或多个指令是否要被调度执行。
16.根据权利要求14所述的方法,还包括:所述资源管理器基于确定出所述资源管理器未能调度存储在所述第一分区中的一个或多个指令在选择时间段内执行,为所述一个或多个指令分配最短保证执行持续时间。
17.根据权利要求14所述的方法,还包括:所述资源管理器向所述第一分区分配所述处理器的空闲周期。
18.根据权利要求14所述的方法,还包括:所述资源管理器确定是分配所述处理器中处于C0状态的一个或多个处理器核心的周期,还是唤醒所述一个或多个处理器核心中另一个处于C-X状态的处理器核心。
19.根据权利要求14所述的方法,还包括:存储在所述第一分区中的设备过滤器指示是根据存储在所述第一分区中的第一中断重映射表还是根据存储在所述第二分区中的第二中断重映射表来处理中断。
20.根据权利要求14所述的方法,还包括:所述资源管理器基于范围寄存器的一个或多个比特来阻止来自所述第二分区的对所述第一分区的访问。
21.根据权利要求14所述的方法,还包括:将对应于所述第一分区中的一个或多个页的数据存储到完整性校验值阵列中,其中,所述阵列中的每个条目用于指示所述第一分区中的对应的页的安全散列算法值、有效性和直接存储器访问。
22.根据权利要求21所述的方法,还包括:所述资源管理器基于存储在所述完整性校验值阵列的对应的条目中的值,确定所述第一分区中的所述一个或多个页的完整性。
23.根据权利要求21所述的方法,还包括:所述资源管理器响应于检测到对所述第一分区中的对应的页的修改,引起对存储在所述完整性校验值阵列中的值的更新。
24.一种用于动态地对资源进行安全划分的装置,包括:
用于将多个分区存储在存储器中的模,其中,所述多个分区中的第一分区用于存储独立于操作系统(OS)的分区,该独立于OS的分区具有独立于操作系统和虚拟机管理器、并且不受操作系统和虚拟机管理器影响的执行环境,并且所述多个分区中的第二分区用于存储OS;
用于经由独立于操作系统/虚拟机管理器的资源管理器,将所述多个分区耦合到处理器的模块;以及
用于由所述资源管理器在所述第一分区与所述第二分区之间分配所述处理器的周期的模块,其中,运行在所述处理器上的、来自所述第二分区的应用程序能够从所述资源管理器获得密钥二进制大对象以访问所述第一分区中的数据,所述密钥二进制大对象包含应用程序生成的、由所述资源管理器使用仅能由所述资源管理器访问的嵌入式密钥加密的密钥。
25.根据权利要求24所述的装置,还包括:用于将独立于操作系统/虚拟机管理器的驱动程序存储在所述第二分区中的模块,其中,所述驱动程序用于向所述资源管理器指示存储在所述第一分区中的一个或多个指令是否要被调度执行。
26.根据权利要求24所述的装置,还包括:用于由所述资源管理器基于确定出所述资源管理器未能调度存储在所述第一分区中的一个或多个指令在选择时间段内执行,为所述一个或多个指令分配最短保证执行持续时间的模块。
27.根据权利要求24所述的装置,还包括:用于将对应于所述第一分区中的一个或多个页的数据存储到完整性校验值阵列中的模块,其中,所述阵列中的每个条目用于指示所述第一分区中的对应的页的安全散列算法值、有效性和直接存储器访问。
28.根据权利要求27所述的装置,还包括:用于由所述资源管理器基于存储在所述完整性校验值阵列的对应的条目中的值,确定所述第一分区中的一个或多个页的完整性的模块。
29.根据权利要求27所述的装置,还包括:用于由所述资源管理器响应于检测到对所述第一分区中的对应的页的修改,引起对存储在所述完整性校验值阵列中的值的更新的模块。
30.一种计算系统,包括:
用于存储指令的存储器,其中,所述存储器包括多个分区,其中,所述多个分区中的第一分区用于存储独立于操作系统(OS)的分区,该独立于OS的分区具有独立于操作系统和虚拟机管理器、并且不受操作系统和虚拟机管理器影响的执行环境,并且所述多个分区中的第二分区用于存储OS;
用于执行所述指令的处理器;以及
固件实现的独立于操作系统/虚拟机管理器的资源管理器,其将所述多个分区耦合到所述处理器,其中,所述资源管理器用于在所述第一分区与所述第二分区之间动态地划分所述处理器的周期,并且其中,运行在所述处理器上的、来自所述第二分区的应用程序能够从所述资源管理器获得密钥二进制大对象以访问所述第一分区中的数据,所述密钥二进制大对象包含应用程序生成的、由所述资源管理器使用仅能由所述资源管理器访问的嵌入式密钥加密的密钥。
31.根据权利要求30所述的系统,其中,所述存储器将独立于操作系统/虚拟机管理器的驱动程序存储在所述第二分区中,其中,所述驱动程序用于向所述资源管理器指示存储在所述第一分区中的一个或多个指令是否要被调度执行。
32.根据权利要求30所述的系统,其中,所述资源管理器基于确定出所述资源管理器未能调度存储在所述第一分区中的一个或多个指令在选择时间段内执行,为所述一个或多个指令分配最短保证执行持续时间。
33.根据权利要求30所述的系统,还包括耦合到所述处理器的音频设备。

说明书全文

用于执行安全嵌入式容器的处理器扩展

技术领域

[0001] 本公开总体上涉及电子领域。更具体地,本发明实施例涉及用于执行安全嵌入式容器的处理器扩展。

背景技术

[0002] 计算机系统可以被实现为分层的设备,例如包括硬件层、固件操作系统层以及应用程序层。计算机系统的硬件层可以被称为物理平台。物理平台可以包括处理器、芯片组、通信信道、存储器主板和系统。
[0003] 计算机系统还可以包括管理引擎(manageability engine),例如包括微控制器,其专用于允许例如通过通信网络经由远程管理控制台来远程地管理该计算机系统。然而,由于包括成本、大小、功耗、散热、有限的MIPS(每秒百万指令)等在内的原因,在一些实现中针对管理服务来提供专用的微控制器可能是不适当的、不切实际的或者没有可扩展性。附图说明
[0004] 参考附图提供了详细的描述。在附图中,附图标记最左边的数字标识出该附图标记第一次出现的那幅图。在不同的附图中使用相同的附图标记来指示类似或相同的项。
[0005] 图1、18和19说明了计算系统的实施例的框图,所述计算系统可以被用于实现本文讨论的各种实施例。
[0006] 图2是根据一实施例的状态转变图,其说明了四个状态和用于使得能够从一个状态转变为另一个状态的触发条件。
[0007] 图3说明了根据一实施例的与不同存储器分区的执行相关联的各种操作的框图。
[0008] 图4-8说明了根据一些实施例的时间图。
[0009] 图9和11说明了根据本发明的一些实施例的流程图
[0010] 图10说明了根据一实施例的用于处理从分配给OI的设备发起的中断、并将其注入到OI分区的各种部件的框图。
[0011] 图12说明了根据一实施例的与OIPIC模进行通信的各种部件。
[0012] 图13和14说明了根据一些实施例的与使用加载密钥相关联的操作的框图。
[0013] 图15和16说明了根据一些实施例的与使用存储密钥相关联的操作的框图。
[0014] 图17说明了根据一实施例的与在S0与S3之间的安全转变相关联的操作的框图。

具体实施方式

[0015] 在以下的描述中,阐述了许多具体细节以便提供对各种实施例的透彻理解。但是,可以在没有这些具体细节的情况下实施本发明的各种实施例。在其它实例中,没有详细地描述已知的方法、过程、部件和电路,以便不模糊本发明的特定的实施例。此外,可以使用各种手段,例如半导体集成电路(“硬件”)、组成一个或多个程序的计算机可读指令(“软件”)或硬件和软件的某种组合,来执行本发明的实施例的各个方面。为了该公开的目的,提及“逻辑”应当是指硬件、软件或其某种组合。此外,本文使用的“指令”或“微操作”(其还可以被称为“uop”)可以是可互换的。此外,尽管本文讨论的一些实施例可以将置位或清零值分别称为逻辑0和1,但是这些术语是可互换的,例如,取决于实现。
[0016] 一些处理器可以包括多个处理核心。除了多个核心之外,处理器管芯还可以包括非核心(其可以统指在处理器管芯上除了核心之外的所有组件)。为了提高性能,例如通过替代多个芯片组,可以将更多的功能并入处理器的非核心中。例如,一些实现可以将存储器控制器功能、IO(输入输出)控制器功能和图形功能建立在非核心上。但是,该趋势对平台上提供的其它功能或服务(例如,可管理性)会有影响。当前,可以将一些管理功能移交到专用处理器,其可以构成管理引擎(ME)的核心部分。ME通常位于芯片组上。此外,一些服务器平台可以实现分立专用微控制器,称为基板管理控制器(BMC)、服务处理器(SP)或叫做任何其它名字。如先前所讨论的,由于以下原因,例如成本、大小、功耗、散热、有限的MIPS等,这些方案没有可扩展性。这在超级移动个人计算机(UMPC)环境中愈发成为问题,因此促使出现了对于不同的解决方案的需求。
[0017] 为此目的,本文公开的一些实施例提供了针对管理功能的可扩展方案,例如,用于UMPC环境,或者用于其中使用专用的处理器或微控制器来实现可管理性是不适当的或不切合实际的情况。例如,在一实施例中,独立于OS(操作系统)或VMM(虚拟机管理器)的架构(本文中统称为“OI”)涉及通过在主机(host)OS/VMM与OI容器之间动态地划分资源(例如,处理器周期、存储器、设备),来创建一个或多个容器,例如在处理器上。在一个实施例中,OI资源管理器(OIRM)可以执行在主机OS/VMM容器(本文中也称为分区)与独立于OS的容器之间的分时(time sharing)操作。因此,一些实施例可以允许在不影响OS/VMM执行性能(或减少对其的影响)的情况下,将空闲的处理器周期用于有用的目的(例如,可管理性)。
[0018] 在一实施例中,公开了用于处理从分配给OI的设备发起的中断、并将这些中断注入到OI分区的技术。在一个实施例中,提供了防篡改(tamperresistant)存储器,以处理OI中的安全敏感数据。在一实施例中,从S3到S0以及从S0到S3的转变所花费的时间量减少了。此外,本文描述的技术可以允许提高各种计算设备中的性能、效率和/或安全,例如参照图
1-19所讨论的那些。
[0019] 更具体地说,图1说明了根据本发明的一实施例的计算系统100的框图。系统100可以包括一个或多个处理器102-1至102-N(本文中通常称为“多个处理器102”或“处理器102”)。处理器102之间可以经由互连网络或总线104进行通信。每个处理器可以包括各种部件,为了清楚起见,参照处理器102-1仅讨论了其中的一些部件。因此,剩余的处理器102-2至102-N中的每一个可以都包括参照处理器102-1所讨论的相同或相似的部件。
[0020] 在一实施例中,处理器102-1可以包括一个或多个处理器核心106-1至106-M(本文中称为“多个核心106”或更一般地称为“核心106”)、共享高速缓存108和/或路由器110。处理器核心106可以被实现在单个集成电路(IC)芯片上。此外,该芯片可以包括一个或多个共享的和/或私有的高速缓存(例如,高速缓存108)、总线或互连(例如,总线或互连网络112)、存储器控制器(例如,参照图18-19所讨论的那些)或其它部件。
[0021] 在一个实施例中,路由器110可以用于在处理器102-1和/或系统100的各种部件之间进行通信。此外,处理器102-1可以包括多于一个路由器110。此外,多个路由器110可以进行通信以使得能够在处理器102-1内部或外部的各种部件之间进行数据路由。在一个实施例中,处理器102-1可以具有嵌入式密钥113,其仅可由OIRM 124来访问,以用在加解密操作中。在一个实施例中,可以在处理器第一次上电时,由OIRM使用强随机数生成器来生成该密钥并将其存储在该处理器上。在另一个实施例中,可以在制造时将该密钥存储到处理器中。
[0022] 共享高速缓存108可以存储由处理器102-1的一个或多个部件(例如,核心106)使用的数据(例如,包括指令)。如图所示,处理器102还可以包括位于处理器上的(本文中也称为“封装内”)存储器111(其可以用作安全存储器,下文将进一步讨论)。例如,共享高速缓存108可以在本地对存储器114中存储的数据进行缓存,以便于由处理器102的部件来更快地访问。在一实施例中,高速缓存108可以包括中间级高速缓存(例如,二级(L2)、三级(L3)、四级(L4)或其它级高速缓存)、最末级高速缓存(LLC)和/或其组合。此外,处理器102-1的各种部件可以通过总线(例如,总线112)和/或存储器控制器或中枢(hub)来与共享高速缓存108直接地通信。如图1所示,在一些实施例中,一个或多个核心106可以包括一级(L1)高速缓存(116-1)(本文中通常称为“L1高速缓存116”)和/或L2高速缓存(没有示出)。
[0023] 如图1所示,系统100可以使用一个或多个分区(本文中还可以互换地称为“容器”)120和122。OI资源管理器(OIRM)124可以通信地耦合在物理层(例如,处理器核心、芯片组、存储器、存储设备、网络、接口等)与主机OS/VMM和OI容器(或分区)120和122之间。此外,可以使用多于一个OI容器。在一些实施例中,OIRM 124可以被实现为处理器上的微码或固件。
例如,OIRM 124可以是处理器微码,其负责调度处理器周期。OIRM 124还可以允许主OS/VMM分区120执行与OI分区124所执行的处理器指令交错的处理器指令,例如,以用于维持公平性或对系统上所执行的多个处理的系统响应能
[0024] 主机OS/VMM分区120可以包括常规的(主机)应用程序和/或主机设备驱动程序(没有示出)。此外,OI分区122可以包括应用程序、对应于核心功能的数据、和/或OI驱动程序(例如,用于所选择的设备)(没有示出)。此外,在一些实施例中,OIRM 124可以具有以下约束中的一个或多个,所述约束用来满足何时将处理器时间分配给OIEE(OI执行环境(OI分区内的操作环境)):
[0025] ·主机OS/VMM不会错过中断或经历时间漂移,并且主机OS/VMM IO设备(例如,CDROM、LAN、WLAN等)应当及时地得到服务以避免缓冲区的下溢或上溢。这意味着将以最小延迟来传送目标为主机OS/VMM的外部中断和处理器间中断。
[0026] ·调度OIEE到一处理器核心上不会导致妨碍其它处理器。这种情况可能会在当操作系统在被选中用于调度OI的处理器核心上保持有时发生。将该处理器核心拿走以运行OI,这将引起等待该锁的其它处理器核心自旋并且浪费周期。用于调度OI以在处理器核心上执行的算法应当尽可能避免这种情况。
[0027] ·处理器核心、设备、总线等的功率管理与OS合作而不是干扰主机OS/VMM 120。OIRM 124可以得知调度决策对于系统的功率、热和性能状态的副作用。例如,将一个C-x处理器核心(与处理器C状态关联的)置于C-0以调度OI,这可能使得系统的功率包络(envelope)超过阈值而会导致进行自动频率节流(throttling)。因此,如果选择一个C-x处理器核心来进行调度,进行该操作虽然会避免对C-0处理器核心的性能影响,但是可能会无意地导致严重的性能惩罚。OIRM 124可以使用在核心和非核心中可用的合适的功率启发式规则(heuristics)(例如来自PCU(功率控制单元))来做出明智的选择。可以在处理器非核心中提供PCU以管理用于处理器核心和非核心部件的功率管理策略。
[0028] ·操作系统和性能监视工具可以被配置为有机会检测执行OI的给定处理器核心所消耗的周期数。提供这种观察功能可以有助于如果观察到任何无法预料的行为则对系统进行调试以确定其是否由OI引起。
[0029] 在一些实施例中,OI实现将提供不受主机OS/VMM的状态影响的执行环境。因此,在一些实施例中,OIRM可以满足以下需求中的一个或多个:
[0030] ·通过确保OI操作/指令的执行能够持续所配置的最小保证持续时间,来避免或减少OI资源缺乏(starvation)。
[0031] ·避免或减少将OI操作/指令固定到系统中的任意一个处理器核心。独立于OS的操作会减少主机OS/VMM的周期。一些操作系统和VMM固定工作负荷(例如,线程、VM(虚拟机)等)以便完成吞吐量目标。将OI固定到特定的处理器核心上将会不公平地惩罚由主机OS/VMM固定到该处理器核心上的任何工作负荷。
[0032] ·在对系统性能具有最少影响的处理器核心上运行。系统性能是主机OS/VMM吞吐量、功耗和C状态唤醒等待时间的混合。OIRM可以依靠来自PCU的启发式规则来得到关于处理器核心选择(用于执行OIEE)的最优决策,以便不会有害地影响沿着这些向量中的任意一个的系统性能。
[0033] 图2是根据一实施例的说明了四个状态和触发条件的状态转变图,其中所述触发条件使得从一个状态转变为另一个状态。此外,基于上述要求,本领域技术人员可以参考处理器核心的示出的状态转变。根据一些实施例,处理器核心可以处于以下模式中的一个。在一实施例中,处理器核心在这些模式之间的转变受OIRM 124的控制。
[0034] ·主机OS/VMM-主机OS/VMM容器120是活动的并且正在处理器核心上执行。
[0035] ·OI-处理器核心正在执行OI容器122中的一个。
[0036] ·SMM(系统管理模式)-处理器核心正在执行SMM容器123。可以从任意状态进入SMM状态。
[0037] ·空闲-主机OS/VMM以及OIEE都处于C-x状态。OIRM将处理器核心转变到由主机OS/VMM请求的C状态。
[0038] 以下的表1提供了关于图2示出的每个转变及其原因的进一步信息。
[0039]  转变   开始状态   结束状态   潜在的原因
[0040]  1   主机   OI   可以由以下原因中的一个来触发从
  OS/VMM   主机OS/VMM到OI的转变:
  1、抢占(pre-emption)计时器到
  期-指示保护计时器的到期
  2、主机OS/VMM中的HL驱动
  程序工作线程让步于调度OIEE(稍
  后描述)。
  (稍后描述)
  2   OI   OI   当处理器核心处于OI状态时,取
  决于中断的优先级,将到达OI容
  器的中断注入适当的OIEE中。没
  有状态转变发生。
  4   空闲   主机   主机OS/VMM的中断事件到达了,
  OS/VMM   这使得线程从空闲状态转变为主机
  OS/VMM状态。注意主机OS/VMM
  中断使得仅当线程处于空闲或
  OIEE模式时才向OIRM发出通知。
  当线程处于主机OS/VMM模式时,
  在没有OIRM的干预的情况下,将
  中断直接传送到主机OS/VMM。
  5   主机   主机   到达OI容器的中断没有抢占主机
  OS/VMM   OS/VMM   OS/VMM。OIRM注意到OIEE的
  未决中断并且继续运行主机
  OS/VMM。
  6   OI   主机   可以由以下原因中的一个来触发从
  OS/VMM   OI到主机OS/VMM的转变:
  1、当非抢占式地调度OI时(例
  如,由于OI驱动程序发起调度
  OIEE),主机OS/VMM中断的到达
[0041]  使得OILEE被抢占从而恢复主机
  OS/VMM处理
  2、OILEE时间片的到期(抢占
  计时器到期)
  3、OILEE内核调用类似于HLT
  的指令,指示其处于空闲并且没有
  其它工作要做。
  7   主机   空闲   主机OS/VMM发出指令,例如,
  OS/VMM   HLT(停机)或MWAIT(监视等待),
  以转变到低功率空闲状态。
  8   空闲   OI   可以由以下来触发这种转变:
  1、OIEE的中断的到达
  2、抢占计时器的到期,这要求调
  度OIEE。
  9   任意状态   SMM   可以由以下来触发这种转变:
  在任何状态中SMI(系统管理中
  断)的到达使得线程切换到SMM
  模式。
  10   SMM   任意状态   可以由以下来触发这种转变:
  从SMM发出RSM(从SMM模
  式返回)。
[0042] 表1
[0043] 此外,可以将OIRM 124实现为运行在所有处理器线程上的微码模块。OIRM实例中的一个可以活动地调度OIEE以便在任意给定的时间点上在其中一个处理器核心上执行。在本文中,活动地调度OIEE以使其在处理器核心上执行的OIRM实例可以被称为“活动”OIRM实例,并且其它实例可以称为“待机”OIRM实例。在一实施例中,在系统中仅有一个活动的OIRM实例。
[0044] 一般而言,支持多核心处理器的操作系统使用锁来实施一些操作的原子性(atomicity)。由于进行抢占以便在保持有锁的处理器核心上执行OI容器,所以可以扩展使用了这种锁的临界区代码。因此,其它的锁竞争者可能以自旋告终,直到处理器核心返回来执行主机OS/VMM;所以,可以显著地扩展自旋锁获取。调度OIEE到一处理器核心上不应当导致其它处理器核心在自旋锁上的这种不期望的自旋。由本文讨论的架构来实现的以下方法避免了以下的这种锁定(或者至少减少了其可能性):
[0045] (1)驱动程序辅助调度-允许操作系统有机会声明时间间隔,其中在这种时间间隔中将处理器核心从操作系统移走而去执行OI操作/指令是免于这种危害的。例如,驱动程序(例如,在主机OS/VMM 120中提供的)可以帮助进行这种确定。这可以是正常操作模式,其中OIRM通知(例如,使用中断)主机OS/VMM中的OI驱动程序,以指示需要调度OI操作/指令。该驱动程序,例如,响应于获得调度,通知OIRM。ORIM可以将该通知用作“让步(yield)”指示,来将OI调度到该处理器核心上。ORIM允许OI在该处理器核心上执行,一直到OI消耗了其周期分配或者有中断/IPI(处理器间中断)需要被传送到主机OS/VMM。该方法导致OI执行时间实质上被解释为是驱动程序执行时间,并且还避免了与高优先级锁同步有关的问题。
[0046] (2)自治调度-然而,在一些情况下,无法完全依赖上面描述的方法(1)来进行OI调度,这是因为:(a)主机OS/VMM可能处于非工作状态;(b)OI驱动程序可能被禁止或没有安装;和/或(c)主机OS/VMM上的当前工作负荷会妨碍OI驱动程序进行调度。因为OIRM需要防止OIEE资源缺乏并且提供某种配置的最短执行时间,所以OIRM可以使用保护计时器来防止在主机OS/VMM中的这种异常情况。可以在以用于OI驱动程序的中断的形式的通知被传送到主机OS/VMM时,启动该保护计时器。如果OI驱动程序没有被调度足够长时间来在该保护时间内将所配置的最短执行时间分配给OI,那么OIRM可以移到抢占式操作模式来满足对OIEE做出的最短执行时间保证。OIRM还可以确保抢占了主机OS/VMM的持续时间是确定的并且受限于上限阈值。
[0047] 根据一些实施例,以下参数可以控制主机OS/VMM与OI之间的执行时间的分时操作:
[0048] 1、OI计算间隔(OI-Accounting-Interval)-其中实施在OIEE与主机OS/VMM之间进行的分时的计算间隔。例如,如果OIEE被配置为使用处理器核心上的3%的周期,并且OI计算间隔被设置为100毫秒,那么OIEE在任一给定的100毫秒间隔中不应当执行多于3毫秒。针对OI驱动程序的中断可以在每个计算间隔的开始处被传送。
[0049] 2、OI最小份额(OI-Minimum-Share)-作为OI计算间隔的百分比,可以向OI保证的的最短处理器执行时间。最小份额在任一给定的计算间隔中都将是对OI可用的。但是,没有等待时间承诺,并且最小份额可以分散在整个计算间隔内的一次或多次运行中。
[0050] 3、OI正常份额(OI-Normal-Share)-作为OI计算间隔的百分比,分配给OI的处理器时间的正常份额。可以并不向OI保证正常份额。
[0051] 4、OI最大份额(OI-Maximum-Share)-作为OI计算间隔的百分比,OI可以使用的处理器时间的最大份额。这是对OI可用的处理器份额(例如,当其进入修复模式时(如由OI向OIRM指示的)),并且取决于实现,可以高达OI计算间隔的100%。
[0052] 5、OI调度量程(OI-Scheduling-Quantum)-当抢占了执行主机OS/VMM的处理器核心来执行OI时,OI可以不被抢占地运行的最大时间。
[0053] 可以由OIRM使用称为OI当前份额的参数来跟踪执行时间的当前份额(例如,OI正常份额或OI最大份额)。例如,在每个计算间隔的开始,OIEE接收等于其在处理器核心上的执行时间的OI当前份额的时间信用(credit)。在OIEE的每次调度是,消耗的信用量等于OIEE在处理器核心上运行的持续时间。在信用耗尽时,OIEE会被禁止执行,直到下一计算间隔(在其中该信用被再填满)。
[0054] 驱动程序辅助调度方案(上述的项(1))可以取决于安装在主机OS/VMM中的OI驱动程序。OI驱动程序可以向OIRM注册中断向量,作为它与OIRM的初始化的一部分。OI驱动程序还可以引起OI工作线程的生成,所述OI工作线程处于等待来自OI驱动程序的事件通知的无限循环中。OIRM可以将中断注入到主机OS/VMM中以调用对应于该向量的ISR(中断服务例程)处理机,以便于向OI驱动程序通知OI计算间隔的开始。
[0055] 图3说明了根据一实施例的与OIEE和主机OS/VMM的执行相关联的各种操作的框图。如在图3中所示,在操作1,OIRM 124将中断注入到主机OS/VMM 120中。这可以调用由OI驱动程序302注册的ISR(例如,存储在OS/VMM分区120中)。在操作2,OI驱动程序302(例如,通过对应的ISR)通知OI工作线程303。在一实施例中,线程303没有关联到任何特定的处理器核心。操作系统可以在适当的时候调度线程303。在操作3,线程303调用一指令来请求OIRM 124调度OIEE 304。在操作4,OIRM 124保存主机OS/VMM容器120的当前状态并且加载OIEE 304的所保存的状态。操作5可以由于目标为主机OS/VMM 120的中断/IPI的到达而被触发,或者它可以由于为OIEE 304配置的执行时间的当前份额(正常或最大)的到期而被触发。
[0056] 从主机OS/VMM和OI工作线程303的度来看,当执行上述操作5时,IO指令可以实质上是返回的阻塞指令。取决于执行操作5的原因,OIRM 124可以将以下返回值中的一个返回到工作线程303:
[0057] ·阻塞(BLOCK)-该返回值指示,因为消耗了OI的时间分配,所以执行了操作5。这可以本质上使得线程303返回并且阻塞以等待来自OI驱动程序的下一事件通知。
[0058] ·继续(CONTINUE)-该返回值指示,由于到达主机OS/VMM的外部中断/IPI,所以执行了操作5,例如抢占了OI。在该计算间隔中OI的时间分配可能还未被耗尽。使操作5执行的中断会抢占OI。当主机OS/VMM完成ISR处理时(并且可能执行其它的未决高优先级任务),它将重新调度OI工作线程303。可替代地,主机OS/VMM可以在它处理到达的中断时,将线程303移动到另一个处理器核心。一旦被恢复,工作线程303可以检查返回值,并且如果该返回值是“继续”,则它执行操作3以恢复OI执行。
[0059] 图4说明了根据一实施例的时间图。在图4中示出了两个计算间隔。在第一计算间隔中(从图4的左侧开始),在402,由于OI驱动程序线程303调用OI读取,所以调度OI;但是,在404,由于出现主机OS/VMM中断,所以OI被中断。之后在406,在该计算间隔内再次调度OI,并且在408,完成其分配时间的执行。在第二计算间隔中(在410处开始),在412,OI不间断地运行,直到它完成其分配的时间的执行。
[0060] 在一些实例中,有可能通过防止或阻止OI工作线程303的执行来在OI上无意或故意地进行完整的拒绝服务攻击。在下文描述的保护计时器和关联的主机OS/VMM抢占允许OIRM交付对于OI的最短执行时间保证。
[0061] 更具体地说,在注入用于请求调度OI工作线程303的中断时,OIRM启动保护计时器。在一实施例中,该计时器的持续时间可以被设置为计算间隔的50%。还可以设置其它持续时间。如果OI有足够的机会执行消耗其最短配置时间份额,那么OIRM关闭针对该计算间隔的保护计时器。因此,可能不保证任何额外的执行机会。在该保护计时器到期时,如果OI还没有机会执行其配置的最短时间份额,那么OIRM进入抢占式调度模式,直到它向OI提供了足够的机会以消耗其配置的最短时间份额。当进行抢占式调度以执行OI时,可以阻止主机OS/VMM中断。但是,OIRM可以将最大持续时间(其中OI不间断地执行)控制为等于OI调度量程。
[0062] 在一个实施例中,以下操作描述了在保护计时器到期时OIRM的处理,其中OIRM启动周期为P的计时器,其中P由以下来确定:
[0063] P=(OI_Accounting_Interval/2)/(OI_Minimum_Share/OI_Scheduling_Quantum)
[0064] 在每个间隔到期时,执行以下的操作:(a)抢占主机OS/VMM并且调度OI在抢占了主机OS/VMM的那个处理器核心上执行;(b)将用于OI的抢占计时器配置为在OI调度量程之后到期;(c)在OI抢占计时器到期时,恢复主机OS/VMM。
[0065] 图5-8说明了根据一些实施例的时间图。更具体地说,图5示出了在保护计时器到期前消耗的OI最小份额。这里,示出了两个计算间隔。在第一计算间隔内,OI在保护计时器到期之前已经消耗的其最小份额;但是,主机OS/VMM并不给OI机会以执行更多。在第二间隔内,类似的情况发生,但是主机OS/VMM允许OI执行比OI最小份额更多。
[0066] 在图6,OI进入抢占式调度模式,并且开始抢占主机OS/VMM来执行OI中的OI调度量程长突发(burst),直到它有机会执行其最短配置时间份额。在图7中,OI进入抢占式调度模式,并且开始抢占主机OS/VMM来执行OI中的OI调度量程长突发。但是,在几个这种量程之后,OS中的驱动程序变为活动的并且调用OI读取以请求调度OI。此外,OI读取导致OI执行了足够长时间来消耗所配置的最短时间,并且导致停止抢占主机OS/VMM来执行OI。在图8中,OI进入抢占式调度模式,并且开始抢占主机OS/VMM来执行OI中的OI调度量程长突发。但是,在几个这种量程之后,OS中的驱动程序变为活动的并且调用OI读取以请求调度OI(但是,OI并没有运行足够长时间以消耗所配置的最短时间)。这使得OIRM继续抢占式调度,直到在OI中执行了所配置的最短时间。
[0067] 在一实施例中,对于处理主机OS/VMM中的OI驱动程序的缺少/失败,如果在操作系统中安装了这种驱动程序,那么驱动程序辅助调度方案可以发挥作用。但是,OI调度可以不依赖于所存在的驱动程序;因此,当安装了驱动程序并且其起作用时,以OS友好的方式来调度工作。如果驱动程序没有安装或没有加载,或者操作系统本身没有安装或操作系统不可以工作,那么OIRM可以像上述的保护时间为0那样执行调度。可以借助于抢占式调度模式,直到OIEE接收了所配置的最短执行时间。一旦OIEE运行了所配置的最短时间,OIEE时间片中主机OS/VMM事件的到达可以继而引起抢占OIEE来运行主机OS/VMM。
[0068] 在一些实施例中,可以将OS可见性提供到OI模式中消耗的周期中。该功能还可以有助于调试工具理解在支持OI的平台上的任何异常行为。通过可由操作系统和/或性能监视工具来读取的一对每核心MSR(模式特定寄存器)-OI_CYCLE_LOW(包含周期计数的低32比特)和OI_CYCLE_HIGH(包含周期计数的高32比特),使得OI模式中消耗的周期的可见性是可用的。对于每个核心,作为其初始化序列的一部分,OIRM可以将这些计数器复位为0。在每次OI执行时,可以通过这些计数器来更新在OI内部所花费的时间(没有对在SMM或主机OS/VMM中所花费的时间进行计数)。
[0069] 图9说明了根据一实施例的确定要跳转到的下一个核心的流程图。例如,当正处于驱动程序辅助调度模式时,OIRM可以请求主机OS/VMM选择处理器核心来执行OIEE。当发起针对OI驱动程序的中断来请求OI调度时,操作系统可以隐式地做出该选择(当它调度OI工作线程303到一处理器核心上时)。其中被调度了工作线程303的处理器核心可以用于调度OIEE。在主机OS/VMM不响应的模式中(例如,保护计时器到期或者主机OS/VMM没有安装OI驱动程序),OIRM可以自动地执行处理器核心选择。
[0070] 一般而言,当处理器核心(或硬件线程)正在活动地执行处理器指令时,该处理器核心处于C0状态。在该状态中,上电并使用所有系统部件(例如,处理器、总线、高速缓存、存储器等)。但是,当处理器核心没有执行指令时,其可以移到C1、C2、C3等状态,其中可以对该系统的日益增多的不同部分进行断电,或者将其置于低功率模式。这些功率节省状态通常将被称为C-x状态。
[0071] 根据一些实施例,OIRM可以将负载分布到系统中的所有处理器核心。这可以减少或避免惩罚在特定处理器核心上执行的软件;例如,通过VMM固定到一物理处理器核心上的虚拟机。由OIRM的当前活动实例来执行处理器核心跳转规则,并且取决于处理器核心跳转算法的结果,它可以将活动角色切换到待机实例中的一个。OI可以在任何给定的时间运行在封装中的处理器核心中的一个上。OIRM可以决定使用哪个处理器核心来执行OI。主机OS/VMM可以将一个或多个处理器核心置于C-x状态。OIRM所使用的用于确定要在哪个处理器核心上执行的逻辑可以考虑处理器核心的C-x状态阶段以及该处理器核心的当前C-x状态。
[0072] 在一个实施例中,OIRM可以决定是从C0处理器核心取得周期还是唤醒C-x处理器核心来执行OI。这里的折衷是功率相对于性能。唤醒C-x处理器核心来执行OI可以并不影响(在大多数情况下)主机OS/VMM的性能,这是因为没有从其中主机OS/VMM是活动的那些处理器核心中取得周期。但是,唤醒C-x处理器核心的确会增加功率使用。考虑的另一个因素是动态节流,其中,当唤醒C-x处理器核心时,由于在功率/热量包络中的改变,所述动态节流会降低C0处理器核心的性能。OIRM可以咨询CPPM/PCU来获得启发式规则,以帮助进行该确定。第二个考虑因素是对主机OS/VMM做出的关于从C-x状态唤醒的等待时间的“承诺”。每个C状态都与一个唤醒到C0状态的等待时间相关联。当选择已由主机OS/VMM置于C-x状态的处理器核心以执行OI时,该处理器核心的状态移到C0。现在,如果对于主机OS/VMM,发生了唤醒事件(例如,中断)(当处理器核心正执行OI时),那么OIRM可以抢占OI来将控制转移回主机OS/VMM。在执行从OI到主机OS/VMM的切换中引起的等待时间不可以超过所承诺的从主机OS/VMM所请求的C状态唤醒的唤醒等待时间。在一些实施例中,OIRM使用以下规则来在这种情况下执行处理器核心选择:
[0073] 参照图9,在902,可以应用C状态规则(这里提及的C状态是主机OS/VMM所请求的并察觉的C状态)。为了避免由于挪用周期而影响主机OS/VMM的性能,OIRM可以在处于空闲(例如,从主机OS/VMM的角度来看是C-x状态)并且没有被主机OS/VMM所使用的处理器核心上运行OIEE。但是,唤醒C-x处理器核心来执行OIEE具有不利的副作用,其引起基于功率/热量的自治节流被触发并且导致C0处理器核心上的主机OS/VMM性能受到不利影响。OIRM(例如,在902)可以使用来自PCU 904的启发式规则来确定在抢占C0处理器核心来执行OI与使用C-x处理器核心之间的折衷。同样地,如果相对于使用处于C0状态的处理器核心,唤醒睡眠中的处理器核心,那么对平台的功率影响会更高。但是,如果相对于当用电池电源906进行工作,平台用AC电源工作,那么由于唤醒处理器核心来执行OI而导致的功耗小幅增加是可以接受的。
[0074] 如图9所示,C状态规则902的应用可以考虑当前的核心列表908、PCU启发式规则904和/或平台电源906,从而生成过滤的核心列表910(其可以包括C0处理器核心以及C-x处理器核心)。在操作912,如果确定没有核心处于C-x状态,那么OIRM可以在C0处理器核心914之间执行核心跳转规则920(例如,循环选择)以分散负载。如果有C-x处理器核心,那么OIRM可以从列表916选择一C-x处理器核心并且不进行任何其它的跳转(例如,在918,选择处于最低C状态的核心)。在一实施例中,OIRM可以通过运行C状态规则902来周期性地重新估计状况,以确保所选择的处理器核心仍然是用于执行的最佳处理器核心。
[0075] 因此,根据图9中示出的实施例的处理器核心选择可以包括以下的操作。第一,使用处理器核心列表908,在其上OI可以执行并应用C状态规则902来生成过滤的处理器核心列表910。使用PCU启发式规则904和平台电源906作为C状态规则的输入。在912,如果在过滤的处理器核心列表910中有处于C-x状态的任何处理器核心,那么在918,选择处于最低C-x状态的处理器核心作为要跳转到的下一处理器核心。如果没有处于C-x状态的处理器核心,那么在C-0处理器核心的列表914内,调用处理器核心跳转规则920(例如,执行循环跳转)。在一些实施例中,这会涉及在这些处理器核心上切换OIRM的活动/待机角色。
[0076] 图10说明了根据一实施例的用于处理从分配给OI的设备发起的中断、并将这些中断注入到OI分区的各种部件的框图。如图所示,硬件单元可以包括多个处理器核心1002和1004,每个分别具有LAPIC(本地高级可编程中断控制器)1006和1008。每个LAPIC与中断重映射单元1010(其接收外部中断1012)进行通信。
[0077] 中断重映射单元1010可以包括对于以下的支持:(a)向第二中断重映射表(IRT)1020注册OI IRT表项(IRTE);(b)注册OI设备过滤器1022(例如,对于每个PCI请求者ID具有
1比特-8KB);和/或(c)如以下讨论的对中断重映射逻辑的修改,例如,图11中所示的灰色块,其中图11说明了根据一实施例的与处理有关OI的中断相关联的操作的流程图。例如,在接收到中断1102之后,在1104,如果公布(posted)的中断不在中断TLB(转换后备缓冲区)中,那么在1106,它可以确定该中断是否被公布,并且如果公布的话,那么在1108,可以使用PCI请求者ID在设备过滤器1022中执行查找。如果不公布,那么在1109,对该中断进行处理。
如果在设备过滤器1022中设置有对应的比特,那么OI IRT 1110可以用于查找对应的标签,否则在1112,OS/VMM IRT可以用于进行查找。在操作1110和1112之后,在1114,可以公布针对中断描述符的向量。
[0078] 此外,在一实施例中,中断描述符可以具有两个项,所述项帮助中断重映射单元确定将中断公布到哪里:用于中断的APIC ID,用作通知中断的向量。此外,在一些实施例中,对于OI的要求之一是:对OI的中断传输不应当受到来自主OS的任何操作的影响。这意味着:修改了公布中断方法(其用于将中断描述符中的向量传送到本地APIC(其被编程到描述符)以传送到核心),以使得中断重映射单元能够使用新的微码事件通知来通知OIRM CPU微码。
更具体地说,在从中断重映射单元接收到微码事件通知时,由于OI分区在该时间可能并未在任何处理器核心上执行,OIRM可以并不立即将公布的中断注入到OI分区中。因此,OIRM将所接收的中断排队到下面描述的存储器结构(例如,OIPIC(OI可编程中断控制器))中,并且使用OI IDT(中断描述符表),使用标准的x86中断传送机制,每当OI分区被调度时,都将中断注入到OI分区中。
[0079] 图12说明了根据一实施例的与OIPIC模块进行通信的各种部件。如图所示,OIPIC模块1202从两个可能的源接收要传送到OIEE的向量:(1)来自分配给OIEE 1204的设备的中断(例如,由中断重映射单元来通知并且公布到OI中断缓冲区的);或者(2)针对OIEE计时器、OI间通信通知、功率管理事件等而由OIRM注入的中断(共同标记为1206)。
[0080] OIPIC模块1202可以设计三个寄存器,其用于对要传送到OIEE的向量进行排队:(1)OI IRR(中断请求寄存器)1208(例如,其中从内部或外部源到达的所有向量进入该256比特寄存器);(2)OI ISR(OI服务中寄存器)1208(例如,如果来自OI IRR的最高优先级向量比已经在OI ISR中的向量有更高的优先级,那么将其移入到OI ISR中-这可以是256比特寄存器,其跟踪当前正由OIEE所服务的中断向量-已经在OI ISR中的当前中断向量仍然在,例如这指示较高优先级中断打算了较低优先级中断);和/或(3)OI EOI(中断结束)1212(例如,其中OIEE ISR用信号来通知完成了对于当前标记在OI ISR中的最高优先级向量的处理)。
[0081] 在一些实施例中,当OI分区被调度(例如,由调度器1214)以在处理器核心上执行时,以下操作由OIPIC模块1202来执行:(1)如果在OI IRR中没有向量未决,那么不需要操作;(2)从OI IRR得到最高优先级向量并且将其与OI ISR中的最高向量进行比较(如果OI IRR向量比OI ISR向量低,那么不需要操作);(3)如果OIEE是可中断的,那么在OI ISR中设置对应于从OI IRR接收的最高向量的比特(并且在一实施例中,从OI IRR中清除该向量);和/或(4)返回在OI ISR中未决的最高向量作为要被注入到OIEE中的向量。响应于中断,OIEE中的中断控制器驱动程序使用向OIEOI寄存器1212的写入来发出完成信号。在接收到来自OIEE的OIEOI时,OIPIC 1202清除OI ISR 1210中对应于未决的最高优先级向量的比特。然后,它确定在下次恢复时是否还有可以注入到OIEE的任何其它向量。
[0082] 如参照图10-12所讨论的,提供了关于主机OS/VMM的非打扰技术,其并不对可由主机OS/VMM使用的中断向量进行限制。同样,这种实施例既不拦截来自主机OS/VMM的对于LAPIC/IOAPIC的访问,也不尝试虚拟化任何这些设备。这提供了一种将中断引导到不同分区的机制,与没有该功能的其它实现相比,该功能显著地更具有优势并且更具有可扩展性。
[0083] 在一些实施例中,为了在主机OS/VMM与OI分区之间提供存储器分隔,OIRM可以使用硬件范围寄存器的一个或多个比特来确定是否阻止主机OS/VMM生成的对于OI存储器分区的访问。同样,为了控制从OI分区对主机OS/VMM存储器分区的访问,OIRM可以在OI分区内创建页表(例如,扩展页表(EPT))。例如,上述的OI分区可以用于完成一些安全敏感工作,像预引导验证、媒体转码(media trans-coding)、电子商务等。当执行这种操作时,OI分区可以具有像密钥和密码这样的机密信息。继而,使用范围寄存器和DMA设备过滤器,阻止了对于OI存储器的基于软件的攻击,所述攻击使用基于主机OS/VMM处理器的访问或者使用DMA总线主控设备来偷取这些机密信息。
[0084] 在一些实施例中,可以提供两种类型的保护:(1)对静止数据的保护;或(2)对使用中的数据的保护。当数据处于易失性或非易失性存储器中时,保护静止数据要求该数据是加密的,以使得它对攻击者来说是没有价值的。为此,当OI需要对该数据进行操作时,它需要解密该数据,并且与此同时,它需要确保该数据的安全,以使得当OI对该数据进行操作时该数据不会被偷取。
[0085] 保护静止数据意味着可以使用像高级加密标准(AES)(256比特或其它版本;使用任何模式的密码,例如CBC(密码分组链接(Cipher BlockChaining))、CTR(计数器模式)等)等的加密算法来加密该数据。用于进行加密操作的密钥也需要被确保安全。在一实施例中,需要保护其机密信息的每个应用程序具有自身的用于加密其机密信息的密钥。OIRM可以使用核心或非核心中的处理器熔丝来提供blob服务以确保该密钥的安全。对于blob密钥操作,用户生成其希望用来确保其数据安全的密钥并且请求OIRM对该密钥进行blob操作。此外,下文将进一步讨论,一些实施例还可以帮助确保在处理过程中用户生成的密钥的安全。
[0086] 根据一实施例,以下的伪代码可以由用户使用来生成密钥blob:
[0087] 1.application_key_generation_function()
[0088] 2.{
[0089] 3.char*key_buffer=malloc(4096);
[0090] 4.generate_key(key_buffer);
[0091] 5.blob_key(key_buffer);
[0092] 6.}
[0093] 在上述伪代码的第4行中,应用程序在密钥缓冲区(key_buffer)中生成密钥,并且在第5行中,应用程序调用blob服务(例如,由OIRM提供的)来创建密钥blob。OIRM blob服务可以使用用于该blob服务的处理器密钥113来对密钥缓冲区中的密钥进行加密。因此,应用程序具有被绑定到平台的安全密钥,该应用程序可以使用该平台来保护其机密信息。应用程序不需要保留其在上述第4行生成的原始密钥。密钥blob是其今后对数据进行操作所需的全部。
[0094] 在一些实施例中,为了保护运行时的数据,该数据在系统存储器中可以从不处于明文状态。这可以通过使用封装内存储器111的一页来临时地存储OI机密信息来实现。在一实施例中,封装内存储器111允许该存储器的内容不会被使用总线分析器和“冻罐头(freeze can)”攻击来访问。换句话说,存储器111中存储的未加密信息对于处理器102-1的外部来说是不可用的。在一实施例中,OIRM向用户提供以下指令来支持安全存储器访问:(1)Load_Key_Page(加载密钥页)-将数据从存储缓冲区移动到安全存储器,并且对其进行解密以供应用程序使用;(2)Store_Key_Page(存储密钥页)-将数据从安全存储器移到存储缓冲区并且清空安全存储器。
[0095] 在一实施例中,Load_Key_Page操作采用两个输入:(a)用于对密钥页进行加密的、被进行了blob操作的密钥;(b)保持有已加密数据的缓冲区(称为密钥页)的物理地址。当Load_Key_Page操作被调用时,OIRM执行以下的操作:(1)将物理地址所指向的页的内容复制到封装内存储器111;(2)使用处理器熔丝密钥来对密钥blob进行解密;(3)使用已解密的密钥来对封装内存储器111中的数据进行解密;(4)更新OI的EPT从而将对于传送给该操作的物理地址的访问重定向到封装内存储器111;和/或(5)应用程序现在可以使用标准软件结构来访问机密信息。
[0096] 图13和14说明了根据一些实施例的与使用加载密钥相关联的操作的框图。在图13中,加载密钥将物理存储器(例如,加密的)转移到安全存储器,并通过使用请求者的密钥来解密数据。在图14中,可以重映射OI EPT来将物理存储器重定向到安全存储器。
[0097] 在一些实施例中,可以在任意时间点处仅加载单个密钥页。在没有对先前加载的页进行Store_Key_Page的情况下,尝试进行Load_Key_Page会产生失败。来自OIEE内核的密钥页管理可以依靠OI内核模块,其向应用程序提供加载/存储服务。该内核模块可以挂钩到OI内核调度器,以便被通知进程/任务切换,并且基于在OI中运行的应用程序,使用Load_Key_Page/Store_Key_Page来改变密钥页。
[0098] 在一实施例中,Store_Key_Page操作采用两个输入:(a)用于对密钥页进行加密的、被进行了blob操作的密钥;(b)用于存储已加密数据的缓冲区(称为密钥页)的物理地址。OIRM执行以下的操作:(1)使用处理器熔丝密钥来对密钥blob进行解密;(2)使用已解密的blob密钥来对封装内存储器111的内容进行加密;和/或(3)将封装内存储器111的内容复制到由应用程序传送的存储器页。
[0099] 图15和16说明了根据一些实施例的与使用存储密钥相关联的操作的框图。在图15中,存储密钥将安全存储器(例如,明文的)转移到物理存储器,并且通过使用请求者的密钥来加密数据。在图16中,OI EPT可以被重映射以取消物理存储器的重定向。
[0100] 在实施例中,以下伪代码可以用于上述讨论的Load_Key_Page和Store_Key_Page:
[0101]         Do_secret_work_example_function(uint64_t key_blob_PA,uint64_t[0102] secret_page_PA)
[0103]          {
[0104]             Char*secret_page_la=map_secret_page(secret_page_PA);
[0105]             Load_Key_Page(key_blob_PA,secret_page_PA);
[0106]             Do_secret_work(secret_page_la);
[0107]             Store_Key_Page(key_blob_PA,secret_page_PA);
[0108] }
[0109] 在上述代码中,“la”代表线性,“PA”代表物理地址。因此,一个实施例提供了用于处理OI中的安全敏感数据的防篡改存储器,例如通过使得OI存储器中的机密信息免于受到基于硬件的攻击(像冷引导)或基于软件的攻击。与没有该功能的实现相比,该功能显著地更具有优势和/或更具有可扩展性。
[0110] 在一些实施例中,为了在主机OS/VMM与OIEE之间提供存储器分隔,OIRM可以使用硬件范围寄存器(其阻止主机OS/VMM生成的对于OI存储器的访问)。同样,为了控制从OI分区到主机OS/VMM存储器的访问,OIRM可以在OI分区内创建页表(例如,扩展页表(EPT))。
[0111] 当系统暂停时(S3),系统存储器处于自刷新状态。但是,CPU断电,因此在存储器上没有活动的保护。因此,当系统处于S3状态时,攻击者能够修改存储器的内容,并且如果在恢复(S0)时没有验证存储器,那么这会导致OI上的代码注入攻击。用于避免这种代码注入攻击的一个技术是在进入到S3之前对存储器进行散列运算,并且当从S3恢复到S0时,对内容进行验证。但是,在一些实例中,该方法会有两个缺点:(1)由于要进行额外的工作以对存储器内容进行散列运算,它延长了从S0转变到S3所需的时间量;(2)由于要进行额外的工作以对存储器进行散列运算从而验证内容没有被篡改,它增加了从S3转变到S0所需的时间量。
[0112] 如先前所指示的,将系统转变到S3引起CPU断电并且使得存储器被置于自刷新模式。这时,由于范围寄存器和设备过滤器没有工作,因此在存储器上没有活动的保护。当系统返回到S0状态时,执行保留在S3上的存储器映像。但是,该存储器的完整性现在受到怀疑,并且可能会有注入到自刷新映像中的恶意代码,或者存储器被以某种形式不利地损害或篡改。为此,当从S3恢复时,一个实施例验证存储器的完整性。OIRM 124可以例如在允许其执行前,测量自刷新中的存储器映像的完整性。如上所述,用于该完整性验证的一个方法可以是:在S0到S3的转变时记录OI存储器的测量结果,并且在从S3到S0的转变时验证该映像。该方法会增加从S3恢复的等待时间,这是因为在继续S3恢复之前,OIRM将需要花费大量时间执行完整性验证。该方案的无意的副作用(其在具有2LM(二级存储器)的系统上变得更明显)是从NV(非易失性)存储器获取存储器页到DRAM页高速缓存以进行测量所需的开销。S3恢复路径必须被优化以最小化对于使用像“立即启动(instant-ON)”模式的延迟,在该模式中可能在很短的时间段(用于在将系统置回S3之前执行同步活动)内从S3恢复。
[0113] 在一实施例中,为了最小化恢复时间,针对OIEE映像,可以逐页地计算完整性校验值(ICV),以使得在从S3恢复时,可以最小化用于验证ICV的时间,这是因为现在可以在S3恢复之后在OIEE代码和数据被访问时逐页来进行验证。参照图17,示出了根据一实施例的与在S0与S3之间的安全转变相关联的操作的框图。可以将OIEE页1702的逐页完整性校验值记录到ICV阵列1704中(例如,通过OIRM 124)。ICV阵列的每个元素对应于OI存储器中的一个页并且具有以下信息:(1)完整性校验值(ICV)-当被配置时,该页的单向加密散列,这是使用像SHA(SHA256、SHA512)等的单向加密散列算法生成的;(2)ICV有效(图17中说明为“V”)-真/假;和/或(3)DMA(直接存储器访问)页(图17中说明为“D”)-真/假。OIRM还可以维护关于ICV阵列的SHA散列(例如,也在存储器114中)来验证ICV阵列的完整性。当执行从S0到S3状态的转变时,OIRM可以对ICV阵列的散列进行签名以使得它可以在从S3恢复时被验证。
[0114] 在一些实施例中,OIRM可以使用后台任务1706来(例如,周期性地)对OI页1702进行散列运算。在到OI的每个转变之前,可以调用后台任务1706来对存储器中的固定大小的一组页进行散列运算。例如,如果OI映像的大小为64MB,那么有16384个页需要进行完整性保护。后台任务可以以循环的方式运行完16K个页,并且在每次对16个页的执行散列运算。因此,后台任务需要被调用1K次以对分配给OIEE的所有16K个页执行散列运算。在一实施例中,对页进行散列运算所花的时间归于OI并且被从执行信用中减除。
[0115] 一旦注意到页的散列,OIRM可以跟踪对这些页的写入,以便检测需要重新进行散列运算的修改。OIRM可以使用OI EPT来执行写跟踪。一旦一个页被进行了散列运算,并且在ICV阵列1704内注意到有散列,它就被在EPT内标记为只读并且ICV在ICV阵列中被标记为有效。从OIEE向该页进行写入会引起EPT故障,其导致OIRM将该页ICV标记为无效并且再次使得该页可被写入。当后台散列任务再次开始该页时,现在可以对该页重新进行散列运算,并且在注意到有散列之后,它将被标记为只读。此外,使用EPT故障无法跟踪使用DMA操作对页的写入。为了跟踪对DMA页的写入,OIRM可以依赖于OIEE内核来在向设备提交用于DMA的页之前通知OIRM。OIRM注意到ICV阵列中作为DMA页的这些页,并且并不在这些页上执行作为其后台任务的一部分的任何ICV校验。
[0116] 对于S0到S3的转变,如果该转变是S3转变,那么OIRM可以扫描整个ICV页阵列,并且注意到具有无效ICV记录的页以及DMA页的ICV值。对于标记为DMA页的那些页,除了记录它们的散列之外,OIRM还可以清除它们的作为DMA页的状态。然后,OIRM对ICV阵列自身执行散列运算。可以使用从封装中的处理器密钥113导出的OIRM ICV签名密钥来对ICV阵列的散列进行签名。ICV阵列的签名后的散列可以留在系统存储器中,因为对它的篡改可以被OIRM检测到。
[0117] 对于S3恢复,BIOS(基本IO系统)可以通知OIRM来恢复OI映像。OIRM可以创建用于OI的容器,然后确定在OI存储器中是否有有效的ICV阵列。在一实施例中,通过验证在ICV阵列的散列上的签名并通过将ICV阵列的散列与在S0到S3的转变时存储的值进行比对,来确定ICV阵列的有效性。如果ICV阵列完整性不是完整的,那么OIRM可以继续OI初始化,作为正常复位路径(例如,丢弃了存储器中的映像并且执行新加载代码加载)。如果ICV阵列的完整性没有受到损害,那么OIRM可以在OI EPT中将所有OIEE页标记为未出现,并且将控制转移到OIEE。当OIEE开始执行时,代码和数据页访问生成发往OIRM的EPT故障。如果在ICV阵列中有针对该页的有效ICV,那么OIRM对故障页计算其ICV,并且将其与ICV阵列中的ICV进行匹配,以验证该页的完整性。然后,该页可以被映射到OI EPT作为只读页(例如,以跟踪该页的改变)。因此,与例如当前在管理程序中所进行的操作相比,使用OIRM和处理器生成的EPT的增量散列是一个关键的不同。此外,一实施例增加了非常重要的机制,其用于当摆脱自刷新时,高效地验证OI存储器的完整性。与没有该功能的其它实现相比,该功能显著地更具有优势并且更具有可扩展性。
[0118] 图18说明了根据本发明的一实施例的计算系统1800的框图。计算系统1800可以包括一个或多个中央处理单元(CPU)1802或处理器,其经由互连网络(或总线)1804进行通信。处理器1802可以包括通用处理器、网络处理器(其处理计算机网络1803上传送的数据),或者其它类型的处理器(包括精简指令集计算机(RISC)处理器或复杂指令集计算机(CISC))。
此外,处理器1802可以具有单或多核心设计。具有多核心设计的处理器1802可以将不同类型的处理器核心集成到同一集成电路(IC)管芯上。此外,具有多核心设计的处理器1802可以被实现为对称或非对称的多个处理器。在一实施例中,一个或多个处理器1802可以与图1的处理器102相同或相似。例如,一个或多个处理器1802可以包括高速缓存、存储设备和/或参照图1-17所讨论的逻辑(包括例如OIRM 124)中的一个或多个。此外,参照图1-17所讨论的操作可以由系统1800中的一个或多个部件来执行。
[0119] 芯片组1806还可以与互连网络1804进行通信。芯片组1806可以包括存储器控制中枢(MCH)1808。MCH 1808可以包括存储器控制器1810,其与存储器1812(其可以与图1的存储器114相同或相似)进行通信。存储器1812可以存储数据,包括指令序列,其可以由CPU 1802、或者包括在计算系统1800中包括的任意其它设备来执行。在本发明的一个实施例中,存储器1812可以包括一个或多个易失性存储(或存储器)设备,例如随机存取存储器(RAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)或其它类型的存储设备。还可以非易失性存储器,例如硬盘。额外的设备可以经由互连网络1804来进行通信,例如,多个CPU和/或多个系统存储器。
[0120] MCH 1808还可以包括图形接口1814,其与显示设备1816进行通信。在本发明的一个实施例中,图形接口1814可以经由加速图形端口(AGP)与显示设备1816进行通信。在本发明的一实施例中,显示器1816(例如平板显示器)可以通过例如信号转换器来与图形接口1814进行通信,其中所述信号转换器将存储设备(例如,视频存储器或系统存储器)中存储的图像的数字表示转换为由显示器1816解释并显示的显示信号。显示设备所产生的显示信号在由显示器1816解释并随后在其上显示之前,可以经过各种控制设备。
[0121] 中枢接口1818可以允许MCH 1808与输入/输出控制中枢(ICH)1820进行通信。ICH 1820可以向与计算系统1800进行通信的I/O设备提供接口。ICH 1820可以通过外围设备桥(或控制器)1824(例如,外围部件互连(PCI)桥、通用串行总线(USB)控制器、或其它类型的外围设备桥或控制器)来与总线1822进行通信。桥1824可以提供在CPU 1802与外围设备之间的数据路径。可以使用其它类型的拓扑。此外,多个总线可以例如通过多个桥或控制器与ICH 1820进行通信。此外,在本发明的各种实施例中,与ICH 1820进行通信的其它外围设备可以包括集成驱动电子(IDE)或小型计算机系统接口(SCSI)硬盘驱动器、USB端口、键盘鼠标、并口、串口、软盘驱动器、数字输出支持(例如,数字视频接口(DVI))、或其它设备。
[0122] 总线1822可以与音频设备1826、一个或多个盘驱动器1828和网络接口设备1830(其与计算机网络1803进行通信)进行通信。其它设备可以经由总线1822进行通信。此外,在本发明的一些实施例中,各种部件(例如,网络接口设备1830)可以与MCH 1808进行通信。此外,处理器1802和图18中示出的其它部件(包括MCH 1808、MCH中的一个或多个部件等,但是并不限于此)可以被组合以形成单个芯片。此外,在本发明的其它实施例中,图形加速器可以被包括在MCH 1808内。
[0123] 此外,计算系统1800可以包括易失性和/或非易失性存储器(或存储设备)。例如,非易失性存储器可以包括以下中的一个或多个:只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电EPROM(EEPROM)、盘驱动器(例如,1828)、软盘、光盘ROM(CD-ROM)、数字多用盘(DVD)、闪速存储器、磁光盘、或能够存储电子数据(例如,包括指令)的其它类型的非易失性机器可读介质。
[0124] 图19说明了根据本发明的一实施例的以点对点(PtP)结构布置的计算系统1900。特别地,图19示出了由多个点对点接口将处理器、存储器和输入/输出设备进行互连的系统。参照图1-18所讨论的操作可以由系统1900的一个或多个部件来执行。
[0125] 如图19所示,系统1900可以包括多个处理器,为了清楚起见,仅示出了其中的两个,即处理器1902和1904。处理器1902和1904每个都可以包括本地存储器控制中枢(MCH)1906和1908以允许与存储器1910和1912进行通信。存储器1910和/或1912可以存储各种数据,例如参照图18的存储器1812所讨论的那些。
[0126] 在一实施例中,处理器1902和1904可以是参照图18所讨论的处理器1802中的一个,例如包括参照图1-18所讨论的高速缓存中的一个或多个。处理器1902和1904可以分别地使用PtP接口电路1916和1918经由点对点(PtP)接口1914来交换数据。此外,处理器1902和1904每个都可以使用点对点接口电路1926、1928、1930和1932经由分别的PtP接口1922和1924与芯片组1920交换数据。芯片组1920还可以经由图形接口1936(例如,使用PtP接口电路1937)与图形电路1934交换数据。
[0127] 可以在处理器1902和1904内提供本发明的至少一个实施例。例如,图1的核心106中的一个或多个可以位于处理器1902和1904内。此外,处理器1902和1904可以包括高速缓存、存储设备和/或参照图1-18所讨论的逻辑中的一个或多个。例如,可以在处理器1902/1904中提供OIRM124;但是,也可以在例如参照图1-18所讨论的其它位置提供OIRM(例如,在MCH 1906/1908与处理器1902/1904之间,在芯片组1920中,等等)。但是,本发明的其它实施例也可以存在于图19的系统1900内的其它电路、逻辑单元或设备中。此外,本发明的其它实施例可以被分布在遍及图19中示出的多个电路、逻辑单元或设备中。
[0128] 芯片组1920可以使用PtP接口电路1941与总线1940进行通信。总线1940可以与一个或多个设备(例如,总线桥1942和I/O设备1943)进行通信。总线桥1942可以经由总线1944与其它设备进行通信,所述其它设备例如键盘/鼠标1945、通信设备1946(例如,调制解调器、网络接口设备或可以与计算机网络1803进行通信的其它通信设备)、音频I/O设备1947、和/或数据存储设备1948。数据存储设备1948可以存储代码1949,其可以由处理器1902和/或1904来执行。
[0129] 在本发明的各种实施例中,本文讨论的操作(例如参照图1-19)可以被实现为硬件(例如,逻辑电路)、软件、固件、或其组合,可以将其作为计算机程序产品来提供,例如包括机器可读介质或计算机可读介质,其上存储有指令(或软件过程),所述指令用于对计算机编程以执行本文讨论的处理。机器可读介质可以包括存储设备,例如本文所讨论的那些设备。此外,这种有形的计算机可读介质可以作为计算机程序产品来下载,其中,可以从远程计算机(例如,服务器)经由通信链路(例如,总线、调制解调器或网络连接)通过以传播介质中的数据信号的方式将程序传输到请求方计算机(例如,客户端)。
[0130] 在说明书中提及的“一个实施例”或“一实施例”或“一些实施例”表示结合所述实施例而描述的特定的特征、结构和/或特性可以被包括在至少一个实现中。在说明书中各处出现的短语“在一个实施例中”可以或可以不都指代同一个实施例。
[0131] 此外,在说明书和权利要求书中,可以使用术语“耦合”与“连接”以及它们的派生词。在本发明的一些实施例中,“连接”可以用于指示两个或多个元件彼此直接物理或电接触。“耦合”可以指两个或多个元件直接物理或者电接触。但是,“耦合”还可以指两个或多个元件可以并不是彼此直接接触,但仍可以彼此协作或交互。
[0132] 因此,尽管已经以特定于结构特征和/或方法操作的语言描述了本发明的实施例,但是应当理解,所要求保护的主题可以并不被限于所描述的特定特征或操作。公开了特定特征和操作,只是作为实现所要求保护的主题的示例形式。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈