对动态可扩展处理器的软件支持的制作方法

文档序号:6453786阅读:242来源:国知局
专利名称:对动态可扩展处理器的软件支持的制作方法
对动态可扩展处理器的软件支持
背景
尽管CPU设计者致力于通用性,但是曾经生产的每个应用程序都在包括
其可执行文件映像的代码的非常小的一部分中花费其大多数时间。这对于用于 个人计算机的通用程序、用于嵌入式计算机的程序以及甚至对于诸如由来自华
盛顿州雷蒙德市的微软⑧公司生产的XBOX⑧等游戏平台而言都是如此。分析 显示可执行文件映像中的前两个或三个基本块一般占用超过总的执行计数的 80%。
更加高效的程序执行的一个吸引人的前景是用具有与原始的通用软件指 令序列相同的语义但具有高效得多的实现的专用处理器指令来优化首先运行 的基本块。文献中报告的加速的范围从两倍到六倍,并且在某些情况下甚至大 于不止十倍。我们自己的经验致使我们认为三倍是期望的加速的保守估计。
现代处理器的CPU实现良好文档化的、固定的处理器指令集。选择处理 器指令来以尽可能多的压縮形式捕捉尽可能大的应用程序需求集。CPU —般以 使得一旦已生产出芯片就不可能添加任何新的处理器指令的方式在固定逻辑 中实现。另一方面,现场可编程门阵列(FPGA)是一种实现甚至在现场已部 署了芯片之后仍然允许稍后的扩展和修改的CPU的可选方法。
也可能用固定的逻辑来实现CPU,但是用动态可更改的方式来互连CPU 的内部组件。该方法可导致我们称之为"动态可扩展处理器"的新类型的处理 器。这些处理器综合了固定逻辑的优点(缩小的尺寸、更高的时钟速率)与将 处理器扩展添加到基本处理器指令集的能力。
对可扩展处理器的实际使用理想情况下应该利用应用程序中的己扩展的 指令。 一般而言,程序员利用汇编器或更高级语言编译器来编写应用程序。这 种方式可能需要对于每条新的处理器指令重新生成新的汇编器和新的编译器。 虽然当然是可能的,但这是相当耗时的操作。该方式还充满了限制和危险。如 果程序实际上是用汇编器来编写的,则该程序必须重写。如果修改了编译器以利用新指令,则只有高级语言程序能够自动地利用该新指令。此外,如果没有 编译器的源代码,则不可能修改该编译器。编译器是大且复杂的程序,所以非 常有可能引入细微的错误。最后,可能没有着重使用的应用程序或某些关键库 的源代码。
现有的工具和操作系统是针对固定的处理器指令集而设计的,并且不能够 解决动态可扩展处理器的需求。例如,由加利福尼亚州的圣克拉拉市的
TENSILICA⑧公司生产的XTENSA⑧处理器系列是按以下方式由标准工具集来 支持的从由制造商提供的基本处理器设计开始,系统设计者使用特殊的工具 来为新处理器定义一条或多条处理器指令。该工具的主要目的是帮助为新扩展 的处理器创建Verilog代码。该工具基于新处理器指令的手动定义自动地生成 新编译器和链接器。注意,该过程是静态的;它需要在能够为它编译和优化应 用程序之前创建新的芯片以及新的工具集。
其副本放于美国专利和商标局的文件中的以下参考文献提供了关于定制 的和可扩展的处理器的设计的额外背景Clark、 Blome、 Chu、 Mahlke、 Biles 禾口 Flautner 的"An Architecture Framework for Transparent Instruction Set Customization in Embedded Processor (用于嵌入式处理器中的透明指令集定制 的体系结构框架)"。参考书目部分参考了由一般也与此处所描述的工作相关 的相同和其他作者创作的各种其他论文。
概述
此处提供用于动态可扩展处理器的软件支持的系统和方法。一种工具能够 重写由编译器产生的可执行映像。该工具能够添加扩展定义、插入扩展触发指
令、以及添加安全签名。当加载可执行映像时可以向操作系统软件通知扩展能 力,并且操作系统软件可继而加载合适的处理器扩展。该操作系统能够代表应 用程序来管理处理器扩展的可用性。以下将描述本发明的其他优点和特征。
附图简述
将参考附图进一步描述根据本发明的用于动态可扩展处理器的软件支持
的系统和方法,在附图中

