进程通信进程间通信考研计算机考研.ppt
School of ManagementTianjin University,进程通信,2.6 进程通信1 信号通信机制 2 共享文件通信机制 3 共享存储区通信机制 4 消息传递通信机制 5 有关消息传递实现的若干问题,School of ManagementTianjin University,进程通信,进程同步是一种进程通信,通过修改信号量,进程之间可建立起联系,相互协调运行和协同工作进程协同工作时,需要互相交换信息,有些情况下进程间交换的少量信息,有些情况下进程间交换大批数据。进程之间互相交换信息的工作称为进程通信IPC(InterProcess Communication),School of ManagementTianjin University,进程通信,进程间通信的方式信号(signal)通信机制;共享存储区(shared memory)通信机制;共享文件(shared file)通信机制;消息传递(message passing)通信机制,School of ManagementTianjin University,进程通信,信号(signal)通信机制低级通信:进程之间控制信息的交换称为低级通信。一般只传送一个和几个字节的信息,达到控制进程执行速度的作用。(进程的同步和互斥)信号量机制作为同步工具是卓有成效的,但作为通讯工具则不够理想,(效率低。通讯对用户不透明。)高级通信:用户可以直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。,School of ManagementTianjin University,进程通信,共享存储区(shared memory)通信机制 相互通讯的进程通过共享数据结构和存储区进行通讯,因而可进一步分为:基于共享数据结构的通讯方式;(低效,只适于传递少量数据)基于共享存储区的通讯方式。为了传送大量数据,在存储区中划出一块共享存储区,诸进程可通过对共享存储区进行读或写数据实现通讯。,School of ManagementTianjin University,进程通信,向系统申请共享存储区中的一个分区指定该分区的关键字申请者将申请到的共享分区挂到本进程上读写该公用存储分区,School of ManagementTianjin University,进程通信,共享文件(shared file)通信机制管道(pipeline)是连接读写进程的一个特殊文件,允许进程按先进先出方式传送数据,也能使进程同步执行操作。发送进程以字符流形式把大量数据送入管道,接收进程从管道中接收数据,所以叫管道通信,School of ManagementTianjin University,进程通信,管道的实质是一个共享文件,基本上可借助于文件系统的机制实现,包括(管道)文件的创建、打开、关闭和读写进程对通信机构的使用应该互斥,一个进程正在使用某个管道写入或读出数据时,另一个进程就必须等待发送者和接收者双方必须能够知道对方是否存在,如果对方已经不存在,就没有必要再发送信息,School of ManagementTianjin University,进程通信,管道长度有限,发送信息和接收信息之间要实现正确的同步关系,当写进程把一定数量的数据写入pipe,就去睡眠等待,直到读进程取走数据后,把它唤醒。,School of ManagementTianjin University,进程通信,消息传递通信的实现方法采用消息传递机制后,一个正在执行的进程可在任何时刻向另一个正在执行的进程发送消息;一个正在执行的进程也可在任何时刻向正在执行的另一个进程请求消息一个进程在某一时刻的执行依赖于另一进程的消息或等待其他进程对发出消息的回答,那么,消息传递机制紧密地与进程的阻塞和释放相联系,School of ManagementTianjin University,进程通信,直接通信发送或接收消息的进程必须指出信件发给谁或从谁那里接收消息直接通信原语send(P,消息):把一个消息发送给进程P原语receive(Q,消息):从进程Q接收一个消息,School of ManagementTianjin University,进程通信,间接通信 进程间发送或接收消息通过信箱进行,消息可被理解成信件原语send(A,信件):把一封信件(消息)传送到信箱A原语receive(A,信件):从信箱A接收一封信件(消息),School of ManagementTianjin University,进程通信,间接通信的实现信箱信箱是存放信件的存储区域,每个信箱可分成信箱特征和信箱体两部分。信箱特征指出信箱容量、信件格式、指针等;信箱体用来存放信件信箱可由OS创建,也可由用户进程创建,创建者是信箱的拥有者,据此可把信箱分为:私用信箱,公用信箱,共享信箱。,School of ManagementTianjin University,进程通信,发送信件:如果指定信箱未满,则将信件送入信箱中由指针所指示的位置,并释放等待该信箱中信件的等待者;否则发送信件者被置成等待信箱状态接收信件:如果指定信箱中有信,则取出一封信件,并释放等待信箱的等待者,否则接收信件者被置成等待信箱中信件的状态,School of ManagementTianjin University,进程通信,type box=recordsize:integer;/*信箱大小*/count:integer;/*现有信件数*/letter:array1.n of message;/*信箱*/S1,S2:semaphore;/*等信箱和等信件信号量*/end,School of ManagementTianjin University,进程通信,在利用信箱通信时,在发送进程和接收进程之间,存在着四种关系:一对一关系:即可以为发送进程和接收进程建立一条专用的通信链路;多对一关系:允许提供服务的进程与多个用户进程进行交互,也称客户/服务器交互;一对多关系:允许一个发送进程与多个接收进程交互,使发送进程用广播的形式,发送消息;多对多关系:允许建立一个公用信箱,让多个进程都能向信箱投递消息,也可取走属于自己的消息。,School of ManagementTianjin University,进程通信,消息传递系统实现中的若干问题信箱容量问题 多进程与信箱相连的信件接收问题 信箱的所有权问题 信件的格式问题 通信进程并行性问题,School of ManagementTianjin University,进程通信,消息缓冲队列通信机制sender:发送消息的进程名或标识符size:发送的消息长度text:发送的消息正文next-ptr:指向下一个消息缓冲区的指针在进程的PCB中涉及通信的数据结构:mptr:消息队列队首指针mutex:消息队列互斥信号量,初值为1sm:表示接收进程消息队列上消息的个数,初值为0,是控制收发进程同步的信号量,School of ManagementTianjin University,进程通信,发送原语send:申请一个消息缓冲区,把发送区内容复制到这个缓冲区中;找到接收进程的PCB,执行互斥操作P(mutex);把缓冲区挂到接收进程消息队列的尾部,执行V(sm)、即消息数加1;执行V(mutex),School of ManagementTianjin University,进程通信,接收原语 receive:执行P(sm)查看有否信件;执行互斥操作P(mutex),从消息队列中摘下第一个消息,执行V(mutex);把消息缓冲区内容复制到接收区,释放消息缓冲区,School of ManagementTianjin University,进程通信,接收进程名:Q信件长:5c正文:ABCDE,Send(发送区首址),发送区,消息队列首指针,mutex,sm,发送进程名:P信件长:5正文:ABCDE,后继信件缓冲指针,0,进程Q的PCB,发送进程名:P信件长:5正文:ABCDE,receive(接收区首址),接收区,进程P,进程Q,School of ManagementTianjin University,线程,2.7 线 程 简 介引入进程是一个资源的拥有者,在创建,撤消和切换中系统为之付出较大开销:进程切换开销大、进程通信代价大、进程之间的并发性粒度较粗,并发度不高,不适合并行计算和分布并行计的要求、不适合客户/服务器计算的要求如何使多个程序并发执行同时又尽量减少系统开销?,School of ManagementTianjin University,线程,线程的基本概念操作系统中引入进程的目的是为了使多个程序并发执行,以改善资源使用率和提高系统效率,操作系统中再引入线程,则是为了减少程序并发执行时所付出的时空开销,使得并发粒度更细、并发性更好把进程的两项功能“独立分配资源”与“被调度分派执行”分离开来,School of ManagementTianjin University,线程,进程作为系统资源分配和保护的独立单位,不需要频繁地切换;线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换,在这种指导思想下,产生了线程的概念线程是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。线程是进程的组成部分,每个进程内允许包含多个并发执行的实体(控制流),这就是多线程,School of ManagementTianjin University,线程,线程的状态状态参数:线程标志符和一组状态参数:寄存器状态,堆栈,线程运行状态,优先级,线程专有存储器,信号屏蔽线程运行状态执行状态,就绪状态,阻塞状态挂起状态对线程是没有意义的,如果进程挂起后被对换出主存,则它的所有线程因共享了进程的地址空间,也必须全部对换出去,School of ManagementTianjin University,线程,线程的创建和终止初始化线程调用线程创建函数去创建若干个线程被终止未释放资源的线程可以被需要的线程调用,使它重新恢复运行线程间的同步和通信(参见书PP63)线程的实现内核支持线程和用户级线程,School of ManagementTianjin University,线程,内核支持线程纯内核级线程设施中,线程管理的所有工作由操作系统内核做。内核专门提供KLT API,应用程序区不需要有线程管理代码。Windows NT 和 OS/2都是采用这种方法的例子,School of ManagementTianjin University,线程,线程执行中可通过内核创建线程原语来创建其他线程,这个应用的所有线程均在一个进程中获得支持。内核要为整个进程及进程中的单个线程维护现场信息,应在内核中建立和维护PCB及TCB,保存在内核空间中,School of ManagementTianjin University,线程,用户级线程的实现运行时系统:实际上是管理和控制线程的函数集合。用户级线程切换时不须转入核心态,由运行时系统中的线程切换过程来执行切换任务操作简单,切换速度快轻型进程LWP(light weight process),School of ManagementTianjin University,线程,