发明内容
提供该概括以便以简化形式来介绍在下面的具体实施方式中进一步描述的构思的精华。该概括并不是旨在标识要求保护的主题的关键特征或者必要特征,也不是旨在用作帮助确定所要求保护的主题的范围。
描述了多线程处理器中的全局寄存器保护。在一个实施例中,通过以下方式来保护多线程处理器中的全局资源:在允许一个线程向全局资源进行写入之前,执行检查来确定该线程是否有权向特定的全局资源进行写入。该检查涉及访问多线程处理器内的一个或多个局部控制寄存器或全局控制字段,并且在一个例子中,对与多线程处理器中的每个其它线程相关联的局部寄存器进行访问并检查,以查看它是否包含特定的全局资源的标识符。只有当所被访问的局部资源中没有一个包含这样的标识符时,才发布指令,并允许线程向全局资源进行写入。否则,指令被阻止,并且可以产生异常以向发布指令的程序警告写失败。
第一方面提供用于管理多线程处理器内的全局资源的方法,多线程处理器包括多个线程,且该方法包括:从线程接收向全局资源进行写入的指令;使用硬件逻辑检查多线程处理器中的一个或多个寄存器以确定所述线程是否有权向全局资源进行写入;以及响应于确定所述线程有权向全局资源进行写入,允许发布所述指令。
该方法还可以包括:响应于确定所述线程无权向全局资源进行写入,阻止发布所述指令并产生异常。
检查多线程处理器中的一个或多个寄存器以确定所述线程是否有权向全局资源进行写入可以包括:检查多线程处理器中的一个或多个局部控制寄存器以确定所述线程是否有权向全局资源进行写入,其中每个局部控制寄存器与多个线程中的一个相关联。
检查多线程处理器中的一个或多个局部控制寄存器以确定所述线程是否有权向全局资源进行写入可以包括:访问与多线程处理器中的每个其它线程相关联的局部控制寄存器;以及确定是否有任何被访问的局部控制寄存器标识了全局资源,其中如果被访问的局部控制寄存器中没有一个标识全局资源,则所述线程有权向全局资源进行写入。
检查多线程处理器中的一个或多个局部控制寄存器以确定所述线程是否有权向全局资源进行写可以包括:访问与所述线程相关联的局部控制寄存器;以及确定被访问的局部控制寄存器是否标识了全局资源,其中如果被访问的局部控制寄存器标识了全局资源,则所述线程有权向全局资源进行写入。
该方法还可以包括:从一线程接收将标识全局资源的数据写入与所述线程相关联的局部控制寄存器的指令;访问与多线程处理器中的每个其它线程相关联的局部控制寄存器;确定是否有任何被访问的局部控制寄存器包括标识全局资源的数据;以及响应于确定被访问的局部控制寄存器中没有一个包括标识全局资源的数据,允许发布所述指令。
该方法还可以包括:响应于确定被访问的局部控制寄存器中的一个包括标识全局资源的数据,阻止发布所述指令并产生异常。
检查多线程处理器中的一个或多个寄存器以确定所述线程是否有权向全局资源进行写入可以包括:检查多线程处理器中的全局寄存器中的全局控制字段以确定所述线程是否有权向全局资源进行写入,所述全局控制字段与全局资源相关联。
该方法还可以包括:从一线程接收从全局资源进行读取的指令;检查多线程处理器中的一个或多个寄存器以确定所述线程是否有权对全局资源进行读取;以及响应于确定所述线程有权对全局资源进行读取,允许发布所述指令。
该方法还可以包括:响应于确定所述线程无权对全局资源进行读取,阻止发布所述指令并产生异常。
检查多线程处理器中的一个或多个寄存器以确定所述线程是否有权对全局资源进行读取可以包括:检查多线程处理器中的一个或多个局部控制寄存器以确定所述线程是否有权对全局资源进行读取,其中每个局部控制寄存器与多个线程中的一个相关联。
检查多线程处理器中的一个或多个局部控制寄存器以确定所述线程是否有权对全局资源进行读取可以包括:访问与多线程处理器中的每个其它线程相关联的局部控制寄存器;以及确定是否有任何被访问的局部控制寄存器标识了全局资源,其中如果被访问的局部控制寄存器中没有一个标识全局资源,则所述线程有权对全局资源进行读取。
检查多线程处理器中的一个或多个寄存器以确定所述线程是否有权对全局资源进行读取可以包括:检查与多线程处理器中的全局资源相关联的全局控制字段以确定所述线程是否有权对全局资源进行读取。
来自一个线程的对全局资源进行写入的指令可以包括来自一个线程的将替代栈指针写入全局资源的指令。
全局资源可以包括全局寄存器。
第二方面提供了一种多线程处理器,其包括:多个线程;至少一个全局资源;以及硬件逻辑,所述硬件逻辑用于:从所述多个线程中的一个接收对全局资源进行写入的指令;检查所述多线程处理器中的一个或多个寄存器以确定所述线程是否有权对所述全局资源进行写入;以及响应于确定所述线程有权对所述全局资源进行写入,允许所述指令发出。
硬件逻辑还可以用于:响应于确定所述线程无权对全局资源进行写入,阻止所述指令发出,并产生异常。
多线程处理器还可以包括多个局部控制寄存器,每个局部控制寄存器与所述多个线程中的一个相关联,并且其中,硬件逻辑用于通过检查所述局部控制寄存器中的一个或多个来确定所述线程是否有权对全局资源进行写。
硬件逻辑可以用于通过以下方式来检查所述局部控制寄存器中的一个或多个以确定所述线程是否有权对全局资源进行写:访问与多个线程中的每个其它线程相关联的局部控制寄存器;以及确定是否有任何被访问的局部控制寄存器标识了全局资源,其中如果被访问的局部控制寄存器中没有一个标识全局资源,则所述线程有权对全局资源进行写入。
硬件逻辑可以用于通过以下方式来检查局部控制寄存器中的一个或多个以确定所述线程是否有权对全局资源进行写入:访问与所述线程相关联的局部控制寄存器;以及确定被访问的局部控制寄存器是否标识了全局资源,其中如果被访问的局部控制寄存器标识了全局资源,则所述线程有权对全局资源进行写入。
硬件逻辑还可以用于:从一线程接收将标识全局资源的数据写入与所述线程相关联的局部控制寄存器的指令;访问与多个线程中的每个其它线程相关联的局部控制寄存器;确定是否有任何被访问的局部控制寄存器包括标识全局资源的数据;以及响应于确定被访问的局部控制寄存器中没有一个包括标识全局资源的数据,允许所述指令发出。
硬件逻辑还可以用于:从一线程接收从全局资源进行读取的指令;检查局部控制寄存器中的一个或多个以确定所述线程是否有权对全局资源进行读取;以及响应于确定所述线程有权对全局资源进行读取,允许所述指令发出。
硬件逻辑可以用于通过以下方式来检查局部控制寄存器中的一个或多个以确定所述线程是否有权对全局资源进行读取:访问与多个线程中的每个其它线程相关联的局部控制寄存器;以及确定是否有任何被访问的局部控制寄存器标识了全局资源,其中如果被访问的局部控制寄存器中没有一个标识全局资源,则所述线程有权对全局资源进行读取。
每个局部控制寄存器可以用于存储标识多线程处理器中的一个或多个全局资源的数据。
每个局部控制寄存器可以包括一个或多个控制字段,并且每个控制字段用于存储标识多线程处理器中的一个或多个全局资源的数据。
每个控制字段可以与预定的任务相关联。
多线程处理器还可以包括多组局部寄存器,每组局部寄存器与多个线程中的一个相关联,并且其中,与一个线程相关联的局部控制寄存器存储在与该线程相关联的该组局部寄存器内。
多线程处理器还可以包括包含全局寄存器,全局寄存器包括多个全局控制字段,每个全局资源具有相关联的全局控制字段,并且其中,硬件逻辑用于通过检查与全局资源相关联的全局寄存器中的全局控制字段来确定线程是否有权对全局资源进行写入。
来自一个线程的对全局资源进行写入的指令可以包括来自一个线程的将替代栈指针写入全局资源的指令。
全局资源可以包括全局寄存器。
多线程处理器还可以包括解码级,并且其中,硬件逻辑形成解码级的一部分。
第三方面提供了基本上如参考附图中的图1和4中的任一个所述的多线程处理器。
第四方面提供了基本上如参考附图中的图2、3和5中的任一个所述的管理多线程处理器内的全局资源的方法。
本申请所描述的方法可以由机器可读形式的软件执行,其中该软件以例如计算机程序的形式存储在有形存储介质上,计算机程序包括计算机程序代码模块,当程序运行在计算机上时并且在计算机程序可以体现在计算机可读介质上的情况下,所述计算机程序代码模块用于执行本文描述的任意方法的所有步骤。有形(或非临时性)存储介质的例子包括磁盘、指状驱动器、存储卡等等,其不包括传播的信号。软件可适合于在并行处理器或者串行处理器上执行,使得这些方法步骤可以按照任何适当的顺序执行,或可以同时地执行。
本申请承认固件和软件可以是有价值的可单独交易的商品。旨在涵盖在“哑”或标准硬件上运行或对“哑”或标准硬件进行控制以执行期望功能的软件。还旨在涵盖“描述”或定义硬件的配置的软件,例如HDL(硬件描述语言)软件,如用于设计硅芯片,或用于配置通用编程芯片,以执行期望功能。
优选的特征可以适当地组合,这对于技术人员将是显而易见的,并且可以与本发明的任意方面进行组合。
具体实施方式
下面仅仅是通过例子的方式来描述本发明的实施例。这些例子代表了申请人当前已知的将本发明付诸于实践的最佳方式,虽然这些最佳方式并不是能够实现本发明的仅有的方式。描述给出了例子的功能以及用于构造和操作例子的步骤的序列。然而,可以通过不同的例子来实现相同的或等同的功能和序列。
图1示出了包括多组局部寄存器101-104的多线程处理器100的示意图,每组局部寄存器(其可以例如包括4或8个局部寄存器)与线程105-108中的一个相关联。多线程处理器100还包括多个全局寄存器110(例如,8或16个全局寄存器)。术语“全局寄存器”在本文用于表示在可以由任何线程以及由处理器100所位于的系统中的任何代码段使用的寄存器池中的寄存器。这些全局寄存器是处理器内的全局资源的例子(其中“全局资源”是在线程之间共享的任何资源),并且全局寄存器可以被线程用于特定的目的(例如,作为额外的局部寄存器),例如以存储替代栈指针或操作系统的核心状态。
因为所有线程都可以访问全局资源,所以不同的线程可以访问同一全局寄存器并对同一全局寄存器进行写入,而没有任何硬件限制。在一个线程为了特定的目的而使用特定的全局资源的场合,另一线程对存储在该全局资源中的数据进行的任何修改或破坏可能使处理器或系统不正确地工作。在一个例子中,全局寄存器可由内核(例如,Linux内核)使用来存储将由中断处理程序使用的替代栈指针(例如,单独地分配的中断栈指针)。如果该全局寄存器被另一线程修改或更新,则中断处理程序将失去对其堆栈的预期访问,并且不正确地进行工作。
下面的描述对用于保护全局资源(例如全局寄存器)使得它们只能被当前控制该资源的特定线程进行写入的方法和硬件进行了描述。在一些例子中,也可以实现读保护,并且这也在下面被描述。保护资源的行动,不管它是免受写访问的保护还是免受其它线程的读写访问的保护,都可以被描述为一个线程控制特定资源。下面描述的方法使线程能够控制全局资源,使得资源有效地成为局部资源,这是因为它不能被另一线程修改、破坏或更新。这提供了资源分配的灵活性(例如,在一段时间内一个线程需要比其它线程更多的资源的情况下),并且此外,在全局资源是用于存储替代栈指针的全局寄存器的情况下,使得替代栈指针内的值能够在整个程序中持续。下面描述的方法实现检查(例如,在发出对全局资源的写指令之前),以便被保护的全局资源不能被另一任意线程重写。
图2示出了多线程处理器的操作方法的三个示例性流程图21-23。第一方法21(其为阻止操作全局资源的方法)可独立地或结合其它方法22-23中的任一个或两个来使用,其它方法22-23示出了保护全局资源(或控制全局资源)的方法(方法22)和阻止对全局资源的读访问的方法(方法23)。
如在图2中的第一方法21中所示的,当从一线程接收到将对全局资源进行写入的指令(块202)时,(在块204中)执行检查以确定特定的线程是否有权对在所述指令中标识的特定全局资源进行写入(即,是否允许特定的线程对所标识的全局资源进行写入)。如果(在块204中)检查识别出线程确实有权进行写入(块204中为“是”),则准许所述指令发出(块206),而如果该线程无权进行写入(块204中为“否”),则产生异常(块208)以向程序警告写是不成功的。
(块204中的)检查步骤可以包括访问一个或多个局部控制寄存器以确定特定的线程是否有权对所标识的特定局部资源(例如对特定的全局寄存器)进行写入。在这样的例子中,每个线程具有局部控制寄存器112,其可以是线程的相关联一组局部寄存器101-104的一部分,如图1中所示。特定线程(例如,线程0)的局部控制寄存器112用于存储该线程已经保护的任何全局资源的细节。如上所述,在线程已经保护了全局资源的场合,它可以被描述为具有对特定的全局资源的控制,其中该控制扩展到阻止其它线程对该全局资源进行写入。局部控制寄存器可以用任何方式来标识全局资源,并且例子包括但不限于线程控制的那些全局资源的标识符(ID)列表或使用全局资源掩码(或全局寄存器掩码)。在使用掩码的场合,该掩码标识线程声称控制的所有那些资源,而不是列出每个资源的单独ID。
存在可以对多线程处理器特别是全局资源进行配置的多种不同的方式,并且这影响在发出写入指令之前使用局部控制寄存器112来实现检查步骤(在块204中)的方式。在第一例子中,多线程处理器可以被配置成具有所有线程都有权对全局资源进行读和写的默认设置,使得线程可以对全局资源进行写入,除非多线程处理器中的另一线程已经声称了对该资源的控制。在这种情况下,如在图3中的第一示例性流程31中所示的,检查步骤(块204)涉及访问多线程处理器中的每个其它线程的局部控制寄存器(块310),并使用被访问的局部控制寄存器来确定任何其它线程是否声称了对特定的全局资源的控制(块312)。只有在没有其它线程声称对特定的全局资源的控制时,即,该全局资源没有在被访问的局部控制寄存器中的任一个中被标识(块312中为“否”),才准许写指令发出(块206)。如上所述,在全局资源已经处于另一线程的控制之下(即,全局资源在被访问的局部控制寄存器中的一个中被标识)的场合,不准许写指令发出,并且产生异常(块208)。
在第二例子中,多线程处理器可以被配置成使得默认设置替代地是全局资源对于所有线程是只读的,并且全局资源只能被已经声称对特定的全局资源的控制的线程进行写入。如可从图3中的第二示例性流程图32看到的,这种情况只需要访问一个局部控制寄存器(块320),即,试图执行写入的线程的局部控制寄存器,这是因为除非在该线程的局部控制寄存器中生成了写入指令中所标识的特定全局资源(如在块322中确定的),否则该线程不能对该全局资源进行写入。因此,在局部控制寄存器不标识特定的全局资源(块322中为“否”)的场合,不准许所述指令发出,并且产生异常(块208)。可替代地,在局部控制寄存器确实标识特定的全局资源(块322中为“是”)的场合,准许所述指令发出(块206)。
在图3中所示和上面描述的任一例子中,通过使用局部控制寄存器112来提供对全局资源的保护,其中,特定线程的局部控制寄存器标识了该线程声称控制的全局资源(即,使得该线程可以对该全局资源进行写入,而其它线程不能对该全局资源进行写入)。为了使线程能够保护全局资源,提供一种机制,通过该机制一个线程可以对其自己的局部控制寄存器进行写入(例如,如在图2中的第二流程图22中所示的)。如上所述,所写的数据可以包括全局资源的ID或可以是对全局资源掩码的更新的形式。
在一些例子中,可以准许每个线程对其自己的局部控制寄存器进行写入,而不执行任何检查(即,独立于多线程处理器中的另一线程的任何活动)。然而,如果没有执行检查,则(在一些实现中)两个(或多个)线程可能同时声称对相同的全局资源(例如相同的全局寄存器)的控制,并且这可能导致没有一个线程能够对全局资源进行写入(如果使用图3中的方法31的话),或者两个线程都能够对全局资源进行写入(如果使用图3中的方法32的话)。因此,可以在一个线程能够对其局部控制寄存器进行写入之前执行检查,如在图2中的第二流程图22中所示的。然而,在图2中的第一流程图21中所示的方法可以独立于图2所示和下面描述的任一其它方法(在流程图22-23中)而实现。
图2中的第二流程图22示出了保护全局资源的方法。当从一个线程接收到保护全局资源的指令(块222)时,(在块224中)执行检查以确定全局资源当前是否被另一线程保护。以与图3中的块310和312类似的方式,这些检查包括访问多线程处理器中的每个其它线程的局部控制寄存器,并接着(在块222中)确定所访问的局部控制寄存器中的任一个是否包含声称在所接收的指令中标识的特定全局资源的条目。如果没有其它线程保护全局资源(块224中为“否”),则允许该线程对局部控制寄存器进行写入并控制全局资源(块226)。否则,如果另一线程已经控制了全局资源(即,已访问的局部控制寄存器中的一个包含特定的全局资源的标识符),则产生异常(块228),并且阻止该线程生成对特定的全局资源的控制。
在一些例子中,一个线程可能能够控制任意数量的全局资源,多达并且包括控制所有的全局资源(例如,所有的全局寄存器110)。然而,在其它例子中,可能对任一个线程能够控制的全局资源的数量存在限制,并且该限制可以例如通过约束局部控制寄存器的大小来实现。在这样的例子中,局部控制寄存器可以包括一个或多个控制字段,每个控制字段保留一个或多个全局资源。通过限制局部控制寄存器中的控制字段的数量,来限制一个线程能够保护的全局资源的数量。在应用限制的场合,该限制对于多线程处理器中的全部线程可以是相同的,或者不同的线程可以具有不同的限制(例如,如果一个线程通常具有更多的能力,例如DSP和FPU,则它可被给出较高的限制以允许它具有较大的被保护寄存器的最大数量)。在一些例子中,可以针对每个任务来实现该限制,使得针对每个特定任务或目的,一个线程可以保护最大数量的全局资源。在一个例子中,可以为每个特定的任务提供专用控制字段,其中针对该特定任务声称了全局寄存器(例如,一个任务可以是中断栈指针,而另一任务可以是额外的局部寄存器),且控制字段的大小(即,它保留的全局寄存器的数量)可以取决于与它相关的特定任务,使得不同的任务可以具有不同大小的控制字段。例如,在被保护的全局资源用于存储栈指针的目的的场合,只需要一个全局寄存器,所以局部控制字段可以包括单个控制字段,并且该单个控制字段随后可以保护一对全局寄存器,这是因为在处理器内,所涉及的寄存器是成对组织的。在其它例子中,可能有不同数量的控制字段和/或控制字段可以保护不同数量的全局寄存器。
将特定的全局资源分配给特定的线程可以是静态的,或者可以随着时间而改变(即,它可以是动态的)。在可被声称的全局资源的数量被限制(例如通过使用受约束数量的控制字段)的场合,方法可以自动的导致线程废除对全局资源的控制。例如,在局部控制寄存器中提供单个控制字段并且这个控制字段标识单个全局寄存器的场合,一个线程可以保护第一全局寄存器,并且接着从使用第一全局寄存器切换到使用第二全局寄存器以用于相同的目的。在保护第二全局寄存器中,在局部控制寄存器中将重写第一全局寄存器的细节,并且将不再对该第一全局寄存器施加任何保护。另一线程随后可能能够对该第一全局寄存器进行写入(这取决于在多线程处理器中使用的默认访问状态),并且另一线程能够声称对第一全局寄存器的控制。
在一些例子中,例如在不存在对全局资源的控制的自动废除的场合,可以存在一种显式机制来使线程能够从其局部控制寄存器删除条目。这样的机制并不需要在允许删除局部控制寄存器中的条目之前进行任何检查,这是因为条目的删除并没有不利地影响任何其它线程的操作。
上面的描述涉及线程对全局资源进行控制,使得该线程可以对该全局资源进行写入而其它线程不能,并且随后该全局资源被描述为受到保护(例如,免受破坏、重写、修改等)。在所述方法的扩展中,一个线程可以保护全局资源不被读以及写,如在图2中的第三示例性流程图23中所示的。例如在线程希望将秘密(例如RSA私有密钥)存储在全局寄存器中的场合,这可能是有用的。在这样的实现中,局部控制寄存器中的标识特定全局资源的条目可以阻止其它线程从该资源进行读取或向该资源进行写入,或可替换地,可以提供单独的局部控制寄存器或局部控制寄存器内的单独的控制字段,以用于控制读访问和写访问。如上所述,在图2中的第一示例性流程图21中所示的方法可以独立地或结合图2中所示的其它方法中的任一个或两个(在示例性流程图22-23中)来使用。
使用图2中的第二流程图22(上面描述的),一个线程可以保护全局资源免受读取。再次地,如果不执行检查(省略块224),则多于一个的线程可以保护全局资源不被读取,这导致所有线程都不能对特定的全局资源进行读取。
图2中的第三流程图23示出了实现全局资源的读保护的方法。在接收到来一个自线程的从全局资源进行读取的指令(块232)时,执行检查,该检查确定该线程是否有权对该读取指令中所标识的全局资源进行读取(块234),并且该检查步骤可以使用与上面参考图3所描述的机制类似的机制,并且可以取决于全局资源在多线程处理器内被配置的方式。例如,在线程默认地有权对所有全局资源进行读取的场合,该检查可以包括访问所有其它线程的局部控制寄存器以及检查这些局部控制寄存器中没有一个记录了另一线程已经保护了对特定全局资源的读访问。可替换,在默认地所有全局寄存器都是受到读和写保护的场合,(块234中的)检查包括检查希望对全局资源进行读取的特定线程的局部控制寄存器以确定该线程是否声称了对全局资源的控制。如果该检查确认该线程确实有权进行读取(块234中为“是”),则允许读指令发出(块236),否则产生异常(例如,一般的保护异常)(块238)。
以这种方式使用读保护使处理器流水线中的特殊指令能够被赋予对所分配的全局寄存器中的秘密密钥的访问,并且密钥随后可以被所述特殊指令使用以执行秘密功能。
虽然可替代地可以将秘密存储在局部寄存器中,而不是全局资源中,但是全局资源(例如,全局寄存器)的使用增加了安全性并减小了复杂性,这是因为全局寄存器可由硬件直接访问,并且因此不需要将秘密从全局寄存器拷贝到另一位置并接着在新位置上保护它,以便秘密可被使用。
在使用这种读保护的场合,每当读访问保护被释放/移除时,还可以对特定的全局寄存器状态自动重置,所以密钥是完全安全的(这与通常不被重置的常规寄存器不同)。
当指令不能被发出时,上面描述的图2和3中(以及也在下面描述的图5中)的示例性流程图产生异常(在块208、228和238中)。将认识到,在关于这些方法的变化中,可以不产生异常,并且在一些例子中,可以阻止指令发出。不管所使用的实现如何,在所有情况下,都阻止指令读取/写入真实的寄存器值。异常的使用允许发出指令的程序知道写/读是不成功的。
在上面描述的方法的示例性应用中,全局资源是全局寄存器,并且这种全局寄存器用于存储中断系统的替代栈指针。为了保护将用作替代栈指针的全局寄存器不被重写,线程将全局寄存器的索引(或ID)号写到其相关联的局部控制寄存器中(在本例中,实现了写保护而没有实现读保护)。如果任何其它线程随后试图对这个全局寄存器进行写入(例如,以将替代栈指针存储在这个全局寄存器中),则在发出写指令之前执行的检查将失败,并且此时将出现异常,指示特定的全局寄存器处于另一线程的保护之下。用硬件自动地处理该替代栈指针的使用(即,在进入底层中断出入序列时,将替代栈指针的值拷贝到实际栈指针中)。
在这样的示例性应用中,指令可能并不知道使用哪个寄存器来存储替代栈指针,并且因而可以访问与执行该指令的线程相关联的局部控制寄存器(和相关的控制字段,其中存在用于多个特定目的的控制字段),以识别替代栈指针存储在哪个全局寄存器中。在这被实现的场合,每个线程可以运行相同的代码(即,相同的指令列表),并且线程的局部控制寄存器可以用于标识特定线程的替代栈指针的特定位置。
上面描述的方法可以在运行时之前或在运行时实现。在一个例子中,给哪些线程分配哪些寄存器号可以在运行时之前预先指定,并且随后可以在引导/加载期间,由初始完全有权经由外部或内部路径访问所有线程控制寄存器的程序来设置每个线程的所分配的线程寄存器。一旦设置了,这样的程序就可以适当地放弃其临时/永久地操作/控制整个系统状态的权利,所以系统接着在具有适当的保护水平或实际秘密的情况下执行其功能。在这样的例子中,随后在运行时实现检查方法(例如,在图2中的流程图21和23中所示的方法)。
上面描述的任何或所有方法可以用硬件403来实现,所述硬件403是多线程处理器的解码级404的一部分。图4示出了多线程处理器,其包括用于从程序获取指令的获取级402、用于解释指令并执行寄存器重命名的解码级404、用于发出指令的发出级406和用于执行所发出的指令的流水线408。如上所述,执行上述方法的硬件(例如,硬件逻辑)形成解码级404的一部分,并用于在接收到对全局资源进行写入的指令时(并且在一些例中,在接收到对全局资源进行写入的指令时)检查一个或多个局部控制寄存器,并且在不允许线程对特定全局资源(例如,全局寄存器)进行读/写时抛出异常410,或者组织指令发出。该硬件也可以用于准许线程对其相关联的局部控制寄存器进行写入(如在图2中的方法22中)和/或在接收到从全局资源进行读取的指令时检查一个或多个局部控制寄存器(如在图2中的方法23中)。
虽然图4示出了硬件403是解码级404的一部分,但是将认识到的是,该硬件逻辑可以替代地被实现为其自己的级(例如,位于解码级404和发出级406之间)或者包括在流水线的另一级内(例如,作为发出级406的一部分)。
虽然在(在图2和3中的块204和234中)执行全局资源的访问检查时,上面描述的例子使用局部控制寄存器,但是在其它例子中,可以使用针对每个全局资源的全局控制字段来实现该方法。在这样的例子中,线程可以通过将其线程ID写到适当的控制字段中获得对全局资源的控制,并且当执行访问检查时,可以检查该控制字段,以查看它是否包含请求线程的ID。图5示出了两个示例性方法,它们为图2和3中所示的那些方法的变形。在第一示例性流程图51中,接收对全局资源进行写入的指令(块202),并且检查步骤(块204)包括检查全局资源的全局控制字段(块520),以确定它是否包含发出写指令的线程的ID(块512)。只有当控制字段确实包含正确的ID(块512中为“是”)时,才准许该指令发出(块206)。第二示例性流程图52示出了用于检查读访问的相应方法。以与第一流程图类似的方式,检查步骤(块234)包括检查全局资源的全局控制字段(块520),以确定它是否包含发出读指令的线程的ID(块522)。只有当控制字段确实包含正确的ID(块522中为“是”)时,才准许该指令发出(块236)。
在上述方法中,线程可以获得对全局资源(例如全局寄存器)的控制。在一些例子中,线程可以达到它已经完成了使用资源的情况,并且因而可以放弃对特定的全局资源的控制。在全局控制字段用于控制对全局资源的访问的场合,如图5所示的,一旦线程已经完成了使用全局资源,它就可以清除控制字段,以使其它线程能够声称控制。类似地,在使用局部控制寄存器(例如,如在图2和3中所示的)的场合,线程可以清除局部控制寄存器中的条目,以便放弃对特定的全局资源的控制。
在上面的描述中,描述了用于保护全局资源的方法和装置。这些方法可以应用于在多线程处理器中的线程之间(或在多线程处理器中的任两个线程之间)共享的任何资源,并且在一个例子中,全局资源可以包括全局寄存器。
上面描述的方法可以应用于多线程处理器内的所有全局资源或全局资源的子集。在所述方法只应用于全局资源的子集的场合,所述方法可以例如应用于特定类型的全局资源(例如,全局寄存器)或特定类型的子集(例如,可能存在线程能够保护的一些全局寄存器和不能被保护的其它全局寄存器)。在另外的例子中,所述方法可以应用于多种类型的子集(例如,全局寄存器的子集和另一全局资源的子集)。
本文中使用术语“处理器”和“计算机”来表示具有处理能力使得其能够执行指令的任意设备。本领域技术人员将认识到这样的处理能力被并入到许多不同的设备,并且因此,术语“计算机”包括机顶盒、媒体播放器、数字电台、PC、服务器、移动电话、个人数字助理和许多其它设备。
对于“逻辑”的具体引用指代执行某种功能或者一些功能的结构。逻辑的示例包括:用于执行这些功能的电路。例如,这种电路可以包括晶体管和/或在制造过程中可用的其它硬件元件。举例而言,这种晶体管和/或其它元件可以用于形成实现和/或包含存储器(例如,寄存器、触发器或锁存器)、逻辑运算器(例如,布尔运算)、算术运算器(例如,加法器、乘法器或移位器)和互连的电路或结构。可以将这些元件提供成定制电路或者标准单元库、宏或者位于其它层次的抽象。可以用特定的排列对这些元件进行互连。逻辑可以包括是固定功能的电路,可以对电路进行编程以执行某种功能或者一些功能;可以通过固件或者软件更新或者控制机制来提供这种编程。被标识为执行一种功能的逻辑还可以包括:实现组分功能或者子过程的逻辑。在一个示例中,硬件逻辑具有实现固定的功能操作或者一些操作、状态机或过程的电路。本领域技术人员将认识到用于存储程序指令的存储设备可以分布在网络上。例如,远程计算机可以将所描述的过程的例子存储成软件。本地或终端计算机可以访问远程计算机,并下载所述软件的一部分或全部以运行程序。可替换地,本地计算机可以根据需要下载软件的片段,或者在本地终端执行一些软件指令并且在远程计算机(或计算机网络)执行一些软件指令。本领域技术人员还将认识到,通过使用本领域技术人员已知的常规技术,软件指令的全部或一部分可以由专用电路(例如DSP)、可编程逻辑阵列等来执行。
本文给出的任意范围或设备值可以被扩展或者被修改,而不丧失所请求的效果,这对于技术人员将是显而易见的。
将理解的是,上面描述的益处和优点可以涉及一个实施例,或者可以涉及若干实施例。这些实施例并不限于解决所陈述问题中的任何一个或全部的实施例或者具有所陈述益处和优点中的任何一个或全部的实施例。
对“一”项的任何提及是指这些项中的一个或多个。本文中使用术语“包括”来表示包含所标识的方法方框或元件,但是这样的方框或元件并不包括排他列表,并且装置可以包含额外的方框或元件,并且方法可以包含额外的操作或元素。
本文描述的方法的步骤可以以任何适当的顺序执行,或者在适当的情况下同时执行。此外,可以从任意方法中删除单独的方框,而不脱离本文描述的主题的精神和范围。上面描述的任意例子的方案可以与所描述的任意其它例子的方案组合,以形成其它例子,而不丧失所请求的效果。在图中的元件被示为由箭头连接的情况下,将清楚的是,这些箭头仅仅是示出元件之间的通信(包括数据和控制消息)的一个示例性流。元件之间的流可以在任意方向上或者在两个方向上。
将理解的是,仅仅通过例子的方式给出了优选实施例的以上描述,并且本领域技术人员可以做出各种修改。虽然上面以某种具体度或者参考一个或多个单独实施例描述了各个实施例,但是本领域技术人员可以对所公开的实施例做出大量的改变,而不脱离本发明的精神或范围。