首页> 中国专利> 局部仿真环境中从源指令集架构代码向转换后代码的转换

局部仿真环境中从源指令集架构代码向转换后代码的转换

摘要

在一个实施方式中,处理器可以在多种模式中进行操作,包括直接执行模式和仿真执行模式。具体地,处理器可在局部仿真模型中进行操作,其中,在直接执行模式中直接处理源指令集架构(ISA)指令并在仿真执行模式中处理由仿真引擎生成的转换后代码。实施方式还可通过使用存储在处理器的一个或多个存储器中以及系统中的其他位置处的信息来提供模式之间的有效转移。描述并要求了其他的实施方式。

著录项

  • 公开/公告号CN102110011A

    专利类型发明专利

  • 公开/公告日2011-06-29

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201010609068.1

  • 申请日2010-12-23

  • 分类号G06F9/455;

  • 代理机构永新专利商标代理有限公司;

  • 代理人刘瑜

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 02:43:19

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-12-13

    未缴年费专利权终止 IPC(主分类):G06F9/455 授权公告日:20150812 终止日期:20181223 申请日:20101223

    专利权的终止

  • 2015-08-12

    授权

    授权

  • 2011-08-10

    实质审查的生效 IPC(主分类):G06F9/455 申请日:20101223

    实质审查的生效

  • 2011-06-29

    公开

    公开

说明书

背景技术

现代微处理器是大多数计算机系统的核心。通常,这些处理器通过接收指令并响应于这些指令来执行操作而工作。对于应用程序和操作系统(OS)的活动,可在处理器中接收指令,然后该处理器将这些指令解码成适合在处理器硬件上执行的、一个或多个更小的通常称为微指令(uops)的操作。一些处理器缺少用于直接执行某个指令集架构(ISA)的指令的硬件部件。由于这个原因,指令被解码成能够在硬件上直接执行的uops。

一个可选的实现方式是使用共设计(co-designed)虚拟机(VM),在该共设计虚拟机中,结合处理器硬件来设计仿真软件层。共设计VM实现被称为源ISA的标准ISA,例如x86 ISA。包括OS和应用程序的常规软件被编译成源ISA。继而,共设计VM的硬件实现目标ISA,该目标ISA针对具有特殊性能和/或能效特征的给定硬件实现而被专门设计。目标ISA与uops处于同一等级,并可等同于uops集。

属于共设计VM的仿真软件通过解释应用程序/OS源ISA软件或者通过将应用程序/OS源ISA软件直接转换成优化的目标指令序列来指示应用程序/OS源ISA软件的执行。这种转换保证了性能增益和/或改善的能效。

仿真过程通常如下进行。当第一次遇到代码(源ISA指令)时,对该代码进行解释。然后,当通过动态概要描述或某个其他方式发现被频繁执行的代码区(热点)时,可将它们转换成目标ISA。经常将优化作为转换过程的一部分来执行;并可以在后面进一步优化被非常频繁使用的代码。将已转换的代码区保存在转换高速缓存中,以便能够再次使用这些代码。转换高速缓存由仿真软件来管理,并且保存在对所有应用程序/OS软件隐藏的存储器的扇区中。应用程序/OS软件保存在常规(可见)存储器中。

前面提到的采用共设计VM的处理器实现使用全仿真,其中仿真软件仿真所有的应用程序/OS软件。全仿真的一个缺点是在执行代码之前必须首先对所有代码进行解释和/或转换,当第一次遇到一个软件区时,这会导致低性能。

附图说明

图1是根据本发明一个实施方式的包括处理器和存储器的共设计环境的框图。

图2是根据本发明一个实施方式的仿真引擎的部件的框图。

图3是根据本发明一个实施方式的方法的流程图。

图4A示出了根据本发明一个实施方式的转换后援缓冲器(TLB)条目。

图4B示出了根据本发明另一实施方式的可选的TLB条目。

图5是根据本发明一个实施方式的比特矢量结构和TLB的框图。

图6是根据本发明一个实施方式的用于访问直接哈希表的直接哈希操作的框图。

图7是根据本发明一个实施方式的处理器的框图。

图8是示出了根据本发明一个实施方式的操作的框图。

图9是根据本发明另一实施方式的处理器的框图。

图10是根据本发明一个实施方式的仿真引擎的操作的流程图。

图11是根据本发明一个实施方式的系统的框图。

具体实施方式

在各种实施方式中,局部仿真可在诸如共设计微处理器这样的处理器中实现。为了实现局部仿真,处理器可具有两种模式,即第一模式和第二模式。在第一模式中,处理器直接执行源ISA的指令,在一个实施方式中,源ISA的指令可以是源ISA代码(例如,用于英特尔体系架构(IA)TM处理器的ISA的x86代码),在第二模式中,处理器执行目标ISA的指令(并且其可处于uop等级,绕开处理器的指令解码器),目标ISA的指令可以是存储在诸如代码高速缓存这样的转换高速缓存中的转换和优化后的代码。如本文所使用的,第一模式可被称为“直接模式”或“直接执行模式”,第二模式可被称为“仿真模式”或“仿真执行模式”。

这样,在通常的方式中,可经由uops来提取并直接执行应用程序/OS软件的一些部分,而应用程序/OS软件的其他部分则通过转换成目标指令集得到仿真。该过程称为局部仿真。通过采用局部仿真,可首先采用良好的性能来直接执行软件,并然后基于概要信息,将所选择的被频繁执行的区域转换并存储在转换高速缓存中。该方法具有在第一次遇到软件时避免性能损失、同时为被频繁执行的软件提供性能和/或功效增益的优点。

为了实现局部仿真,可提供一种机制来在保存在常规存储器中的指令的直接执行和经由保存在隐藏存储器中的转换后指令的仿真之间转移控制。从仿真软件到常规应用程序/OS软件的控制转移可通过仿真软件所执行的分支和跳转指令来实现。从常规软件到转换后代码的控制转移可通过“打补丁”来修改常规软件或者通过将分支或跳转放在常规软件中来实现。然而,这些对常规存储器的修改严重地复杂化了源ISA的准确仿真。

本文的实施方式提供了从常规软件到仿真软件的转移,并且不以任何方式对常规应用程序/OS软件进行打补丁或修改。而是,它使用断点机制,其中硬件自动地检测需要转移到仿真的常规软件区域。然后,经由硬件和软件的一些组合,仿真过程实现向保存在转换高速缓存中的仿真代码的转移。

