CN101663644A - 用于处理计算系统中的异常信号的装置和方法 - Google Patents

用于处理计算系统中的异常信号的装置和方法 Download PDF

Info

Publication number
CN101663644A
CN101663644A CN200880012658A CN200880012658A CN101663644A CN 101663644 A CN101663644 A CN 101663644A CN 200880012658 A CN200880012658 A CN 200880012658A CN 200880012658 A CN200880012658 A CN 200880012658A CN 101663644 A CN101663644 A CN 101663644A
Authority
CN
China
Prior art keywords
signal
abnormal signal
unit
execution
signal processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200880012658A
Other languages
English (en)
Other versions
CN101663644B (zh
Inventor
保罗·T·诺尔斯
基特·M·万
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN101663644A publication Critical patent/CN101663644A/zh
Application granted granted Critical
Publication of CN101663644B publication Critical patent/CN101663644B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0769Readable error formats, e.g. cross-platform generic formats, human understandable formats
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Hardware Redundancy (AREA)
  • Advance Control (AREA)

Abstract

用于特别是与将由一个计算平台可执行的二进制码转变成替代地由另一计算平台可执行的二进制码的动态转换结合地处理异常信号的方法及设备。在一个示例方面,异常处理单元(195,220,230)选择性地处理与目标状态(320)有关的一些异常信号,并且处理与从目标状态(320)导出的主体状态(330)有关的其他异常信号。多个信号处理子单元(223)被安排来选择性地处理与目标状态(320)有关的异常信号(310),并且输出返回执行或传递异常信号(310)的请求。传递路径选择单元(222)被安排来确定异常信号(310)到多个信号处理子单元(223)的选择的群组的传递路径。信号控制单元(221)被安排来根据传递路径将异常信号(310)依次传递给信号处理子单元(223)的每一个选择的群组,并且(i)其中该信号处理子单元(223)中的各个子单元请求返回执行,然后根据目标状态(320)返回执行;以及(ii)其中该信号处理子单元(223)请求传递异常信号,然后根据传递路径将异常信号(310)传递给信号处理子单元(223)的选择的群组中的随后一个,并且其中在传递路径中不再指定信号处理子单元,然后将异常信号(310)传递至主体侧异常处理程序单元(230)。

Description

用于处理计算系统中的异常信号的装置和方法
技术领域
本发明通常涉及计算机及计算机系统的领域,更具体地,涉及例如在代码翻译器、仿真器及加速器中有用的、用于处理程序代码上下文转换中的异常信号的方法及设备。更具体地,本发明的示例实施例涉及用于与将由一个计算平台可执行的二进制码转变成另一计算平台可执行的二进制码的动态转换结合处理异常信号的方法及设备。
背景技术
中央处理单元(CPU)或处理器位居所有现代计算系统的核心地位。处理器执行计算机程序的指令,因此使得计算机能够执行有用的工作。在现代的生活中,CPU普遍存在于所有形式的数字设备中,而并非只专用于如个人计算机、膝上型计算机及PDA等计算机器中。现代的微处理器出现在从汽车到蜂窝电话到儿童玩具的所有事物中。
因为每种类型的处理器具有其自已独特的指令组架构(ISA),所以出现了这样的问题:由一种类型的处理器可执行的程序代码通常不能在其它类型处理器上执行。因此,程序代码转换已演进到将为一种类型的处理器所编写的程序代码自动转换成可由另一类型处理器执行的代码,或为同类型处理器将旧的且无效率的代码段优化成较新、较快的版本。即,在嵌入式与非嵌入式的CPU中,主流ISA已经存在大量的软件,其可被“加速”以提升性能或“翻译”到能呈现更好成本/性能效益的其它处理器。还发现主流CPU架构被绑在它们的ISA时代,并且在性能或市场范围上无法进展。对于从单机口袋型计算设备到具有数十或数百台强大服务器的大型网络的各层次的计算工业都存在该问题。
作为程序代码转换领域的背景信息,名称为“Program Code Conversion“的PCT公开WO2000/22521、名称为“Method and Apparatus for PerformingInterpreter Optimizations during Program Code Conversion”的WO2004/095264、名称为“Improved Architecture for Generating Intermediate Representations forProgram Code Conversion”的WO2004/097631、名称为“Method and Apparatusfor Performing Adjustable Precision Exception Handling”的WO2005/006106、及名称为“Method and Apparatus for Precise Handling of Exceptions DuringProgram Code Conversion”的WO2006/103395公开了有助于程序代码转换能力的方法及设备,可用于在此讨论的示例实施例中,在此通过引用并入其全部。
一个特定问题与异常信号的处理有关。异常指改变程序中的正常控制流的状态。异常信号指示已经在系统内某处发生需要处理器注意的状态,并且通常需要在可继续处理前先被处理。可以将异常细分成各种不同的类型,如中断、故障、陷阱或放弃。术语在不同架构之间的不同,并且异常的特定类型或种类对于特定架构可能是独有的。
异常信号(通常简称为“信号”)可能由硬件或由软件引起。硬件异常包括如重置、中断或来自存储器管理单元的信号的信号。作为示例,异常可能由于数值错误(如被零除)、由于上溢或下溢、或由于指令解码错误(如特权、保留、陷阱、或未定义的指令),由算术逻辑单元或浮点单元产生。软件异常则在各种不同的软件程序间变化很大,但通常对其应用任何类型的错误检查,其改变程序的正常行为。
信号处理程序(handler)是特殊代码,当在程序的执行期间出现异常信号时,调用该处理程序。然后,该信号处理程序试图解决引起该异常的任何情况,并且如果可能,则继续执行该程序。如果该程序并未为给定信号提供信号处理程序,则将调用默认的系统信号处理程序。
触发异常信号的最常见的事件有当处理试图(i)存取未被映射的存储器区域或(ii)操作其不具有正确权限的存储器区域时。其它触发异常信号的常见事件有(iii)接收从其它处理发送的信号,(iv)执行目前处理不具有权限等级执行的指令,或(v)在硬件中的输入/输出事件。
表1中描述一些代表性的异常信号。从目标计算平台的观点,每种类型的信号具有对应的信号编号,其通常是整数#1、#2、#3等。此外,如表中所示,每个信号都具有容易记忆的符号名称。
  信号编号   信号   描述
#1   SIGHUP   “挂断(Hangup)”-通常用于指示其配置已改变、并且其应重新读取它的配置文件的处理。
  #2   SIGINT   “中断”-通常表示用户已压下Ctrl-C。
#3   SIGILL   “不合法的指令”-当遇到无效的指令操作码时,处理器产生该信号。
  #4   SIGTRAP   “断点”-通常由调试器使用。
#5   SIGBUS   ″总线错误″-通常由处理器产生,用来指示无效的存储器存取。这通常是对未分配的或未校准的(unaligned)存储器地址的存取。
#6   SIGSEGV   “分段违规”-当用户处理试图做某些在用户模式中不允许的事情时,由处理器产生。例如,试图执行有特权的指令或试图写入核心存储器的部分都会引发该信号。
#7   SIGALRM   “警报时钟”-处理可进行警报()系统调用,其请求n秒后传递该信号。
#8   SIGTERM   “终止”-如果不是很不方便,则有礼貌地请求程序考虑退出。
  #9   SIGQUIT   “离开”-坚定地要求程序现在就退出!
#10   SIGKILL   “死亡”-立刻终止处理。该信号不能被信号处理程序拦截。
表1:示例异常信号
异常信号可以来自两个来源:(1)直接来自执行程序或(2)来自操作系统或其它处理。某些异常信号作为程序执行指令的直接结果产生。例如,如果程序执行不合法的操作码,则引发SIGILL。类似地,如果程序尝试不合法的存储器存取,则引发SIGSEGV。这些被称为带内信号。异常信号也可通过操作系统或其它处理外部产生。SIGHUP与SIGALRM为这些的例子。这些外部产生的异常信号被称为带外信号。
从程序的观点,异常信号可在任何时间出现。当出现异常信号时,操作系统中断发出信号的程序的执行,并调用信号处理程序。操作系统通常为所有的异常定义默认的信号处理程序,其默认地接收异常信号,并采取预定的动作或简单地忽略该信号。然而,操作系统保持处理特定的处理表,该表将每种类型的信号映射到登记的信号处理程序。例如,在Unix中,程序可通过调用sigaction()系统调用而超控(override)默认的信号处理程序。Sigaction()允许程序指定在接收到特定异常信号时操作系统应当采取什么动作。该动作可以是:(1)忽略异常信号;(2)调用默认的信号处理程序;或(3)调用特殊的信号处理程序功能,其地址由该程序提供。当在进行sigaction()调用时可指定的其它选项包括在信号处理程序的执行期间阻断哪种其它信号,与CPU可屏蔽某些中断的方式非常相同。
Unix信号处理程序典型地提供有两种原型之一。第一个信号处理程序原型为“void sigHandler(int sigNum)”。第一个自变量(argument)为异常信号的编号,使得可登记一个函数来处理多个信号。程序可通过调用具有SA_SIGINFO标志的sigaction()来请求提供更多信息给该信号处理程序。在该情况,Unix信号处理程序原型变为“void sigHandler(int sigNum,siginfo_tsiglnfo,void*context)”。
第二个参数(″siginfo″)为这样的结构,其包括关于该信号的信息,包括什么引起该信号以及其来自何处的一些指示。例如,在SIGILL信号的情况下,siginfo结构包括不合法指令的地址。该数据对允许该处理恰当地处理该信号是基本的。第三个参数(“context”)在出现该信号时提供对处理器状态(包括所有寄存器)的存取。再次,该数据对允许信号的正确的处理是基本的。该信号处理程序被允许修改此上下文,并且当恢复执行时,然后寄存器被恢复成修改后的上下文的值。
原始程序代码(这里称为“主体代码”)已经根据特定类型的处理器编写,然后,该主体代码需要特定类型的执行环境,并且必须被用于异常信号的处理的适当的机制支持。然而,在程序代码转换之下,替代地该主体代码被转换成目标代码,并且在目标计算系统上执行。现在,当出现异常时,难以提供适当的机制来处理该异常。
在程序代码转换的领域中,很明显,当目标指令在目标处理器上执行并导致异常信号被报告时,通常,该目标指令将无法满足将该异常报告给以主体代码编写的信号处理程序的条件。首先,由于为其编写主体代码的主体处理器指令集与执行目标代码的目标处理器的指令集不同,其次,因为在程序代码转换期间典型地发生的优化,所以指令在目标处理器上几乎总是以与主体代码的对应块中的指令的顺序不同的顺序执行。因此,提供目标状态给信号处理程序相对容易,但获得代表原始主体代码的执行中的等效点的准确主体状态是困难的且代价高。
在动态程序代码转换的领域中还特别会产生这样的问题,其中执行程序代码转换的翻译器的执行与由翻译器产生的目标代码的执行交织,并且在目标计算平台上甚至可能会共享相同的执行处理。在大多数系统中,只存在有限数量的异常信号。例如,在翻译器与目标代码间可能只有一个SIGALRM信号需要共享。结果,目标代码准确地仿真原始目标代码而没有不利地影响翻译器的执行是困难的,或相反地,翻译器目标代码有效率地执行程序代码转换而没有不利地影响目标代码的执行是困难的。在目标计算平台中可用的信号可能变为耗尽,并且在最坏的情况下,程序代码转换处理必须被终止。
还会产生这样的问题,主体代码可能已被编写成要广泛使用信号,这现在不能得到在目标计算平台上可用的信号的数量或类型的支持。
以下将更详细地讨论本发明的示例实施例处理现有技术的这些及其它问题。
发明内容
根据本发明,提供了如在权利要求中定义的一种计算系统、计算机可读取存储介质及方法。从从属权利要求及随后的描述中本发明的其它特征将是显而易见的。
以下是根据本发明实施例的不同方面及可实现的优点的概述。其以简介的方式提供,以帮助本领域技术人员更快速地消化吸收以下的详细讨论,并且不是并且无意以任何方式来限制权利要求的范围。
具体地,发明人已开发了针对程序代码转换的方法。这些方法与提供动态运行时间(run-time)翻译或二进制程序代码的加速的运行时间翻译器结合时特别有用。
在本发明的一个示例方面中,提供一种计算系统,包括:翻译器单元,被安排来将主体代码转换为目标代码;处理器单元,被安排来执行目标代码并提供与处理器单元中目标代码的执行有关的目标状态;信号生成器,被安排来至少响应于目标代码的执行产生异常信号;以及异常处理单元,被安排来处理异常信号。这里,所述异常处理单元包括:目标侧异常处理程序单元,被安排来接收来自信号生成器单元的异常信号,并选择性地处理与该目标状态有关的异常信号;以及主体侧异常处理程序单元,被安排来接收来自目标侧异常处理程序单元的异常信号,并且处理与主体状态有关的异常信号,其中该主体状态从该目标状态得到的。该目标侧异常处理程序单元可以包括:多个信号处理子单元,其每一个被安排来选择性地处理与目标状态有关的异常信号,并输出返回执行的请求,否则输出传递异常信号的请求;传递路径选择单元,被安排来确定异常信号到多个信号处理子单元的选择的群组的传递路径;以及信号控制单元,被安排来根据传递路径依次将异常信号传递到信号处理子单元的选择的群组的每一个,并且(i)其中该信号处理子单元中的各个输出返回执行的请求,然后根据目标状态返回执行;以及(ii)其中该信号处理子单元输出传递异常信号的请求,然后根据该传递路径,将异常信号传递给信号处理子单元的选择的群组中的随后一个,并且其中在传递路径中不再指定信号处理子单元,然后默认将异常信号传递至主体侧异常处理程序单元。
在一个实施例中,该信号生成器单元产生异常信号做为多种不同类型之一,并且该传递路径选择单元根据该异常信号的类型确定传递路径。可选地,该传递路径选择单元包括表,该表将一组不同类型的异常信号的每一个映射到该信号处理子单元的各个群组。可选地,该表将每种类型的异常信号映射到包含无、一个、或多个信号处理子单元的各个群组。这里,该表包括包含多个信号处理子单元的至少一个群组。
在一个实施例中,该传递路径选择单元被安排来确定传递路径以指定异常信号到信号处理子单元的选择的群组的传递顺序,并且该信号控制单元根据传递顺序,将异常信号按照顺序传递到信号处理子单元的选择的群组。
在一个实施例中,该信号生成器单元被安排来产生多个异常信号,该多个异常信号的至少一些是可被拦截的,并且该异常处理单元登记有信号处理单元,以接收该可被拦截的异常信号的一个或多个。
在一个实施例中,该处理器单元被安排来执行翻译器单元及目标代码,并提供表示分别关于该目标代码及该翻译器单元的在处理器单元中的执行的目前状态的目标状态;该信号生成器单元被安排来产生关于目标代码及关于翻译器单元的多个异常信号;以及当从翻译器单元的执行得到异常信号时,至少一个信号处理子单元被安排来处理与目标状态有关的各自的一个或多个异常信号。可选地,当从目标代码的执行导致异常信号时,至少其中一个信号处理子单元被安排来处理关于该目标状态的相同的异常信号、或至少相同类型的异常信号。
在一个实施例中,仅当从目标代码的执行导致异常信号时,主体侧异常处理程序被安排来处理从该目标状态导出的、与该主体状态相关的异常信号。因此,当从该翻译器单元的执行导致该异常信号时,该主体侧异常处理程序不处理该异常信号,
在一个实施例中,该传递路径选择单元为至少一个类型的异常信号确定传递路径,特别地包括主体侧异常处理程序单元;以及该信号控制单元根据该传递路径将异常信号传递到主体侧异常处理程序单元。
在一个实施例中,该信号控制单元被安排来在将异常信号传递至信号处理子单元中被选择的群组的每一个之后,根据传递路径将异常信号传递至主体侧异常处理程序单元。
在一个实施例中,该异常处理单元还包括以下的至少一个:崩溃报告器单元,被安排来产生及存储崩溃报告数据结构并返回执行或终止执行,该崩溃报告数据结构关于涉及跟随在异常信号后的崩溃的处理器单元的执行状态;及默认处理器单元,被安排来根据预定的异常处理协议来处理异常信号,并返回执行或终止执行;可选地,该传递路径选择单元确定传递路径以包括该崩溃报告器单元和/或该默认处理器单元。该信号控制单元根据该传递路径将该异常信号分别地传递至该崩溃报告器单元及该默认处理器单元。可选地,安排该信号控制单元,以在将该异常信号传递至信号处理子单元的每一个选择的群组及该主体侧异常处理程序单元之后,根据该传递路径,将该异常信号传递至该崩溃报告器单元和/或该默认处理器单元。
在一个实施例中,该多个信号处理子单元的每一个包括:入口单元,被安排来接收异常信号,并确定是否处理该异常信号;信号处理单元,被安排来当由该入口单元确定时,对与目标状态有关的异常信号执行预定的信号处理功能,其包括选择性地修改目标状态,使得响应异常信号将不同地恢复执行;以及出口单元,被安排来输出返回执行或传递异常信号任一的请求。可选地,该目标状态包括信号信息数据结构,其包括与该异常信号相关的信息。可选地,该目标状态包括信号上下文数据结构,其包括涉及与该异常信号有关的处理器单元的上下文的信息。
在一个实施例中,该主体侧异常处理程序包括:转换器单元,被安排来将目标状态转换成主体状态;多个主体侧信号处理子单元,其每一个被安排来选择性地处理与该主体状态有关的异常信号,并确定要传递异常信号或请求返回执行;主体侧传递路径选择单元,被安排来确定异常信号的传递路径,其中该传递路径指定该多个主体侧信号处理子单元中的一个或多个子单元的选择的群组;以及主体侧信号控制单元,被安排来将异常信号依次传递到主体侧信号处理子单元的每一个选择的群组,并响应来自主体侧信号处理子单元的群组中的各自一个的请求而返回执行。可选地,进一步安排该转换器,以当该主体侧信号控制单元确定返回执行时,将主体状态转换成目标状态。
在一个实施例中,该多个主体侧信号处理子单元的每一个包括:入口单元,被安排来接收异常信号并确定是否处理该异常信号;信号处理单元,被安排来当由该入口单元确定时,对与主体状态有关的异常信号执行预定的信号处理功能,其包括选择性地修改主体状态,使得将响应于异常信号不同地恢复执行;以及出口单元,被安排来输出返回执行或传递异常信号任一的请求。可选地,该主体状态包括主体信号信息数据结构,其包括与该异常信号的转换形式相关的信息。可选地,该主体状态包括主体信号上下文数据结构,其包括涉及与该异常信号的转换形式有关的仿真的主体处理器的上下文的信息。
在一个实施例中,该信号控制单元被安排来动态地重新配置传递路径选择单元,以便为异常信号确定不同的传递路径。可选地,安排该信号控制单元来重新配置该传递路径选择单元,以为特定类型的异常信号增加、修改或替换该传递路径。可选地,安排该信号控制单元来根据特定类型的异常信号的传递路径重新配置该传递路径选择单元,以增加、修改或替换在选择的群组中的一个或多个信号处理子单元。
在一个实施例中,该主体代码为可被主体类型的处理器直接执行的二进制程序代码。
在一个实施例中,该目标代码为可被处理器单元直接执行的二进制程序代码。
在一个实施例中,翻译器单元被安排来将作为可被第一类型的处理器直接执行的二进制程序代码的主体代码转换成作为可被处理器单元直接执行的二进制程序代码的目标代码。
在一个实施例中,翻译器单元被安排来将为第一类型处理器的执行而编写的主体代码转换成由不同的不兼容的第二类型处理器单元执行的目标代码。
在一个实施例中,翻译器单元被安排来将为第一类型处理器的执行而编写的主体代码优化成由相同第一类型的处理器单元更有效地执行的目标代码。
在本发明的另一方面中,提供了一种处理具有至少一个处理器的计算系统中的异常信号的方法,该方法包括以下的计算机实施的步骤:将主体代码转换成可由该至少一个处理器执行的目标代码;在该至少一个处理器上执行该目标代码;产生关于该目标代码的执行的异常信号;确定与该异常信号有关的信号传递路径,其中该信号传递路径指定从多个信号处理子单元之中选择的信号处理子单元的群组;根据该信号传递路径将异常信号传递给该群组中的第一个信号处理子单元;确定是否在该信号处理子单元中处理信号,如果是,则在该信号处理子单元中处理信号以处理异常;以及判定是否请求返回执行,如果是,则返回执行,否则,根据该信号传递路径将异常信号传递给该群组的下一个信号处理子单元;以及重复关于下一个信号处理子单元的确定与判定步骤。
在本发明的又另一方面中,提供一种在计算系统中处理异常信号的方法,包括以下的计算机实施的步骤:将可由主体处理器类型执行的主体代码转换成可由至少一个处理器执行的目标代码;在该至少一个处理器上执行该目标代码;产生与该目标代码的执行相关的异常信号;仅参考包括代表与该异常信号有关的计算系统的执行状态的信息的目标状态数据结构,确定是否处理该异常信号;并且如果为否,则将该目标状态数据结构转换成主体状态数据结构,其包括代表与该异常信号有关的、该主体代码在主体处理器类型上执行的仿真状态的信息,并处理关于该主体状态数据结构的异常信号。
示例实施例仅参考目标状态来处理至少一些类型的异常信号,因此减少了目标状态必须转换成主体状态的发生次数。结果,该计算系统现在能够更快速并更有效率地执行。
此外,本发明的示例实施例被安排来传递某些类型的异常信号给多个信号处理信号子单元,然后,该子单元的每一个具有检查并处理该异常的机会。因此,单个异常信号用于多个不同的目的。该机制允许单个类型的异常信号(如警告信号)在目标代码与翻译器之间共享。
此外,仍在这里所讨论的示例实施例中,当将使用大量信号的主体代码转换成目标代码并在该目标计算平台上执行时,即使该目标计算平台可能具有数量及类型都明显不同的异常信号,现在也很容易支持该主体代码。
本发明也扩展到计算机可读取存储介质,其上记录有指令,当被计算机系统实施时,执行在此定义的任何方法。
本发明的至少一些实施例可以部分或全部地使用专门的专用硬件来建构。在此使用的如“组件”、“模块”、或“单元”的术语可包括但不限于硬件设备,如执行某些任务的现场可编程门阵列(FPGA)或专用集成电路(ASIC)。可替代地,本发明的各元件可被配置成驻留在可寻址的存储介质内,并且可被配置成在一个或多个处理器上执行。因此,例如在一些实施例中,本发明的功能性元件包括组件(如软件组件、面向对象软件组件、类组件及任务组件)、处理、功能、属性、程序、子例程、程序代码段、驱动器、固件、微代码、电路、数据、数据库、数据结构、表、数组及变量。此外,虽然已参考以下讨论的组件、模块及单元描述了本发明的优选实施例,但这些功能性元件可结合成更少的组件或分开成额外的组件。
附图说明
并入并成为说明书一部分的附图图示了优选实施方式,并描述如下:
图1是图示其中应用了本发明实施例的装置的方块图;
图2是本发明实施例所使用的程序代码转换处理的示意图;
图3是图示在本发明的示例实施例中、在异常处理期间的控制流程的示意图;
图4是图示与异常处理有关的示例计算系统的部分的示意图;
图5是图示示例信号处理子单元的示意图;
图6是图示根据本发明的示例实施例的处理异常信号的方法的示意流程图;
图7是图示与异常处理有关的示例计算系统的部分的示意图;
图8是图示根据本发明的示例实施例的处理异常信号的另一方法的示意流程图;
图9是图示与异常处理有关的示例计算系统的部分的示意图;
图10是图示与异常处理有关的示例计算系统的部分的另一示意图;
图11是图示与异常处理有关的示例计算系统的部分的示意图;以及
图12是图示与异常处理有关的示例计算系统的部分的另一示意图。
具体实施方式
提供以下描述以允许本领域技术人员制造及使用本发明,并提出发明人所认为的实施该发明的最佳模式。然而,基于在此说明的本发明的一般原理,各种修改及等效对本领域技术人员是显而易见的。
图1给出应用了本发明示例实施例的系统和环境的概图,以便介绍以下将更详细讨论的组件、模块及单元。参考图1,主体程序17意欲在具有至少一个主体处理器3的主体计算平台1上执行。然而,通过执行程序代码转换的翻译器单元19,替代地使用目标计算平台10执行主体程序17。翻译器单元19执行从主体程序17到目标代码21的码转换,使得目标代码21可在目标计算平台10上执行。
如本领域技术人员所熟知的,主体处理器3具有一组主体寄存器5。此外,主体存储器8保持主体代码17及主体操作系统2。类似地,图1中的示例目标计算平台10包括:至少一个目标处理器13,其具有多个目标寄存器15;存储器18,用来存储多个操作组件,包括目标操作系统20、主体代码17、翻译器代码19及翻译的目标代码21。典型地,目标计算平台10为基于微处理器的计算机或其它适合的计算机。
在一个实施例中,翻译器代码19为仿真器,用以将主体指令组架构(ISA)的主体代码翻译成另一ISA的经优化或未优化的翻译的目标代码。在另一个实施例中,翻译器19用作用于将主体代码转换成目标代码的加速器,其每一个具有相同的ISA,然而执行不同的优化以提供目标计算平台的性能。
翻译器代码19是适合实现翻译器的源代码的编译后的版本,并且结合操作系统20在目标处理器13上执行。将意识到,图1中所示的结构仅为示例,并且例如根据本发明的实施例的软件、方法与处理可用驻留在操作系统20之内或之下的代码来实现。主体代码17、翻译器代码19、操作系统20、及存储器18的存储机制可以是本领域技术人员已知的各种类型的任何。
在根据图1的装置中,在运行目标代码21的同时,在运行时间动态地执行程序代码转换以在目标架构10上执行。即,翻译器19与翻译的目标代码21内联地(inline)运行。通过翻译器19运行主体程序17涉及以交织的方式执行的两种不同类型的代码:翻译器代码19;以及目标代码21。因此,基于正在翻译的程序的存储的主体代码17,贯穿整个运行时间由翻译器代码19产生目标代码21。
在一个实施例中,翻译器单元19仿真主体架构1的相关部分,如主体处理器3并且特别是主体寄存器5,然而在目标处理器13上实际执行作为目标代码21的主体程序17。在优选实施例中,提供至少一个全局寄存器存储27(也称为主体寄存器库27或摘要寄存器库27)。在多处理器环境中,根据主体处理器的架构可选地提供一个以上摘要寄存器库27。主体状态的表示由翻译器19与目标代码21的组件提供。即,翻译器19以各种显式程序语言设备(如变量和/或对象)来存储主体状态。通过比较,翻译后的目标代码21提供在目标寄存器15与存储器位置18中隐式提供主体处理器状态,其被目标代码21的目标指令操作。例如,全局寄存器存储27的低层次表示仅是分配的存储器的区域。然而,在翻译器19的源代码中,全局寄存器存储27为可在较高层次存取或操作的数据数组或对象。
翻译器19将主体代码17适当地分割成多个翻译单元或块。通常,这些主体代码块的每一个都对应于该主体代码的一个基本块。术语“基本块”将是本领域技术人员所熟悉的。即,每种基本块为位于单个进入点的第一个指令与位于单个退出点的最后一个指令之间的连续指令组(如跳转、调用、或分支指令)。因此,基本块为恰好具有一个进入点及一个退出点的代码段,其将该块代码限制在单个控制路径。由于该理由,基本块是控制流程的有用的基本单元。翻译器19可只选择这些基本块之一(块模式),或选择一组基本块(组块模式)。组块适当地包括两个或更多基本块,其一起被当成单个单元。此外,翻译器可形成同等块(iso-bolck),其代表相同的主体代码块,但在不同的进入条件下。
在优选实施例中,基于主体指令序列产生中间表示(IR)的树,作为从原始主体程序17产生目标代码21的处理的一部分。IR树为由主体程序执行的操作及计算的表示的摘要表示。稍后,基于IR树产生(“种植”)目标代码21。IR节点的集合实际上是定向非循环图(directed acyclic graphs(DAG)),但是通俗地称为“树”。
本领域技术人员可意识到的,在一个实施例中,翻译器19使用面向对象的程序语言(如C++)来实现。例如,将IR节点当作C++对象来实现,并且将对其它节点的引用当作对与这些其它节点对应的C++对象的C++引用来实现。因此,IR树实现为IR节点对象的集合,包括各种相互引用。
此外,在以下讨论的实施例中,IR产生使用一组寄存器定义,该寄存器定义对应于意图在其上运行主体程序17的主体架构的特定特征。例如,对主体架构上的每一个物理寄存器(即,图1的主体寄存器5)都有唯一的寄存器定义。这样,翻译器中的寄存器定义可实现为C++对象,其包括对IR节点对象(即,IR树)的引用。被该组寄存器定义引用的所有IR树的集合称为工作IR森林(称为“森林”是因为其包括多个摘要寄存器根,其每一个引用IR树)。这些IR树及其它的处理适当地形成翻译器19的一部分。
图1还显示了目标架构10的存储器18中的本地代码28。在从主体代码17的运行时间翻译得到的目标代码21和为目标架构直接编写或编译的本地代码28之间存在区别。在某些实施例中,当翻译器19检测到主体程序的控制流程进入存在主体代码的本地版本的主体代码17的区段(如主体库)时,由翻译器19实现本地连结。不同于翻译该主体代码,翻译器19替代地使得等效本地代码28在目标处理器13上执行。在示例实施例中,翻译器19使用定义的接口(如本地代码或目标调用存根(stub))将产生的目标代码21连结到本地代码28,如PCT申请WO2005/008478中更详细讨论的,在此通过引用并入其公开内容。
图2图示当翻译器19在目标计算平台10上运行时的更多细节。如前所述,翻译器19的前端包括解码器单元191,其解码目前需要的主体程序17区段以提供多个主体代码块171a、171b、171c(其通常每个包括主体代码的一个基本块),并还可以提供关于每一个主体块以及其中包括的主体指令的解码器信息172,其将帮助翻译器19的稍后操作。在某些实施例中,翻译器19的核心192内的IR单元从解码的主体指令产生中间表示(IR),并关于该中间表示恰好地执行优化。作为翻译器19后端的一部分的编码器193产生(种植)目标处理器13可执行的目标代码21。在该简单的例子中,产生3个目标代码块211a-211c来在目标平台10上执行与在主体平台1上执行主体代码块171a、171b、171c等效的工作。此外,编码器193可为目标代码块211a-211c的一些或全部产生控制代码212,其执行如设置目标块将操作的环境以及在适当处将控制传回到翻译器19的功能。
如图2所示,安排翻译器19来处理在目标代码21执行期间所引发的异常信号。为此目的,翻译器19包括异常处理单元195,其被安排来处理目标处理器13执行目标代码21期间出现的异常信号。此外,在示例实施例中,也安排相同的异常处理单元195来处理翻译器19在目标处理器13上执行时出现的异常信号。
图3是总体概述地图示在使用异常处理单元195的信号处理期间、在目标计算平台10上的控制流程的示意图。这里,异常处理单元195包括目标侧异常处理程序单元220及与主体侧异常处理程序单元230。
当信号310出现时,目标操作系统20调用异常处理单元195。通常,目标状态320代表在目标处理器13上的执行状态。因此,目标状态320包括关于异常信号310的信息,如由操作系统20提供的SIGINFO数据结构。此外,目标状态320可选地包括特别是关于在出现信号的点处、目标寄存器15状态的信息,如SIGCONTEXT数据结构。因此,异常处理单元195使用目标状态320来检查在出现异常信号310的点处、目标处理器13上的执行状态。
异常信号310的处理会产生各种不同的结果。在许多情况下,可以适当地恢复目标代码21和/或翻译器19的执行。具体地,异常处理单元195检查目标状态320以确定异常的性质及原因,并采取适当的响应动作。如果适当,在通过操作系统20传回执行控制以根据原始的或现在修改的目标状态320恢复执行之前,异常处理单元195将修改目标状态320,如通过改变条件代码标志或修改代表目标寄存器15之一或多个的内容的存储数据。因此,响应导致异常信号310的条件,可以在发生异常的原始点处恢复执行,或可在代码中的不同点处恢复,或以不同的方式恢复。具体地,异常可能在执行目标代码21的期间产生,但在处理该异常之后,因为该异常已经指示翻译器19现在需要改变或重新产生一个或多个目标代码21的块,所以导致返回到翻译器19的执行。
异常处理单元195单独地在目标侧异常处理单元220中处理许多这种异常信号310,并且仅参考目标状态320。然而,异常信号并非由目标侧异常处理单元220单独处理。这里,提供代表在仿真的主体处理器3上执行的状态的主体状态330,具体地包括主体寄存器5的代表值。主体状态330适当地参照前面讨论的一个或多个摘要寄存器库27。接着,主体侧异常处理单元330使用该主体状态330来处理异常信号。然而,由异常处理单元195提供主体状态330并调用主体侧异常处理单元230的成本较高,因此期望最小化调用主体侧异常处理单元230及建构主体状态330的机会。
如同目标状态320,主体状态330可保持不变或响应于异常信号310被修改。典型地,该修改的主体状态330接着导致对应的修改的目标状态320,其使得目标代码21或翻译器19在不同的点或以不同的方式重新开始执行。
主体代码17通常将包括一个或多个信号处理程序功能。即,以主体代码17编写的特定程序通常包括一个或多个特定的信号处理程序功能,当特定的异常信号出现时调用该功能。替代地,现在异常信号310出现在目标平台上,并且在适当处,代表主体异常处理程序的信息被传递给主体侧异常处理单元230。通过主体侧异常处理单元230调用适当的主体信号处理程序功能,并(做为目标代码)执行以处理该异常信号。因此,如果主体信号处理程序使用主体SIGINFO数据结构,则主体状态330可包括该数据结构。同样地,如果主体信号处理程序使用主体SIGCONTEXT数据结构,则从目标系统上可用的信息获得该数据结构。在上面引用的名称为“Method and Apparatus forPerforming Adjustable Precision Exception Handling”的WO2005/006106、以及名称为“Method and Apparatus for Precise Handling of Exceptions DuringProgram Code Conversion”的WO2006/103395中给出了关于这种主体状态330的产生的更详细的背景信息。要注意,这些之前的公开内容考虑以变化的精度水平为不同的主体指令提供主体状态的机制,或使用恢复信息导出精确的主体状态、但不允许只单独参考目标状态320处理某些异常信号的有效机制。
图4是更详细图示目标计算平台的特定部分、特别是包括目标侧异常处理单元220的示意图。
如图4所示,安排适当地作为操作系统20的一部分的信号生成器单元200来在其它处理中响应于目标处理器13上的目标代码21或翻译器19的执行以产生异常信号。在多处理或多线程的计算环境中,存在同时执行的许多处理,并且该信号生成器负责为每个处理产生异常信号,并将该异常信号传递给各个登记的处理程序。
目标侧异常处理程序单元220包括全局信号控制单元221、传递路径选择单元222、及多个信号处理子单元223。
全局信号控制单元221被安排来接收由信号产生单元200至少关于目标代码21的执行、并最适当地关于翻译器19的执行产生的异常信号。即,全局信号控制单元221为这些处理接收带内异常信号。此外,全局信号控制单元221被安排来接收带外异常信号,其源自于系统中的别处,并被传递给这些处理。
传递路径选择单元222确定每个异常信号的传递路径,其中该传递路径指定将接收该异常信号的多个信号处理子单元223中的一个或多个。接着,全局信号控制单元221根据该异常信号的特定传递路径,依次将该异常信号传递给指定的信号处理子单元223的一个或多个的每一个。
即,信号控制单元221根据传递路径选择信号处理子单元223中的第一个子单元,并将该异常信号传递给该子单元。接着,信号控制单元221根据传递路径选择信号处理子单元223中的第二个子单元,并将该异常信号传递给该子单元等,直到异常信号被依次传递给每一个指定的子单元。在某些多线程的计算环境中,异常信号可同时传递给多个单元,或者在传递给第二子单元的同时第一子单元仍有效地处理该信号。然而,由于每一个子单元将处理该信号,并且可能采取如改变目标状态320的动作,因此,优选将各子单元当作遵循线性路径。具体地,在第一子单元处理完该异常信号之前,第二子单元不应改变目标状态320。
图4显示这样的示例情况,其中目标计算系统10支持多个不同类型的异常信号,并且每一个信号具有对应的信号编号(SIGNUM)。登记异常处理单元195以接收多个这些信号类型,并且在本示例中,登记异常处理单元195以接收每一个可用的信号类型组。如图4所示,信号产生单元200可使用信号表,其登记异常处理单元195以接收可用的信号#1至#63的集合的每一个。因此,当这些信号的任何出现时,异常信号被传递给异常处理单元195。
例如,假设信号#2已经出现。全局信号控制单元221咨询为该信号指定特定传递路径的传递路径选择单元222。这里,指定图示的信号处理子单元223a至223d的哪个或多个将接收信号#2的传递路径将接收异常信号#2,并且还指定信号处理子单元223的选择的群组接收信号#2的顺序。在本示例中,信号处理子单元的选择的群组包括单元223b、223c及223d,并且顺序被指定为“d接着c接着b”。因此,现在全局信号控制单元221首先将异常信号#2传递给信号处理子单元223d,依次接着223c,再接着223b。
其中信号处理子单元223之一请求返回执行(在本该情况下,第三个子单元223b),全局信号控制单元221完成信号的处理,并适当地促成返回到目标代码21或翻译器19的执行。
图5是更详细图示信号处理子单元223之一的示意图。
如图5所示,每一个信号处理子单元223包括入口单元224、信号处理单元225及出口单元226。入口单元224接收信号310,并确定是否要由信号处理单元225来处理该信号。如果是,则入口单元224将该信号310传递给信号处理单元225。如果否,则入口单元224将该信号310直接传递给出口单元226。这里,入口单元224检查目标状态320以确定是否要在此时处理该异常信号。在大多数的情况下,通过参考关于信号310提供的信息(如信号编号或SlGlNFO数据结构)进行确定。然而,有时该确定参考来自目标状态320的更详细的上下文信息,如SIGCONTEXT数据结构。
信号处理单元225对接收的异常信号执行预定的信号处理功能。即,信号处理单元225处理该信号,以便(至少部分地)处理该异常。可选地,信号处理单元225将修改目标状态320,使得将响应于处理后的异常信号不同地恢复执行。
出口单元226确定信号310是否要现在传递给随后的信号处理子单元223(或如将在下文中更详细讨论的其它单元),否则,应根据目标状态320恢复该执行。
图6是图示由异常处理单元195承担的、并且具体地在目标侧异常处理程序单元220及一个或多个信号处理子单元223中的处理异常的方法的示意流程图。
在步骤601接收异常信号,并且确定信号传递路径。接着在步骤602,该信号根据信号传递路径传递给信号处理子单元。在步骤603,确定是否要处理该信号。如果是,则在步骤604处理该信号。在步骤605判定是否请求返回执行。如果否,则该方法恢复到步骤602,并且该信号被传递给下一个信号处理子单元。因此,信号310根据该信号传递路径依次传递给第一、第二、第三及随后的信号处理子单元。在步骤605请求返回执行,接着,在步骤606,根据存储的目标状态320返回执行控制。
图7是更详细显示主体侧异常处理程序单元230的示意图。
如图7所示,主体侧异常处理程序单元230包括主体侧信号控制单元231、主体侧传递路径选择单元232、一组主体侧信号处理子单元233a-233c及转换器单元234。
转换器单元234被安排来将异常信号转换成主体架构上期望的格式,即转换成主体侧异常信号311。具体地,如信号编号(SIGNUM)的字段通常在目标架构与主体架构间不同。在本示例中,目标侧上的信号#2已被翻译成在主体侧上的信号#S1。此外,转换器单元234提供准备好处理主体侧异常信号311的精确的主体状态330。具体地,转换器单元234转换代表目标机器上的执行状态的目标状态320,以提供准备好用来处理主体侧异常处理程序单元中的异常的主体上下文数据结构SIGCONTEXT。相反,转换器单元234稍后将修改后的主体状态330转换回等效的目标状态320,以在修改后的目标状态中恢复执行。
主体侧传递路径选择单元232在一个或多个主体侧信号处理子单元233a-c之中为该异常信号确定传递路径。在这种情况下,该信号传递路径指定异常信号#S1将被传递到第二个主体侧信号处理子单元233b。
主体侧信号控制单元231将该异常信号依次传递给信号处理子单元233的指定群组中的每一个。
如上面参考图5对目标侧信号处理子单元223所讨论的,每一个主体侧信号处理子单元233包括入口单元、信号处理单元及出口单元。因此,每一个主体侧信号处理子单元233根据确定的主体侧传递路径依次接收异常信号,并选择性地处理该异常信号。接着,相关的主体侧信号处理子单元233根据(可能修改的)主体状态330请求传递该异常信号或者现在回到执行。
图8是图示在本发明实施例中的处理异常信号的示例方法的示意流程图。该方法在与主体侧异常处理程序单元230相关的异常处理单元195中执行。
现参考图8,其在步骤801确定将异常信号传递给主体侧异常处理程序单元230。
接着,步骤802至807与前文对于图6讨论的步骤601至606类似,从而主体侧异常处理程序单元230在一个或多个可用的主体侧信号处理子单元233中处理该异常。在步骤807,根据主体状态330请求返回执行,该主体状态330依次引导到对应的目标状态320,以适当地恢复目标代码21或翻译器19的执行。
图9是更详细地显示异常处理单元195的操作的示意图。具体地,图9提供第一说明示例以帮助本领域技术人员获得本发明的充分且详细的理解。然而,该说明示例只是可使用本发明来完成的许多示例实施例之一。
在该第一说明示例中,在此讨论的异常处理机制特别有益于时序信号。如本领域技术人员所知的,程序可设置定时器,其在指定的时间间隔过去之后将使得异常信号产生。在符合POSIX的平台上,普遍使用的时序信号包括SIGALRM、SIGPROF、及SIGVTALRM。
存在这样的问题,其中许多计算架构只提供一个每种这种时序信号,然而主体程序(现在运行为目标代码21)及翻译器19可能每一个都需要使用相同类型的时序信号。例如,目标代码21与翻译器19都希望使用SIGALRM异常信号。在图9所示的本示例中,假设翻译器19被安排以规则的间隔(如时间线上字母X所示的每一秒的间隔)来测评(profile)目标代码21的性能。此外,假设主体程序(现在被转换成目标代码21)被安排使用相同类型的时序信号来确定在指定的时间内量(如5秒)用户是否按下键盘上的键,如时间线上的字母Y所示。操作系统20在时间X及在时间Y产生SIGALRM类型的异常信号310,其初始被传递到目标侧异常处理程序单元220。该类型信号的传递路径指示该时序信号被传递至信号处理子单元223a,其现在确立目标侧(该情况下翻译器19)是否期待该时序信号。即,信号处理单元225包括频率仲裁单元,其记录期待的时序信号及每一个期待的信号的拥有者。因此,在事件X引起信号的情况下,信号处理子单元223确定该信号310由翻译器19拥有。现在,该信号被处理并执行返回。相反,在时间Y的异常信号被传递到主体侧异常处理程序单元230,即,确定目标侧不期待该信号。主体侧异常处理程序单元230确定适当的传递路径,并将该异常信号路由到各个信号处理子单元233a。因此,由事件Y所引起的异常信号310现在被主体侧异常处理程序单元230接收,并适当地为主体程序处理。
从图9的示例将意识到,在此讨论的异常处理机制有许多优点。首先,在依赖目标状态320的代码(如翻译器19或由翻译器19产生的部分的控制代码212)与依赖主体状态330的代码(如仿真原始主体程序17所期待的行为的目标代码21的主块211)之间,共享单个类型的异常信号,如SIGALRM。其次,只有目标侧不需要的那些信号才传递到主体侧,从而显著地减少了其中精确得到主体状态330的机会的次数。
图10是更详细显示异常处理单元195的操作的示意图。如图10所示,异常处理单元195还包括默认处理程序单元240及崩溃报告器单元250。
安排默认处理程序单元240来根据目标系统的异常处理协议来处理异常信号。即,默认处理程序单元240提供等效于目标操作系统20期待的行为的异常处理行为。更一般地,默认行为要忽略该信号并返回,或终止执行。默认行为的例子是,当子处理终止时,父处理为信息接收SIGCHLD异常信号,但在大多数的情况下,忽略该信号并继续执行。
提供崩溃报告器单元250作为翻译器代码19的一部分,并以按顺序的方式管理执行的崩溃,特别是帮助调试。这里,崩溃报告器250被安排来存储状态信息,包括例如目标状态320及主体状态330,以便创建崩溃报告数据结构350,其包括与崩溃有关的、关于执行状态的详细信息。在示例实施例中,崩溃报告数据结构350以文本文件(.txt)存储在目标系统的存储器系统18中。
图10显示通过异常处理单元195的4个主要异常处理路线,这里标示为“A至D”。
在路线A中,在目标侧异常处理子单元223之一中处理异常,并返回执行。在路线B中,在主体侧信号处理子单元233之一中处理异常,并返回执行。在路线C中,在默认处理程序单元240中处理异常,并返回或终止。在路线D中,在崩溃报告器250中处理异常,并返回或终止。
如图10所示,示例异常处理单元195关于浮点异常的处理特别有利。一些计算架构(例如基于IBM Power PC(TM)处理器的那些)在处理器中尝试“被零除”的不合法数学运算时不产生异常信号,而是仅替代地将结果设置为零并继续执行。相反,其它计算架构(如基于Intel(TM)x86处理器的计算架构)在处理器执行不合法的“被零除”运算时,将产生异常信号。在图10中,目标硬件以x86处理器为基础,因此,当遇到被零除的不合法运算时,将会产生这种浮点异常。
当通过执行由翻译器19产生的目标代码21来执行主体程序17的工作而产生该浮点异常时,异常将跟随路线A。即,目标侧异常处理程序单元220中的信号处理子单元223b之一被安排来接收异常信号310,并确定(如通过检查SIGINFO数据结构中的程序计数器(PC)字段)该异常由目标代码21的执行引起。现在,通过将该结果重置到零,即通过修改如在目标状态320中表示的目标寄存器之一的内容来处理该异常信号,。现在,执行可返回到目标代码21并继续。通过将结果重置到零,目标系统现在将可根据主体架构正确地仿真该程序的预期行为。此外,该异常已轻易地被处理,具体地,其不需要经历提供主体状态330的成本高的处理。
当从翻译器代码19的执行引起相同类型的浮点异常信号时,那么该信号现在可能代表严重的编程或执行错误。因此,异常信号310现在跟随路线C到达默认处理程序单元240或跟随路线D到达崩溃报告器250。
另外的经常遇到的异常信号示例是分段错误(segfault),其指示在程序试图以不允许的方式存取存储器(例如,试图写入受只读保护的存储器区域)的情况下发生的错误。在POSIX类型的系统上,用于该类错误的符号常数通常是SIGSEGV。这种分段错误可能因为若干不同理由之一而产生,并且在不同的环境中,相同类型的异常信号将通过异常处理单元195使用不同的路线A-D。
第一,分段错误可根据目的引入为陷阱,用来检测目标代码21何时试图存取存储器被保护的区域,如试图写入自修改代码。该信号跟随路线A,并且相关的目标侧处理子单元223改变目标状态320,使得执行返回到翻译器19以处理该自修改事件。因此,翻译器19能够依赖异常处理程序单元来诱捕某些异常信号。
第二,已经编写原始主体代码17以使用分段错误做为陷阱。在该情况下,该信号跟随路线B,并且被主体侧信号处理子单元233之一处理,以便参考主体状态330调用主体信号处理功能。
第三,分段错误从其它外部处理传递到异常处理单元195。检查SIGINFO数据结构中的SI_CODE字段确定该信号是否来自外部。在该情况下,该信号跟随路线C,其中默认处理程序单元240执行默认的行为,在该情况下该行为是忽略该信号。
第四,基于由翻译器中未预期的错误或程序错误引起该信号,未预期且还没被之前单元捕捉的分段错误跟随路线D被传递到崩溃报告器250。
因此,相同类型的异常信号(在该情况下分段错误)将根据该信号的特定环境,通过异常处理单元195跟随可用的路线的任何一条。
图11是关于关注传递异常信号的机制、更详细地显示异常信号处理单元195的示意图。
如本领域技术人员所知的,某些类型的异常信号(例如SIGKILL)不能被截取,并且总是由操作系统20来处理。在图11中,信号类型#63显示为这种不能截取的异常信号的例子。
然而,在目标架构中有许多类型的可载取的异常信号,并且在示例实施例中,登记异常处理单元195以接收目标架构上的能够被截取的所有类型的信号。这里,至少信号类型#1、#2、及#3能被截取,因此登记异常处理单元195来接收这种信号。在图11中,操作系统20中的信号生成器单元200记录标记“(全局)”,以显示这种信号不是要传递到操作系统20的信号处理元件,替代地要传递到在此讨论的示例实施例的异常处理单元195。
目标侧异常处理程序单元220的传递路径选择单元222确定一些类型的异常信号直接地或在该异常信号首先传递通过一个或多个目标侧信号处理子单元223(见图4)之后,传递到如以字母“DF”标记的默认处理程序单元240或崩溃报告器“CR”。在图11中,字母“a”、“b”或“c”指目标侧信号处理子单元223的选择的子单元。此外,一些类型的异常信号再次直接地或在该异常信号首先传递通过一个或多个目标侧信号处理子单元“a”、“b”、“c”等之后,传递到如以字母“SS”标记的主体侧异常处理程序单元230。该确定方便地记录在如图11所示的表中。然而,一些类型的信号(如上面讨论的分段错误)需要额外的处理来进行适当的确定,如检查SIGINFO或SIGCONTEXT数据结构。
类似地,主体侧异常处理程序单元230的传递路径选择单元232被配置为利用或不用将该异常信号首先传递通过一个或多个主体侧信号处理子单元233(这里如字母“Sa”、“Sb”、“Sc”所示),选择性地将某些异常信号传递至默认处理程序单元240(如字母“DF”所示)或崩溃报告器250(如字母“CR”所示)。
因此,传递路径选择单元222、232提供一种简单且方便的机制,用以沿着各个预定的传递路径来路由每种特定类型的异常信号。
图12是关于信号处理路径的动态重新配置、更详细地图示示例异常处理机制的示意图。
如图12所示,全局信号控制单元221被配置来动态地控制目标侧传递路径选择单元222与主体侧传递路径选择单元232。即,安排全局信号控制单元221来为一个或多个类型的异常信号增加、修改或替换指定的传递路径。以此方式,全局信号控制单元221将增加、修改或替换用于接收特定类型的异常信号的信号处理子单元组223、233及传递路径的指定顺序。
此外,安排崩溃报告器250以与全局信号控制单元221一同工作,以动态地重新配置传递路径。作为示例,安排崩溃报告器250来引入额外的总线错误信号处理子单元,其中已经产生指示特定的存储器区域未被映射的异常信号。该新引入的总线错误子单元执行存储器映射功能并返回执行。如果错误再次发生,则现在总线错误子单元将有助于恢复关于目标状态320和/或主体状态330的更详细的信息,并接着继续崩溃报告处理的随后部分。因此,崩溃报告器单元保持执行的控制,并且可引入预订的信号处理子单元组来处理异常信号。
在这些实施例中,即使在异常处理单元195中引入新的异常信号处理行为,目标操作系统20的信号产生单元200所保持的信号表也没有更新。即,加入、修改或替换信号处理子单元组,而不需要系统调用来登记该新的信号处理子单元组。因此,异常处理单元195是灵活的并且强大的,同时是便宜的并且对操作是有效的。
如上所述,本发明的示例处理机制具有许多优点。该机制减少了响应于每一个异常信号必须做的工作量,不只是因为许多信号被目标侧异常处理子单元快速且便宜地成功处理。在许多情况下,处理异常信号而不需获得代表原始主体代码的执行中的等效点的主体状态的成本。此外,该机制能够在目标代码执行与翻译器代码执行之间共享一个异常信号,从而提高了在目标计算架构上的操作效率。该机制减轻有时在主体计算架构上的异常处理对比在目标架构上的异常处理之间出现的实质差异,因此帮助目标架构更好地支持主体代码的执行。这在动态翻译、特别是在动态二进制翻译的领域中极为重要,其中期望自动转换程序代码而不需要任何人力介入。提供多个主体侧异常处理子单元允许容易且有效率地从目标系统将可用的异常信号映射到主体代码所需要的主体异常信号组。即使在主体代码使用大量信号的情况下,现在在目标计算平台上也容易地支持所需要的数量或类型的信号。最后,示例机制对异常信号的处理提供动态的灵活性及控制,特别是包括提供每一个都接收相同异常信号的多个信号处理子单元的能力,以及以最少的开销来增加、修改、或替换这些单元的能力。
虽然已经显示并描述了几个优选实施例,但本领域技术人员将意识到,可进行各种改变及修改而不偏离权利要求定义的本发明的范围。
注意与本申请同时或之前提交的、与本申请有关的、并且对于本发明申请的公开审查是公开的所有文章及文献,并且在此通过引用并入所有这些文章和文献的内容。
本说明书(包括任何权利要求、摘要和附图)中公开的所有特征和/或这样公开的任何方法或处理的所有步骤都可以任意的组合结合,除了其中这些特征和/或步骤的至少一些互斥的组合。
本说明书(包括任何权利要求、摘要和附图)中公开的每个特征都可用用于相同、等效或类似目的的替代特征来替换,除非另外明确说明。因此,除非另外明确说明,公开的每个特征只是一般系列的等效或类似的特征的一个示例。
本发明并不限于前述(各)实施例的细节。本发明扩展到本说明书(包括任何权利要求、摘要和附图)中公开的特征的任何新颖特征或任何新颖的组合,或者扩展到这样公开的任何方法或处理的步骤的任何新颖的步骤或任何新颖的组合。

Claims (15)

1.一种计算系统,包括:
翻译器单元,被安排来将主体代码转换为目标代码;
处理器单元,被安排来执行所述目标代码并提供与处理器单元中所述目标代码的执行有关的目标状态;
信号生成器单元,被安排来至少响应于所述处理器单元中所述目标代码的执行产生异常信号;以及
异常处理单元,被安排来处理所述异常信号;
其特征在于所述异常处理单元包括:
主体侧异常处理程序单元,被安排来处理与从所述目标状态导出的主体状态有关的所述异常信号,其中所述主体状态提供在主体处理器单元上的所述主体代码的执行的状态;以及
目标侧异常处理程序单元,被安排来接收来自所述信号生成器单元的所述异常信号,并选择性地处理与所述目标状态有关的所述异常信号,其中所述目标侧异常处理程序单元包括:
多个信号处理子单元,其每一个被安排来选择性地处理与所述目标状态有关的所述异常信号,并输出返回执行的请求,否则输出传递所述异常信号的请求;
传递路径选择单元,被安排来确定所述异常信号到所述多个信号处理子单元的选择的群组的传递路径;以及
信号控制单元,被安排来根据所述传递路径依次将所述异常信号传递到所述信号处理子单元的选择的群组的每一个,并且(i)其中所述信号处理子单元中的各个输出所述返回执行的请求,然后根据所述目标状态返回执行;以及(ii)其中所述信号处理子单元输出所述传递异常信号的请求,然后根据所述传递路径,将所述异常信号传递给所述信号处理子单元的选择的群组中的随后一个,并且其中在所述传递路径中不再指定所述信号处理子单元,然后默认将所述异常信号传递至所述主体侧异常处理程序单元。
2.如权利要求1所述的计算系统,其中所述信号生成器单元产生作为多种不同类型之一的所述异常信号,并且所述传递路径选择单元根据所述异常信号的类型确定所述传递路径来包括所述信号处理子单元的各个群组。
3.如权利要求1所述的计算系统,其中所述传递路径选择单元被安排来确定所述传递路径以指定所述异常信号到所述信号处理子单元的选择的群组的传递顺序,并且所述信号控制单元根据所述传递顺序,将所述异常信号按照顺序传递到所述信号处理子单元的选择的群组。
4.如权利要求1所述的计算系统,其中:
所述处理器单元被安排来执行所述翻译器单元及所述目标代码,并提供表示分别关于所述目标代码及所述翻译器单元的、在所述处理器单元中的执行的目前状态的所述目标状态;
所述信号生成器单元被安排来产生关于所述目标代码及关于所述翻译器单元的多个所述异常信号;以及
当从所述翻译器单元的执行得到所述异常信号时,至少一个所述信号处理子单元被安排来处理与所述目标状态有关的各自的一个或多个所述异常信号。
5.如权利要求1所述的计算系统,其中所述多个信号处理子单元的每一个包括:
入口单元,被安排来接收所述异常信号,并确定是否处理该异常信号;
信号处理单元,被安排来当由所述入口单元确定时,对与所述目标状态有关的所述异常信号执行预定的信号处理功能,其包括选择性地修改所述目标状态,使得响应所述异常信号将不同地恢复执行;以及
出口单元,被安排来输出返回执行或传递所述异常信号任一的请求。
6.如权利要求1所述的计算系统,其中所述主体侧异常处理程序包括:
转换器单元,被安排来将所述目标状态转换成所述主体状态;
多个主体侧信号处理子单元,其每一个被安排来选择性地处理与所述主体状态有关的所述异常信号,并确定要传递所述异常信号或请求返回执行;
主体侧传递路径选择单元,被安排来确定所述异常信号的传递路径,其中所述传递路径指定所述多个主体侧信号处理子单元中的一个或多个子单元的选择的群组;以及
主体侧信号控制单元,被安排来将所述异常信号依次传递到所述主体侧信号处理子单元的每一个选择的群组,并响应来自所述主体侧信号处理子单元的群组中的各自一个的所述请求而返回执行。
7.如权利要求6所述的计算系统,其中当所述主体侧信号控制单元确定返回执行时,所述转换器被进一步安排来将所述主体状态再转换成所述目标状态。
8.如权利要求6所述的计算系统,其中所述多个主体侧信号处理子单元的每一个包括:
入口单元,被安排来接收所述异常信号并确定是否处理该异常信号;
信号处理单元,被安排来当由所述入口单元确定时,对与所述主体状态有关的所述异常信号执行预定的信号处理功能,其包括选择性地修改所述主体状态,使得将响应于所述异常信号不同地恢复执行;以及
出口单元,被安排来输出返回执行或传递所述异常信号任一的请求。
9.如权利要求1所述的计算系统,其中所述信号控制单元被安排来动态地重新配置所述传递路径选择单元,以便为所述异常信号确定不同的传递路径。
10.一种处理具有至少一个处理器的计算系统中的异常信号的方法,所述方法包括以下的计算机实施的步骤:
将主体代码转换成可由所述至少一个处理器执行的目标代码;
在所述至少一个处理器上执行所述目标代码;
产生关于所述目标代码的执行的异常信号;
确定与所述异常信号有关的信号传递路径,其中所述信号传递路径指定从多个信号处理子单元之中选择的信号处理子单元的群组;
根据所述信号传递路径将所述异常信号传递给所述群组中的第一个所述信号处理子单元;
确定是否在所述信号处理子单元中处理所述信号,如果是,则在所述信号处理子单元中处理所述信号以处理所述异常;以及
判定是否请求返回执行,如果是,则返回执行,否则,根据所述信号传递路径将所述异常信号传递给所述群组的下一个信号处理子单元;以及
关于所述群组中的下一个信号处理子单元重复确定与判定步骤。
11.如权利要求10所述的方法,还包括:
提供包含与关于所述异常信号的所述计算系统的执行状态有关的信息的目标状态数据结构;
参考目标状态数据结构信号在所述信号处理子单元中处理所述异常信号包括选择性地修改所述目标状态数据结构;以及
其中所述判定步骤判定请求返回执行,然后根据所述目标状态数据结构返回执行。
12.如权利要求11所述的方法,还包括:
选择性地将所述异常信号传递给主体侧异常处理单元;
将所述目标状态数据结构转换成主体状态数据结构;以及
在所述主体侧异常处理单元中处理与所述主体状态数据结构有关的所述异常信号。
13.一种计算机可读取记录介质,所述介质上记录有指令,当所述指令被具有至少一个处理器的计算系统执行时,使得所述计算系统至少执行以下步骤:
将可执行的主体代码转换成可由所述至少一个处理器执行的目标代码;
在所述至少一个处理器上执行所述目标代码;
产生与所述目标代码的执行相关的异常信号;
确定与所述异常信号有关的信号传递路径,其中所述信号传递路径指定从多个信号处理子单元中选择的信号处理子单元的群组;
根据所述信号传递路径将所述异常信号传递给所述群组中的第一个所述信号处理子单元;
确定是否在所述信号处理子单元中处理所述信号,如果是,则在所述信号处理子单元中处理所述信号以处理所述异常信号;以及
判定是否请求返回执行,如果是,则从异常信号的处理返回执行,否则,根据所述信号传递路径将所述异常信号传递给所述群组的下一个信号处理子单元,并且重复关于所述下一个信号处理子单元的确定与判定步骤。
14.如权利要求13所述的计算机可读取记录介质,其中所述指令还使得所述计算系统执行以下步骤:
提供包含与关于所述异常信号的所述计算系统的执行状态有关的信息的目标状态数据结构;
参考目标状态数据结构信息在所述信号处理子单元中处理所述异常信号包括选择性地修改所述目标状态数据结构;以及
其中所述判定步骤判定请求返回执行,然后根据所述目标状态数据结构返回执行。
15.如权利要求14所述的计算机可读取记录介质,其中所述指令还使得所述计算系统执行以下步骤:
选择性地将所述异常信号传递给主体侧异常处理单元;
将所述目标状态数据结构转换成主体状态数据结构;以及
在所述主体侧异常处理单元中处理与所述主体状态数据结构有关的所述异常信号。
CN2008800126587A 2007-04-19 2008-04-15 用于处理计算系统中的异常信号的装置和方法 Active CN101663644B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0707528A GB2448523B (en) 2007-04-19 2007-04-19 Apparatus and method for handling exception signals in a computing system
GB0707528.6 2007-04-19
US11/810,050 US20080263342A1 (en) 2007-04-19 2007-06-04 Apparatus and method for handling exception signals in a computing system
US11/810,050 2007-06-04
PCT/GB2008/050259 WO2008129315A1 (en) 2007-04-19 2008-04-15 Apparatus and method for handling exception signals in a computing system

Publications (2)

Publication Number Publication Date
CN101663644A true CN101663644A (zh) 2010-03-03
CN101663644B CN101663644B (zh) 2013-03-20

Family

ID=38135039

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008800126587A Active CN101663644B (zh) 2007-04-19 2008-04-15 用于处理计算系统中的异常信号的装置和方法

Country Status (7)

Country Link
US (1) US20080263342A1 (zh)
EP (1) EP2165258B1 (zh)
JP (1) JP5077605B2 (zh)
CN (1) CN101663644B (zh)
GB (1) GB2448523B (zh)
TW (1) TWI509516B (zh)
WO (1) WO2008129315A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103077073A (zh) * 2013-01-15 2013-05-01 华为技术有限公司 即时功能级仿真器的实现方法和装置及仿真处理器
WO2021249193A1 (zh) * 2020-06-12 2021-12-16 华为技术有限公司 一种异构指令集架构下异常或中断的处理方法、装置
CN117648287A (zh) * 2024-01-30 2024-03-05 山东云海国创云计算装备产业创新中心有限公司 一种片上数据处理系统、方法、服务器及电子设备

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070294675A1 (en) * 2006-06-20 2007-12-20 Transitive Limited Method and apparatus for handling exceptions during binding to native code
US7552405B1 (en) * 2007-07-24 2009-06-23 Xilinx, Inc. Methods of implementing embedded processor systems including state machines
FR2921013B1 (fr) 2007-09-14 2009-11-27 Soc Tech Michelin Roue elastique non pneumatique.
US8141015B1 (en) * 2010-03-02 2012-03-20 Altera Corporation Reporting status of timing exceptions
GB2484729A (en) * 2010-10-22 2012-04-25 Advanced Risc Mach Ltd Exception control in a multiprocessor system
EP2875229B1 (en) 2012-07-20 2017-11-22 Federal-Mogul Corporation Piston with oil cooling passage and method of construction thereof
JP6103541B2 (ja) 2014-03-18 2017-03-29 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation バイナリコードの実行を制御する装置及び方法
US10229029B2 (en) 2014-04-08 2019-03-12 Oracle International Corporation Embedded instruction sets for use in testing and error simulation of computing programs
US9552250B2 (en) * 2015-03-26 2017-01-24 Vmware, Inc. Detecting X86 CPU register corruption from kernel crash dumps
US20170185400A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Mode-specific endbranch for control flow termination
DE102018218834A1 (de) * 2018-09-27 2020-04-02 Robert Bosch Gmbh Verfahren und Vorrichtung zum Ermitteln eines Ansteuersignals

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2176918B (en) * 1985-06-13 1989-11-01 Intel Corp Memory management for microprocessor system
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
US6173248B1 (en) * 1998-02-09 2001-01-09 Hewlett-Packard Company Method and apparatus for handling masked exceptions in an instruction interpreter
US6247172B1 (en) * 1998-07-02 2001-06-12 Hewlett-Packard Company Method for a translation system that aggressively optimizes and preserves full synchronous exception state
US6308318B2 (en) * 1998-10-07 2001-10-23 Hewlett-Packard Company Method and apparatus for handling asynchronous exceptions in a dynamic translation system
DE69942011D1 (de) 1998-10-10 2010-03-25 Ibm Programmkodekonvertierung mit verringerter Übersetzung
US7516453B1 (en) * 1998-10-26 2009-04-07 Vmware, Inc. Binary translator with precise exception synchronization mechanism
US6738846B1 (en) * 1999-02-23 2004-05-18 Sun Microsystems, Inc. Cooperative processing of tasks in a multi-threaded computing system
US6968411B2 (en) * 2002-03-19 2005-11-22 Intel Corporation Interrupt processing apparatus, system, and method
RU2005115082A (ru) * 2002-11-18 2006-01-20 Арм Лимитед (Gb) Типы исключительных ситуаций в защищенной системе обработки
US7536682B2 (en) 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
GB2411990B (en) 2003-05-02 2005-11-09 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
US7634778B2 (en) * 2003-06-26 2009-12-15 Microsoft Corporation Operating system managing a linked list of callback dynamic function tables for acquiring exception handling information from a runtime environment
GB0315844D0 (en) * 2003-07-04 2003-08-13 Transitive Ltd Method and apparatus for performing adjustable precision exception handling
US7805710B2 (en) * 2003-07-15 2010-09-28 International Business Machines Corporation Shared code caching for program code conversion
US7434209B2 (en) 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
WO2006103395A1 (en) 2005-03-30 2006-10-05 Transitive Limited Preparing instruction groups in a processor having multiple issue ports
GB2425372B (en) * 2005-04-20 2007-06-13 Transitive Ltd Method and apparatus for precise handling of exceptions during program code conversion
EP1875339A2 (en) * 2005-04-20 2008-01-09 Transitive Limited Method and apparatus for precise handling of exceptions during program code conversion
US20060253271A1 (en) * 2005-04-26 2006-11-09 Newisys, Inc. Method for facilitating transformation of multi-threaded process-oriented object code to event-based object code
US7487341B2 (en) * 2006-06-29 2009-02-03 Intel Corporation Handling address translations and exceptions of a heterogeneous resource of a processor using another processor resource

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103077073A (zh) * 2013-01-15 2013-05-01 华为技术有限公司 即时功能级仿真器的实现方法和装置及仿真处理器
CN103077073B (zh) * 2013-01-15 2016-12-28 华为技术有限公司 即时功能级仿真器的实现方法和装置及仿真处理器
WO2021249193A1 (zh) * 2020-06-12 2021-12-16 华为技术有限公司 一种异构指令集架构下异常或中断的处理方法、装置
CN117648287A (zh) * 2024-01-30 2024-03-05 山东云海国创云计算装备产业创新中心有限公司 一种片上数据处理系统、方法、服务器及电子设备
CN117648287B (zh) * 2024-01-30 2024-05-03 山东云海国创云计算装备产业创新中心有限公司 一种片上数据处理系统、方法、服务器及电子设备

Also Published As

Publication number Publication date
JP5077605B2 (ja) 2012-11-21
WO2008129315A1 (en) 2008-10-30
US20080263342A1 (en) 2008-10-23
GB2448523B (en) 2009-06-17
CN101663644B (zh) 2013-03-20
GB2448523A (en) 2008-10-22
JP2010525440A (ja) 2010-07-22
TWI509516B (zh) 2015-11-21
EP2165258A1 (en) 2010-03-24
EP2165258B1 (en) 2016-03-16
TW200907809A (en) 2009-02-16
GB0707528D0 (en) 2007-05-30

Similar Documents

Publication Publication Date Title
CN101663644B (zh) 用于处理计算系统中的异常信号的装置和方法
CN101652746B (zh) 浮点操作的改善以及相关的改善
US5740413A (en) Method and apparatus for providing address breakpoints, branch breakpoints, and single stepping
CN101164041B (zh) 用于在程序代码转换过程中准确地处理异常的方法和设备
CN101473303B (zh) 在连结到本机码期间处理异常的方法及设备
CN101667154A (zh) 用于改善片上仿真系统中高级语言的仿真速度的装置和方法
US20110314459A1 (en) Compiler with user-defined type inference rules
CN1813242B (zh) 执行可调节精度的异常处理的方法和装置
CN101236512A (zh) 在微处理器上使能多指令流/多数据流扩展
Ferreira et al. Automated verification of the FreeRTOS scheduler in Hip/Sleek
Dam et al. Machine code verification of a tiny ARM hypervisor
Zhang et al. Towards understanding the runtime performance of rust
Singh et al. Parallel chopped symbolic execution
Pan et al. Easy modelling and verification of unpredictable and preemptive interrupt-driven systems
der Rieden et al. CVM–a verified framework for microkernel programmers
Lu et al. CloudRaid: Detecting distributed concurrency bugs via log mining and enhancement
CN111158667A (zh) 代码注入方法和装置、电子设备及存储介质
Liu et al. Towards understanding bugs in python interpreters
CN105068937B (zh) 一种Linux内核模块的单元测试方法
Albert et al. Systematic testing of actor systems
de Carvalho Junior et al. Contextual contracts for component‐oriented resource abstraction in a cloud of high performance computing services
CN114707124B (zh) 基于代码虚拟化的.net平台代码保护方法和系统
CN117075907B (zh) 应用程序编译方法、系统、编译器及存储介质
Alnemari et al. Integrating static and dynamic analysis techniques for detecting dynamic errors in MPI programs
Herda et al. Wrapping up

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant