会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 专利权 / 申请 / 国际申请 / 修改 / 转换原子读取-修改-写入访问

转换原子读取-修改-写入访问

阅读:814发布:2021-03-02

IPRDB可以提供转换原子读取-修改-写入访问专利检索,专利查询,专利分析的服务。并且本文中描述了用于转换原子读取‑修改‑写入访问的各种系统和方法。在一个示例中,一种方法包括确定第一语言的机器指令指定原子读取‑修改‑写入访问。该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,该方法包括生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放该全局锁。,下面是转换原子读取-修改-写入访问专利的具体信息内容。

1.一种用于转换原子读取-修改-写入访问的系统,包括:计算机处理器;以及

计算机存储器,所述计算机存储器储存用来致使所述处理器进行以下操作的指令:确定第一语言的机器指令指定针对地址的原子读取-修改-写入访问;

生成第二语言的机器指令以在所述地址对齐的情况下执行针对所述地址的原子访问;

生成所述第二语言的机器指令以在所述地址非对齐的情况下获取全局锁;

生成所述第二语言的机器指令以在所述地址非对齐的情况下执行针对所述地址的非原子访问;以及生成所述第二语言的机器指令以在所述地址非对齐的情况下释放所述全局锁。

2.根据权利要求1所述的系统,其特征在于,所述地址是对齐的地址。

3.根据权利要求1所述的系统,其特征在于,所述地址是非对齐的地址。

4.根据权利要求1所述的系统,其特征在于,所述指令致使所述处理器执行所生成的机器指令。

5.根据权利要求4所述的系统,其特征在于,执行所生成的机器指令包括:获取所述全局锁;

执行所述非原子访问;以及

释放所述全局锁。

6.根据权利要求4所述的系统,其特征在于,执行所生成的机器指令包括:执行所述原子访问。

7.根据权利要求1所述的系统,其特征在于,所述指令致使所述处理器生成第二语言的机器指令以执行所述地址的对齐检查,其中所述第一语言用于第一处理器,而所述第二语言用于第二处理器。

8.根据权利要求1所述的系统,其特征在于,所述指令致使所述处理器确定所述地址最初是已知的还是未知的。

9.根据权利要求1所述的系统,其特征在于,所述第二语言的机器指令包括用来处置其中所述地址对齐的情形的本机原子读取-修改-写入指令。

10.根据权利要求1所述的系统,其特征在于,所述全局锁同步进程内的各访问。

11.根据权利要求1所述的系统,其特征在于,所述全局锁同步系统内的各进程之间的访问。

12.根据权利要求11所述的系统,其特征在于,所述进程的安全级别指示对应于所述访问的数据要使用所述全局锁来被共享或者对应于所述访问的所述数据要使用第二全局锁来被共享。

13.一种用于转换原子读取-修改-写入访问的方法,包括:确定第一语言的机器指令指定原子读取-修改-写入访问,其中所述第一语言用于第一处理器;

确定所述地址是否对齐;

生成第二语言的机器指令以在所述地址非对齐的情况下获取全局锁,其中所述第二语言用于第二处理器;

生成所述第二语言的机器指令以在所述地址对齐的情况下执行针对所述地址的原子访问;

生成所述第二语言的机器指令以在所述地址非对齐的情况下执行针对所述地址的非原子访问;以及生成所述第二语言的机器指令以在所述地址非对齐的情况下释放所述全局锁。

14.根据权利要求13所述的方法,其特征在于,所述地址包括对齐的地址。

15.一个或多个用于储存计算机可读指令的计算机可读存储设备,所述计算机可读指令在由一个或多个处理设备执行时致使所述一个或多个处理设备:确定第一语言的机器指令指定原子读取-修改-写入访问;

生成所述第二语言的机器指令以在所述地址非对齐的情况下获取全局锁;

生成所述第二语言的机器指令以在所述地址对齐的情况下执行针对所述地址的原子访问;

生成所述第二语言的机器指令以在所述地址非对齐的情况下执行针对所述地址的非原子访问;以及生成所述第二语言的机器指令以在所述对齐检查确定所述地址非对齐的情况下释放所述全局锁。

说明书全文

转换原子读取-修改-写入访问