在直接模式期间,当到达存在转换的指令指针(IP或EIP)时,处理器可以切换到仿真执行模式并直接跳转到存储在转换高速缓存中的转换,或者可以快速陷入(trap into)仿真引擎中。然后,仿真引擎可之后经由一个或多个表格、缓冲器或高速缓存(例如哈希表)来查找转换入口地址以完成该转换。

不同的硬件实现是可能的。在一个实施方式中,支持快速的原始向仿真执行转移的硬件技术可使用“源IP到转换后IP”表。在这种结构中,仿真引擎可存储源ISA代码地址以及针对其在转换高速缓存中的位置的相应的转换地址(目标地址)。在各种实施方式中,这种表格(和/或它的部分)可存储在不同位置中。然后,如果源IP与表格条目相匹配,则处理器可跳转到该转换。然而,这种全关联硬件结构可能尺寸太小从而不能应付从未被转换的代码到转换后代码的可能数千条路径。因此,该表格可用作性能优化,但不能作为完全解决方案。

由于存在着进入转换的数千个入口点,所以每当控制到达其中一个入口点,实施方式就能够快速地转移到这些转换。由于在长的范围内控制流通常是不可预测的,所以这种转移是复杂的,因为很难预测接下来将到达哪个入口点。因此,实施方式确定是否存在当前EIP可用的转换,并且如果存在则如何找到该转换的入口地址。

在一个实施方式中,断点高速缓存可在硬件中实现,并且断点表可由仿真引擎来管理。当需要时,仿真引擎从该表向高速缓存复制条目。进一步的实施方式可包括与指令转换后援缓冲器(TLB)条目相关联的断点比特,当形成指令TLB条目时,仿真引擎从断点表向指令TLB中复制条目。作为优化,断点比特可与仅执行比特相组合。进一步地,断点比特可与指令高速缓存行相关联,当将新的行引入指令高速缓存时,硬件从断点高速缓存复制条目。

为了进一步理解各种实施方式的操作,示出了根据本发明实施方式的被实现为共设计虚拟机的处理器的部件是有意义的。如图1所示,共设计环境10包括处理器5和存储器20,在一个实施方式中,存储器20可以是诸如动态随机存取存储器(DRAM)之类的系统存储器。如图所示,处理器5可以具有给定的微结构,并可通过例如点对点互连、总线的方式或其他这样的方式耦合到存储器20。在存储器20的可见部分,即第一部分30中,可存储一个或多个操作系统35和应用程序38。该部分被称为“可见”,是因为它对用户级代码(即应用程序38)和OS(OS 35和程序38)是可见的。取决于要在这些程序中执行的指令的类型,例如可通过使用存在于处理器5中的指令解码器来处理这些指令的方式,来与处理器5进行直接通信。

可替换地,对于可使用转换后代码来优化的各种代码序列或对于在其中不提供微架构支持的这种序列,实施方式可使用存储器的隐藏部分,即第二部分40,以向处理器5提供转换后代码。具体地,如图所示,OS 35和应用程序38都可与仿真引擎45进行通信,仿真引擎45可包括包含解释、转换和优化机制的运行时执行单元。注意,隐藏存储器40对OS或应用程序不可见或不可访问。这样,仿真引擎45可向转换高速缓存48提供代码和地址信息,转换高速缓存48可包括可被提供给处理器5以用于执行的转换后代码。在一个实施方式中,可对存储在转换高速缓存48中的代码进行加密。可针对处理器的底层微架构来写和优化该转换后代码,例如目标ISA代码。

如图所示,可以是共设计处理器的处理器5包括诸如可直接从OS或应用程序接收指令的指令提取器6这样的前端单元。可使用解码器7来对这些指令进行解码,这些指令可以是例如对应于应用程序的用户级指令的宏指令,解码器7可操作来对指令进行解码并访问例如存在于处理器5的微代码存储器中的相应uops。继而,解码器7可将uops提供给一个或多个执行单元8,执行单元8可包括各种算术逻辑单元(ALU)、专用硬件和其他类型的运算单元。如果没有错误或异常出现,那么可将这些指令的结果提供给引退(retirement)单元9,引退单元9操作以引退指令并因此按照程序顺序将这些结果存储到处理器的结构状态。虽然被描述为有序机器,但是也可使用乱序机器来等同地实现这些实施方式。

通过使用图1所示的局部仿真模型,这些实施方式可提供有效的操作,在图1中,可在处理器5的底层硬件上直接执行源ISA代码并仅为有限数量的代码,例如所谓的“热”代码,提供仿真支持。也就是说,由于可在底层硬件中直接执行指令,所以仿真不位于关键路径上并且不增加应用程序启动延时。这样,可避免与解释(其可能具有非常大的开销)和转换相关联的开销。相反,仅针对被频繁执行的代码来执行转换,并且在一些实施方式中,可以以相对低的优先权在后台进行转换。在完成了到目标ISA的代码转换并在转换高速缓存(例如,图1中的转换高速缓存48)中存储之后,可在底层硬件上直接进行目标ISA代码的执行。

更进一步地,在某些情况下,仿真引擎可退出并且不执行转换。例如,对于诸如不断地自我修改的热代码这样的困难情况而言,仿真引擎可选择不转换这种代码以避免这种转换中所涉及的复杂性。不对代码进行转换的类似决定出现在其他复杂特性中,例如传统的实模式或环0代码(ring 0code)。相反地,在各种实施方式中,例如可通过指示代码的频繁执行的概要信息等的方式来为性能关键的用户模式代码(即这种代码已经被确定为是热代码)预留转换。

在各种实施方式中,如果给定代码段的执行频率满足门限水平,则仿真引擎可以执行转换。作为示例,可以设置门限,以在某个时段中已经对代码执行了至少门限次数时发起二进制转换。而且通过如此实现,转换高速缓存空间需求可以相对小。

通过使用根据本发明实施方式的局部仿真,可以有效地实现指令集扩展,而不需重新设计底层的处理器硬件。例如,考虑被添加进ISA作为扩展的图形指令。可以以全透明的方式来动态地转换和优化对这些指令的频繁执行。如果给定的应用不包括任何这样的指令,则它们将继续在底层硬件上运行而不需任何开销。更进一步地,通过使用根据本发明实施方式的仿真,可以实现对不受底层微架构支持的新指令的快速仿真。

在从常规存储器中的源代码向转换高速缓存中的转换后代码的转移控制中,基本的假设是仿真过程从来不修改(例如通过使用补丁来修改)常规存储器中的指令。由于源指令空间不能被修改,所以提供了硬件实现的断点,这些断点用于为在转换高速缓存中存在转换的源指令区进行标记。然后,在直接执行期间,如果未被转换的源指令流进入转换后代码区,则该断点将强制把控制转移到仿真引擎,该仿真引擎然后能实现向转换高速缓存中的适当目标指令的转移控制。