图1示出了在其中工具110能够重写由编译器产生的可执行映像100的本 发明的各方面的互操作的概观。当加载可执行映像100时,可将扩展能力通知 给操作系统软件130。操作系统软件130能够代表应用程序来管理所请求的处 理器扩展的可用性。
图2示出了一示例性重写工具205的输入202、 203和输出207的示意图。 图3示出了用于利用动态可扩展处理器的可执行映像的一示例性扩展文 件格式。
图4示出了在由重写器工具补充映像之前的原始基本块。 图5示出了在其中该工具用扩展触发指令来盖写基本块中的第一指令的 一个实施例。
图6示出了在其中该工具用扩展触发指令盖写基本块中的第一指令并且 移除该块中的所有后续指令的一个实施例。
图7示出了在其中该工具在基本块之前插入扩展触发指令并且向上移动 映像中的所有其余指令的一个实施例。
图8示出了在其中该工具将伪分支指令添加到移动到映像中的别处的基 本块的一个实施例。
图9示出了具有软件可见扩展状态的可扩展处理器。
图10示出了根据图9配置的多处理器系统中的可扩展处理器的每个进程 的状态和每个处理器的状态。
详细描述
在以下描述和附图中描述了某些具体细节,以提供对本发明的各个实施例 的全面理解。然而,通常与计算和软件技术相关联的某些公知细节将不在以下 公开中描述,来避免对本发明的各实施例的不必要的混淆。而且,相关领域的 普通技术人员可以理解,他们可以无需以下描述的细节中的一个或多个而实现 本发明的其它实施例。最后,尽管在以下公开中是参考了步骤和序列来描述各 个方法的,但是如此的描述是用于提供本发明的实施例的清楚的实现,且步骤 以及步骤的序列不应被认为是实现本发明所必需的。
图1示出了在其中在此也称为重写器工具的工具110能够重写由编译器产
生的可执行映像100的本发明的各方面的互操作的概观。可执行映像是应用程 序或计算机程序,即,被设计成执行某一个或一组有用的功能的一系列机器可 读指令。 一般而言,应用程序首先用人类可读的源代码编写,然后由编译器为 其中一种的多种自动化进程将该源代码转换为机器语言。
在一个实施例中,工具iio与首先编译一特定应用程序的编译器不同。该
工具考察已编译的可执行映像,标识该映像中的基本块,并且通过插入扩展触
发指令121、 122以及添加安全签名125来修改该映像。用使得处理器扩展有 效地执行与将由基本块执行的相同的功能步骤的扩展触发指令来补充映像提 高了执行该映像的效率。
在其他实施例中,可将工具110集成到能够标识基本块并且用如其所编译 的扩展触发指令121、 122以及安全签名125来适当地补充可执行映像的编译 器中。
扩展定义123、 124提供或参考将用扩展触发指令来补充的"基本块"或 二进制指令。扩展定义123、 124因此提供可用于搜索可执行映像、找到与模 式123、 124匹配的任何基本块101、 102、并用扩展触发指令121、 122来补充 这些区域101、 102的二进制指令的模式。
扩展触发指令121、 122是使得处理器扩展执行的指令。因此,如由工具 110修改的可执行映像100可包括使得相应的处理器扩展执行的扩展触发指令 121、 122。如果需要,则工具110还包括扩展定义123、 124,并且还可包括用 于扩展可扩展处理器的任何扩展数据126、 127。扩展数据126、 127的细节是 处理器特有的且不在此处讨论。
安全签名125—般提供检査对可执行映像100做出的修改是由可信赖的授 权机构做出的,而且该映像在这些修改后没有被更改的手段。
操作系统软件130加载适当的扩展,例如,123和/或124,并且代表多个 应用程序来管理所请求的扩展的可用性。如本领域中所理解的术语操作系统是 在最初由引导程序加载到计算机之后管理计算机中所有其他程序的软件程序。 其他程序是各种应用程序。应用程序通过经由定义的应用程序接口 (API)作 出对服务的请求来使用操作系统。此外,用户通常能够通过诸如命令语言或图 形用户界面(GUI)等用户界面来直接与操作系统进行交互。
为了支持处理器的动态扩展,可以显式地由调用某一API的应用程序,或
者隐式地由可执行文件映像100中所包含的信息在应用程序加载时将该可执行 映像100的扩展能力通知给操作系统软件130。安全签名125能够证明所请求 的扩展126、 127的正确性。注意,在图1中,扩展126、 127被描绘为在映像 100内,但该扩展126、 127可由操作系统130或通过某一其他模块或联网计算 设备来提供。在检査安全签名125之后,操作系统130能够将处理器扩展126、 127加载到处理器扩展时隙,例如141中。
操作系统130能够通过跟踪作为进程的保护状态的一部分的每个进程的 扩展信息来管理多个应用程序之间的可用的处理器扩展。还可在更复杂的多处 理器环境中跟踪扩展信息。操作系统能够保证存在所请求的扩展并且当在不同 的应用程序之间切换上下文时加载这些扩展。
修改的可执行映像可包含整个原始基本块以及扩展触发指令。这允许不可 扩展处理器仍然执行修改的可执行映像,从而简单地忽略扩展触发指令并且 "向下通过"原始基本代码块。另一方面,可扩展处理器执行扩展触发指令并 且"跳过"相应的原始代码块。
可扩展处理器140仅有的用于当前加载的扩展的时隙141、 142、 143数量 有限。操作系统130管理这些有限的资源并且能够在所请求的扩展超出可用的 时隙141、 142、 143的数量的非优化的情况下后退(fallback)。
图2示出了一示例性重写器工具205的输入202、 203和输出207的示意 图。重写器工具205利用了对不应将感兴趣的代码视为单独的指令而应视为连 接的指令序列的认识。换言之,将代码视为一组基本块而不是一组指令。除非 有异常和中断,否则一基本块在最后一个指令在某一其他地方出现分支之前被
整体地执行,因此该基本块和在所有良好定义的处理器中原子地、孤注一掷地 执行的处理器指令非常相像。在基本块的情况下,操作系统隐藏掉中断和虚拟 存储器错误,并且仅当发生一些错误的事件时才触发异常。
出于该讨论的目的,"基本块"被定义为以分支指令结束的机器指令的线 性序列。该分支可以是有条件的或没有条件的,子例程调用和返回是分支。不 能跳到基本块的中间;只能在第一个指令上进入该基本块。在跳到块中的情况 下,将改为考虑两个块,对两个入口点各有一个块,并且两个块都在相同的分
支指令处终止。
在现在大多数使用更高级语言和编译器以生成代码的情况下,基本块甚至 更有可能在实际代码中重复。此处的分析显示,如果考虑一个大的应用程序集 并且寻找重复的基本块模式,则将发现每个模式平均重复至少十次。某些模式 重复几千次。
在一个实施例中,工具205重写由编译器201和链接器产生的可执行映像 202。工具201可通过修改常规编译器的链接器以执行工具205的操作来实现, 由此消除重复的工作。如图2所示,对工具205的输入是原始的可执行程序202 和处理器扩展定义文件203。在一个可选实施例中,处理器扩展定义文件203 可被实现为数据库。处理器扩展定义文件203标识工具205能够在可执行映像 202中搜索的基本块。文件203还可提供可用于当在其中标识基本块时补充映 像202的扩展触发指令的定义和机器可读编码。
最后,文件203能够提供同样可被注入到映像202中以在扩展处理器时由 操作系统使用的扩展定义。工具205找到映像202中与在定义文件203中定义 的基本块模式相匹配的基本块,并且用新的扩展触发指令来补充这些基本块。 在逻辑层上,能够将重写操作认为是用扩展触发指令来补充基本块(或一组基 本块)的动作。"补充" 一基本块应被理解为包括替换基本块、替换基本块的 一部分、或添加到基本块的动作。
以下是一示例性指令扩展定义文件203:
/*文件:patts.bbw */
MIPSBEb26.6:c011111;b21.5:rl;bl6.5:r2;b0.16:vl;
lw r2,10(rl) jr r2 addiu rl,rl,18 [registers 3] 0,29,31 [values 2] {0,6,10} {8,6,18J
MIPSBEb26.6:c011110;b21.5:r4;bl6.5:r2;b0.1 6:v0;
40080100
c21f0200
25082300
40100200
c21f0400
25104300
40200400
c21f0500
25208300
2b182600
5000310
40280500 0,9,8,11,4,5,6 [valuess 1] {40,11,5}
MIPSBEb26.6:c011101;b21.5:r5;bl6.5:r6;bl 1. :r8;b6.5:r9;b0,6:c000000; [code 44] 3140100 7綱4230 21106200 4290
21108200 4290
21082500
ffffc624
e2a0
f6ffc814
2138e900 0,7,2,6,5,10,3,4,8,9
以上示例性文件标识了三个指令模式,每一个都是加上某些额外信息的规 范形式的基本块。由开始标签"bbname"命名为"return"的第一个模式直接 对应于作为图4-8中的运行示例使用的基本块。被称为"ull—div"和 "R_DrawColumnLoop_c"的其他块目前被认为在优化实际应用程序系统时是 有用的。
正如所观察到的,每个模式以命名该模式的"bbname"子句开头。在此 第一部分中也将其指定于该模式属于的哪个处理器类型一在此情况下是无互 锁流水线级的微处理器(MIPS)高位优先(BigEndian)可扩展处理器。取决 于实现,在单个文件中收集不同处理器的模式可能是合乎需要的。
"encoding"子句是向重写器工具描述怎样将对该模式的特定基本块实例 的实际自变量编码为扩展触发指令的字符串。该字符串被分成两部分,即在尖 括号中描绘的可任选前置条件部分和强制代入部分。
前置条件可包含由分号分隔的多个子句。每个子句引用一个寄存器或作为 该模式的参数的值。例如,在块"retum"中,子句指定值参数数字l"vl"必须等 于值参数0"vO"加8的条件。在将模式应用于基本块实例之前,可以使用可由 重写器作为前置条件快速验证的非常简单的算术表达式。如果不满足前置条件 则不应用该模式。寄存器参数上的前置条件采用"r<n>"的形式并且它们引用 了寄存器号本身。如果且当某些寄存器分配能够从某些其他寄存器分配中推导 时,能够避免在扩展的指令中使用珍贵的空格。
编码的代入部分包括由分号分隔的多个子句。每个子句包含一位字段说 明,之后是分号,之后是自变量选择符。位字段以字母"b"开头,包括之后 的该字段的第一位的位号。包括分开位字段大小的一个点,该位字段大小是以 比特为单位的。自变量选择符可以是寄存器参数"r<n>"或值参数"v<n〉",
或二进制常量"C<bits>"。
"code"部分是用于处理器的基本块模式的二进制表示。关键字"code" 之后立即跟着随后的二进制代码的以字节为单位的大小。在此示例性实施例 中,每条MIPS指令需要4个字节。"code"部分因此提供由扩展替换的二进 制指令。
"disasm"部分只是为了对用户有利,作为对于基本块是什么意思的提醒。 注意,此处的代码采用"规范"的形式,所有的寄存器都已从1开始重新标号。 "registers"部分显示在抽象到此模式中的实际基本块中发现的实际寄存 器数字的分配。在第一个块("return")中指示的寄存器代入将直接导致图4 中的代码。该子句指示该模式指定了多少寄存器,加上不能使用零号寄存器的 MIPS处理器的特殊情况,零号寄存器成为具有有线值0的特殊寄存器。
"values"部分用于表示能从一个实例化改为另一个实例化的模式中的常 量。此处,每个值都是括号中装入的三个元素的元组。第一个是包含该值的指 令的字节偏移量。第二个是指示怎样对该值进行编码的处理器专用代码。通常, 此处的值对应于当指令在映像文件中到处移动时由链接器/装载器用来修改该 指令的重定位代码。第三个是如在原始基本块中发现的实际值本身。这整个示 例性文件,除了 "encoding"部分,可由一单独的工具自动生成,如本领域的 技术人员可以理解的,并且不在此处进一步描述。
虽然在以上示例性定义文件中未示出,但是在某些实施例中,这一文件还 可包括用于用新的处理器扩展指令来扩展一个或多个处理器的扩展数据。在其 他实施例中,这些扩展数据可采用所谓的"位文件(bitfile)"的形式,该形 式是被加载到FPGA处理器中来对其进行配置的厂商专有的文件格式。例如, 它可以是对在以上讨论的Clark、 Blome、 Chu、 Mahlke、 Biles、以及Flautner 的文章中所表示的图进行编码的固定大小的位串。
工具205较佳地能够找出与给定指令模式相匹配的每个指令序列。以下是 实现该模式匹配的一种方法,但是更复杂的算法也是可能的,并且本领域的技 术人员将会理解这些变体。
可以首先检查指令模式和候选块的长度,然后能够执行三个处理器专用的 分析步骤。在第一个阶段,检查两个块的操作码兼容性。简单的实现可检査在
两个块中的指令操作码和操作码限定符在块中的相应位置处是相同的。
第二个步骤检査寄存器分配是兼容的。如果指令模式包含规范的寄存器分 配,则对于兼容性的检查可如下进行首先,将对于候选块的所有寄存器分配 标记为"未使用"。在每次遇到寄存器时,标识分配给该规范模式的寄存器("寄 存器N")。分配给该候选的寄存器可被称为"寄存器M"。接着,标识寄存 器N在对于候选块的寄存器分配中的位置。如果该位置是"未使用",则可将 寄存器M的值分配给该位置。相反如果该位置已经被分配了,则检查该值仍 然是M。如果不是,则两个块不兼容并且检查失败。
第三步检査嵌入在指令块中的任何常量值都是兼容的。如果指令模式指示 "值"参数对应于给定字段,则候选可以自由地对任何实际值进行编码,否则 两个字段必须包含相同的值。值参数的一个示例在两个块只在其最后的分支目 的地处不同的经常发生的情况下可以是分支偏移量字段。必须匹配的常量的示 例可以是位移量,两个指令序列可以仅通过改变这一字段来匹配是非常罕见 的。
在一个优选的实施例中,工具205不是预先存在的编译器201工具的替代 品。工具205在已应用工具201并且已根据所有最佳的已知优化技术完全优化 映像202之后工作。在某些实施例中,通过在工具205完成其作业后重新应用 工具201来获得进一步的效率是可能的。
经签署的、优化的可执行二进制映像207可采用图3所示的扩展文件格式 的形式。如图所示,该扩展文件格式可包括具有部分计数和偏移量301的映像 文件头、安全摘要和签名部分302、指令扩展表303 (示出了两个扩展,但是 当然可以有任何数量的扩展)、以及任何代码部分304。
回头简要地参考图2,至少有四种工具205能够用扩展触发指令来补充映 像202的方式。图4-8示出了这些各种可选的实施例。图4示出了在映像由工 具补充之前的原始基本块。图5-8示出了如用扩展触发指令所补充的基本块。 图5示出了在其中该工具用扩展触发指令来盖写基本块中的第一指令的一个实 施例。图6示出了在其中该工具用扩展触发指令来盖写基本块中的第一指令并 且移除该块中的所有后续指令的一个实施例。图7示出了在其中该工具在基本 块之前插入扩展触发指令并且向上移动映像中的所有其余指令的一个实施例。
图8示出了在其中该工具将伪分支指令添加到移动到映像中的别处的基本块的
一个实施例。
在所有的情况下,执行扩展触发指令执行了与原始基本块相同语义的动
作,并且执行将确切地在基本块将通向的地方继续。例如,在图7中,基本块 仍然存在,但是当执行扩展触发指令时没有执行该基本块。在图5中,当执行 扩展触发指令时类似地不执行块的其余指令
至少从基本块运动和映像操纵的观点来看,图8可被认为在某些方面是图 7的一种特殊情况。注意,对分支指令的使用不允许向可扩展处理器传达关于 需要什么动作的任何信息。在某些实施例中,可扩展处理器最初可以使用该指 令作为触发来启动其自动扩展算法的"学习"阶段。在该地址处的学习阶段触 发指令随后的执行则能够使得所学习的扩展代替原始基本块来执行。
图7中的扩展的指令对三个自变量、两个寄存器和一个栈偏移量进行编 码。如果使用图8,则将不能传达该信息,因此与这一类型的功能结尾相匹配 的每个块将不得不分开进行编码。换言之,图8不能像图7那样减化到图6。
每个解决方案都有优点和缺点。图5的实现是容易且高效的,但不与不可 扩展处理器向后兼容。图6-8有效地需要完全重链接映像、更改重定位信息、 符号表等等。修改原始链接器是实现这些解决方案的一种方式。因为平均一个
扩展触发指令可替换至少两条且通常多得多的指令的完全基本块,所以图6能 够减小可执行映像的大小。与图5类似,它也不是向后兼容的。图7在功能上 是最丰富的,它是向后兼容的,但是它也创建略大的映像并且难以实现。
在某些情况下图7和图8可能是仅有的可接受的实施例。考虑包含多个加 载和存储指令的基本块的情况。为了提供所需的原子性,在替换扩展的指令时 的加载和存储必须全部成功或全部失败。这不容易用硬件来实现,这可以有利 于扩展的指令的实现装置能够在加载/存储之一的等效地址处中断该执行。为了 完全兼容,这在例如如果加载操作导致一个异常等某些情况下可能是必需的实 现。
将扩展触发指令插入到应用程序映像中会引发多个额外的考虑。即使处理 器是可扩展的,但是也不能假设该扩展实际上在执行时是可用的。仅有的肯定 可用的处理器指令是在基本集中的处理器指令。接下来将考虑以下两个问题(l)如果没有加载扩展并且试图执行一扩展的指令,则会发生什么?以及(2)
怎么才能够保证加载扩展并且正确地管理扩展?
第一个问题引发了一般称之为"向后兼容"的考虑。不管该处理器没有加 载扩展或不是一个可扩展处理器,执行系统都必须或者不执行该映像,或者以 与原始的、非优化的映像一样的方式执行该映像。实现不执行该映像很容易, 该扩展的指令可被认为是非法指令并且当尝试执行该指令时可以生成一个俘 获。这无论如何都是关于非扩展处理器的最有可能的结果。但是不执行该映像 在实践中并不是最期望的结果,要求执行该映像的用户(或系统)期望尽管没 有满足所有所需的前置条件也能如最初期望的那样工作。
如果该工具使用了图7或图8的方法,则可以轻易地实现。扩展的指令可 被认为是空指令(无操作)并且执行将向下通过(或分支到)该原始基本块。 不可扩展处理器将生成一个俘获,为避免性能损失,操作系统意识到将发生什 么并且彻底重写错误的扩展的指令并且用真正的、非俘获空指令来替换该指令 是明智的。在一个实施例中,使要求执行处理器扩展指令的应用程序的一部分 无效可通过更改一个或多个处理器扩展控制寄存器的值来实现。可扩展处理器 也可具有该选项,操作系统可以惰性地评估加载扩展的要求并且将使用该俘获 作为其扩展管理算法的一部分。但是处理器具有非俘获的选项并且将所有非法
指令视为空指令也是明智的。 一种实现方法是用硬件来提供在存在扩展指令的 情况下软件能够用来定义处理器行为的控制寄存器。换言之,软件应做出俘获 还是不俘获的决定。
对于以上引发的第二个问题,存在用于处理处理器扩展的多种可能的管理 方案。在某些情况下可简单地忽略该问题。考虑嵌入式系统的情况,或游戏控 制台的情况。在这些情况下应用程序集是预先知晓的或严格控制的。例如,该 游戏控制台的制造商实行了安全装置以使得只有带证书的游戏才能在该控制 台上运行。在这些情况下的操作系统将在通电时加载扩展,并且将只假设应用 程序正确地使用扩展。
在这些场景中,人们也许会问那些扩展为什么不是基本处理器指令集的一 部分。有许多可能的原因,在游戏控制台上扩展实际上能够进化,并且随着时 间的推移添加新处理器指令但是始终关注保留旧的指令。另一个原因可能是节
约生产。大量生产单个处理器芯片但是然后取决于芯片的使用以不同的方式定 制芯片。因为相同的处理器将针对不同的系统以不同的方式优化,所以对于嵌 入式系统来这可能相当吸引人。如果这是所使用的管理方案,则有如上所述的 重写器工具就足够了。
不需要可执行文件映像中的任何额外信息的另一个方法是对每条扩展的 指令唯一地进行编码,以使得当首先执行该指令时(此时其触发一个非法指令 俘获)操作系统能够自动标识所需的扩展。可通过其他手段将扩展本身提供给 操作系统/随操作系统一起提供。该方法具有限制;难以在没有中央交换所的情 况下在诸如各软件开发者等无关方之间保证唯一性,并且可用于对扩展的指令 进行编码的额外操作码的数量相当有限。任何其他管理解决方案需要重写器工 具在可执行映像中添加一些额外信息。
图9示出了具有软件可见扩展状态的示例性可扩展处理器。可扩展处理器 包括扩展状态901、指令高速缓存903、指令解码逻辑905、当前路由逻辑907、 以及执行单元909。如以上提到的,扩展数据是什么以及它确切做什么是处理 器特有的。除了出于说明的目的之外,本发明并不取决于该信息。应当清楚, 许多不同的处理器扩展模式都是可能的。例如,图9的处理器使用位串来定义 在内部执行单元之间的数据路由。该信息用图9和图10中的"路由数据"来 指不。
如果正确地实现,则该路由数据就不能影响该处理器的安全性,并且因此 没有必要将安全证书应用于可执行映像文件以査明该映像已通过了安全确认。 在该映像中插入将路由信息与该映像本地的、使用该路由信息的特定的扩展的 操作码相关联的表就足够了。在图3中,指令扩展部分303持有具有两个这样 的扩展的表,相同的路由数据在图3中一般地指示为"数据"。注意, 一个这 样的映像是自包含的,并且独立于任何其他映像;不需要通过其他手段来传递 该扩展数据,并且即使相同的指令操作码对不同映像有不同含义,操作系统也 具有足够的信息以便能够并发地处理多个映像。
另一个可扩展处理器实施例可以使用作为扩展数据加载到FPGA上的二 进制文件。该文件是许多指令共有的。这种类型的处理器设计使得扩展能够在 处理器状态上执行任意操作,并且因此应该是保证安全的。为了保护这一处理
器的安全,想使用扩展的映像可被要求唯一地标识可能具有安全许可证的扩 展。扩展本身可作为加密并经签署的数据被包括在映像中。
在另一个可扩展处理器实施例中,扩展例如作为操作系统的一部分分开地
出厂和安装。该方法的一个优点是最小化了运行时薄记开销。参考图9和10,
在这些实施例中的路由数据元素包括用于给定扩展的小标识符。
在一个最终可扩展处理器实施例中,可扩展处理器可以如在此处所描述的 第一个实施例中那样以使得扩展不能造成安全威胁的方式来设计,但是如在此 处所描述的第二个实施例中那样,仍然能够在单个扩展中传递许多指令实现。 对于该实施例,如果映像中没有包括扩展,则优选地标识该扩展。重写器工具
应将图3所描绘的安全摘要和签名部分302添加到该可执行文件映像。
总之,该重写器工具在可执行映像的代码部分中插入扩展触发指令,并且 也可添加扩展定义和/或扩展标识,并且还可将安全签名和摘要添加到可执行文 件映像。
现在将详细描述在包括动态可扩展处理器的系统上加载、并且已如上所述 被重写以利用这一处理器的应用程序的软件支持。软件支持可被结合到包括其 他操作系统功能的操作系统中。
在一个示例性实施例中,在应用程序加载时将应用程序利用处理器的能力 通知给操作系统。这一通知可通过某应用程序接口 (API)调用的显式调用, 或可基于操作系统基于包含在先前的部分中所定义的可执行文件映像中的信 息做出的推论。当得到可扩展性的通知时,该操作系统可将任何合适的处理器 扩展加载到可扩展处理器时隙中。
操作系统能够跟踪作为进程的受保护状态的一部分的每个进程的可扩展 性信息。图10描绘了图9的可扩展处理器所需要的每个进程的状态。如图IO 所描绘的,跟踪哪一处理器扩展被加载多处理器系统中的可用可扩展处理器的 哪个时隙中也是有利的。知道上述内容例如在该扩展数据相对较大并且只有很 少的使用中的扩展的情况下是有用的。在这种情况下有可能在相同的时间从不 同应用程序加载扩展。图10示出了可能需要费力的比较的重复的路由数据。 有可能将路由数据保存在分开的区域中并且改为使用指针或索引。
操作系统加载器能够在应用程序启动时向操作系统提供处理器扩展。该加
载器还可帮助应用程序共享处理器扩展。由重写器工具使用操作码创建的应用 程序一般将具有全部都在某一数值处开始并且以相同的方式进展的操作码。这 导致在应用程序中的操作码之间的冲突。为了避免这一问题,该加载器能够修 改新加载的映像中的操作码以便最小化与先前加载的映像的冲突。图io示出 了该优化的效果。因为进程1和进程2使用不同的操作码,所以它们都能在处 理器1上进行调度而不导致任何管理俘获,并且进程2可在两个处理器上进行 调度。如果试图在进程2上调度进程1,则将招致俘获。
可扩展处理器仅有的用于当前加载的扩展的时隙的数量有限。实际的数量 可以与图9所描绘的一样小或大得多,但是该数字将始终是有限的。操作系统 可以是代表应用程序管理该有限的资源,从而以高效的方式共享资源的仲裁 器。
该问题类似于处理浮点协处理器以及由多个应用程序遗留在该协处理器 中的状态的问题。可在此应用公知的算法,但有一点关键的区别。在浮点协处 理器的情况下,因为(a)存在遗留在该协处理器中的可变状态,以及(b)只 有该协处理器能够执行浮点指令,所以除非使该协处理器可用,否则执行不能 够前进。
在此处的情况下,假设重写器工具使用图7中所示的方案,就不受制于这 两个约束。首先,应用程序状态被保持在通用寄存器中而不是在专用单元中, 除非扩展提供了额外的寄存器状态,这是不会进一步考虑的情况,因为这种情 况类似于浮点的情况。注意,路由数据不是可变的,且不需要跨上下文切换而 保留。第二,原始基本块的代码仍然是可用的,因此操作系统具有跳过扩展的 指令并且简单地向下通过以到达该原始代码的选项。这是优选可扩展处理器来 将决定是否俘获扩展的指令的决定留给软件的原因。
具有"在每一协处理器的情况下"继续执行的选项打开了到新的、更精细 的管理算法的大门。例如,操作系统能够(1)排他地将资源分配给(la)被 观察到为最大限度地利用了该资源的,或(lb)由一个人类用户选择的应用程 序;和/或(2)假设中断服务例程不会利用扩展或为保证可预测的响应时间, 在中断上禁用所有的扩展;和/或(3)加载与存在的可用时隙
理有效地作为扩展数据的高速缓存的东西。
除了此处明确示出的具体实现之外,考虑此处所公开的说明书,其他方面
和实现将是对本领域的技术人员显而易见的。本说明书和所示的实现旨在被认 为仅仅是具有所附权利要求书的真正的范围和精神的示例。
权利要求
1. 一种计算机操作系统130,包括用于在应用程序100加载期间标识用于处理所述应用程序100中的基本块101的处理器140扩展指令的计算机可执行指令;以及用于用所述处理器140扩展指令来扩展处理器140的计算机可执行指令。
2. 如权利要求1所述的操作系统130,其特征在于,还包括用于跟踪所述 应用程序IOO和所述处理器140扩展指令之间的关联的计算机可执行指令。
3. 如权利要求2所述的操作系统130,其特征在于,还包括用于保证当执 行了上下文切换时,所述处理器140是用所述处理器140扩展指令来扩展的计 算机可执行指令。
4. 如权利要求1所述的操作系统130,其特征在于,还包括用于在扩展所 述处理器140之前检查安全签名125的计算机可执行指令。
5. 如权利要求1所述的操作系统130,其特征在于,还包括用于跟踪在多 处理器系统中的多个处理器140中的扩展时隙141的计算机可执行指令,所述 时隙141是与所述处理器140扩展指令相关联的。
6. 如权利要求1所述的操作系统130,其特征在于,还包括用于在两个或 多个应用程序IOO之间共享所述处理器140扩展指令的计算机可执行指令。
7. 如权利要求6所述的操作系统130,其特征在于,所述用于共享的指令 包括用于排他地将所述处理器140扩展指令分配给被观察到为最大限度地利用 了所述处理器140扩展指令的应用程序的指令。
8. 如权利要求6所述的操作系统130,其特征在于,所述用于共享的指令包括用于排他地将所述处理器140扩展指令分配给由人类用户选择的应用程序 100的指令。
9. 如权利要求6所述的操作系统130,其特征在于,所述用于共享的指令 包括用于在中断上禁用至少一个处理器140扩展指令的指令。
10. 如权利要求6所述的操作系统130,其特征在于,所述用于共享的指 令包括用于加载与可用的处理器140扩展指令时隙141的数量相等的多个处理 器140扩展指令的指令、用于忽略加载额外的处理器140扩展指令的请求的指 令、以及用于代替所述额外的处理器140扩展指令执行非优化的基本块101的 指令。
11. 如权利要求6所述的操作系统130,其特征在于,所述用于共享的指 令包括用于使用最近最少使用算法来确定要加载多个处理器140扩展指令中的 哪一个的指令。
12. 如权利要求1所述的操作系统130,其特征在于,还包括用于替换要 求执行处理器140扩展指令的应用程序100的一部分的计算机可执行指令,所 述部分是用非俘获空指令来替换的。
13. 如权利要求1所述的操作系统130,其特征在于,还包括用于通过改 变一个或多个处理器140扩展控制寄存器的值来使要求执行处理器140扩展指 令的应用程序100的一部分无效的计算机可执行指令。
14. 一种重写器工具IIO,包括用于在可执行文件映像100中搜索以分支指令101结束的至少一个线性机 器指令序列的计算机可执行指令;以及用于用至少一个新指令121来补充所述可执行文件映像202的计算机可执 行指令,所述新指令121使得表示所述线性机器指令序列的处理器140扩展指令执行。
15. 如权利要求14所述的重写器工具110,其特征在于,所述用于补充的 指令包括用于盖写所述线性机器指令序列101中的第一指令的指令。
16. 如权利要求14所述的重写器工具110,其特征'在于,所述用于补充的 指令包括用于盖写所述线性机器指令序列101中的第一指令、并且移除所述线 性机器指令序列101中的至少一个后续指令的指令。
17. 如权利要求14所述的重写器工具110,其特征在于,所述用于补充的 指令包括用于在所述线性机器指令序列101之前插入所述新指令并且将在所述 可执行文件映像100中的所有其余指令向上移动的指令。
18. 如权利要求14所述的重写器工具110,其特征在于,所述用于补充的 指令包括用于将伪分支指令添加到所述线性机器指令序列101的指令。
19. 如权利要求14所述的重写器工具110,其特征在于,还包括用于读取 为所述线性机器指令序列101和至少一个相应的新指令121提供至少一个模式 的定义124的计算机可执行指令。
20. 如权利要求14所述的重写器工具110,其特征在于,还包括用于访问 提供至少一个线性机器指令序列101以及至少一个相应的新指令121的数据库 的计算机可执行指令。
21. 如权利要求14所述的重写器工具110,其特征在于,所述用于搜索的 指令包括用于将通用模板与两个或多个线性机器指令序列101相匹配的指令, 所述线性机器指令序列101的至少一个指令字段不同。
22. —种用于提高在具有可扩展处理器140的计算机上的应用程序100的 执行效率的方法,包括标识在运行所述应用程序时执行多次的至少一个线性机器指令序列101;标识表示所述线性机器指令序列101的处理器140扩展指令;用至少一个新指令121来补充对应于所述应用程序100的可执行文件映像 100,其中所述新指令121使得表示所述线性机器指令序列101的所述处理器 140扩展指令执行;当加载所述应用程序100时用所述处理器140扩展指令来扩展所述可扩展 处理器140。
23. 如权利要求22所述的方法,其特征在于,还包括跟踪所述应用程序 IOO和所述处理器140之间的关联,并且保证当执行上下文切换时所述可扩展 处理器140是用所述处理器140扩展指令来扩展的。
24. 如权利要求22所述的方法,其特征在于,还包括在扩展所述可扩展 处理器140之前检查安全签名125。
25. 如权利要求22所述的方法,其特征在于,还包括替换要求执行处理 器140扩展指令的应用程序100的一部分,所述部分是用非俘获空指令来替换 的。
26. 如权利要求22所述的方法,其特征在于,还包括跟踪与所述处理器 140扩展指令相关联的处理器时隙141。
27. 如权利要求22所述的方法,其特征在于,还包括管理在两个或多个 应用程序IOO之间对所述处理器140扩展指令的共享。
全文摘要
一种后编译工具能够重写由编译器产生的可执行映像。该工具能够添加扩展定义、插入扩展触发指令、以及添加安全签名。当正加载可执行映像时可将扩展能力通知给操作系统,并且操作系统可继续加载合适的处理器扩展。该操作系统能够代表应用程序来管理处理器扩展的可用性。
文档编号G06F9/24GK101379467SQ200780004500
公开日2009年3月4日 申请日期2007年1月31日 优先权日2006年2月2日
发明者A·弗林, N·L·林奇, R·F·拉什德 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1