共享内存的编程模型

1.什么是共享内存的编程模型?2.共享内存有哪几种实现方式?2.1 mmap的实现方式2.2 System V API2.3 POSIX API3. 源码分析4. 总结5. References1. 什么是共享内存?硬件的视角来看共享内存:在一个多处理机系统中,一条RAM可以被多个不同的CPU处理器(核)访问到,这即是一个共享内存的硬件系统。软件的角度来看共享内存,它是进程间通
摘要由CSDN通过智能技术生成

本博文为原创,遵循CC3.0协议,转载请注明出处:http://blog.csdn.net/lux_veritas/article/details/11934083

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



1.什么是共享内存的编程模型?

2.共享内存有哪几种实现方式?

2.1 mmap的实现方式

2.2 System V API

2.3 POSIX API

3. 深入分析

4. 总结

5. References


1. 什么是共享内存?

硬件的视角来看共享内存:在一个多处理机系统中,一条RAM可以被多个不同的CPU处理器(核)访问到,这即是一个共享内存的硬件系统。

软件的角度来看共享内存,它是进程间通信(IPC)的一种方式,通过某种手段共享某一段物理内存(页)的多个进程,通过对共享的这部分物理内存页进行读写,完成彼此之间的通信。【1】

大多数软件工程师所说的共享内存,指的是IPC的这种通信方式,而与其他IPC机制相比,共享内存省略了一些数据的拷贝过程,因而成为最快的一种IPC通信方式。本文主要讨论的也是共享内存的IPC机制。


2. 共享内存有哪几种实现方式?

共享内存的机制允许两个或多个进程通过把公共的数据结构放入一个共享的内存区域来访问它们。UNIX有两套事实上的共享内存API,一种是标准的POSIX API,一种是比较老的System V API。【2】

两种API的工作方式与执行流程大体相同,都是间接使用mmap的方式,完成内存文件映射的过程。

此处以System V API为例,结合内核源码,简述其实现共享内存通信的过程。举个简单的范例,两个进程,一个写进程,用于向共享内存段写数据,一个读进程,用于从共享内存段读数据。

write进程:

#include <stdio.h>                                                                                                                                           
#include <sys/ipc.h>                                                                                                                                         
#include <sys/shm.h>                                                                                                                                         
#include <sys/types.h>                                                                                                                                       
#include <string.h>                                                                                                                                          
                                                                                                                                                             
int main()                                                                                                                                                   
{                                                                                                                                                            
    int shm_id;                                                                                                                                         
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值