进程间通讯

管道     信号量     消息队列     共享内存     socket套接字

一般情况下,系统中运行着大量的进程,而每个进程之间并不是相互独立的,有些进程之间经常需要互相传递消息。但是每个进程在系统中都有自己的地址空间,操作系统通过页表和实际物理内存所关联,不允许其他进程随意进入。因此,就必须有一种机制既能保证进程之间的通信,又能保证系统的安全,即进程间通信机制——I P C (Inter_Process Communication)。

Linux中的内存空间分为系统空间和用户空间。在系统空间中,由于各个线程的地址空间都是共享的,即一个线程能够随意访问kernel中的任意地址,所以无需进程通信机制的保护。而在用户空间中,每个进程都有自己的地址空间,一个进程为了与其他进程通信,必须陷入到有足够权限访问其他进程空间的kernel中,从而与其他进程进行通信。在Linux中支持System V 进程通信的手段有三种:消息队列(Message queue)、信号量(Semaphore)、共享内存(Shared memory)。

管道

原理:

特点:

有名管道:可以在任意进程间进行通讯,通讯为双向,任意一端都可读可写,但同一时间只能一端读,一端写。

无名管道:只能在具有亲缘关系的进程间通讯(父子进程),单向,只能一端读一端写。

管道能在父子进程间传递数据,利用的是fork调用之后两个管道文件描述符fd[0],fd[1]都保持打开。一堆这样的文件描述符只能保证父子进程间同一个方向的传输,父进程和子进程必须有一个关闭fd[0],另一个关闭fd[1],要想实现父子间的双向传输,就必须用两个管道。

管道的默认大小:4k

管道的数据存放在哪里:内存中

创建管道失败的原因:  内存不够 ;文件描述符已达到上限,无法再打开文件描述符

信号量

原子操作:原子操作意为不可被中断的一个或一系列操作,也可以理解为就是一件事情要么做了,要么没做。

同步与互斥:同步:在访问资源的时候,以某种特定顺序的方式去访问资源 
                        互斥:一个资源每

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值