面试常考点,大家注意了啊
进程是分配资源的基本单位,个进程之间的地址是相互独立的。
为了保护系统安全,操作系统不允许一个进程直接放位列一个进程,那怎莫办呢?
这就需要用到进程的通信了。
进程通信可分为三类:
- 共享储存
- 管道通信
- 消息传递
共享存储
操作系统为进程们分配一块共享的内存空间,个个进程互斥访问。
共享存储又分为:
基于数据结构的共享
基于储存区的共享
数据结构的共享: 共享空间中为同一类型的数据结构,传输效率低,为低级通信
储存区的共享: 分配一块共享储存区,数据的类型,位置都有进程控制,效率高为高级通信
管道通信
1.管道通信是半双工通信,只能单向传递信息,要想双向传递信息,必须设置两个管道。
2.各进程互斥的访问管道
3.进程是通过字符流的方式写入管道,当管道被写满时,写进程的write()系统调用会被阻塞,等待进程将数据取走,当数据被取走后,读进程的read()系统调用会被阻塞。
4.管道没写满不许读,管道没读完不许写
5.管道中的数据一旦被读出,就会被管道抛弃,所以意味着读进程只能有一个,否则可能导致读错数据
消息传递
进程间消息的交换,是通过格式化消息(message)为单位,由操作系统提供的消息发送和接收原语来实现的。
message的组成如图
消息传递可分为两种:
直接通信传递
间接(信箱)通信传递
直接:每一个进程都有一个消息缓冲队列,直接通信会将要发送的消息直接挂在目标的消息缓冲对列上
间接:会有一个中间实体(信箱),发送进程通过发送原语发送到信箱,接收进程通过接收原语接收