用于片上装置管理的已知优良程序代码的制作方法

文档序号:6479408阅读:147来源:国知局
专利名称:用于片上装置管理的已知优良程序代码的制作方法
技术领域
本发明是有关处理器和计算机系统的领域,尤有关在此种系统内使用已知优良程 序代码(known good code)来扩充处理器的架构、控制机载装置(on-board devices),以及 其它用途。
背景技术
处理器是设计成用来执行定义在指令集架构(instruction set architecture, ISA)里的指令。ISA定义了指令、该指令的编码方式,以及执行指令时要进行的操作。ISA 通常也会定义处理器不同的操作模式,以及为了成功编程该处理器以完成所需操作,程序 设计师需要知道的其它信息。换言之,ISA基本上是用来描述当提供一串要执行的指令流 时,处理器该如何操作的描述。由于程序设计师相信处理器会依照ISA所指定的方式运作,对于ISA的修改必须 很小心,通常会同时征询程序设计师(或软件厂商)与处理器设计师(或处理器厂商)的 意见。处理器也必须跟着ISA的修改来作硬件上的修正,以确保所需操作是处理器可以提 供的。因此必须要仔细描述修改的定义,并且获得双方同意,因为处理器新一代的硬件必须 要实施这些修改。之后的修改甚至需要在更新一代的硬件上实施。

发明内容
在一实施例中,集成电路包括至少一个处理器核心、至少一个其它电路,以及配置 成用来将KGC提供给处理器核心来执行的已知优良程序代码(Known Good Code,KGC)的源 程序。已知优良程序代码包括用于其它电路的接口程序代码(interface code),通过该接 口程序代码能让在至少一个处理器核心上执行的应用程序,经过该已知优良程序代码而连 接到该至少一种其它电路。在另一实施例中,处理器包含可编程的对映表(programmable map)及舆该可编程 的对映表耦接的电路。可编程的对映表是配置成用来储存数据,该数据可识别出至少一个 指令,对于该指令,处理器执行的指令集架构修改已经定义,其中处理器未执行修改。该电 路配置成用来检测指令并且引发转移至已知优良程序代码(known good code,KGC)。其中 的KGC会被保护而不受未经授权的修改,并且是由通过验证的实体所提供。KGC包含在执行 时可以仿真出该修改的程序代码。


