CN107643942B - 一种状态信息的存储方法及装置 - Google Patents
一种状态信息的存储方法及装置 Download PDFInfo
- Publication number
- CN107643942B CN107643942B CN201610586057.3A CN201610586057A CN107643942B CN 107643942 B CN107643942 B CN 107643942B CN 201610586057 A CN201610586057 A CN 201610586057A CN 107643942 B CN107643942 B CN 107643942B
- Authority
- CN
- China
- Prior art keywords
- state information
- shared memory
- reading process
- reading
- writing
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 474
- 230000008569 process Effects 0.000 claims abstract description 434
- 230000004048 modification Effects 0.000 claims description 14
- 238000012986 modification Methods 0.000 claims description 14
- 230000003139 buffering effect Effects 0.000 claims description 2
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 6
- 230000009471 action Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000003745 diagnosis Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例公开了一种状态信息的存储方法及装置,方法包括:当前运行的业务进程创建针对共享内存的状态信息写进程,该共享内存由第一个运行的业务进程创建;判断当前是否存在状态信息读进程;在判断出不存在时,创建状态信息读进程;由该状态信息写进程将该当前运行的业务进程生成的状态信息写入到该共享内存中;由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,并存储至预设的存储空间中。应用本发明实施例使任意业务进程均可以创建状态信息读进程,避免漏掉状态信息,保证状态信息的完整存储。
Description
技术领域
本发明涉及计算机科学与技术领域,特别涉及一种状态信息的存储方法及装置。
背景技术
在业务进程运行过程中,通常需要将业务状态信息存储到预设的存储空间中。
目前的存储方法为:由业务进程创建的状态信息写进程将运行过程中产生的状态信息写入到共享内存中,再由操作系统创建的状态信息读进程,从共享内存中读取状态信息,存储至预设的存储空间中。
现有技术中,当操作系统启动时,会同时创建业务进程运行时所需的状态信息读进程,并将该状态信息读进程设置成一个守护进程。这样,当业务进程运行时,运行该作为守护进程的状态信息读进程,实现将状态信息存储至预设的存储空间中。
然而,现有技术中,操作系统维护或者脚本修改时可能会出现差错,就会导致作为守护进程的状态信息读进程不能被正常运行,当未运行作为守护进程的状态信息读进程时,无疑会无法进行状态信息的读取和存储操作,进而导致状态信息的丢失。
发明内容
本发明实施例公开了一种状态信息的存储方法及装置,以更好的保证状态信息的存储。具体方案如下:
一方面,本发明实施例提供了一种状态信息的存储方法,所述方法包括:
当前运行的业务进程创建针对共享内存的状态信息写进程,所述共享内存由第一个运行的业务进程创建;
判断当前是否存在状态信息读进程;
在判断出不存在时,创建状态信息读进程;
由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中;
由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,并存储至预设的存储空间中。
可选的,所述第一个运行的业务进程创建共享内存之前,进一步创建有名信号量;
所述由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中,包括:
由所述状态信息写进程在获得所述有名信号量后,将业务进程运行过程中生成的状态信息写入到所述共享内存中,并在写入完成后,释放所述有名信号量;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,包括:
由当前已存在的状态信息读进程或所述创建的状态信息读进程在获得所述有名信号量后,从所述共享内存中读取状态信息,并在读取完成后,释放所述有名信号量。
可选的,所述当前运行的业务进程在运行过程中,实时判断当前是否存在状态信息读进程,在判断出不存在时,创建状态信息读进程。
可选的,所述共享内存中包括状态信息缓存区和共享内存信息存储区,所述状态信息缓存区用于缓存状态信息,所述共享内存信息存储区用于存储所述状态信息缓存区的空间占用标记信息;
由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中,包括:
由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述状态信息缓存区;
并修改所述空间占用标记信息;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,包括:
由当前已存在的状态信息读进程或所述创建的状态信息读进程,从所述状态信息缓存区读取所缓存的状态信息;
并修改所述空间占用标记信息。
可选的,所述共享内存信息存储区还存储有关于状态信息读进程的标识信息;
所述判断当前是否存在状态信息读进程,包括:
判断所述标识信息是否为预定值;
当所述标识信息为预定值时,则判断出存在状态信息读进程;当所述标识信息不为预定值时,则判断出不存在状态信息读进程。
可选的,在所述创建状态信息读进程之后,所述方法还包括:将所述标识信息修改为所述预定值;
所述方法还包括:
所述创建的状态信息读进程在随所述当前运行的业务进程退出前,将所述标识信息修改为非所述预定值。
可选的,所述预设的存储空间包含预定数量个存储子空间;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,并存储于预设的存储空间中,包括:
由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息;
按照所述存储子空间对应的存储顺序,将所读取的状态信息存储至对应的存储子空间。
另一方面,本发明实施例提供了一种状态信息的存储装置,所述装置包括:第一创建模块、判断模块、第二创建模块、写入模块和读取模块;
所述第一创建模块,用于创建针对共享内存的状态信息写进程,所述共享内存由第一个运行的业务进程创建;
所述判断模块,用于判断当前是否存在状态信息读进程;
所述第二创建模块,用于在判断出当前不存在状态信息读进程时,创建状态信息读进程;
所述写入模块,用于由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中;
所述读取模块,用于由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,并存储于预设的存储空间中。
可选的,所述第一个运行的业务进程创建共享内存之前,进一步创建有名信号量;
所述写入模块,具体用于由所述状态信息写进程在获得所述有名信号量后,将业务进程运行过程中生成的状态信息写入到所述共享内存中,并在写入完成后,释放所述有名信号量;
所述读取模块,具体用于由当前已存在的状态信息读进程或所述创建的状态信息读进程在获得所述有名信号量后,从所述共享内存中读取状态信息,并在读取完成后,释放所述有名信号量。
可选的,所述判断模块,还用于在所述当前运行的业务进程运行过程中,实时判断当前是否存在状态信息读进程;
所述第二创建模块,还用于在判断出当前不存在状态信息读进程时,创建状态信息读进程。
可选的,所述共享内存中包括状态信息缓存区和共享内存信息存储区,所述状态信息缓存区用于缓存状态信息,所述共享内存信息存储区用于存储所述状态信息缓存区的空间占用标记信息;
所述写入模块包括写入单元和修改单元;
所述写入单元,用于由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述状态信息缓存区;
所述修改单元,用于修改所述空间占用标记信息;
所述读取模块包括读取单元;
所述读取单元,用于由当前已存在的状态信息读进程或所述创建的状态信息读进程,从所述状态信息缓存区读取所缓存的状态信息,并触发所述第一修改单元。
可选的,所述共享内存信息存储区还存储有关于状态信息读进程的标识信息;
所述判断模块,具体用于判断所述标识信息是否为预定值;
当所述标识信息为预定值时,则判断出存在状态信息读进程;当所述标识信息不为预定值时,则判断出不存在状态信息读进程。
可选的,所述装置还包括修改模块;
所述修改模块,用于所述创建状态信息读进程之后,将所述标识信息修改为所述预定值;
所述创建的状态信息读进程在随所述当前运行的业务进程退出前,将所述标识信息修改为非所述预定值。
可选的,所述预设的存储空间包含预定数量个存储子空间;
所述读取模块,具体用于由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息;
按照所述存储子空间对应的存储顺序,将所读取的状态信息存储至对应的存储子空间。
在本方案中,当前运行的业务进程创建针对共享内存的状态信息写进程,该共享内存由第一个运行的业务进程创建;判断当前是否存在状态信息读进程;在判断出不存在时,创建状态信息读进程;由该状态信息写进程将该当前运行的业务进程生成的状态信息写入到该共享内存中;由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,并存储至预设的存储空间中。可见,当操作系统中存在多个业务进程需要使用同一个共享内存时,针对该共享内存的状态信息读进程可以由任一运行的业务进程创建,无需在意各业务进程的启动顺序,均能保证操作系统中存在一个状态信息读进程以及各业务进程对应的状态信息写进程,避免漏掉状态信息,以更好的保证状态信息的完整存储。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所提供的一种状态信息的存储方法的流程示意图;
图2a为本发明实施例所提供的一种状态信息写进程和状态信息读进程的创建过程的示意图;
图2b为本发明实施例所提供的一种基于2a所创建的状态信息写进程和状态信息读进程读写状态信息的示意图;
图3为本发明实施例所提供的一种状态信息的存储装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种状态信息的存储方法及装置,可以使得任意业务进程在运行时,均可以创建状态信息读进程,避免漏掉状态信息,以更好的保证状态信息的完整存储。
下面首先对本发明实施例所提供的一种状态信息的存储方法进行介绍。
其中,本发明实施例所提供的一种状态信息的存储方法可应用于多业务进程同时运行的情况下,也可以应用于单一业务进程运行的情况下。
如图1所示,本发明实施例所提供的一种状态信息的存储方法,可以包括如下步骤:
S101:当前运行的业务进程创建针对共享内存的状态信息写进程,该共享内存由第一个运行的业务进程创建;
需要说明的是,每一个运行的业务进程都会创建针对共享内存的状态信息的写进程,以保证自身在运行过程中生成的状态信息写入共享内存中。如果当前运行的业务进程为操作系统第一个运行的业务进程,该当前运行的业务进程运行时,还要创建共享内存。
如果当前运行的业务进程不为操作系统中第一个运行的业务进程,则不需再创建共享内存,可以与操作系统中第一个运行的业务进程共享一个共享内存,可以将在运行过程中所生成的状态信息写入该存在的共享内存中。
S102:判断当前是否存在状态信息读进程;
可以理解的是,该当前运行的业务进程不为操作系统中第一个运行的业务进程,该当前运行的业务进程在创建完成状态信息写进程后,判断当前是否存在状态信息读进程,可以理解的是,若存在状态信息读进程,可以表明存在其他的正在运行的业务进程,该目标业务进程可以与该其他的正在运行的业务进程共用一个状态信息读进程,完成状态信息的读取。其中,该状态信息读进程为针对该共享内存的状态信息读进程。
S103:在判断出不存在时,创建状态信息读进程;
需要强调的是,在判断出当前不存在状态信息读进程时,该当前运行的业务进程会创建状态信息读进程,以保证该当前运行的业务进程写入该共享内存的状态信息的正常读取,进一步的,保证后续运行的共享该共享内存的业务进程的状态信息的读取。
在本发明实施例中,无需在操作系统启动时运行一个作为守护进程的状态信息读进程,以完成共享内存中所存储的状态信息的读取,任一业务进程均可以判断当前是否存在状态信息读进程,并且在判断出未存在状态信息读进程时,可以主动创建状态信息读进程,即可以实现任一业务进程均可创建状态信息读进程,并且无需在意业务进程的运行顺序,进一步保证在有业务进程运行时,该操作系统中能够存在唯一的状态信息读进程,以能够读取该共享内存中的状态信息。
S104:由该状态信息写进程将该当前运行的业务进程生成的状态信息写入到该共享内存中;
需要说明的是,每一个运行的业务进程均创建一个对应的状态信息写进程,以将业务进程在运行过程中生成的状态信息写入共享内存中。该创建的状态信息写进程将业务进程在运行过程中生成的状态信息写入到共享内存中。其中,对于共享内存中的状态信息来说,一般都是先写入先读取,后写入后读取。
在一种具体实现方式中,当存在多个业务进程共享一个共享内存,并且该多个业务进程均在运行过程中,即存在多个运行的业务进程向共享内存中写入状态信息,共享内存存储写入的状态信息的顺序仅与状态信息写入的时间相关,并且,状态信息的读取也仅与状态信息写入的时间相关。另外,每条状态信息中都包含对应的业务进程的标记信息,以用于区分状态信息来源于哪个业务进程。
S105:由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,并存储至预设的存储空间中。
可以理解的是,当当前存在状态信息读进程时,可以使用当前已存在的状态信息读进程,从共享内存中读取状态信息,并将该读取的状态信息存储于预设的存储空间中。当当前不存在状态信息读进程时,可以使用当前运行的业务进程创建的状态信息读进程,从共享内存中读取状态信息,并将读取的状态信息存储于预设的存储空间中。
应用本发明实施例,当前运行的业务进程创建针对共享内存的状态信息写进程,该共享内存由第一个运行的业务进程创建;判断当前是否存在状态信息读进程;在判断出不存在时,创建状态信息读进程;由该状态信息写进程将该当前运行的业务进程生成的状态信息写入到该共享内存中;由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,并存储至预设的存储空间中。
可见,当操作系统中存在多个业务进程需要使用同一个共享内存时,针对该共享内存的状态信息读进程可以由任一运行的业务进程创建,无需在意各业务进程的启动顺序,均能保证操作系统中存在一个状态信息读进程以及各业务进程对应的状态信息写进程,避免漏掉状态信息,以更好的保证状态信息的完整存储。
在一种具体实现方式中,该第一个运行的业务进程创建共享内存之前,进一步创建有名信号量;
所述由该状态信息写进程将该当前运行的业务进程生成的状态信息写入到该共享内存中,包括:
由该状态信息写进程在获得该有名信号量后,将业务进程运行过程中生成的状态信息写入到该共享内存中,并在写入完成后,释放该有名信号量;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,包括:
由当前已存在的状态信息读进程或该创建的状态信息读进程在获得该有名信号量后,从该共享内存中读取状态信息,并在读取完成后,释放该有名信号量。
需要说明的是,操作系统中第一个运行的业务进程,在创建共享内存前,还需创建有名信号量,可以理解的是,状态信息写进程将状态信息写入共享内存中和状态信息读进程从共享内存中读取状态信息,均依赖于该有名信号量,创建有名信号量,以保证状态信息的写入和读取。创建完成共享内存后,还需对共享内存进行初始化处理,初始化该共享内存可以为状态信息的写入分配空间并获取该共享内存的相关信息,如该共享内存的起始地址等,如图2a所示。另外的,一般情况下,除了该操作系统中第一个运行的业务进程运行时创建有名信号量能够创建成功外,后续的运行的共享该共享内存的业务进程在创建有名信号量时,该操作系统会通过返回有名信号量存在错误的方式,告知该业务进程共享内存中已存在有名信号量,该业务进程创建有名信号量失败,如图2a所示,后续的业务进程创建共享内存也会失败。其中,如图2b所示,业务进程在存在状态信息需要写入共享内存时,业务进程所对应的状态信息写进程可以直接获取有名信号量,并在获取有名信号量成功后,基于该有名信号量将该业务进程运行过程中生成的状态信息写入共享内存中,在状态信息写入完成后,释放有名信号量。
如图2b所示,当运行的业务进程在运行过程中有状态信息需要写入该共享内存中时,该运行的业务进程对应的状态信息写进程获取有名信号量,并基于该有名信号量将自身在运行过程中生成的状态信息写入共享内存中,并在写入完成后,释放该有名信号量。当需要读取该共享内存中所存储的状态信息时,该状态信息读进程获取该有名信号量,当该状态信息读进程获取成功该有名信号量后,基于该有名信号量从该共享内存中读取状态信息,并在读取完成后,释放该有名信号量。
其中,该状态信息读进程可以定时地从该共享内存中读取状态信息。
当存在多个状态信息写进程时,只有获取有名信号量的状态信息写进程能够向共享内存写入状态信息,只有当该有名信号量被释放后,其他状态信息写进程或状态信息读进程才能获取到该有名信号量。可以理解的是,通过获取和释放有名信号量,实现了各个状态信息写/读进程之间的互斥。即当有一个状态信息写进程向共享内存中写入状态信息时,其他状态信息写进程和状态信息读进程就不能写入/读取该共享内存中的状态信息。同理,当状态信息读进程从共享内存中读取状态信息时,各个状态信息写进程都不能向共享内存中写入状态信息。
在一种具体实现方式中,鉴于会出现至少两个业务进程同时运行的情况,即至少两个业务进程需向共享内存中写入状态信息,举例而言:存在业务进程1和业务进程2,并且当前存在的状态信息读进程由业务进程1创建。当业务进程1退出时,由业务进程1创建的状态信息读进程也会退出,然而此时,业务进程2仍在运行中,即仍有写入共享内存的状态信息需要读取,如果不及时创建状态信息读进程,部分状态信息就有丢失的危险。为了避免出现状态信息丢失的情况,所述当前运行的每个业务进程在运行过程中,都会实时判断当前是否存在状态信息读进程,在判断出当前不存在状态信息读进程时,创建状态信息读进程。也就是说,业务进程2会实时判断是否存在状态信息读进程,当业务进程1退出导致由业务进程1创建的状态信息读进程退出时,业务进程2能够判断出当前不存在状态信息读进程,从而创建一个状态信息读进程,以继续完成状态信息的读取操作。
在一种具体实现方式中,所述共享内存中包括状态信息缓存区和共享内存信息存储区,该状态信息缓存区用于存储状态信息,该共享内存信息存储区用于存储该状态信息缓存区的空间占用标记信息;
由该状态信息写进程将所述当前运行的业务进程生成的状态信息写入到该共享内存中,包括:
由该状态信息写进程将该当前运行的业务进程生成的状态信息写入到该状态信息缓存区;
并修改该空间占用标记信息;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,包括:
由当前已存在的状态信息读进程或该创建的状态信息读进程,从该状态信息缓存区读取所缓存的状态信息;
并修改该空间占用标记信息。
需要强调的是,为了便于该共享内存的管理,该共享内存中又分为缓存状态信息的状态信息缓存区,以及存储该状态信息缓存区的空间占用标记信息的共享内存信息存储区。对于状态信息的写入和读取均在状态信息缓存区进行,在写入与读取该状态信息的同时,修改该共享内存信息存储区中的该状态信息缓存区的空间占用标记信息。如,当状态信息缓存区中缓存的状态信息被读取完成,该被读取完成的状态信息所占用的空间则可以被标记为可覆盖,即该空间可以用于缓存其他的新写入的状态信息。当某一空间缓存入状态信息,该空间则可以被标记为不可覆盖,即该空间不可以再缓存其他的新写入的状态信息,直至该空间所缓存的状态信息被读取后,该空间才能再次被利用。其中,该状态信息缓存区可以用“LOG BUFFER”表示,该共享内存信息存储区可以用“LOG INFO”表示。
在一种具体实现方式中,所述共享内存信息存储区还存储有关于状态信息读进程的标识信息;
所述判断当前是否存在状态信息读进程,包括:
判断该标识信息是否为预定值;
当该标识信息为预定值时,则判断出存在状态信息读进程;当该标识信息不为预定值时,则判断出不存在状态信息读进程。
可以理解的是,该共享内存信息存储区还存储有关于状态信息读进程的标识信息,该共享内存是针对该操作系统中的进程和线程(包括业务进程、状态信息写进程以及状态信息读进程)可见的,该运行的业务进程,可以实时的读取该标识信息,根据该标识信息则可以判断当前是否存在状态信息读进程,其中,当该标识信息为预定值时,则判断出存在状态信息读进程;当该标识信息不为预定值时,则判断出不存在状态信息读进程。
在一种具体实现方式中,在所述创建状态信息读进程之后,本发明实施例所提供的一种状态信息的存储方法还可以包括:将该标识信息修改为该预定值;
本发明实施例所提供的一种状态信息的存储方法还可以包括:
该创建的状态信息读进程在随该当前运行的业务进程退出前,将该标识信息修改为非该预定值。
需要说明的是,当未存在状态信息读进程时,该共享内存信息存储区所存储的,关于状态信息读进程的标识信息为非预定值,当存在状态信息读进程时,该标识信息为预定值。可以理解的,当创建状态信息读进程后,该当前运行的业务进程可以将该标识信息从非预定值修改为预定值。同理的,该状态信息读进程可以在随该当前运行的业务进程退出前,将该标识信息修改为非该预定值。
在一种具体实现方式中,所述预设的存储空间包含预定数量个存储子空间;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,并存储于预设的存储空间中,包括:
由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息;
按照该存储子空间对应的存储顺序,将所读取的状态信息存储至对应的存储子空间。
可以理解的是,由状态信息读进程从共享内存中读取状态信息后,可以将该读取的状态信息存储于预设的存储空间中,以实现对各业务进程运行过程的监控,并实现对用户可见,用户可以根据存储于预设的存储空间中的状态信息(各业务进程的),对各业务进程或操作系统进行故障诊断分析。
其中,该预设的存储空间包含预定数量个存储子空间,该预定数量个存储子空间的存储位置存在先后顺序,将所读取的状态信息先存储于存储位置靠前的排在第一个的存储子空间中,当存储位置靠前的排在第一个的存储子空间存满后,存储于下一个存储位置靠前的存储子空间,直至将所有的存储子空间全部占满后,从第一个存储子空间开始,进行覆盖或删除,存储新读取到的状态信息。其中,该存储子空间的存储容量可以由用户自主设置,也可以由设备默认设置。
另外,在一种具体实现方式中,该存储子空间可以以日志文件的形式显示,可以采用名字加计数索引值的方式对日志文件进行命名(如,预定数量为5,日志文件名为:日志文件1、日志文件2、日志文件3、日志文件4和日志文件5)。在存储所读取的状态信息时,先存储于日志文件1中,当日志文件1存满后,存储于日志文件2中,以此类推,当日志文件5也存满后,可以从日志文件1开始进行覆盖或删除,重新存储新读取到的状态信息。另外的,还可以直接删除日志文件1,然后,分别将日志文件2修改为日志文件1、将日志文件3修改为日志文件2、日志文件4修改为日志文件3、日志文件5修改为日志文件4,最后,重新创建日志文件5,这样可以保证索引值最大的文件中所存储的状态信息永远为最新的状态信息。
相应于上述方法实施例,本发明实施例提供了一种状态信息的存储装置,如图3所示,所述装置包括:第一创建模块301、判断模块302、第二创建模块303、写入模块304和读取模块305;
所述第一创建模块301,用于创建针对共享内存的状态信息写进程,所述共享内存由第一个运行的业务进程创建;
所述判断模块302,用于判断当前是否存在状态信息读进程;
所述第二创建模块303,用于在判断出当前不存在状态信息读进程时,创建状态信息读进程;
所述写入模块304,用于由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中;
所述读取模块305,用于由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,并存储于预设的存储空间中。
应用本发明实施例,当前运行的业务进程创建针对共享内存的状态信息写进程,该共享内存由第一个运行的业务进程创建;判断当前是否存在状态信息读进程;在判断出不存在时,创建状态信息读进程;由该状态信息写进程将该当前运行的业务进程生成的状态信息写入到该共享内存中;由当前已存在的状态信息读进程或创建的状态信息读进程从该共享内存中读取状态信息,并存储至预设的存储空间中。可见,当操作系统中存在多个业务进程需要使用同一个共享内存时,针对该共享内存的状态信息读进程可以由任一运行的业务进程创建,无需在意各业务进程的启动顺序,均能保证操作系统中存在一个状态信息读进程以及各业务进程对应的状态信息写进程,避免漏掉状态信息,以更好的保证状态信息的完整存储。
在一种具体实现方式中,所述第一个运行的业务进程创建共享内存之前,进一步创建有名信号量;
所述写入模块304,具体用于由所述状态信息写进程在获得所述有名信号量后,将业务进程运行过程中生成的状态信息写入到所述共享内存中,并在写入完成后,释放所述有名信号量;
所述读取模块305,具体用于由当前已存在的状态信息读进程或所述创建的状态信息读进程在获得所述有名信号量后,从所述共享内存中读取状态信息,并在读取完成后,释放所述有名信号量。
在一种具体实现方式中,所述判断模块302,还用于在所述当前运行的业务进程运行过程中,实时判断当前是否存在状态信息读进程;
所述第二创建模块303,还用于在判断出当前不存在状态信息读进程时,创建状态信息读进程。
在一种具体实现方式中,所述共享内存中包括状态信息缓存区和共享内存信息存储区,所述状态信息缓存区用于缓存状态信息,所述共享内存信息存储区用于存储所述状态信息缓存区的空间占用标记信息;
所述写入模块304包括写入单元和修改单元;
所述写入单元,用于由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述状态信息缓存区;
所述修改单元,用于修改所述空间占用标记信息;
所述读取模块305包括读取单元;
所述读取单元,用于由当前已存在的状态信息读进程或所述创建的状态信息读进程,从所述状态信息缓存区读取所缓存的状态信息,并触发所述第一修改单元。
在一种具体实现方式中,所述共享内存信息存储区还存储有关于状态信息读进程的标识信息;
所述判断模块302,具体用于判断所述标识信息是否为预定值;
当所述标识信息为预定值时,则判断出存在状态信息读进程;当所述标识信息不为预定值时,则判断出不存在状态信息读进程。
在一种具体实现方式中,本发明实施例所提供的一种状态信息的存储装置还包括修改模块;
所述修改模块,用于所述创建状态信息读进程之后,将所述标识信息修改为所述预定值;
所述创建的状态信息读进程在随所述当前运行的业务进程退出前,将所述标识信息修改为非所述预定值。
在一种具体实现方式中,所述预设的存储空间包含预定数量个存储子空间;
所述读取模块305,具体用于由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息;
按照所述存储子空间对应的存储顺序,将所读取的状态信息存储至对应的存储子空间。
对于系统/装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (14)
1.一种状态信息的存储方法,其特征在于,所述方法包括:
当前运行的业务进程创建针对共享内存的状态信息写进程,所述共享内存由第一个运行的业务进程创建;
判断当前是否存在状态信息读进程;
在判断出不存在时,所述当前运行的业务进程创建状态信息读进程;
由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中;
由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,并存储至预设的存储空间中。
2.根据权利要求1所述的存储方法,其特征在于,所述第一个运行的业务进程创建共享内存之前,进一步创建有名信号量;
所述由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中,包括:
由所述状态信息写进程在获得所述有名信号量后,将业务进程运行过程中生成的状态信息写入到所述共享内存中,并在写入完成后,释放所述有名信号量;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,包括:
由当前已存在的状态信息读进程或所述创建的状态信息读进程在获得所述有名信号量后,从所述共享内存中读取状态信息,并在读取完成后,释放所述有名信号量。
3.根据权利要求1所述的存储方法,其特征在于,所述当前运行的业务进程在运行过程中,实时判断当前是否存在状态信息读进程,在判断出不存在时,创建状态信息读进程。
4.根据权利要求1所述的方法,其特征在于,所述共享内存中包括状态信息缓存区和共享内存信息存储区,所述状态信息缓存区用于缓存状态信息,所述共享内存信息存储区用于存储所述状态信息缓存区的空间占用标记信息;
由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中,包括:
由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述状态信息缓存区;
并修改所述空间占用标记信息;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,包括:
由当前已存在的状态信息读进程或所述创建的状态信息读进程,从所述状态信息缓存区读取所缓存的状态信息;
并修改所述空间占用标记信息。
5.根据权利要求4所述的方法,其特征在于,所述共享内存信息存储区还存储有关于状态信息读进程的标识信息;
所述判断当前是否存在状态信息读进程,包括:
判断所述标识信息是否为预定值;
当所述标识信息为预定值时,则判断出存在状态信息读进程;当所述标识信息不为预定值时,则判断出不存在状态信息读进程。
6.根据权利要求5所述的方法,其特征在于,
在所述创建状态信息读进程之后,所述方法还包括:将所述标识信息修改为所述预定值;
所述方法还包括:
所述创建的状态信息读进程在随所述当前运行的业务进程退出前,将所述标识信息修改为非所述预定值。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述预设的存储空间包含预定数量个存储子空间;
所述由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,并存储于预设的存储空间中,包括:
由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息;
按照所述存储子空间对应的存储顺序,将所读取的状态信息存储至对应的存储子空间。
8.一种状态信息的存储装置,其特征在于,所述装置包括:第一创建模块、判断模块、第二创建模块、写入模块和读取模块;
所述第一创建模块,用于由当前运行的业务进程创建针对共享内存的状态信息写进程,所述共享内存由第一个运行的业务进程创建;
所述判断模块,用于判断当前是否存在状态信息读进程;
所述第二创建模块,用于在判断出当前不存在状态信息读进程时,由所述当前运行的业务进程创建状态信息读进程;
所述写入模块,用于由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述共享内存中;
所述读取模块,用于由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息,并存储于预设的存储空间中。
9.根据权利要求8所述的装置,其特征在于,所述第一个运行的业务进程创建共享内存之前,进一步创建有名信号量;
所述写入模块,具体用于由所述状态信息写进程在获得所述有名信号量后,将业务进程运行过程中生成的状态信息写入到所述共享内存中,并在写入完成后,释放所述有名信号量;
所述读取模块,具体用于由当前已存在的状态信息读进程或所述创建的状态信息读进程在获得所述有名信号量后,从所述共享内存中读取状态信息,并在读取完成后,释放所述有名信号量。
10.根据权利要求8所述的装置,其特征在于,
所述判断模块,还用于在所述当前运行的业务进程运行过程中,实时判断当前是否存在状态信息读进程;
所述第二创建模块,还用于在判断出当前不存在状态信息读进程时,创建状态信息读进程。
11.根据权利要求8所述的装置,其特征在于,所述共享内存中包括状态信息缓存区和共享内存信息存储区,所述状态信息缓存区用于缓存状态信息,所述共享内存信息存储区用于存储所述状态信息缓存区的空间占用标记信息;
所述写入模块包括写入单元和修改单元;
所述写入单元,用于由所述状态信息写进程将所述当前运行的业务进程生成的状态信息写入到所述状态信息缓存区;
所述修改单元,用于修改所述空间占用标记信息;
所述读取模块包括读取单元;
所述读取单元,用于由当前已存在的状态信息读进程或所述创建的状态信息读进程,从所述状态信息缓存区读取所缓存的状态信息,并触发所述修改单元。
12.根据权利要求11所述的装置,其特征在于,所述共享内存信息存储区还存储有关于状态信息读进程的标识信息;
所述判断模块,具体用于判断所述标识信息是否为预定值;
当所述标识信息为预定值时,则判断出存在状态信息读进程;当所述标识信息不为预定值时,则判断出不存在状态信息读进程。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括修改模块;
所述修改模块,用于所述创建状态信息读进程之后,将所述标识信息修改为所述预定值;
所述创建的状态信息读进程在随所述当前运行的业务进程退出前,将所述标识信息修改为非所述预定值。
14.根据权利要求8-13任一项所述的装置,其特征在于,所述预设的存储空间包含预定数量个存储子空间;
所述读取模块,具体用于由当前已存在的状态信息读进程或创建的状态信息读进程从所述共享内存中读取状态信息;
按照所述存储子空间对应的存储顺序,将所读取的状态信息存储至对应的存储子空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610586057.3A CN107643942B (zh) | 2016-07-21 | 2016-07-21 | 一种状态信息的存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610586057.3A CN107643942B (zh) | 2016-07-21 | 2016-07-21 | 一种状态信息的存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107643942A CN107643942A (zh) | 2018-01-30 |
CN107643942B true CN107643942B (zh) | 2020-11-03 |
Family
ID=61109614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610586057.3A Active CN107643942B (zh) | 2016-07-21 | 2016-07-21 | 一种状态信息的存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107643942B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399264B (zh) * | 2019-06-27 | 2022-06-07 | 苏州浪潮智能科技有限公司 | 一种fru信息管理方法、装置及设备 |
CN113407414A (zh) * | 2021-06-24 | 2021-09-17 | 厦门科灿信息技术有限公司 | 程序运行监测方法、装置、终端及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6161169A (en) * | 1997-08-22 | 2000-12-12 | Ncr Corporation | Method and apparatus for asynchronously reading and writing data streams into a storage device using shared memory buffers and semaphores to synchronize interprocess communications |
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
CN101470632A (zh) * | 2007-12-24 | 2009-07-01 | 华为软件技术有限公司 | 共享内存管理方法及装置 |
CN102693162A (zh) * | 2011-12-29 | 2012-09-26 | 中国科学技术大学苏州研究院 | 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN104252405A (zh) * | 2013-06-26 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 日志信息的输出方法及装置 |
-
2016
- 2016-07-21 CN CN201610586057.3A patent/CN107643942B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6161169A (en) * | 1997-08-22 | 2000-12-12 | Ncr Corporation | Method and apparatus for asynchronously reading and writing data streams into a storage device using shared memory buffers and semaphores to synchronize interprocess communications |
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
CN101470632A (zh) * | 2007-12-24 | 2009-07-01 | 华为软件技术有限公司 | 共享内存管理方法及装置 |
CN102693162A (zh) * | 2011-12-29 | 2012-09-26 | 中国科学技术大学苏州研究院 | 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法 |
CN104252405A (zh) * | 2013-06-26 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 日志信息的输出方法及装置 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
Non-Patent Citations (1)
Title |
---|
UNIX系统中多任务结构软件的设计与实现;董玉杰;《计算机工程与应用》;19980509;9-11 * |
Also Published As
Publication number | Publication date |
---|---|
CN107643942A (zh) | 2018-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103268201B (zh) | 一种数据存储方法、存储装置及读取方法 | |
US11487571B2 (en) | Method and system for efficient utilization of resources in containers | |
US9251231B2 (en) | Merging an out of synchronization indicator and a change recording indicator in response to a failure in consistency group formation | |
CN110399227B (zh) | 一种数据访问方法、装置和存储介质 | |
CN112286723B (zh) | 机房容灾控制方法、终端及存储介质 | |
KR20150104434A (ko) | 플래시 메모리에서 사용하는 로그 구조 파일시스템의 메타데이터 저장 방법 | |
US20150378745A1 (en) | Data processing method during boot procedure of smart device and smart device | |
CN110647425A (zh) | 一种数据库恢复方法及装置 | |
CN107643942B (zh) | 一种状态信息的存储方法及装置 | |
CN104965793B (zh) | 一种云存储数据节点装置 | |
CN109710596B (zh) | 数据清理方法、装置、设备及计算机可读存储介质 | |
US10095616B2 (en) | Garbage collection for virtual environments | |
US9786373B2 (en) | EEPROM backup method and device | |
CN114089915A (zh) | 基于flash存储器的文件追加写操作方法及装置 | |
CN112925606A (zh) | 一种内存管理方法、装置及设备 | |
CN106529281A (zh) | 一种可执行文件处理方法及装置 | |
CN109189480A (zh) | 文件系统启动方法及装置 | |
CN105446832B (zh) | 主引导扇区的数据恢复方法及装置 | |
CN107203339B (zh) | 一种数据存储方法及装置 | |
CN107678866B (zh) | 一种基于嵌入式操作系统的分区通信方法及装置 | |
US10169233B2 (en) | Translation lookaside buffer purging with concurrent cache updates | |
CN105335095A (zh) | 闪存文件系统的处理方法及装置 | |
US20160335192A1 (en) | Computer system and memory allocation management method | |
CN106650480B (zh) | 文件访问隔离方法和装置 | |
CN111435285B (zh) | 存储卷写数据方法、装置、电子设备及机器可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |