首页 / 专利库 / 软件 / 软件 / 软件程序的重启方法及装置

软件程序的重启方法及装置

阅读:407发布:2021-06-08

专利汇可以提供软件程序的重启方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 实施例 提供一种 软件 程序的重启方法及装置。本发明软件程序的重启方法,包括:调用服务 进程 为软件程序进程分配独立内存 块 ;将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道;将所述服务进程与所述软件程序进程通过 进程间通信 生成写数据通道,在向所述虚拟内存块写入数据时;在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。本发明实施例在软件程序进程重启时,通过只读方式映射获取独立内存块中保存的数据,以解决软件重启时比较慢的问题。,下面是软件程序的重启方法及装置专利的具体信息内容。

1.一种软件程序的重启方法,其特征在于,包括:
调用服务进程为软件程序进程分配独立内存
将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中获取数据;
将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中,具体的,所述软件程序进程通过所述服务进程,采用操作系统进程间通信机制实现将数据写入到对应的独立内存块中;
在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。
2.根据权利要求1所述的方法,其特征在于,在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中,包括:
若待写数据为批量处理数据时,在批量处理数据中增加起始和结束标识以表示所述批量处理数据的起始和结束;
通过所述写数据通道将批量处理数据写入到对应的独立内存块中。
3.根据权利要求2所述的方法,其特征在于,通过所述写数据通道将批量处理数据写入到对应的独立内存块中,包括:
将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份内存块中;
通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且判断批量处理数据中是否含有结束标识,若是,则清空所述备份内存块中的数据。
4.根据权利要求1所述的方法,其特征在于,所述读数据通道和写数据通道为封装的编程访问接口,以供所述软件程序进程运行时调用。
5.根据权利要求1-4任一所述的方法,其特征在于,还包括:
在软件程序进程执行完成后,释放所述独立内存块。
6.一种软件程序的重启装置,其特征在于,包括:
分配模块,用于调用服务进程为软件程序进程分配独立内存块;
读数据模块,用于将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中获取数据;
写数据模块,用于将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中,具体的,所述软件程序进程通过所述服务进程,采用操作系统进程间通信机制实现将数据写入到对应的独立内存块中;
重启模块,用于在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。
7.根据权利要求6所述的装置,其特征在于,所述写数据模块包括:
批处理单元,用于若待写数据为批量处理数据时,在批量处理数据中增加起始和结束标识以表示所述批量处理数据的起始和结束;
写入单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中。
8.根据权利要求7所述的装置,其特征在于,所述写入单元包括:
备份单元,用于将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份内存块中;
判断单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且判断批量处理数据中是否含有结束标识,若是,则清空所述备份内存块中的数据。
9.根据权利要求6所述的装置,其特征在于,所述读数据通道和写数据通道为封装的编程访问接口,以供所述软件程序进程运行时调用。
10.根据权利要求6-9任一所述的装置,其特征在于,还包括:
释放模块,用于在软件程序进程执行完成后,释放所述独立内存块。

说明书全文

软件程序的重启方法及装置

技术领域

[0001] 本发明实施例涉及计算机操作系统技术,尤其涉及一种软件程序的重启方法及装置。

背景技术

[0002] 互联网和通信业务的普及以及计算机和通信技术的飞速发展使得无处不在的网络服务正在成为可能,同时也对网络系统中软件程序的高可用性(High Availability,简称HA)和可靠性提出了更高的要求。除了无故障运行能之外,从故障中快速恢复的能力也是衡量高可用性系统的一个重要指标。
[0003] 一般地,当运行的软件程序发生故障时,可以通过简单地重启软件程序来恢复提供业务。目前,为了避免软件程序运行时的重要状态数据丢失,在重启软件程序时,有两种处理方式:第一种,在操作系统内核中设置一固定进程,用于存储软件程序运行时重要的状态数据,当软件程序发生错误重启时从预留的内存中恢复重要状态数据;第二种,将软件程序运行时的重要状态数据备份存储于文件或者数据库,重启软件程序时从文件或者数据库中加载状态数据。
[0004] 然而,现有的两种处理方式都存在保存的数据恢复比较慢的问题:第一种处理方式,因为预留内存和软件程序在不同的地址空间,因此软件程序在读写数据时导致额外的系统调用开销,如进程间通信(Inter-Process Communication,简称IPC)或者内存复制的开销;第二种处理方式,在存储和恢复数据时,文件和数据库访问操作受输入/输出(Input/Output,简称I/O)读写效率低的限制,影响软件程序重启时读写数据的速度。