图1的方块图在说明处理器和相关的已知优良程序代码(KGC)。图2是处理器与KGC第一实施例的方块图。图3是处理器与KGC第二实施例的方块图。图4是处理器与KGC第三实施例的方块图。图5是说明KGC转移机构第一实施例的方块图。
图6是处理器实施例的方块图,该处理器实作转移机构的第一实施例。图7的方块图在说明KGC转移机构的第二实施例。图8是处理器实施例的方块图,该处理器实作转移机构的第二实施例。图9是采用KGC作为装置管理器的多核心集成电路,其实施例的方块图。图10是以KGC作为装置管理器的实施例,说明其操作的流程图。图11是采用KGC作为将环0分割成保护区的机构,其实施例的方块图。图12是在具有处理器的集成电路上采用KGC连同可编程逻辑,其实施例的方块 图。
具体实施例方式虽然本发明可进行多种变更并且具有别的形式,此处仍将以附图作为范例,举出 特定的实施例并加以详细说明。然而应了解的是,附图与详细的说明并非用来将本发明限 制在特定的揭露内容;相反地,是打算涵盖在所附的权利要求书的精神与领域内所有的修 改、均等物,以及其它作法。以下叙述乃关于使用已知优良程序代码(KGC)来实作处理器架构上的变更,并且 是采取更具弹性的方式(例如透过执行KGC来仿真该变更)。此外,以下叙述亦关于KGC 其它的应用。在叙述这些应用之前,先来简单介绍KGC。已知优良稈序代码(KGC)简介大致说来,KGC是指一种程序代码,在其有效的寿命期间能防止未经授权的窜改, 并且是仅由通过验证的实体所提供。通过验证的实体可为处理器的制造商所熟识、值得信 赖的实体。举例来说,KGC可通过储存在无法修改的储存体中来防止窜改,其中在储存体与 处理器之间的通讯机构也采用某种方式的保护措施。另一种作法是仍将KGC储存于可被修 改或是未经保护的储存体中,但是在执行之前必须通过密码的验证。KGC可执行在安全执行的计算环境(secure execution computing environment, SECE)。SECE是一种计算环境,其中程序代码(KGC)与其相关资料是不能被同时执行在该 计算机中的其它程序代码所修改或是检阅的。SECE可由处理器的硬件产生(如开机时), 或是在激活后随即执行的软件来产生SECE并将KGC置于SECE内。SECE的例子像是处 理器中的微码(microcode)引擎;一种处理器,用来将KGC从本地安全的非易失性内存加 载处理器的指令与资料缓存(caches)内,并将程序代码与资料锁定在缓存中;以及一种 嵌入式(embedded)的处理器或是别的执行引擎,可从本地非易失性的内存与通讯接口,如 果存在的话,来执行KGC至其它的装置,其中该嵌入式的处理器或是别的执行引擎若非已 经通过了验证、被授权或是很可能经过了编码,便是实体上已受到保护(例如,位于多芯片 (multi-chip)的模块内)。为求明确,当KGC是由处理其它程序代码的同一颗处理器所执 行时,可称为“本地的KGC”(native KGC);当KGC是由像嵌入式处理器的不同处理器所执 行时,称为“非本地的KGC” (non-naive KGC)。如果词汇KGC使用时未注明“本地”或“非 本地”的话,则表示该处内容并无不明确之处,或是本地或非本地KGC皆可使用。图1是某实施例之处理器与相关KGC在概念层次的方块图。如图所示,其含有处 理器10以及KGC的源程序12。视需要可包含加密验证单元14与/或是变更时会受到保护 的内存16。在处理器10与KGC(位于变更时会受到保护的内存16内或是KGC的源程序12内)之间的通讯连结也会受到保护(图1中的组件编号18)。如果处理器10透过受保护的信道18直接连结到KGC的源程序12,而KGC源程序 12的变更会受到保护(即KGC的源程序12不能被任何未经授权的实体所变更),那么就可 以不需要加密验证单元14。授权的实体可包括制造KGC的实体,以及在某些情况下,是处理 器10的制造商。因此,KGC的源程序12包含计算机可以存取的任何储存装置。如果处理器10并没有透过受保护的信道18直接连结到KGC的源程序12,那么KGC 在源程序12内,或是在传输到变更时会受到保护的内存16期间,有被未经授权而窜改的风 险。加密验证单元14可用来验证KGC,确保此种窜改不会发生。举例来说,加密验证单元 14可以使用处理器中用于验证之可信任的根(root of trust for verification,RTV)来 验证KGC。在各式的实施例中可采用任意的验证方案。通过验证的KGC会储存在变更时受到保护的内存16,以供处理器10透过受保护的 信道18来读取。某些实施例还会保护从KGC的源程序12至变更时受到保护的内存16之 间的信道,以及保护KGC源程序12的变更,如此便不需要加密验证的机制了。也会实作此 种实施例的情形像是如果变更时受到保护的内存16,其潜时(latency)较KGC的源程序12 还要小,或是该内存16可提供除了变更保护以外的其它好处(例如较低的功耗,或是在多 处理器系统中进行同时存取,其中每个处理器都具有本地变更时受到保护的内存16,或是 有部分的处理器会共享变更时受到保护的内存16等)。—般说来,变更时会受到保护的内存16可为任何一种被限制或是已经移除可改 变内存16内容能力的内存。具体而言,变更时会受到保护的内存16可限制自身内容的改 变仅可由经过授权者来操作。变更时会受到保护的内存16可实际上被隔离开来,使得只有 经过授权的实体才能改变其内容,或是以别的方式来保护(像是锁定在缓存内存内)。图2至图4是数种KGC源程序可能的实施方式。虽然并无一一列举出来,这些范例 仍描绘出多种可保护KGC至不同程度的实施例。应注意的是图2至图4中的任一实施例, 可视需要采用一个以上的处理器。图2的方块图是某实施例的集成电路20,其包含处理器10与用来储存KGC之非易 失性的内存22。因此非易失性的内存22便可作为KGC的源程序12,同时也是变更时会受 到保护的内存,这是因为它和处理器10 —样被实质上包含在同一个集成电路20当中。也 就是说,非易失性的内存22无法在集成电路20以外被存取,并且用来存取内存22的信道 也是实质上被保护的。非易失性的内存22可具有多种实作的方式。举例来说,非易失性的内存22可为 一种只读的内存(read-only memory,ROM)、由电池维持的RAM或是固态内存。其它实施例 的非易失性内存22可能是内存的组合(例如,一种ROM或是别的非易失性内存,以及加载 并锁定KGC的缓存内存)。对于加载并锁定KGC之缓存内存的例子而言,也可由其它的机构 来实作(像是被锁定的项目(entries)便不能因为连惯性(coherency)的缘故而被窥探, 以避免程序代码/资料透过连惯性的机构而被窥视;测试用的埠(ports)与其它不属于标 准缓存查找的存取点,会被停用而无法存取锁定的项目等)。图3是另一项实施例之处理器10与KGC的方块图。在图3的实施例中,处理器 的集成电路24(含有一或多个处理器10)被包含在具有非易失性内存22的多芯片模块 (multi-chip module,MCM)26内。在某些情况下,处理器10可以仍然执行KGC(本地的KGC),或是提供一种执行引擎28来执行KGC(非本地的KGC)。执行引擎28可和处理器的集成电 路24进行通讯。某实施例中,该执行引擎28与非易失性的内存22可以整合进同一个集成 电路内(例如单芯片系统(system on a chip))。具体而言,执行引擎/非易失性内存的单 芯片系统可以是一种可信赖的平台模块(trusted platform module,TPM)。本实施例的非 易失性内存22能再次作为处理器10的KGC源程序12,并且可能不具有加密验证单元14。 在某些实施例中,处理器的集成电路24内可能有变更时会受到保护的内存(例如锁定缓 存)。在图4的实施例中,处理器10被包括在一种具有内存控制器30、以及储存本地 KGC之内存32 (可为非易失性)的系统中。本例中由于内存32位于处理器10以外,因此本 地的KGC可在加密验证单元14 (例如,位于内存控制器30或是处理器10里面)进行加密 验证。也可能具有变更时会受到保护的内存16(像是处理器10内的锁定缓存)。内存32可以是计算机系统中的基本输出入系统(basic input/output system, BIOS),或是包含在系统内的其它非易失性内存。由于修改架构(architectural modification)而转移至 KGC因为KGC是由通过验证的(可信任的源程序)实体所提供,并且受到保护免于未 经授权的窜改,因此KGC是处理器的制造商可以信任的。故对于尚未以处理器的硬件变更 来实作的架构修改,便可用KGC来实作。采用KGC实作的架构能让使用者(例如程序代码 的作者以及包含该处理器的计算机系统)在扩充的处理器架构以硬件实作之前(或是使用 架构中已经被删除的部分,且该删除部分已经在硬件实作了),便可使用该扩充的处理器架 构。例如对于扩充的处理器架构(像是新的指令、对于现有指令及其执行环境添加新 的功能、添加新的加速器(accelerators)或别的功能区块(functional blocks)在处理器 之内或是与处理器紧密结合(closely coupled)),在以硬件实作之前,可先用KGC来实作。 如果以KGC实作时侦测到扩充的处理器架构有任何定义上的问题,便能在扩充部分用硬件 实作之前先行修正(例如,变更该扩充本身)。从扩充所期待得到的好处(例如,更高的效 能、更低的功耗等)也可从KGC的实作先行评估,之后以硬件实作该扩充时便能有更大的信 心。此外,如果竞争对手使用相同的指令集架构来引进新的功能,也可通过KGC来实作同样 的功能,以快速赶上对手的变化。至于架构中被删除的部分(像是删除不再被广泛使用的指令,或是被认为不再广 泛使用;又或是删除不再需要的传统操作模式,或是被认为不再需要),可使用KGC来实作 被删除的功能。举例来说,如果很久以前的程序代码仍在使用该项功能,虽然效能会较差, 但是该旧程序代码却仍然能够正常运作,因此便能放心地进行删除。使用KGC来实作架构上的修改,可实作一种用来转移给KGC执行的机构。该机构可 包括处理器,用来侦测目前正在执行的程序代码。如果有使用到架构修改的部分,便会执行 KGC以响应该侦测的结果。此处目前正在执行的程序代码是指使用者的程序,虽然该程序 也有可能是具有特权的程序代码(privileged code,像是操作系统或别的特权程序代码)。 转移对于使用者的程序而言是透明的,如此便能就使用者的程序仿真出系统的扩充或是删 除。该机构包含可编程的对映表(programmable map),能利用可被处理器使用的资料来编写程序,用来侦测架构上的修改。编写进对映表的资料会视侦测修改的方式而定。举例 来说,如图5与图6描绘的实施例,该资料可包含全部或是一部分的指令编码(instruction encoding,像是运算码(opcode)、运算码的修饰符(modifier)、操作数的字段等)。该资料 也包括不同的模式指示(mode indication),来自一或多个设置/控制缓存器,用来指示目 前处理器的操作模式。该资料可能还包括执行指令时所产生的地址或是数据,如图7与图8 所描绘的实施例。该数据包括指令编码和执行时期产生的数据/地址,与/或其它在执行 时期可能产生之事件(像是异常(exc印tion)、特殊种类的异常、中断(interrupt)、特殊种 类的中断等)的任意组合。可编程的对映表可以是任意储存体或是储存体的组合(像是可 被处理器的指令所寻址的缓存器、内存的数组等)。图5的方块图展示在被侦测到的指令要进行执行之前,当时之转移机构的实施 例。图5中,使用者的程序包含一项新的指令(对映到某项架构上的扩充)。同样的操作 可能发生在使用者的程序含有被删除的指令,或是含有已经因为架构上的修改而被改过操 作的指令。同样在图5中的还有KGC、使用者程序的状态(State)40、KGC的状态42。使用 者程序的状态40包含处理器的架构状态,对于使用者的程序而言是可见(visible)的(例 如,缓存器的值)。KGC的状态42也包含处理器的状态,但是只有在执行KGC的程序代码时 才是可见的。也就是说,使用者的程序代码无法读写KGC的状态42。因此,KGC的状态42 不但是KGC专用的,也能作为仿真尚未以处理器硬件实作之架构修改的一部分。KGC的状态 42至少包括数个处理器的状态,像是一或多个缓存器。举例来说,缓存器可用来储存KGC产 生或使用的资料,与/或用来储存保留给KGC使用的内存指针(pointer)。缓存器也可以用 来储存控制KGC执行的设置或控制资料。如图5所示,使用者的程序只能存取使用者程序 的状态40 (箭头44),而不能存取KGC的状态42。但是KGC却可以存取KGC的状态42 (箭 头46)以及使用者程序的状态(箭头48)。使用者的程序包含像指令I1、I2、I3等的指令流,如图5所示。通常指令11、12、13、 14、15、16是定义在指令集架构中的指令,并且是由处理器10实作的(称为宏指令(macro instructions))。其中一个指令(图5中的New Inst)可能是根据架构上的修改而新定义 出的指令,并且是由KGC来实作。也就是说,该指令并未定义在目前处理器硬件实作的架构 中。如果任其执行,该指令便会造成处理器10的一个异常。另一种情形是该指令之前已经 被定义过,但是可能可以使用由KGC仿真之架构修改后的新功能。处理器10可含有该指令 执行阶段前的对映(pre-execute mapping,如箭头50),以避免异常(如果有的话)的发生, 并且取出KGC来执行。如箭头50所示,转移至KGC也会启用KGC的状态42,使得对于正要 在KGC内执行的指令而言,KGC是可见的。某些情形中处理器10会提高KGC执行的特权层 级,不但是用来确保KGC能够实施其特定的功能,同时也能保证任何会对使用者的程序造 成异常、但是却不需要执行到KGC的事件,就算在执行KGC时也还是可以让异常发生。因此 会将提高的特权仅限于某些资源、或是整体特权保护方案中的特定部分等等。KGC也包括指令流KGC Il至KGC IN,如图5所示。KGC的指令也是宏指令,并且也 是定义在由处理器10实作的指令集架构中(但却不具有KGC仿真的架构修改部分)。当 KGC的指令执行时便仿真出尚未实作在处理器10内的架构修改。在KGC执行完毕时的指 令,通常会回到使用者程序中新指令的下面一个指令(如图5的15),但是从另一执行点处 继续执行也是有可能的(例如,如果仿真的指令不只一个的话,便是使用者程序中的下一行指令;又如果侦测到错误的话,便是一项异常或是其它的错误处理例程(error handling routine))。同理,KGC也能仿真因为架构上的修改实作于处理器10之后而被删除的功能。例 如若某指令已从架构中删除,KGC便可仿真该指令,使旧的使用者程序仍然可以继续运作。 再者,如果处理器10并未正确地实作出某个指令(像是处理器硬件的错误),KGC也能用来 提供正确的操作。图6的方块图是处理器10的实施例,实作出对于KGC指令执行阶段前的对映。 本实施例的处理器10包括指令的缓存(ICache)60、取码单元(fetch unit)62、译码单元 (decode unit) 64、执行核心66、使用者状态的储存器68、KGC状态的储存器70,以及可编程 的对映表72。取码单元62会连接到ICache 60与译码单元64,并且进一步连接至可编程 的对映表72与执行核心66。执行核心66则是进一步连接到使用者状态的储存器68以及 KGC状态的储存器70。处理器10在执行使用者的程序时,会利用取码单元62从ICache 60处取得指令, 并将取回的指令提供给译码单元64。译码单元64译码该指令后,将已译码的指令提供给执 行核心66来执行。某些情形下译码单元64可能会对使用者状态的储存器68发出读取操 作数的请求(如果是正在执行KGC的话,便为KGC状态的储存器70)。此外译码单元64会连接到可编程的对映表72,其中编程的资料能够分辨出一或 多个要转移给KGC执行的指令。可编程对映表72中的程序会在处理器10开机时、于执行 任何使用者的程序前进行编程。可编程的对映表72可视编程的需要而由指令来寻址,或是 由硬件的电路从计算机系统指定的位置读取对映表后,再写入可编程的对映表72内作为 预备处理器10来执行指令的一部分。本实施例中储存在可编程对映表72内的资料,能分辨出全部或是一部分要 转移给KGC执行的指令,像是指令可能会用到的运算码字段、修饰符、操作数的说明符 (specifier)等。此外在某些实施例之可编程对映表的资料可包括不同的模式指示。如果译码单元64侦测到某个指令是指明在可编程对映表72中,译码单元64会放 弃该指令(以及使用者程序流内的后续指令),并且发讯号给取码单元62去取出KGC (见图 6的取出KGC讯号)。本地的KGC,举例来说,可被锁定在ICache 60内。另一种作法为,将 本地的KGC放在同一枚芯片中的非易失性内存内或是同一个MCM中,又或是在隔离开的系 统内存中。其它实施例的译码单元64可能会发讯号给像是图3中的外部执行引擎,来执行 非本地的KGC。译码单元64可包含任意的译码电路。译码单元可含有一或多种硬件的译码器,配 置成用来译码指令(若具备不只一个译码器,便会对不同的指令平行译码)。对于更复杂的 指令,译码单元也可以包括一种微码单元,配置成用来派送(dispatch)微码的例程。执行核心66可具有任意的执行设置(像是超纯量(superscalar)、超管线 (superpipelined)、有序(in-order)、无序(out-of-order)等)。此外执行核心 66 只有在 本地的KGC正在执行时,才允许存取KGC状态的储存器70。使用者状态的储存器68与KGC 状态的储存器70各具有任意的半导体储存装置(缓存器、缓存器档案(register file)、内 存数组等)。图7的方块图说明转移机构的另一项实施例,处于所侦测出的指令(要转移给KGC执行的指令)开始执行之后或是正在执行当中。和图5 —样,图7描绘了使用者的程序以 及KGC。本实施例中在实作出架构修改的指令被执行以后,其执行时发生的事件可用来侦测 KGC将要被执行了。同样描绘在图7的是使用者程序的状态40以及KGC的状态42,与图5 类似。也和图5类似的是使用者的程序会存取使用者程序的状态40 (箭头44),而非KGC的 状态42。而KGC则会存取KGC的状态42 (箭头46)以及使用者程序的状态(箭头48)。使用者的程序包括像指令II、12、13等的指令流,如图7所示。通常指令II、12、 13、14、IO Inst、15与16是宏指令。指令IO Inst对映到输入/输出(1/0),若不是内存对 映输入输出(memory-mapped I/O)便是IO对映输入输出(in/out I/O, 1010)。IOIO相当 于x86指令集的IN与OUT指令。通常IOIO指令可为能产生I/O周期的任意指令,其中I/ 0周期发生在I/O的地址空间,该地址空间与内存地址空间是分开的,对处理器而言也会认 为是分开的。指令IO Inst会在执行时被处理器侦测到,并透过触发(trigger)事件(箭 头80)转移给KGC执行。在某实施方式中,触发的事件可为在执行IO Inst时产生的地址。另一种作法是以 执行时被读取或写入的资料作为触发事件,或是执行IO Inst时任何其它的事件,都可作为 触发事件。其它实施例中该指令并不需要是一种I/O指令,只要是能引发一个事件并且可 被处理器10侦测为触发事件即可。其它的触发事件包括定时器逾时、侦测出错误(如ECC 错误)或是机器状态内其它可被侦测的变化。图8的方块图是处理器10的另一项实施例,实作出根据触发事件,在执行时或是 执行后将指令对映给KGC。类似于图6,图8的实施例包括指令的缓存(ICache)60、取码单 元62、译码单元64、执行核心66、使用者状态的储存器68、KGC状态的储存器70,以及可编 程的对映表72。取码单元62会连接到ICache 60与译码单元64,并且进一步连接至执行 核心66。执行核心66则进一步连接到使用者状态的储存器68以及KGC状态的储存器70。在图8的实施例中,执行核心66会连接到可编程的对映表72,该对映表72会对取 码单元62 (或是外部的执行引擎)发出取回KGC的指示。可编程的对映表72能识别出某 地址、一段范围的地址、资料、一段范围的资料、异常、中断等,来在指令的执行期间作为一 种触发事件以转移至KGC。其中的数据也包括用来识别指令(像是运算码与其它的编码) 的数据,并可选择性地连同执行时产生的资料一起用来识别会发生转移至KGC的指令。如 前所述,该资料尚包括不同的模式指示。执行核心66除了发出需要取回/执行KGC的讯号以外,也会对相当于触发事件 的指令进行同步化(在该触发的指令以及所有之前的指令都执行完毕前,暂缓第一个KGC 指令的执行;在KGC执行完毕前,不要执行使用者程序中位于该触发指令之后的指令)。执 行核心66也会在管线(pipeline)的执行阶段前,令译码单元64与其它别的单元去清除 (purge)使用者程序的指令,或是利用该取回KGC的讯号来作为清除的讯号。KGC的其它用途除了前段将KGC用于架构修改的讨论以外,KGC尚有其它的应用。例如图9描绘的集成电路90包括一或多个通用(general purpose, GP)的核心 92A至92N,以及一或多个专用(special purpose, SP)的核心94A至94M。所有的核心皆 整合在单一的硅基板上(或是在其它实施方式里则是包含在MCM中)。GP核心92A至92N 可为类似处理器10的处理器,设计成用来执行定义在指令集架构中的指令。SP核心则可为加速器、添加的功能或是别的装置。举例来说,SP核心可以是对于图形运算最佳化的图 形处理单元(graphics processing units,GPUs)、用来实施加密任务的加密加速器、可信 赖的平台模块、做为电源管理的低功耗/低效能的处理器核心,以及其它需要的装置。如果 包含不只一个SP核心,则每个SP核心都会是不同的。通常SP核心94A至94M会包含除了 GP核心92A至92N以外其它必须的电路。图9实施例的KGC可为一种装置管理器96,用来控制GP核心92A至92N对于SP 核心 94A 至 94M 的存取。KGC 会提供应用程序接口(application programming interface, API)供使用者的程序使用,以便在GP核心92A至92N上执行的时候,能够存取SP核心94A 至94M。因此SP核心94A至94M是会被修改的,包括如何存取这些核心的方式,但是GP核 心92A至92N(以及使用者的程序)却可以不受这些修改的影响。此外KGC的装置管理器 96会处理任务(task)的优先序,以及在GP核心92A至92N之间共享SP核心94A至94M。 举例来说,当需要执行较高优先序的任务时,SP核心94A至94M可处理较低优先序的任务。 KGC的装置管理器96会中断SP核心,储存对映到较低优先序任务的状态,并且开始执行较 高优先序的任务。KGC的装置管理器96具有安全的储存位置,用来存放不同任务的状态,好 让该状态不至于暴露给不相关的使用者程序。也就是说,通过KGC便可让某程序的状态,对 于别的程序而言是隐藏起来的。举例来说,如果某SP核心是一个加密装置,那么加密所需 的金钥以及其它敏感的资料是不相关的其它程序(process)无法看到的。再者,KGC的装 置管理器96也可以仿真成SP的核心,好让该核心可以被移除,或是当所有实体的核心都在 使用中而又收到新的需求时,作为虚拟的核心来执行该需求。KGC的装置管理器96也能控制集成电路90里面,装置的启用或是停用。此项特 征可有许多应用,像是支持“用多少就买多少(pay-as-you-go) ”的模式,启用已经购买的特 征,停用已经过期的特征。也可以在售出时先停用特征,但是于客户另外付费之后再启用。以KGC作为装置管理器96的实施例,用来响应GP核心92A至92N发出之请求的 操作示范,描绘于图10的流程图。图10的方块是为了方便了解,也可以采用其它的顺序。 KGC包含的指令在执行时能实作出图10的流程。KGC会判断被请求的核心是否存在于集成电路90内(决策方块130)。如果被请 求的核心不存在的话(例如,该核心已被移除,或是集成电路90后来的设计未包含该核 心-决策方块130,No接脚),KGC便会仿真该不存在的核心(方块132)。另一种作法为,如 果被请求的核心不在集成电路90中,但是包含处理器的计算机系统里其它地方有均等的 硬件(equivalent hardware)可用,KGC便会和该外部硬件进行通讯,以实施请求的任务。 通过提供存在与否的检查以及核心的仿真,KGC便能让依赖SP核心94A至94M才能执行的 程序仍然正常运作,即使这些SP核心并不存在。如果集成电路90具有该被请求的核心(决策方块130,YES接脚),KGC会判断 被请求的核心94A至94M目前是否可以使用(决策方块134)。某一类型的核心可能不只 一个,如果所请求类型的核心94A至94M其中有任何一个是可用(像是已被启用且正在闲 置)的话,便指定该核心来执行任务。如果被请求的核心94A至94M是可用的话(决策方 块134,YES接脚),KGC会编程该核心去执行被请求的任务(方块136)。该任务完成以后 (决策方块138,YES接脚),KGC会通知请求的程序(requestor)(方块140)。判断任务的 完成可具有不同的形式。举例来说,KGC会轮流询问(poll)指定的核心94A至94M,或是由指定的核心在做完时发出中断。如果该完成的任务强占(preempt) 了核心上别的任务(决 策方块142,YES接脚),KGC会从安全的储存器处,安全地传送被强占任务的任务状态(task state)(方块144),并且编程核心去实施该项请求(方块136),从储存的状态开始依照前述 的方式,继续往下执行。安全的储存器可以是KGC的分配资料储存空间,除了 KGC以外其它 的程序代码是看不到的(像是分配的资料缓存储存器、可写入的NVRAM储存器等)。如果 该完成的任务并没有强占别的任务,并且尚有任务等待被执行(位于安全的储存器中-决 策方块146,YES接脚),KGC便会从安全的储存器,安全地传送该等候执行之任务的任务状 态(方块144),也会编程核心使其执行该正在等待的任务(方块136),然后依照前述的方 式运行。如果被请求的核心无法使用(决策方块134,NO接脚),KGC会判断被请求的核心 是否正在执行比该请求的任务之优先序还要低的任务。任务优先序的指定方式可采用任意 的优先序方案(priority scheme)。该方案可和被请求的任务有关(例如有些类型的任务, 其优先序较其它类型高),或是根据发出请求之使用者程序的相对优先序来指定。如果核心 94A至94M正在执行低优先序的任务(决策方块148,YES接脚),KGC便会强占该低优先序 的任务,而执行高优先序的任务(方块150)。KGC会安全地传送被强占任务的状态至安全 的储存器,故该状态对别的使用者程序而言是隐藏起来的(甚至对于发动请求的使用者程 序也是如此)(方块152)。之后KGC便编程该核心来执行请求(方块136),如前述的方式 运作。至于如果没有任何核心正在执行低优先序任务的话(决策方块148,NO接脚),KGC 便将该任务的请求状态储存在安全的储存器内,等待可以使用的核心(方块154)。另一种 作法是必要时由KGC仿真出被请求的核心。KGC的另一项应用与x86(或是IA-32,以及像是AMD-64 的扩充)指令集有关。 x86指令集是透过四个层级的特权方案来控管特权。最高特权层级被称为环0 (ring 0),通 常对于操作系统的核心运作而言是必要的。在环0执行的任何任务会影响到机器中的任一 状态,甚至是该任务不应该存取到的状态也会受到影响。环0的设置会让有问题的程序代 码对不相关的运作造成问题,同时也有安全上的考量。KGC可通过分割环0的方式来解决这些问题。图11便描绘出此种分割,其中环0 被绘制成圆100,而直线102A至102C则表示分割。当属于某分割的程序代码试着要存取不 属于该分割的资源时,KGC 104会拦截该存取,并且判断该项存取是否被允许。举例说明, 虚线的箭头106表示从某分割处欲存取另一分割。该项存取会被改道至KGC104,而非直接 被允许(实心箭头108)。若该项存取被允许的话,KGC会代表请求的程序(实心箭头110) 来执行该存取。采用这种方式便能将各个分割互相隔离。如果某分割被恶意的程序代码渗 透的话,虽然该分割会受到影响,但是对于其它分割而言却能减轻甚至完全不受其影响。图11描绘的分割可以有多种不同的实施方式。例如对于不同的分割指定不同的 内存范围,可通过编程可编程的对映表72来达到。如果有程序代码所在之分割以外的内存 地址产生,便会转移给KGC。同样地,设置/控制缓存器的状态也可以分配给各个分割,通过 编程该可编程的对映表72来侦测出使用不允许的缓存器作为操作数的情形,根据目前的 分割而对设置/控制缓存器的存取加以限制。尽管KGC可用来实作新的架构特征,但是在某些情形KGC本身却不能提供如硬件 实作一般的效能。实施例中KGC会管理可编程逻辑单元的接口,其包含在具有处理器的集成电路中。指派给KGC的功能里至少有部分是可以由可编程逻辑单元来实作的,因此便能 具有较高的、“像硬件般”的速度来执行。至于其它的功能仍由KGC本身来实作。图12的方块图是集成电路120的实施例,其包括处理器10(含使用者状态的储 存器68与KGC的状态储存器70)以及可编程的逻辑单元122。图12里还有KGC的源程序 12,用来储存KGC以及至少一项可编程逻辑的设置124A。某些情形中也会储存额外的可编 程逻辑设置,像是可编程逻辑的设置124B。可编程逻辑的设置会利用程序的接口(图12中的“程序接口”)来加载可编程的 逻辑单元122。该程序的接口会和集成电路120的外部输入/输出隔离开来,因此只能够由 执行在处理器10上的KGC来编程。KFC会从KGC的源程序12读取设置124A或124B,并透 过程序接口将设置写到可编程的逻辑单元122内。某些实作中会在开机时选出可编程逻辑单元122的设置,并且同样在开机时由 KGC将设置加载可编程的逻辑单元122并且一直保留下去。其它实作里可编程的逻辑单元 122在运作时是会变动的,像是从KGC的源程序12中,选出别的设置来编程可编程的逻辑 单元122。此种设置中程序逻辑单元122的运作会根据KGC正在执行的任务而改变。举例 来说,如果KGC包括两个能得益于可编程逻辑单元122的、进行密集计算的任务,比较常被 使用的该项任务,其设置便会加载可编程逻辑单元122内。如果有别的任务(尚未加载可 编程的逻辑单元122)请求的话,便会变动可编程的逻辑单元122。另一种作法为只有在别 的任务有更频繁的请求下,才会改变可编程的逻辑单元122。KGC可能会以软件来执行该任 务,直到做出要改变可编程逻辑单元122的决定为止。可编程的逻辑单元会接收输入(图12的InW:n])并且产生输出(图12的 0ut
)o该输入源自KGC状态的储存器70,而该输出也是由KGC的状态储存器70接收, 如此便为KGC提供一种机构,可以驱动可编程的逻辑单元122并且接收其运算结果。例如, 输入与输出可以对映成KGC状态储存器70内之缓存器的位。可编程的逻辑单元122可由任意类型的非永久性可编程逻辑(non-permanent programmable logic) PJi^S^1, ^τ^^ ^^^^Λ^ ^ (field programmable gate array, FPGA)或是复合式可编程逻辑装置(complex programmable logic,CPLD)技术。也可以使 用闪存、可擦除的只读内存或是随机存取内存技术。娴熟此技术者在完全了解以上的揭露内容后,对于本发明无数的变化与修改便能 一目了然。以下的权利要求书是打算解释成包含所有此类的变化与修改。
权利要求
一种集成电路,包括至少一个处理器核心;至少一种其它电路;以及一种已知优良程序代码(KGC)的源程序,配置成用以将已知优良程序代码提供给该处理器核心来执行,其中已知优良程序代码包括用于其它电路的接口程序代码,通过该接口程序代码能让在该至少一个处理器核心上执行的应用程序,经过该已知优良程序代码而连接到该至少一种其它电路。
2.如权利要求1所述的集成电路,其中,该已知优良程序代码包括装置管理器,被配置 成用以管理对于该至少一种其它电路的存取。
3.如权利要求2所述的集成电路,其中,该至少一个处理器核心包括多个处理器核心, 以及其中该装置管理器是配置成用来管理该多个处理器核心对于该至少一种其它电路的 存取。
4.如权利要求3所述的集成电路,其中,该装置管理器是配置成用来安全地储存从该 至少一个其它装置而来的状态,其和在该多个处理器核心其中之一上执行的一个程序有 关,并且该装置管理器将和其它程序相关的状态,加载到该至少一种其它电路中。
5.一种方法,用于包括至少一个处理器核心以及至少一种其它电路的集成电路,该方 法包括在处理器核心上执行已知优良程序代码(KGC),其中该已知优良程序代码包括用于其 它电路的接口程序代码,通过该接口程序代码能让在该至少一个处理器核心上执行的应用 程序,可以通过该已知优良程序代码而连接到该至少一种其它电路。
6.如权利要求5所述的方法,其中,该已知优良程序代码包括一种装置管理器,配置成 用来管理对于该至少一种其它电路的存取,以及其中该至少一个处理器核心包括多个处理 器核心,以及其中方法进一步包括管理该多个处理器核心对于至少一种其它电路的存取。
7.如权利要求6所述的方法,其中,存取的管理包括安全地储存从至少一个其它装置 而来的状态,其和在多个处理器核心其中之一上执行的一个程序有关,以及将和其它程序 相关的状态,加载到该至少一种其它电路中。
8.如权利要求5所述的方法,其中,该至少一种其它电路包括可编程的逻辑单元,以及 其中执行该已知优良程序代码包括了在初始化集成电路的时候,将配置加载到可编程的逻 辑单元中。
9.一种计算机可存取的储存介质,包括已知优良程序代码(KGC),该已知优良程序代 码包括指令,当在包括至少一个处理器核心与至少一种其它电路的集成电路上执行该指令 时,该指令提供一种用于其它电路的接口,通过该接口在该至少一个处理器核心上执行的 应用程序,通过该已知优良程序代码连接到该至少一种其它电路。
10.如权利要求9所述的计算机可存取的储存介质,其中,该已知优良程序代码包括一 种装置管理器,配置成用来管理对于该至少一种其它电路的存取,以及其中该至少一个处 理器核心包括多个处理器核心,以及其中已知优良程序代码会管理该多个处理器核心对于 该至少一种其它电路的存取。
11.一种处理器,包括可编程的映射,配置成用来储存数据,该数据可识别出至少一个指令,对于该指令处理器执行的指令集架构修改还没有定义,其中处理器未执行修改;以及耦合至该可编程的映射的电路,其中该电路配置成用来检测指令以及引发转移至已知 优良程序代码(KGC),其中该已知优良程序代码会被保护而不受未经授权的修改,并且是由 通过验证的实体所提供,以及其中该已知优良程序代码包括在执行时可以仿真出该修改的 程序代码。
12.如权利要求11所述的处理器,其中,该电路配置成在该指令到达该处理器的执行 阶段之前弓I发转移至已知优良程序代码。
13.一种方法,包括编程数据进入处理器,该数据识别出至少一个指令,其中至少一个指令包括通过处理 器执行的指令集架构的架构修改已经被定义的至少一个指令;以及响应该数据,检测程序代码序列的该至少一个指令;以及引发转移至已知优良程序代码,其中该已知优良程序代码会被保护而不受未经授权的 修改,并且是由通过验证的实体所提供,该已知优良程序代码包括在执行时可以仿真出该 修改的程序代码。
14.如权利要求13所述的方法,其中,该检测与该引发在执行该指令期间发生。
全文摘要
在一实施例中,处理器包含可编程的对映表及电路。可编程的对映表是配置成用来储存数据,该数据可识别出至少一个指令,对于该指令处理器执行的指令集架构修改还没有定义,其中处理器未执行修改。该电路配置成用来侦测指令或其内存的操作数,并且引发转移至已知优良程序代码(KGC)。其中的KGC会被保护而不受未经授权的修改,并且是由通过验证的实体所提供。KGC包含在执行时可以仿真出该修改的程序代码。在另一实施例中,集成电路则包括至少一个处理器核心、至少一种其它电路,以及配置成用来将KGC提供给处理器核心执行的KGC源程序。已知优良程序代码包括用于其它电路的接口程序代码,通过该接口程序代码能让在至少一个处理器核心上执行的应用程序,经过该已知优良程序代码而连接到至少一种其它电路。
文档编号G06F21/00GK101999123SQ200880124786
公开日2011年3月30日 申请日期2008年12月3日 优先权日2007年12月17日
发明者A·罗森, G·D·希尔曼, G·H·辛普森, G·斯特龙金, R·芬德森 申请人:先进微装置公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1