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

文档序号:6503535阅读:140来源:国知局
软件程序的重启方法及装置制造方法
【专利摘要】本发明实施例提供一种软件程序的重启方法及装置。本发明软件程序的重启方法,包括:调用服务进程为软件程序进程分配独立内存块;将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数据通道;将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,在向所述虚拟内存块写入数据时;在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新所述独立内存块中的数据。本发明实施例在软件程序进程重启时,通过只读方式映射获取独立内存块中保存的数据,以解决软件重启时比较慢的问题。
【专利说明】软件程序的重启方法及装置

【技术领域】
[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] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制; 尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其 依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征 进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技 术方案的范围。
【权利要求】
1. 一种软件程序的重启方法,其特征在于,包括: 调用服务进程为软件程序进程分配独立内存块; 将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内存块以生成读数 据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应的独立内存块中 获取数据; 将所述服务进程与所述软件程序进程通过进程间通信生成写数据通道,且在向所述虚 拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内存块中; 在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道,以使所述软件 程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写数据通道更新 所述独立内存块中的数据。
2. 根据权利要求1所述的方法,其特征在于,在向所述虚拟内存块写入数据时,通过所 述写数据通道将数据写入到对应的独立内存块中,包括: 若待写数据为批量处理数据时,在批量处理数据中增加起始和结束标识以表示所述批 量处理数据的起始和结束; 通过所述写数据通道将批量处理数据写入到对应的独立内存块中。
3. 根据权利要求2所述的方法,其特征在于,通过所述写数据通道将批量处理数据写 入到对应的独立内存块中,包括: 将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份内存块中; 通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且判断批量处理数 据中是否含有结束标识,若是,则清空所述备份内存块中的数据。
4. 根据权利要求1所述的方法,其特征在于,所述读数据通道和写数据通道为封装的 编程访问接口,以供所述软件程序进程运行时调用。
5. 根据权利要求1-4任一所述的方法,其特征在于,还包括: 在软件程序进程执行完成后,释放所述独立内存块。
6. -种软件程序的重启装置,其特征在于,包括: 分配模块,用于调用服务进程为软件程序进程分配的独立内存块; 读数据模块,用于将所述独立内存块以只读方式映射到所述软件程序进程空间虚拟内 存块以生成读数据通道,且在从所述虚拟内存块读取数据时,通过所述读数据通道从对应 的独立内存块中获取数据; 写数据模块,用于将所述服务进程与所述软件程序进程通过进程间通信生成写数据通 道,且在向所述虚拟内存块写入数据时,通过所述写数据通道将数据写入到对应的独立内 存块中; 重启模块,用于在重启所述软件程序进程时,重新生成所述读数据通道和写数据通道, 以使所述软件程序进程通过所述读数据通道获取所述独立内存块中的数据或通过所述写 数据通道更新所述独立内存块中的数据。
7. 根据权利要求6所述的装置,其特征在于,所述写数据模块包括: 批处理单元,用于若待写数据为批量处理数据时,在批量处理数据中增加起始和结束 标识以表示所述批量处理数据的起始和结束; 写入单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中。
8. 根据权利要求7所述的装置,其特征在于,所述写数据模块包括: 备份单元,用于将所述独立内存块中的数据备份到对应分配给所述独立内存块的备份 内存块中; 判断单元,用于通过所述写数据通道将批量处理数据写入到对应的独立内存块中,且 判断批量处理数据中是否含有结束标识,若是,则清空所述备份内存块中的数据。
9. 根据权利要求6所述的装置,其特征在于,所述读数据通道和写数据通道为封装的 编程访问接口,以供所述软件程序进程运行时调用。
10. 根据权利要求6-9任一所述的装置,其特征在于,还包括: 释放模块,用于在软件程序进程执行完成后,释放所述独立内存块。
【文档编号】G06F9/48GK104216771SQ201310211089
【公开日】2014年12月17日 申请日期:2013年5月30日 优先权日:2013年5月30日
【发明者】徐向阳, 施广宇 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1