IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 操作系统之进程通信 -> 正文阅读

[系统运维]操作系统之进程通信

概述

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

进程同步之中,也需要进程间交换一些信息,所以也可以归入进程通信中,但只能称为低级的进程通信。因为进程同步间的消息交换效率低、对用户不透明。
在进程间要传送大量数据的时候,可以使用OS提供的高级通信工具,该工具的最主要特点是:使用方便、高效。

进程通信的类型

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

共享存储器系统

在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程间能够通过这些空间进行通信。因此也可以根据共享的内容划分成以下两种类型:

  1. 基于共享数据结构的通信方式:要求进程公用某些数据结构,借此实现进程间的信息交换,如生产者—消费者问题的有界缓冲区。操作系统仅提供共享存储器,由程序员负责对公用数据结构的设置及对进程间同步的处理。 这种通信方式仅适合传递相对较少的数据,通信效率低下,属于低级通信。
  2. 基于共享存储区的通信方式:为了加粗样式,在内存中划出了一块共享存储区域,各个进程可以通过对该共享区进行读写,实现通信,数据的形式和位置甚至访问控制都是由进程负责,而不是OS。当读写完成,不再需要的时候,将其归还给共享存储区。属于高级的通信方式。

管道(pipe)通信系统

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

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

为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步、确定对方是否存在(确定存在才能通信)

消息传递系统

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

该方式隐藏了通信细节,使通信过程对用户透明化,降低通信程序的复杂性和错误率,称为当前应用最广泛的一类进程间的通信机制。例如:计算机网络中的格式化消息为报文

其实现方式有两种:
(1)直接通信方式:指发送进程利用OS所提供的发送原语,直接把消息发送给目的进程。

  1. 直接通信原语:
    1.1 对称寻址方式:要求发送进程和接收进程必须以显式方式提供对方的标识符。
    send(receiver,message); 发送一个消息给接收进程
    receive(sender,message); 接收Sender发来的消息
    1.2 非对称寻址方式:某些情况,接收进程可能需要与多个发送进程通信,无法事先指定发送进程,因此这种方式接收进程原语不需要命名发送线程。
    send(P,message); 发送一个消息给进程P
    receive(id,message); 接收任何进程的消息
  2. 消息格式:定长、不定长
  3. 进程的同步方式:有三种,发送进程和接收进程都阻塞直到有消息;发送进程不阻塞,接收进程阻塞;发送进程和接收进程均不阻塞,仅当发生某事件使它无法继续运行时才阻塞等待。
  4. 通信链路:在发送进程和接收进程两者间建立一条通信链路。

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

  • 信箱通信:通过某种中间实体来完成进程通信。在公用缓冲区上暂存发送进程发送的消息,接收进程可以从该中间实体取出消息,该中间实体称为邮箱。每个邮箱都有一个唯一标识符。消息在邮箱中可以安全的保存,只允许核准的目标用户随机读取
    邮箱的类型:
    ① 私用邮箱:用户进程自己创建,并作为进程的一部分,邮箱拥有者从邮箱中读取消息,其他用户只能发送消息到该邮箱,可采用单向链路的邮箱实现。
    ② 共享邮箱:由某进程创建,创建时指出共享进程的名字。邮箱拥有者和共享者都能够取走发送给自己的消息
    ③ 公用邮箱:由操作系统创建,并提供给系统中所有核准进程使用。可读可发送,应该采用双向通信链路的邮箱来实现。

客户机-服务器系统

该机制是网络环境的各种应用领域当前主流的通信实现机制,主要实现放肆有:套接字、远程过程调用和远程方法调用。

套接字

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

套接字是为客户/服务器模型设计的,通常包括两类:

  1. 基于文件型:通信进程都运行在同一台机器的环境中,一个套接字关联到一个特殊的本地文件,通信双方通过对这个特殊文件的读写实现通信,原理类似管道。
  2. 基于网络型:该类型通常采用的是非对称方式通信,即发送者需要提供接受者命名。通信双方的进程运行在不同主机的网络环境下。
    工作过程:一般地,发送进程(客户端)发出连接请求时,随机申请一个套接字,主机为之分配一个端口,与该套接字绑定,不再分配给其它进程。接收进程(服务端)拥有全局公认的套接字和指定的端口(如ftp服务器-21,http服务器80等),并通过监听端口等待客户请求。因此任何进程都可以向它发出连接请求和信息请求,以便进程之间通信连接的建立。
    接收进程一旦收到请求,就接收来自发送进程的连接,完成连接,即在主机间传输的数据可以准确地发送到通信进程,实现进程间的通信;当通信结束时,系统通过关闭接收进程的套接字撤销连接

套接字的优势在于,不仅使用与一台计算机内部的进程通信,也适用于网络环境中不同计算机间的进程通信。并且每个套接字拥有唯一的套接字号,确保了通信双方之间逻辑链路的唯一性。

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

远程过程(函数)调用 RPC:是一个通信协议,用于通过网络连接的系统。该协议允许运行于一台主机(本地)系统上的进程,调用另一台主机(远程)系统上的进程(例如在公司,远程调用关闭家里的空调),而对程序员表现为常规的过程调用,无需额外地为此编程。如果涉及的软件采用面向对象编程,那么远程过程调用也可称作远程方法调用。

负责处理远程过程调用的进程有两个,一个是本地客户进程,另一个是远程服务器进程,这两个进程通常也被称为网络守护进程,主要负责在网络间的消息传递,一般情况下,这两个进程都是处于阻塞状态,等待消息。

为了实现RPC的透明性,即就像调用本地过程一样,RPC引入一个存根的概念:在本地客户端,每个能够独立运行的远程过程都拥有一个客户存根,本地进程调用远程过程实际是调用该过程关联的存根,即调用的时候将控制权转移给存根,让存根来执行。


本文为《计算机操作系统》第四版 学习笔记+个人总结

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:31:17  更:2021-08-26 12:33:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:51:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码