Incomputerhardware,sharedmemoryreferstoa(typicallylarge)blockofrandomaccessmemory(RAM)thatcanbeaccessedbyseveraldifferentcentralprocessingunits(CPUs)inamultiprocessorcomputersystem.
在多处理器的计算机系统中,共享内存指可以被不同中央处理器(CPU)访问的大容量内存。
共享内存
Incomputerscience,sharedmemoryismemorythatmaybesimultaneouslyaccessedbymultipleprogramswithanintenttoprovidecommunicationamongthemoravoidredundantcopies.Sharedmemoryisanefficientmeansofpassingdatabetweenprograms.
在软件层面,共享内存可以使多个进程访问同一块内存空间,是Linux下的多进程之间通信的一种方法。
共享内存
如上图所示,进程A和进程B共享同一块物理内存,对于共享内存中的数据,进程A和进程B均可进行相关操作,从而达到两个进程之间数据传递的目的。
共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同malloc()函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。
在Linux中,每个进程都有属于自己的进程控制块(PCB)和地址空间(AddrSpace),并且都有一个与之对应的页表,负责将进程的虚拟地址与物理地址进行映射,通过内存管理单元(MMU)进行管理。两个不同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即共享内存。
共享内存
如上图所示,若A进程给内存中写数据,B进程从内存中读取数据,在此期间一共发生了两次复制:
A进程到共享内存共享内存到B进程因为直接在内存上操作,所以共享内存的速度非常快。
但需要注意的是,共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取,所以通常需要用其他的机制来同步对共享内存的访问,例如使用信号量来实现同步与互斥,确保一个进程在写的时候不能被读。
相关阅读内存溢出和内存泄漏
何为计算机的虚拟内存
C程序中常见的与内存相关的错误
迫不得已时使用动态内存分配的注意事项
进程的抽象概念:独立控制流和私有地址空间
本文来自“修夏”用户投稿,该文观点仅代表作者本人,不代表华夏信息网立场,本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容,请发送邮件至1470280261#qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。如若转载,请注明出处:http://www.xxxwhg.com/zh/104347.html