首页 > 系统相关 >进程间通信

进程间通信

时间:2023-02-03 16:36:52浏览次数:53  
标签:IPC 队列 System 间通信 管道 进程 共享内存

一、进程间通信(interprocess communication,简称 IPC)指两个进程之间的通信。   系统中每个进程都有自己的地址空间,并且相互独立、隔离,每个进程都处于自己的地址空间中。 二、通信机制   Linux 内核提供了多种 IPC 机制,基本是从 UNIX 系统继承而来,而对 UNIX 发展做出重大贡献的两大主力 AT&T 的贝尔实验室及 BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对 UNIX 早期的进程间通信手段进行了系统的改进和扩充,形成了“System V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接字(Socket,也就是网络)的进程间通信机制。Linux 则把两者继承了下来,如下如所示:

  其中,早期的 UNIX IPC 包括:管道、FIFO、信号;System V IPC 包括:System V 信号量、System V消息队列、System V 共享内存;上图中还出现了 POSIX IPC,事实上,较早的 System V IPC 存在着一些不足之处,而 POSIX IPC 则是在 System V IPC 的基础上进行改进所形成的,弥补了 System V IPC 的一些不足之处。POSIX IPC 包括:POSIX 信号量、POSIX 消息队列、POSIX 共享内存。

  总结如下:

  ⚫ UNIX IPC:管道、FIFO、信号;   ⚫ System V IPC:信号量、消息队列、共享内存;   ⚫ POSIX IPC:信号量、消息队列、共享内存;   ⚫ Socket IPC:基于 Socket 进程间通信。  1.管道和FIFO   管道是UNIX系统上最古老的IPC方法。管道被抽象成一种文件(管道文件pipe),把一个进程连接到另一个进程的数据流称为管道。   管道有三种:
  •  普通管道pipe:普通管道有两种限制,一是只能单工,二是只能在父子或者兄弟进程间使用。
  •  流管道s_pipe:  半双工,只能在父子或者兄弟进程间使用。
  •    有名管道name_pipe(FIFO):可以在不同进程之间通信。

 2.信号

3.消息队列

  消息队列是消息的链表存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺陷。消息队列包括 POSIX 消息队列System V 消息队列

  消息队列是 UNIX 下不同进程之间实现共享资源的一种机制,UNIX 允许不同进程将格式化的数据流以消息队列形式发送给任意进程,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。

4.信号量
  信号量是一个计数器,它主要用于控制多个进程间或一个进程内的多个线程间对共享资源的访问,相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志,除了用于共享资源的访问控制外,还可用于进程同步。
  它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源,因此,主要作为进程间以及同一个进程内不同线程之间的同步手段。Linux 提供了一组精心设计的信号量接口来对信号量进行操作,它们声明在头文件 sys/sem.h 中。
 5.共享内存   共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但其它的多个进程都可以访问,使得多个进程可以访问同一块内存空间。共享内存是最快的 IPC 方式。 6.套接字(Socket)   Socket 是一种 IPC 方法,是基于网络的 IPC 方法,允许位于同一主机(计算机)或使用网络连接起来 的不同主机上的应用程序之间交换数据,说白了就是网络通信.   

标签:IPC,队列,System,间通信,管道,进程,共享内存
From: https://www.cnblogs.com/DongdongAa/p/17089682.html

相关文章

  • Linux进程状态D,S,Z的含义
     Linux进程状态——top,ps中看到进程状态D,S,Z的含义在top和ps命令中有一列显示进程状态,分别有如下值:值含义S进程处于interruptablesleep状态D......
  • 进程控制之wait函数
    一、绪论一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则......
  • 进程控制之僵尸进程和孤儿进程
    一、孤儿进程1.孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程。子进程成为孤儿进程之后,init进程则会成为其新的父进程,称为init进程领养孤儿进程。2.例程:1......
  • 进程控制之exec函数族
     一、引言进程通过exec函数根据指定的文件名或目录名执行另一个可执行文件,当进程调用exec函数时,该进程的数据段、代码段和堆栈段完全被新程序替换,从新程序的启动例程开始......
  • 进程间通信之fifo
    一、引言FIFO常被称为有名管道,不同于管道(pipe)。pipe仅适用于“有血缘关系”的IPC。但FIFO还可以应用于不相关的进程的IPC。实际上,FIFO是Linux基础文件类型中的一......
  • 进程状态与进程关系
    一、进程的六种状态Linux系统下进程通常存在6种不同的状态,分为:就绪态、运行态、僵尸态、可中断睡眠状态(浅度睡眠)、不可中断睡眠状态(深度睡眠)以及暂停态。就......
  • Oracle系统常见进程有哪些,作用是什么?
    转至:https://vip.kingdee.com/article/336895665106415104?isKnowledge=2&productLineId=8Oracle系统常见进程如下: 五个必须的ORACLE后台进程SMON、PMON、DBWn、CKPT......
  • 写了个监控 ElasticSearch 进程异常的脚本!
    作者:JackTian来源:公众号「杰哥的IT之旅」ID:Jake_Internet服务器配置免密钥环境准备:配置免密钥前,需要在服务器的hosts文件中配置目标主机名称与IP对应关系。vim/......
  • Linux进程和计划任务
    一、进程及其命令介绍1.1什么是进程要想了解进程,首先我们要了解什么是程序。程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具;而进程......
  • pgrep:根据名称或其他属性查找进程(查找系统中running状态的进程)
    用法示例#根据名称过滤dewanWork~/code/shell%pgrepqemu3570191dewanWork~/code/shell%pgrepqemu-l3570191qemu-system-x86dewanWork~/code/shell%p......