这样,断点指示符或比特就与保存源ISA指令的常规存储器中的地址相关联。断点比特可被分配给特定的字节地址,或者可被分配给更大区域的地址,例如128字节。也就是说,对于指令存储器的每个128字节程序块(chunk),可以存在着单个断点比特。在一个实施方式中,程序块的大小与指令高速缓存行的大小相同。

断点比特保存在存储在隐藏存储器中的断点表中,并由仿真引擎软件维护。这样,断点表是可用多种方式实现的软件数据结构。例如,它可以是哈希表。如果任何源指令的IP值对应于转换高速缓存中的转换后代码区的入口点,则将对应于存储器的源指令程序块的断点比特设置为1。

如果在直接执行期间,指令撷取分支或跳转到其IP地址被包含在存储器的设置了断点比特的程序块中的指令,则存在着控制的立即转移或者存在着进入仿真引擎的断点陷阱。

在对仿真引擎的陷阱出现之后,仿真引擎可以使用存储在源ISA指令位置与相应的转换后代码之间的映射的映射表,如果存在的话。这样,可以使用该映射表来确定源指令的IP值是否对应于在转换高速缓存中存在入口点的代码区。如果是,则仿真引擎分支到转换高速缓存中的入口点。如果映射表中不存在这样的条目,则仿真引擎返回该IP值处的源ISA代码,并且硬件恢复直接执行。转换可能不存在于映射表中的原因在于断点比特为程序块粒度,并且给定程序块中的IP值可以对应于多个转换高速缓存入口点地址。可以存在仅针对实际上对应于转换后代码区的入口点的那些IP地址的映射表条目。

在各种实施方式中,处理器可以包括硬件断点高速缓存,以存储最近使用的断点表条目。如上所述,断点表中的条目由仿真引擎在代码区被转换并被放在转换高速缓存中时创建。当断点高速缓存中存在未命中(以及对仿真引擎的微陷阱)时,仿真引擎可以通过从断点表向断点高速缓存中复制断点比特来管理断点高速缓存的内容。

不同的实现方式是可能的,下面将参照下述的各个附图来进行描述。现在参照图2,仿真引擎10可以包括各种部件,仿真引擎10可以存储在隐藏存储器(例如,系统存储器的隐藏部分,其被隐藏以免被用户级应用程序和系统软件访问)中。具体地,如图2所示,仿真引擎10可以包括可被配置来接收给定处理器类型(例如x86处理器)的进入源ISA指令的解释器/转换器/优化器(通称为转换器)20。转换器20可以首先为最近遇到的源ISA指令生成解释指令。然后,当确定这些指令会被频繁执行时,转换器20操作来将这些指令转换成转换后代码,即目标ISA指令,可以针对处理器的各种微架构特征来对其进行优化,并从而在创建模式(build mode)中操作,其中,转换后代码在创建模式中生成的。当然,除了指令,还可以向转换器20提供各种信息,包括例如概要信息、门限和其他控制信息等,以帮助优化和转换ISA指令。这样,转换器20的输出为可以是目标ISA指令的转换后代码,例如以优化后的uops的形式。该代码被提供并存储在代码高速缓存(也称为转换高速缓存)中,在一个实施方式中,其也可以存在于系统存储器的隐藏部分中。

在代码执行期间,仿真引擎10可以接收信息。当确定要被访问的地址(例如,代码地址)被指示为受仿真引擎控制时,将该地址提供给地址哈希运算器40,该地址哈希运算器40可以对该地址执行哈希化从而向直接哈希表50输出哈希值,该直接哈希表50可以是存储在隐藏存储器中的哈希表。该从地址哈希运算器向直接哈希表的跳转可以表示处理器控制流跳转入转换后代码中。直接哈希表50的给定条目将通过使用哈希值来进行访问,并且如果用于相应地址的有效信息存在于该条目中,则通过使用存储在直接哈希表50中的代码,转换后代码的执行可以立即开始。在该条目的结束处,向其它的转换后代码的跳转可以向代码高速缓存发送控制,以访问该其它的转换后代码。

给定地址的有效的转换后代码不存在于直接哈希表50中也是可能的。因此,可以将导致处理器控制流中的跳转的信号发送给运行时执行单元30以指示该状况,以便该单元可以通过使用存储在哈希表60中的信息来确定相应的转换后代码的位置,该哈希表60可以是用于所有转换后代码入口点的完整的哈希表。该哈希表可以存储在隐藏存储器中的另一部分中。一旦在该存储器中出现命中,可以将地址发送给代码高速缓存以开始转换后代码的执行。虽然用图2的实现方式中的特定实施方式进行了说明,但是应当理解,本发明的范围并不局限于此。例如,如下文所讨论的,除了哈希表,还可以实现不需哈希化而被访问的其他结构。

在另一实施方式中,断点高速缓存可以与指令转换后援缓冲器(iTLB)相集成。通过使用根据本发明实施方式的仿真引擎,可以实现从原始代码执行向转换后代码执行的平滑转移。现在参照图3,其示出了根据本发明一个实施方式的方法的流程图。如图3所示,方法200可用于确定针对给定地址的转换是否存在,如果存在,则确定该转换的位置。如图所示,方法200可通过在诸如TLB(例如,iTLB)这样的存储器管理单元结构中接收地址来开始(框210)。接下来,可以确定针对该地址的入口是否存在(菱形框215)。如果不存在,则可以执行页漫游(page walk)以获得用于包含该地址的相应页的入口(框220)。

然后,当在iTLB中存在入口时,可以确定相应的入口是否指示存在在包括该地址的页中的转换后代码(菱形框230)。如将要描述的,可以采用各种方式来做出该确定。如果没有指示存在转换后代码,则可以执行常规的存储器访问并可以访问例如系统存储器中的所请求页,以获取所请求地址处的信息(框235)。

如果相反地在菱形框230处确定存在针对所述页中的位置的转换后代码,则控制转向菱形框240。菱形框240处的确定可用于提供对受仿真引擎控制的指示的更细粒度的分析。具体地,在菱形框240处,可以确定是否设置了与该地址相关联的比特矢量条目。如果没有,则控制返回框235,以如上所述那样进行常规存储器访问。当已经设置时,该比特矢量条目指示包含相应地址的程序块(例如,128字节(B)的程序块)包括转换后代码。因此,控制转向框245。

在框245处,可使用该地址的哈希来跳转到直接哈希表中的条目。如下文将进一步讨论的,该直接哈希表可存在于隐藏存储器中。更具体地,可以访问对应于该地址哈希的直接哈希表的给定条目。由于直接哈希表的大小的限制,多个地址可与该表中的单个条目相关联,从而针对该地址的代码或许不存在于该条目中。因此,实施方式可以通过使用存在于所访问条目中的信息来对该地址执行嵌入检查(in-line check)(框250)。根据该检查可以确定该地址是否与该条目相关联(菱形框255)。如果不关联,则控制可以转向仿真引擎处理程序(框265),该仿真引擎处理程序继而访问软件哈希表,该软件哈希表是存储存在于转换高速缓存中的所有转换的映射的完整哈希表。因此,在框270处,可以基于该地址来访问软件哈希表的条目。

仍然参照图3,如果直接哈希表的相应条目与地址哈希相关联,则控制从菱形框255转向框260,在框260处,可以直接继续在该条目中的转换后代码的执行,该条目包括至少一定数量的转换后代码。在该条目的最后,可以跳转到转换高速缓存中的地址以继续进行代码执行(框280)。注意,也可以从框270进入框280,以使用从完整软件哈希表中获取的、转换高速缓存中的地址来开始转换后代码的执行。虽然用图3的实现方式中的特定实施方式进行了说明,但是本发明的范围并不局限于此。

实施方式可以利用现有的存储器保护机制,以便允许仿真引擎以页粒度来获取控制。在一个实施方式中,可以存储另外的指示符(例如,单个比特),诸如指令高速缓存或iTLB这样的处理器结构的每个条目指示该页是否是仿真引擎控制的(例如,在转换代码中包括具有相应转换后代码的代码)。该比特由仿真引擎来管理,并且不是外部可见系统架构的一部分。在一些实施方式中,在硬件中,仿真引擎控制的比特可与执行禁止(XD)比特相组合。换言之,在这种实现中,存在于TLB条目中的单个比特可用于指示转换后代码和执行禁止页两者的存在。在该情况中,仿真引擎拦截所有产生的故障并确定它们是否是真实的(非常罕见的异常情况);仅在前一种情况中,它将把相应故障提交到目标ISA代码的适当故障处理程序。通过下文描述的比特矢量的方式,扩展还可以提供更细粒度的执行控制。

现在参照图4A,其示出了根据本发明一个实施方式的TLB条目的图示。如图4A所示,条目305包括各种字段,其包括用于存储虚拟地址(VA)的VA字段310、用于存储物理地址(PA)的PA字段315、可以存储例如单个比特以指示由存储在PA字段315中的地址所识别的相应页是否包括具有存储在转换高速缓存中的转换后代码的任何代码的仿真指示符字段320。另外,如图4A所示,XD字段325可以存储例如单个比特以指示相应页是否包括执行禁止信息。另外,状态字段330可以包括各种状态信息,诸如属性信息等。图4B示出了根据另一实现的可替换的TLB条目,其中,仿真指示符可与XD指示符相组合,从而降低空间需求。

当在直接模式中处理器从仿真引擎控制的页取指令时,会快速陷入仿真引擎中,该仿真引擎能够之后检索可用转换并跳转到该可用转换。由于效率原因,该重引导到仿真引擎陷阱处理程序可以快速发生,例如比常规的异常情况更快,常规的异常情况需要花费几百个周期来处理。当处理器例如经由iTLB访问来在处理器流水线的前端尽早地确定所访问的代码页是否具有仿真引擎控制的比特设置时,情况是如此的。因此,重引导到仿真引擎陷阱处理程序能够尽早发生,而不需在后端中断流水线以及无需等待直到触发陷阱的分支才引退代码。理想地,该重引导会花费仅几个流水线气泡或者甚至会遭受分支预测。

在局部转换实现中,仿真引擎仅从最热代码页进行转换,例如最热的5%或10%,这将覆盖大部分的热点,除非执行概要非常平坦。因低粒度页级仿真引擎控制导致的潜在低效性会发生。如果热代码的局域性低,则低重复率的代码仅因它恰巧与热代码出现在相同页上而被转换的情况会出现,尽管在直接模式中仅执行这种代码将是更有效的。两种方法可降低这种开销。首先,仿真引擎能够为位于仿真引擎控制页上但具有低重复率的代码生成超轻量转换。例如,仿真引擎能够快速地用相应的uop序列来1∶1地替换原始代码,而不需进行代价高昂的数据流分析或优化。更进一步地,可在运行期间添加用于热点概要的测量模块。

第二,仿真引擎能够使用另外的硬件来支持更细粒度的仿真控制。在一个实施方式中,对于每个代码页,仿真引擎能够保持存储器单元,诸如比特矢量,来为被指示为包括仿真引擎代码的页的子区域指定仿真引擎控制。例如,每个4千字节(K)代码页可以具有一个32比特的矢量,其针对该页上的每个128字节(B)程序块指定是否期望仿真控制。对于存在转换并以其他方式被清零的所有程序块而言,可以设置矢量比特。在直接模式中,仅当IP到达设置了比特的程序块时,处理器才陷入仿真引擎中。如果仅代码页的几个程序块包含热的转换后代码而剩余部分相对冷,该硬件特征特别有用。然后,仅这些程序块触发仿真控制和仿真执行,而其余的程序块则继续以直接模式执行,无需额外开销。

在一个实施方式中,可使比特矢量成为iTLB条目的一部分,例如将比特矢量添加到图4A和图4B所示的状态字段中。这样,作为示例,TLB的每个条目都可用针对相应页用比特矢量来扩展。可替换地,可以使用小的直接映射高速缓存结构。除了iTLB之外,该高速缓存之后也可被访问,iTLB包括每页的单个“仿真引擎控制”比特,如图4A和图4B所示。如果用于页的具有设置“仿真引擎控制”比特的TLB条目在直接模式中被访问,但同时该高速缓存中的比特矢量条目存在,其中对应于所访问程序块的比特没有被设置,则可以抑制陷入仿真引擎中。

