CN1770108A - 软件在线升级的方法 - Google Patents

软件在线升级的方法 Download PDF

Info

Publication number
CN1770108A
CN1770108A CN 200410088571 CN200410088571A CN1770108A CN 1770108 A CN1770108 A CN 1770108A CN 200410088571 CN200410088571 CN 200410088571 CN 200410088571 A CN200410088571 A CN 200410088571A CN 1770108 A CN1770108 A CN 1770108A
Authority
CN
China
Prior art keywords
upgrading
software
thread
resources
marshalling
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
CN 200410088571
Other languages
English (en)
Other versions
CN100337204C (zh
Inventor
卢庆明
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CNB2004100885711A priority Critical patent/CN100337204C/zh
Publication of CN1770108A publication Critical patent/CN1770108A/zh
Application granted granted Critical
Publication of CN100337204C publication Critical patent/CN100337204C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种软件在线升级的方法,包括:将软件中需要一起实现升级的资源进行编组,形成不同的编组资源;在软件运行过程中将所述软件中涉及到访问编组资源的处理流程打补丁;分别对编组资源进行升级;恢复所述软件中涉及到访问编组资源的处理流程的补丁;升级所述软件中编组外的其他资源。本发明支持涉及多线程、数据结构类型变更的升级,满足应用场合无业务中断条件下的升级要求,充分保障了软件升级过程的可靠性和一致性。

Description

软件在线升级的方法
技术领域
本发明涉及计算机技术领域,具体涉及一种软件在线升级的方法。
背景技术
为了配合计算机技术的发展,软件提供商也在不断地更新升级其各种软件,以提高计算机的功能。现有的软件升级绝大多数属于替换原来程序部分文件的方式,一般在升级完成之前或者之后需要进行系统重启或者应用程序重启,升级过程导致业务中断,不能达到在线升级的目标。
随着信息技术越来越广泛的应用在社会生活的各个方面,各行各业对于软件的无故障运行的要求也越来越强烈,对于系统不中断情况下连续运行的要求也越来越高(如商业网站后台交易程序,电厂控制),而随着业务的发展,软件在连续运行情况下的业务升级和修改也成为一种趋势和必然。
目前,有些软件提供商为了方便用户的需求,使用户能及时方便地更新软件的版本,也提供了软件在线升级的功能。一般情况下,软件的在线升级方案采用函数过程地址替换的方法,如图1所示,在替换函数过程的内部进行流程的重组和新流程的建立,以及新的数据结构变量的建立。这种方案使得对在线升级的软件要求比较苛刻,比如要求被打补丁的软件不能属于多线程的,不能访问公共变量的,升级过程不能修改系统内部数据结构等等。因此,该方案的应用还存在以下缺点:
(1)无法提供对于全局变量数据结构更改的支持,特别是在多线程存取公共变量的情况下。比如,多线程需要同时存取一个变量,这样就可能会使系统内部变量的存取产生冲突,则该变量将不能被打补丁,不能实现在线升级的目的。
(2)如果被打补丁的函数内部保存有局部静态变量,则该变量也不能被打补丁,无法读取其内容并进行更新。
(3)存在业务流程混乱和程序异常的风险,因为如果目前线程位于A函数的代码中,A函数可能调用了被打补丁的B函数,B函数的调用方式发生了改变,是需要A以新的方式实现调用,这样可能导致业务流混乱或者程序异常。
发明内容
本发明的目的在于提供一种软件在线升级的方法,以克服上述现有技术中软件在线升级无法提供对于全局变量数据结构更改的支持的问题。
本发明的目的是通过以下技术方案实现的:
一种软件在线升级的方法,包括:
A、将软件中需要一起实现升级的资源进行编组,形成不同的编组资源;
B、在所述软件运行过程中将所述软件中涉及到访问编组资源的处理流程打补丁;
C、软件运行过程中分别自动对所述编组资源进行升级;
D、恢复所述软件中涉及到访问编组资源的处理流程的补丁;
E、升级所述软件中编组外需要升级的资源。
所述步骤B包括:
B1、建立线程迁移控制表,所述线程迁移控制表包括所述编组资源涉及的线程标识、线程状态。
B2、根据所述线程迁移控制表对所述软件中涉及到访问编组资源的处理流程打补丁。
所述步骤B2包括:
B21、在对所述处理流程打补丁前将所述编组资源涉及的线程设置为锁定状态;
B22、系统在运行补丁后将所述编组资源涉及的线程设置为非锁定状态。
所述步骤C具体包括:
C1、按预定方式判断所述编组是否满足编组升级条件;
C2、将满足所述编组升级条件的编组进行升级。
所述预定方式包括:
在每次所述编组资源涉及的线程设置为非锁定状态后,判断所述编组是否满足编组升级条件;或者
定时遍历所有编组,判断所述编组是否满足升级条件。
所述步骤C2还包括:将所述编组升级的过程设置为临界区状态。
所述满足编组升级的条件具体为:所述编组资源升级过程涉及的所有线程均为非锁定状态。
所述步骤E包括:
E1、建立软件升级线程列表,所述软件升级线程列表包括在所述软件中需要打补丁的程序所涉及到的所有线程。
E2、根据所述软件升级线程列表,升级所述软件中编组中需要升级的资源。
所述需要一起实现升级的资源包括:公共变量、函数、过程。
所述补丁程序的调用和返回方式与所述替换的编组资源的调用和返回方式相同。
所述步骤B还包括:
将所述软件中各线程最常用的一个处理流程打补丁;
当所述最常用的一个处理流程补丁被调用后将其对应的相关线程状态设备为非锁定状态。
由以上本发明提供的技术方案可以看出,本发明通过对相互有影响的升级资源进行编组,将具有相互影响和关联的函数过程和变量数据结构的升级放置在一个过程中完成,使软件的升级支持数据结构类型的升级,支持不同数据分批进行升级;并且,提供对公共变量数据结构升级过程中多线程的并发访问控制,使升级过程在多线程处于安全的非冲突状态下完成;通过双补丁过程(补丁程序完成控制升级过程以及升级过程完成后的生效过程)完成特殊要求的函数过程,将软件升级的无序化过程转换为有序化的可控过程。利用本发明,可以满足应用场合中要求业务不能中断条件下的升级要求,加强了软件升级的平滑过渡,保障了软件升级过程的可靠性和一致性。
附图说明
图1是现有技术中软件在线升级方案示意图;
图2是本发明软件在线升级实现结构图;
图3是本发明软件在线升级的流程图;
图4是本发明方法中编组升级示意图;
图5是本发明方法中软件升级所需的补丁程序实现结构示意图;
图6是需要升级的软件加载补丁程序后对资源映射表的初始化流程。
具体实施方式
首先,将本发明中使用的缩略语作如下说明:
PAS(Patched Application System):
被打补丁应用系统,指将要进行软件升级的原有应用系统;
PAP(Patch Application):
补丁程序,指将要替换原有应用系统的新附加的程序,是一个独立的应用程序;
PCS(Patch Control Stub):
补丁控制桩模块,驻留于PAS中完成补丁过程的控制;
PCC(Patch Control Center):
补丁协调控制中心,位于PAP中,升级时需要驻留于PCS中,协调完成补丁在PAS中生效实现的模块;
PCF(Patch Control Function):
补丁控制函数,指在PCC中完成补丁应用控制的控制函数组;
PF(Patch Function):
补丁函数,位于PAP中将要在PAS中生效的新功能函数和代码,或者是替换掉旧处理流程的功能函数和代码。
本技术领域人员知道,软件升级可以大致分为以下几种类型:
(1)升级过程不涉及数据结构变更情况,也不涉及多线程情况,只有业务处理流程的变更;
(2)升级过程包括数据结构的变化,但数据结构的变化影响范围在一个线程之内,不涉及到其他线程;
(3)升级过程涉及到变量的数据结构变化,同时该变量的变化涉及到多线程中处理流程的并发访问。
因此,针对上述不同的软件升级类型,在软件在线升级过程中需要考虑以下问题:
在升级过程中需要保证前后流程的更改协调一致;数据结构的变更需要考虑在多线程并发执行时的流程冲突处理,包括不同线程执行相同或者不同程序代码段的情况;对数据结构变量的变化,升级过程应该提供升级处理流程,即新的数据结构变量从旧的数据结构变量拷贝转换哪些数据。由于单线程软件升级可以看成多线程相同情况的一个特例,而无数据结构升级的升级可以看做数据升级为空的情况,因此,不同类型的软件升级都可以看作是多线程条件下公共变量存在数据结构变更的升级过程。
考虑到多线程条件下公共变量存在数据结构变更的升级,本发明的核心思想在于以下几点:
(1)将具有相互影响和依赖的需要升级的数据和控制函数过程等进行编组,使它们之间升级过程中不相互影响,同时升级前后也不相互影响。通过资源映射的方式实现补丁程序PAP对被打补丁应用系统PAS内系统资源的访问和更改,包括静态变量。所述资源映射的方式是指在PAS生成过程中编译器会生成一些MAP文件,如VC编译选项设置生成MAP文件后进行Build,生成可执行文件和MAP文件,MAP文件中包括该程序工程中的公共函数和公共变量在以后运行空间的相对地址,即重定位后的地址。PAP被加载到PAS后,根据这些地址信息,在函数地址处加一个跳转指令,可以在PAS调用该函数的时候转向新指定的地址上,PAP中定义了一些结构和PAS中相同的变量指针,将指针的值设置为MAP中指定的公共变量地址值,则PAP中定义的这个变量即为PAS中的变量,这个过程即为资源映射。
(2)在被打补丁应用系统PAS中设立补丁控制桩PCS模块,提供对应用程序的线程监控功能,以及建立补丁程序段的加载控制支持等功能。
(3)在补丁程序PAP中设立补丁协调控制中心PCC模块,对实现补丁过程进行全程控制,实现补丁的数据转换控制、补丁控制功能的实现、补丁程序段初始化等功能,同时向PCS提供一个预定义过程,实现PCS启动PCC过程的控制。
(4)在补丁控制函数PCF的内部,实现对多线程情况下编组升级过程的支持,保证编组升级过程的完整性和数据的一致性。
(5)在PAS将PAP链接进PAS程序空间后,首先将执行PAP的初始化过程,包括升级后的数据空间的生成,完成所有PCF的函数替换功能(在临界区中完成),完成PAP向PAS资源的映射等等。
(6)在数据结构变化(即升级)的过程中,需要考虑到多线程的影响,因为各个线程处于不同的代码区,对公共数据的访问一方面需要实现互斥,另一方面在数据升级过程中执行的代码需要协调统一,不能出现一个线程按照新的补丁函数执行,而另一个仍按旧代码执行的情况,这样将产生异常或者数据的不一致,数据升级过程必须要在所涉及到的线程处于安全或者非冲突状态下才可进行。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和实施方式对本发明作进一步的详细说明。
参照图2,图2是本发明软件在线升级实现结构图:
需要在线升级的应用程序包括线程ID1、线程ID2和线程ID3。在该应用程序运行过程中,补丁控制桩模块PCS负责将外部的补丁程序PAP读入该应用程序中,并调用其预定义的启动函数。该过程的控制方法可以根据需要自由设定,比如通过UI(用户操作界面)、自定义网络协议,即自行定义用户和PCS间的交互接口,通过网络来实现。
如果PCS支持应用程序重新启动后自动打补丁功能,则需要在PCS中加入重启动后执行补丁程序接口的功能。
该软件在线升级实现的流程如图3所示,包括以下步骤:
步骤301:将软件中需要一起实现升级的资源进行编组,形成不同的编组资源。
需要一起实现升级的资源包括:公共变量、函数、过程等,以及需要在其中进行变更的其他项目,如文件结构,数据库等。这些资源之间存在相互影响和依赖,而且会涉及多个线程对该资源的操作,对每个编组内资源的升级需要同时进行,而各编组之间升级过程相互不影响,而且升级前后也不相互影响。这样,避免了软件运行过程中由于升级使这些资源之间产生的相互影响。
对于其他如私有变量等可以通过程序中预定义映射的方式实现升级。
步骤302:建立线程迁移控制表,所述线程迁移控制表包括所述编组资源涉及的线程、线程状态。也就是说该线程迁移控制表表示了被打补丁应用程序PAS内所有涉及到数据结构升级的线程列表以及各线程的当前状态,可以采用如下所示的数据单元结构:
STRUCT{ThreadID,Status}
其中,Status代表线程在升级过程中的当前状态是否是安全的(非锁定状态),初始化时线程迁移控制表中各个线程单元的状态(Status的值)为锁定状态。
步骤303:在所述软件运行过程中根据线程迁移控制表对软件中涉及到访问编组资源的处理流程打补丁。
需要注意的是,为了保证软件升级的安全,在对所述处理流程打补丁前需要将所述编组资源涉及的线程设置为锁定状态;每个涉及到编组资源的处理流程(线程)需要的补丁全部打上后,才可将该线程设置为非锁定状态。
这样,编组资源涉及的线程全部被打补丁后,就可以分别对各编组资源进行升级。于是,进到下一步。
步骤304:按预定方式判断所述编组是否满足编组升级条件,编组升级的条件是指涉及到访问该编组资源的处理流程是否已全部打补丁且满足升级要求,也就是前面提到的编组资源升级过程涉及的所有线程是否均为非锁定状态。因为只有在编组资源升级过程涉及的所有线程均为非锁定状态时,才表明与该编组相关的线程已经打过补丁,该线程内的函数不会对该编组的升级产生影响。
按照本发明方法,对于某个应用程序,可能同时会有多个编组,对各编组升级条件的检测以及升级过程可以有多种方式,比如:
在每次编组资源涉及的线程设置为非锁定状态后,判断该编组是否满足编组升级条件,对于满足升级条件的编组调用其升级过程实现升级,这样,在软件运行过程中,可以对编组资源实现逐次升级,每次升级只调用单个编组的升级过程即可;
如果不逐次升级,也可以定时进行每个编组的遍历,判断所述编组是否满足升级条件,满足条件的调用其升级过程完成编组资源的升级。
也可以将满足升级条件的编组放入一个编组升级队列,然后再对该队列中的编组逐次进行升级。
总之,对不同编组资源进行升级可以采取多种不同的方式,在不影响程序运行的情况下可灵活选用。
步骤305:将满足编组升级条件的编组进行升级,对编组升级的过程也就是通过补丁程序替换编组资源的过程。
编组资源包括了:公共变量、函数、过程等,在每个编组升级过程中,对这些相互有影响的资源的升级需要一次完成,以避免升级编组内单个资源时对其他资源产生影响。
为了避免在升级过程中由于系统切换线程引发其他不可预料的问题,比如,发生线程中断的情况,可以将编组升级的过程设置为临界区状态。所谓临界区是一种简单的同步对象,它只可以在同一进程内部使用,以保证只有一个线程可以申请到该对象。典型的与临界区相关的API(应用程序接口)函数为:
·VOID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection):产生临界区;
·VOID DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection):删除临界区;
·VOID EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection):进入临界区,相当于申请加锁,如果该临界区正被其他线程使用则该函数会等待到其他线程释放;
·BOOL TryEnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection):进入临界区,相当于申请加锁,和EnterCriticalSection不同如果该临界区正被其他线程使用则该函数会立即返回FALSE,而不会等待;
·VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection):退出临界区,相当于申请解锁。
步骤306:恢复软件中涉及到访问编组资源的处理流程的补丁。因为这些补是为升级各编组资源而设置的,并不是真正软件升级所需要的程序,当编组资源升级完成后,对该软件中除编组外的其他资源的升级即转化为单线程、无数据结构变更的升级过程。这时将编组资源涉及的各线程内的补充恢复,
然后,进到步骤307:升级软件中编组外的其他资源。
对编组外其他资源的升级,比如,可以通过建立软件升级线程列表,所述软件升级线程列表包括软件中需要打补丁的程序所涉及到的所有线程,根据软件升级线程列表升级软件中编组外的其他资源。
对编组资源的升级可通过图4来表示:
软件程序包括2个线程:线程1包括3个函数:FUNC1、FUNC2、FUNC3,线程2包括3个函数:FUNC4、FUNC5、FUNC6。其中,线程1中的函数FUNC1、FUNC2和线程2中的函数FUNC5和编组有关,首先通过补丁程序PAP将这些函数替换,在替换函数的入口将本线程状态设置为Lock(锁定状态),依然调用原有的处理函数。因为在当前情况下还没有完成升级过程,仍然需要通过执行原有的功能流程保证系统正常运行。离开时,即原有的函数FUNC执行完后,将本线程状态设置为UnLock(非锁定状态)。然后,通过补丁控制函数PCF判断编组是否可升级(即线程1、线程2都处于UnLock状态),如果可以则进行升级,升级完成后替换掉需要修改的函数FUNC1、FUNC2和FUNC5以及其他需要替换的函数,如果函数FUNC1、FUNC2和FUNC5可以保留,则恢复这些函数。
上述编组升级过程是在软件运行中完成的,而且对补丁程序的调用和返回方式与对替换的编组资源的调用和返回方式相同。
为了在软件运行过程中加大升级机会,同时防止升级线程陷入空转出现不能实现升级的情况,还可以建立一个补丁协调控制中心PCC,编写PCC初始化代码,在代码中将各个线程最常调用的一个函数打补丁,在该处理流程中,通知PCC该线程进入Unlock状态,同时执行原来的处理流程,即上文的替换前的FUNC函数。由于升级过程开始后,是假设所有的线程状态都是不安全的,只有这些线程调用了补丁控制函数后才认为这些线程是安全的,因为可能该线程在一个需要升级的函数中执行,同时由于补丁控制函数被访问的次数和概率是不能够被测算的,如果补丁控制函数PCF打的位置不好,不能被线程调用,则这些线程状态仍是不安全的,将导致升级过程难以进行下去,因此可以针对一些被常调用的函数进行打补丁,可以加大升级机会。
前面提到,本发明中软件在线升级的过程是通过补丁控制桩PCS将外部的补丁程序PAP读入需要升级的软件中实现的,如图5所示,在该补丁程序PAP中包括以下部分:
1.补丁函数PF:在补丁程序PAP中将要在被打补丁应用程序PAS中生效的新功能函数和代码,或者是替换掉旧处理流程的功能函数和代码。
2.补丁协调控制中心PCC:升级时需要驻留于PCS中,协调完成补丁在PAS中生效实现的模块,该模块提供如下功能:
(1)同补丁控制桩PCS的接口PIF,PCS通过该接口调用打补丁操作的启动。
(2)资源映射表RMT:实现补丁程序PAP中的资源变量向被打补丁应用程序PAS内资源的映射镜像,实现过程可以从PAS的映射文件读取实现,也可以通过在PAS内部建立资源映射表实现。为了在补丁启动早期实现资源的映射操作,具体调用由接口PIF过程实现。
另外,补丁函数PF利用RMT来实现对应用程序PAS内资源的访问。
RMT结构表示如下:
Strcut{ValueAddr,ValueName,ValueType}
其中,ValueAddr是PAP中的变量指针地址,ValueName是要映射的资源名称,可以为函数或者变量名,ValueType是资源类型。
(3)线程迁移控制表TTCT:表示了应用程序PAS内所有涉及到数据结构升级的线程列表以及它们的当前状态,具体的数据单元结构如下:
STRUCT{ThreadID,Status}
其中,Status代表线程在升级过程中的当前状态是否是安全(Unlock)的,初始化时TTCT内各个单元的Status的值为Lock。
(4)编组升级控制表GTCT:支持在多线程情况下公共变量数据结构更改控制,它的数据单元的具体结构如下:
STRUCT{GroupID,ThreadID_List,Transfer_Proc,bTrasferIsOk}
其中,
GroupID是指要进行转换的数据结构的变量(编组)ID值,在补丁程序PAP中进行统一分配,各个GroupID之间在业务上是没有相互冲突的,可以将需要数据结构升级的有相互影响的几个数据变量和有关的函数过程等分配到一个GroupID。
ThreadID_List是线程转换列表,指GroupID代表的变量数据结构升级过程中所涉及到的线程ID列表,为保证在数据升级过程对各个线程的正常流程是无影响的,保障数据和业务的一致性,需要将该变量数据结构变更所涉及到的所有线程ID列出。
Transfer_Proc指向在补丁程序PAP中实现数据升级的函数过程地址,通过该函数过程实现数据的正确升级。
bTrasferIsOk表示该GroupID已经完成数据升级,初始为false。
(5)编组升级控制过程GTC:实现对多线程情况下编组内资源的更改过程,它连同补丁控制过程(PCF)实现编组升级,保证各个线程业务和数据的一致性和完整性。同时提供了Notify_Thread_GroupID(判断编组是否满足升级条件的函数)的实现,该函数具体流程如下:
set ThreadID_Status=InputParam_Lock_seq(将该线程的Status设置为输入参数的锁定字段,即Notify_Thread_GroupID的第三个参数)
if Get_GroupID_Of_AllNeededThreadIDs_Status_are_Unlock then(查找一个涉及到的所有线程的状态都是Unlock的编组)
call Transfer_Proc_By_GroupID(调用该GroupID的数据升级过程,实现编组内所有资源的升级)
set bTrasferIsOk_From_GroupID=true
如果考虑尽快完成切换,则重复以上三条操作直到所有可以升级的编组完成升级。
3.补丁控制函数PCF:指在补丁协调控制中心PCC中完成补丁应用控制的控制函数组。该函数实现编组访问控制流程,它在访问编组资源时的代码结构如下:
If Lock_GroupID_successful(锁定DTCT具体编组ID对应的线程状态)
Then
Begin
        Unlock_GroupID(解锁线程状态)
            Execute_Old_Process(执行升级前的旧流程)
