在多版本异步动态软件更新期间通过虚拟存储器覆盖技术进行的全局变量迁移

文档序号:1432158 发布日期:2020-03-17 浏览:23次 >En<

阅读说明:本技术 在多版本异步动态软件更新期间通过虚拟存储器覆盖技术进行的全局变量迁移 (Global variable migration through virtual memory overlay techniques during multi-version asynchronous dynamic software updates ) 是由 王愷婷 吴芃 于 2017-10-13 设计创作,主要内容包括:一种在实时程序更新期间管理处理系统上的全局变量迁移的系统和方法。所述方法包括:在所述处理系统的物理存储器中创建共享数据段;将程序的第一版本的第一全局变量数据段的逻辑地址空间绑定到所述共享数据段的物理地址;将所述程序的更新版本的第二全局变量数据段的逻辑地址空间绑定到所述共享数据段的所述物理地址。所述第一全局变量数据段和所述第二全局变量数据段同时存在,并且都映射到存储在所述共享数据段中的公共全局变量。(A system and method for managing global variable migration on a processing system during real-time program updates. The method comprises the following steps: creating a shared data segment in a physical memory of the processing system; binding a logical address space of a first global variable data segment of a first version of a program to a physical address of the shared data segment; binding a logical address space of a second global variable data segment of the updated version of the program to the physical address of the shared data segment. The first global variable data segment and the second global variable data segment coexist and both map to a common global variable stored in the shared data segment.)

在多版本异步动态软件更新期间通过虚拟存储器覆盖技术进 行的全局变量迁移

相关申请案交叉申请

本专利申请要求于2017年6月2日提交的发明名称为“在多版本异步动态软件更新期间通过虚拟存储器覆盖技术进行的全局变量迁移”(Global Variable Migration viaVirtual Memory Overlay Technique for Multi-Version Asynchronous DynamicSoftware Update)的第15/612,602号美国专利申请案的在先申请优先权,该在先申请的全部内容以引入的方式并入本文本中。

技术领域

本发明涉及多版本异步动态软件更新,更具体地,涉及软件更新期间全局变量的迁移。

背景技术

已开发出一种动态软件更新(Dynamic Software Update,DSU)流程,可以允许在不停机的情况下将关键安全补丁和升级等代码和数据更新应用于软件程序。执行动态软件更新时,管理全局变量会面临挑战。全局变量是程序中引用的所有函数都可访问的变量,系统通常会宣布全局变量适用于所有函数,并且一旦宣布,这些全局变量将在程序的整个运行期间保留在存储器中。

首次加载程序时,会在虚拟存储器中为该程序分配一个唯一的进程地址空间,该地址空间会映射到物理存储器中的相应空间。该存储器用于执行指令和存储数据。在支持DSU的环境中,可以在进程地址空间内为多个版本的指令代码和数据分配不同的版本地址空间。通常,特定程序版本会具有为其分配的版本地址空间,该版本地址空间将包括指示代码的空间和数据的空间。数据的地址空间可以包括为全局变量分配的数据段。因此,在程序可能同时存在多个版本的DSU环境中,可能会出现包含相同全局变量的多个数据段,这会引起全局变量的管理和迁移问题。