发明内容

[0005] 本发明实施例提供一种软件程序的重启方法及装置,以解决软件重启时保存的数据恢复比较慢的问题,以实现软件的高可用性。
[0006] 第一方面,本发明实施例提供一种软件程序的重启方法,包括:
[0007] 调用服务进程为软件程序进程分配独立内存
[0008] 将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中获取数据;
[0009] 将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中;
[0010] 在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。
[0011] 在第一方面的第一种可能的实现方式中,在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中,包括:
[0012] 若待写数据为批量处理数据时,在批量处理数据中增加起始和结束标识以表示所述批量处理数据的起始和结束;
[0013] 通过所述写数据通道将批量处理数据写入到对应的独立内存块中。
[0014] 根据第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,通过所述写数据通道将批量处理数据写入到对应的独立内存块中,包括:
[0015] 将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份内存块中;
[0016] 通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且判断批量处理数据中是否含有结束标识,若是,则清空所述备份内存块中的数据。
[0017] 在第一方面的第三种可能的实现方式中,所述读数据通道和写数据通道为封装的编程访问接口,以供所述软件程序进程运行时调用。
[0018] 根据第一方面,第一方面的第一种至第三种可能的实现方式中,在第一方面的第四种可能的实现方式中,还包括:
[0019] 在软件程序进程执行完成后,释放所述独立内存块。
[0020] 第二方面,本发明实施例提供一种软件程序的重启装置,包括:
[0021] 分配模块,用于调用服务进程为软件程序进程分配的独立内存块;
[0022] 读数据模块,用于将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中获取数据;
[0023] 写数据模块,用于将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中;
[0024] 重启模块,用于在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。
[0025] 在第二方面的第一种可能的实现方式中,所述写数据模块,包括:
[0026] 批处理单元,用于若待写数据为批量处理数据时,在批量处理数据中增加起始和结束标识以表示所述批量处理数据的起始和结束;
[0027] 写入单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中。
[0028] 根据第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述写数据模块,包括:
[0029] 备份单元,用于将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份内存块中;
[0030] 判断单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且判断批量处理数据中是否含有结束标识,若是,则清空所述备份内存块中的数据。
[0031] 在第二方面的第三种可能的实现方式中,所述读数据通道和写数据通道为封装的编程访问接口,以供所述软件程序进程运行时调用。
[0032] 根据第二方面,第二方面的第一种至第三种可能的实现方式中,在第二方面的第四种可能的实现方式中,还包括:
[0033] 释放模块,用于在软件程序进程执行完成后,释放所述独立内存块。
[0034] 本发明实施例软件程序重启的方法及装置,通过分配与软件程序进程自身对应的独立内存块,并将独立内存块映射到软件程序进程自身的虚拟内存,实现软件程序进程重启时,通过只读方式映射获取所述独立内存块中的数据,以解决软件重启时保存的数据恢复比较慢的问题。附图说明
[0035] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0036] 图1为本发明软件程序重启的方法实施例一的流程图
[0037] 图2为本发明软件程序重启的方法实施例二的流程图;
[0038] 图3为本发明软件程序重启的装置实施例一的结构示意图;
[0039] 图4为图3中读数据通道和写数据通道的位置示意图;
[0040] 图5为本发明软件程序重启的装置实施例二的结构示意图。

具体实施方式