Else
      Execute_New_Process(执行升级后的流程)
End
其中,Lock_GroupID_successful的流程如下:
If bTrasferIsOk_Is_True_of_GroupID Then Return Error
Else
      Notify_Thread_GroupID(Current_ThreadID,GroupID,Lock)
      Lock_Data_of_Group(GroupID)(锁定该编组中的具体数据,可以调用原来并发访问资源的老代码)
      Return OK
Endif
其中,Unlock_GroupID的流程如下:
Notify_Thread_GroupID(Current_ThreadID,GroupID,UnLock)
将补丁程序动态加载后需要进行初始化,包括以下三个过程:
1.资源映射表RMT初始化过程:
首先,在步骤601:进入RMT初始化过程;
然后,进到步骤602:读取补丁程序PAP中的MAP(映射)信息;
步骤603:读取MAP中的一条记录;
步骤604:判断该记录中的名称和类型和资源映射表RMT中的记录是否相同;
如果相同,则进到步骤605:将该RMT记录的资源地址的值赋值为MAP中定义的相对地址;
如果不同,则返回步骤603:读取MAP中的下一条记录。
2.编组升级控制表GTCT和线程迁移控制表TTCT的初始化:
将GTCT表中所有记录的bTrasferIsOk设置为FALSE;
将TTCT表中所有记录的Status设置为Lock。
3.运行编组升级控制过程GTC:
将补丁控制函数PCF群组中的各个PCF替换目标程序PAS中的指定函数,该替换过程需要在临界区内完成。
PCF替换掉PAS中的函数后,当PAS访问被PCF替换的函数时重定向到PCF,然后由PCF实现对多线程情况下编组升级过程的控制。
在数据结构变化(即升级)的过程中,需要考虑到多线程的影响,因为各个线程处于不同的代码区,对公共数据的访问一方面需要实现互斥,另一方面在数据升级过程中执行的代码需要协调统一,不能出现一个线程按照新的补丁函数执行,而另一个仍按旧代码执行的情况,这样将产生异常或者数据的不一致,数据升级过程必须要在所涉及到的线程处于安全或者非冲突状态下才可进行。因此,在访问编组资源前通过Notify_Thread_GroupID函数将本线程设置为Lock,访问后设置为Unlock。
在每次设置线程Unlock后的Notify_Thread_GroupID中判断编组是否满足升级条件,也就是说,判断该编组涉及到的所有线程的状态是否都是安全的,满足条件的将调用其升级过程实现升级。如果需要编组按照一定的顺序进行升级,则只调用单个编组的升级过程即可,否则进行每个编组的遍历,满足条件的调用其升级过程。为了防止发生线程中断的情况,需要将升级过程设置为临界区。
所有的编组完成升级后,再完成编组外其他资源的升级过程,即完成补丁函数PF的替换。完成PF替换后,需要恢复该软件原来的一些函数,即执行补丁恢复操作,将一些不实际实现补丁流程的函数恢复。
至此,完成了涉及多线程条件下公共变量存在数据结构变更的应用程序的在线升级过程。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。

