共享内存是指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。
在Linux中,每个进程都有属于自己的进程控制块(PCB)和地址空间(Addr Space),并且都有一个与之对应的页表,负责将进程的虚拟地址与物理地址进行映射,通过内存管理单元(MMU)进行管理。两个不同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即共享内存。
进程通信是指进程之间的信息交换。PV操作是低级通信方式(P操作和V操作,P表示申请,V表示释放)。高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三类:
共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。
在对共享空间进行写/读操作时,需要使用同步互斥工具(如P操作,V操作),对共享空间的写/读进行控制。
消息传递系统
在消息传递系统中,进程间的数据交换是以消息(Message)为单位的。程序员直接利用系统提供的一组通信命令(原语)来实现通信。
操作系统隐藏了通信的实现细节,大大简化了通信程序编制的复杂性,因而获得了广泛的应用。在消息传递系统中,源进程可以直接或间接地将消息传送给目标进程。
管道通信系统
管道通信是消息传递的一种特殊方式。所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。它是读写进程的一个特殊文件(外存,数据量大),允许按照先来先服务的方式传送数据,也能使进程同步执行。
以下,ENJOY
用户基于Cyber RT进行开发时,会将自己的模块抽象为一系列的Component。这些Component既可以加载到同一个进程内运行,也可以加载到不同进程中运行。
目前,同主机不同进程的Component间默认通过共享内存进行通信。相比于其他进程间通信方式,共享内存具备以下几个优点:
由多个进程共享,适合多进程读/写;
通信过程中无系统调用,减少了运行态切换的开销;