CN103514053A - 一种基于共享内存的进程间通讯方法 - Google Patents

一种基于共享内存的进程间通讯方法 Download PDF

Info

Publication number
CN103514053A
CN103514053A CN201310432622.7A CN201310432622A CN103514053A CN 103514053 A CN103514053 A CN 103514053A CN 201310432622 A CN201310432622 A CN 201310432622A CN 103514053 A CN103514053 A CN 103514053A
Authority
CN
China
Prior art keywords
shared drive
storage block
data
read
reading
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
CN201310432622.7A
Other languages
English (en)
Other versions
CN103514053B (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.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
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 Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN201310432622.7A priority Critical patent/CN103514053B/zh
Publication of CN103514053A publication Critical patent/CN103514053A/zh
Application granted granted Critical
Publication of CN103514053B publication Critical patent/CN103514053B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

本发明涉及一种基于共享内存的多进程间通讯方法,本发明以循环队列形式对共享内存进行管理,共享内存供多个进程以队列形式顺序读写,读或写以块为单位,块大小由用户控制;共享内存被多进程共享,进程分为只读进程和只写进程;支持多个进程同时对该共享内存进行读操作,只能有一个进程对该共享内存进行写操作,读写不冲突,能同时进行;本发明所述方法大大减少了进程间交换信息时经由内核的拷贝次数,提高了后台系统的吞吐量,降低了系统的开销,有效地提高了系统的性能。

Description

一种基于共享内存的进程间通讯方法
技术领域
本发明涉及计算机领域,尤其涉及一种基于共享内存的进程间通讯方法。 
背景技术
传统的Unix编程模型,在同一个操作系统上运行多个进程,每个进程都有各自的地址空间,Unix进程间的信息共享可以有多种形式,通常包括:管道,FIFO,消息队列,以及域间套接字和共享内存。除共享内存外的几种通信方式的问题在于,两个进程交换信息时,这些信息必须经由内核传递,从而造成了更高的开销,这在效率要求极高的系统中就成为了影响系统性能的瓶颈。 
而利用共享内存进程间的通讯则不再涉及内核,如何利用共享内存,实现进程间的高效通讯,成为亟待解决的一个问题。 
发明内容
本发明所要解决的技术问题是提供一种基于共享内存的进程间通讯方法,合理利用共享内存,减少系统开销,达到更高的性能要求。 
本发明解决上述技术问题的技术方案如下:一种基于共享内存的多进程间通讯方法,包括如下步骤: 
步骤1:写进程创建包括管理单元、循环队列和内存池的共享内存,并在管理单元中存储关于整个共享内存的管理信息; 
步骤2:写进程从管理单元中获取关于当前写进程的操作位置,,根据每次待写入数据的大小,顺序开辟与待存入数据大小等大的第N(N=1,2,3…)存储块,将待写入的数据存入相应存储块中; 
步骤3:开辟第N存储块时,记录所述第N存储块的大小、起始位置、 结束位置以及存储的是否为完整数据,上述记录的信息形成第N结构体,并存入循环队列的队尾指针处;同时更新管理单元中关于当前写进程的操作位置的记录; 
步骤4:在执行步骤2至3的同时,一个或若干个读进程可对共享内存进行读操作; 
步骤5:每个读进程自循环队列的队头开始,依次读取第N(N=1,2,3…)结构体; 
步骤6:判断第N结构体是否处于循环队列的队尾,如果是队尾,说明该结构体对应的存储块正在进行写操作,则等待,等到队尾指针不指向该结构体时,执行步骤7;如果不是队尾,则直接执行步骤7; 
步骤7:根据该结构体中关于第N存储块的位置信息,读取内存池中相应第N存储块中的数据; 
步骤8:判断所述写进程是否还要向内存池写入数据,如果是,返回步骤2;否则判断内存池中数据是否都已读完,如果未读完则返回步骤5;否则结束。 
本发明的有益效果是:本发明以循环队列形式对共享内存进行管理,共享内存供多个进程以队列形式顺序读写,读或写以块为单位,块大小由用户控制;共享内存被多进程共享,进程分为只读进程和只写进程;支持多个进程同时对该共享内存进行读操作,只能有一个进程对该共享内存进行写操作,读写不冲突,能同时进行;本发明所述方法大大减少了进程间交换信息时经由内核的拷贝次数,提高了后台系统的吞吐量,降低了系统的开销,有效地提高了系统的性能。 
在上述技术方案的基础上,本发明还可以做如下改进。 
进一步,所述步骤1中所述的管理信息包括: 
该共享内存创建者ID、队列规模、内存池大小、内存池起始位置、内存 池结尾位置、当前写进程的操作位置、当前读该共享内存的所有读进程标记、当前使用该共享内存的进程数目、读写锁和互斥锁。 
进一步,步骤2中开辟第N存储块时,还要进行如下操作, 
步骤2.1:根据第N-1存储块的结束位置、待存入数据的大小以及内存池的结尾位置判断内存池是否还有足够空间开辟第N存储块来存储数据,如果有足够空间,则执行步骤2.2;如果没有足够空间,则执行2.3; 
步骤2.2:开辟与待存入数据等大的第N存储块,将待存入数据存入所述第N存储块,生成关于第N存储块的结构体,并在结构体中标记所存储的数据为完整数据; 
步骤2.3:开辟自第N-1存储块的结束位置至内存池的结束位置大小的第N存储块,将待存入数据的一部分存入所述第N存储块,形成第N存储块的结构体,在结构体中标记所存储的数据为不完整数据;将剩余的待存入数据存入内存池头部。 
采用上述进一步方案的有益效果是:可以有效解决当内存不足时,数据写入的问题。 
进一步,步骤2.3中在将剩余的待存入数据存入内存池头部前要执行如下步骤: 
步骤2.3.1:写进程根据循环队列的第N(N=1,2,3,4…)结构体中关于读进程读取第N存储块的记录,判断第N存储块中是否被所有读进程读完,如果未读完则等待,等到读完后,执行步骤2.3.2;如果读完则直接执行步骤2.3.2; 
步骤2.3.2:判断第N存储块的大小是否能够容纳待剩余的待存入数据,如果能够容纳,则自内存池起始位置开始开辟与剩余的待存入数据等大的存储块,结束;否则返回步骤2.3.1。 
采用上述进一步方案的有益效果是:上述方法采用的是读优先策略,如 果内存池已满,需要覆盖已有数据,则判断需要覆盖的存储块中的数据是否已被读完,如果已读完则直接覆盖,如果未读完则等待,等读完后再覆盖,保证了数据的完整性。 
进一步,所述步骤2.3.1中还包括预设一个等待时间阈值,当所述写进程等待的时间超过等待时间阈值时,所述第N存储块还未所有读进程读完,则不再等待,直接执行步骤2.3.2。 
采用上述进一步方案的有益效果是:上述方法是在写进程追上读进程时,可以防止读进程死掉而出现死等的情况,拟定等待时间阈值,如果超出等待时间阈值,即使读进程未读完,则认为该进程自行退出,不再等待,写进程直接写入对应的存储块。 
进一步,步骤3中所述第N结构体中还包括用于记录一个或若干个读进程读取存储池中第N存储块的读取状态的标记数组,当某一读进程读取第N存储块时,将第N结构体关于该读进程对所述第N存储块是否已读的标记位置1。 
采用上述进一步方案的有益效果是:所述第N结构体中的读取状态标记数组,可以为写进程提供参考,尤其是在写进程追上读进程时,写进程可参考该标记数组来判断该结构体对应的存储块是否被所有读进程读完,进而判断写进程是否可以向相应的存储块中写入数据。 
进一步,多个读进程可同时对共享内存进行读操作,只有一个写进程对共享内存进行写操作,读进程和写进程可同时对共享内存进行操作。 
采用上述进一步方案的有益效果是:大大提高进程间的效率。 
进一步,写进程创建所述共享内存前,要根据所述写进程句柄中的权限控制ID进行权限检测,检测通过后,才可根据句柄中的共享内存ID在物理地址中寻找相应的位置,进而创建所述共享内存。 
进一步,每个读进程对所述共享内存进行读写操作前,要根据其句柄中 的权限控制ID进行权限检测,检测通过的可对共享内存进行读操作。 
采用上述进一步方案的有益效果是:各个进程对共享内存进行操作前进行权限检测,不具备操作权限的进程不能进行读或写,可有效防止无关进程所述共享内存,强化了安全机制,增强了进程间通讯的安全性。 
进一步,所述读进程读取循环队列头指针指向的结构体所对应的内存池中存储块时需获取读写锁,读取其他存储块时不必获取读写锁,所述写进程每次进行写操作时需要获取读写锁,当有进程对共享内存进行操作,需要修改管理单元中存储的当前使用该共享内存的进程数目时,所述进程需要获取互斥锁才能进行操作。 
采用上述进一步方案的有益效果是:本发明为进程密集信息交换提供共享内存池,提高进程的交互能力,为减少锁冲突带来的开销,设计使用最少锁闭的数据结构,并对共享内存池进行高效的管理。 
附图说明
图1为本发明所述共享内存的结构图; 
图2为本发明所述一种基于共享内存的多进程通信方法流程图。 
附图中,各标号所代表的部件列表如下: 
1、管理单元,2、循环队列,3、内存池,3-1、存储块。 
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。 
共享内存是一种高效率的进程间通信方式,也是最快的IPC形式,两个不同进程A,B共享内存的意思是,同一块物理内存被映射到进程A,B各自的进程地址空间,两个进程可以即时看到对方对共享内存中数据的更新,进程A,B间数据的传递就不再涉及内核。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。 
无论是读写锁还是互斥锁,如果大量使用势必会影响系统性能,所以我们尽可能减少锁的使用,避免由于锁冲突带来的额外开销。本发明将共享内存以循环队列的形式进行管理,通过合理利用队列数据结构的特点,避免了多进程读共享内存时锁的使用,即多进程从共享内存读取信息时不需要获取锁。为提高共享内存的使用效率,共享内存可以同时进行读写,同一时刻支持多进程读,唯一进程写,但不支持多进程写。 
如图1所示,所述共享内存包括管理单元1、循环队列2和存储池3,其中,管理单元1存储的管理信息包括: 
该共享内存创建者ID、队列规模、内存池大小、内存池起始位置、内存池结尾位置、当前写进程的操作位置、当前读该共享内存的所有读进程标记、当前使用该共享内存的进程数目、互斥锁和读写锁。读写锁确保管理单元中存储的管理信息的读写安全以及内存池同一时刻只有一个进程在写;所述互斥锁保证如果有进程要修改管理单元中存储的当前使用该共享内存的进程数目时,需要首先获取互斥锁,这样就不会导致几个进程同时操作引起数据混乱。 
本发明中所述共享内存包括三个部分,第一部分是管理单元,其存储了整个共享内存的管理信息;第二部分存储了一个循环队列;第三部分是内存池,内存池中形成若干个存储块,用于存入数据;在存储块中存入数据的同时,生成用于记录所述存储块属性的结构体,并存入循环队列中;写数据的时候,会有一个相应的结构体入队,该结构体对应相应的存储块,进行读操作时,首先通过该队列来取得内存池的信息,从而进行有效访问。 
下面详细介绍三个部分。 
PART1:共享内存的开始部分,该部分存储整个共享内存的管理信息,其具体内容为一个MESA_shm_queue_info_t类型的结构体,该结构体为: 
Struct MESA_shm_queue_info{ 
Unsigned int max_queue_size; 
Unsigned int pool_size; 
Unsigned int pool_begin_offset; 
Unsigned int pool_end_offset; 
Unsigned int write_pos; 
Unsigned int op_num;//当前附加进程数 
Intower_id; 
Char read_flags[32];//标记待读进程 
Pthread_mutex_t mutex; 
Pthread_rwlock_t rwlock; 
}MESA_shm_queue_info_t; 
下面详细介绍该结构体: 
max_queue_size:循环队列规模。 
pool_size:PART3内存池的大小。 
pool_begin_offset:内存池的起始位置(相对共享内存起始地址的距离)。 
pool_begin_offset:内存池的结尾位置(相对共享内存起始地址的距离)。 
write_pos:内存池目前写操作进行到的位置(相对共享内存起始地址的距离)。 
op_num:当前使用该共享内存的进程数目。 
ower_id:该共享内存创建者的ID。 
read_flags[32]:当读进程附加到共享内存的时候,该数组的相应位置1,表示该进程需要读数据,例如id为8的读进程来进行操作时,read_flags[8]赋值为’1’。 
Mutex:该互斥锁用来保护op_num。 
Rwlock:读写锁,保护整块共享内存。 
PART2:该块内存为循环队列,通过循环队列来实现对内存池的控制。 
该内存区域首先存储一个circular_array_t类型的结构体和若干block_info_t类型结构体。 
Structcircular_array_t{ 
Int head;//队列头指针 
Int tail;//队列尾指针 
Block_info_t*pbase; 
该结构体是队列的信息。 
Structblock_info_t{ 
Unsigned int block_size; 
Unsigned int block_start; 
Unsigned int block_end; 
Unsigned int is_splits; 
Char flags[32]; 
下面详细介绍该结构体: 
block_size:对应内存池中实际存储块的大小。 
block_start:对应内存池中存储块的起始位置(相对)。 
block_end:对应内存池的中存储块的结束位置(相对)。 
is_splits:该块数据是否分片。当内存池尾部剩余的容量不足以存放整块数据,需要把部分数据放到内存池的头部时该数据就是分片的数据,拷贝时要分两次进行。 
若干个block_info_t类型的结构体组成循环队列。从而将内存池进行有效管理。 
PART3:实际存放数据的内存池。 
如图2所示,一种基于共享内存的多进程间通讯方法,包括如下步骤: 
步骤1:写进程创建包括管理单元、循环队列和内存池的共享内存,并在管理单元中存储关于整个共享内存的管理信息; 
步骤2:写进程从管理单元中获取关于当前写进程的操作位置,,根据每次待写入数据的大小,顺序开辟与待存入数据大小等大的第N(N=1,2,3…)存储块,将待写入的数据存入相应存储块中; 
步骤3:开辟第N存储块时,记录所述第N存储块的大小、起始位置、结束位置以及存储的是否为完整数据,上述记录的信息形成第N结构体,并存入循环队列的队尾指针处;同时更新管理单元中关于当前写进程的操作位置的记录; 
步骤4:在执行步骤2至3的同时,一个或若干个读进程可对共享内存进行读操作; 
步骤5:每个读进程自循环队列的队头开始,依次读取第N(N=1,2,3…)结构体; 
步骤6:判断第N结构体是否处于循环队列的队尾,如果是队尾,说明该结构体对应的存储块正在进行写操作,则等待,等到队尾指针不指向该结构体时,执行步骤7;如果不是队尾,则直接执行步骤7; 
步骤7:根据该结构体中关于第N存储块的位置信息,读取内存池中相应第N存储块中的数据; 
步骤8:判断所述写进程是否还要向内存池写入数据,如果是,返回步骤2;否则判断内存池中数据是否都已读完,如果未读完则返回步骤5;否则结束。 
其中,步骤2中开辟第N存储块时,还要进行如下操作, 
步骤2.1:根据第N-1存储块的结束位置、待存入数据的大小以及内存池的结尾位置判断内存池是否还有足够空间开辟第N存储块来存储数据,如果有足够空间,则执行步骤2.2;如果没有足够空间,则执行2.3; 
步骤2.2:开辟与待存入数据等大的第N存储块,将待存入数据存入所述第N存储块,生成关于第N存储块的结构体,并在结构体中标记所存储的数据为完整数据; 
步骤2.3:开辟自第N-1存储块的结束位置至内存池的结束位置大小的第N存储块,将待存入数据的一部分存入所述第N存储块,形成第N存储块的结构体,在结构体中标记所存储的数据为不完整数据;将剩余的待存入数据存入内存池头部。 
其中,步骤2.3中在将剩余的待存入数据存入内存池头部前要执行如下步骤: 
步骤2.3.1:写进程根据循环队列的第N(N=1,2,3,4…)结构体中关于读进程读取第N存储块的记录,判断第N存储块中是否被所有读进程读完,如果未读完则等待,等到读完后,执行步骤2.3.2;如果读完则直接执行步骤2.3.2; 
步骤2.3.2:判断第N存储块的大小是否能够容纳待剩余的待存入数据,如果能够容纳,则自内存池起始位置开始开辟与剩余的待存入数据等大的存储块,结束;否则返回步骤2.3.1。 
其中,所述步骤2.3.1中还包括预设一个等待时间阈值,当所述写进程等待的时间超过等待时间阈值时,所述第N存储块还未所有读进程读完,则不再等待,直接执行步骤2.3.2。 
所述每个结构体中还包括用于记录一个或若干个读进程读取存储池中相应的存储块的读取状态的标记数组。 
多个读进程可同时对共享内存进行读操作,只有一个写进程对共享内存进行写操作,读进程和写进程可同时对共享内存进行操作。 
为防止无关进程使用共享内存,本发明在进程对共享内存进行读写操作时进行权限检测,无权限的进程不能对共享内存进行操作。写进程创建所述共享内存前,要根据所述写进程句柄中的权限控制ID进行权限检测,检测通过后,才可根据句柄中的共享内存ID在物理地址中寻找相应的位置,进而创建所述共享内存。每个读进程对所述共享内存进行读写操作前,要根据其句柄中的权限控制ID进行权限检测,检测通过的可对共享内存进行读操作。 
共享内存队列被多进程共享,进程可以顺序对共享内存进行读写操作。支持多个进同时对该共享内存进行读操作,同一时刻只能有一个进程对该内存进行写操作。读写不冲突,能同时进行。各个进程对共享内存进行操作前会进行权限检测,不具备操作权限的进程不能进行读或写。 
所述读进程读取循环队列头指针指向的结构体所对应的内存池中存储块时需获取读写锁,读取其他存储块时不必获取读写锁,所述写进程每次进行写操作时需要获取读写锁,当有进程对共享内存进行操作,需要修改管理单元中存储的当前使用该共享内存的进程数目时,所述进程需要获取互斥锁才能进行操作。比如当有进程要使用该共享内存时,需要修改当前使用该共享内存的进程数目,或是有进程操作完毕退出时,也需要修改当前使用该共享内存的数目,这个时候进行操作的进程需要获取互斥锁,才能修改当前使用该共享内存的数目,这样可以有效防止几个进程同时操作引起数据混乱。 
由于现实系统中各进程可能存在本身的问题,比如某进程可能在读取过程中死掉或者读取效率过低影响共享内存数据更新,面对这些问题,本发明为用户提供可选择的淘汰机制,可以对上述进程进行特定时间的等待或者淘汰。具体包括如下两种情况。 
1.读操作追上写操作时如何解决同步问题。 
解决方案:每次进行读操作时都会判断是否读到队列的队尾,如果是队尾,则不读取该队尾处结构体对应的内存池中相应存储块中的数据,以免读到脏数据。该方案最坏的情况是该块数据在下一次读操作中读取。 
因为如果所要读取的是队尾指针指向的结构体,其所对应的存储块可能正在处于写入状态,如果还未写完就直接读取,读到的数据可能是脏数据。 
2.写操作追上读操作时如何解决同步问题。 
我们设计了两种策略:读优先策略和写优先策略。 
首先介绍读优先策略。读优先策略会确保各个读进程读到完整的数据,如果写操作追上读操作则等待读操作,等读操作读取完数据再写入。同时,为防止读进程死掉而出现死等情况,拟设定等待时间阈值WAIT_TIME,如果等待时间超过WAIT_TIME,则认为该进程自行退出,不再等待。 
然后介绍写优先,写优先的情况下一般不建议采用,写优先的模式下写进程不对读进程负责,不论是否已读完,如果写进程追上读进程,则写进程直接写入数据,覆盖之前的数据,但是会对各读进程因此而覆盖掉的数据量进行统计。 
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。 

Claims (10)

1.一种基于共享内存的多进程间通讯方法,其特征在于,包括如下步骤:
步骤1:写进程创建包括管理单元、循环队列和内存池的共享内存,并在管理单元中存储关于整个共享内存的管理信息;
步骤2:写进程从管理单元中获取关于当前写进程的操作位置,根据每次待写入数据的大小,顺序开辟与待存入数据大小等大的第N(N=1,2,3…)存储块,将待写入的数据存入相应存储块中;
步骤3:开辟第N存储块时,记录所述第N存储块的大小、起始位置、结束位置以及存储的是否为完整数据,上述记录的信息形成第N结构体,并存入循环队列的队尾指针处;同时更新管理单元中关于当前写进程的操作位置的记录;
步骤4:在执行步骤2至3的同时,一个或若干个读进程可对共享内存进行读操作;
步骤5:每个读进程自循环队列的队头开始,依次读取第N(N=1,2,3…)结构体;
步骤6:判断第N结构体是否处于循环队列的队尾,如果是队尾,说明该结构体对应的存储块正在进行写操作,则等待,等到队尾指针不指向该结构体时,执行步骤7;如果不是队尾,则直接执行步骤7;
步骤7:根据该结构体中关于第N存储块的位置信息,读取内存池中相应第N存储块中的数据;
步骤8:判断所述写进程是否还要向内存池写入数据,如果是,返回步骤2;否则判断内存池中数据是否都已读完,如果未读完则返回步骤5;否则结束。
2.根据权利要求1所述一种基于共享内存的多进程间通讯方法,其特征在于,步骤1中所述的管理信息包括:
该共享内存创建者ID、队列规模、内存池大小、内存池起始位置、内存池结尾位置、当前写进程的操作位置、当前读该共享内存的所有读进程标记、当前使用该共享内存的进程数目、读写锁和互斥锁。
3.根据权利要求1所述一种基于共享内存的多进程间通讯方法,其特征在于,步骤2中开辟第N存储块时,还要进行如下操作,
步骤2.1:根据第N-1存储块的结束位置、待存入数据的大小以及内存池的结尾位置判断内存池是否还有足够空间开辟第N存储块来存储数据,如果有足够空间,则执行步骤2.2;如果没有足够空间,则执行2.3;
步骤2.2:开辟与待存入数据等大的第N存储块,将待存入数据存入所述第N存储块,生成关于第N存储块的结构体,并在结构体中标记所存储的数据为完整数据;
步骤2.3:开辟自第N-1存储块的结束位置至内存池的结束位置大小的第N存储块,将待存入数据的一部分存入所述第N存储块,形成第N存储块的结构体,在结构体中标记所存储的数据为不完整数据;将剩余的待存入数据存入内存池头部。
4.根据权利要求3所述一种基于共享内存的多进程间通讯方法,其特征在于,步骤2.3中在将剩余的待存入数据存入内存池头部前要执行如下步骤:
步骤2.3.1:写进程根据循环队列的第N(N=1,2,3,4…)结构体中关于读进程读取第N存储块的记录,判断第N存储块中是否被所有读进程读完,如果未读完则等待,等到读完后,执行步骤2.3.2;如果读完则直接执行步骤2.3.2;
步骤2.3.2:判断第N存储块的大小是否能够容纳剩余的待存入数据,如果能够容纳,则自内存池起始位置开始开辟与剩余的待存入数据等大的存储块,结束;否则返回步骤2.3.1。
5.根据权利要求4所述一种基于共享内存的多进程间通讯方法,其特征在于,所述步骤2.3.1中还包括预设一个等待时间阈值,当所述写进程等待的时间超过等待时间阈值时,所述第N存储块还未被所有读进程读完,则不再等待,直接执行步骤2.3.2。
6.根据权利要求1所述一种基于共享内存的进程间通讯方法,其特征在于,步骤3中所述第N结构体中还包括用于记录一个或若干个读进程读取存储池中第N存储块的读取状态的标记数组,当某一读进程读取第N存储块时,将第N结构体关于该读进程对所述第N存储块是否已读的标记位置1。
7.根据权利要求1所述一种基于共享内存的多进程间通讯方法,其特征在于,多个读进程可同时对共享内存进行读操作,只有一个写进程对共享内存进行写操作,读进程和写进程可同时对共享内存进行操作。
8.根据权利要求1所述一种基于共享内存的进程间通讯方法,其特征在于,写进程创建所述共享内存前,要根据所述写进程句柄中的权限控制ID进行权限检测,检测通过后,才可根据句柄中的共享内存ID在物理地址中寻找相应的位置,进而创建所述共享内存。
9.根据权利要求1所述一种基于共享内存的进程间通讯方法,其特征在于,每个读进程对所述共享内存进行读操作前,要根据其句柄中的权限控制ID进行权限检测,检测通过的可对共享内存进行读操作。
10.根据权利要求2所述一种基于共享内存的进程间通讯方法,其特征在于,所述读进程读取循环队列头指针指向的结构体所对应的内存池中存储块时需获取读写锁,读取其他存储块时不必获取读写锁,所述写进程每次进行写操作时需要获取读写锁,当有进程对共享内存进行操作,需要修改管理单元中存储的当前使用该共享内存的进程数目时,所述进程需要获取互斥锁才能进行操作。
CN201310432622.7A 2013-09-22 2013-09-22 一种基于共享内存的进程间通讯方法 Active CN103514053B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310432622.7A CN103514053B (zh) 2013-09-22 2013-09-22 一种基于共享内存的进程间通讯方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310432622.7A CN103514053B (zh) 2013-09-22 2013-09-22 一种基于共享内存的进程间通讯方法

Publications (2)

Publication Number Publication Date
CN103514053A true CN103514053A (zh) 2014-01-15
CN103514053B CN103514053B (zh) 2017-01-25

Family

ID=49896822

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310432622.7A Active CN103514053B (zh) 2013-09-22 2013-09-22 一种基于共享内存的进程间通讯方法

Country Status (1)

Country Link
CN (1) CN103514053B (zh)

Cited By (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104980454A (zh) * 2014-04-02 2015-10-14 腾讯科技(深圳)有限公司 一种资源数据共享方法、服务器及系统
CN105760217A (zh) * 2016-03-23 2016-07-13 深圳森格瑞通信有限公司 一种访问共享内存的方法
CN105912478A (zh) * 2016-04-06 2016-08-31 中国航空无线电电子研究所 基于双缓存机制的实时系统多任务数据共享方法
CN105955971A (zh) * 2015-11-30 2016-09-21 中国银联股份有限公司 一种键值缓存的实现方法及装置
CN106020962A (zh) * 2016-05-31 2016-10-12 广东欧珀移动通信有限公司 一种进程控制方法及终端设备
CN106293973A (zh) * 2016-08-17 2017-01-04 深圳市金证科技股份有限公司 无锁消息队列通信方法及系统
CN106372183A (zh) * 2016-08-31 2017-02-01 北京小米移动软件有限公司 文件写入方法及装置
CN106598736A (zh) * 2016-12-13 2017-04-26 深圳中科讯联科技股份有限公司 一种内存池的内存块调用方法和释放方法及服务器
CN106648939A (zh) * 2016-12-30 2017-05-10 上海寰视网络科技有限公司 用于进程间资源共享的方法与设备
CN106708631A (zh) * 2016-11-30 2017-05-24 福建省天奕网络科技有限公司 共享内存属性修改方法及其系统
CN106980551A (zh) * 2017-03-24 2017-07-25 山东浪潮商用系统有限公司 一种进程通信方法及装置
CN107562639A (zh) * 2016-07-01 2018-01-09 北京忆恒创源科技有限公司 擦除块读请求处理方法与装置
CN107577539A (zh) * 2016-07-05 2018-01-12 阿里巴巴集团控股有限公司 用于内核态和用户态通讯的共享内存结构及其应用
CN107589915A (zh) * 2017-09-25 2018-01-16 郑州云海信息技术有限公司 一种分布式存储系统的容量信息监控方法、装置及设备
CN107643942A (zh) * 2016-07-21 2018-01-30 杭州海康威视数字技术股份有限公司 一种状态信息的存储方法及装置
CN108021339A (zh) * 2017-11-03 2018-05-11 网宿科技股份有限公司 一种磁盘读写的方法、设备以及计算机可读存储介质
CN108062252A (zh) * 2016-11-08 2018-05-22 阿里巴巴集团控股有限公司 一种信息交互方法、对象管理方法及装置和系统
CN108255622A (zh) * 2018-01-17 2018-07-06 郑州云海信息技术有限公司 一种smash clp功能实现的方法及系统
CN108304269A (zh) * 2017-01-13 2018-07-20 阿里巴巴集团控股有限公司 一种数据的发送、接收方法、装置及通信框架
CN108614740A (zh) * 2016-12-12 2018-10-02 上海美桔网络科技有限公司 基于进程间共享内存方式生成唯一id的方法及系统
CN108694152A (zh) * 2017-04-11 2018-10-23 上海福赛特机器人有限公司 多核间的通信系统、基于该系统的通信控制方法及服务器
CN109032798A (zh) * 2018-07-25 2018-12-18 天津凯发电气股份有限公司 一种电能质量管理系统共享内存锁控制方法
CN110287044A (zh) * 2019-07-02 2019-09-27 广州虎牙科技有限公司 无锁共享内存处理方法、装置、电子设备及可读存储介质
CN110399229A (zh) * 2018-04-25 2019-11-01 清华大学 进程间的通信方法、装置、系统、介质及终端
WO2019227724A1 (zh) * 2018-05-28 2019-12-05 深圳市道通智能航空技术有限公司 数据读写方法、装置以及环形队列
CN110750372A (zh) * 2019-10-16 2020-02-04 深圳技威时代科技有限公司 基于共享内存的日志系统及日志管理方法
CN111699479A (zh) * 2019-06-20 2020-09-22 深圳市大疆创新科技有限公司 日志处理方法、设备及计算机可读存储介质
CN112702550A (zh) * 2020-12-21 2021-04-23 上海商米科技集团股份有限公司 一种nvr多进程共享音视频流系统及实现方法
CN112860458A (zh) * 2021-02-22 2021-05-28 北京睿芯高通量科技有限公司 一种基于共享内存的进程间通信方法及系统
CN113032162A (zh) * 2021-03-23 2021-06-25 重庆智行者信息科技有限公司 一种基于共享内存备份机制的多进程通讯方法
CN113779545A (zh) * 2021-08-27 2021-12-10 深圳市优必选科技股份有限公司 数据跨进程共享的方法、终端设备及计算机可读存储介质
CN114297109A (zh) * 2021-12-28 2022-04-08 中汽创智科技有限公司 一种基于订阅发布模式的数据处理方法、装置、电子设备及存储介质
CN115269392A (zh) * 2022-07-20 2022-11-01 北京斯年智驾科技有限公司 一种用于融合感知的可视化调试方法、设备、介质
CN116668985A (zh) * 2023-06-25 2023-08-29 成都飞机工业(集团)有限责任公司 一种多源多节点采集传感数据无线传输的低误码率方法
CN118093230A (zh) * 2024-04-22 2024-05-28 深圳华锐分布式技术股份有限公司 基于共享内存的跨进程通信方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6629152B2 (en) * 1998-06-29 2003-09-30 International Business Machines Corporation Message passing using shared memory of a computer
CN101448018A (zh) * 2008-12-26 2009-06-03 中兴通讯股份有限公司 进程间通信方法和装置
CN102255794A (zh) * 2010-05-17 2011-11-23 塔塔咨询服务有限公司 远程消息收发吞吐量优化和等待时间缩短用系统和方法
CN102915276A (zh) * 2012-09-25 2013-02-06 武汉邮电科学研究院 一种用于嵌入式系统的内存控制方法
CN103150220A (zh) * 2011-12-07 2013-06-12 腾讯科技(深圳)有限公司 进程间的通信方法和通信系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6629152B2 (en) * 1998-06-29 2003-09-30 International Business Machines Corporation Message passing using shared memory of a computer
CN101448018A (zh) * 2008-12-26 2009-06-03 中兴通讯股份有限公司 进程间通信方法和装置
CN102255794A (zh) * 2010-05-17 2011-11-23 塔塔咨询服务有限公司 远程消息收发吞吐量优化和等待时间缩短用系统和方法
CN103150220A (zh) * 2011-12-07 2013-06-12 腾讯科技(深圳)有限公司 进程间的通信方法和通信系统
CN102915276A (zh) * 2012-09-25 2013-02-06 武汉邮电科学研究院 一种用于嵌入式系统的内存控制方法

Cited By (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104980454A (zh) * 2014-04-02 2015-10-14 腾讯科技(深圳)有限公司 一种资源数据共享方法、服务器及系统
US10455003B2 (en) 2014-04-02 2019-10-22 Tencent Technology (Shenzhen) Company Limited Method, server, and system for sharing resource data
CN104980454B (zh) * 2014-04-02 2019-08-06 腾讯科技(深圳)有限公司 一种资源数据共享方法、服务器及系统
CN105955971B (zh) * 2015-11-30 2019-09-17 中国银联股份有限公司 一种键值缓存的实现方法及装置
CN105955971A (zh) * 2015-11-30 2016-09-21 中国银联股份有限公司 一种键值缓存的实现方法及装置
CN105760217A (zh) * 2016-03-23 2016-07-13 深圳森格瑞通信有限公司 一种访问共享内存的方法
CN105912478B (zh) * 2016-04-06 2018-11-27 中国航空无线电电子研究所 基于双缓存机制的实时系统多任务数据共享方法
CN105912478A (zh) * 2016-04-06 2016-08-31 中国航空无线电电子研究所 基于双缓存机制的实时系统多任务数据共享方法
CN106020962A (zh) * 2016-05-31 2016-10-12 广东欧珀移动通信有限公司 一种进程控制方法及终端设备
CN106020962B (zh) * 2016-05-31 2019-05-21 Oppo广东移动通信有限公司 一种进程控制方法及终端设备
US10754684B2 (en) 2016-05-31 2020-08-25 Guangdong Oppo Mobile Telecommunications Corp., Ltd. Method for controlling process and related device
US10719351B2 (en) 2016-05-31 2020-07-21 Guangdong Oppo Mobile Telecommunications Corp., Ltd. Method for controlling states of processes and related device
CN107562639B (zh) * 2016-07-01 2020-08-11 北京忆恒创源科技有限公司 擦除块读请求处理方法与装置
CN107562639A (zh) * 2016-07-01 2018-01-09 北京忆恒创源科技有限公司 擦除块读请求处理方法与装置
CN107577539A (zh) * 2016-07-05 2018-01-12 阿里巴巴集团控股有限公司 用于内核态和用户态通讯的共享内存结构及其应用
CN107577539B (zh) * 2016-07-05 2021-03-16 阿里巴巴集团控股有限公司 用于内核态和用户态通讯的共享内存结构及其应用
CN107643942A (zh) * 2016-07-21 2018-01-30 杭州海康威视数字技术股份有限公司 一种状态信息的存储方法及装置
CN107643942B (zh) * 2016-07-21 2020-11-03 杭州海康威视数字技术股份有限公司 一种状态信息的存储方法及装置
CN106293973B (zh) * 2016-08-17 2019-12-13 深圳市金证科技股份有限公司 无锁消息队列通信方法及系统
CN106293973A (zh) * 2016-08-17 2017-01-04 深圳市金证科技股份有限公司 无锁消息队列通信方法及系统
CN106372183B (zh) * 2016-08-31 2020-02-07 北京小米移动软件有限公司 文件写入方法及装置
CN106372183A (zh) * 2016-08-31 2017-02-01 北京小米移动软件有限公司 文件写入方法及装置
CN108062252A (zh) * 2016-11-08 2018-05-22 阿里巴巴集团控股有限公司 一种信息交互方法、对象管理方法及装置和系统
CN108062252B (zh) * 2016-11-08 2022-02-01 斑马智行网络(香港)有限公司 一种信息交互方法、对象管理方法及装置和系统
CN106708631A (zh) * 2016-11-30 2017-05-24 福建省天奕网络科技有限公司 共享内存属性修改方法及其系统
CN106708631B (zh) * 2016-11-30 2020-06-09 福建省天奕网络科技有限公司 共享内存属性修改方法及其系统
CN108614740A (zh) * 2016-12-12 2018-10-02 上海美桔网络科技有限公司 基于进程间共享内存方式生成唯一id的方法及系统
CN106598736A (zh) * 2016-12-13 2017-04-26 深圳中科讯联科技股份有限公司 一种内存池的内存块调用方法和释放方法及服务器
CN106648939A (zh) * 2016-12-30 2017-05-10 上海寰视网络科技有限公司 用于进程间资源共享的方法与设备
CN108304269A (zh) * 2017-01-13 2018-07-20 阿里巴巴集团控股有限公司 一种数据的发送、接收方法、装置及通信框架
CN106980551A (zh) * 2017-03-24 2017-07-25 山东浪潮商用系统有限公司 一种进程通信方法及装置
CN108694152A (zh) * 2017-04-11 2018-10-23 上海福赛特机器人有限公司 多核间的通信系统、基于该系统的通信控制方法及服务器
CN108694152B (zh) * 2017-04-11 2021-07-13 实时侠智能控制技术有限公司 多核间的通信系统、基于该系统的通信控制方法及服务器
CN107589915A (zh) * 2017-09-25 2018-01-16 郑州云海信息技术有限公司 一种分布式存储系统的容量信息监控方法、装置及设备
CN107589915B (zh) * 2017-09-25 2020-05-29 郑州云海信息技术有限公司 一种分布式存储系统的容量信息监控方法、装置及设备
CN108021339A (zh) * 2017-11-03 2018-05-11 网宿科技股份有限公司 一种磁盘读写的方法、设备以及计算机可读存储介质
CN108021339B (zh) * 2017-11-03 2021-05-04 网宿科技股份有限公司 一种磁盘读写的方法、设备以及计算机可读存储介质
CN108255622A (zh) * 2018-01-17 2018-07-06 郑州云海信息技术有限公司 一种smash clp功能实现的方法及系统
CN110399229A (zh) * 2018-04-25 2019-11-01 清华大学 进程间的通信方法、装置、系统、介质及终端
WO2019227724A1 (zh) * 2018-05-28 2019-12-05 深圳市道通智能航空技术有限公司 数据读写方法、装置以及环形队列
US11500586B2 (en) 2018-05-28 2022-11-15 Autel Robotics Co., Ltd. Data read-write method and apparatus and circular queue
CN109032798A (zh) * 2018-07-25 2018-12-18 天津凯发电气股份有限公司 一种电能质量管理系统共享内存锁控制方法
CN109032798B (zh) * 2018-07-25 2022-03-18 天津凯发电气股份有限公司 一种电能质量管理系统共享内存锁控制方法
CN111699479A (zh) * 2019-06-20 2020-09-22 深圳市大疆创新科技有限公司 日志处理方法、设备及计算机可读存储介质
CN110287044A (zh) * 2019-07-02 2019-09-27 广州虎牙科技有限公司 无锁共享内存处理方法、装置、电子设备及可读存储介质
CN110750372B (zh) * 2019-10-16 2024-05-14 深圳技威时代科技有限公司 基于共享内存的日志系统及日志管理方法
CN110750372A (zh) * 2019-10-16 2020-02-04 深圳技威时代科技有限公司 基于共享内存的日志系统及日志管理方法
CN112702550A (zh) * 2020-12-21 2021-04-23 上海商米科技集团股份有限公司 一种nvr多进程共享音视频流系统及实现方法
CN112860458A (zh) * 2021-02-22 2021-05-28 北京睿芯高通量科技有限公司 一种基于共享内存的进程间通信方法及系统
CN113032162A (zh) * 2021-03-23 2021-06-25 重庆智行者信息科技有限公司 一种基于共享内存备份机制的多进程通讯方法
CN113032162B (zh) * 2021-03-23 2023-10-24 重庆兰德适普信息科技有限公司 一种基于共享内存备份机制的多进程通讯方法
CN113779545A (zh) * 2021-08-27 2021-12-10 深圳市优必选科技股份有限公司 数据跨进程共享的方法、终端设备及计算机可读存储介质
CN114297109A (zh) * 2021-12-28 2022-04-08 中汽创智科技有限公司 一种基于订阅发布模式的数据处理方法、装置、电子设备及存储介质
CN114297109B (zh) * 2021-12-28 2024-05-24 中汽创智科技有限公司 一种基于订阅发布模式的数据处理方法、装置、电子设备及存储介质
CN115269392A (zh) * 2022-07-20 2022-11-01 北京斯年智驾科技有限公司 一种用于融合感知的可视化调试方法、设备、介质
CN115269392B (zh) * 2022-07-20 2023-11-14 北京斯年智驾科技有限公司 一种用于融合感知的可视化调试方法、设备、介质
CN116668985A (zh) * 2023-06-25 2023-08-29 成都飞机工业(集团)有限责任公司 一种多源多节点采集传感数据无线传输的低误码率方法
CN118093230A (zh) * 2024-04-22 2024-05-28 深圳华锐分布式技术股份有限公司 基于共享内存的跨进程通信方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN103514053B (zh) 2017-01-25

Similar Documents

Publication Publication Date Title
CN103514053A (zh) 一种基于共享内存的进程间通讯方法
CN103761145B (zh) 用于各个处理器的辅助中断虚拟化的访客中断控制器
US5355457A (en) Data processor for performing simultaneous instruction retirement and backtracking
CN102855121B (zh) 分支处理方法与系统
CN100570564C (zh) 将用户模式线程配置为接近禁止中断优先级的方法和系统
CN101788922B (zh) 基于辅助线程实现事务存储系统的方法和装置
CN104424158A (zh) 基于通用单元的高性能处理器系统和方法
US11409630B2 (en) Systems and methods of formal verification
CN102629221B (zh) 用于分布式共享存储的任务同步方法、装置及系统
CN101446918A (zh) 一种实现用户态调试器调试单个函数的方法及系统
CN102770841A (zh) 用于产生最小引导映像的方法和装置
US20090043927A1 (en) Buffer managing method and buffer managing apparatus
CN110888727A (zh) 并发无锁队列实现方法、装置及存储介质
CN102955737A (zh) 异构处理器体系的程序调试方法和系统
CN103279428A (zh) 一种显式的面向流应用的多核Cache一致性主动管理方法
CN106293894A (zh) 执行事务性功率管理的硬件设备和方法
CN101359321A (zh) 一种实现处理器相互通讯的方法及装置
CN103020003A (zh) 面向多核程序确定性重演的内存竞争记录装置及其控制方法
CN106294169A (zh) 一种基于符号执行虚拟机的数据竞争检测与重放方法
CN102141955B (zh) 一种基于Linux的内核日志系统及实现方法
CN103984508A (zh) 基于飞腾处理器平台的raid多线程并发读写方法
CN109885489B (zh) 驱动程序中数据竞争检测方法及装置
CN109656868A (zh) 一种cpu与gpu之间的内存数据转移方法
CN101719116A (zh) 基于异常处理的事务存储访问机制的实现方法及所用系统
CN102023845B (zh) 一种基于状态机的Cache并发访问管理方法

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