现在参考图5,其示出了比特矢量结构与TLB分离的实现方式的框图。如图5所示,进入地址410(例如IP值)可以包括各种部分,包括最高有效部分412、索引部分414以及最低有效部分416。如图所示,最高有效部分412可以对应于提供给iTLB 420的虚拟地址,该iTLB 420包括各种条目以将该虚拟地址与相应的物理地址相关联。在图5的实施方式中,iTLB 420的每个高速缓存条目425都包括VA字段426、PA字段427以及仿真指示符字段428。当然,在一些实施方式中,也可存在诸如状态字段之类的其它字段。如图所示,可将来自指示符字段428的相应仿真指示符提供给控制逻辑440。进一步如图5所示,地址410的索引部分414被提供给高速缓存存储器450,高速缓存存储器450可以是与iTLB 420并行被访问的小的分离的高速缓存。如图所示,高速缓存450的每个条目455都可包括标签部分456,该标签部分456用于确定索引部分414是否与相应的条目相匹配。每个条目455进一步包括矢量部分458,该矢量部分458可包括N个比特,每个比特对应于存储页的一部分。例如,32比特的矢量可以因此将128B程序块与每个对应的比特相关联。当被设置之后,该比特指示页的相应程序块包括转换后代码,而当被清零时,指示不存在这种转换后代码。通过使用所提供的索引,相应条目被访问并且矢量458的给定比特被输出到逻辑440,逻辑440可以使用来自iTLB 420的仿真指示符和矢量458的输出来执行逻辑操作。在一个实施方式中,逻辑440可根据下面的表1进行操作,以确定是否为相应程序块提供仿真引擎控制。

表1

  来自iTLB的仿真指示符  来自比特粒度矢量的比特  结果  1  未命中  是  1  1  是  1  0  否  0  -  否

控制逻辑440的输出可以促使不同的动作发生。在一个实施方式中,来自控制逻辑440的有效控制信号指示存在转换后代码,如果相应条目存在,这可促使IP被哈希化并被提供给直接哈希表以开始执行。或者,处理器控制流可以直接跳转到仿真引擎,例如仿真引擎处理程序。

在各种实施方式中,高速缓存450不需要昂贵的硬件管理,并可由仿真引擎填充。每当陷入仿真引擎而没有针对仿真控制的页的当前程序块的可用的转换时,陷阱处理程序可将针对该程序块的比特矢量条目455插入高速缓存450中以避免进一步的不需要的陷入。取决于一个实施方式中的实现折中,共享的硬件结构可称为“执行保护”和“写保护”(其别名也可以是比特矢量字段,或者作为分离字段而被包含),或者可以实现类似设计的分离结构。

在确定了是否存在可用于当前EIP的转换之后,可以使用快速硬件技术来找到该转换的入口地址。如所描述的,可以陷入仿真引擎中,这允许仿真引擎在软件哈希表中查找转换入口地址。该过程通常花费几十到几百个周期。

为了更快的转换,在一些实施方式中,当iTLB触发了直接模式向仿真执行的转移时,处理器可以直接跳转到转换高速缓存中,而非仿真引擎中。目标地址可由硬件通过使用当前IP经由直接哈希化来生成。在一个实施方式中,可将地址(例如,对应于EIP值)哈希化以获得到直接哈希表中的索引。如图6所示,地址510的最低有效部分(例如,较低的6个比特)被清零并且高位的N个比特用直接哈希表530的基地址来替换,在一个实施方式中,直接哈希表530可以存储在仿真引擎的私有存储器520中。然后,该地址的中间部分(例如,比特6(63-N))为哈希部分并保持不变,从而产生哈希值525。这样,每个64比特的EIP映射到了大小为264-N的哈希表中。在一个实施方式中,每个条目可以具有高速缓存行宽度(例如,64B)。如图6所示,直接哈希表530可以从对应于最高有效比特的基地址532开始,即存在于地址哈希值525中的哈希表基(hash table base)。

该哈希表的每个有效条目都包含转换起点,即当处理器跳转进该表时处理器切换到仿真执行模式并立即开始执行那里的转换代码。然而,由于每个哈希表条目可与多个EIP相映射,所以有可能所存储的转换并不与最原始的EIP相匹配。因此,在一个实施方式中,可将检查嵌入到声称最原始的EIP以及任何其他的相关原始上下文与为其生成的转换相匹配的条目中。如果该声称失败,则将陷入仿真引擎中,该仿真引擎能够之后在其完整哈希表中查找正确的转换入口点。如图6所示,每个条目535都可包括检查部分536和转换部分538,该转换部分538可以是针对相应地址的转换后代码的起点。在转换部分538的结束处,可以存在到转换高速缓存中的其他转换后代码的跳转。

也就是说,转换几乎总是大于高速缓存行,因此不会完全地被包含在哈希表条目中。在一个实施方式中,可在每个条目的结束处提供无条件分支,以跳转到哈希表(例如,存储在转换高速缓存中)外面的剩余转换。如上所述,哈希表530由仿真引擎的转换高速缓存管理部件来维护。哈希表中的空条目可以包含直接跳转到仿真引擎中的指令。对于包含在哈希表中的那些转换(对于剩余转换,如上面图2-3所描述的那样,仍然存在软件哈希表)而言,直接哈希化将从直接模式向仿真执行模式的转移开销几乎降低至零。

注意,原始模式向仿真执行的转移通常不是“热到热”,而是“冷到热”。对于“热到热代码”转移,可以使用链,即转换之间的直接分支。然而,在具有平坦概要(其中,许多代码都具有接近于转换门限的执行频率)的应用中,原始模式向仿真执行的转移可以相对频繁。直接哈希化使得局部转换模型能够针对这种工作负载执行得很好。

在一些实现中,直接哈希化还能够用于加速仿真执行模式中的间接分支的执行。这样,能够避免软件处理程序查找对应于间接分支的原始目标地址的转换地址,因为这些查找代表着运行时间开销的其中一个最显著的种类。为了显著地降低这种开销,实施方式可以存储转换基本块,这些转换基本块是到哈希表的间接分支的频繁的目标。对于相应的间接分支,可以使用特别的分支指令来直接地跳转到对应于原始目标地址的哈希表条目。在一些实施方式中,可将分离的哈希表用于间接分支的不同组,并且诸如条目大小这样的参数是可以改变的。

现在参照图7,示出了根据本发明一个实施方式的处理器的框图。如图7所示,处理器600可以是多级流水线式乱序处理器。图7所示的处理器600具有相对简化的视图,以根据本发明一个实施方式说明用于在原始执行模式与转换执行模式之间进行转移的各种特征。

如图7所示,处理器600包括前端单元610,该前端单元610可用于撷取要被执行的宏指令并准备这些宏指令以便以后在该处理器中使用。例如,前端单元610可包括撷取单元601、指令高速缓存603和指令解码器605。在一些实现方式中,前端单元610还可以包括跟踪高速缓存,以及微代码存储器和微操作存储器。撷取单元601可以例如从存储器或指令高速缓存604中取出宏指令,并将宏指令馈送给指令解码器605以将宏指令解码成原语(primitive),即由处理器所执行的微操作。

前端单元610还包括各种结构,诸如可用于存储转换信息以帮助确定所请求的地址是否具有与其相关联的转换后代码的高速缓存存储器或缓冲器。具体地,这些结构可以包括细粒度高速缓存606、TLB 607以及转换映射缓冲器608。在一个实施方式中,高速缓存606可以是相对小的高速缓存存储器,其可以如图5所示的高速缓存存储器450那样进行配置。这样,该高速缓存存储器可以存储多个条目,每个条目存储至少一个比特矢量,该比特矢量通过指示符的方式为给定存储页的子集提供映射,以指示该相应子集是否具有与其相关联的转换后代码。除了至少一个指示符来指示相应的存储页是否包括转换后代码之外,TLB 607还可以使条目存储VA和PA之间的转换。继而,转换映射缓冲器608可以包括多个条目。该缓冲器可以是相对小的,并可以包括在例如虚拟地址和转换高速缓存中的相应地址之间的直接映射。该缓冲器可以提供到转换后代码的最快路径。然而,由于其尺寸小,所以该缓冲器可能不包括期望的转换。可以根据最近最少使用(LRU)算法来回收映射缓冲器608中的条目,以便最近经常使用(和/或最近最频繁使用)的转换可存储在该缓冲器中,但本发明的范围并不局限于这一点。

在一个实施方式中,通过使用虚拟地址的至少一部分,可以并行访问高速缓存606、TLB 607和映射缓冲器608中的每一个。然而,在一些实施方式中,可以首先访问映射缓冲器608,以便如果存在转换,则可以避免访问TLB 607和高速缓存606的开销。可将这些存储器结构的相应输出(其可以对应于命中信息或未命中指示)提供给控制逻辑609。基于这些存储器的提供给控制逻辑609的输出中的一个或多个,可以确定相应的地址是否包括转换后代码。如果包括,则该逻辑可能还可以确定转换后代码的位置(如果在映射缓冲器608中发生命中)。因此,控制逻辑609可以实现从原始模式到trex模式的快速转移。

仍然参照图7,耦合在前端单元610和执行单元620之间的是乱序(out-of-order,OOO)引擎615,该乱序引擎615可用于接收微指令并准备该微指令以用于执行。更具体地,OOO引擎615可包括各种缓冲器,以对微指令流进行重新排序并分配执行所需的各种资源,以及提供各种寄存器堆(诸如寄存器堆630和扩展寄存器堆635)中的存储位置上的逻辑寄存器的重命名。寄存器堆630可以包括用于整数和浮点运算的单独的寄存器堆。扩展寄存器堆635可以为矢量尺寸的单元提供存储,例如,每个寄存器256或512比特。

各种资源可以存在于执行单元620中,包括例如其他专用硬件中的各种整数、浮点和单指令多数据(SIMD)逻辑单元。可将结果提供给引退逻辑,即重排序缓冲器(ROB)640。更具体地,ROB 640可包括各种阵列和逻辑,以接收与被执行的指令相关联的信息。然后,该信息由ROB 640所检查,以确定这些指令是否能够被有效地引退并且结果数据是否被提交给处理器的结构状态,或者是否发生了防止指令恰当引退的一个或多个异常情况。当然,ROB 640可以处理与引退相关联的其他操作。

如图7所示,ROB 640耦合到高速缓存650,在一个实施方式中,该高速缓存650可以是低级高速缓存(例如,L1高速缓存),但本发明的范围并不局限于这一点。而且,执行单元620可以直接耦合到高速缓存650。从高速缓存650,可以发生与更高级高速缓存、系统存储器等的数据通信。虽然在图7的实施方式中示出了该高级情形,但是应当理解,本发明的范围并不局限于这一点。

这样,实施方式能够实现局部仿真而不需对原始代码打任何补丁,对原始代码打补丁会增加额外的复杂性和潜在的大的性能开销。此外,可使用现有的存储器保护机制来向仿真引擎提供页和/或更细粒度(例如,128B)程序块级的执行控制。此外,为了降低控制转移的延迟,可使用直接哈希化。更进一步地,可另外地或可替换地将“IA-IP到转换后IP”硬件结构用于直接哈希化,以允许转移的小子集的非常低的延迟。

在再一实现中,可使用不同的硬件配置来实现从直接模式向仿真执行模式的有效转移。采用局部仿真,可从常规存储器来直接执行源ISA代码。对未修改的源ISA代码的直接执行意味着在源ISA指令被仿真之前仿真引擎没有机会检查所有的源ISA指令。此外,执行引擎不能直接地(如采用解释)或间接地(通过放在转换后代码中的链接)跟踪它们的执行控制流。这样,在转换之前,应当被转换和/或被优化的源ISA指令(和代码区)就能够得到识别。而且,在指令已经被转换之后,可以提供一种机制来在指令执行继续时在常规存储器中的源ISA指令与代码高速缓存中的目标ISA指令之间转移控制。

这在对每条指令进行解释和/或对指令进行转换时执行。当被检查时,可以针对特别的软件仿真来识别某些操作码,或者可以收集概要数据来识别热点。在一个实施方式中,微陷阱可提供一种机制来使得仿真引擎能够在源ISA代码被仿真之前检查所有的源ISA代码。这些是向仿真引擎直接转移控制的轻量型陷阱。为了最小化它们的开销,没有寄存器被自动地保存,而且依赖于陷阱的起因控制被引向特定的位置。在不同的实施方式中,可以通过所选择的操作码或者通过微定时器来触发微陷阱。

通过选择未被实现的操作码来触发微陷阱,仿真引擎在其中一个操作码被遇到时就立即获得了控制。然后,它可以解释指令,或者如果该指令属于被频繁执行的代码区,则它可以转换并高速缓存该代码区以用于更高性能的仿真。由于未被实现的指令可能趋向于聚集在一起(例如,用于图形),所以单个的转换区可以包含若干未被实现的指令。

为了检测包含未被实现的操作码的热区,仿真引擎可以简单地对特定指令触发微陷阱的次数进行计数。这些计数可保存在概要表中,并且累积的概要信息可用于指引转换和优化决策。

