小何讲Linux: Linux下进程间通信概述

       在多任务系统环境下人们逐渐改变了在一个孤立的大型进程中完成所有用户任务的程序设计方法,而采用通过若干个相互联系、小型、相对简单的进程,有分工、有合作,各司其职地来完成一个大型的复杂任务。

共同完成一个大型任务的多个进程之间,如何进行合作、如何进行协调呢?--那就是进程通信


进程通信的障碍:进程空间的限制
解决办法:由操作系统提供相应的进程通信手段。

进程间通信(IPC-InterProcess Communication)是多用户、多任务操作系统必不可少的基本功能 和基础设施。


在操作系统中,遇到下列情况之一时,进程之间必须通过通信才能保证其正确地工作:

  • 共享资源:共享临界资源时,进程之间必须互斥,相关进程之间可通过简单通信方式(如锁)来通知对方;

  • 协同工作:进程之间协作完成任务,必须确保进程同步,进程同步是进程间通信的一种;

  • 并发控制:多任务系统中,有些进程之间并不相互独立,如调试程序将控制另一个进程的执行,控制进程和受控进程之间离不开进程通信;

  • 通知进程:当事发生时,一个进程应该向其他进程或进程组发出消息(如子进程终止时,它必须通知其父进程,自己已是僵死进程);

  • 传递数据:协作进程之间通过进程间通信来传递数据,以便协同工作。


最初UNIX进程间通信(IPC)方式包括:

  • 管道
    • 匿名管道(pipe)--管道
    • 命名管道--FIFO

  • 信号
  • System V进程间通信(IPC)包括:
  • System V消息队列
  • System V信号量
  • System V共享内存区
  • Posix 进程间通信(IPC)包括:
  • Posix消息队列
  • Posix信号量
  • Posix共享内存区

Linux进程间通信的主要方式概述:
(1)管道(Pipe)及命名管道(named pipe):管道(匿名管道)可用于具有亲缘关系进程间的通信,命名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。


(2)信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的。

(3)消息队列(Messge Queue):消息队列是消息的链表,包括Posix消息队列、SystemV消息队列。具有写权限的进程可以按照一定的规则向消息队列中添加新消息;对消息队列有读权限的进程则可以从消息队列中读取消息。
消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限(4096字节)等缺点。

(4)共享内存(Shared memory):共享内存使得多个进程可以访问同一块内存空间,是最快的IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

(5)信号量(Semaphore):主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。

(6)套接字(Socket):这是一种更为一般的进程间通信机制,它既可用于同一台计算机上不同进程间通信,也可用于在不同计算机上的进程间建立基于网络的通信。通常,它主要用于网络中不同机器之间的进程间通信。

你可能感兴趣的:(linux,概述,进程间通信,主要通信方式)