操作系统(2.6)--进程通信

简介: 基于共享存储区的通信方式。为了传输大量数据,在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。这种通信方式属于高级通信。

进程通信是指进程之间的信息交换。


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


(1)使用方便。OS隐藏了实现进程通信的具体细节,向用户提供了一组用于实现高级通信的命令(原语),用户可方便地直接利用它实现进程之间的通信。

(2)高效地传送大量数据。用户可直接利用高级通信命令(原语)高效地传送大量的数据。

一、进程通信的流程

高级通信机制可归纳为四大类:共享存储器系统、管道通信系统、消息传递系统以及客户机-服务器系统。


1.共享存储器系统

(1) 基于共享数据结构的通信方式。在这种通信方式中,要求诸进程公用某些数据结构,借以实现诸进程间的信息交换。如在生产者一消费者问题中,就是用有界缓冲区这种数据结构来实现通信的。这种通信方式是低效的,只适于传递相对少量的数据,属于低级通信。


(2) 基于共享存储区的通信方式。为了传输大量数据,在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。这种通信方式属于高级通信。


e8e3946a51e1b52b5cf1e63ad052388a_d061208f21be4ea18821faeda3e22ac4.png


进程利用共享内存储区进行通信时的步骤:


向操作系统申请共享存储区

挂接共享存储区到进程的存储空间

进程互斥读写存储区

通信结束后归还存储区

2.管道通信

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


为了协调双方的通信,管道机制必须提供以下三方面的协调能力:


互斥,

同步,

确定对方是否存在,只有确定了对方已存在时,才能进行通信。

消息传递系统 消息传递系统是当前应用最为广泛的一种进程间的通信机制。在该机制中,进程间的数据交换是以格式化的消息为单位的。


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


(1)直接通信方式,是指发送进程利用OS所提供的发送原语,直接把消息发送给目标进程;

(2)间接通信方式,是指发送和接收进程,都通过共享中间实体(称为邮箱)的方式进行消息的发送和接收,宗成进程间的通信。

3.客户机-服务器系统

1)套接字(Socket)


基于文件型、基于网络型


socket:一个套接字就是一个通信标识类型的数据结构,它包含了通信目的地地址,通信使用的端口号,通信网络的传输协议,进程所在的网络地址,以及针对客户或服务器程序提供不同系统调用等,是进程通信和网络通信的基本构件。


Socket的功能由系统调用体现主要有:创建socket()、指定本地地址bind()、建立socket连接connect()、愿意接收连接listen ()和接收连接accept()、发送数据send()、sendto() 、sendmsg()、write()、writev ()和接收数据read()、readv() 、recvfrom()、recvmsg()


2)远程过程调用和远程方法调用


存根:远程过程的一个不同版本,被存于库中


本地客户端:每个能够独立运行的远程过程都拥有一个客户存根。


服务器端:在每个远程进程所在的服务器端,其所对应的实际可执行进程也存在一个服务器存根与之对应。


实际上,远程过程调用的主要步骤是:


(1)本地过程调用者以一般方式调用远程过程在本地关联的客户存根,传递相应的参数,然后将控制权转移给客户存根;

(2)客户存根执行,完成包括过程名和调用参数等信息的消息建立,将控制权转移给本地客户进程:

(3)本地客户进程完成与服务器的消息传递,将消息发送到远程服务器进程;

(4)远程服务器进程接收消息后转入执行,并根据其中的远程过程名找到对应的服务器存根,将消息转给该存根:

(5)该服务器存根接到消息后,:由阻塞状态转入执行状态,拆开消息从中取出过程调用的参数,然后以一般方式调用服务器上关联的过程;

(6)在服务器端的远程过程运行完毕后,将结果返回给与之关联的服务器存根;

(7)该服务器存根获得控制权运行,将结果打包为消息,并将控制权转移给远程服务器进程;

(8)远程服务器进程将消息发送回客户端;

(9)本地客户进程接收到消息后,根据其中的过程名将消息存入关联的客户存根,再将控制权转移给客户存根:

(10)客户存根从消息中取出结果,返回给本地调用者进程,并完成控制权的转移。这样,本地调用者再次获得控制权,并且得到了所需的数据,得以继续运行。

相关文章
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
359 32
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
8月前
|
缓存 运维 前端开发
|
8月前
|
缓存 运维 前端开发
阿里云操作系统控制台:高效解决性能瓶颈与抖动之进程热点追踪
遇到“进程性能瓶颈导致业务异常”等多项业务痛点时,提供高效解决方案,并展示案例。
|
10月前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
273 16
|
11月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
1192 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
160 4
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
164 2

热门文章

最新文章

推荐镜像

更多