操作系统之进程间通信

129 阅读2分钟

管道(Pipe):

半双工通信方式,数据只能单向流动,通常用于具有亲缘关系的进程间通信,如父子进程。它允许一个进程将数据写入管道,另一个进程从管道中读取数据。管道机制必须提供互斥、同步和确定对方是否存在的协调能力。

命名管道(Named Pipe):

也称为FIFO,与管道类似,但允许无亲缘关系的进程间通信。它在文件系统中有一个唯一的名称,可以通过该名称进行访问。

消息队列(Message Queue):

消息的链表,存放在内核中,由消息队列标识符标识。它克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。消息队列允许进程向队列中添加消息,并从队列中读取消息,消息具有特定的格式和优先级。

共享内存(Shared Memory):

一种高效的进程间通信方式,允许多个进程访问同一块物理内存。共享内存的优点是速度快,但需要处理并发访问和同步问题。它通常与其他通信机制(如信号量)配合使用。

信号量(Semaphore):

一个计数器,用于控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。信号量主要用于进程间的同步和互斥。

套接字(Socket):

可用于不同计算机间的进程通信。它起源于UNIX操作系统,是网络通信接口的一种。套接字允许进程通过网络发送和接收数据,实现分布式系统和网络通信。

信号(Signal):

一种异步通信方式,允许一个进程向另一个进程发送信号。信号通常用于处理异步事件,如键盘中断、终端关闭等。