进程间的通信

进程通信就是指进程之间的信息交换


前言

进程是分配系统资源的单位(包括内存地址空间)因此各进程拥有的内存地址空间相互独立,为了保证安全,一个进程不能直接访问另一个进程的地址空间,但进程之间的信息交换有事必须实现的,为了保证进程间的安全通信,操作系统提供了一些方法。


一、共享存储

共享存储:两个进程虽不能直接访问彼此的地址空间,但操作系统为他们开辟了一段共享空间,两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)。操作系统只负责提供共享空间和同步互斥工具(如P、V操作)。
共享存储又分为两种:基于数据结构的共享和基于内存区的共享。
基于数据结构的共享:这种共享方式速度慢,限制多是一种低级的通信方式。比如共享空间里只能放一个长度为10的数组(只能存放一种固定的数据结构)。
基于存储区的共享:这种共享方式速度快,是一种高级通信方式。在内存中画一块共享存储区,数据的形式,存放位置都由进程控制,而不是操作系统。

二、管道通信

“管道”:指用于链接读写进程的一个共享文件,又名pipe文件,其实就是在内存中开辟一个大小固定的缓冲区。
管道通信:
1.“管道”只能采用半双工通信,即某一时间段内只能实现单向的传输,如要实现双向同时通信,则需要设置两个通道。
2.各个进程要互斥的访问管道。
3.数据以字符流的形式写入管道,当管道写满时写进程的write()系统调用将被阻塞,等待读进程将数据取走,当读进程将数据全部取走后,管道变空,此时读进程read()系统调用将被阻塞。
4.如果没写满就不允许读,如果没读空,就不允许写。
5.数据一旦被读出,就从管道中被抛弃,这就意味着读进程只能有一个否则会有读错数据的情况。

三、消息传递

进程间的数据交换以格式化消息(由消息头和消息体组成)为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
消息头包括:发送进程ID,接收消息ID,信息类型,消息长度等格式化消息(计算机网络中的“报文”其实就是一种格式化的消息)
消息传递分为两种:直接通信方式和间接通信方式。
直接通信方式:消息直接挂到接收进程的消息缓冲队列上。(通过原语来发送和接收)
间接通信方式:消息先发送到中间实体(信箱)中,因此也称为信箱通信方式(与管道不同的是多个消息都放在一个指定的信箱中,通过接收原语来接收相应的消息)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Astronaut Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值