如果局部仿真还正在被用于优化热点代码区,则不管它们是否包含未被实现的指令,都可用微定时器和相关联的微陷阱来通过概要帮助热点检测。在一个实施方式中,微定时器由仿真引擎来设置,并且它每隔一个时钟周期就递减。当微定时器计数达到零时,它等待下一个分支/跳转指令并立即陷入仿真引擎中的预定义位置(即微陷阱)。此时,仿真引擎有机会收集概要数据。它可以针对陷阱位置处的分支/跳转的目的地来创建新的概要条目,或者,如果之前已经遇到相同的分支/跳转,它能够更新概要条目。分支和跳转被挑选出来,因为大部分的二进制转换器都从基本块边界处的区域开始转换。

就时钟周期而言,从常规存储器向代码高速缓存中的转换后代码区的控制转移可以具有相当高的开销。为了降低开销,一些实施方式可以提供所谓的跳转TLB,该跳转TLB是类似于高速缓存的结构,它包含最近使用的映射表条目。能够从指令流水线对它访问,并且它的内容由仿真引擎管理。在正在从常规存储器直接执行源指令的时间间隔期间,所有的分支和跳转目的地地址都索引入了跳转TLB。如果在跳转TLB的条目中存在命中,则该条目在代码高速缓存中提供目的地地址,并且指令撷取硬件立即将控制转移到那个地址。在一个实施方式中,仿真软件如所需的那样通过将映射表条目复制到跳转TLB中来管理该跳转TLB,从而替换最近较少使用的条目。

在一个实施方式中,断点机制和跳转TLB可以一起工作。在仿真引擎已经转换了一块代码之后,仿真引擎将在断点表中设置对应于转换后的源指令的第一行的断点比特。它还在映射表中建立条目。在源代码的直接执行期间,当遇到分支或跳转时会发生多种情况。首先,目的地地址会使它的断点比特被设置,但在跳转TLB中会未命中。在该情况中,对检查映射表的仿真引擎而言存在着陷阱。如果在映射表中存在着条目,则仿真引擎将会将该条目放入跳转TLB中,例如,以替换最近最少使用的条目。然后,它将将控制转移到代码高速缓存。

第二种情况是在跳转TLB中有命中,并且设置了断点比特。在该情况中,根据跳转TLB条目的内容没有断点微陷阱,转移将立即发生。为了促成这种功能,跳转TLB条目可以包括断点忽略标志,以允许分支/跳转继续,而不管断点比特的状态。

第三种情况是当断点比特被清零时跳转TLB未命中。在该情况中,没有微陷阱发生,从常规存储器的直接执行不中断地继续。最后的情况是在跳转TLB中有命中,并且断点比特为零。如果仅如上所述的那样来使用跳转TLB和断点比特,则在执行直接执行时该情况不应该发生。然而,如果跳转TLB被用于将控制从代码高速缓存中的一个转换后区域转移到另一个转换后区域,则该情况可以发生。

现在参照图8,其示出了根据本发明一个实施方式的操作的框图。跳转TLB和断点高速缓存的组合操作如图8所示。如图所示,系统700包括处理器710,该处理器710可以包括一个或多个内核。除了可被用于处理在直接执行代码和转换后执行代码之间的跳转或转移的各种存储器之外,未示出该处理器的其他细节。如图所示,这些结构可包括断点高速缓存710,在各种实施方式中,断点高速缓存710可包括条目,条目具有每指令高速缓存行或其他指令存储器行的单个比特。另外,可以提供映射高速缓存,即跳转TLB 715,其可存储源程序计数器(SPC)和目标程序计数器(TPC)之间的最近被访问的转换。当然,在处理器710中还可以提供其他逻辑。在操作期间,处理器710可以与存储器720进行通信,在一个实施方式中,存储器720可以是包括常规存储器部分730和隐藏存储器部分750的系统存储器。如图所示,常规存储器部分730可以包括各种源ISA代码块,即块A-C。对于这些块中的至少一些块,转换后代码块可以存在于代码高速缓存760中。为了确定是否存在有效的转换后代码,可由仿真引擎775来访问各种结构,包括映射表780,该映射表780可以是包括源程序计数器和目标程序计数器之间的转换的完全表。另外,断点表790可以包括断点比特的全集。

出于讨论的目的,假设块B中的指令正在直接从常规存储器730执行。在该块的最后,存在到块C的源代码目的地C0的分支。块C已经被转换并且被存储在隐藏存储器750的代码高速缓存760中,但是该映射当前没有存在于跳转TLB 715中。这造成了对仿真引擎775的断点陷阱(图8中的动作(1)),因为断点高速缓存710中的断点比特被设置。仿真引擎775访问映射表780,找到该映射,并将该映射放置到跳转TLB 715中(图8中的动作(2))。然后,仿真引擎775跳转到块C的转换后代码(动作(3))。从源块B到C的分支再次出现时,将存在着跳转TLB命中并且转移将立即发生,而不需软件干预(假设跳转TLB条目还没有被替换)。

该示例继续,在转换后的块C、D和E已经从代码高速缓存760执行之后,间接跳转到代码块A。在该情况中,目的地是将被跳转TLB 715拦截的源代码地址,并且控制将立即转移到转换后的块A。当使用跳转TLB时,向转换后代码的控制转移可以发生,而不管TLB中哪个起源分支或跳转命中。这意味着如果存在着都跳转到相同的转换后代码的多个不同的指令,则转换后的目的地块中的寄存器分配和其他结构状态将与所有“起源”块一致。为了处理这种情况,跳转TLB可以包括其他字段以选择起源分支/跳转。

现在参照图9,其示出了根据本发明另一实施方式的处理器的框图。如图9所示,处理器810可以包括各种部件,以实现局部转换。如图所示,根据本发明的一个实施方式,程序计数器845可以接收来自各个位置的输入,并将相应的程序计数器值提供给可以包括断点比特825的指令高速缓存820。在其他实施方式中,断点比特可以不存储在指令高速缓存中。当存在时,当在直接模式中时,可将所访问的指令提供给源ISA解码器850。在所示的实施方式中,可提供绕过解码器850的旁路路径,以避免在目标ISA指令处于uop等级时进行解码。因此,在任一情况中,uop指令都可被提供给处理器流水线860,该处理器流水线860可包括包含执行单元等的各个阶段,以执行所请求的指令。

从图9还可以看出,目的地预测器835可以向跳转TLB 840提供预测。类似地,在指令高速缓存未命中时,可以访问断点高速缓存830来为新插入的行放置断点比特。而且,微定时器870也可以耦合到程序计数器845。还可以看出,取决于执行是在直接执行模式还是仿真执行模式中,可以直接从系统存储器880的常规存储器部分或者隐藏存储器部分提供进入指令。

