• 进程通信


         进程通信,指的是进程之间相互交换信息。从某种意义上说进程同步和互斥也是一种进程通信,只是交换的数据量小,因此成为低级通信。

         目前高级通信方式分位三大类:共享存储器系统、消息传递系统和管道通信系统。

    共享存储器系统

        这种通信方式要求进程之间共享某些变量,通过这些变量交换信息。但这这些变量要在各进程之间互斥使用。


    消息传递系统

        广泛应用的一种通信机制。在消息化传递系统中,进程之间交换数据以格式化的方式,又称为报文。按照其实现方式的不同分为直接通信和间接通信。

       (1)直接通信:发送进程直接把消息发送给接受进程。并挂在接受进程的消息缓冲队列上,接受进程从缓冲队列中取出来。

       (2)间接通信:发送进程把消息发给某个中间实体中,接受进程从中取出消息。这种中间实体叫做信箱

         要支持这种通信方式,操作系统应该提供若干个消息缓冲区,用以存放消息。每当一个进程向另一个进程发送消息时,首先向操作系统申请一个消息缓冲区,并把已制备好的消息从发送区复制到该缓冲区,然后把它复制插入接收进程的消息链中。所有发给同一个进程的消息缓冲区构成该进程的消息链,该进程PCB中的mq指针指向该链表头。

         信箱通信:是消息缓冲通信的一种改进,是一种间接通信方式。可由发送进程创建一个连接两个进程的信箱,通信时发送进程只需要把它的信件投入信箱,接收进程就可以在任何时间取走信件,不会丢失。


    管道通信

        所谓管道就是用于连接读进程和写进程之间的一个共享文件。向管道(共享文件)提供输入的发送进程,以字符流的形式将大量的数据写入管道。而接收管道(共享文件)输出的接收进程从管道中接收数据。


    Linux进程通信

    (1)管道:半双工,数据只能单向流动,而只能在具有亲缘关系的进程间使用。管道是一种特殊的文件,这个文件只存在与内存中。管道只能承载无格式字符流以及缓冲区大小等缺点。

    (2)命名管道:半双工,允许无亲缘关系的进程间使用。命名管道是一个设备文件,只需要给出访问路径就行了。

    (3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程在访问资源时,其他资源也来访问。

    (4)消息队列:消息队列是消息的链表,存放在内核中并由消息队列标示符标识。消息队列传递的消息量少。

    (5)信号:信号是一种比较复杂的通信方式,用于通知某个进程某个时间发生。

    (6)共享内存:共享内存时映射一段能被其他进程所访问的内存,这段内存由一个进程创建但是多个进程都可以访问。共享内存时最快的IPC方式

    (7)socket通信:可与不同机器之间的进程实现进程通信。


  • 相关阅读:
    【Linux】VMware及VirtualBox网络配置
    【Linux】VirtualBox安装ubuntu排错LowGraphic
    【Hadoop】Win7上搭建Hadoop开发环境,方法一
    【JAVA】配置JAVA环境变量,安装Eclipse
    Eureka自我保护机制
    zookeeper代替eureka作为SpringCloud的服务注册中心
    mybatisplus代码生成器
    条件构造器 EntityWrapper (重要)
    idea 常用快捷键
    MybatisPlus的通用 CRUD
  • 原文地址:https://www.cnblogs.com/james1207/p/3333751.html
Copyright © 2020-2023  润新知