美文网首页
努力学习计算机操作系统---进程通信

努力学习计算机操作系统---进程通信

作者: 何甜甜在吗 | 来源:发表于2018-12-19 14:58 被阅读0次

    什么是进程通信

    进程之间的信息交换,用户通过操作系统提供的一组通信指令高效地传送大量数据而不需关注通信实现方式

    进程通信的方式

    共享存储器系统
    • 共享数据结构的通信方式
      要求进程公用某些数据结构实现进程间的信息交换。如前篇文章中生产者与消费者模型中的缓冲池就是共享数据结构。缺点是共享数据结构需要由程序员维护并且只适合传递相对少量的数据
    • 共享存储区的通信方式
      在存储器中划出了一块共享存储区,进程可以通过对共享存储区中数据的读或写实现通信。进程在通信之前,先向系统申请获得共享存储区中的一个分区,并指定该分区的关键字,如果系统已经给其他进程分配了这样的分区,则将该分区的描述符返回给申请者,然后申请者把获得的共享存储区 链接到本进程上
    消息传递系统

    消息传递系统是当前应用最为广泛的一种进程间的通信机制,进程之间的数据交换以格式化的消息为单位,程序员直接利用操作系统提供的一组通信命令实现消息的传递。可以根据实现方式的不同分为直接通信方式和间接通信方式

    • 直接通信方式
      发送进程利用OS所提供的发送命令,直接把消息发送给目标进程,此时发送进程和接收进程都以显示方式提供对方的标识符。可以用如下两条原语表示:
    Send(Receiver, message);  //发送消息,Receiver指定发给哪个进程
    Receiver(Sender, message);  //接收消息
    

    接收进程无法事先指定发送进程,Receiver(Sender, message);中的Sender指的是源进程的参数,也是完成通信后的返回值

    • 间接通信方式(信箱通信方式)
      间接通信方式指进程之间的通信需要通过作为共享数据结构的实体,该实体用于暂存发送进程发送给目标进程的消息,接收进程则从实体中取出对方发送给自己的消息,通常把这种实体称为信箱。
      • 信箱的创建和撤销
        信箱的创建可以由程序员创建也可以由系统创建,创建者应给出信箱名字、信箱属性(公用、私用和公用)。信箱的创建可以使用撤销原语撤退,但是有些信箱的生命周期是跟着进程走的,可以不主动调用撤销原语撤销

      • 信箱的发送和接收
        通信原语表示如下:

      Send(mailbox, message);  //发送消息
      Receiver(mailbox, message);  //接收消息
      
      和直接通信方式相比,发现原来直接指定进程,现在指定信箱
      • 信箱的分类
        • 私用信箱
          用户进程自己创立一个信箱,并作为该进程的一部分,信箱的拥有者有权从信箱中读取消息,其他进程只能往这个信箱中发送消息。当拥有该信箱的进程结束时,信箱也随之消息
        • 公用信箱
          由操作系统创建,提供给系统中的所有核准进程使用,核准进程可以往信箱中发送消息,也可以从信箱中读取发送给自己的消息。公用信箱在系统运行期间始终存在
        • 共享信箱
          由用户进程创建,在创建时或创建后指明它是可共享的,同时须指出共享进程的名字。信箱的拥有者和共享者都有权从信箱中取走发送给自己的消息
    管道通信系统(信箱通信)形式

    发送进程和接收进程之间的通信通过一个共享文件(pipe文件)。发送进程向管道发送字符流形式的数据,接收进程从管道中读取数据
    管道机制须提供的三方面的协调能力

    • 互斥
      一个进程正在对pipe执行读/写操作时。其他进程必须等待
    • 同步
      当发送进程发送一定数据到管道后,就去睡眠,直到接收进程取走数据后才把它唤醒。当接收进程读取空管道后,就去睡眠,直到有发送进程发送了数据才唤醒
    • 确定对方是否存在
      只有确定对方已经存在时,才能进行通信

    相关文章

      网友评论

          本文标题:努力学习计算机操作系统---进程通信

          本文链接:https://www.haomeiwen.com/subject/gphrkqtx.html