软件在线升级的方法

文档序号:6436112阅读:191来源:国知局
专利名称:软件在线升级的方法
技术领域
本发明涉及计算机技术领域,具体涉及一种软件在线升级的方法。
背景技术
为了配合计算机技术的发展,软件提供商也在不断地更新升级其各种软件,以提高计算机的功能。现有的软件升级绝大多数属于替换原来程序部分文件的方式,一般在升级完成之前或者之后需要进行系统重启或者应用程序重启,升级过程导致业务中断,不能达到在线升级的目标。
随着信息技术越来越广泛的应用在社会生活的各个方面,各行各业对于软件的无故障运行的要求也越来越强烈,对于系统不中断情况下连续运行的要求也越来越高(如商业网站后台交易程序,电厂控制),而随着业务的发展,软件在连续运行情况下的业务升级和修改也成为一种趋势和必然。
目前,有些软件提供商为了方便用户的需求,使用户能及时方便地更新软件的版本,也提供了软件在线升级的功能。一般情况下,软件的在线升级方案采用函数过程地址替换的方法,如图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对应的线程状态)ThenBeginUnlock_GroupID(解锁线程状态)
Execute_Old_Process(执行升级前的旧流程)ElseExecute_New_Process(执行升级后的流程)End其中,Lock_GroupID_successful的流程如下If bTrasferIsOk_Is_True_of_GroupID Then Return ErrorElseNotify_Thread_GroupID(Current_ThreadID,GroupID,Lock)Lock_Data_of_Group(GroupID)(锁定该编组中的具体数据,可以调用原来并发访问资源的老代码)Return OKEndif其中,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替换后,需要恢复该软件原来的一些函数,即执行补丁恢复操作,将一些不实际实现补丁流程的函数恢复。
至此,完成了涉及多线程条件下公共变量存在数据结构变更的应用程序的在线升级过程。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
权利要求
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还包括将所述软件中各线程最常用的一个处理流程打补丁;当所述最常用的一个处理流程补丁被调用后将其对应的相关线程状态设备为非锁定状态。
全文摘要
本发明公开了一种软件在线升级的方法,包括将软件中需要一起实现升级的资源进行编组,形成不同的编组资源;在软件运行过程中将所述软件中涉及到访问编组资源的处理流程打补丁;分别对编组资源进行升级;恢复所述软件中涉及到访问编组资源的处理流程的补丁;升级所述软件中编组外的其他资源。本发明支持涉及多线程、数据结构类型变更的升级,满足应用场合无业务中断条件下的升级要求,充分保障了软件升级过程的可靠性和一致性。
文档编号G06F11/36GK1770108SQ20041008857
公开日2006年5月10日 申请日期2004年11月5日 优先权日2004年11月5日
发明者卢庆明 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1