码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统编程18_共享内存

时间:2021-04-15 12:35:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:inux   好的   控制   ddr   strong   内存   space   http   target   

在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

Linux系统编程18_共享内存

标签:inux   好的   控制   ddr   strong   内存   space   http   target   

原文地址:https://www.cnblogs.com/grooovvve/p/14660350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!