过去已通过各种方式解决这个问题。例如,某些DSU系统通过执行memcpy将旧程序版本的数据段中的全局变量的地址拷贝到新程序版本的数据段中的全局变量的地址来管理全局变量的迁移。这就要求新程序版本接收旧程序版本的数据段中的全局变量的地址,然后通过取消引用指针来访问全局变量的值来获取这些值。这种系统要求在全局变量迁移期间停止所有程序线程,以避免变量产生竞争的情况。(例如,参见Kitsune:用于C语言的高效通用动态软件更新(Efficient,General-purpose Dynamic Software Updating forC);Christopher M.Hayden、Edward K.Smith、Michail Denchev、Michael Hicks、JeffreyS.Foster;美国马里兰大学帕克分校;https://www.cs.umd.edu/~tedks/papers/2012- oopsla-kitsune.pdf)

其它DSU系统试图通过使新版本程序直接使用指针操纵旧程序版本的数据段中的全局变量来防止竞争情况的产生和/或减轻线程迁移的风险。这种方法的缺点在于新程序版本需要通过指针重定向来引用全局变量,这会对性能开销产生负面影响。此外,这种方法还可以使用一种工具将新程序的共享库组件进行一些重新编译,这种工具可以将直接访问手动转换为间接访问。在仅要求第三方插件开发人员提供二进制代码的插件体系结构中,要求对源代码进行重新编译不可行。此外,由于新程序版本的代码引用旧版本的数据段,因此即使所有线程都已从旧版本迁移到新版本,也无法简单地使用dlclose来关闭旧版本。

因此,需要一种如下的DSU系统:其可以促进全局变量的迁移而无需停止系统,无需访问程序源代码,并且允许在进程地址空间中取消分配未使用的程序版本。

发明内容

本发明提出了一种可在多线程应用程序这一上下文中支持全局变量迁移的动态软件更新(dynamic software update,DSU)方法和系统。所描述的DSU系统为异步系统,因为在可以应用动态更新之前无需停止应用环境。

根据第一示例方面,提供了一种在实时程序更新期间管理处理系统上的全局变量迁移的方法。所述方法包括:在所述处理系统的物理存储器中创建共享数据段;将程序的第一版本的第一全局变量数据段的逻辑地址空间绑定到所述共享数据段的物理地址;将所述程序的更新版本的第二全局变量数据段的逻辑地址空间绑定到所述共享数据段的所述物理地址。所述第一全局变量数据段和所述第二全局变量数据段同时存在,并且都映射到存储在所述共享数据段中的公共全局变量。

在一些示例中,所述处理系统先加载所述第一版本,再加载所述更新版本。加载所述第一版本时,为所述第一版本中引用的多个全局变量分配所述共享数据段中的物理地址。将虚拟地址包括在映射到所述全局变量的所述第一全局变量数据段中。加载所述更新版本时,为所述更新版本中引用但所述第一版本中未引用的新增全局变量分配所述共享数据段中的物理地址。此外,针对所述第一版本和所述更新版本中都引用的所述公共全局变量以及所述新增全局变量,将虚拟地址包括在映射到所述共享数据段中的所述物理地址的所述第二全局变量数据段中。将填充包括在所述第二全局变量数据段的所述虚拟地址中,所述第二全局变量数据段映射到所述第一版本中引用但所述更新版本中未引用的已丢弃全局变量的物理地址。

在所述第一方面的一些示例中,为所述第一版本生成标识所述第一版本中引用的所述全局变量和所述全局变量的地址的第一链接器映射;加载所述第二版本时,基于所述第一链接器映射确定以下内容:(i)所述更新版本中引用但所述第一版本中未引用的所述新增全局变量;(ii)所述第一版本和所述更新版本中都引用的所述公共全局变量;(iii)所述第一版本中引用但所述更新版本中未引用的所述已丢弃全局变量。

在示例实施例中,所述方法使得第一进程线程和第二进程线程在所述处理系统上同时处于活动状态,并且可以在不停止所述处理系统的情况下进行版本更新,分别执行所述程序的所述第一版本和所述更新版本。

在示例实施例中,创建所述共享数据段包括:获取所述共享数据段的共享内存文件描述符。绑定所述第一全局变量数据段的所述逻辑地址空间包括:基于所述共享内存文件描述符将所述逻辑地址空间内存映射到所述共享数据段;绑定所述第二全局变量数据段的所述逻辑地址空间包括:基于所述共享内存文件描述符将所述逻辑地址空间内存映射到所述共享数据段。

根据另一方面,提供了一种用于在实时程序更新期间管理全局变量迁移的处理系统。所述处理系统包括:处理设备;与所述处理设备相关联的存储器;用于存储指令的非瞬时性存储设备,所述指令在加载到所述存储器并由所述处理设备执行时使得所述处理设备执行上述总结的方法。

附图说明

为了更完整地理解本发明及其优点,现在参考下文结合附图进行的描述,其中:

图1是根据示例实施例的动态软件更新系统分配的地址空间的示意图;

图2示出了根据示例实施例的逻辑地址空间中被映射到物理存储器中的单个共享数据段的多个数据段的框图;

图3示出了根据示例实施例的程序版本更新的各方面;

图4是用于实现图1的异步动态软件更新系统的处理系统的示意图;

图5是根据示例实施例的在图4的处理系统上执行的方法的框图。

具体实施方式

本发明提出了一种可支持在动态软件更新(dynamic software update,DSU)期间进行全局变量迁移的系统和方法。所公开的系统可以用于在程序更新期间支持全局变量迁移,包括由多线程应用使用的插件更新等。所描述的DSU支持系统在某些应用中可以支持异步DSU,且无需停止即可完成更新。尽管当前描述的异步DSU支持系统可以在不同的环境中实现,但是在本说明书中使用标准的C语言编程语法来说明示例实施例。

参考图1,将在DSU工具100这一上下文中描述DSU支持系统的示例,该DSU工具100支持有多个程序版本更新(从version_1.so到version_N.so)的软件程序104。具体地,图1示出了逻辑地址空间102的形式的虚拟存储器,该逻辑地址空间已由处理系统400(下文将更详细地描述其示例)上运行的操作系统(operating system,OS)定义。在非限制性示例中,OS可以是Linux OS或Windows OS。如图1所示,逻辑地址空间102包括用于实现DSU工具100的共享对象。在一些示例中,DSU工具100为插件,并被公开为逻辑地址空间102中的程序可访问的一个或多个应用程序接口(application program interface,API)。

当处理系统400加载程序104时(例如,使用“dlopen”命令动态加载),OS为程序分配逻辑地址空间102内的进程地址空间106。在所述实施例中,程序104最初体现为二进制文件“version_1”。加载version_1包括编译和链接进程,这些进程会创建共享库“version_1.so”,该共享库包括程序104运行时所需的可执行代码、数据段和其它元素。为共享库version_1.so分配进程地址空间106内的地址空间110(1)。将分配的地址空间110(1)分为多个段,这些段可包括(例如,以可执行链接格式(executable and linkable format,ELF))存储可执行进程的二值化图像的文本段,以及可以包括包含可执行代码中引用的全局变量的数据段112(1)等等。

程序204version_1.so宣布的任何全局变量都分配了空间并存储在全局变量数据段112(1)中。就此而言,图1示出了在加载程序204以创建共享库version_1.so之后共享全局变量数据段112(1)的内容。在所示示例中,version_1.so宣布了三个全局变量,即varX、varY和varZ。每个全局变量已在全局变量数据段112(1)中分配了相应的地址位置,即P1:D1、P1:D2和P1:D3,其中“PX”表示逻辑地址空间102中的特定页面(在所示示例中为页面“P1”),“DY”表示距指定页面的开始的特定偏移(在所示示例中分别为偏移“D1”、“D2”和“D3”)。

参考图2,如本领域所公知的,OS分配给正在运行的程序的逻辑地址空间102是系统物理存储器210的虚拟表示。通常,逻辑内存页的大小对应物理内存帧的大小。逻辑地址到物理地址的转换由内存管理单元206与变换先行缓冲器(translation look-aheadbuffer,TLB)208一起操作执行。TLB 208包括将虚拟地址空间页号链接到对应的物理内存帧的转换表。如图2所示,在所示实施例中,内存管理单元(Memory Management Unit,MMU)206从OS获取包括页号P和偏移D(P:D)的逻辑地址202,参考TLB 208以获得对应于逻辑地址空间页号P的物理内存帧号F,并将检索到的帧号F与偏移D相结合,以获得物理内存地址204(F:D)。

在示例实施例中,DSU工具100用于进行操作,以便在物理存储器210中创建共享全局变量数据段212,作为虚拟地址空间110(1)的version_1.so数据段112(1)的物理表现。此外,DSU工具100用于允许共享全局数据段212同时作为程序104的多个更新版本(version_i.so,其中1≤i≤N)的虚拟地址空间数据段(数据段112(i),其中1≤i≤N)的物理表现。

为了创建和维护共享全局数据段212,在加载程序104的version_1.so以及后续可用的更新期间调用DSU工具100。就此而言,如上所述,最初加载程序104的第一版本(即version_1.so)时,version_1.so宣布的任何全局变量都会分配空间并存储在全局变量数据段112(1)中。在一示例实施例中,创建初始共享库version_1.so时,作为编译和链接进程的一部分,调用DSU工具100以创建共享数据段212并将其绑定到物理存储器212中的物理地址。在一示例中,上述操作通过使用如下所示的“shm_open”函数来完成:

//Create a shared memory segment

Int shm_fd=shm_open(“version_1”,O_CREAT|O_RDWR,0666);

函数shm_open将返回共享内存文件描述符作为变量shm_fd,将变量shm_fd绑定到共享存储器对象(即共享数据段212)的物理内存地址。然后,DSU工具100用于使用如“mmap”函数等内存映射函数将全局变量数据段112(1)的起始逻辑地址绑定到共享数据段212的物理内存地址:

Void*ptr=mmap(edata-0x30,4096,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_FIXED,shm_fd,0);

因此,一旦加载并运行初始共享库version_1.so,变量数据段112(1)的逻辑实体就会存在于version_1.so的逻辑地址空间110(1)中,其中,逻辑地址空间110(1)绑定到物理存储器210中的共享数据段212。就此而言,在图2所示的示例中,由于使用了“shm_open”和“mmap”函数,共享数据段212将在各自的物理内存地址F5:D1、F5:D2和F5:D3(其中FX表示物理存储器的特定帧,而DY表示该帧内的偏移)处分别包括version_1.so宣布的全局变量:varX、varY和varZ,如图2中的实线框所示。此外,共享内存文件描述符shm_fd将指向共享数据段212的物理地址(例如起始地址F5:D1),并且TLB中逻辑内存页到物理内存帧转换表将指定逻辑内存页“1”对应于物理内存帧“5”。在version_1.so执行期间,对变量数据段112(1)中标识的全局变量的任何引用都会有效地指向物理存储器210中的相关共享内存数据段212。

如本领域中公知的,作为在version_1.so等共享库的创建期间发生的链接进程的一部分,链接器可用于转储(例如,生成)相应的链接器映射。因此,在示例实施例中,在创建共享库version_1.so期间,生成了对应的链接器映射(在图1中表示为链接器映射LM 122(1)),该链接器映射标识了version_1.so中引用的全局变量以及这些变量在逻辑地址空间102中的逻辑地址。

如上所述,程序104在其运行期间从version_1到version_2以此类推直到version_N进行多次软件更新,从而产生对应的共享库version_1.so、version_2.so,以此类推直到version_N.so。就此而言,当程序104的版本的实时更新可用时,DSU工具100支持在这些实时更新期间进行全局变量迁移,从而使得程序104的并行版本能够利用物理存储器210中的共享数据段212。现在将参考图1到图3描述从version_1.so到程序104的version_2.so的程序更新期间DSU工具100的操作。程序版本更新可以通过不同方式触发,包括在更新可用时通过手动触发或通过更新信号(例如SIGUSR)来触发。

当动态加载更新的version_2.so时,也在进程地址空间106内分配了版本特定的地址空间110(2)。如上所述,分配的地址空间110(2)分为多个段,这些段可以包括存储可执行进程的二值化图像的文本段,以及其中包括可执行代码中引用的全局变量的全局变量数据段112(2)。出于说明目的,version_1.so中引用的一些全局变量未在version_2.so中未引用,version_2.so中引用的一些新全局变量未在version_1.so中引用。在所示的特定示例中,全局变量varX和varY在版本之间迁移,但是全局变量varZ已从version_2.so中删除,并添加了新全局变量varA、varB和varC。因此,全局变量数据段112(2)包括全局变量varX、varY、varA、varB和varC,但不包括varZ。参考图3,在更新的version_2.so的编译和链接期间调用DSU工具100,以使用以变量shmfd存储的共享内存文件描述符将全局变量数据段112(2)绑定到共享数据段212的物理存储器210位置。在示例实施例中,上述操作使用“mmap”函数等内存映射函数来完成:

Void*ptr2=mmap(edata2-0x30,4096,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_FIXED,shm_fd,0);

作为编译和链接进程的一部分,DSU工具100用于访问与当前version_i.so(例如本示例中的version_2)对应的目标文件,以及之前的version_i-1.so的链接器映射LM 122(i-1)(例如本示例中的version_1.so的Linker-map MP 122(1)),从而确定全局变量在版本之间的变化,以及确定先前数据段112(i-1)中的全局变量的地址(例如本示例中的数据段112(1))。DSU工具100使用该信息来确保来自先前version_1.so的已删除的全局变量在共享数据段212中不会被来自当前添加的更新的version_2.so的新全局变量所覆盖。参考图1,上述操作通过在图2中所示的物理存储器210中的共享数据段212中考虑进程地址空间106的逻辑环境中的version_1.so全局变量数据段112(1)和version_2.so全局变量数据段112(2)来说明。在所示示例中,DSU工具100识别出数据段112(1)中的前两个全局变量varX和varY数据已从version_1.so迁移到version_2.so,并使OS将全局变量数据段112(2)中的前两个逻辑地址(P2:D1和P2:D2)分配给这些变量。在所示的示例中,数据段112(2)使用的地址与较早的version_1.so的数据段112(1)具有不同的逻辑页面(页面P2而非页面P1),但相对偏移(D1,D2)保持不变。

DSU工具100还识别出version_1.so的第三全局变量varZ不再使用,并且新增了全局变量varA、varB和varC。为避免数据段112(2)中的逻辑内存地址与共享数据段212的物理存储器之间发生冲突,DSU工具100在逻辑全局变量数据段112(2)中创建填充,在填充后添加新变量。例如,如图1所示,填充数据段112(2)中与数据段112(1)的地址位置P1:D3相对应的地址位置P2:D3,并为新变量varA、varB和varC分配数据段112(2)的随后三个可用地址P2:D4、P2:D5、P2:D6。在物理存储器210这一上下文中,如图2中的虚线框所示,三个新变量varA、varB和varC添加到共享数据段212的末尾的相应位置(F5:D4、F5:D5、F5:D6)。根据通过上述内存映射函数(memory mapping function,mmap)进行绑定的结果,TLB 208的转换表将逻辑地址页P2链接到物理内存帧号F5。因此,占用逻辑地址P1:D1(varX)、P1:D2(varY)和P1,D3(varZ)的数据段112(1)和占用逻辑地址P2:D1(varX)、P2:D2(varY),P2:D4(varZ)的数据段112(2)都通过TLB 208链接到物理存储器210中的同一共享数据段212。

在version_2.so的打开完成时,version_1.so和version_2.so以及其各自的全局变量数据段112(1)、112(2)都存在于程序104的逻辑进程地址空间106中,并且就迁移的变量varX和varY而言,共享数据段212的物理存储器位置由version_1.so和version_2.so共享。varZ的内存地址仍可用于version_1.so而不会有被version_2.so覆盖的风险。先前未使用的地址位置在共享数据段212中用于新变量varA、varB和varC。迁移的全局变量varX和varY能够由仍在执行旧version_1.so的进程线程或在执行新version_2.so的进程线程读取和更新;执行version_1.so的进程线程能够读取和更新varZ,但是执行version_2.so的进程线程不会知道varZ;执行新的version_2.so的进程线程可以读取和更新varA、varB和varC,但是执行旧version_1.so的进程线程不会知道varA、varB和varC。

另外,作为创建共享库version_2.so期间发生的链接进程的一部分,链接器用于为生成相应的version_2.so的链接器映射(在图1中表示为链接器映射LM 122(2))。Linker_map 122(2)标识程序version_2.so中引用的全局变量,以及这些变量在数据段112(2)中的逻辑地址。然后,DSU工具100可以使用链接器映射122(2)作为下一个版本更新的基础,重复上述更新过程。

在所示的示例中,数据段112(N)表示对应于程序104的第N个版本更新的共享库version_N.so的逻辑地址空间数据段。如图1和图2所示,因为version_2.so,已删除变量varB并添加了新变量varK。在数据段112(N)中,填充已添加到各地址以跳过虚拟地址位置PM:D5,在逻辑地址空间数据段112(N)和物理存储器数据段212中,已将新变量varK以偏移位置D7添加到数据段的末尾。在TLB 208中,数据段112(N)的逻辑页号“M”(以及先前版本数据段112(1)和112(2)的页号)映射到用于共享数据段212的物理帧号“5”。

在示例实施例中,当先前版本共享库version_i.so不再被任何进程线程使用时,可以(例如使用dlclose)关闭共享库,并且可以释放为该版本唯一分配的虚拟地址空间和物理地址空间,而不会影响存储在共享数据段212中的全局变量。

从以上描述中将会理解,在示例实施例中,DSU工具100通过将新程序版本的数据段的虚拟地址映射到旧数据段或先前程序版本映射到的相同物理地址上来实现全局状态迁移。多个新版本的虚拟数据段地址可以指向共享全局数据段212的相同物理地址。DSU工具100不需要在版本之间复制数据段,而是使用内存共享和内存映射来操纵TLB地址映射。上述方法可以缓解竞争情况,因为它使用了多个虚拟地址都指向的一个物理存储设备。此外,克服了在更新期间必须停止所有进程线程的问题,因为进程线程无论在执行哪个version_i.so,所需的全局变量都存在于共享数据段212中。此外,DSU工具100启用了一种环境,在该环境中,可在编译和链接新版本的同时处理全局变量迁移,而无需插件开发人员修改其代码或提供非二进制代码。

如上所述,可以在不停止仍在运行各种旧程序版本的系统进程线程的情况下添加和删除全局变量。在将更新链接到version_i.so时,DSU工具100使用先前版本version_i-1.so的链接器映射122(i-1)来调整当前版本的虚拟数据段112(i)内全局变量的布局。具体地,DSU工具100采用由先前version_i-1.so产生的链接器映射122(i-1),以及当前共享库library version_i.so中的目标文件,调用系统链接器来创建虚拟数据段112(i),并更新当前共享库version_i.so的共享数据段212。这样,DSU工具100有效地将所有新创建的变量推送到虚拟数据段112(i)和物理数据段212的末尾,并在虚拟数据段112(i)中分配填充空间以为先前版本中已存在的变量保留物理数据段212中的空间。因此,version_0.so、version_1.so和version_N.so都能够被某些线程在系统内部同时使用。

图4是可用于实现本文所公开的方法和系统的示例处理系统400的示意图。处理系统400可以是服务器或基站,或任何合适的计算系统等。可以使用适合实现本发明所述示例的其它处理系统,其它处理系统可以包括与以下讨论的组件不同的组件。尽管图4示出了每个组件的单个实例,但是还可能存在处理系统400中的每个组件的多个实例,并且处理系统400可以使用并行和/或分布式系统实现。

处理系统400可以包括一个或多个处理设备405,例如处理器、微处理器、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)、专用逻辑电路、MMU 206和TLB 208,或它们的组合。处理系统400还可包括一个或多个可选的输入/输出(input/output,I/O)接口410,该输入/输出接口410可连接一个或多个适当的输入设备435和/或输出设备440。处理系统400可包括一个或多个用于与网络(例如,内网、互联网、P2P网络、WAN和/或LAN)或其它节点进行有线或无线通信的网络接口415。网络接口415可以包括连接有线网络和无线网络的一个或多个接口。有线网络可以使用有线链路(例如,以太网电缆),而在使用无线网络的情况下,无线网络可以使用在天线445等天线上传输的无线链接。网络接口415可以通过一个或多个发射器或发射天线以及一个或多个接收器或接收天线等进行无线通信。在该示例中,示出了可以同时用作发射器和接收器的单个天线445。然而,在其它示例中,可以存在用于发送和接收的多个单独天线。在处理系统以SDN控制器等网络控制器为例的实施例中,可能不存在无线接口,并且在所有实施例中可能不存在天线445。处理系统400还可包括一个或多个存储单元420,存储单元420可包括大容量存储单元,例如固态驱动器、硬盘驱动器、磁盘驱动器和/或光盘驱动器。

