ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux系统编程18_共享内存

2021-04-14 23:04:24  阅读:202  来源: 互联网

标签:shmat int 18 shmid 计数器 Linux 进程 共享内存


在Linux中,每个进程都有属于自己的进程控制块(PCB)和地址空间(Addr Space),并且都有一个与之对应的页表,

负责将进程的虚拟地址与物理地址进行映射,通过内存管理单元(MMU)进行管理。
两个不同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即共享内存


在物理地址中有一块共同的内存区,即共享内存,这块内存可以被两个进程同时看到
这样当一个进程进行写操作,另一个进程读操作就可以实现进程间通信。
但是,我们要确保一个进程在写的时候不能被读,因此我们使用信号量来实现同步与互斥

 

对于一个共享内存,实现采用的是引用计数的原理,当进程脱离共享存储区后,计数器减一,挂架成功时,计数器加一,
只有当计数器变为零时,才能被删除。当进程终止时,它所附加的共享存储区都会自动脱离。

==================================================================

相关函数:

shmget ( ):创建共享内存
int shmget(key_t key, size_t size, int shmflg);

 

shmat ( ):挂接共享内存
void *shmat(int shmid, const void *shmaddr, int shmflg);

 

shmdt ( ):去关联共享内存
当一个进程不需要共享内存的时候,就需要去关联。
该函数并不删除所指定的共享内存区,而是将之前用shmat函数连接好的共享内存区脱离目前的进程。

 

shmctl ( ):销毁共享内存
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

=======================================================================

参考链接:

共享内存:https://blog.csdn.net/ypt523/article/details/79958188

标签:shmat,int,18,shmid,计数器,Linux,进程,共享内存
来源: https://www.cnblogs.com/grooovvve/p/14660350.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有