【Linux操作系统】

阅读: 评论:0

【Linux操作系统】

【Linux操作系统】

目录

System V起源

共享内存原理

共享内存应用原理

共享内存接口

创建共享内存shmget

shmget测试 

 创建和删除代码

挂载接口shmat

 去关联调用接口shmdt

 第二个进程与共享内存挂载

两个进程进行通信

共享内存的特性

补充知识

【shmget的第二个参数size】

 shmid每次运行的数量会增加问题

system V信号量(非重点)


System V起源

进程间通信除了通过管道,都是基于文件的通信方式,还有一种方式是:SystemV标准的进程间通信方式。SystemV是一个在OS层面专门为进程通信设计的一个方案。这些都是由计算机科学家和程序员设计的,并且需要给用户使用。

如果要给用户用,是以什么方式给用户使用的呢?在操作系统层面上,SystemV是OS内核的一部分,是为OS中多进程提供的一种通信方案。但是OS不相信任何用户,给用户提供功能的时候,采用系统调用。所以System V进程间通信,一定会存在专门用来通信的接口:system call。

因为在早期由很多的方案,但是我们需要统一使用一个方案,所以现在诞生了在统一主机内的进程间通信方案:system V方案。

进程间通信的本质就是:让不同的进程看到同一份资源。

  • 共享内存
  • 消息队列
  • 信号量

共享内存原理

A和B两个进程互相独立,物理内存当中代码和数据也互相独立,所以两个进程不会互相干扰,这就是两个进程具有独立性。

现在我们要进行进程间通信,我们要在物理内存当中要创建一个内存块。但是实际可能并不是这么操作,要根据当前内存使用情况来具体操作,我们现在这么理解。

第二部就是要通过某种调用,让进程”挂接“到这份内存空间上。什么是挂接到内存?我们已经有了一块内存空间,并且地址空间中有很大一批没有使用的物理地址空间,页表也有很多没有被填写的映射关系,所以通过某种系统调用,把刚刚这个内存空间通过页表映射到地址空间中。所以我们在地址空间中就能拿到这个内存空间的起始地址。那么A和B进程都一样,第一步创建的内存块通过页表映射,都挂接到了各自地址空间中。让参与通信的多个进程挂接到同一份内存上,此时达到了让不同进程看到了同一份资源,这种通信方案叫做共享内存

1.通过某种调用,在内存中创建一份内存空间。

2.通过某种调用,让进程”挂接“到这份内存空间上。

在后面可能不会共享内存了。所以在不用共享内存的时候

3.去关联(去挂接)

4.释放共享内存

综上共享内存的接口有4个,当然这四个是核心接口。

本文发布于:2024-02-03 00:16:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170689056847400.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:操作系统   Linux
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23