您好,欢迎访问三七文档
操作系统——Chapter2进程同步操作系统—Chapter4进程管理上次课程复习课程回顾分组讲解助教讲解阶段练习1组:水果问题2组:和尚用水3组:车辆过桥操作系统—Chapter4进程管理主要内容进程并发信号量机制用信号量实现经典进程同步问题管程进程通信共享存储区通信机制消息传递通信机制管道通信机制线程的同步和通信线程之间的同步线程之间的通信OS实例管程的定义Hoare和Hansen观点管程的应用操作系统—Chapter4进程管理管程的定义管程的提出采用PV机制来编写并发程序,对于共享变量及信号量变量的操作将被分散于各个进程当中。PV机制的缺点:不利于修改和维护正确性难以保证易读性差•要了解对于一组共享变量的及信号量的操作是否正确,必须通读整个系统或并发程•因为程序的局部性很差,所以任一组变量或一段代码的修改都可能影响全局•操作系统或则并发程序通常具有一定的规模,要保证一个这样的系统没有逻辑错误是很难的操作系统—Chapter4进程管理管程的定义管程的定义:关于共享资源的一组数据结构和数据结构上的一组相关操作管程的思想——集中式同步机制将共享变量以及对共享变量能够进行的所有操作集中在一个模块中,以过程调用的形式提供给访问临界资源的进程使用操作系统—Chapter4进程管理管程的定义管程的三个主要特性:模块化:一个管程是一个基本的程序单位,可以单独进行编译抽象数据类型:管程是一种特殊的数据类型,其中不仅有数据,而且还有对数据进行操作的代码信息隐藏:管程是半透明的,管程中的过程(函数)实现了某些功能,至于这些过程是怎样实现的,则在其外部是不可见的,管程中的过程才能访问该数据结构操作系统—Chapter4进程管理管程的定义管程工作机制:并发进程互斥调用管程提供的过程(进入、退出过程、内部操作)临界资源闲,进程能够访问;临界资源忙,进程不能访问时需要在管程中阻塞等待条件阻塞在任意时刻,管程中只能有一个进程运行管程中等待临界资源的进程只能由访问同一资源的进程唤醒紧急等待队列,优先级比入口处的等待队列高操作系统—Chapter4进程管理管程的定义管程的语法描述type管程名=monitor管程变量说明;define能被其他模块引用的过程名列表;use(要引用的模块外定义的)过程名列表;procedure过程名(形式参数表);begin过程体;end;…procedure过程名(形式参数表);begin过程体;end;…begin管程的局部数据初始化语句;end;•typeMS=MONITOR•varbusy;•varcondition;•defineget,put;•uesPP,VV;•procedureget/*进入管程的过程调用*/•begin•ifbusythenPP(condition);•busy:=true;•end;•procedureput/*退出管程的过程调用*/•begin•busy:=false;/*临界资源状态设置为闲*/•VV(condition);/*唤醒因等待临界资源而阻塞的进程*/•end;•begin/*管程变量初始化*/•busy:=false;•end;•管程的四个组成部分:名称数据结构说明对该数据结构进行操作的一组过程/函数初始化语句操作系统—Chapter4进程管理Hoare和Hanse观点操作系统—Chapter4进程管理Hoare和Hanse观点调度的背景如果有进程Q因c1条件处于阻塞状态,当正在调用管程的进程P执行了V(c1)操作后,进程Q被重新启动,此时两个进程P和Q,如何确定哪个执行,哪个等待?可采用下述两种方式之一进行处理:•(1)P等待,直至Q离开管程或等待另一条件。(Hoare)•(2)Q等待,直至P离开管程或等待另一条件(Hanse)操作系统—Chapter4进程管理PP:PP(varx_sem:semaphore=0,x_count:integer,St:struct)beginx_count:=x_count+1;ifSt.next_count0thenV(St.next);elseV(St.mutex);P(x_sem);x_count:=x_count–1;end;typeinterf=struct{varmutex:semaphore=1;varnext:semaphore=0;integernext_count;}end;VV(varx_sem:semaphore=0,x_count:integer,St:struct)beginifx_count0thenbeginSt.next_count:=St.next_count+1;V(x_sem);St.next_count:=St.next_count–1;end;end;Hoare观点varmutex:semaphore=1;/*用于进程互斥调用管程过程的信号量*/varnext:semaphore=0;/*用于发出VV操作的进程自我阻塞的信号量*/integernext_count;/*用于计数在next上阻塞的进程*/varx_sem::semaphore=0;/*用于进程在临界资源忙时能够阻塞自己*/integerx_count;/*用于记录因等待临界资源而阻塞的进程数*/操作系统—Chapter4进程管理Hoare观点typeinterf=struct{varmutex:semaphore=1;/*用于进程互斥调用管程过程的信号量*/varnext:semaphore=0;/*用于发出VV操作的进程自我阻塞的信号量*/integernext_count;/*用于计数在next上阻塞的进程*/}end;PP(varx_sem:semaphore=0,x_count:integer,St:struct)beginx_count:=x_count+1;ifSt.next_count0thenV(St.next);elseV(St.mutex);P(x_sem);x_count:=x_count–1;end;为了实现进入管程中的进程在需要访问的临界资源忙时能够阻塞自己,需要引入初值为0的信号量x_sem,用操作P(x_sem)阻塞自己。用一个计数x_count来记录阻塞等待临界资源资源的进程数。用操作V(x_sem)唤醒一个阻塞等待临界资源的进程并使得进程立即恢复运行P(St.mutex)过程体IfSt.next_count0thenV(St.next);ElseV(St.mutex);保证互斥进入管程操作系统—Chapter4进程管理管程和进程的区别虽然二者都定义了数据结构,但进程定义的是私有数据结构PCB,管程定义的是公共数据结构,如消息队列等;二者都存在对各自数据结构上的操作,但进程是由顺序程序执行有关的操作,而管程主要是进行同步操作和初始化操作;设置进程的目的在于实现系统的并发性,而管程的设置则是解决共享资源的互斥使用问题;操作系统—Chapter4进程管理管程和进程的区别进程通过调用管程中的过程对共享数据结构实行操作,该过程就如通常的子程序一样被调用,因而管程为被动工作方式,进程则为主动工作方式;进程之间能并发执行,而管程则不能与其调用者并发;进程具有动态性,由“创建”而诞生,由“撤销”而消亡,而管程则是操作系统中的一个资源管理模块,是操作系统的固有成分,供进程调用。操作系统—Chapter4进程管理主要内容进程并发信号量机制用信号量实现经典进程同步问题管程进程通信共享存储区通信机制消息传递通信机制管道通信机制线程的同步和通信线程之间的同步线程之间的通信OS实例操作系统—Chapter4进程管理操作系统—Chapter4进程管理进程通信的类型共享存储器系统•基于共享数据结构的通信方式•基于共享存储区的通信方式消息传递系统•直接通信方式•间接通信方式管道(Pipe)通信•共享文件步骤•向操作系统申请共享存储区•挂接共享存储区到进程的存储空间•需要进程互斥读写存储区•通信结束后归还存储区评价•适合进程之间通信量大的情况下•优点是高效、快速操作系统—Chapter4进程管理进程通信的类型共享存储器系统•基于共享数据结构的通信方式•基于共享存储区的通信方式消息传递系统•直接通信方式•间接通信方式管道(Pipe)通信•共享文件消息结构与消息原语•消息由消息头和消息体组成。消息头包括发送进程标志(sptr)、指向消息队列中下一个消息的指针(nptr)和消息长度(size)。消息正文(text)是消息体。直接通信方式•Send(Receiver,message)发送一个消息给接收进程•Receive(Sender,message)接收Sender发来的消息引入该方法的PC问题描述首先调用“寻找目标进程的PCB”的程序查找接收进程的PCB,如果接收进程存在,申请一个存放消息的缓冲区,消息缓冲区为空时,接收此消息的进程因等待此消息的到来而处于阻塞状态,则唤醒此进程,并把消息的内容、发送原语的进程名和消息等,复制到预先申请的存放消息的缓冲区,且将存放消息的缓冲区连接到接收进程的PCB上;如果接收进程不存在,则由系统给出一个“哑”回答;最后控制返回到发送消息的进程继续执行,或转入进程调度程序重新分配处理机。操作系统—Chapter4进程管理进程通信的类型共享存储器系统•基于共享数据结构的通信方式•基于共享存储区的通信方式消息传递系统•直接通信方式•间接通信方式管道(Pipe)通信•共享文件间接通信方式•通过作为共享数据结构的实体(即信箱)•私用信箱•公用信箱•共享信箱一对一关系多对一关系一对多关系多对多关系消息传递的相关问题•通信链路•消息的格式•进程同步方式操作系统—Chapter4进程管理消息缓冲队列send(B,a)sender:Asize:5text:Hello进程A发送区amqmutexsmPCB(B)next:0第一消息缓冲区sender:Asize:5text:Hello第一消息缓冲区receive(b)sender:Asize:5text:Hello进程B接收区bab操作系统—Chapter4进程管理进程通信的类型共享存储器系统•基于共享数据结构的通信方式•基于共享存储区的通信方式消息传递系统•直接通信方式•间接通信方式管道(Pipe)通信•共享文件基本原理•借助于一个特殊的共享文件连接发送进程和接收进程。发送进程向管道写入信息,接收进程从管道读信息。•是一种单向的传递信息方式,先进入管道的信息首先从管道中流出。发送进程只能写入信息,接收进程只能接收信息。•从实现机理上说,就是发送进程将发送的信息写入文件,接收进程从文件中读出信息。因此管道需要作为文件引用。特点•在通信前需要创建管道•利用管道通信的进程双方需要同步操作系统—Chapter4进程管理UNIX的管道类别•无名管道:是操作系统提供的资源,可以被所有的进程使用。限制:每次打开管道的进程,只能是与自己进程相关的进程(子进程)共享对管道的操作,完成相互之间的通信。•有名管道:克服无名管道使用上的限制,所有的进程都可以共享对管道的操作,相互之间通过管道通信。操作系统—Chapter4进程管理主要内容进程并发信号量机制用信号量实现经典进程同步问题管程进程通信共享存储区通信机制消息传递通信机制管道通信机制线程的同步和通信线程之间的同步线程之间的通信OS实例操作系统—Chapter4进程管理线程之间的同步机制:•互斥锁、条件变量、信号量机制1:互斥锁•用于线程之间对互斥共享资源竞争访问的同步机制。互斥锁的操作开销低,实施简单,适合用于访问频率高的环境。•同一进程中的线程,共享进程的地址空间,对进程的数据和程序段访问频率高。对这样的线程,适合用互斥锁机制实现线程之间的同步。•互斥锁存在两个状态:开锁(unlock)和关锁(lock),可以用两条命令对互斥锁进行操作。其中的loc
本文标题:2进程通信
链接地址:https://www.777doc.com/doc-3973476 .html