进程间共享内存访问及读写

1. 进程间共享内存相关linux_C函数

基本解释:

  • shmget函数是系统新建并获取共享物理内存的函数
  • shmat韩式是系统将物理的共享内存映射到当前进程的虚拟空间中,并将映射的虚拟内存地址返回
  • shmdt函数是系统将映射的虚拟内存地址表清除,当前进程无法访问这一块物理意义上的共享内存
  • shmctl函数是对物理的共享内存块进行操作

2. 进程间共享内存基本流程

进程1

  1. 进程1通过shmget函数新建一块物理的共享内存,并获取到这块内存在该系统中的唯一shm_id
  2. 紧接着调用shmat函数对这块唯一shm_id的物理共享内存映射到当前进程的虚拟空间地址中,并返回对应的虚拟空间地址
  3. 我们可以利用该地址对此物理的共享内存进行读/写
  4. 读写完毕后,shmdt函数对映射到进程虚拟空间的地址进行销毁,当前进程无法再访问该物理空间
  5. shmctl对实际的物理共享内存空间进行删除

进程2

  1. 在物理的共享内存删除前,使用shmat函数,我们可以对该shm_id进行映射到进程2的虚拟空间中,以获取实际物理共享内存的虚拟映射地址,然后对该物理空间进行读/写
  2. 读写完毕后,同样的调用shmdt函数对映射到进程2的共享内存虚拟空间地址进行毁

keyword

  1. 进程间的通讯(父子进程,netlink,socket等等)如何传递shm_id是关键,该shm_id在系统中唯一

3. demo code

//pg:有时间再写,哈哈哈

shm的更多相关文章

  1. oracle对/dev/shm的使用

    查看共享内存打开的文件数 [root@db2 ~]# lsof -n | grep /dev/shm | wc -l 34693 共享内存中总共文件数 [root@db2 ~]# ls -l /dev ...

  2. 浅析/dev/shm

    一,/dev/shm 概念 /dev/shm 是一个tmpfs文件系统,临时文件系统,是基于内存的文件系统,也就是说/dev/shm中的文件是直接写入内存的,而不占用硬盘空间. 在Centos和Red ...

  3. Linux下的tmpfs文件系统(/dev/shm)

    转自:http://www.2cto.com/os/201411/354888.html 介绍 /dev/shm/是一个使用就是tmpfs文件系统的设备,其实就是一个特殊的文件系统.redhat中默认 ...

  4. mmap和shm共享内存的区别和联系

    共享内存的创建 根据理论: 1. 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制.共享内存可以通过mmap()映射普通文件(特殊情况下还可以采用匿 ...

  5. linux下的/dev/shm目录

    linux下的/dev/shm目录 linux中/dev目录下一般都是一些设备文件,例如磁盘.内存.摄像头等. /dev/shm这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都 ...

  6. 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。

    巧用linux服务器的/dev/shm/ 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度. 首先让我们认识一下,什么是tmpfs和/dev/shm/? ...

  7. dev/shm time in linux

    统计文件夹大小: du -hx --max=1 : du -sk :du -hsc 重新组织行分隔符进行显示: echo "abc,dd,bach,dong,jing,shang,china ...

  8. ORA-000845 与 /dev/shm(tempfs)

    MEMORY_TARGET参数在Oracle 11g被引进,主要是用于控制Oracle对于系统内存的使用,首次将SGA与PGA整合到一起实现自动管理.一旦设置了MEMORY_TARGET参数值,Ora ...

  9. linux概念之/dev/shm

    Linux默认(CentOS)/dev/shm分区的大小是系统物理内存的50%, 虽说使用/dev/shm对文件操作的效率会高很多,但是目前各发行软件中却很少有使用它的(除了前面提到的Oracle), ...

  10. /dev/shm

    /dev/shm/是linux下一个特殊的目录,因为这个目录不在硬盘上,而是在内存里. /dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以 ...

随机推荐

  1. Java基础1-1-2—java基础语法(运算符)

    2. 运算符 2.1 算术运算符 运算符和表达式 运算符:对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符连接的表达式体现的是不 ...

  2. Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介

    简介 Grafana Labs 简介 Grafana 是用于时序数据的事实上的仪表盘解决方案.它支持近百个数据源. Grafana Labs 想从一个仪表盘解决方案转变成一个可观察性 (observa ...

  3. 聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS)

    聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS) juc包下的一堆并发工具类是我们日常开发特别是面试中常被拿来问的八股文之一,为了工作也好,为了面试也罢,今天 ...

  4. JavaScript: symbol 和 string key 取值用法

    '' 做 key 可以被 . 或者 [] 运算符取出 [""] 做 key 同样可以被 . 或者 [] 运算符取出 symbol 做 key 只能被 . 取出 [symbol] 做 ...

  5. C# 委托原理刨析,外加和事件对比

    什么是委托 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用. 在实例化委托时,你可以将其实例与任何具有兼容参数和返回类型的方法进行绑定. 你可以通过委托实例调用方法. 简单的理解,委 ...

  6. 基于Kali Linux的渗透测试工具-Discover脚本

    简介  这篇文章主要介绍了基于Kali Linux的渗透测试工具-Discover脚本以及相关的经验技巧,文章约5629字,浏览量510,点赞数9,值得参考! 如果你正在使用Kali Linux,那么 ...

  7. 推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐

    1. 推荐算法的初步理解 如果说互联网的目标就是连接一切,那么推荐系统的作用就是建立更加有效率的连接,推荐系统可以更有效率的连接用户与内容和服务,节约了大量的时间和成本. 1.1 推荐系统主要解决问题 ...

  8. 代码随想录算法训练营day07 | leetcode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

    LeetCode 454.四数相加II 分析1.0 这个最直接暴力法,不过过于暴力了,害怕.jpg 失误 读题理解失误:题目要求的是四元组的个数,读完题到我这里成了输出四元组,悲哉 分析2.0 记录有 ...

  9. LeetCode-1405 最长最快乐字符串

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-happy-string 题目描述 如果字符串中不含有任何 'aaa','bbb' ...

  10. (五) Mysql 之锁详细篇

    一.锁的分类1.范围:全局锁.表级锁.行级锁2.功能分类:共享锁.排它锁 二.数据库的全局锁 加锁:mysql> flush tables with read lock; 释放锁:mysql&g ...