操作系统4:进程通信类型和通信实现方式

本文详细介绍了进程通信的类型,包括共享存储器系统、管道通信、消息传递系统和客户机-服务器系统,强调了高级通信机制如套接字和远程过程调用在进程间大量数据交换中的作用。消息传递通信分为直接和间接方式,通过直接通信原语和信箱通信实现进程间的同步和数据交换。此外,文章还探讨了消息缓冲队列通信机制,展示了发送和接收原语的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、进程通信的类型

(1)共享存储器系统(Shared-Memory System)

(2)管道(pipe)通信系统

(3)消息传递系统(Message passing system)

(4)客户机-服务器系统(Client-Server system)

4.1 - 套接字(Socket)

4.2 - 远程过程调用和远程方法调用

2、消息传递通信的实现方式

(1)直接消息传递系统

1.1 - 直接通信原语

1.2 - 消息的格式

1.3 - 进程的同步方式

1.4 - 通信链路

(2)信箱通信

2.1 - 信箱的结构

2.2 - 信箱通信原语

3.3 - 信箱的类型

3、直接消息传递系统实例

(1)消息缓冲队列通信机制中的数据结构

(2)发送原语

(3)接收原语


        进程通信是指进程之间的信息交换。由于进程的互斥与同步,需要在进程间交换一定的信息,所以它们也是一种进程通信,但只是一种低级的进程通信。比如信号量机制,该机制通信低级的原因在于:

  • 效率低:生产者每次只能向缓冲池投放一个产品(消息),消费者每次只能从缓冲区中取得一个消息。//数据量少
  • 通信对用户不透明:OS 只为进程之间的通信提供了共享存储器。而关于进程之间通信所需之共享数据结构的设置、数据的传送、进程的互斥与同步,都必须由程序员去实现,显然,对于用户而言,这是非常不方便的。//过程繁琐

        在进程之间要传送大量数据时,应当利用 OS 提供的高级通信工具,该工具最主要的特点是:

  • 高效地传送大量数据。用户可直接利用高级通信命令(原语)高效地传送大量的数据。//数据量大
  • 使用方便。OS 隐藏了实现进程通信的具体细节,向用户提供了一组用于实现高级通信的命令(原语),用户可方便地直接利用它实现进程之间的通信。或者说,通信过程对用户是透明的。这样就大大减少了通信程序编制上的复杂性。//使用简单

1、进程通信的类型

        随着 OS 的发展,用于进程之间实现通信的机制也在发展,并已由早期的低级进程通信机制发展为能传送大量数据的高级通信工具机制。目前,高级通信机制可归结为四大类:共享存储器系统管道通信系统消息传递系统以及客户机-服务器系统

(1)共享存储器系统(Shared-Memory System)

        在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。据此,又可把它们分成以下两种类型://共享存储

  • 基于共享数据结构的通信方式。在这种通信方式中,要求诸进程共用某些数据结构,借以实现诸进程间的信息交换,如在生产者-消费者问题中的有界缓冲区。操作系统仅提供共享存储器,由程序员负责对公用数据结构的设置及对进程间同步的处理。这种通信方式仅适于传递相对少量的数据,通信效率低下,属于低级通信//数据量少->使用共享存储器
  • 基于共享存储区的通信方式。为了传输大量数据在内存中划出了一块共享存储区域,诸进程可通过对该共享区的读或写交换信息,实现通信,数据的形式和位置甚至访问控制都是由进程负责,而不是 OS。这种通信方式属于高级通信。需要通信的进程在通信前,先向系统申请获得共享存储区中的一个分区,并将其附加到自己的地址空间中,便可对其中的数据进行正常读、写,读写完成或不再需要时,将其归还给共享存储区。//数据量大->使用内存

(2)管道(pipe)通信系统

        所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名 pipe 文件。

        向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程)则从管道中接收(读)数据。由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。//管道通信原理

        这种方式首创于 UNIX 系统,由于它能有效地传送大量数据,因而又被引入到许多其它操作系统中。为了协调双方的通信,管道机制必须提供以下三方面的协调能力:

  • 互斥:即当一个进程正在对 pipe 执行读/写操作时,其它(另一)进程必须等待。
  • 同步:指当写(输入)进程把一定数量(如4KB)的数据写入 pipe,便去睡眠等待,直到读(输出)进程取走数据后再把它唤醒。当读进程读到空的 pipe 时,也应睡眠等待,直至写进程将数据写入管道后才将之唤醒。
  • 确定对方是否存在:只有确定了对方已存在时才能进行通信。

(3)消息传递系统(Message passing system)

        在该机制中,进程不必借助任何共享存储区或数据结构,而是以格式化的消息(message)为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。// 使用通信原语

        该方式隐藏了通信实现细节,使通信过程对用户透明化,降低了通信程序设计的复杂性和错误率,成为当前应用最为广泛的一类进程间通信的机制。例如:在计算机网络中,消息(message)又称为报文;在微内核操作系统中,微内核与服务器之间的通信无一例外都是采用了消息传递机制;由于该机制能很好地支持多处理机系统、分布式系统和计算机网络,因此也成为这些领域最主要的通信工具

        基于消息传递系统的通信方式属于高级通信方式,因其实现方式的不同,可进一步分成两类:

  • 直接通信方式:是指发送进程利用 OS 所提供的发送原语,直接把消息发送给目标进程。
  • 间接通信方式:是指发送和接收进程,都通过共享中间实体(称为邮箱)的方式进行消息的发送和接收,完成进程间的通信。

(4)客户机-服务器系统(Client-Server system)

        前面所述的共享内存、消息传递等技术,虽然也可以用于实现不同计算机间进程的双向通信,但客户机-服务器系统的通信机制,在网络环境的各种应用领域已成为当前主流的通信实现机制,其主要的实现方法分为三类:套接字远程过程调用远程方法调用//主流通信机制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值