1、计算机操作系统 主讲教师:曹建秋 贺清碧,课程主要内容,操作系统引论(1章) 进程管理(2-3章) 存储管理(4章) 设备管理(5章) 文件管理(6章) 操作系统接口(7章) 系统安全性(9章) *分布式操作系统,从进程的观点研究操作系统,把OS看作是由若干个可独立运行的程序和一个可对这些程序进行协调控制的核心(内核)组成。这些运行的程序称为进程,它是资源分配和独立运行的基本单位,每一进程都完成某一特定任务,而OS的内核则必须要控制和协调这些进程的运行,解决进程之间的通信,并从系统可并发工作为出发点,实现并发进程间通信,并解决由此带来的共享资源的竞争问题。,Process Management
2、 进程管理-第2章,进程的基本概念与控制 进程的基本概念 进程控制 线程的基本概念 UNIX中进程的描述与控制 进程同步与通信 进程同步 经典进程的同步问题 管程机制 进程通信 UNIX中进程的同步与通信 调度与死锁(第3章),本章作业,2.1 进程的基本概念,前趋图 程序顺序执行 程序并发执行 进程的描述 进程的定义、特征 进程的状态(状态、状态转换 及挂起状态) 进程控制块PCB,Process Management进程管理-processes 进程,返回目录,一、前趋图的定义,3,有向无循环图,记DAG,Eg1: 以下三条语句的前趋图为: s1: a:=x+y s2: b:=a-5 s3
3、: c:=b+1,Eg2: S1: a:=x+2S2: b:=y+4S3: c:=a+bS4: d:=c+6,返回,二、程序顺序执行,程序执行时,必须按照某种先后次序逐个执行 Eg s1: a:=x+ys2: b:=a-5s3: c:=b+1 程序顺序执行时有如下特征: 顺序性 封闭性 可再现性,返回,三、程序并发执行,在处理一批作业时,有的程序可实现并发执行S1: a:=x+2S2: b:=y+4S3: c:=a+bS4: d:=c+6,三、程序并发执行,程序并发执行时的特征 间断性 失去封闭性 不可再现性(补充)程序并发执行的条件(Bernstein),程序并发执行条件例题,Eg S1:
4、a:=x+2 S3: c:=a-bS2: b:=z+4 S4: w:=c+1 试利用Bernstein条件证明:(1)s1与s2并发执行;(2) s1与s3,s2与s3,s3与s4不能。 解:各语句的读、写集分别为:R(S1)=x, W(S1)=a,R(S2)=z, W(S2)=b,R(S3)=a,b, W(S3)=c,R(S4)=c, W(S4)=w,因为 R(S1) W(S2)=,R(S2) W(S1) = 且W(S1) W(S2) = 所以由Bernstein条件,s1与s2并发执行。同理可证s1与s3,s2与s3,s3与s4不能(略)。,返回,一、进程的定义、特征,1、进程proces
5、s的定义1)进程是程序的一次执行。2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。3)进程是程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位。 注:进程与程序的主要区别,Process Management进程管理-processes 进程,进程与程序的主要区别,1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态概念。 2)程序的存在是永久的。而进程则是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤消而消亡。 3)程序仅是指令的有序集合。而进程则由程序段、相关数据段进
6、程控制块(PCB)组成。 4)进程与程序之间不是一一对应。,进程与程序的主要区别,2、进程process的基本特征(1)结构特征为了描述和记录进程的运动变化过程,并使之能正确运行,每个进程都应配置了一个进程PCB。所以,从结构上看,每个进程(进程实体)都是由程序段、相关数据段及进程控制块(PCB)组成。 注:1.在早期UNIX版本中称进程的三个组成部分为“进程映像”2.区别进程实体和进程(2)动态性 进程的实质是程序在处理机上的一次执行过程,因此是动态性的。所以动态性是进程的最基本的特征。同时动态性还表现在 进程则是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤消而消亡。,
7、Process Management进程管理-processes 进程,一、进程的定义、特征,(3)并发性指多个进程实体同时存在于内存中,能在一段时间内同时运行。引入进程的目的就是为了使进程能并发执行,以提高资源利用率,所以并发性是进程的重要特征,也是OS的重要特征。 (4)独立性指进程是一个能独立运行的基本单位,也是系统进行资源分配和调度的独立单位。 (5)异步性指进程以各自独立的、不可预知的速度向前推进。,返回,二、 进程状态,为了刻画了整个进程,可以将一个进程的生命周期划分为一组状态: 1、进程的5种状态(三种基本状态) new新建/创建:进程正在创建中的状态 ready就绪: 进程已获
8、得了除处理机以外的所有资源,等待分配处理机执行的等待状态。 running运行/执行: 当一个进程获得必要的资源并正在处理机上执行的状态。 waiting等待/阻塞: 正在执行的进程由于发生某事件而暂时无法执行下去,此时进程所处的状态。 terminated终止/撤消/退出:进程执行完毕,释放所占资源的状态。,Process Management进程管理-processes 进程,进程在运行期间并非固定处于某个状态,而是不断从一个状态转换到另一个状态。 2、进程状态转换,3、进程的挂起状态在某些系统中,为了更好地管理和调度进程,引入了挂起状态: 挂起状态/静止状态:程序在运行期间,由于某种需要
9、,往往要将进程暂停执行,使其静止下来,以满足其需要。这种静止状态就称为进程的挂起状态。,引起挂起状态的原因,终端用户的需要:终端用户在自己程序运行中发现问题要求使正在执行的进程暂停执行而使进程处于挂起状态。 父进程的需要:父进程为了考查和修改某个子进程,或者协调各子进程间的活动,需要将该子进程挂起。 操作系统的需要:操作系统为了检查运行中的资源使用情况或进行记帐,而将某些进程挂起。 对换的需要:为了提高内存的利用率,而将内存中某些进程挂起,以调进其它程序运行。 负荷调节的需要:由于工作负荷较重,而将一些不重要的进程挂起,以保证系统能正常运行(实时操作系统),返回控制进程的挂起与激活,具有挂起状
10、态的进程状态 在引入挂起状态后,就增加了挂起状态(静止状态)与非挂起状态(活动状态)间的转换,如图所示:,返回,三、进程控制块Process Control Block (PCB),进程控制块PCB是操作系统为了管理和控制进程的运行而为每一个进程定义的一个数据结构,它记录了系统管理进程所需的全部信息。系统根据PCB而感知进程的存在,PCB是进程存在的唯一标志。 1、进程控制块PCB的作用 是OS对并发执行的进程进行控制和管理的根据。 也是系统用来感知进程存在的根据,即PCB是进程存在的唯一标志。,Process Management进程管理-processes 进程,1、进程控制块PCB的作用
11、 2、进程控制块PCB中的信息 3、进程控制块PCB的组织方式,2、进程控制块PCB中的信息根据操作系统的要求不同,PCB所包含信息有些不同,但通常包含以下信息: 进程标志符:由系统创建进程时分配给进程的唯一标识号,通常为一整数,称为进程号,用于区分不同的进程。其所属用户通常也为一整数,称为用户号。 处理机状态(断点信息):即处理机中各种寄存器(通用寄存器、PC、PSW等)的内容 进程调度:记录了进程调度的相关信息(状态、优先级、事件等)。 进程控制:记录了系统对进程控制的信息(程序和数据的地址、同步机制、资源清单、链接指针),Process Management进程管理-processes
12、进程,3、进程控制块PCB的组织方式在一个系统中,通常存在着许多进程,它们所处的状态不同,为了方便进程的调度和管理,需要将各进程的PCB用适当方法组织起来。目前常用的组织方式有: 链接方式 图示把同一状态的PCB链接成一个队列,这样就形成了就绪队列、阻塞队列等。 索引方式 图示 将同一状态的进程组织在一个索引表中,索引表的表项指向相应的PCB ,不同状态对应不同的索引表。,Process Management进程管理-processes 进程,返回,按链接方式组织PCB,按索引方式组织PCB,2.3 进程的控制,进程控制是进程管理中最基本的功能,即对系统中所有的进程实施有效的管理,其功能包括进
13、程的创建、撤消、阻塞与唤醒等,这些功能一般是由操作系统的内核来完成。 补充:OS 内核:在现代OS中,常把一些功能模块(与硬件紧密相关的、常用设备的驱动程序及运行频率较高的)放在紧靠硬件的软件层次中,加以特殊保护,同时把它们常驻内存,以提高OS的运行效率,这部分功能模块就称OS的内核。内核是基于硬件的第一层软件扩充,它为系统控制和管理进程提供了良好的环境。,Process Management进程管理-processes 进程,补充:处理机的执行状态为防止OS及其关键数据(如PCB等)不被用户有意或无意破坏,通常将处理机的执行状态分为两种,Process Management进程管理-proc
14、esses 进程,一、进程创建,一个进程可以创建若干个新进程,新创建的进程又可以创建子进程,为了描述进程之间的创建关系,引入了进程图(如下图所示:)1、进程图:又称为进程树或进程家族树,是描述进程家族关系的一棵有向树。,Process Management进程管理-processes 进程,父进程,祖先进程,子进程,2、引起进程创建的事件,在多道程序环境中,只有进程才可以在系统中运行。为了使一个程序能运行,必须为它创建进程。导致进程创建的事件有: 用户登录:在分时OS中,用户在终端键入登录命令后,如是合法用户,则系统为该终端创建一进程,并插入就绪队列。 作业调度:在批处理OS中,当按某算法调度
15、一作业进内存,系统为之分配必要资源,同时为该作业创建一进程,并插入就绪队列。 提供服务:在程序运行中,若用户需某种服务,则系统创建一进程为用户提供服务,并插入就绪队列。 应用请求:在运行中,由于应用进程本身的需求,自己创建一进程,并插入就绪队列。,3、进程的创建,操作系统一旦发现了要求创建进程的事件后,便调用进程创建原语create()按以下过程创建一新进程:,一个进程在完成其任务后,应加以撤消,以便及时释放其占有的各类资源。 1、导致进程撤消的事件 进程正常结束 进程异常结束 外界干预如果系统中发生了要求撤消进程的事件,OS便调用撤消原语去撤消进程。 2、撤消原语可采用2种撤消策略: 只撤消
16、指定的进程 撤消指定进程及其所有的子孙进程,二、进程的撤消,Process Management进程管理-processes 进程,3、进程撤消的过程,Process Management进程管理-processes 进程,当一个进程期待的事件尙未出现时,该进程调用阻塞原语block()(功能:将进程由执行状态转为阻塞状态)将自己阻塞起来。对于处于阻塞状态的进程,当该进程期待的事件出现时,由其它相关进程调用唤醒原语wakeup()(功能:将进程由阻塞状态变为就绪状态)将阻塞的进程唤醒,使其进入就绪状态。 1、引起进程阻塞和唤醒的事件 请求系统服务 启动某种操作 新数据尚未到达 无新工作可做,三
17、、进程的阻塞与唤醒,Process Management进程管理-processes 进程,2、进程的阻塞过程,3、进程的唤醒过程,当引起进程挂起的事件发生时,系统就将利用挂起原语suspend()将指定进程或处于阻塞状态的进程挂起。当发生激活进程的事件时,系统就将利用激活原语active()将指定进程激活。 1、引起进程的挂起与激活的事件,四、进程的挂起与激活,Process Management进程管理-processes 进程,2、进程的挂起过程,3、进程的激活过程,返回目录,*2.7 线程,线程是近年来操作系统领域出现的一个非常重要的技术,其引入进一步提高了程序并发执行的程度,从而进一
18、步提高了资源的利用率和系统的吞吐量。 线程的基本概念 线程间的同步和通信 内核支持线程和用户级线程 线程控制,Process Management进程管理-processes 进程,一、线程的基本概念,进程间CPU的切换/上下文切换,Process Management进程管理-processes 进程,Process Management进程管理-threads 线程,二、线程的分类,三、Solaris OS 中的线程,Solaris 2:是UNIX的一种版本,92年以前仅支持传统的单线程的重型进程,现在已发展为可支持用户级、内核/核心级线程,对称多处理器和实时调度的OS。,用户级线程,轻型
19、进程,内核级线程,进程,内核,返回目录,*2.8 UNIX中进程的描述与控制P323,进程的描述 进程的数据结构 进程的状态及其转换 进程映像,进程的数据结构,UNIX系统V中,一个进程由程序区、数据区、栈区、共享存储区等若干区组成,同时设置PCB,PCB分为以下四部分: 进程表:记录了进程的状态及有关控制信息等。 U区:存放进程表项的一些扩充信息 进程区表:记录了进程每个区的起始虚地址及指向系统区表中对应区表项的指针。 系统区表:记录了各区的类型、状态及在物理存储器中的地址信息等,以实现对区的管理。,进程的状态及转换,UNIX系统中,进程的状态(9种)及转换如图10-4所示。 进程的九种状态
20、 核心态执行 用户态执行 内存中就绪 被剥夺状态 就绪且换出 内存中睡眠 睡眠且换出 创建状态 僵死状态,8,被抢占,进程的映像,UNIX系统中,进程是进程映像的执行过程,进程映像由三部分组成: 用户级上、下文主要是用户程序,在系统中分为正文区、数据区、栈区和共享数据区。 寄存器上、下文由CPU中一些寄存器的内容所构成。 系统级上、下文分静态(只有一个,大小不变)和动态两部分(大小可变)。,进程的控制系统调用,unix系统向用户提供了一组系统调用,用户可利用这些系统调用来实现对进程的控制。 fork()创建一新进程(0进程由系统引导时建) Exec()改变进程的原有代码 Exit()实现进程的
21、自我终止 Wait()挂起进程,等待子进程终止 Getpid()获取进程标识符 Nice()改变进程的优先级,返回目录,2.3 进程同步,进程同步是指对多个相关进程在执行次序上进行协调,它的目的是使系统中诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性;或系统中诸进程之间在逻辑上的相互制约的关系(直接的-同步;间接的互斥)。 用来实现同步的机制称为同步机制。如:信号量机制;管程机制。,2.3 进程同步,进程同步的基本概念 两种形式的制约关系 临界资源、临界区 同步机制应遵循的规则 信号量机制 整型信号量 记录型信号量 AND型信号量集、一般信号量集 信号量的应用 信号量实现进
22、程互斥 信号量描述进程间的前趋关系,返回目录,一、进程同步的基本概念,1、两种形式的制约关系 系统中诸进程之间在逻辑上存在着两种制约关系: 直接制约关系(进程同步):即为完成同一个任务的诸进程间,因需要协调它们的工作而相互等待、相互交换信息所产生的直接制约关系。 间接制约关系(进程互斥) :是进程共享独占型资源而必须互斥执行的间接制约关系。 同步与互斥比较,2、临界资源、临界区,一次只允许一个进程使用的资源称为临界资源,如打印机,绘图机;变量,数据等,诸进程间采取互斥方式式实现对这种临界资源的共享,从而实现并行程序的封闭性。 例:有两个进程A和B,它们共享一个变量x,且两个进程按以下方式对变量
23、X进行访问和修改:其中R1和R2为处理机中的两个寄存器。A与B均对X+1,即X+2。 若按另一顺序对变量进行修改:结果x只加了1.,A: R1=X; B: R2=X; A: R1=R1+1;X=R1; B: R2=R2+1;X=R2;,2、临界资源、临界区,为了保证临界资源的正确使用,可以把临界资源的访问过程分成以下几部分:,进入区增加在临界区前面的一段代码,用于检查欲访问的临界资源此刻是否被访问。 退出区增加在临界区后面的一段代码,用于将临界资源的访问标志恢复为未被访问标志。 剩余区进程中除了进入区、临界区及退出区之外的其余代码。,2、临界资源、临界区,要进入临界区的若干进程必须满足: (1
24、)一次只允许一个进程进入临界区 (2)任何时候,处于临界区的进程不得多于一个 (3)进入临界区的进程要在有限的时间内退出 (4)如果不能进入自己的临界区,则应让出处理机资源 解决临界区(互斥)问题的几类方法: (1)软件方法 (2)硬件方法 (3)P-V操作,同步机制,3、同步机制应遵循的规则,有空让进(空闲让进):当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。 互斥(忙则等待):当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问 有限等待:对要求访问临界资
25、源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态. 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”。,返回,二、信号量机制 解决临界区(互斥)问题的几类方法,*软件方法 Repeatflagi:=true;turn:=j;while(flagi and turn=j) do no_op;critical sectionflagi:=false;remainder section Until false 遵循“忙则等待”;“有空让进”,但难度和局限性较大。,硬件方法用硬件方法来解决临界区问题,即定义一些特殊指令,如TEST 、SET、SWAP等
26、指令,有效地实现了进程互斥,但不满足“让权等待”。,有效解决同步问题的方法信号机制,为临界资源加锁的方法,二、信号量机制,信号量机制是荷兰科学家E.W.Dijkstra在1965年提出的一种同步机制,也称为P、V操作。由最初的整型信号量发展为记录型信号量,进而发展为信号量集。 整型信号量 记录型信号量 信号量集(AND信号量集、一般信号量集),1、整型信号量,整型信号量非负整数,除了初始化外,只能通过两个原子操作wait和signal(P,V)来访问。 wait和signal操作描述:wait(S): while S0 do no-op 测试有无可用资源S:=S-1; 可用资源数减一个单位 s
27、ignal(S): S:=S+1;主要问题:只要S0, wait操作就不断地测试(盲等),因而,未做到“让权等待”。,2、记录型信号量,基本思想1、设置一个代表资源数目的整型变量value(资源信号量)2、设置一链表L用于链接所有等待的进程 记录型信号量的数据结构Type semaphore=recordvalue:integer;L: list of process;end wait和signal操作描述:wait(S): S.value:=S.value-1; if S.value0 then block(S.L);signal(S): S.value:=S.value+1; if S.v
28、alue0 then wakeup(S.L); 做到“让权等待”。,3、AND型信号量、一般信号量集(了解),AND型信号量的基本思想将进程在整个运行过程中所需要的所有临界资源,一次性全部分配给进程,待进程使用完后再一起释放。只要有一个资源未能分配给进程,其它所有可能分配的资源也不分配给该进程。从而可避免死锁发生。在wait操作中,增加了一个“AND”条件,故称为AND同步。 一般信号集的基本思想一次可分配多个某种临界资源,而不需执行N次的P操作;每次分配前都测试该种资源数目是否大于测试值。,返回,三、信号量的应用,利用信号量实现进程互斥利用信号量可以方便地解决临界区问题(进程互斥)。为临界资
29、源设置一互斥信号量mutex,初值为1,则实现进程P1和P2互斥的描述:,P1进程:.wait(mutex);critical section;signal(mutex);.,P2进程:.wait(mutex);critical section;signal(mutex);.,三、信号量的应用,利用信号量描述前趋关系信号量可用来描述程序或语句间的前趋关系。 Eg: 设S1,S2,S3,S4为一组合作进程,其前趋图如图所示,用P、V操作实现其同步。,var a,b,c,d:semaphore:=0,0,0,0; /*表示进程是否执行完*/main()cobegins1();s2();s3();s
30、4();coend ,返回,2.4 经典进程的同步问题,在多道程序环境下,进程同步问题十分重要,出现一系列经典的进程同步问题,其中有代表性有:生产者消费者问题 哲学家进餐问题 读者写者问题,返回目录,1、“生产者消费者”问题,问题描述:“生产者-消费者”问题是最著名的进程同步问题。它描述了一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品。它是许多相互合作进程的抽象,如输入进程与计算进程;计算进程与打印进程等。设有界缓冲区的长度为n(n0),一群生产者进程p1,p2,,pm,一群消费者进程c1,c2,,cm,如图所示。假定生产者和消费者是相互等效,
31、只要缓冲区未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区取走产品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区提取产品。,设置两个同步信号量及一互斥信号量 empty:说明空缓冲单元的数目,其初值为有界缓冲区的大小n。 Full: 说明满缓冲单元的数目(即产品数目),其初值为0. Mutex: 说明该有界缓冲区是一临界资源,必须互斥使用,其初值为1。,“生产者消费者”问题的解决,“生产者消费者”问题的同步算法描述semaphore full=0; /*表示满缓冲区的数目*/semaphore empty=n; /*
32、表示空缓冲区的数目*/semaphore mutex=1; /*表示对缓冲区进程操作的互斥信号量*/ Main() cobeginproducer();consumer();coend,“生产者消费者”问题的解决,“生产者-消费者”问题中应注意,1. 互斥信号量的P,V操作在每一程序中必须成对出现. 2. 资源信号量(full,empty)也必须成对出现,但可分别处于不同的程序中. 3. 多个P操作顺序不能颠倒. 4. 先执行资源信号量的P操作,再执行互斥信号量的P操作,否则可能引起进程死锁. 5. 它是一个同步问题:(1)消费者想要取产品,有界缓冲区中至少有一个单元是满的。(2)生产者想要放
33、产品,有界缓冲区中至少有一个是空的。 6. 它是一互斥问题有界缓冲区是临界资源,因此,各生产者进程和各消费者进程必须互斥执行。,返回,2、“哲学家进餐”问题,问题描述:有五个哲学家,他们的生活方式是交替地进行思考和进餐。他们共用一张圆桌,分别坐在五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子又继续思考。 哲学家进餐问题可看作是并发进程并发执行时,处理共享资源的一个有代表性的问题。,semaphore stick5=1,1,1,1,1; /*分别表示5支筷子*/Main() cobeginp
34、hilosopher(0);philosopher(1);philosopher(2);philosopher(3);philosopher(4);coend,哲学家进餐问题的解决,返回,说明: 1、此算法可以保证不会有相邻的两位哲学家同时进餐。 2、若五位哲学家同时饥饿而各自拿起了左边的筷子,这使五个信号量stick均为0,当他们试图去拿起右边的筷子时,都将因无筷子而无限期地等待下去,即可能会引起死锁。,3、“读者写者”问题,问题描述:一个数据对象(数据文件或记录)可被多个进程共享。其中,reader进程要求读,writer 进程要求写或修改。允许多个reader进程同时读共享数据,但绝不允
35、许一个writer进程与其它的reader进程或writer进程同时访问,即writer进程必须与其它进程互斥访问共享对象。,“读者写者”问题的同步算法描述设置一个共享变量和两个信号量: 共享变量Readcount:记录当前正在读数据集的读进程数目,初值为0。 读互斥信号量Rmutex :表示读进程互斥地访问共享变量readcount,初值为1. 写互斥信号量wmutex:表示写进程与其它进程(读、写)互斥地访问数据集,初值为1.,“读者写者”问题的解决,“读者写者”问题的同步算法描述semaphore rmutex=1; semaphore wmutex=1; int readcount=0
36、; Main() cobeginreader();writer();coend,“读者写者”问题的解决,返回,2.5 管程机制,信号量机制实现进程同步的问题用信号量机制实现进程间的同步和互斥,即方便又有效。但存在以下两个问题:每个访问临界资源的进程都必须自备同步操作(P、V操作),这使大量的同步操作分散在各个进程中,给系统的管理带来麻烦。 会因同步操作使用不当而导致系统死锁。 解决方法-管程(Monitors)Dijkstra于1971年提出,为每个共享资源设立一个“秘书”来管理对它的访问。一切来访者都要通过秘书,而秘书每次仅允许一个来访者(进程)来访问共享资源。这样既便于系统管理共享资源,又
37、能保证进程的互斥访问和同步。1973年,Hanson和Hoare又把“秘书”概念发展为管程概念。,一、管程的基本概念,基本思想把访问某种临界资源的所有进程的同步操作都集中起来,构成一个所谓的“秘书”进程(管程),凡是访问临界资源的进程,都需要报告 “秘书”,由秘书来实现诸进程的同步。 管程的定义一个数据结构和在该数据结构上能被并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。如下图所示。,一、管程的基本概念,条件变量在管程机制中,当某进程通过管程请求临界资源未能满足时,管程便调用wait原语使该进程等待,但等待的原因可能有多个,为了加以区别,在P,V操作前,引入条件变量加以说明。
38、(1)条件变量的定义格式Var x,y: condition(2)对条件变量执行的两种操作 Wait操作 如x.wait用来将执行进程挂到与条件变量x相应的等待队列上。 Signal操作 如x.signal用来唤醒与条件变量x相应的等待队列上的一个进程。,二、用管程机制解决生产者消费者问题,1、建立Producer-consumer(PC)管程Type producer-consumer=monitorvar in,out,count:integer;buffer:array0,n-1 of item;notfull,notempty:condition;put(item);get(item)
39、;beginin:=out:=0; /* 初始化代码*/count:=0;end,二、用管程机制解决生产者消费者问题,1、建立Producer-consumer(PC)管程put(item)过程生产者利用此过程将自已的消息放到缓冲池中,若发现缓冲已满(count n),则等待。 Get(item)过程消费者利用此过程将缓冲池中的消息取走,若发现缓冲已空(count 0),则等待。,put(item),Procedure entry put(item)beginif count n then full.wait;buffer(in):=nextp;in:=(in+1) mod n;count:=
40、count+1;if empty.queue then empty.signal;end,get(item),Procedure entry get(item)beginif count 0 then empty.wait;nextc:=buffer(out);out:=(out+1) mod n;count:=count-1;if full.queue then full.signal;end,2、生产者消费者问题的解决,Producer:beginrepeatproduce an item in nextp;PC.put(item);until falseend Consumer:begi
41、nrepeatPC.get(item);consume the item in nextc;until falseend,返回目录,2.6 进程通信高级通信,一、进程通信的类型进程通信是指进程之间的信息交换。根据所交换的信息量的多少分为: 低级通信 进程之间交换的信息量较少且效率低。如进程同步和互斥。 高级通信 进程之间交换的信息量较多且效率高。又分: 共享存储器系统 指进程之间通过对共享存储区读写来交换数据。 消息传递系统 指进程间的通信以消息为单位,程序员可通过通信原语实现通信,按其实现方式不同可分为: 直接通信方式 发送进程直接把消息发送给接收进程。 间接通信方式 发送进程把消息发送到某
42、个中间实体(信箱),接收进程从中取得消息。 管道通信系统 发送进程(写进程)以字符流形式将大量数据送入管道(管道:用于连接读进程和写进程以实现它们之间通信的共享文件。),接收进程(读进程)从管道接收数据。,二、*消息传递系统 -直接通信方式(消息缓冲通信),发送进程利用OS所提供的发送命令,直接把消息发送给接收进程。 要求:发送进程和接收进程都以显式方式提供对方的标识符。 系统提供的两条通信原语: Send(Receiver,message);发送一个消息给接收进程; Receive(Sender,message);接收Sender发来的消息; 生产者-消费者问题的解决repeat . . .
43、 Produce an item in nextp; . . .send(consumer,nextp);until false;,repeat . . . Receive(producer,nextc); . . .consume the item in nextc until false,二、消息传递系统 -间接通信方式(信箱通信),发送进程把消息发送到某个中间实体(信箱),接收进程从中取得消息。 系统提供的若干条原语 信箱创建和撤消原语 两条通信原语 Send(mailbox,message) 将一个消息发送给指定信箱; Receive(mailbox,message) 从指定信箱中接收
44、一个消息; 信箱的分类: 私用信箱、公用信箱、共享信箱,三、消息传递系统实现中的若干问题,通信链路 建立通信链路(显式建立链路、隐式建立链路) 通信链路的连接方法(点-点、多点) 通信方式(单向、双向) 通信链路的容量(无容量、有容量) 消息格式 消息头和消息正文 进程同步方式 发送进程阻塞,接收进程阻塞 发送进程不阻塞,接收进程阻塞 发送进程和接收均不阻塞,返回目录,UNIX中进程的同步与通信,Unix系统V的同步和通信机制sleep和wakeup同步机制:用于核心态进程的同步管道pipe机制:管道分为无名管道(利用系统调用pipe()创建)、有名管道(利用系统调用mknod()创建);管道
45、机制用于进程间大数据量的通信。信号机制(signal/kill):利用系统调用signal()实现对信号处理方式的设置,利用系统调用kill()实现向另一(组)进程发送一个信号;信号机制用于用户进程间的通信。进程软件包:简称IPC(包括消息机制、共享存储区机制及信号量集机制),返回目录,本章作业,2.1 节 进程的基本概念 1、 试画出下面三条语句的前趋图: S1: a=5-x ; S2: b=a.x ; S3: c=4.x ; S4: d=b+c ; S5: e=d+3 ; 2、试利用Bernstein条件证明作业1中:(1)S2和S3语句是可以并发执行的,(2)S3和S4语句是不能并发执行
46、的,进程状态转换,3、某系统的进程转换图如图所示,请说明:(1)引起各种状态状态转换的典型事件有哪些?(2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一进程发生转换1?试说明是否发生下述因果转换:2 到1; 3到2;4到1,教材P68,4、第5题:在操作系统中为什么要引入进程概念,它会产生什么影响? 5、第6题:试从动态性、并发性和独立性上比较进程和程序。 6、第7题:试说明PCB的作用,为什么说PCB是进程存在的唯一标志?,2.3 进程同步,1、设P1,P2,P3,P4,P5,P6为一组合作进程,其前趋图如图所示,用P、V操作实现其同步。,2、教材P68,第25题,2.4 经典进程的同步问题-教材P68,1、第23题 2、第24题 3、第26题 4、第28题 5、某数据库有多个写进程,多个读进程,它们之间读、写操作的互斥要求是:写进程正在写该数据库时不能有其他进程读数据库,也不能有其他进程写该数据库;读进程之间不互斥,可以同时读该数据库。请用信号量及P、V操作描述这一组进程的工作过程。,返回目录,