进程间通信:

进程间通信(IPC):
什么是进程间通信:
为什么要进程间通信:大型项目模块化,协同运行(数据传输,数据共享,进程控制);
为什么进程间通信需要操作系统提供接口:因为进程的独立性;
操作系统如何能让进程之间进程通信:给多个进程提供一个公共的都能访问到的媒介(内存中的缓冲区);
操作系统因为提供进程间通信的使用场景有所不同,因此提供的进程间通信方式也有很多种,各自有各自的特点;
管道(匿名管道/命名管道)
(system V标准)
共享内存,
消息队列
信号量
POSIX标准
管道:(内核的一块缓冲区)
用于进程间传输数据资源
操作系统为了接口统一,对于管道这块缓冲区的操作,跟我们的io操作使用同一套接口
匿名管道:
创建的缓冲区没有标识,因此只能用于具有亲缘关系的进程间通信,创建一个管道,返回文件描述符,这时候创建一个子进程,子进程复制父进程,因此子进程也有相同的描述符指向内核相同的缓冲区,这时候他们就可以通信了.

匿名管道的特性:(只能用于具有亲缘关系的进程间通信)
1.管道是半双工通信(单向通信)
读写特性:
write会阻塞,直到有数据被读取出去
如果管道的所有的写端都被关闭,那么读端读完管道中的数据之后,会返回0;
如果管道的所有读端都被关闭,那么写端写入数据的时候会触发异常,退出进程

互斥:对临界资源在同一时间的唯一访问性
同步:对临界资源操作的时序可控性
当对管道的读写数据大小不大于PIPE_BUF时候,将保证数据读写的原子性
特性:
1.半双工单项特性
2.读写特性
3.管道自带同步与互斥操作保护
4.提供字节流服务:数据的传输比较灵活,到那时有可能会造成数据粘连(本质是数据没有边界)
5.生命周期随进程
pipe(匿名管道符)
管道符的实现:
ls | grep
命名管道(FIFO):
可见于文件系统,因此所有的进程都可以通过打开文件,获取到内核管道这块缓冲区所对应的
描述符,因此命名管道可以用于同一机器上任意进程间通信;
命令kfifo
命令管道跟匿名管道的各种特性都完全相同(不包括仅限亲缘关系进程通信)
命名管道文件打开特性:
如果管道文件只读打开,将阻塞,直到这个文件被以写的方式打开
如果管道文件只写打开,将阻塞,直到这个文件被以读的方式打开
如果管道文件以读写打开,不阻塞

System V标准的进程间通信方式:
共享内存;进程间通信方式中最快的一种!!!
消息队列
信号量
共享内存操作步骤:
1.创建共享内存
2.将共享内存映射到进程的虚拟地址空间
3.直接通知虚拟地址访问
4.解除映射
5.删除共享内存
(最快的进程间通信方式)

消息队列:内核创建一个队列,实现进程间的数据传输

信号量:
是什么:是一个计数器+具有等待队列的计数器–用于对资源进行计数
获取一个资源:计数-1,如果没有资源,计数为0,为了获取资源因此死等
回收一个资源:计数+1,唤醒死等,唤醒的是信号量等待队列上的进程
功能:等待与唤醒;用于实现进程间的同步与互斥;

同步: 对资源操作的时候,如果计数为为0,表示没有资源,代表不能操作则死等,资源回收后计数+1被唤醒之后才能操作,这就是时序的可控;(等待与唤醒)

**互斥:**计数只有0/1,要不然有资源操作,要不然没资源操作,
别人拿走了资源,计数变成0,不能操作死等,意味着别人对资源操作期间谁都无法对资源进行操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值