Claims (11)

1、一种软件在线升级的方法,其特征在于,包括以下步骤:
A、将软件中需要一起实现升级的资源进行编组,形成不同的编组资源;
B、在所述软件运行过程中将所述软件中涉及到访问编组资源的处理流程打补丁;
C、软件运行过程中分别自动对所述编组资源进行升级;
D、恢复所述软件中涉及到访问编组资源的处理流程的补丁;
E、升级所述软件中编组外需要升级的资源。
2、根据权利要求1所述的软件在线升级的方法,其特征在于,所述步骤B包括:
B1、建立线程迁移控制表,所述线程迁移控制表包括所述编组资源涉及的线程标识、线程状态。
B2、根据所述线程迁移控制表对所述软件中涉及到访问编组资源的处理流程打补丁。
3、根据权利要求2所述的软件在线升级的方法,其特征在于,所述步骤B2包括:
B21、在对所述处理流程打补丁前将所述编组资源涉及的线程设置为锁定状态;
B22、系统在运行补丁后将所述编组资源涉及的线程设置为非锁定状态。
4、根据权利要求3所述的软件在线升级的方法,其特征在于,所述步骤C具体包括:
C1、按预定方式判断所述编组是否满足编组升级条件;
C2、将满足所述编组升级条件的编组进行升级。
5、根据权利要求3所述的软件在线升级的方法,其特征在于,所述预定方式包括:
在每次所述编组资源涉及的线程设置为非锁定状态后,判断所述编组是否满足编组升级条件;或者
定时遍历所有编组,判断所述编组是否满足升级条件。
6、根据权利要求4所述的软件在线升级的方法,其特征在于,所述步骤C2还包括:将所述编组升级的过程设置为临界区状态。
7、根据权利要求4所述的软件在线升级的方法,其特征在于,所述满足编组升级的条件具体为:所述编组资源升级过程涉及的所有线程均为非锁定状态。
8、根据权利要求1或2所述的软件在线升级的方法,其特征在于,所述步骤E包括:
E1、建立软件升级线程列表,所述软件升级线程列表包括在所述软件中需要打补丁的程序所涉及到的所有线程。
E2、根据所述软件升级线程列表,升级所述软件中编组中需要升级的资源。
9、根据权利要求1所述的软件在线升级的方法,其特征在于,所述需要一起实现升级的资源包括:公共变量、函数、过程。
10、根据权利要求3所述的软件在线升级的方法,其特征在于,所述补丁程序的调用和返回方式与所述替换的编组资源的调用和返回方式相同。
11、根据权利要求1所述的软件在线升级的方法,其特征在于,所述步骤B还包括:
将所述软件中各线程最常用的一个处理流程打补丁;
当所述最常用的一个处理流程补丁被调用后将其对应的相关线程状态设备为非锁定状态。
CNB2004100885711A 2004-11-05 2004-11-05 软件在线升级的方法 Active CN100337204C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2004100885711A CN100337204C (zh) 2004-11-05 2004-11-05 软件在线升级的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2004100885711A CN100337204C (zh) 2004-11-05 2004-11-05 软件在线升级的方法

