2.1.4_进程通信

1.知识总览

af1eff2d0fa14ab6a3710b4fefe62c7b.jpg

2.基本概念

2.1是什么

进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互。

比如分享微博里的一篇文章给微信好友。

2.2为什么进程通信需要操作系统的支持

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。

为了保证安全,一个进程不能直接访问另一个进程的地址空间。如果进程可以直接访问其他进程,可能会读取你的个人信息等。

因为进程不能直接访问其他进程的内存地址空间,所以需要操作系统的支持。

3.基本类型

3.1共享存储

3.1.1基于存储区的共享

ab4a28bcbdb448099069033199c92900.jpg

 当进程P和Q通信时,P需要申请一片共享存储区,并向里面写入数据,之后,Q就可以对共享存储区进行访问(读)。

共享存储区可以允许多个进程的访问,为避免多个进程同时向共享存储区写入数据时发生数据覆盖问题,各个进程对共享存储区的访问应该是互斥的。而PV操作机制就可以实现这种互斥。

3.1.2基于数据结构

038cd6fed5624999868c17f3f5a9512c.jpg

 3.2消息传递

6a7546e39dd6458aa22eb9f8e60347a8.jpg

 44991ad6e3264bc481148f98a42d6829.jpg

 操作系统内核管理各进程的PCB,比如进程Q的PCB中包含了进程Q的消息队列,即其他进程发送给进程Q的信息被进程Q接受到的消息。

进程P给进程Q发送一个消息,首先进程P需要在自己的地址空间完善所要发送消息的信息(包括消息头和消息体)。然后进程P执行发送原语,操作系统内核就会接受到进程P的发生的消息,并且把这个消息挂在进程Q的消息队列里,即这个消息从进程P地址空间被复制到了内核空间。最后进程Q执行接受原语(指明我要接受一个消息,以及接受谁发来的消息),操作系统内核就会检查进程Q的消息队列,判断哪个消息是由进程P发送的。找到有进程P发过来的消息后,操作系统就会把消息体的数据从操作系统内核空间复制到进程Q地址空间。

e3e2c18e230244e5ab71254a29567a5c.jpg

 

进程P想要和进程Q进行通信,首先进程P需要通过系统调用申请一个邮箱(也可申请多个邮箱),在自己的地址空间完善消息体。然后执行发送原语(指明所要发送到的信箱以及消息),将消息体发送到信箱A。最后进程Q执行接受原语(指明要接收发送到信箱A的message),之后信箱A的消息体就会被操作系统复制到进程Q地址空间。

3.3管道通信

6f14ea6f14e741a29dcf869a69cb2b65.jpg

 通过系统调用的方式申请一个管道文件,操作系统会创建这个管道文件,这个文件其实就是在内存中开辟了大小固定的内存缓冲区,这样两个进程可以在内存缓冲区里写数据和读数据。

与共享存储的不同:两个进程在共享存储区的读写是随意的,没有任何限制。而管道通信要求数据的读写是先进先出的(前面写满了才能写后面的),也可以把这片内存缓冲区理解为一个循环队列(当进程P在写数据时,如果内存缓冲区的后边已经填满且前面空的话,那就可以填写在循环队列中空的部分)。因此读数据或写数据都需要遵循循环队列里先进先出的原则。

4.知识回顾

80d63d3d50044c05afcbdc5d294c4472.jpg

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值