处理系统400可以包括一个或多个存储器425,存储器425可以包括物理存储器210,物理存储器210可以包括易失性或非易失性存储器(例如,闪存、随机存取存储器(random access memory,RAM)和/或只读存储器(read-only memory,ROM))。非瞬时性存储器425(以及存储设备420)可以存储指令以供处理设备405执行,从而执行本发明中所描述的方法等。存储器425可以包括其它软件指令,用于实现操作系统(operating system,OS)、DSU工具100以及其它应用/功能等。在一些示例中,一个或多个数据集和/或模块可以由外部存储器(例如,与处理系统400有线或无线通信的外部驱动器)提供,或者可以由瞬时性或非瞬时性计算机可读介质提供。非瞬时性计算机可读介质的示例包括RAM、ROM、可擦可编程ROM(erasable programmable ROM,EPROM)、电可擦可编程ROM(electrically erasableprogrammable ROM,EEPROM)、闪存、CD-ROM或其它便携式存储器。

可能存在总线430,以供在处理系统400的组件之间通信。总线430可以是任何适当的总线架构,包括存储器总线、***总线或视频总线等。可选地,输入设备435(例如,键盘、鼠标、麦克风、触摸屏和/或小键盘)和输出设备440(例如,显示器、扬声器和/或打印机)被示为位于处理系统400的外部,并连接到可选的I/O接口410。在其它示例中,输入设备435和/或输出设备440中的一个或多个可以作为处理系统400的组件包括在内。处理系统400是网络控制器的实施例可能缺少物理I/O接口410,而可能是所谓的无头服务器,对于该服务器,所有交互都是通过与网络接口415的连接来进行。

