进程通信
进程同步的信号量
14
进程通信
2.发送原语send(R,M) begin
在OS中分配M.size大小的缓冲区t; 将M中的内容复制到t; 得到进程R的PCB的指针q; wait(q.mutex);
将t挂到队列q.mq队尾; signal (q.mutex); signal(q.sm); end
15
进程通信
采用了消息传递机制后,进程间用消息来交换信息。一个正在执行的进程可以 在任何时刻向另一个正在执行的进程发送一个消息;一个正在执行的进程也可 以在任何时刻向正在执行的另一个进程请求一个消息。如果一个进程在某一时 刻的执行依赖于另一进程的消息或等待其他进程对发出消息的回答,那么,消 息传递机制将紧密地与进程的阻塞和释放相联系。这样,消息传递就进一步扩 充了并发进程间对数据的共享,提供了进程同步的能力。
信号机制是一种简单的异步通信机制,当某个事件发生时,核心或发送进程发 送给进程的信号实际上就是事先定义好的代表该事件的一个整数,所以说,信 号是一个很短的信息。
信号不但能从内核发给一个进程,也能由一个进程发给另一个进程。
4
进程通信
2.管道通信机制 管道(pipeline)是连接一个读进程和一个写进程以实现它们之间通信
3.接收原语Receive(N) begin
得到本进程PCB的指针q; wait(q.sm); wait(q.mutex); 从q.mq队首取下一个缓冲区t; siganl(q.mutex); 将t的内容复可以直接利用操作系统所提供的一组通信命令(如
send和receive),高效地传送大量数据的一种通信方式。它具有传输 效率高,用户使用方便等优点。
3
进程通信
进程通信的方式 1.信号通信机制
在计算机软件中提到的信号不是一个抽象的概念,而是非常具体的一组事件。 核心用整数来标识这些事件。每个进程在执行时,都要通过信号机制来检查是 否有信号到达。若有信号到达,表示某进程已发生了某种异常事件,便立即中 断正在执行的进程,转向由该信号(某整数)所指示的处理程序,去完成对所 发生的事件(事先约定)的处理。处理完毕,再返回此前的断点处继续执行。 可见,信号机制是对硬件中断的一种模拟,因此又称软中断。
13
进程通信
(2)数据结构 消息缓冲区:
type messageBuffer=record sender ; // 发送消息的进程名或标识符 size ; // 发送的消息长度 text ; // 发送的消息正文 next ; // 指向下一个消息缓冲区的指针
end
其它数据结构: mptr:消息队列队首指针 mutex:消息队列互斥信号量, 初值为1 sm:表示接收进程消息队列上消息的个数,初值为0,是控制收发
读写进程相互协调,必须做到: 进程对通信机构的使用应该互斥,一个进程正在使用某个管道写入或
读出数据时,另一个进程就必须等待。 发送者和接收者双方必须能够知道对方是否存在,如果对方已经不存
在,就没有必要再发送信息。
6
进程通信
3.共享内存通信机制 为了在进程间传送大量数据,在存储器中划出一块共享存储区,诸进程
10
进程通信
消息缓冲队列通信 1.消息缓冲队列通信机制 (1)原理 在操作系统空间设置一组缓冲区。 当发送进程需要发送消息时,执行send系统调用,产生访管中断,进入
操作系统。 操作系统为发送进程分配一个空缓冲区,并将所发送的消息从发送进程
copy到缓冲区中,然后将该载有消息的缓冲区连接到接收进程的消息链 链尾,如此就完成了发送过程。
8
进程通信
消息传递系统 1.消息的概念
消息是一组信息,由消息头和消息体组成。消息传递机制至少需要提供两条原 语send 和receive,前者向一个给定的目标发送一个消息,后者则从一个给定 的源接受一条消息。如果没有消息可用,则接收者可能阻塞直到一条消息到达, 或者也可以立即返回,并带回一个错误码。
11
进程通信
发送进程返回到用户态继续执行。 在以后某个时刻,当接收进程执行到receive接收原语时,也产生访
管中断进入操作系统。 由操作系统将载有消息的缓冲区从消息链中取出,并把消息内容
copy到接收进程空间,之后收回缓冲区,如此就完成了消息的接收, 接收进程返回到用户态继续进行。
12
进程通信
9
进程通信
2.消息传递的方式 (1) 直接通信
发送或接收消息的进程必须指出信件发给谁或从谁那里接收消息。 原语send(P,消息):把一个消息发送给进程P 原语receive(Q,消息):从进程Q接收一个消息 (2) 间接通信 进程间发送或接收消息通过信箱进行,消息可被理解成信件。 •原语send(A,信件):把一封信件(消息)传送到信箱A •原语receive(A,信件):从信箱A接收一封信件(消息)
的一个特殊共享文件,又称为pipe文件。它允许进程按先进先出方式 传送数据,也能使进程同步执行操作。
写进程
共享 文件
读进程
向管道提供数据输入的发送进程(即写进程),以字符流形式把大量 数据送入管道,而接收管道输出的接收进程(即读进程),则从管道 中接收(读取)数据。
5
进程通信
管道的实质是一个共享文件,基本上可借助于文件系统的机制实现, 包括(管道)文件的创建、打开、关闭和读写。
信息,有些情况下进程间交换大批数据。 进程之间互相交换信息的工作称为进程通信IPC(InterProcess
Communication)。
2
进程通信
进程通信机制
低级通信:只适于在进程间交换少量信息的通信方式/机制。 该通信
方式(如进程的同步和互斥工具)一般只传送一个和几个字节的信息, 可方便有效地用于控制进程的执行速度,但它要作为可传输大量信息 的通信工具则不够理想(效率低 通信对用户不透明)。
可通过对共享存储区中的数据地读或写来实现通信。
进程在通信前,先向系统申请获得共享存储区中 的一个分区,并指定该分区的关键字,若系统已 经给其它进程分配了这样的分区,则将该分区的 描述符返回给申请者。接着,申请者把获得的共 享存储分区连接到本进程上,此后,便可象读、 写普通存储器一样地读、写该公用存储区。
实现共享存储区通信的关键在于进程自己要负责 共享存储区的同步和互斥问题。
7
进程通信
4.消息传递系统 在消息传递系统中,进程间的数据交换是以格式化的消息(message)为
单位的,程序员直接利用系统提供的一组通信命令(原语)进行通信。 操作系统隐藏了通信的实现细节,简化了通信程序编制的复杂性。 消息通信机制有以下两种实现方式: (1)直接通信方式。发送进程直接把消息发送给接收者,并将它挂在接收 进程的消息缓冲队列上。接收进程从消息缓冲队列中取得消息,这种通 信方式也称为消息缓冲通信。 (2)间接通信。发送进程将消息发送到某种中间实体中(信箱),接收进 程从中取得消息。这种通信方式也称信箱通信。在网络中称为电子邮件 系统。
进程通信
进程通信
并发进程之间的交互必须满足两个基本要求:同步和通信。 进程竞争资源时要实施互斥,互斥是一种特殊的同步,实质上需要解
决好进程同步问题。 进程同步是一种进程通信,通过修改信号量,进程之间可建立起联系,
相互协调运行和协同工作。 进程协同工作时,需要互相交换信息,有些情况下进程间交换的少量