Linux的几种通信方式

进程是操作系统级别的概念,一个运行的程序,可以看成是操作系统为它创建了一个进程。

我们一般接触的是线程之间的通信,但是进程之间也是需要通信的啊,比如你调用其他程序提供的服务,这就是进程间通信的一种,所以我们会仔细盘点一些进程间通信的方式。

  • 管道
    管道有三种:分别是普通管道,流管道,命名管道。
    (1)普通管道:有两种限制,一是只能单工通信,只能由一方发送信息给另一方,二是,相互通信的进程必须是父子进程或许是兄弟进程
    (2)流管道:解决了只能单工通信的问题,但是通信的双方还必须是夫子进程
    (3)命名管道:去除了第二种限制,使许多不相关联的进程之间通信

管道是如何通信的呢?
管道是操作系统的内核管理的一块缓冲区,缓冲区的一端连接一个进程,另一端连接另一个进程。即一个进程向缓冲区写数据,缓冲区向另一个进程输出数据。缓冲区被设计成一个环形结构,可以循环利用。当管道中没有信息的话,从管道中读取的进程会一直等待,直到另一端放入信息。当管道满了之后,往管道写入信息的进程会一直等待,直到管道有剩余空间后才继续写入信息。

在这里插入图片描述
那么管道是如何建立的呢?
在一开始,管道的输入和输出都是连接同一个进程,然后进程通过fork机制创建另一个进程,另一个进程的输入和输出也指向pipe,然后每个进程都取缔一个对管道的输入或输出,最后形成一个进程对管道的输入,另一个进程接受管道的输出。

在这里插入图片描述

说完管道我们讲讲信号量机制,首先我们要知道信号量是什么?
信号量就是限制一个共享资源在一个时间段内只能有一个进程对该资源进行访问,是一种原子操作,只允许进行等待P和发送信息V操作。

工作原理:
P(sv):如果sv的值大于0,就给他减1;如果它的值为0,就挂起该进程
V(sv):如果其他进程因等待sv被挂起,就让他恢复行为,如果没有进程因等待sv被挂起,则加1。
当A进程请求P(sv),进入临界区执行进程,sv减一,B进程执行P(sv),sv为0被挂起,当A进程执行完,调用V(sv)时,进程B被唤醒,B进入临界区继续执行。

共享内存实现机制:
在磁盘上建立一个文件,进程的寄存器映射到磁盘上文件地址,不同的进程对这个磁盘文件进行读写,从而达到进程间通信的目的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值