共享内存的概念|学习笔记

简介: 快速学习共享内存的概念

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频共享内存的概念】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11051


共享内存的概念

 

内容介绍:

一、 回顾共享内存的实现

二、 共享内存概述

三、共享内存的特点

四、共享内存实现原理

 

一、 回顾及共享内存的实现

用 fork 创建的子进程,有自己独立的地址空间,不相关的两个进程也有自己的独立的地址空间,全局变量不能相互访问。

这两个进程实现进程间通信并且使用共享内存的方法是,通过每个进程的内存中存放了各自的全局变量,这里的内存是指虚拟内存,虚拟内存空间为 4g(地址编号从0x00000000到0xffffffff)。

物理内存,在两个进程之间创造一块共享的物理内存,然后将其映射到虚拟内存的某一段,在进程当中,通过访问虚拟内存的地址范围就可以访问物理内存,所以两个进程可以通过虚拟地址访问同一块物理内存,只有物理内存可以存放数据,两个进程访问同一范围地址的物理内存,实现内存共享。


二、共享内存概述

共享内存是另外一种进程间通信的方式,共享内存允许两个或者多个进程共享给定的存储区域。多个进程共享同一块物理内存。

 

三、共享内存的特点

1、共享内存是进程间共享教据的一种最快的方法。

一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。

2、使用共享内存要注意的是多个进程之间对一个给定存储区访问的互斥。(防止出现数据混乱的现象,一个进程向物理内存中存了数据,另一个进程最好不要向物理内存中存储)

若一个进程正在向共享内存区写数据,则在它做完这一步操作前,别的进程不应当去读、写这些数据。

 

四、共享内存实现原理

1.原理

创建一个物理共享内存,将其映射到虚拟内存中,可以通过访问虚拟内存的地址范围来访问物理内存,只有物理内存可以存放数据,两个进程访问同一范围地址的物理内存,实现内存共享。

2.共享内存示意图如下

进程 A 和进程 B 的逻辑地址空间的一块虚拟地址映射到物理内存的一块地址范围,所以两个进程之间访问一个地址范围,实现了共享内存。(进程映射到物理内存的某一块上,则该块物理内存就存储了数据)

image.gif3.在 ubuntu 12.04 中共序内存限制值如下

(1)共享存储区的最小字节数:1

(2)共享存储区的最大字节数:32 M

(3)共享存储区的最大个数:4096

(4)每个进程最多能映射的共享存储区的个数:4096

4.、如何保证 A 进程和 B 进程操作的是同一个共享内存块

(共享内存块不是文件,是物理内存块)

通过 key 值,在 A 进程中通过 key 值创建并打开或者已经打开一个已经存在的共享内存块,在 B 进程中创建一块新的或者已经打开的共享内存块。

只要进程 A 和 B 使用的 key 值相同,就能保证 A 进程和 B 进程操作的是同一个共享内存块。然后进行映射,映射到虚拟内存中。

相关文章
|
6月前
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
39 0
|
1天前
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
27 2
|
1天前
|
网络协议
Reactor学习,从数据结构,内存分配,概念上分析
Reactor学习,从数据结构,内存分配,概念上分析
38 0
|
8月前
|
Linux
底层开发必知的三个内存结构概念
底层开发必知的三个内存结构概念
底层开发必知的三个内存结构概念
|
10月前
|
存储 缓存 NoSQL
二十一、Linux性能优化实战学习笔记- 如何“快准狠”找到系统内存的问题?
已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量。
98 0
|
10月前
|
存储 缓存 BI
|
10月前
|
存储 缓存 算法
十五、Linux性能优化实战学习笔记 - Linux内存是怎么工作的
内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等
228 1
|
10月前
|
存储 Go 索引
Go的slice扩容不是全部都按照1.25扩容的,还有内存对齐的概念,别再被忽悠了
Go的slice扩容不是全部都按照1.25扩容的,还有内存对齐的概念,别再被忽悠了
|
10月前
|
存储 编译器 Linux
内存管理基础概念总述
内存管理基础概念总述
61 0
|
12月前
|
存储 并行计算 测试技术
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
127 0
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)

热门文章

最新文章