[0041] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0042] 图1为本发明软件程序重启的方法实施例一的流程图,本实施例的软件程序重启的方法适用于任意操作系统,主要提高操作系统中的软件重启的恢复速度。该方法可以由软件程序重启的装置来实现,该装置由软件和/或硬件的方式来实现,配置在带有操作系统的设备中。如图1所示,该方法包括以下步骤:
[0043] 步骤101、调用服务进程为软件程序进程分配独立内存块;
[0044] 所述独立内存块独立于软件程序进程空间的虚拟内存地址,即在实际的物理内存中处于相互独立的不同地址上。在每个软件程序进程开始运行时即可以为该进程分配一独立的内存块。服务程序还负责管理、分配独立内存,对独立内存始终拥有读写权限。
[0045] 步骤102、将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中获取数据;
[0046] 本步骤中,可以使用内存映射技术将所述独立内存块映射到所述软件程序进程空间中的虚拟内存块中,具体实现时,根据内存映射基地址,将用独立内存块内偏移量表示的指针数据映射转换为虚拟内存地址。
[0047] 本步骤中,采用只读映射方式获取独立内存块中的数据,原因是:通常情况下,软件程序进程发生错时,如悬空指针,飞指针等会破坏可写内存中的数据,因此若把数据保存在本软件程序进程的可写内存中,下次重启恢复的时候数据可能也是坏的,而且这种错误通常不会在第一现场被捕捉到,累积到一定的程度,甚至连效应,才引起崩溃。若是只读的内存,则本软件程序进程对该区域的写操作是被禁止的,保存的数据不会被破坏,同时对该区域的非法写操作也会在被第一时间被发现,如操作系统或者硬件会产生内存访问异常,有助于调试。
[0048] 步骤103、将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中;
[0049] 本步骤,具体实现时,软件程序进程可以通过系统中的服务进程,采用操作系统IPC机制实现将数据写入独立内存中,比如管道,系统IPC包括消息队列,信号量,共享内存和套接字(SOCKET)等机制。
[0050] 步骤104、在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。
[0051] 上述步骤,在所述软件程序进程发生故障或者升级需要重启时,通过所述写数据通道将软件进程重启前的重要数据写入到所述独立内存块中。这样,当所述软件程序进程重启时,首先初始化所述读数据通道和写数据通道,初始化完成后,所述软件程序进程通过读数据通道,以只读映射的方式快速获取重启前的重要数据,避免进程通信或者访问数据库文件带来的系统开销,从而使得软件快速完成重启。
[0052] 需要说明的是,本技术领域人员应了解,本实施例中步骤102与103之间并不限定先后时序关系。
[0053] 本实施例通过分配与软件程序进程自身对应的独立内存块,并将独立内存块映射到软件程序进程自身的虚拟内存,实现软件程序进程重启时,以只读方式映射获取所述独立内存块中的数据,解决软件重启时保存的数据恢复比较慢的问题。
[0054] 图2为本发明软件程序重启的方法实施例二的流程图,本实施例在上一实施例的基础上,增加对批处理数据写的处理以及释放独立内存块的方法。如图2所示,该方法包括以下步骤:
[0055] 步骤201、调用服务进程为软件程序进程分配独立内存块;
[0056] 步骤202、将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中获取数据;
[0057] 生成读数据通道的过程实质上,是建立服务程序管理的独立内存块和应用进程虚拟内存块的只读映射的过程;在使用读数据通道时,软件程序进程直接读自身的虚拟内存块中的数据。
[0058] 步骤203、将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚拟内存块写入数据时,若待写数据为批量处理数据时,在批量处理数据中增加起始和结束标识以表示所述批量处理数据的起始和结束;
[0059] 在处理批量处理数据时,可以根据网络字段协议在数据报文中增加开始和结束标识,以识别批量处理数据的长度。
[0060] 步骤204、将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份内存块中;
[0061] 在通过所述写数据通道将批量处理数据写入到对应的独立内存块中之前,执行本步骤,目的在于通过将将所述独立内存块中的数据备份到所述备份内存块中,避免因为在批处理数据写入过程中出现故障,无法恢复之前所述独立内存块中的数据的问题,以提高数据写入中的可靠性。
[0062] 步骤205、通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且判断批量处理数据中是否含有结束标识,若是,则清空所述备份内存块中的数据;
[0063] 本步骤中,若判断批量处理数据中不含有结束标识,则表明批数据处理尚未全部写入,则继续执行向独立内存块写入动作。当批处理数据成功写入带有结束标识的报文,则表明批数据全部写入成功,则系统释放备份内存块中的数据,释放的方式可以由系统自动回收或者软件程序根据需要设置回收的机制。
[0064] 步骤206、在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据;
[0065] 重新生成读数据通道和写数据通道一般通过调用系统接口完成。如写数据通道采用IPC机制,IPC以面向连接的套接字为例,则重新生成写数据通道为初始化握手建立连接的过程;重新生成读数据通道以只读内存映射为例,指的是将本进程的某些虚拟内存区域与存储数据的独立内存映射关联起来的过程。
[0066] 步骤207、在软件程序进程执行完成后,释放所述独立内存块,若有备份内存块,也同时释放备份内存块;
[0067] 本步骤具体实现时,可以由软件程序通过编程接口要求或者管理员要求释放时释放。
[0068] 本实施例,通过对批处理数据进行结束和开始的标识,且使用备份内存块备份数据,以实现读操作性能同进程本地内存相当,写操作与进程间通信相当,提高数据的可靠性和读写数据的效率。且应用程序可以只维护一份数据,避免了应用程序在恢复数据时重建数据结构的开销。
[0069] 在上述实施例的基础上,优选的实现方式是:所述读数据通道和写数据通道为封装的编程访问接口,以供所述软件程序进程运行时调用。通过将所述读数据通道和写数据通道为封装的编程访问接口,实现系统的模块化处理。如果每个软件程序全部实现底层的内存映射,IPC等细节,将导致系统的复杂度。因此可将所述读数据通道和写数据通道实现为一个通用库模块,为应用程序提供数据结构级别的编程接口(可类比c++标准库里面的vector等基础数据结构)不必要每个软件程序都要实现具体细节,提高调用读、写数据通道的效率。
[0070] 图3为本发明软件程序重启的装置实施例一的结构示意图,该装置通常集成在带有操作系统的设备里面,如图3所示,包括:
[0071] 分配模块31,用于调用服务进程为软件程序进程分配的独立内存块;
[0072] 读数据模块32,用于将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中获取数据;
[0073] 写数据模块33,用于将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中;
[0074] 重启模块34,用于在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。
[0075] 图4为图3中读数据通道数据和写数据通道数据的位置示意图,如图4所示,所述读数据通道41在存储模块中独立内存块与软件程序进程中虚拟内存之间,用于在从所述虚拟内存块读取数据时,以只读映射方式从对应的独立内存块中获取数据;
[0076] 所述写数据通道42,在存储模块中独立内存块与软件程序进程中虚拟内存之间,用于在向所述虚拟内存块写入数据时,将数据写入到对应的独立内存块中;
[0077] 本实施例的装置,用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0078] 图5为本发明软件程序重启的装置实施例二的结构示意图,在上一实施例的基础上,进一步地,还包括:
[0079] 释放模块51,用于在软件程序进程执行完成后,释放所述独立内存块;
[0080] 进一步地,所述写数据模块33,包括:
[0081] 批处理单元,用于若待写数据为批量处理数据时,在批量处理数据中增加起始和结束标识以表示所述批量处理数据的起始和结束;
[0082] 写入单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中。
[0083] 可选地,所述写数据模块33,包括:
[0084] 备份单元,用于将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份内存块中;
[0085] 判断单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且判断批量处理数据中是否含有结束标识,若是,则清空所述备份内存块中的数据。
[0086] 进一步地,所述读数据通道和写数据通道为封装的编程访问接口,以供所述软件程序进程运行时调用。
[0087] 本发明各实施例的装置,用于执行本发明任意实施例所提供的软件程序重启的方法的技术方案,其实现原理和技术效果类似,具备相应的功能模块,此处不再赘述。
[0088] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0089] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
高效检索全球专利

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

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

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