[0001] 背景
[0002] 原子访问是多个计算机处理器中的一者对存储中所共享的数据排他地执行读取、写入或修改的一种尝试。大多数读取和写入在默认情况下是原子的。然而,在一些计算机编程语言中,存在确保这种原子性的特定命令。例如,x86汇编语言在原子化的读取-修改-写入命令上使用LOCK前缀。读取-修改-写入命令是将读取和算术相组合并写入结果的指令。这些原子访问发生在被设计成在特定计算机处理器上运行的计算机程序内。然而,可能期望在不同计算机处理器上运行为一个处理器生成的计算机程序。
[0003] 计算机处理器被设计成基于可对设备进行编程的规定的机器语言来操作。不同处理器(诸如ARM和x86处理器)各自根据它们自己的机器语言来操作。计算机处理器可因而被编程为基于用特定机器语言编写的程序来执行任何数量的功能。因此,对于用一种机器语言编写的应用(即,被配置成在一种计算机处理器上运行的应用)而言可能难以在基于不同机器语言操作的处理器上被安装和运行。
[0004] 概述
[0005] 以下提供了简化概述,以提供对本文中描述的某些方面的基本理解。该概述不是权利要求主题的广泛概览。该概述不旨在标识所要求保护的主题的关键或决定性元素,也不旨在描述所要求保护的主题的范围。该概述的唯一目的是以简化的形式将所要求保护的主题的一些概念表达为下文表达的更详细说明的序言。
[0006] 一实施例提供了一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。如本文中所提到的对齐的地址包括存储器地址,该存储器地址是在访问中的字节数的倍数。此外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。如本文中所提到的非对齐的地址包括存储器地址,该存储器地址不是在访问中的字节数的倍数。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0007] 一实施例提供了一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行原子访问。附加地,该方法包括生成第二语言的机器指令以在地址非对齐的情况下执行非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0008] 一实施例提供了一个或多个计算机可读存储设备。该计算机可读存储设备包括计算机可读指令,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行原子访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下执行非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0009] 附图简述
[0010] 通过参考附图可以更好地理解下列详细描述,附图包含所公开的主题的众多特征的具体示例。
[0011] 图1是可转换原子读取-修改-写入访问的计算系统的示例的框图;
[0012] 图2是用于转换原子读取-修改-写入访问的方法的过程流程图;以及
[0013] 图3是用于转换原子读取-修改-写入访问的示例计算机可读存储介质的框图。
[0014] 详细描述
[0015] 本文中,为一个处理器设计的运行在不同处理器上的程序被称作外部应用(foreign application)。针对外部应用,被叫做转换器的计算机程序被用来将该外部应用在不同处理器上所请求的指令转换成具有相同或类似作用的本机指令。在一个示例中,转换器是在外部应用内部的动态链接库。具体而言,外部应用的指令被转换为计算机处理器的本机机器语言并被执行。然而,对用于原子读取-修改-写入访问的指令进行转换是一项挑战,这是由于不同计算机处理器如何支持原子读取-修改-写入访问之间的不兼容性。由此类常规技术(包括但不限于以下提及的那些技术)施加的限制抑制了对原子读取-修改-写入访问进行转换。
[0016] 本文中所描述的技术将针对外部应用的原子读取-修改-写入访问的执行进行转换。转换涉及将来自外部应用的机器语言指令转换为用于目的地计算机处理器的机器语言指令。在一个示例中,用x86机器语言编写的外部应用在ARM处理器上被转换。如先前所阐述,x86机器语言指令集包含被叫做“LOCK”的前缀,当在多个计算机处理器(即,核)上运行时,该前缀使访问原子化。在x86处理器中,对于非对齐的地址,LOCK前缀指令被支持。
[0017] ARM的等价本机原子读取-修改-写入指令包括加载-链接(load-link)和有条件储存(store-conditional)指令,即加载-独占(Load-Exclusive)和存储-独占(Store-Exclusive)(LDREX和STREX)。LDREX和STREX是成对使用的两个分开的指令。另外,存在不是4字节的各种数据大小的变体,例如,用于1字节访问的LDREXB/STREXB、用于2字节访问的LDREXH/STREXH。LDREX/STREX和LDREXH/STREXH指令仅支持对齐的地址。这使得以下具有挑战性:在ARM处理器上足够正确地转换x86LOCK前缀指令以运行大多数x86程序,但足够快速从而仍然是有用的。需要注意,这些指令仅仅是可被使用的指令的示例。其他指令也可被使用,诸如LDXR、LDXRB、LDXRH以及STXR、STXRB和STXRH。
[0018] 一种潜在的办法是不使非对齐访问原子化。然而,不使这些访问原子化将引入正确性问题,因为存在依赖于原子性的现有x86代码,这意味着此类程序中的非对齐访问的结果将是不正确的。例如,假设程序包含四个执行线程,每个执行线程向相同的共享全局变量加1达一千遍。如果共享全局变量以零值开始,则经正确运行的程序的最终结果是4,000的总和。然而,如果访问不是原子的,并且共享全局变量在非对齐的存储器位置中,则最终结果可能不是可预测的。这是因为原子性的缺乏可导致每次读取返回字节序列,该字节序列中的两者或更多者已来自不同的写入。原子性的概念在于不可能看到扯裂的写入。
[0019] 另一种潜在的办法是用全局锁来串行化所有存储器访问,甚至是那些对不同地址的存储器访问。全局锁协调多个线程的执行,以便一次执行一个线程,即使各线程正在多核处理器上运行。然而,串行化所有存储器访问造成了慢得无法接受的处理时间。此外,该办法是浪费的,因为通常而言同时出现的绝大多数访问是发生在存储器的不同区域中,其中不存在冲突的机会。因此,在绝大多数情形中,没有必要尝试用全局锁来保存原子性。
[0020] 又一种潜在的办法是在非对齐访问发生时切换到单线程执行。例如,在二进制转换器中,这可涉及将所有其他线程推出二进制转换器的代码高速缓存;执行访问;以及,恢复被推出的线程。有利地,这样的办法将仅仅减慢非对齐访问,这些非对齐访问通常远不及对齐访问频繁。然而,当非对齐访问确实发生时,惩罚将是计算上昂贵的。此外,该办法将停止只是在访问甚至不是存储器的寄存器的一些线程的访问。因此,这样的办法将是计算上效率低下的。
[0021] 在一些实施例中,本文中所描述的技术使用仿真器和二进制转换器等等的任何合适组合,以使得能够执行针对外部应用的原子读取-修改-写入访问。例如,仿真器可被用来使目的地计算机处理器能够执行来自外部应用的机器语言指令。在一些实施例中,仿真器可对处理器的状态等进行仿真。例如,仿真器可以是允许针对外部应用的原子读取-修改-写入访问的执行的虚拟机。在一些实施例中,仿真器可支持完全虚拟化。
[0022] 另一种潜在的办法是改变CPU以支持非对齐访问。然而,只有处理器制造商能够实现这样的改变,并且其可能在技术上具有挑战性。
[0023] 在本发明的技术的示例中,本机支持被用于具有对齐的地址的原子读取-修改-写入访问。换言之,用于对齐的地址的LOCK前缀指令被转换为合适的加载-链接和有条件储存指令,并被执行。然而,对于具有非对齐的地址的LOCK前缀指令,全局锁被使用。以此方式,本发明的技术针对常见的对齐情形允许对不同地址的并发读取-修改-写入访问。对齐访问比非对齐访问常见得多;因此,本发明的技术对于对齐访问在计算上是高效的。
[0024] 附加地,两个线程不应当执行存储器的在起始地址或大小方面有所不同的交叠的LOCK前缀访问。例如,如果一个处理器使用2字节存取来访问信号标(semaphore),则其他处理器不应当使用字节存取来访问该信号标。作为结果,对齐访问和非对齐访问不太可能交叠。因此,本机支持和全局锁办法均可被使用,而无需彼此同步。
[0025] 作为预备事项,一些附图在被称为功能性、模块、特征、元素等的一个或多个结构化组件的上下文中描述了诸概念。附图中示出的各种组件可以用任何方式来实现,例如,通过软件、硬件(例如,分立的逻辑组件等)、固件等等,或这些实现的任意组合。在一个实施例中,各种组件可以反映对应的组件在实际实现中的使用。在其他实施例中,附图中所解说的任何单个组件可由许多实际组件来实现。对附图中的任何两个或更多个单独组件的描绘可以反映由单个实际组件所执行的不同功能。以下讨论的图1提供了关于可用于实现附图中所示的各功能的一个系统的细节。
[0026] 其他附图以流程图形式描述了诸概念。以此形式,某些操作被描述为构成按某一顺序执行的有区别的框。这些实现是示例性而非限制性的。本文中所描述的某些框可被分组在一起并在单个操作中执行,某些框可被分解成多个组件框,并且某些框可以按与本文中所解说的不同的次序来执行(包括以并行方式执行这些框)。流程图中示出的框可以通过软件、硬件、固件等等或这些实现的任何组合来实现。如本文中所使用的,硬件可包括计算机系统、诸如专用集成电路(ASIC)之类的分立逻辑组件等,以及它们的任意组合。
[0027] 关于术语,短语“被配置成”涵盖可构造任何种类的结构化组件以执行所标识的操作的任何方式。结构化组件可以被配置成使用软件、硬件、固件等或其任意组合来执行操作。
[0028] 术语“逻辑”涵盖用于执行任务的任何功能性。例如,流程图中所解说的每个操作对应于用于执行该操作的逻辑。操作可以使用软件、硬件、固件等或其任意组合来执行。
[0029] 如本文中所使用的,术语“组件”、“系统”、“客户机”等旨在指代计算机相关的实体,它们可以是硬件、(例如,执行中的)软件和/或固件、或其组合。例如,组件可以是在处理器上运行的进程、对象、可执行件、程序、功能、库、子例程、和/或计算机,或软件和硬件的组合。作为解说,在服务器上运行的应用和该服务器两者都可以是组件。一个或多个组件可留驻在进程内,并且组件可位于一个计算机上和/或分布在两个或更多个计算机之间。
[0030] 此外,所要求保护的主题可使用标准编程和/或工程设计技术来被实现为方法、装置或制品以产生软件、固件、硬件或其任意组合来控制计算机,从而实现所公开的主题。如此处所使用的术语“制品”旨在涵盖可以从任何有形的计算机可读设备或介质访问的计算机程序。
[0031] 计算机可读存储介质可以包括但不限于磁存储设备(例如,硬盘、软盘、以及磁带等等)、光盘(例如,压缩盘(CD)以及数字多功能盘(DVD)等等)、智能卡、以及闪存设备(例如,卡、棒以及键驱动器等等)。相比而言,计算机可读介质(即,非计算机可读存储介质)一般可附加地包括通信介质,诸如用于无线信号之类的传输介质。
[0032] 图1是转换原子读取-修改-写入访问的示例计算系统的框图。计算系统100可包括计算设备102,该计算设备102可以是例如移动电话、膝上型计算机、台式计算机或平板计算机等等。计算设备102可包括通过总线110连接到存储器106、存储设备108、网络接口112和显示设备接口114的多个处理器104。处理器104执行所储存的指令,并且可表示多核处理器、计算集群、或者任意数量的其他多处理器配置。由处理器104执行的指令可被用于对原子读取-修改-写入访问进行转换。存储器单元106储存可执行指令,并且可以是非永久存储器,诸如随机存取存储器(例如,静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、零电容RAM、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、嵌入式DRAM、扩展数据输出RAM、双数据率(DDR)RAM、电阻式随机存取存储器(RRAM)、参数随机存取存储器(PRAM)等)、只读存储器(ROM)(例如,掩模型ROM(Mask ROM)、可编程只读存储器(PRAOM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)等)、闪存、或任何其他合适的存储器系统。存储设备108可包括硬盘驱动器、光盘驱动器、通用串行总线(USB)闪存驱动器、驱动器阵列、或其任意组合。系统总线110可表示外围组件互连(PCI)、工业标准体系结构(ISA)、PCI-Express(高速PCI)、NuBus(网络用户总线)等等。显示设备接口114可从处理器接收致使图像要在显示设备116上显示的指令。
[0033] 存储器106可包括外部应用118和转换器120。外部应用118被配置成能在外部计算机处理器(即,与计算机处理器104不同的计算机处理器)上执行。因此,转换器120是二进制转换器,该二进制转换器将外部应用118的指令转换成可在处理器104上运行的本机指令。转换器120通过将来自外部应用118的指令转换为用于计算机处理器104的对应指令以及在计算机处理器104上执行经转换的指令来执行该转换。在一个示例中,转换器120是即时(just-in-time)编译器。
[0034] 应当理解,图1的框图并不旨在指示计算系统100要包括图1中所示的全部组件。相反,计算系统100可包括更少的或图1中未示出的附加组件(例如,附加应用、附加模块、附加存储器设备、附加网络接口等)。此外,转换器120的任何功能性可以部分或完全地在硬件中或者在处理器104中实现。例如,该功能性可用专用集成电路来实现、以在处理器104中实现的逻辑来实现、或者以任何其他设备来实现。
[0035] 图2是解说用于转换原子读取-修改-写入访问的方法200的框图。该方法可针对外部应用118由转换器120来执行。在框202处,转换器120将外部应用118划分成各指令块。相同块中的所有指令在该块的任何经生成的指令可被执行之前被转换。针对每个指令块执行框204至206。针对每条指令执行框206至224。在框208处,转换器120确定正被转换的指令是否是LOCK前缀原子读取-修改-写入访问。如果是的话,则在框210处,转换器120确定用于原子读取-修改-写入访问的地址是否是已知的。
[0036] 如果要访问的数据的地址未知,则在框214处,指令被生成以执行对齐检查。对齐检查确定原子读取-修改-写入访问是对齐的还是非对齐的。以此方式,对齐检查被推迟直到运行时。这允许对齐检查在稍后执行期间选择任一路径。在框216处,转换器120在访问是非对齐的情况下生成要获取和释放用于原子性的全局锁的指令。在一些实施例中,全局锁可同步对进程内、系统内或安全级别内的存储器的访问。例如,全局锁可在进程内的软件线程之间同步对存储器的访问,或者全局锁可以是互斥体(mutex),其在来自系统中的一个或多个进程的软件线程之间同步对存储器的访问。在一些实施例中,在各进程对其来说正以相同的安全级别运行的系统中的各种进程中的软件线程可使用与该安全级别相关联的全局锁来同步对存储器的访问。例如,安全级别可指示对应于地址的数据要与第一全局锁共享,或者对应于地址的数据要与第二全局锁共享。在该示例中,第一全局锁相比第二全局锁而言可以与较少数量的进程共享数据。例如,访问可包括地址和字节大小。如果两个进程尝试对被储存在地址二的四字节值进行相同的经仿真的原子读取-修改-写入,则非对齐访问使用相同的全局锁来进行同步。在另一示例中,如果第三进程将四字节值写入相同的地址二,则全局锁不被使用,因为它不是读取-修改-写入访问。如果第四进程将两字节值写入地址二,则不使用锁,因为访问是对齐的。在一些示例中,两个或更多个进程(对这些进程来说,至少一个进程正以不同的安全级别运行)可通过使用与这些进程的安全级别中的最低者相关联的全局锁来同步对存储器的访问。
[0037] 附加地,在框218处,转换器120生成本机指令以执行访问。因此,如果地址是非对齐的,则经生成的指令包括一个或多个常规的(即,非原子的)加载指令以及一个或多个常规的存储指令,这两者都支持非对齐访问。因此,在经转换的指令的执行期间,如果访问是非对齐的,则全局锁被获取,常规加载和存储指令被执行,并且该全局锁被释放。以下伪代码1表示将值1添加到非对齐的存储器位置的所生成的指令的示例:
[0038] CALL(调用)例程来获取全局锁
[0039] LOAD(加载)来自非对齐的存储器位置的值到寄存器中
[0040] ADD(添加)1到该寄存器中
[0041] STORE(储存)新的值到该非对齐的存储器位置中
[0042] CALL(调用)例程来释放全局锁
[0043] 伪代码1
[0044] 然而,如果地址是对齐的,则经生成的指令包括实现原子读取-修改-写入的一个或多个本机指令,诸如比较和交换指令、原子添加指令、或加载-链接/有条件储存指令对。因此,在经转换的指令的执行期间,如果访问是对齐的,则只有原子读取-修改-写入访问被执行。没有全局锁被使用。以下伪代码2表示将值1添加到对齐的存储器位置的所生成的指令的示例:
[0045] LOAD-LINK(加载-链接)来自对齐的存储器位置的值到寄存器中
[0046] ADD(添加)1到该寄存器中
[0047] STORE-CONDITIONAL(有条件储存)新的值到该对齐的存储器位置中
[0048] REPEAT(重复)IF(如果)STORE-CONDITIONAL指令失败
[0049] 伪代码2
[0050] 如果要访问的数据的地址是已知的,则在框212处,作出关于访问是否对齐的确定。如果访问是非对齐的,则在框220处,指令被生成以获取和释放全局锁,如以上所描述。此外,在框222处,指令被生成以执行非原子访问,如以上所描述。然而,如果访问是对齐的,则在框224处,本机原子指令被生成,如以上所描述。以此方式,如果地址是未知的,则两个指令集被生成,一个指令集用于处置对齐的情形,且一个指令集用于处置非对齐的情形。然而,如果地址是已知的,则只有一个版本的指令被生成,要么是用于对齐情形的指令要么是用于非对齐情形的指令。
[0051] 在一个实施例中,转换器120使用到执行的非对齐路径的回退来隐式地执行对齐检查。在该实现中,转换器120不生成显式的对齐检查。取而代之地,转换器120在LOAD-LINK指令或本机原子读取-修改-写入指令遇到非对齐的地址的情况下依赖于处理器104来生成非对齐访问异常。该场景假定转换器120已针对非对齐访问异常安排了将控制转移到非对齐异常处置程序(Unaligned Exception Handler)。此类处置程序可以是用于处理器104的本机代码;这通常不是由转换器120动态地生成的代码。该代码在处理器104作出非对齐访问的情况下被触发。在这样的场景中,处理器104在发生非对齐访问时触发非对齐异常处置程序的执行。另外,存在每线程变量,诸如UnalignedRecoveryAddress(非对齐恢复地址)。非对齐异常处置程序被编码为在恢复地址变量(例如,UnalignedRecoveryAddress)中所储存的地址处恢复执行。
[0052] 伪代码3是用于这样的实现的所生成的指令的示例。伪代码3是伪代码1和2的组合,存在一些修改:
[0053] SET(设置)UnalignedRecoveryAddress为UnalignedPath(非对齐路径)
[0054] AlignedPath(对齐路径):
[0055] LOAD-LINK(加载-链接)来自对齐的存储器位置的值到寄存器中
[0056] ADD(添加)1到该寄存器中
[0057] STORE-CONDITIONAL(有条件储存)新的值到该对齐的存储器位置中
[0058] GOTO(转到)AlignedPath IF(如果)STORE-CONDITIONAL指令失败
[0059] GOTO Done(完成)
[0060] UnalignedPath(非对齐路径):
[0061] CALL(调用)例程来获取全局锁
[0062] LOAD(加载)来自非对齐的存储器位置的值到寄存器中
[0063] ADD(添加)1到该寄存器中
[0064] STORE(储存)新的值到该非对齐的存储器位置中
[0065] CALL(调用)例程来释放全局锁
[0066] Done(完成):
[0067] 伪代码3
[0068] 在伪代码3中,在AlignedPath之下,如果另一执行线程在LOAD-LINK成功后访问相同的存储器位置,则STORE-CONDITIONAL将失败。在这样的场景中,LOAD-LINK被重试。在一些处理器上,STORE-CONDITIONAL也可能出于其他原因而失败。
[0069] 在伪代码3的另一实现中,转换器120避免生成用于非对齐场景的机器指令。相比而言,在非对齐场景中,没有代码被生成来直接地获取锁、非原子地进行访问,以及释放锁。取而代之地,调用获取锁、执行访问,以及释放锁的预生成的函数的代码被生成。该预生成的函数代码可用诸如C、C++等语言来提前编写和编译。在一个实现中,为每个LOCK前缀指令提供一个函数。在另一实现中,所有函数可被合并到一个函数中。类似的办法可针对对齐情形来完成,其中对齐代码的所有可能版本作为预生成的函数而存在,并且经生成的代码调用这些函数。在另一实现中,用于这些函数的本机代码可被动态地生成一次(或固定次数),并且随后所生成的代码的许多实例简单地调用这些函数。附加地,这些技术可被应用于伪代码1-5中的任一者的任何实例。
[0070] 附加地,在由伪代码1-3表示的场景中,非对齐异常处置程序可被改变以执行对应的预生成的或经动态地生成的代码。
[0071] 伪代码4表示针对对齐路径的示例生成的代码,其使用本机COMPARE-AND-SWAP(比较和交换)指令而不是LOAD-LINK或STORE-CONDITIONAL:
[0072] LOAD(加载)来自存储器位置的值到寄存器中
[0073] ADD(添加)1到该寄存器中
[0074] COMPARE-AND-SWAP旧值与新值,到存储器位置
[0075] REPEAT(重复)IF(如果)COMPARE-AND-SWAP返回了不是旧值的值
[0076] 伪代码4
[0077] 伪代码5表示改为用于COMPARE-AND-SWAP指令的针对非对齐路径的示例生成的代码:
[0078] CALL(调用)例程来获取全局锁
[0079] LOAD(加载)来自非对齐的存储器位置的值到寄存器中
[0080] ADD(添加)1到该寄存器中
[0081] STORE(储存)新的值到该非对齐的存储器位置中
[0082] CALL(调用)例程来释放全局锁
[0083] 伪代码5
[0084] 在一个实现中,对齐路径(例如,伪代码4)被生成,但非对齐路径不被直接地生成。取而代之地,非对齐异常处置程序通过获取全局锁、进行比较和交换操作、使用支持非对齐的地址的非原子指令、释放全局锁以及恢复执行来模拟非对齐COMPARE-AND-SWAP。附加地,在另一实现中,伪代码4和5可按与被用来构造伪代码3类似的方式来被组合。
[0085] 以上关于COMPARE-AND-SWAP指令所描述的场景还可应用于其他本机原子读取-修改-写入指令,诸如原子Add。然而,在一些处理器上,其可能不适用于Load-Link或Store-Conditional指令,因为非对齐的异常稍后将致使Store-Conditional失败,因为处理器104认为Load-Link或Store-Conditional配对已被中断。
[0086] 图3是用于转换操作系统进程的示例计算机可读存储设备的框图。计算机可读存储设备300可由处理器302通过计算机总线304来访问。此外,计算机可读存储设备300可包括引导处理器302执行当前方法的各步骤的代码。
[0087] 本文中所讨论的各种软件组件可被储存在计算机可读存储设备300上,如图3中所指示的。例如,有形计算机可读存储介质300可包括转换器306。转换器306确定第一语言的机器指令指定原子读取-修改-写入访问。附加地,转换器306确定要由机器指令访问的地址最初是已知的还是未知的。此外,转换器306生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。另外,转换器306生成第二语言的机器指令以在地址对齐的情况下执行原子访问。转换器306生成第二语言的机器指令以在地址非对齐的情况下执行非原子访问。附加地,转换器306生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0088] 应当理解,取决于具体应用,图3中未示出的任意数量的附加的软件组件可以被包括在有形的计算机可读存储介质300内。虽然已经用因结构特征和/或方法而异的语言描述了本主题,但应当理解,所附权利要求书中定义的主题不必限于以上所描述的具体结构特征或方法。相反,以上所描述的具体结构特征和方法是作为实现权利要求书的示例形式公开的。
[0089] 虽然许多示例已解说了外部应用118可如何在ARM处理器上被执行,但是应当认识到,本文中的示教也可被应用于在其他外部处理器(例如,非ARM处理器)上执行x86应用。换言之,本文中所描述的技术可被应用于其中作出对非对齐的地址的原子读取-修改-写入访问的外部应用运行的任何处理器。
[0090] 示例1
[0091] 示例1是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。这些指令附加地在地址非对齐的情况下致使处理器获取全局锁。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0092] 示例2
[0093] 示例2是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。这些指令还在地址非对齐的情况下致使处理器获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。此外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,地址是对齐的地址。
[0094] 示例3
[0095] 示例3是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该指令附加地在地址非对齐的情况下致使处理器获取全局锁。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,地址是非对齐的地址。
[0096] 示例4
[0097] 示例4是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该指令附加地在地址非对齐的情况下致使处理器获取全局锁。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,这些指令致使处理器执行经生成的机器指令。
[0098] 示例5
[0099] 示例5是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。这些指令附加地在地址非对齐的情况下致使处理器获取全局锁。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放该全局锁。在该示例中,这些指令致使处理器执行经生成的机器指令。在该示例中,执行经生成的机器指令包括获取全局锁。在该示例中,执行经生成的机器指令附加地包括执行非原子访问。在该示例中,执行经生成的机器指令还包括释放全局锁。
[0100] 示例6
[0101] 示例6是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。附加地,这些指令致使处理器生成第二语言的机器指令以执行地址的对齐检查。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。这些指令附加地在地址非对齐的情况下致使处理器获取全局锁。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。
[0102] 示例7
[0103] 示例7是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。这些指令还致使处理器确定要由机器指令访问的地址最初是未知的。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。这些指令附加地在地址非对齐的情况下致使处理器获取全局锁。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。替代地或附加地,这些指令致使处理器在地址是对齐的地址的情况下获取全局锁、执行非原子访问,以及释放全局锁。
[0104] 示例8
[0105] 示例8是一种用于转换原子读取-修改-写入访问的系统。该系统包括计算机处理器和计算机存储器。计算机存储器储存致使计算机处理器确定第一语言的机器指令指定原子读取-修改-写入访问的指令。此外,这些指令致使处理器生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。这些指令附加地在地址非对齐的情况下致使处理器获取全局锁。另外,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0106] 替代地或附加地,第二语言的机器指令可包括用来处置其中地址对齐的情形的本机原子读取-修改-写入指令。替代地或附加地,全局锁可同步进程内的存储器访问。替代地或附加地,全局锁可同步系统内的各进程之间的存储器访问。替代地或附加地,全局锁可同步正以相同安全级别运行的各进程之间的存储器访问。替代地或附加地,进程的安全级别可指示存储器访问可使用第一全局锁或第二全局锁来被同步。替代地或附加地,全局锁可同步各进程之间的存储器访问,对这些进程来说,至少一个进程正以不同的安全级别运行,其中该锁与这些进程的最低安全级别相关联。
[0107] 示例9
[0108] 示例9是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0109] 示例10
[0110] 示例10是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。在该示例中,该方法包括确定要由机器指令访问的地址是已知的。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0111] 示例11
[0112] 示例11是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,地址是非对齐的地址。
[0113] 示例12
[0114] 示例12是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,该方法包括执行经生成的指令。
[0115] 示例13
[0116] 示例13是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,地址是非对齐的地址。在该示例中,该方法包括执行经生成的指令。在该示例中,执行经生成的机器指令包括获取全局锁。在该示例中,执行经生成的机器指令附加地包括执行非原子访问。在该示例中,执行经生成的机器指令还包括释放全局锁。
[0117] 示例14
[0118] 示例14是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。附加地,该方法包括确定地址最初是未知的。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0119] 示例15
[0120] 示例15是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。该方法进一步包括确定要由机器指令访问的地址最初是未知的。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0121] 示例16
[0122] 示例16是一种用于转换原子读取-修改-写入访问的方法。该方法包括确定第一语言的机器指令指定原子读取-修改-写入访问。该方法附加地包括确定地址是否对齐。此外,该方法包括生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。该方法还包括生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。该第一语言用于第一处理器,而该第二语言用于第二处理器。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。另外,该方法包括生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。附加地,第二语言的机器指令包括用来处置其中地址对齐的情形的本机原子读取-修改-写入指令。
[0123] 示例17
[0124] 示例17是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0125] 示例18
[0126] 示例18是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,地址是非对齐的地址。
[0127] 示例19
[0128] 示例19是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,这些计算机可读指令致使该一个或多个处理设备执行经生成的指令。
[0129] 示例20
[0130] 示例20是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,地址是非对齐的地址。在该示例中,这些计算机可读指令致使该一个或多个处理设备执行经生成的指令。在该示例中,执行经生成的机器指令包括获取全局锁。在该示例中,执行经生成的机器指令附加地包括执行非原子访问。在该示例中,执行经生成的机器指令还包括释放全局锁。
[0131] 示例21
[0132] 示例21是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。
[0133] 示例22
[0134] 示例22是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备确定地址最初是未知的。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。替代地或附加地,全局锁同步进程内的访问。替代地或附加地,全局锁同步系统内的各进程之间的访问。替代地或附加地,进程的安全级别指示对应于这些访问的数据要使用该全局锁来被共享或者对应于这些访问的数据要使用第二全局锁来被共享。
[0135] 示例23
[0136] 示例23是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。附加地,第二语言的机器指令包括用来处置其中地址对齐的情形的本机原子读取-修改-写入指令。
[0137] 示例24
[0138] 示例24是用于储存计算机可读指令的一个或多个计算机可读存储设备,这些计算机可读指令在由一个或多个处理设备执行时致使该一个或多个处理设备确定第一语言的机器指令指定原子读取-修改-写入访问。此外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址对齐的情况下执行针对地址的原子访问。另外,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下获取全局锁。附加地,这些指令致使处理器生成第二语言的机器指令以在地址非对齐的情况下执行针对地址的非原子访问。附加地,这些计算机可读指令致使该一个或多个处理设备生成第二语言的机器指令以在地址非对齐的情况下释放全局锁。在该示例中,地址是对齐的。
[0139] 以上已经描述的内容包括所要求保护的主题的各方面的示例。当然,出于描述所要求保护的主题的目的而描述组件或方法的每一个可构想的组合是不可能的,但本领域内的普通技术人员应该认识到,所要求保护的主题的许多其他组合和排列都是可能的。因此,所要求保护的主题旨在包含落在所附权利要求书的精神和范围内的所有此类更改、修改和变化。
[0140] 特别地,对于由上述组件、设备、电路、系统等执行的各种功能,除非另外指明,否则用于描述这些组件的术语(包括对“装置”的引用)旨在对应于执行所描述的执行本文中所要求保护的主题的示例性方面中所解说的功能的组件的指定功能(例如,功能上等效)的任何组件,即使这些组件在结构上不等效于所公开的结构。关于这一点,还应认识到,本创新包括具有用于执行所要求保护的主题的各种方法的动作和事件的计算机可执行指令的系统以及计算机可读存储介质。
[0141] 有多种实现所要求保护的主题的方式,例如,使应用和服务能使用在此描述的技术的适当的API、工具包、驱动程序代码、操作系统、控件、独立或可下载的软件对象等等。所要求保护的主题还构想从API(或其他软件对象)的观点来看,以及从根据本文中所述技术操作的软件或硬件对象的用途。如此,本文中所描述的所要求保护的主题的各种实现可以具有完全以硬件、部分以硬件而部分以软件、以及以软件来实现的各种方面。
[0142] 上述系统已经参考若干组件之间的交互被描述。可领会到,这些系统和组件可包括组件或指定的子组件、某些指定的组件或子组件、以及附加的组件,并且根据上述内容的各种置换和组合。子组件还可作为通信地耦合到其他组件的组件来实现,而不是被包括在父组件内(分层的)。附加地,应当注意,一个或多个组件也可被组合到提供聚合功能性的单一组件中,或者也可被划分成若干单独的子组件,并且,可以提供诸如管理层之类的任何一个或多个中间层,以可通信地耦合到此类子组件,以便提供集成的功能性。本文中所描述的任何组件也可与本文中未专门描述但本领域技术人员一般已知的一个或多个其他组件进行交互。另外,尽管可能已经相对于若干实现中的一个实现公开了所要求保护的主题的某一特征,但是如可被期望的及对任何给定或特定应用而言有利的那样,此种特征可与其他实现的一个或多个其他特征相组合。而且,就术语“包括”、“含有”、“具有”、“包含”、其变型以及其他类似单词在详细描述或权利要求书中的使用而言,这些术语旨在如术语“包括”作为开放的过渡词那样为包含性的而不排除任何附加的或其他元素。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用