推测性特权提升的制作方法

文档序号:6514665阅读:146来源:国知局
推测性特权提升的制作方法
【专利摘要】本发明涉及推测性特权提升。本公开提供了用于推测性地提升执行指令的特权等级的系统和方法。在实施方式中,这通过在早期流水线阶段识别特权提升指令(例如,SYSCALL)并通过提升的特权预测性地执行后继指令来实现。
【专利说明】推测性特权提升
【技术领域】
[0001]本公开总体上涉及处理器架构,更具体地,涉及特权操作的执行。
【背景技术】
[0002]在现代处理架构中,典型的中央处理单元(“CPU”)同时对大量执行线程进行操作,该操作在专用于处理操作系统任务的线程与用于在该操作系统上执行的各种应用程序的线程之间进行切换。
[0003]为了为单独的应用程序提供一些逻辑保证以及安全性,CPU可限制典型的应用程序可利用的这组操作。实际上,仅仅允许在操作系统的中心(称为核心)的少量受信任的代码不受限制地以提升特权(例如,核心模式、主模式、监管模式等)进行操作,并执行CPU所要求的任何操作。其他应用程序(包括该操作系统的其他部分)以较低的安全等级(例如,用户模式或中间模式)进行操作。
[0004]有时,应用程序需要使用仅仅以提升的特权等级可用的受限制的操作。为此,该应用程序可对核心执行系统调用(或“syscall”),该系统调用指示核心为了应用程序的利益使用核心的提升特权执行特定操作。然而,系统调用具有性能问题,为此,典型的解决方案用于允许始终以提升的特权执行某些软件(例如,设备驱动程序),而不是必须请求特权提升。
[0005]因此,需要一种用于为一组指令提升特权的有效技术。

【发明内容】

[0006]根据本发明的多个方面,提供了一下方法和处理器:
[0007](I) 一种方法,包括:
[0008]在处理器的流水线(pipeline,管线)阶段(stage,级)中检测特权提升指令;
[0009]响应于所述特权提升指令的检测,更新特权状态;以及
[0010]将所述特权状态通知给后继流水线阶段。
[0011](2)根据(I)所述的方法,其中,将所述特权状态通知给所述后继流水线阶段包括:
[0012]根据特权状态存储器确定当前特权状态;以及
[0013]发送指示是否提升所述当前特权状态的数据位。
[0014](3)根据(I)所述的方法,其中,检测所述特权提升指令包括:
[0015]在所述处理器的取指阶段检测所述特权提升指令。
[0016](4)根据(I)所述的方法,其中,检测所述特权提升指令包括:
[0017]检测系统调用指令。
[0018](5)根据(I)所述的方法,其中,检测所述特权提升指令包括:
[0019]读取指示指令为特权提升指令的指令数据位。
[0020](6)根据(I)所述的方法,进一步包括:[0021 ] 阻止发布后继指令,直到确认所述特权提升指令完成。
[0022](7)根据(6)所述的方法,进一步包括:
[0023]在确认未执行所述特权提升指令时,清空所述流水线;以及
[0024]将所述特权状态恢复到与指令路径误预测对应的先前状态。
[0025](8)根据权利要求1所述的方法,进一步包括:
[0026]允许以提升的特权发布后继指令。
[0027](9)根据(8)所述的方法,进一步包括:
[0028]在确认所述特权提升指令完成时,退回所述后继指令的结果。
[0029](10)根据(8)所述的方法,进一步包括:
[0030]在确认未执行所述特权提升指令时,清空并恢复所述流水线。
[0031](11) 一种处理器,包括:
[0032]处理流水线,以硬件实现;
[0033]特权状态存储器,被配置为储存特权状态;以及
[0034]所述处理流水线的流水线级,被配置为检测特权提升指令,响应于所述特权提升指令的检测,更新所述特权状态,并将所述特权状态通知给后继流水线级。
[0035](12)根据(11)所述的处理器,其中,所述流水线级进一步被配置为根据所述特权状态存储器确定当前特权状态,并发送指示是否提升所述当前特权状态的数据位。
[0036]( 13)根据(11)所述的处理器,其中,所述流水线级包括取指令级。
[0037](14)根据(11)所述的处理器,其中,所述流水线级进一步被配置为检测系统调用指令。
[0038](15)根据(11)所述的处理器,其中,所述流水线级进一步被配置为读取指示指令为特权提升指令的指令数据位。
[0039]( 16 )根据(11)所述的处理器,进一步包括:
[0040]所述处理流水线的第二流水线级,被配置为阻止发布后继指令,直到确认所述特权提升指令完成。
[0041](17)根据(16)所述的处理器,其中,所述处理流水线被配置为在确认未执行所述特权提升指令时清空,并且将所述特权状态恢复为与指令路径误预测对应的先前状态。
[0042]( 18 )根据(11)所述的处理器,进一步包括:
[0043]所述处理流水线的第二流水线级,被配置为允许以提升的特权发布后继指令。
[0044](19)根据(18)所述的处理器,其中,所述处理流水线被配置为在确认所述特权提升指令完成时,退回所述后继指令的结果。
[0045](20)根据(18)所述的处理器,其中,所述处理流水线被配置为在确认未执行所述特权提升指令时清空并恢复。
【专利附图】

【附图说明】
[0046]被并入本文中并且构成该说明书的一部分的附图阐述了本公开的实施方式,并且与说明书一起,进一步用于解释本公开的原理,使相关领域的技术人员能够形成并使用所公开的实施方式。
[0047]图1示出了根据实施方式的处理流水线;[0048]图2示出了根据实施方式的指令流;
[0049]图3是示出了根据实施方式的预测模块进行操作的步骤的流程图;
[0050]图4是示出了根据实施方式的用于在误预测特权提升的情况下降低流水线刷新成本的步骤的流程图;
[0051]图5是示出了根据实施方式的用于在正确预测特权提升的情况下提高流水线性能的积极方法的流程图。
[0052]现在参照附图,描述本公开。在图中,相似的参考数字总体上表示相同或在功能上相似的部件。此外,参考数字最左边的数字总体上表示该参考数字首先出现的示图。
【具体实施方式】
[0053]1.介绍
[0054]参照示出示例性实施方式的附图,进行以下详细描述。也能够具有其他实施方式,在本公开的精神和范围内,可对这些实施方式进行修改。因此,该详细描述并非旨在限制本公开。
[0055]对于本领域的技术人员而言,如下所述,显然在软件、硬件、固件和/或在图中示出的实体的多个不同的实施方式中可实现本公开。用于专门控制硬件以实现本公开的任何实际的软件代码并不限制本公开。因此,通过理解实施方式能够进行修改和变更,并且在本公开的范围和精神内,描述本公开的操作行为。
[0056]在该说明书和权利要求中引用的模块,表示执行所指示的功能的硬件或软件元件的任意组合。模块不需要为严格定义的实体,因此,几个模块可在功能上重叠硬件和软件元件。例如,软件模块可指程序内的单个代码行,该程序本身为一个单独的软件模块。相关领域的技术人员应理解的是,例如,根据多种格式或性能优化的技术,可定义模块的功能。
[0057]图1示出了根据实施方式的处理流水线100。流水线100包括取指阶段102、解码阶段104、分发阶段106、发布阶段108、执行阶段110以及回退阶段112。然而,相关领域的技术人员会认识到,阶段的其他排列(包括在流水线100中所表示的阶段的组合和/或阶段的进一步划分)的设想均在本公开的范围内。
[0058]图2是根据实施方式的指令流200。指令流200被分成未提升特权(例如,“用户”)模式指令流202以及已提升特权(例如,“核心”)模式指令流204。结合图1的处理流水线100,该示例性指令流200用于示出现有方法与所公开的实施方式的操作。
[0059]在传统的方法中,通过非限制性实例,取指阶段102可按照A、B、C、SYSCALL、D、E、F的顺序提取一组指令。在取指阶段102当SYSCALL指令被取入流水线100中时,处理器并未立即认出该指令为SYSCALL指令。只有当该指令进一步沿着该流水线往下(例如,在解码阶段104,该阶段在更长的流水线中可为几个更晚的阶段),才会认出该指令,而且,仅仅在甚至更稍后的阶段(例如,执行阶段110),才可确定实际上执行了 SYSCALL功能。
[0060]然而,在该传统方法中,如用户模式指令流202所示,指令D、E以及F在SYSCALL指令之后,已经作为用户模式特权指令载入流水线内。为了处理核心模式指令流204,在执行SYSCALL指令时,该流水线需要刷新并且载有提升特权等级的指令X、Y、Z以及ERET (其表示控制返回到用户模式指令流),或者可停滞(stall,延迟)分发指令D、E以及F。
[0061]因此,SYSCALL指令的传统操作用于作为一个例外。在执行SYSCALL指令时,在一个典型的实例中刷新流水线100。在上述实例中,从流水线中刷新后继指令D、E以及F,不承诺在通过流水线100处理那些指令时会发生任何变化。然后,会由取指阶段102将以已提升特权等级提取指令X、Y以及Z和ERET指令。一旦控制返回用户模式指令流,就可重新提取并执行指令D、E以及F。
[0062]上述方法在执行SYSCALL指令之后需要完全刷新流水线,或者至少停滞执行,造成丢失几个处理周期。与分支误预测一样,该成本相当于从流水线100的取指阶段到执行阶段的阶段数量。软件开发者通常被视为不能接受经常由某些类型的软件(例如,设备驱动程序)引起的该成本。这已经导致一些开发者实践为向整块软件(例如,通过在核心模式中运行设备驱动程序)简单地提供提升特权并且接受由于为该代码(即,应信任在核心模式中执行的软件)提供核心模式特权所造成的安全隐患。
[0063]I1.特权升级预测
[0064]根据实施方式提出的解决方案依赖于特权提升机制,该机制以与分支预测器相似的方式进行操作。为了避免与上述流水线刷新相关的性能成本,无需以提升特权执行整块软件(设备驱动程序通常这样做),根据实施方式的解决方案提供预测性特权提升。如流水线100所示,根据实施方式,示例性取指阶段102包括预测模块114。预测模块114可与预测功能成为一体或者与预测功能分离,用于在流水线100中处理分支预测以及任何其他预测操作。
[0065]根据实施方式,预测模块114在流水线100的早期阶段(例如,取指阶段102)确定在该阶段的当前指令是否为有效的SYSCALL指令。图3是示出了根据实施方式的预测模块114进行操作的步骤的流程图300。该方法在步骤302开始,并且继续进入步骤304,在步骤304中,在流水线100内,在早期(例如,在取指阶段102)识别特权提升指令。通过非限制性实例,通过表示该指令为SYSCALL指令的额外指令位,并且通过由取指阶段102对该额外位进行解码(以及通常为解码阶段104保留的操作),有利于进行这种识别。可选地,通过进一步的非限制性实例,在取指阶段102,可检测用于SYSCALL指令的这组准确的指令位,以将该指令识别为SYSCALL指令。假设检测功能用于诸如检测特定指令的限制目的,,那么这组检测功能的实现方式比复杂的解码阶段104简单得多。相关领域的技术人员会认识至IJ,在该公开的范围内,可使用并且预计具有用于识别SYSCALL指令的其他技术,包括由分支预测使用的任何技术。
[0066]预测性特权提升通过这种方式将执行SYSCALL指令的任务有效地提早到流水线100的早期阶段,例如,取指阶段102。在识别出SYSCALL指令时,负责逻辑从异常处理代码中开始取指并相应地提升特权等级。与传统方法一样,这不需要在用户模式指令流中提取并开始处理后继指令(例如,指令D、E以及F),因此,不需要刷新那些指令。
[0067]然后,该方法继续进入步骤306,在该步骤中,根据实施方式,设置与新的特权等级对应的状态数据。该状态数据可储存在可由取指阶段102快速存取的存储器中。在步骤308中,在误预测特权提升的情况下,为了恢复流水线的状态以及正在处理的当前指令(例如,如程序计数器所指示的),在一个实施方式中,储存流水线恢复信息,在下文中会进一步详细地进行讨论。在步骤310中,根据一个实施方式,将指示该指令的提升特权等级的状态数据传递给下一个流水线阶段(例如,解码阶段104)。结果,虽然具有执行提升特权的状态数据(例如,执行核心模式操作的位),但是将任何后继指令与相应的特权数据一起传递给流水线100的下一个流水线阶段。通过与相关的提升特权的观念一样多的阶段(可为整个流水线或其某部分),与指令(例如,在以上实例中,指令Χ、y以及Ζ)—起传递该数据。然后,该方法在步骤312结束。
[0068]根据实施方式,一个示例性实现方式用于在取指阶段102和后继阶段(例如,解码阶段104)之间设置锁存器,以用作状态数据储存。每当特权状态改变时,修改由该锁存器锁存的数据,并且该数据为解码阶段104提供用于指令的相应特权等级。每个后继阶段可根据需要继续将这个或这些数据位传递给其他后继阶段,并且根据实施方式,开发流水线100的架构,以在流水线阶段之间提供该额外数据的通道。
[0069]相关领域的技术人员会进一步认识到,在本文中所描述的技术可适用于与SYCALL指令具有相似特征的其他类型的指令。例如,其他特权提升指令可通过相似的方式进行操作,并且在本公开的范围内,预计具有这些指令。同样,在虚拟化环境中的管理程序调用(即,虚拟化环境对管理程序的调用)可从类似的方法中受益。在较新的CPU架构中,嵌入式虚拟化支持包括额外的新特权等级,其中,管理程序可以在该额外的新特权等级操作,并且可进行用于过渡到管理程序模式(与在本文中所提供的实例中的核心模式一样)的调用。在该公开的范围内,也预计具有这些方法。
[0070]II1.特权承诺与解决
[0071]识别特权升级指令(例如,SYSCALL)并且标记在SYSCALL之后的指令,用于以提升特权等级执行,然而,依然可能保持不执行SYSCALL指令本身。例如,SYSCALL指令可为误预测的指令分支的一部分,或者可由执行流水线阶段(例如,阶段110)在执行SYSCALL指令之前执行异常或中断。
[0072]在分支误预测的情况下,相关领域的技术人员应理解的是,可以利用多种现有技术以分支误预测校正逻辑的形式校正处理器的取指逻辑,并且确保清出来自误预测路径的任何指令,并且不承诺任何状态信息。此外,该示例性解决方案(包括预测性特权提升)用于校正特权等级并且将该经校正的特权等级广播给取指阶段102。结果,以正确的特权等级提取从正确的分支中提取的后继指令。
[0073]在不需要这种流水线时,有几种技术可用于降低这种流水线清空的成本,或者用于在成本上做出让步,以换取更高的性能。图4是示出了根据实施方式的用于在特权提升误预测的情况下降低流水线清空成本的步骤的流程图400。该方法在步骤402开始,并且进入步骤404,在步骤404中,阻止执行在SYSCALL之后的任何提升特权指令。在图1的示例性流水线100中,虽然相关领域的技术人员会理解的是,预计具有其他相似的技术,但是在发布阶段108之前可发生这种阻止。根据一个实施方式,阻止执行提升特权的指令,从而阻止将这些指令发布给至少一个执行单元,直到SYSCALL指令退回。
[0074]在步骤406中,判断在稍后的流水线阶段(例如,在执行阶段110执行SYSCALL指令期间)是否成功地通过SYSCALL进行特权提升。如上所述,如果实际上特权提升成功,那么在步骤410中解除阻止,并且在步骤412中指令继续处理。然而,如果未执行SYSCALL指令(例如,由于分支误预测或防止执行SYSCALL指令的异常或中断),那么结果为特权提升误预测。在步骤408中,清出具有提升特权等级的误预测的指令,并且将流水线100状态恢复到发生误预测的点。根据实施方式,流水线100状态恢复依赖于在图3的步骤308中储存的信息,允许与现有分支误预测处理逻辑相结合地实践本发明的实施方式。然后,通过普通用户特权,可再次由取指阶段102提取指令。然后,该方法在步骤414中结束。
[0075]可利用该方法的一个非限制性实例是分支预测使流水线100处理指令流200的指令的情况。可按照A、B、C以及SYSCALL然后基于上述预测性特权提升处理进入核心模式指令204X、Y以及Z的顺序处理这些指令。虽然以提升的特权等级预测性执行指令X、Y以及Ζ,但是可通知流水线,整个分支(例如,所有指令流200)被误预测,并且应在不同组指令上执行。例如,如果指令B为由流水线100最初误预测的分支或中断指令,那么可发生这种情况。使用上述方法,将CPU取指逻辑被重定向到正确的分支(例如,与正确的指令分支的指令对应的指令R、S、T等)。此外,由于在实施方式中已经储存了在进行误预测时的特权等级,所以将该特权等级恢复为在提取分支指令时的状态。
[0076]将特权等级恢复到与误预测分支的时间对应的先前状态的能力允许在绝不应进行特权提升的情况下恢复预测性特权提升的影响(例如,以核心模式执行指令)。在实施方式中,现有分支误预测逻辑执行多个任务,例如,将程序计数器恢复为早期状态,以便消除分支误预测的影响。在绝不应执行特权提升指令(例如,SYSCALL)的情况下,所公开的方法进一步提供用于通过相似的方式消除特权提升的影响的机构。
[0077]图5是示出了根据实施方式用于在正确预测特权提升的情况下提高流水线性能的积极方法的流程图500。该方法在步骤502中开始,并且进入步骤504,在该步骤504,具有预测的提升特权等级的指令通过流水线100,用于执行(例如,在阶段110中)。与图4中的流程图400的方法相比,未阻止这些指令,直到确定特权提升的适当性。在步骤506中,判断特权提升是否是误预测,如果不是误预测,那么该方法进入步骤510,在该步骤510,退回已提升特权指令的执行结果,并且在步骤512中继续进行处理。
[0078]然而,如果误预测特权提升,那么在步骤508中清出流水线,并且在取指阶段102,再次提取第一误预测指令,以与图4中的流程图400的过程相似的过程。但是根据一个实施方式,通过允许以提升的特权等级(例如,在执行阶段110)执行指令,处理器或存储器中的某些状态信息可能不正确并且需要恢复为到先前的状况。该方法需要引入额外的补偿功能,以恢复流水线100的先前状态。在步骤512再次继续进行处理,并且该方法在步骤514结束。
[0079]IV.结论
[0080]虽然在上文中已经描述了本公开的各个实施方式,但是应理解的是,仅仅通过实例,而非限制性地呈现了这些实施方式。相关领域的技术人员应当理解的是,在不背离所附权利要求内所定义的本公开的精神和范围的情况下,可在形式和细节上进行各种变化。应理解的是,本公开不限于这些实例。本公开适用于如本文中所述进行操作的任何部件。因此,本公开的广度和范围不应受到任何上述示例性实施方式的限制,而应仅仅根据以下权利要求及其等同物进行定义。
【权利要求】
1.一种方法,包括: 在处理器的流水线阶段中检测特权提升指令; 响应于所述特权提升指令的检测,更新特权状态;以及 将所述特权状态通知给后继流水线阶段。
2.根据权利要求1所述的方法,其中,将所述特权状态通知给所述后继流水线阶段包括: 根据特权状态存储器确定当前特权状态;以及 发送指示是否提升所述当前特权状态的数据位。
3.根据权利要求1所述的方法,其中,检测所述特权提升指令包括: 在所述处理器的取指阶段检测所述特权提升指令。
4.根据权利要求1所述的方法,其中,检测所述特权提升指令包括: 检测系统调用指令。
5.根据权利要求1所述的方法,其中,检测所述特权提升指令包括: 读取指示指令为特权提升指令的指令数据位。
6.根据权利要求1所述的方法,进一步包括: 阻止发布后继指令,直到确认所述特权提升指令完成。
7.根据权利要求6所述的方法,进一步包括: 在确认未执行所述特权提升指令时,清空所述流水线;以及 将所述特权状态恢复到与指令路径误预测对应的先前状态。
8.一种处理器,包括: 处理流水线,以硬件实现; 特权状态存储器,被配置为储存特权状态;以及 所述处理流水线的流水线级,被配置为检测特权提升指令,响应于所述特权提升指令的检测,更新所述特权状态,并将所述特权状态通知给后继流水线级。
9.根据权利要求8所述的处理器,进一步包括: 所述处理流水线的第二流水线级,被配置为阻止发布后继指令,直到确认所述特权提升指令完成。
10.根据权利要求9所述的处理器,其中,所述处理流水线被配置为在确认未执行所述特权提升指令时清空,并且将所述特权状态恢复为与指令路径误预测对应的先前状态。
【文档编号】G06F9/30GK103713881SQ201310465288
【公开日】2014年4月9日 申请日期:2013年10月8日 优先权日:2012年10月4日
【发明者】里卡多·拉米雷斯 申请人:美国博通公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1