什么是进程间通信:工作原理及其应用特点

什么是进程间通信:工作原理及其应用特点
2023年09月01日 17:45 如画的世界

系统可以是数字处理器、计算机系统或通过进程执行其任务的任何公司系统。一个系统可以通过单个进程或多个进程运行。当多个进程同时执行时,它们经常由于不同的原因需要相互通信。对于一个进程之间的通信,它需要一组称为协议的规则。微处理器或微控制器中的进程是一个活动实体,包括几个额外的组件除了程序源代码。该实体包括一个进程堆栈,用于存储局部变量、函数参数等临时数据。计算机系统中有两种类型的进程,它们是独立的和协作的。独立进程不与其他进程共享任何数据,而协作进程与需要进程间通信或 IPC 的其他进程共享数据。

什么是操作系统中的进程间通信?

进程间通信:用于在多个进程之间提供通信的机制称为进程间通信或IPC,它由操作系统或操作系统提供。

这种类型的通信对于在通过网络连接的单个或多个计算机上运行的单个或多个程序或进程的多个线程之间交换数据非常有帮助。IPC 是一组程序的接口,允许程序员协调操作系统中各个程序进程之间的活动。因此,这允许特定程序同时处理多个用户请求。

进程间通信的方式

发送和接收进程之间的通信可以是同步的,也可以是异步的。因此,IPC的特性提供了同步和异步通信服务。下面讨论同步和异步进程间通信之间的区别

同步工控机

在这种类型的通信中,发送和接收消息的过程与每条消息同步。所以在这种情况下,发送和接收都是阻塞操作。一旦向发送进程发出发送,它就会被阻塞,直到发出等效的接收。类似地,当通过进程发出接收时,它会被阻塞,直到出现消息为止。

异步IPC

在这种类型的通信中,发送操作是非阻塞的,因为一旦消息被复制到本地缓冲区,发送过程将被允许继续,并且消息的传输将在整个发送过程中并行继续。

接收操作包括阻塞和非阻塞变体。一旦发出接收操作,非阻塞变体中的接收进程就会继续执行其程序,这提供了一个要在后台打包的缓冲区,但是,它应该单独收到通知。

非阻塞通信非常有效,但是它主要涉及维护同步和防止数据丢失方面的额外复杂性。由于这些原因,现有系统通常不提供非阻塞类型的接收器。

进程间通信类型和工作

进程间通信有不同的模式,如管道、套接字、文件、信号、共享内存消息队列和消息传递。为了更详细地理解所有这些概念,需要考虑以下类型的进程间通信,因为 IPC 的工作主要取决于下面讨论的一些重要方法或途径。

管道

管道是一种数据通道,广泛用于两个进程之间的单向通信。这是一种半双工技术,因此主进程与辅助进程进行通信。但是,要实现全双工,还需要一根管道。两个管道将在两个进程之间创建双向数据通道。管道主要用于 Windows 操作系统和所有 POSIX 系统。

插座

这是在网络内传输或接收数据的端点。对于在相似计算机上的进程之间传输的数据,或者在相似网络上的不同计算机之间传输的数据来说,都是如此。大多数操作系统都使用套接字进行 IPC 或进程间通信。

文件

文件是存储在磁盘上或通过文件服务器按需获取的数据记录。多个进程可以根据需要访问一个文件。所有操作系统都利用文件来存储数据。

信号

该信号在 IPC 中以有限的方式非常有用。它们是从一个进程传输到另一个进程的系统消息。通常,信号不用于传输数据,但它们用于不同进程之间的远程命令。

消息队列

消息的链表称为存储在内核中的消息队列。可以通过消息队列标识符简单地识别。因此,该技术通过全双工能力在单个或多个进程之间提供通信。

共享内存

这是可以通过多个进程同时访问的内存。因此,进程之间可以简单地进行通信。下图演示了共享内存IPC模型。像A和B这样的进程都会建立一个共享内存段,并且可以通过这个共享内存区域交换数据。

默认情况下,操作系统避免进程访问其他进程内存。这些进程将使用系统调用将内存定义为共享内存。此外,进程应该与可用于使用其他进程共享内存的各种同步技术进行同步。

消息传递

它是一种用于通信和同步的机制。通过使用它,进程之间可以进行通信,而无需借助共享变量。因此在这种模式下,进程在底层操作系统的支持下通过消息进行通信。在下面的消息传递图中,像 A 和 B 这样的两个进程通过消息传递相互交互。

这里,进程向操作系统内核发送一条类似“M”的消息。之后,该消息通过进程 B 读取。为了成功交换消息,两个进程之间需要有通信链路。建立这些链接的方法有多种。

进程间通信中的同步

在进程间通信 (IPC) 中,同步是一个重要部分,它是通过进程间控制机制提供的,否则通过通信进程来处理。有一些方法可用于提供同步,如下所示。

信号

信号量是一种整型变量,它通过多个进程控制对公共资源的联系。信号量变量用于解决关键部分问题以及在多处理环境中实现进程同步。

因此,用于保护必须同时通过多个进程访问和更新的任何资源,例如全局共享内存。信号量的作用就像资源的守卫或锁。一旦进程需要允许资源,那么它首先必须获得信号量的同意。因此,当资源空闲时,信号量同意访问资源,否则进程需要等待。信号量有二进制和计数两种类型。二进制信号量称为互斥锁。

相互排斥

这种排除只需要一个可以一次进入关键段的进程线程。因此这对于同步非常有用并且还可以避免竞争条件。

这是进程同步的一种属性,它定义在任何指定的时间点临界区内都不能存在任何进程。所使用的任何同步处理方法都应该满足互斥性质,否则,无法消除竞争条件。

竞争条件是一种不良情况,一旦系统或设备尝试同时执行多个操作,就会发生这种情况,但由于系统或设备的性质,这些操作应在正确的系列内执行才能正确完成。

障碍

屏障不允许单独的进程继续,直到每个进程都到达它。不同的并行语言和集体例程可能会造成障碍。

屏障意味着进程应该在屏障处停止,并且在组中的所有进程都到达屏障之前不允许继续进行。一旦最终进程到达屏障,所有进程都可以重新开始执行并从屏障继续执行。

自旋锁

自旋锁是一种锁,它是通过机器相关的汇编指令执行线程间锁定。一旦进程尝试获取此锁,它将保持在循环中以验证锁是否存在。因此,这称为忙等待,因为该进程虽然处于活动状态,但并未执行任何功能操作。它们主要用作互斥锁的替代品,因为如果锁定时间较短,它们的性能会更好。

为什么要进行进程间通信?

利用 IPC 或进程间通信进行数据共享的原因有很多。其中一些包括以下内容。

  • 它有助于加速模块化。
  • 特权分离。
  • 用于共享信息。
  • 用于资源共享。
  • 方便。
  • 计算性的。
  • 它帮助操作系统相互交互并同步它们的操作。

操作系统死锁

在操作系统中,一旦任何进程进入等待状态,因为另一个等待进程正在占用所需的资源就会发生这种情况。因此,死锁是多处理中的一个常见问题,其中各个进程共享一种称为软件/软锁的互斥资源。

本文由IC先生网(www.mrchip.cn)编辑整理发布, 请勿转载。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部