图5示出了根据上述实施例实现的在实时程序更新期间管理处理系统400上的全局变量迁移的方法的示例。在至少一些示例中,使得处理设备405执行图5中所示的方法的指令存储在处理系统400的存储设备420中。该方法包括在处理系统400的物理存储器210中创建共享数据段212(步骤502),将程序104的第一版本(version_1.so)的第一全局变量数据段112(1)的逻辑地址空间110(1)绑定到共享数据段212的物理地址204(步骤504);将程序104的更新版本(version_2.so)的第二全局变量数据段112(2)的逻辑地址空间110(2)绑定到共享数据段的物理地址204(步骤506)。第一全局变量数据段112(1)和第二全局变量数据段112(2)同时存在,并且每个都映射到存储在共享数据段212中的公共全局变量。

在示例实施例中,处理系统400先加载第一版本(version_1.so),再加载更新版本(version_2.so)。加载第一版本(version_1.so)时,为第一版本(version_1.so)中引用的多个全局变量(varX、varY、varZ)分配共享数据段212中的物理地址。将虚拟地址包括在映射到全局变量(varX、varY、varZ)的第一全局变量数据段112(1)中。加载更新版本(version_2.so)时,在共享数据段212中为更新版本(version_2.so)中引用但第一版本(version_1.so)中未引用的新增全局变量(varA、varB、varC)分配物理地址。此外,对于第一版本和更新版本中都引用的公共全局变量(varX、varY)以及新增全局变量(varA、varB、varC),将虚拟地址包含在映射到共享数据段212中的物理地址的第二全局变量数据段112(2)中。将填充包括在第二全局变量数据段112(1)的虚拟地址中,第二全局变量数据段112(1)映射到第一版本(version_1.so)中引用但更新版本(version_2.so)中未引用的已丢弃全局变量(varZ)的物理地址。

