操作系统进程通信

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程通信-----消息传递通信的实现方式
通信链路:
第一种方式(主要用于计算机网络中):由发送进程在通信 之前用显式的“建立连接”命令请求系统为之建立一条通 信链路,在链路使用完后拆除链路。
第二种方式(主要用于单机系统中):发送进程无须明确提 出建立链路的请求,只须利用系统提供的发送命令(原 语),系统会自动地为之建立一条链路。


▪PCB中有关通信的数据项
size: text: next:
信 方
mq :消息队列头指针;

mutex :消息队列互斥信号量,初值为1;
sm 同步信号量,用于消息队列中的消息计数,初值为0;
▪消息缓冲通信机制还应包含的内容:
Emphead:空缓冲队列头指针; Bufmutex:缓冲池的互斥信号量,初值为1;


把消息缓冲块链入接收者的消息缓冲队列中

➢ receive(b)原语描述:
从消息缓冲队列中取一条消息
写到以b为首址的接收区
释放消息缓冲块
通信描述 原语实现
二、实例—消息缓冲队列通信机制
3、实现
typedef struct MessageBuffer
➢ 数据结构
sender:
3.2.2

▪消息缓冲块
▪对消息链表互斥访问的信号量S,初值为1 ▪私有信号量S1,表示当前消息链中消息的数目, 初值为0
3.2.2 直接通信方式
例1: 发送者
申请一消息区
接收者
P(③S1)
消息送消息区
P(④S)
P①(S)
从消息链摘下一消息
消息挂入消息链
V(⑤S)
V②(S)
消息送接收区
V(S1)
释放消息区
3.2.3 管道通信
二、实例—消息缓冲队列通信机制
1、通信描述
PCB(B)
进程 A
进程 B
send (B,a)
mq mutex
sm
receive(b)
Emphead
a 发 sender: A 送 size:5 区 text:Hello
sender : A size : 5
i Text:Hello next: 0
NULL 公用消息缓冲池
进程通信
进程通信-----概念和类别
概念:进程之间的信息交换称为进程通信 类别:进程通信按通信内容可分为:
控制信息的传送 大批量数据传送 把进程间控制信息的交换称为低级通信 (信号量机制); 把进程间大批量数据的交换称为高级通信。
进程通信-----高级通讯工具
• 高级进程通信机制可分为四大类: • 1. 共享存储器系统(Shared-Memory
发送原语:
发送进程在利用发送原语发送消息之前,应先在自己的内存 空间设置一发送区a,把待发送的消息正文、发送进程标 识符、消息长度等信息填入其中,然后调用发送原语,把 消息发送给目标(接收)进程。发送原语首先根据发送区 a中所设置的消息长度a.size来申请一缓冲区i,接着,把 发送区a中的信息复制到缓冲区i中。为了能将i挂在接收进 程的消息队列mq上,应先获得接收进程的内部标识符j, 然后将i挂在j.mq上。 由于该队列属于临界资源,故在执 行insert操作的前后都要执行wait和signal操作。
• typedef struct processcontrol_block{

...

struct message_buffer*mq; // 消息队列队首指针

semaphore mutex;
// 消息队列互斥信号量

semaphore sm;
// 消息队列资源信号量

...

}PCB;
进程通信-----直接消息传递系统实例

receiver 是接收者进程,a是发送区起始地址;


式 ➢ 接收原语-- receive(b)
▪ receive(b)原语用来接收消息,
b是接收区首地址;
二、实例—消息缓冲队列通信机制
百度文库
2、发送、接收原语 ➢ send(receiver,a)原语描述:
3.2.2

申请一个空消息缓冲块


把以a为首址的消息写到空缓冲块中
注:根据通信方式的不同,又可以把链路分为两种(1)单 向通信链路(2)双向通信链路
进程通信-----邮箱通信
概念:邮箱通信属于间接通信方式,即进程之间的通信需要 通过某种中间实体来完成。该实体建立在随机存储器的公 共缓冲区上,用来暂存发送进程发送给目标进程的消息, 接收进程可以从该实体取出发送进程发送给自己的的消息, 通常把这种实体称为邮箱。
写进程
共享 文件
读进程
进程通信-----客户机-服务器系统
用途:在网络环境的各种应用领域。 实现方法:套接字、远程过程调用和远程方
法调用。
进程通信-----消息传递通信的实现方式
• 直接通信方式(消息缓冲通信)
发送进程发消息时要指定接收进程的名字,反过来, 接收时要指明发送进程的名字;
对称形式:一对一 发送原语:Send(receiver,message) 接收原语:Receiver(sender,message) 非对称形式:多对一
邮箱特点: (1)每一个邮箱有一个唯一的标识符; (2)消息在邮箱中可以安全保存,只允许核准的用户随时
读取; (3)利用邮箱可以实现实时通信,又可以实现非实时通信。
进程通信-----信箱通信
信箱结构:
信箱定义为一种数据结构,在逻辑上可以分为:
• 1,信箱头,用以存放有关信箱的描述信息,如信箱标识符,信箱的 拥有者,信箱口令,信箱的空格数等;
基于共享存储区的通信方式。在存储器中划出了一 块共享存储区,各进程可通过对共享存储区中的 数据的读和写来实现通信。适用于传输大量数据。
进程通信-----消息传递系统
消息传递机制 : 进程间的数据交换以消息为单位,程序员利用系统的通信原语(要
进行消息传递时执行send;当接收者要接收消息时执行receive)实 现通信。这种通信方式属于高级通信 。
Bufempty:缓冲池的同步信号量,初值为n;
二、实例—消息缓冲队列通信机制
3、实现
➢ 发送、接收原语的类C语言描述
3.2.2
直 接 通 信 方 式
3.2.2 直接通信方式
例1:
如下图所示的是高级通讯原语SEND和 RECEIVE不完整的框图。请填充适当的P, V操作,并说明所用信号量的意义和初值。
3.2.2 直接通信方式
一、直接通信方式的基本思想 二、实例—消息缓冲队列通信机制
3.2.2 直接通信方式
一、直接通信方式的基本思想
根据生产者—消费者关系原理,利用内存 的公用消息缓冲池实现进程之间的信息交换。
发送者进程直接将消息送入内存公用消息 缓冲池,并将它挂接在接收者进程的消息缓 冲队列上,接收进程从消息缓冲队列中取走 消息。
b 接 收 区
原语描述
二、实例—消息缓冲队列通信机制
1、通信描述
PCB(B)
进程 A
进程 B
send (B,a)
mq mutex
sm
receive(b)
Emphead
a 发 sender: A 送 size:5 区 text:Hello
sender : A size : 5
i Text:Hello next: 0

int sender; // 发送者进程标识符

int size; //消息长度

char*text; //消息正文

struct message_buffer*next; //指向下一个消息缓冲区的指针


进程通信-----直接消息传递系统实例
消息缓冲队列通信机制中的数据结构:
(2)PCB中有关通信的数据项。在操作系统中采用了消息缓冲队列通信机制时, 除了需要为进程设置消息缓冲队列外,还应在进程的PCB中增加消息队列队 首指针,用于对消息队列进行操作,以及用于实现同步的互斥信号量mutex 和资源信号量sm。在PCB中应增加的数据项可描述如下:
进程通信-----管道(Pipe)通信
管道(pipe文件)通信(也称共享文件通信): 连接读写进程的一个特殊文件,允许进程按先进先出方式传送数据,也
能使进程同步执行操作。 实质:是一个共享文件,基本上可借助于文件系统的机制实现,包括
(管道)文件的创建、打开、关闭和读写。 管道通信:
发送进程以字符流形式把大量数据送入管道,接收进程从管道中接收 数据,所以叫管道通信。
③ 确定对方是否存在,只有确定了对方已存在时,才能 进行通信。
进程通信-----直接消息传递系统实例
消息缓冲队列通信机制中的数据结构:
• (1)消息缓冲区。 在消息缓冲队列通信方式中,主要 利用的数据结构是消息缓冲区。
• 它可描述如下:

typedef struct message_buffer{
发送原语:Send(P,message) 接收原语:Receiver(id,message)
进程通信-----消息传递通信的实现方式
消息格式:
(1)短定长消息格式(在单机系统环境中) (2)变长的消息格式(进程发送的消息的长度是可变的)
进程的同步方式:
(1)发送进程阻塞,接收进程阻塞 (2)发送进程不阻塞,接收进程阻塞 (3)发送进程和接收进程都不阻塞
sender :A
b 接
size : 5

text:Hello 区
NULL 公用消息缓冲池
原语描述
二、实例—消息缓冲队列通信机制
1、通信描述
PCB(B)
进程 A
进程 B
send (B,a)
mq mutex
sm
receive(b)
Emphead
a 发 sender: A 送 size:5 区 text:Hello
sender : A size : 5
i Text:Hello next: 0
sender : A
b 接
size : 5

text:Hello 区
NULL 公用消息缓冲池
二、实例—消息缓冲队列通信机制
2、发送、接收原语
3.2.2 ➢ 发送原语--send(receiver,a)
直 接
▪ send(receiver,a)原语用来发送消息,
System) • 2. 消息传递系统(Message passing system) • 3. 管道(Pipe)通信:又名共享文件通信 • 4.客户机-服务器系统(Client-Server
system)
进程通信-----共享存储器系统
基于共享数据结构的通信方式:进程之间公用某些 数据结构,如生产者-消费者中的缓冲区。程序员 需要对进程间的同步做处理,效率比较低,只适 用于传输少量数据。
优点: 操作系统隐藏了通信的实现细节,简化了通信程序编制的复杂性。
分类: ▪ 直接通信(消息缓冲通信):发送进程直接把消息发送给接收者, 并将它挂在接收进程的消息缓冲队列上。接收进程从消息缓冲队 列中取得消息。 ▪ 间接通信(信箱通信):发送进程将消息发送到某种中间实体中 (信箱),接收进程从中取得消息。 在网络中称为电子邮件系统。
• 3,共享邮箱。由某进程创建,在创建时或创建后指明它 是可共享的,挺尸须指出共享进程(用户)的名字。邮箱 的拥有者和共享者都有权从邮箱中取走发送给自己的消息。
进程通信-----信箱通信
邮箱通信时发送进程和接收进程之间关系: • 1,一对一关系。 • 2,多对一关系。 • 3,一对多关系。 • 4,多对多关系。
2,消息的发送和接受。当进程之间要利用邮箱进行通信时, 必须给使用共享邮箱,并利用系统提供的下述通信原语进 行通信。 Send(mailbox,message); 将一个消息发送到制定邮箱 Receive(mailbox,message);从指定邮箱中接受一个消息。
进程通信-----信箱通信
信箱的类型:
• 1.实质:利用外存进行数据通信
• 2.通信描述:
3.2.3
Write(fd[1],buf,size)
管 道 通
read(fd[0],buf,size) • 3.Pipe操作的同步与互斥

① 互斥:即当一个进程正在对pipe执行读/写操作时,
其它(另一)进程必须等待。
② 同步:指当写(输入)进程把一定数量(如4 KB)的数据 写入pipe,便去睡眠等待, 直到读(输出)进程取走数 据后,再把他唤醒。当读进程读一空pipe时,也应睡 眠等待,直至写进程将数据写入管道后,才将之唤醒。
• 2,信箱体,由若干个可以存放的信息(货消息头)的信箱格式组成, 信箱格的数目以及每个大小的是在创建信箱是确定的。
进程通信-----信箱通信
信箱通信原语:
1,信箱的创建和撤销。进程可利用邮箱创建的原语来建立 一个新的邮箱,创建者进程应该给出邮箱名字,邮箱属性 (公用,私用或共享);对于共享邮箱,还应给出共享这 的名字,当进程不再需要读邮件时,可用邮箱撤销原语将 之撤消。
• 1,私用邮箱。用户进程可为自己建立一个新邮箱,并作 为哦该进程的一部分。邮箱的拥有者有权从邮箱中读取消 息,其他用户则只能将自己构成的消息发送到该邮箱中。 这种私用邮箱可采用单项通信链路的邮箱来实现。当拥有 该邮箱的进程结束时,邮箱也随之消失。
• 2,公用邮箱。有操作系统创建,并提供给系统中的所有 核准进程使用。核准进程既可把消息发送给该邮箱中,也 可行邮箱中读取发送给自己的消息,显然,公用邮箱应采 用双向通信链路的邮箱来实现。通常,公用邮箱在系统运 行期间始终存在。
相关文档
最新文档