位置: 编程技术 - 正文

Linux共享内存实现机制的详解(linux共享内存最大值)

编辑:rootadmin

推荐整理分享Linux共享内存实现机制的详解(linux共享内存最大值),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux 共享内存大小,linux共享内存是什么意思,linux共享内存实现,linux中实现共享内存的两种编程方法,linux共享内存是什么意思,linux 内存共享,linux 共享内存大小,linux共享内存shm,内容如对您有帮助,希望把文章链接给更多的朋友!

Linux共享内存实现机制的详解

内存共享: 两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。

效率: 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建 立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回 文件的。因此,采用共享内存的通信方式效率是非常高的。

共享内存实现机制

共享内存是通过把同一块内存分别映射到不同的进程空间中实现进程间通信。而共享内存本身不带任何互斥与同步机制,但当多个进程同时对同一内存进行读写操作时会破坏该内存的内容,所以,在实际中,同步与互斥机制需要用户来完成。 来看几个系统调用函数:

(1)创建共享内存

参数:key为输出型参数 size:size的大小应为整数倍(4k对齐) shmflg:权限标志

(2)将共享内存映射到自己的内存空间:shmat

shmat是空间映射,通过创建的共享内存,在它能被进程访问之前,需要把该段内存映射到用户进程空间。shmaddr是用来指定共享内存映射到当前进程中的地址位置,要想改设置有用,shmflag必须设置为SHM_RND标志。大多情况下,应设置为空指针(void*)0,让系统自动选择地址,从而减小程序对硬件的依赖性。shmflag除了上面的设置外,还可以设置为SHM_RDONLY,使得映射过来的地址只读。 返回值:调用成功则返回映射地址的第一个字节,失败返回-1。 (3)解除映射:shmdt

参数为要解除的地址空间。

(4)控制共享内存 先来看第三个参数的结构体: 第二个参数cmd的选项:IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构体复制到buf里

Linux共享内存实现机制的详解(linux共享内存最大值)

IPC_SET:改变共享内存的状态,把buf所指的结构体中的uid,gid,mode,复制到共享内存的shmid_ds结构体内 IPC_RMID:删除这块共享内存 BUF:共此内存管理结构体

代码实现:

共享内存的特点:

(1)共享内存就是允许两个不想关的进程访问同一个内存 (2)共享内存是两个正在运行的进程之间共享和传递数据的最有效的方式 (3)不同进程之间共享的内存通常安排为同一段物理内存 (4)共享内存不提供任何互斥和同步机制,一般用信号量对临界资源进行保护。 (5)接口简单

所有进程间通信的特点:

(1)管道

管道分为命名管道和匿名管道。匿名管道只能单向通信,且只能在有亲缘关系的进程间使用,常用于父子进程,当一个进程创建了一个管道,并调用fork创建子进程后,父进程关闭读端,子进程关闭写端,实现单向通信。管道是面向字节流,自带互斥与同步机制,生命周期随进程。 命名管道与匿名管道:命名管道允许毫不相干的两个进程之间

(2)信号量

信号量是一个计数器,可以用来控制多个线程对共享资源的访问,它不是用于交换大批数据,而用于多线程之间的同步,常作为一种锁机制,防止某进程在访问资源时其他进程也来访问,因此,主要作为进程间以及同一进程的不同线程间的同步手段。

(3)消息队列

消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区受限等特点。消息队列是UNIX下不同进程之间可以实现资源共享的 一种机制,UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程,对消息队列具有操作权限的进程都可以使用msgget完成对消息队列的操作控制,通过使用消息类型,进程可以按顺序读信息,或为消息安排优先级顺序。

(4)共享内存

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC方式,它是针对其他IPC方式运行效率低而专门设计的,它往往与其他机制,如信号量,配合使用,来实现进程间的同步。

标签: linux共享内存最大值

本文链接地址:https://www.jiuchutong.com/biancheng/378224.html 转载请保留说明!

上一篇:Linux消息队列实现进程间通信实例详解(linux 消息队列 系统参数)

下一篇:Linux下NC反弹shell命令(推荐)(linux反弹shell方法)

  • 固定资产的进项税额可以抵扣吗
  • 金融企业哪些方面可以进行数据分析
  • 行政事业单位住房基金
  • 筹建期间发生的开办费计入什么科目
  • 现金流量表的编制基础是什么
  • 报关单汇率按出口日期还是申报日期
  • 金蝶软件制造费用结转步骤
  • 企业所得税季报营业收入,营业成本怎么填
  • 银行日记账必须一年一本吗
  • 报表申报错误怎么作废重报
  • 招待费和福利费每年标准
  • 自产产品用于业务宣传确认收入吗
  • 装饰设计事务所平面图
  • 应付款管理参数设置的基本操作流程
  • 小规模纳税人进项发票怎么做账
  • 税收筹划的具体方法有哪些
  • 现金折扣不考虑增值税什么意思
  • 企业所得税弥补亏损怎么算
  • 工会费用是什么意思
  • 三代税款手续费申请流程
  • 股息红利个人所得税扣税失败
  • 房地产开发企业会计科目
  • 广告公司税收分析
  • 旅游业营改增差额征税的会计核算怎么做?
  • 某物业公司组织工人进入下水道
  • 个人所得税免税收入怎么填纳税申报表
  • 企业合作开发的研发费怎样加计扣除?
  • 总部员工调往下属单位
  • 员工入职体检表格模板
  • 什么是研发投入和成本
  • mac电脑因问题而重新启动
  • spss安装后无法启动,并行配置不正确
  • 贷款的钱转账了怎么办
  • PHP:Memcached::prepend()的用法_Memcached类
  • 固定资产汽车抵扣新政策
  • 半月湾在哪
  • csrss是什么程序
  • 伦德格伦
  • phpstan
  • 纳税申报方式有直接申报邮寄申报数据电文
  • PHP:mcrypt_ofb()的用法_Mcrypt函数
  • 货物运输发票怎么备注发票样板
  • 享受所得税优惠情况说明
  • windowsserver2019产品密钥
  • wordpress!
  • 关于录制初三毕业班家长寄语通知
  • 中药资源与开发跨专业考研
  • 税收筹划类型有哪几种
  • 小规模纳税人销售货物税率是多少
  • mysql登录报1045
  • 无法收回的应收账款可以税前扣除吗
  • 股权转让如何计算股权原值
  • 营改增后建筑劳务分包开票一般几个点
  • 房地产契税新政策2023
  • 物业公司收到维修基金会计分录
  • 个人转到公司账上的钱能开发票吗
  • 汇算期间取得以下收入
  • 处置投资性房地产取得的收入属于企业收入吗
  • 企业其他应付款增加的原因
  • sqlserver存储过程怎么查看
  • cmd shutdown命令
  • win10预览版好用吗
  • windows7很卡
  • linux系统中cp命令
  • 如何查看激活日期苹果
  • win8怎么设置桌面
  • win8.1怎么设置
  • win10标准用户权限
  • js实现用户登录
  • 彻底弄懂js中的this指向
  • node.js中的http.response.write方法使用说明
  • 统计一组数据各个数字出现的次数
  • js特殊字符有哪些
  • 基于javascript的毕业设计选题
  • shell打开日志文件
  • 安装node-sass报错
  • 实际金额与报关金额不符
  • 税务师事务所行政登记表怎么办理
  • 010是哪个市区的电话号码
  • 国家税务总局2011年34号公告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设