Publications (2)

Publication Number Publication Date
CN1770108A true CN1770108A (zh) 2006-05-10
CN100337204C CN100337204C (zh) 2007-09-12

Family

ID=36751430

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004100885711A Active CN100337204C (zh) 2004-11-05 2004-11-05 软件在线升级的方法

Country Status (1)

Country Link
CN (1) CN100337204C (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100432931C (zh) * 2006-12-22 2008-11-12 中兴通讯股份有限公司 嵌入式系统动态补丁长跳转的实现方法
CN101206575B (zh) * 2006-12-19 2010-05-19 大唐移动通信设备有限公司 一种软件补丁在线升级方法、单板及系统
CN102663298A (zh) * 2012-04-06 2012-09-12 北京空间飞行器总体设计部 面向终端计算机的安全在线检查系统
CN103761126A (zh) * 2014-01-07 2014-04-30 中国神华能源股份有限公司 应用程序的升级方法和装置
CN104111848A (zh) * 2014-06-27 2014-10-22 华中科技大学 一种基于异步检查点的多线程软件动态升级方法
CN104504341A (zh) * 2015-01-21 2015-04-08 联想(北京)有限公司 一种操作系统漏洞修复方法及装置
CN107870777A (zh) * 2016-09-23 2018-04-03 中兴通讯股份有限公司 一种热补丁实现方法及装置、终端
CN109729136A (zh) * 2018-05-14 2019-05-07 网联清算有限公司 代理服务器发布方法和发布服务器
CN109754511A (zh) * 2019-01-14 2019-05-14 深圳前海微众银行股份有限公司 购物车设备固件更新方法、系统、平台、网关及存储介质
CN109766131A (zh) * 2017-11-06 2019-05-17 上海宝信软件股份有限公司 基于多线程技术实现软件智能化自动升级的系统及方法
CN109828768A (zh) * 2018-12-21 2019-05-31 福建新大陆支付技术有限公司 一种软件补丁的管理方法及系统
CN110489140A (zh) * 2019-07-11 2019-11-22 平安科技(深圳)有限公司 软件升级方法、装置、计算机设备及计算机存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5309730A (en) * 1993-05-28 1994-05-10 Honeywell Inc. Thermostat for a gas engine heat pump and method for providing for engine idle prior to full speed or shutdown
US5995998A (en) * 1998-01-23 1999-11-30 Sun Microsystems, Inc. Method, apparatus and computer program product for locking interrelated data structures in a multi-threaded computing environment
US6202208B1 (en) * 1998-09-29 2001-03-13 Nortel Networks Limited Patching environment for modifying a Java virtual machine and method
JP2003216449A (ja) * 2002-01-23 2003-07-31 Nec Corp パッチ処理システム

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101206575B (zh) * 2006-12-19 2010-05-19 大唐移动通信设备有限公司 一种软件补丁在线升级方法、单板及系统
CN100432931C (zh) * 2006-12-22 2008-11-12 中兴通讯股份有限公司 嵌入式系统动态补丁长跳转的实现方法
CN102663298A (zh) * 2012-04-06 2012-09-12 北京空间飞行器总体设计部 面向终端计算机的安全在线检查系统
CN103761126A (zh) * 2014-01-07 2014-04-30 中国神华能源股份有限公司 应用程序的升级方法和装置
CN103761126B (zh) * 2014-01-07 2017-03-15 中国神华能源股份有限公司 应用程序的升级方法和装置
CN104111848A (zh) * 2014-06-27 2014-10-22 华中科技大学 一种基于异步检查点的多线程软件动态升级方法
CN104504341A (zh) * 2015-01-21 2015-04-08 联想(北京)有限公司 一种操作系统漏洞修复方法及装置
CN104504341B (zh) * 2015-01-21 2018-01-23 联想(北京)有限公司 一种操作系统漏洞修复方法及装置
CN107870777A (zh) * 2016-09-23 2018-04-03 中兴通讯股份有限公司 一种热补丁实现方法及装置、终端
CN109766131A (zh) * 2017-11-06 2019-05-17 上海宝信软件股份有限公司 基于多线程技术实现软件智能化自动升级的系统及方法
CN109766131B (zh) * 2017-11-06 2022-04-01 上海宝信软件股份有限公司 基于多线程技术实现软件智能化自动升级的系统及方法
CN109729136A (zh) * 2018-05-14 2019-05-07 网联清算有限公司 代理服务器发布方法和发布服务器
CN109828768A (zh) * 2018-12-21 2019-05-31 福建新大陆支付技术有限公司 一种软件补丁的管理方法及系统
CN109754511A (zh) * 2019-01-14 2019-05-14 深圳前海微众银行股份有限公司 购物车设备固件更新方法、系统、平台、网关及存储介质
CN109754511B (zh) * 2019-01-14 2021-05-14 深圳前海微众银行股份有限公司 购物车设备固件更新方法、系统、平台、网关及存储介质
CN110489140A (zh) * 2019-07-11 2019-11-22 平安科技(深圳)有限公司 软件升级方法、装置、计算机设备及计算机存储介质

Also Published As

Publication number Publication date
CN100337204C (zh) 2007-09-12

Similar Documents

Publication Publication Date Title
CN100337204C (zh) 软件在线升级的方法
CN101076168A (zh) 智能终端系统的管理方法和智能终端
CN1224903C (zh) 逐模块验证
CN1171145C (zh) 用于自动软件配置的请求调度程序
CN1143208C (zh) 用于消息转换的装置和方法
CN1291313C (zh) 操作系统的自动安装和配置的系统和方法
CN1791862A (zh) 操作系统
CN1203404C (zh) 具有逐模块验证的完全迟缓链接
CN1208720C (zh) 用于对非置信模块进行可信验证的方法及装置
CN1617099A (zh) 软件产品的应用程序身份
CN1737779A (zh) 一种扩展外设的方法及系统
CN1889741A (zh) 在设备管理中实现预定操作的方法及装置
CN1866221A (zh) 一种软件接口测试方法和装置
CN1704908A (zh) 定位程序异常的方法
CN1858742A (zh) 一种在实时数据库中实现更新数据的方法和系统
CN1967485A (zh) 一种实现j2ee应用的方法及系统
WO2021142761A1 (zh) 为芯片打补丁的方法及芯片
CN1786925A (zh) 基于c++映射的ttcn-3测试系统及测试方法
CN1848111A (zh) 用于内存数据库的一种数据操作接口的实现方法
CN1169046C (zh) 完全迟缓链接
CN1091842A (zh) 包括用户接口的中断系统和方法
CN1808434A (zh) 基于对象存储库的对象引用方法
CN1595324A (zh) 与使用限制有关的解除信息的管理方法
CN1892615A (zh) 带有虚地址空间属性的软件行为描述、获取与控制方法
CN1659513A (zh) 把数据写入非易失性存储器的方法和设备

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