微定时器870可以用于识别热点区域,以用于对通用源ISA代码实现动态优化(不是仅用于ISA扩展)。跳转TLB 840可以与断点比特一起工作,以提高从常规存储器向隐藏存储器的指令转移的效率。在不同的实施方式中,跳转TLB 840可以用分支目的地地址(来自流水线)或者跳转间接地址(来自寄存器)进行索引。可以使用来自分支的采用(taken)地址或者未采用(not-taken)地址。可通过仿真引擎从断点表对断点高速缓存830进行填充。继而,断点比特825可以与指令高速缓存行1对1地映射。在将相应的行放入指令高速缓存820中时,这些比特可由硬件来放置。然后,它们在取指令时被访问,并在需要时触发断点微陷阱。在不将断点比特放置在指令高速缓存中的实现方式中,断点陷阱可来自断点高速缓存830。在一个实施方式中,微定时器870可由仿真引擎加载并每个周期进行递减。

现在参照图10,其示出了根据本发明一个实施方式的仿真引擎的操作的流程图。在该实施方式中,仿真引擎可以处理扩展的ISA,从而它既可以管理断点比特又可以管理跳转TLB。在启动时仿真管理器被首先置于控制之下以建立它需要的各种表和其他结构,然后它跳转到引导代码。引导代码从直接执行开始(图10中的“开始”)。直接执行从常规存储器910继续,直到遇到未被实现的指令(可能因为ISA扩展)。那时,在框915处,存在着对仿真引擎的微陷阱。

仿真引擎保持对特定的未被实现的指令的频率进行跟踪的软件表。当它发现这种指令频繁出现时,它转换并优化该指令(以及相同区域中的其他指令)(框918)。然后当空间可用时,将该转换后的块放置在代码高速缓存中(框919和970),并对映射表和断点表进行更新以反映该新的转换块。然后,仿真引擎跳转到代码高速缓存中的该转换后的块并且用转换后代码重新开始执行(框925)。

当从代码高速缓存执行时,分支或跳转可以具有位于常规存储器或代码高速缓存中的目的地地址。如果其位于代码高速缓存中,则控制转移简单地发生。如果目的地地址位于常规存储器中,则访问跳转TLB(框930)。如果存在命中,则控制被转移回代码高速缓存,否则控制被转移到常规存储器中的目的地地址(回到框910)。

在从常规存储器执行时,如果存在其目的地地址在跳转TLB中命中的跳转或分支,则控制转移到代码高速缓存中的适当位置。如果存在对仿真引擎的断点微陷阱(即,用断点比特设置对行进行撷取并且存在着跳转TLB未命中(框935)),那么如果映射表存在则仿真引擎根据该映射表来放置跳转TLB条目(框940),并在目标代码地址处继续(框935)。另一方面,如果没有映射表条目,则将控制转移回常规存储器(框910)。如果存在进入高速缓存行的不止一个分支/跳转但不是所有的分支/跳转都具有对应于转换的入口点,则该情况会发生。

最后,如果存在指令高速缓存未命中,则针对未命中的行来访问断点高速缓存(框950),以及如果存在命中,则将断点比特“附着”到新放置的高速缓存行(框955)。注意,在一些实现中,断点比特可以不与该高速缓存行一起放置。如果存在未命中,则存在进入仿真引擎的微陷阱。如果在断点表中存在条目,则仿真引擎之后根据断点表来更新断点高速缓存(框960)。否则,它创建断点表条目并将其设置为零(实际上,这些比特的整个部分被设置为全零)。那时,如果断点比特被设置,则跳转TLB也能够得到更新。一种替换方式(未示出)是返回常规存储器并重新尝试触发了初始高速缓存未命中的指令撷取;那时,如果存在跳转TLB未命中,则将存在着断点微陷阱,并且跳转TLB将在那时得到更新。虽然用图10的实现中的特定实施方式进行了说明,但是应当理解,本发明的范围并不局限于此。

可以以许多不同的系统类型来实现实施方式。现在参照图11,其示出了根据本发明实施方式的系统的框图。如图11所示,多处理器系统1000是点对点互连系统,并包括经由点对点互连1050耦合的第一处理器1070和第二处理器1080。如图11所示,处理器1070和处理器1080中的每一个都可以是多核处理器,包括第一处理器内核和第二处理器内核(即处理器内核1074a和1074b以及处理器内核1084a和1084b),但是可能地更多的内核可以存在于处理器中。处理器内核可以实现局部仿真模型,以便可以执行至少一些转换后代码来改善性能和/或处理不被内核的微架构所支持的指令。

仍然参照图11,第一处理器1070还包括内存控制中心(MCH)1072和点对点(P-P)接口1076和1078。类似地,第二处理器1080包括MCH 1082和P-P接口1086和1088。如图11所示,MCH 1072和MCH 1082将处理器耦合到各自的存储器,即存储器1032和存储器1034,这些存储器可以是本地附着到各个处理器的主存储器(例如,动态随机存取存储器(DRAM))的一部分。第一处理器1070和第二处理器1080可以分别经由P-P互连1052和1054耦合到芯片组1090。如图11所示,芯片组1090包括P-P接口1094和1098。

此外,芯片组1090包括接口1092,以通过P-P互连1039将芯片组1090与高性能图形引擎1038相耦合。继而,芯片组1090可以经由接口1096耦合到第一总线1016。如图11所示,各种输入/输出(I/O)设备1014可以和将第一总线1016耦合到第二总线102的总线桥1018一起耦合到第一总线1016。在一个实施方式中,各种设备可以耦合到第二总线1020,包括例如键盘/鼠标1022、通信设备1026以及可以包括代码1030的数据存储单元1028(诸如硬盘驱动器或者其他大容量存储设备)。此外,音频I/O 1024可以耦合到第二总线1020。

实施方式可以以代码的形式来实现,并可以被存储在其上存储了指令的存储介质上,所述指令可用于对系统进行编程以执行这些指令。该存储介质可以包括但不限于任何类型的盘(包括软盘、光盘、固态驱动器(SSD)、压缩盘只读存储器(CD-ROM)、压缩盘可重写(CD-RW)、以及磁光盘)、半导体器件(诸如只读存储器(ROM),诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)这样的随机存取存储器(RAM),可擦除可编程只读存储器(EPROM),闪存,电可擦除可编程只读存储器(EEPROM),磁卡或光卡),或者适用于存储电子指令的任何其他类型的媒介。

虽然已经参照有限数目的实施方式描述了本发明,但是本领域技术人员应当意识到,可以对其进行各种修改和变形。意在使所附的权利要求涵盖落入本发明实际精神和范围内的所有这些修改和变形。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号