网络操作系统 第三章
客户1
请求
服务器
等待某消息
客户2
客户n
接 收 服 务 器 应 答
Receive(file-server,&m1) (
网络os的通信 第三章 网络 的通信
3.2 基于消息传递的通信方式 五.通信协议 通信协议 通信协议:通信双方共同遵 守的规则、约定。 发 收 网络通信软件:实现进程间 A B 通信的软件,它根据通信协议 收 发 控制管理进程间通信。 网络OS的通信机制:由按 通信协议规定建立的通信原 语构成。 通信原语的类型: 一.通信原语的类型 通信原语的类型 3.3通信原语设计 通信原语设计 同步和异步原语 引言: 引言: 缓冲和非缓冲原语 单机系统与网络系统的区别: 可靠和非可靠原语。 进程间通信(利用共享存储 器还是利用收发原语)
3.2 基于消息传递的通信方式
步骤: 步骤:
(1)构造从源文件读一块的消息 构造从源文件读一块的消息 m1,将m1发送给服务器进程。 发送给服务器进程。 , 发送给服务器进程 (2)等待应答,直到服务器发来的 等待应答, 等待应答 结果消息m2将其唤醒。 将其唤醒。 结果消息 将其唤醒 (3)构造在目标文件写一块的消息 构造在目标文件写一块的消息 m1,将m1发送给服务器进程。 发送给服务器进程。 , 发送给服务器进程 (4)等待应答 直到服务器发来的 等待应答,直到服务器发来的 等待应答 结果消息m2将其唤醒。 将其唤醒。 结果消息 将其唤醒 (5)修改读 写位置,若复制完则结 修改读/写位置 修改读 写位置, 否则返回(1)。 束,否则返回 。 四.发送原语和接收原语 发送原语和接收原语 发送原语: 发送原语 Send(dest, & mptr) 功能:将 功能 将mptr指向的消息发给标识 指向的消息发给标识 符为dest的进程。 的进程。 符为 的进程 接收原语:Receive(addr, & mptr) 接收原语 功能:调用该原语的进程等待 调用该原语的进程等待,直到 功能 调用该原语的进程等待 直到 有消息到达,将收到的消息存入 将收到的消息存入mptr指 有消息到达 将收到的消息存入 指 向的缓冲区。 向的缓冲区。 ?Addr: 接收进程的网络地址 接收的消息由谁发来的:由消息本 接收的消息由谁发来的 由消息本 身的“发送者标识符” 身的“发送者标识符”知。 Receive(client,&m1)
.
. 进程通讯原语 . 发送原语Send(receiver,addr):
将要发送的消息从发送区复制到消息 缓冲区, 缓冲区,并把它挂在接收进程的消息 缓冲队尾。 缓冲队尾。若该接收进程因等待消息 而处于阻塞状态,则将其唤醒。 而处于阻塞状态,则将其唤醒。
接收原语 Receive(addr):将发
送者发来的消息从消息缓冲区复制到 接收区, 接收区,然后从队列中删去该消息缓 冲区,若无消息可接收, 冲区,若无消息可接收,则接收进程 进入阻塞状态。 进入阻塞状态。
receive(boxname,msg)
功能: 功能:从boxname信箱取一 信箱取一 封信存入msg指示的区域。 指示的区域。 封信存入 指示的区域 收发关系: : 收发关系:1:1 , 1:m : m:1 : 4. 原语的实现:见P86
3.2 基于消息传递的通信方式
一.通信机制 进程A 发
. 服务器进程 服务器进程:
进程B: 进程 (1)设置接收区b (2)调receive(b):①执行P(sm),若 sm<0,则队列空无消息,阻塞进 程;若sm>=0,执行P(mutex),若 允许用队列,则由B的PCB中的 mq找到队列中的第一个消息缓 冲区,将其从队列中移出,并修 改mq使之指向下一个消息,再 执行V(mutex); ②将消息从缓冲区复制到接收 区,最后释放缓冲区。
进程间通信过程: 进程间通信过程: 设:进程A向进程B发送消息 进程A:将消息组成一信件, 进程 调send原语向B发送,并将信件 投入B的信箱。 进程B:调receive原语从信 进程 箱中取信件;进行必要处理(或 服务),将结果组成一信件发送 回去。 进程A:索取回信。
网络os的通信 第三章 网络 的通信
网络os的通信 第三章 网络 的通信
3.1 基于共享变量的通信方式
适用于:网络中各节点主机内进程 的通信。 一. 进程间的同步与互斥 1. 概念: . 同步:合作进程间互通信息或互相等 待的一种时序关系。 . 互斥:进程间不能同时使用某临界资 源的排他性。 . 信号量:表示资源的整型变量,OS用 它对进程和资源进行控制和管理。 . 见p79 图 3-2 2. P、V 操作:定义在信号量S上的 两个操作。 设进程PP,队列Q(等待S类资源 的进程队列) 信号量:S>0:可用资源数 S<0:无资源,|S|表示等待该 资源的进程数。 . PP请求资源时执行: P(S): (1)S:=S-1; { 资源数减一} (2)若S>=0 PP (2) S>=0 则PP继续运行 (3)若S<0 则PP阻塞,入队Q . PP释放资源时执行: V(S): (1)S:=S+1; {资源数加一} (2)若S>0 则PP继续运行 (3)若S<=0 则唤醒Q中的第一 个等待者,PP继续运行
网络os的通信 第三章 网络 的通信
3. 利用信号量S实现进程间同步 . 进程间的同步模型:初始 S=0 进程 P1 进程 P2 L1:P(S) L2:V(S) … … (P1受P2制约,故为非对称同步)
例:生产者 、消费者问题
例:进程P1、P2共享一变量 count(临界软件资源),初始 count=0, 信号灯s=1 。
3.4 远程过程调用
二.单机环境下的过程调用 单机环境下的过程调用 方法: 方法 (1) 保存参数及返回地址。 (2) 参数传递,执行过程。 (控制权交过程) (3)保存运行结果,返回至断点。 (控制权交调用者) ( ) 例: 参数传递机制: 参数传递机制 值调用、指针调用 参数:值参数 参数 值参数 (值调用):其变化 不影响调用者原变量的值。 变量参数(指针调用):其 变量参数 变化会影响调用者原变量的值。
4. 利用信号量S实现进程间互斥
初值: S=1(临界资源数)
模型: 进程P1 P(S) 临界区1 V(S)
进程P2 P(S) 临界区2 V(S)
例:P 82
第三章网络os的通信 第三章网络 的通信
. P、V操作的不足:程序复杂, 不易理解,进程间通讯效率低。 二. 消息缓冲通讯 1.低级通讯原语:P,V操作 2. 高级通讯原语: . 消息缓冲区:进程间通讯的 一个基本单位(包括:发送进程标 识符Sender,消息长度Size,消息 正文Text,指向下一缓冲区的指 针Next。即发送区、接收区内容) . 消息缓冲队列:(见右图) (消息缓冲队列属临界资源)
进程利用信箱方式的通信图示: 见:p85 图 3-4 2.信箱数据结构: 信箱:是一种数据结构,用 于存放信件,由信箱头(信箱的 描述部分)和信箱体(若干放信 件的格子)组成。 信箱的数据结构:见右图 3.发送、接收原语: 格式:send(boxname,msg) 功能: 功能:将msg指向的消息放入名 指向的消息放入名 为boxname的信箱。 的信箱 信箱名:boxname 信箱大小:boxsize 已存信件数:mesnum 空格子数:fromnum 满 信件1 满 信件2 空 格子 …….. 格式: 格式:
网络os的通信 第三章 网络 的通信
三 . 信箱通讯 1. 信箱通信过程 系统中任一进程(或用户) 想接收其它进程(或用户)发来 信件,需: (1)为自己创建一信箱, 以接收其它进程发来的信件(也 可将自己的信件发送给具有信箱 的进程)。 (2)利用发送(send)和 接收(receive)通信原语实现进 程间互相通信。
第三章网络os的通信 第三章网络 的通信
四.可靠与非可靠原语 可靠与非可靠原语 1. 非可靠原语: 对发送 方发送一个消息,无法保证 被对方正确接收的原语。 2. 可靠原语: 对发送 方发送一个消息,能够保证 被对方正确接收的原语。 方法: 1.单个确认消息:对 方法 方确认才发消息:收到,也返 回(收到) 确认。 2.使用应答作为确认:发消息后阻 塞,等待应答(表确认收到),时间太长, 则要求重发。 3.方法1、2的折衷。 见P97 :图3-13 3.4 远程过程调用 (RPC) 一. 概述: 单机系统中,两进程 . : 之间可通过过程调用方式实现通信。 RPC基本思想 基本思想: 基本思想 允许程序调用位于其它节点机 上的过程。当节点机A上的进程调用 节点机B上的一个过程时,A上的调用 进程被挂起,在B上执行被调用过程, 信息以参数形式从调用进程传到被 调用进程,并将调用结果返回调用进 程。这种通讯方式称远程过程调用。 。
Cobegin Process p1: r1:register; Begin P(s); r1:=r1+1; count:=r1; V(S); end Coend; process p2: r2:register; begin P(s); r2:=count; r2+r2+1; count:=r2; V(S); end
3.3通信原语设计
二.同步和异步原语 同步和异步原语 1.同步原语 同步原语: 同步原语 当进程调Send原语发送消息 后,便进入阻塞状态,直到消息发 送完,才能执行Send的后继语句。 当进程调Receive原语时,便阻塞, 直到收到消息保存好,才返回控 制并执行原语的后继语句。 故上述Send和Receive原语称 为同步的(阻塞的)通信原语。 形式如下: Send(dest, & mptr) 功能:将 功能 将mptr指向的消息发 指向的消息发 给标识符为dest的进程。 的进程。 给标识符为 的进程 Receive(addr, & mptr) 功能:addr是等待消息到达 功能 是等待消息到达 的接受进程的地址,收到的消息 的接受进程的地址 收到的消息 存入mptr指向的缓冲区。 指向的缓冲区。 存入 指向的缓冲区 2.异步原语 (非阻塞通信原语) 异步原语: 异步原语 发送进程:在用Send发送 消息时并不进入阻塞状态,不等 消息发完就继续执行其后继语句。 优点:提高系统的效率和CPU 的利用率。