在一些示例实施例中,为第一版本(version_1.so)生成标识第一版本中引用的全局变量(varX、varY、varZ)和全局变量的地址的第一链接器映射122(1)。加载第二版本(vesion_2.so)时,基于据第一链接器映射122(1)确定以下内容:(i)更新版本中引用但第一版本中未引用的新增全局变量(varA、varB、varC);(ii)第一版本和更新版本中都引用的公共全局变量(varX、varY);以及(iii)在第一版本中引用但更新版本中未引用的已丢弃全局变量(varZ)。

在示例实施例中,所述方法使处理系统400上同时处于活动状态的第一进程线程和第二进程线程分别执行程序104的第一版本(version_1.so)和更新版本(version_2.so),并且可以在不停止处理系统400的情况下进行版本更新。

在示例实施例中,步骤502中的创建共享数据段212包括:获取共享数据段212的共享内存文件描述符。步骤504中的绑定第一全局变量数据段112(1)的逻辑地址空间110(1)包括:基于共享内存文件描述符将逻辑地址空间内存映射到共享数据段212;绑定第二全局变量数据段112(2)的逻辑地址空间110(2)包括:基于共享内存文件描述符将逻辑地址空间内存映射到共享数据段212。

虽然本公开以特定顺序描述了带有步骤的方法和流程,但所述方法和流程的一个或多个步骤可以酌情省略或更改。一个或多个步骤可以酌情不按描述的顺序进行。

虽然本发明至少部分按所述方法进行描述,但本领域普通技术人员应理解,本发明也适用于执行所述方法的至少某些方面和特征的各个组件,无论是硬件组件、软件还是两者的任意组合。因此,本发明的技术方案可通过软件产品的形式体现。合适的软件产品可以存储在预先录制的存储设备或其它类似的非易失性或非瞬时性计算机可读介质中,包括DVD、CD-ROM、USB闪存盘、可移动硬盘或其它存储介质等。软件产品包括有形地存储在其中的指令,该指令能使处理设备(例如,个人计算机、服务器或网络设备)执行本文所公开的方法的示例。

可以对描述的实施例进行某些改动和修改。因此,上述讨论的实施例应视为说明性的而非限制性的。虽然已参考说明性实施例描述了本发明,但此说明书并不意图限制本发明。所属领域的技术人员在参考该说明书后,将会清楚说明性实施例的各种修改和组合,以及本发明其它实施例。因此,所附权利要求书意图涵盖任何此类修改或实施例。

17页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:通用用户身份模块应用专用文件下的高效文件标识符和短文件标识符

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!