JeeStudy 发表于 2020-4-11 21:35:14

进程管理 - 进程间通信

    进程间通信有两种基本模型:共享内存(shared memory)和消息传递(message passing)。
    在共享内存模型中,建立起一块供协作进程共享的内存区域,进程通过向此共享区域读出或写入数据来交换信息。
    在消息传递模型中,通过在协作进程间交换消息来实现通信。



    在操作系统中,上述两种模型都很常用,而且许多系统也实现了这两种模型。 消息传递对于交换较少数量的数据很有用,因为不需要避免冲突。对于计算机间的通信,消息传递也比共享内存更易于实现。共享内存允许最快、最方便的通信,在计算机中它可以达到内存的速度。共享内存比消息传递快,消息传递系统更常用系统调用来实现,因此需要更多耗时的内核介入任务。与此相反,在共享内存系统中,仅在建立共享内存区域时需要系统调用,一旦建立了共享内存,所有的访问都被视为常规的内存访问,不需要来自内核的帮助。


共享内存系统
    采用共享内存的进程间通信需要通信进程建立共享内存区域。通常,一块共享内存区域驻留在生成共享内存段进程的地址空间。其他希望使用这个共享内存段进行通信的进程必须将此放到它们自己的地址空间中。通常操作系统试图阻止一个进程访问另一进程的内存。共享内存需要两个或更多的进程取消这个限制,它们通过在共享区域内读或写来交换信息。数据的形式或位置取决于这些进程而不是受控于操作系统。进程还负责保证它们不向同一区域同时写数据。
   
注意:JAVA中不支持共享内存。


消息传递系统
    上面讨论了协作进程如何能通过共享内存环境来通信。 这种方法要求进程共享一个内存区域,并且需要应用程序员自己明确编写访问和操作共享内存代码。实现同样效果的另一种方法是操作系统提供机制,让协作进程能通过消息传递工具来进行通信。
    消息传递提供一种机制以允许进程不必通过共享地址空间来实现通信和同步,这在分布式环境中(通信进程可能位于由网络连接起来的不同计算机上)特别有用。
    消息传递工具提供至少两种操作:发送(消息) 和接收(消息 )。由进程发送的消息可以是定长的或变长的。如果只能发送定长消息,那么系统级的实现相当简单。不过,这 一限制使得编程任务更困难。相反地,变长消息要求更复杂的系统级实现, 但是编程任务变得比较简单。这是贯穿整个操作系统设计的一种常见的折中问题。
    如果进程 P 和 Q 需要通信,那么它们必须彼此相互发送消息和接收消息,它们之间必须有通信链路(communication link)。该链路有多种实现方法。这里不关心链路的物理实现(如共享内存、硬件总线 或 网络), 而只关心逻辑实现。








页: [1]
查看完整版本: 进程管理 - 进程间通信