版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机操作系统(co zu x tn)第二章 进程(jnchng)管理(进程(jnchng)同步与互斥)共三百九十五页2009年1个选择、1个综合应用题2010年3个选择2011年2个选择,1个综合应用题2012年2个选择2013年2个选择,1个同步(tngb)算法设计题 进程管理是本课程的重点章节,这部分介绍的是操作系统5大管理功能(gngnng)之一:处理机管理,包括进程管理和处理机调度两大块的内容。本章是学习和考试的重点内容,同时也是难点。这部分除了要掌握基本的概念和基本的原理外,还要求能运用这些基本原理去分析和解决问题。共三百九十五页 进程同步与互斥是进程管理的重点,也是操作系统学科的
2、一个难点。 具体包括:进程同步的基本概念、实现临界区互斥的基本方法(包括软件实现方法、硬件实现方法)、信号量(P、V操作)、管程、经典同步问题(包括生产者-消费者问题、读者-写者问题、哲学家进餐问题等)。我们一定要掌握P、V操作的概念、流程(lichng),以及P、V操作在同步问题、互斥问题中的应用。 共三百九十五页首先,要求掌握进程的概念,其中进程和程序这两个概念的区别和联系一定要搞清楚。第二,要记住进程的三个基本状态以及它们之间相互转换条件,一定要记住不可能从就绪状态直接转换到等待(dngdi)状态。第三,需要理解进程控制和原语这两个概念,掌握进程的创建、撤销、阻塞、唤醒的条件,理解四种原
3、语的执行过程。共三百九十五页第四,理解什么是并发进程间的直接制约以及由直接制约所引发的进程同步,重点要掌握如何用P、V原语操作实现同步问题,要会利用P、V原语操作来解决经典的同步问题;第五(d w),了解进程的通信方式及它们各自的特点;第六,要理解进程和线程的异同以及多线程模型;共三百九十五页第二章 进程(jnchng)管理2.1 进程的基本概念2.2 进程控制2.3 进程同步2.4 经典进程的同步问题2.5 进程通信2.6 线程基础知识总结实战(shzhn)练习综合应用题共三百九十五页操作系统在管理进程与线程的过程中需要完成以下工作:(1)用户和系统进程的创建和删除;(2)进程的调度;(3)
4、为进程的同步、通信、死锁处理提供机制。多道程序设计的提出 其基本思想是在主存中同时存放多个用户的作业,使之同时处于运行状态而共享系统资源。宏观上是并行运行,微观上是依次轮流迸发运行的。操作系统的定义:操作系统是指控制和管理计算机的软、硬件资源,合理地组织计算机的工作流程,为程序的运行提供一个良好环境,方便用户使用的程序集合。之所以采用多道程序设计技术,是由于中断和通道(tngdo)技术的出现,CPU可以把直接控制输入/输出的工作转给通道(tngdo)。共三百九十五页多道程序的目标、方法和主要问题(1)目标:是充分使用系统所有(suyu)资源并尽可能地使它们并行工作,这种技术可把硬件的代价交叉分
5、布在大量并行用户之间,而使计算机系统的代价极小化。(2)方法:是一个正在运行的程序不使用某设备时,让另一程序去使用该设备。为了发挥多道程序设计的有效性,应选择各种不同类型的作业同时执行,让资源处于忙碌状态。(3)多道程序设计实现的3个问题:存储保护、程序浮动、处理机和系统资源的管理和调度。 共三百九十五页多道程序系统所必须解决(jiju)的问题(1)提出解决各种冲突的策略(2)协调并发活动的关系(3)保证数据的一致性(4)实现数据的存取控制共三百九十五页2.1 进程(jnchng)的基本概念2.1.1 程序的顺序执行及其特征:顺序性、封闭性、可再现性。作业1:什么叫程序顺序执行的封闭性和可再现
6、性?封闭性:程序执行得到的最终结果由给定的初始条件决定,不受外界因素(yn s)的影响。可再现性:只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。共三百九十五页2.1.2 前趋图:有向无循环图,DAG(Directed Acyclic Graph),描述进程之间执行的前后关系。直接制约关系:同步间接(jin ji)制约关系:互斥2.1.3 程序的并发执行及其特征:间断性(制约性)、失去封闭性、不可再现性(不可重复,例:变量的共享)。2.1.4 进程的特征与状态 引入进程的目的:是使多个程序能并发执行,提高资源利用率和系统吞吐量。共三百九十五页进程(jnchng)的定义进程的
7、组成:进程包括程序代码(程序段或文本段)、堆栈段(临时(ln sh)数据,如函数参数、返回地址和局部变量)、数据段(包括全局变量)、堆(进行运行期间动态分配的内存)PCB:Process Control Block进程表空间:PT进程图: 内存中的进程如右图示:栈堆数据文本共三百九十五页(1)特征: 动态性:最基本。 并发性: 独立性:独立运行、独立分配资源和独立接受调度。 异步性:进程以各自独立的,不可预先的速度向前推进。 可能会造成不正确的情况出现,原因与进程占用处理器的时间、执行的速度以及外界的影响有关,都与时间有关。称为(chn wi)与时间有关的错误。又称竞争条件, Race Con
8、dition结构特征:程序段、相关的数据段和PCB构成的进程实体。定义:一个程序段在一个数据段上的一次执行过程。共三百九十五页作业2:简述进程和程序(chngx)的区别和联系 进程和程序(chngx)是既有联系又有区别的两个概念(1)程序是指令的集合,静态概念,进程是程序在处理机上的一次执行过程,动态概念。(2)程序是长期存在的,进程有生命周期,有创建、活动、消亡。(3)程序仅是指令的有序集合,而进程则由程序、数据和进程控制块组成。(4)进程与程序之间不是一一对应的,即同一程序同时运行于若干不同的数据集合上,它将属于若干个不同的进程,而一个进程可以执行多个程序。 系统内的进程能并发执行,允许并
9、发执行的理由:信息共享,加快计算,模块化和方便性。共三百九十五页(2)进程的三种基本状态: 就绪状态:三种情况的进程构成了就绪队列 执行状态:当前进程,至少一个 阻塞状态:等待状态、封锁状态、睡眠状态、休眠状态。作业3:画出三种基本状态之间的转换方向并标明每一种转换的原因:这个时候,需要进行重新调度,会发生进程上下文内容的切换(qi hun)。两个基本队列:就绪队列和等待队列。队列管理模块:入队和出队。共三百九十五页中断处理过程(1)唤醒被阻塞的驱动程序进程。(2)保护被中断进程的CPU环境。程序是指令在N位置时被中断的,程序计数器中的内容为N+1,所有寄存器的内容都被保留在中断保留区(栈)中
10、。(3)分析中断原因、转入相应的设备中断处理程序。(4)进行中断处理。不同的设备有不同的中断处理程序。(5)恢复被中断进程的现场。处理机再执行本程序时,从N+1开始。恢复的内容:包括(boku)第N+1条指令的地址(IR寄存器或PC计数器)、处理机状态字PSW(标志寄存器)、通用寄存器和段寄存器的内容注:此处与第四章中的缺页中断和缺段中断相区别共三百九十五页(3)挂起状态:终端用户的请求,父进程请求,负荷调节的需要,操作系统的需要。进程状态的转换(zhunhun):(4)创建状态和终止状态: 共三百九十五页例1:简述三种基本状态之间的转换方向及原因:绝对不会出现的是从阻塞到执行状态的转换。进程
11、队列:就绪队列和等待队列。入队和出队。例2:处于(chy)就绪队列中的进程是由哪三种类型的进程组成的解:(1)新进程(2)因时间片用完而中断运行的进程(3)因等待的条件发生而被唤醒的进程共三百九十五页例3:在一个只有单处理机的操作系统中,进程有运行、就绪、等待三个基本状态。假如某时刻操作系统中有10个进程并发执行,且CPU以非核心态情况下,试问:(1)这时刻系统中处于(chy)运行状态的进程数最多有几个?最少有几个?(2)这时刻系统中处于就绪状态的进程数最多有几个?最少有几个?(3)这时刻系统中处于等待状态的进程数最多有几个?最少有几个?共三百九十五页解:(1)因为系统中只有一个处理机,所以某
12、时刻处于运行状态的进程数最多有1个。而最少可能为0,此时(c sh)其他10个进程一定全部排在各等待队列中,在就绪队列中没有进程,在实际的操作系统中,此时(c sh)CPU是在运行操作系统的空闲进程(System Idle Process)或线程。共三百九十五页(2)处于就绪状态的进程数最多只有9个,不可能出现10个,因为一旦CPU有空,调度程序马上调度;处于就绪状态的进程数最少是0个,1个进程运行,9个进程等待(dngdi),或者10个进程全部等待(dngdi)。(3)处于等待状态的进程数最多有10个,等待状态的进程最少是个。例3:某系统在t0时刻,打印机刚刚打印完毕或者刚刚开始打印,试问该
13、时刻系统内部发生了进程状态变化的情况如何?共三百九十五页2.1.5 进程控制块:任务控制块1、PCB的作用(zuyng):将程序变成可并发执行的进程,是进程存在的惟一标志。操作系统是根据PCB来对并发执行的进程进行控制和管理的。常驻内存。系统会集中存储所有进程的PCB,构成进程表空间PT。 共三百九十五页2、PCB中的信息 (1)进程标识(biozh)符:内部和外部标识(biozh) (2)处理机状态:通用寄存器、PC、PSW(标志寄存器)和用户栈指针。 (3)进程调度信息:进程状态、进程优先级、调度的其他信息、阻塞事件。 (4)进程控制信息:程序和数据的地址、同步和通信机制、资源清单和链接指
14、针。3、PCB的组织方式:链接和索引。共三百九十五页作业4:试从进程(jnchng)管理、中断处理、文件管理、存储管理、设备管理的角度设计进程(jnchng)控制块应包含的项目。(北京大学1999年研究生试题)解:1、从进程管理的角度考虑,PCB应包含进程标识符、进程状态、CPU状态信息(包括程序计数器、程序状态字、栈指针、通用寄存器等)、进程调度信息(进程的优先数)、链接指针(用于将PCB链入各种队列)等项信息。2、从进程通信的角度考虑,PCB中应包含消息队列指针、实现消息队列互斥访问的互斥信号量、描述消息队列中消息个数的资源信号量。3、从中断处理的角度考虑,PCB中应包含CPU状态信息。共
15、三百九十五页4、从文件管理的角度考虑,PCB中应包含用户文件描述符表,用来登记用户打开的各个文件,并可以通过它找到在内存的相应文件的FCB5、从存储管理的角度考虑,应保存进程的程序、数据、堆栈在内存和外存的地址和各部分长度等信息(xnx)。6、从设备管理角度考虑,应有该进程所需资源和已分配到的资源清单。共三百九十五页进程上下文(Context)实际上是进程执行活动(hu dng)全过程的静态描述。又称进程映像。包括三个组成部分:(1)用户级上下文。由用户程序代码、用户数据段(含共享数据块)和用户堆栈组成的进程地址空间。(2)系统级上下文。包括进程的标识信息、现场信息、控制信息、进程环境块,以及
16、系统堆栈等组成的进程地址空间。(3)寄存器上下文。由程序状态字寄存器和各类控制寄存器、地址寄存器、通用寄存器组成。共三百九十五页Context Switch发生在寄存器和内存之间,依赖于内存速度,复制的寄存器的数量,是否(sh fu)有特殊指令等。 可再入程序是指一个能被多个用户同时调用的程序:必须是纯代码,要求调用者提供工作区。共三百九十五页2.2 进程(jnchng)控制作业5:原语操作的定义:是指由若干条指令组成、用来实现某个特定操作的一个过程,其执行具有原子性,即原语在执行过程中不允许被中断,常驻内存,在核心(hxn)态下运行。共三百九十五页2.2.1 进程的创建:fork()、Cre
17、ateProcess()(1)进程图:描述一个进程的家族关系的有向图。(2)引起创建进程的事件:用户登录,作业调度,提供服务和应用请求。(3)进程的创建:申请(shnqng)空白PCB,为新进程分配资源,初始化PCB,将新进程插入就绪队列。(4)进程的创建请求系统为一个程序分配一个工作区和建立一个进程控制块。2013.3.22 计算机共三百九十五页当进程创建新进程时,有两种执行可能:(1)父进程与子进程并发执行(2)父进程等待,直到某个或全部(qunb)子进程执行完。新进程的地址空间也有两种可能(1)子进程是父进程的复制品(具有与父进程相同的程序和数据)(2)子进程装入另一个新程序共三百九十五
18、页2.2.2 进程的终止(1)引起进程终止的事件:正常结束,异常结束和外界干预(gny)。(2)进程的终止过程:检索PCB,判断状态,撤销子进程,归还资源,清空PCB。(3)进程的撤消,系统收回该进程所用的工作区,取消进程控制块。Exit()、TerminatePorcess()共三百九十五页父进程终止其子进程的原因(1)子进程使用了超过它所分配(fnpi)到的一些资源(2)分配给子进程的任务已不再需要(3)父进程退出,如果父进程终止,操作系统不允许子进程继续。级联终止Cascading termination。VMS。共三百九十五页2.2.3 进程(jnchng)的阻塞与唤醒sleep()和
19、wakeup()(1)引起进程阻塞和唤醒的事件:请求系统服务,启动某种操作,新数据尚未到达和无新工作可做。(2)进程阻塞过程:是正在执行的进程的一种主动行为。(3)进程唤醒过程:2.2.4 进程的挂起与激活:交换进程(0号进程,sched)(1)进程的挂起;从内存置换到外存。(2)进程的激活过程:重新调入内存。共三百九十五页2.3 进程同步与互斥2.3.1 进程同步的基本概念并发进程间的关系可以(ky)是无关的,也可以(ky)是有交往的。独立进程或协作进程。 1、两种制约关系: 间接制约关系:互斥进程互斥是指当有若干个进程使用某一共享资源时,任何时刻最多只允许一个进程使用,而其他要使用该资源的
20、进程必须等待,直到占用资源者释放该资源。是进程间竞争共享资源的使用权,没有固定的必然关系。利用公用信号量共三百九十五页直接制约关系:同步进程同步是指并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,直到消息到达才被唤醒(hunxng)。涉及共享资源的并发进程之间有一种必然的依赖关系。利用私用信号量。共三百九十五页作业6:进程(jnchng)间同步和互斥的含义各是什么?不允许两个以上共享临界资源的并发进程同时进入临界区的现象称为互斥。进程同步是指在异步环境下的一组并发进程因直接制约而相互发送消息导致的各个(gg)进程相互使用、相互等待,
21、使得各个(gg)进程按一定的速度执行的现象称为进程间的同步共三百九十五页 同步与互斥的混合问题:进程的互斥是进程间竞争共享资源的使用权,这种竞争没有固定的必然关系;进程同步,涉及共享资源的并发进程之间有一种必然的依赖关系。 race condition竞争条件:多个内核进程同时活动,会发生竞争条件。如打开文件的内核数据结构,内存分配的数据结构,维护(wih)进程列表及处理中断处理程序的数据结构。共三百九十五页 非抢占内核式的系统中不会导致竞争(jngzhng)条件,抢占内核的系统可能会导致竞争(jngzhng)条件。抢占内核比非抢占内核更受欢迎。Windows XP和Windows 2000为
22、非抢占式内核,传统的Unix和Linux 2.6以前的内核也是非抢占式的。Linux 2.6以后,商用Unix、Solaris是抢占内核共三百九十五页2、临界资源:一次只允许一个进程使用的资源。打印机、磁带机、消息缓冲队列、变量、数组、缓冲区等。又称独享资源。 3、临界区:实现(shxin)互斥的方法:软件和硬件方法1965年Dijkstra(狄克斯特拉)提出的临界段设计原则4、同步机制的规则:空闲让进,忙则等待,有限等待和让权等待。(在单处理机系统中是必须的,在多处理机系统中不是必须的) 共三百九十五页实现同步(tngb)的几种方法1、禁止中断:只适合单处理器环境,会出现饿死。2、TestA
23、ndSet Lock指令:不可分的原子操作(cozu),可适用于多处理器环境。Boolean TestAndSet(boolean locked) if(locked) return true; else locked=true; return false; 共三百九十五页TSL算法(sun f)Enter_region: TSL REGISTER,LOCK复制乐到寄存器并将锁设为1 CMP REGISTER,#0 JNE enter_region若不是0,说明锁已被设置,所以循环 RET 返回调用者,进入(jnr)了临界区Leave_region: MOVE LOCK,#0 在锁中存入0 R
24、ET 返回调用者共三百九十五页3、Swap指令(zhlng) boolean void Swap(boolean a,boolean b) boolean temp; temp=b; b=a; a=temp; 共三百九十五页Swap算法(sun f)Do key=TRUE; swap(&lock,&key); critical section; lock=FALSE; remainder section; while(TRUE);共三百九十五页4、Dekker算法(sun f)和Peterson算法(sun f):基于软件的两个进程间的通信。 Bakery算法,用于N个进程间的通信共三百九十五
25、页Peterson解法(ji f)#define FALSE 0#define TRUE 1#define N 2 ;进程数量Int turn;现在轮到谁Int interestedN;所有值初始化为0,即FALSE;Void enter_region(int process);进程是0或1 int other;其他进程号 other=1-process;另一方进程 interestedprocess=TRUE;表明所感兴趣的 turn=process;设置标志(biozh) while(turn=process&interestedother=TRUE); Void leave_region
26、(int process)进程:谁离开? interestedprocess=FALSE;表示离开临界区共三百九十五页Peterson算法(sun f)中Pi的结构Do flagi=TRUE; turn=j; while(flagj&turn=j); 临界(ln ji)区; flagi=FALSE; 剩余区; while(TRUE);共三百九十五页2.3.2 信号量机制 1、整型信号量:P、V操作 wait(s):while s=0 do nothing; s=s-1;信号量的值不可能取负值。 signal(s):s=s+1;又称简单信号量,二元信号量,二进制信号量,互斥锁。缺点(qudin)
27、:忙等待方式busy waiting,自旋锁(优点:不进行上下文切换,常用于多处理系统)2013.3.24网络共三百九十五页2、记录型信号量: struct semaphore int:value; struct process *L; s; wait(s): s.value=s.value-1; if s.value0 then block(s.L);信号量的递减和测试次序的互换,其值可取(kq)负值。 signal(s):s.value=s.value+1; if s.value=0 then wakeup(s.L);又称计数信号量,资源信号量,用来控制m个进程访问某一类n个临界资源。共三
28、百九十五页作业7:记录型信号量的物理含义(hny):例:设有n个进程共享一个程序段,对于如下两种情况:(1)如果每次只允许一个进程进入该程序段。(2)如果每次最多允许m个进程(m0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义信号量的含义。要求用伪代码描述。 共三百九十五页答案:定义信号量S1控制P1与P2之间
29、的同步;S2控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序(chngx)如下: Var s1=0,s2=0,empty=N,mutex=1; Parbegin P1:begin X=produce(); /*生成一个数*/ P(empty);/*判断缓冲区是否有空单元*/ P(mutex); /*缓冲区是否被占用*/ put(x); If x%2=0 V(s2); /*如果是偶数,向P3发出信号*/ else V(s1); /*如果是奇数,向P2发出信号*/ V(mutex); /*使用完缓冲区,释放*/ 共三百九十五页P2:begi
30、n P(s1); /*收到P1发来的信号(xnho),已产生一个奇数*/ P(mutex); /*缓冲区是否被占用*/ Getodd(); Countodd():=coutodd()+1; V(mutex); /*释放缓冲区*/ V(empty); /*向P1发信号,多出一个空单元*/ End. 共三百九十五页P3:begin P(s2); /*收到P1发来的信号,已产生一个偶数*/ P(mutex); /*缓冲区是否被占用(zhn yn)*/ Geteven(); Counteven():=counteven()+1; V(mutex); /* 释放缓冲区*/ V(empty); /*向P1
31、发信号,多出一个空单元*/End.Parend.共三百九十五页2.4.2 读者和写者问题:一直用来测试几乎所有新的同步原语。多个用户(yngh)共享数据库系统的建模问题。有多种不同的策略,都与优先级有关。 1、读者优先:第一读者-写者问题,写者可能饥饿。 2、排队策略或先来先服务 3、写者优先:第二读者-写者问题,读者可能饥饿。 4、某个进程即是写者又是读者的问题共三百九十五页例:设有P1,P2,P3三个进程共享某一资源F,P1对F只读不写,P2对F只写不读,P3对F先读后写。当一个(y )进程写F时,其他进程对F不能进行读写,但多个进程同时读F是允许的。试用P、V操作正确实现P1,P2,P3
32、的同步互斥。要求:(1)正常运行时不产生死锁(2)使用F的并发度要高。(北京大学1996年研究生试题) 共三百九十五页解:本题实际上是一个读者和写者问题,P1是一个读者,P2是一个写者,为了使F的并发度较高,将P3先看成读者,当其完成读操作后,再将其看成写者。 定义(dngy)如下变量: int readcount=0; semaphore rmutex=1,mutex=1; 共三百九十五页P1( ) While(1) P(rmutex); If(readcount=0)P(mutex); Readcount+; V(rmutex); 读F; P(rmutex); Readcount-; If
33、(readcount=0)V(mutex); V(rmutex);共三百九十五页P2() While(1) P(mutex); 写F; V(mutex);共三百九十五页P3() While(1) P(rmutex); If(readcount=0)P(mutex); Readcount+; V(rmutex); 读F; P(rmutex); Readcount-; If(readcount=0)V(mutex); V(rmutex); P(mutex); 写F; V(mutex); 共三百九十五页2.4.3 哲学家进餐问题:是一个并发控制问题,在多个进程之间分配(fnpi)多个资源且不会出现死
34、锁和饥饿的问题。方法: 1、同时允许四个哲学家提出进餐要求 2、同时去拿起两边的筷子 3、使用非对称解决方法,奇数号哲学家先拿左边的筷子,偶数号哲学家先拿右边的筷子注意:没有死锁的解决方案并不能消除饿死的可能性。共三百九十五页2.4.4 理发师嗜睡问题 一个理发店由一个有N张椅子的等候室和一个放有一张理发椅的理发室组成。若没有要理发的顾客,则理发师就去睡觉,若一个顾客走进理发店且所有的椅子都被占用了,则该顾客就离开理发店,若理发师正在为人理发,则该顾客就找一张空椅子坐下等待,若理发师在睡觉,则顾客就唤醒他。 试用(shyng)信号量设计一个协调理发师和顾客的程序。(西安电子科技大学2000年研
35、究生试题) 共三百九十五页解:本题中,顾客进程和理发师进程之间存在着多种同步(tngb)关系:(1)只有在理发椅空闲时,顾客才能坐到理发椅上等待理发师理发,否则顾客便必须等待;只有当理发椅上有顾客时,理发师才可以开始理发,否则他也必须等待。这种同步关系类似于单缓冲(理发椅)的生产者和消费者问题中的同步关系,故可以通过信号量empty(初值为1)和full(初值为0)来控制。(2)理发师为顾客理发时,顾客必须等待理发的完成,并在理发完成后由理发师唤醒他,这可单独使用一个信号量cut来控制,初值为0。 共三百九十五页(3)顾客理完发后必须向理发师付费,并等理发师收费后顾客才能离开;而理发师则需等待
36、顾客付费,并在收费后唤醒顾客以允许他离开,这可分别通过两个信号量payment和receipt来控制,初值都为0。(4)等候室中的N张沙发是顾客进程竞争的资源,故还需为它们设置了一个资源信号量sofa,初值为n(5)为了控制顾客的人数(rn sh),使顾客能在所有的沙发都被占用时离开理发店,还必须设置一个整型变量count来对理发店中的顾客进行计数,该变量将被多个顾客进程互斥地访问并修改,这可通过一个互斥信号量mutex来实现,初值为1共三百九十五页Guestbegin wait(mutex); if(countN)then begin signal(muetx); 离开(l ki)理发店;
37、end else begin共三百九十五页 count=count+1; if(count1) then begin wait(sofa); 在沙发(shf)中就座; wait(empty); 从沙发上起来; signal(sofa); end else /*count=1*/ wait(empty); 在理发椅上就座; signal(full); wait(cut);共三百九十五页 理发(l f); 付费; signal(payment); wait(receipt); 从理发椅上起来; signal(empty); wait(mutex); count=count-1; signal(mu
38、tex); 离开理发店; end end共三百九十五页barber:begin repeat wait(full); 替顾客(gk)理发; signal(cut); wait(payment); 收费; signal(receipt); until false; endparendend 共三百九十五页2.4.5 “吸烟者”问题。假设一个系统有3个吸烟者(smoker)进程和一个供货商(Agent)进程。每个吸烟者连续不断地制造香烟并吸掉它。 但是,制造一支香烟需要3种材料烟、纸、火柴。一个吸烟者进程有纸,另一个有烟,第三个有火柴。供货商进程可以无限地提供这3种材料。供货商将这这两种材料一起放
39、在桌上,持有另一种材料的吸烟者即可制造一支香烟并吸掉它。当此吸烟者抽香烟时,它发出一个信号通知供货商进程,供货商马上给出另外两种材料,如此循环往复(xn hun wng f)。试编写一个程序使供货商和吸烟者同步执行。共三百九十五页解法:semaphore smoker30; 三个吸烟者semaphore material30; 三种(sn zhn)原料semaphore agent1; 供应商int turn=0;轮到谁Main()CobeginAgent While(1) P(agent); 放原料; V(smokerturn); V(material(turn+1)%3); V(mater
40、ial(turn+2)%3); turn=(turn+1)%3共三百九十五页Smoker_i While(1) P(smokeri); P(material(i+1)%3); P(material(i+2)%3); 制作(zhzu)香烟; 吸烟; V(agent); coend;共三百九十五页变型(bin xn)1抽烟问题:有一个烟草代理和三个抽烟者。抽烟者若要抽烟,必须具有烟叶、烟纸和火柴。三个抽烟者中,一人缺烟叶、一人缺烟纸、一人缺火柴。烟草代理会源源不断地分别供应烟叶、烟纸和火柴,并将它们放在桌上。如果放的是烟叶,则缺烟叶的抽烟者拾起烟叶,制作香烟,然后(rnhu)抽烟;其他类推。试用信
41、号量同步烟草代理和三个抽烟者。共三百九十五页解法:semaphore smoker30; 三个吸烟者semaphore material30; 三种原料semaphore agent1; 供应商int turn=0;轮到谁Agent While(1) P(agent); 放原料; V(smokerturn); V(material(turn+1)%3); 制作(zhzu)香烟; 吸烟; turn=(turn+1)%3共三百九十五页Smoker_i While(1) P(smokeri); P(material(i+1)%3); 制作(zhzu)香烟; 吸烟; V(agent); 共三百九十五页
42、变型(bin xn)2有一间酒吧里有3个音乐爱好者队列,第1队的音乐爱好者只有随身听,第2队只有音乐磁带,第3队只有电池。而要听音乐就必须随身听、音乐磁带和电池这3种物品俱全。酒吧老板一次出售这3种物品中的任意两种。当一名音乐爱好者得到这3种物品并听完一首乐曲后,酒吧老板才能再一次出售这3种物品中的任意两种,于是第2名音乐爱好者得到这3种物品,并开始(kish)听乐曲。全部买卖就这样进行下去。试用P、V操作正确解决这一买卖。(北京大学1999年研究生试题)共三百九十五页变型(bin xn)3(桔子汁生产线问题)现有三个生产者P1 、P2 、P3 ,他们都要生产水,每个生产者都已分别购得两种不同
43、原料,待购得第三种原料后就可配制成桔子水,装瓶出售。有一供应商能源源不断地供应糖、水、桔子精,但每次只拿出一种原料放入容器(rngq)中供给生产者。当容器(rngq)中有原料时需要该原料的生产者可取走,当容器(rngq)空时供应商又可放入一种原料。假定:生产者P1已购得糖和水;生产者P2 已购得水和桔子精;生产者P3 已购得糖和桔子精;试用:信号量与P 、V 操作,写出供应商和三个生产者之间能正确同步的程序 共三百九十五页2.4.6 银行排队问题(北京大学2000)银行有n个柜员,每个顾客(gk)进入银行后先取一个号,并且等着叫号,当一个柜员空闲后,就叫下一个号。解:将顾客号码排成一个队列,顾
44、客进入银行领取号码后,将号码由队尾插入;柜员空闲时,从队首取得顾客号码,并且为这个顾客服务,由于队列为若干进程共享, 所以需要互斥.柜员空闲时,若有顾客,就叫下一个顾客为之服务.因此,需要设置一个信号量来记录等待服务的顾客数.共三百九十五页Cobegin var mutex=1,customer_count=0:semaphore; cobegin process customer begin repeat 取号码; p(mutex); 进入(jnr)队列; v(mutex); v(customer_count); until false; end共三百九十五页process servers_
45、i(i=1,.,n)begin repeat p(customer_count); p(mutex); 从队列(duli)中取下一个号码; v(mutex); 为该号码持有者服务; until falseendCoend共三百九十五页变型(bin xn)-面包师问题面包店有很多面包,由n个销售人员推销。每个顾客进店后先取一个号,并且等待叫号。当一个销售人员空闲下来(xi li)时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。共三百九十五页2.4.7 交通(jiotng)问题有桥如图示:(北京大学(bi jn d xu)1992年研究生试题)桥北南共三百九十五页车流如箭头(jintu)所
46、示。桥上不允许两车交会,但允许同方向车辆依次通行(即桥上可以有多个同方向的车)。用P、V操作实现交通管理以防止桥上堵塞。解:设置countA和countB表示由南往北、由北 往南已在桥上行驶的汽车数目,初值为0,设置SA表示对countA的互斥,初值为1 ,设置SB表示对countB的互斥,初值为1,设置mutex表示对桥的互斥,初值为1共三百九十五页P1:由南往北行驶(xngsh)到桥头; P(SA);If(countA=0)P(mutex);countA+;V(SA);过桥;P(SA); countA-; if(countA=0)V(mutex);V(SA);共三百九十五页P2:由北往南行
47、驶(xngsh)到桥头; P(SB);If(countB=0)P(mutex);countB+;V(SB);过桥;P(SB); countB-; if(countB=0)V(mutex);V(SB);共三百九十五页管程机制(jzh)(略)1、管程的定义:是由一组局部的变量对局部变量进行(jnxng)操作的一组过程以及对局部变量进行(jnxng)初始化的语句序列构成的一个软件模块。可用来实现进程同步。Type monitor_name=monitor variable declarations; procedure entry P1(); begin end; procedure entry P
48、n(); begin end;Begin initialization code;end共三百九十五页管程的特点(tdin)1、管程内的局部变量只能被局限于管程内的过程所访问;反之亦然,即局部于管程内的过程只能访问管程内的变量。2、任何(rnh)进程只能通过调用管程提供的过程入口进入管程3、任一时刻,最多只能有一个进程在管程中执行。 保证进程互斥进入管程是由编译器负责,即管程是一种编程语言的构件,它的实现需要编译器的支持。共三百九十五页管程解决(jiju)生产者消费者问题先建立(jinl)一个管程。Type P_C=monitor var in,out,count:integer; buffe
49、r:array0.n-1 of item; notfull,notempty:condition; procedure entry put(var product:item) begin if count=n then notfull.wait bufferin:=product; in:=(in+1) mod n; count:=count+1; notempty.signal end共三百九十五页 procedure entry get(var product:item) begin if count0,该进程继续执行;若S0,则阻塞该进程,并把它插入该信号量对应的阻塞队列中,重新进程调度
50、。共三百九十五页10、叙述进程和程序的主要区别。解:进程和程序是既有联系又有区别的两个概念,它们的主要区别如下:(1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态概念。(2)程序的存在是永久的。而进程是有生命期的,它因创建而产生,因调度(diod)而执行,因得不到资源而暂停,因撤消而消亡。(3)程序仅是指令的有序集合。而进程则由程序、数据和进程控制块组成。(4)进程与程序之间不是一一对应的,即同一程序同时运行若干个不同的数据集合上,它将属于若干个不同的进程;而一个进程可以执行多个程序。共三百九十五页1、桌上有一空盘,允许
51、存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。 规定:当盘空时一次只能(zh nn)放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。共三百九十五页分析:本题中,爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子吃,女儿必须等待,若放入果盘中的是苹果(pnggu),则允许女儿吃,儿子必须等待。本题实际是生产者消费者问题的一种变形。这里,生产者放入缓冲区产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。共三百九十五页解:本题中,
52、应设置三个信号量s,so,sa,信号量s表示盘子(pn zi)是否为空,其初值为1,信号量so表示盘中是否有桔子,其初值为0,信号量sa表示盘中是否有苹果,其初值为0。同步描述如下: var s,sa,so:integer=1,0,0; father:begin p(s); 将水果放入盘中; if(放入的是桔子)v(so); else v(sa); end;共三百九十五页 son:begin p(so); 从盘中取出桔子; v(s); 吃桔子; end共三百九十五页 daughter:begin p(sa); 从盘中取出苹果(pnggu); v(s); 吃苹果; end共三百九十五页2、(北京
53、大学94年试题) 进程A1,A2,An1通过(tnggu)m个缓冲区向进程B1,B2,Bn2不断地发送消息。发送和接收工作遵循如下规则:(1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度;共三百九十五页(2)对每一个消息,B1,B2,Bn2都必须各接收一次,读入各自的数据区内。(3)m个缓冲区都满时,发送进程等待,没有可读的消息时,接收进程等待。试用P、V操作组织正确(zhngqu)的发送和接收工作。共三百九十五页分析:本题是生产者消费者问题的一个变形,一组生产者和一组消费者共用m个缓冲区,每个缓冲区只要写一次,但需要读n2次。所以,我们可以把这一组缓冲区看成n2组缓冲
54、区,每个发送者需要同时写n2组缓冲区中相应(xingyng)的n2个缓冲区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。共三百九十五页解:本题中,应设置一个(y )信号量mutex实现诸进程对缓冲区的互斥访问;两个信号量数组emptyn2和fulln2描述n2组缓冲区的使用情况。mutex的初值为1;数组empty中的元素初值为m;数组full中的元素初值为0。其同步描述如下: var mutex,emptyn2=m,fulln2=0:integer; mutex=1; for(i=0;i=n2-1;i+) emptyi=m; fulli=0; 共三百九十五页 send:begin
55、 for(i=0;i=n2-1;i+) p(emptyi); p(mutex); 将消息(xio xi)放入缓冲区; v(mutex); for(i=0;i=n2-1;i+) v(fulli); end;共三百九十五页 receive_i:begin p(fulli); p(mutex); 将消息(xio xi)从缓冲区取出; v(mutex); v(emptyi); end; 共三百九十五页Ai:begin repeat send(); until false; end Bi:begin repeat receive(i); until false; end共三百九十五页3、(北京大学90年
56、试题)(略) (1)写出P、V操作的定义 (2)有三个进程PA、PB和PC合作(hzu)解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次,复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录大小。请用P、V操作来保证文件的正确打印。共三百九十五页解:(2)本题(bnt)中:进程PA、PB和PC之间的关系为:PA与PB共用一个单缓冲区,而PB又与PC共用一个单缓冲区,其合作方式如图示: 从磁盘读入复制缓冲区1缓冲区2PAPCPB打印共三百九十五页 当缓冲区1为空时,PA可将一个记
57、录读入其中,若缓冲区1中有数据且缓冲区2为空,PB可将记录从缓冲区1复制到缓冲区2中;若缓冲区2中有数据,则进程PC可打印记录。其他条件下,相应进程必须等待(dngdi)。实际上,这是一个生产者消费者问题。(PB既是生产者又是消费者)共三百九十五页 为遵循这一同步规则。应设置四个信号量empty1、empty2、full1、full2,信号量empty1和empty2分别表示缓冲区1及缓冲区2是否为空,其初值为1;信号量full1和full2分别表示缓冲区1和缓冲区2是否有记录可供处理,其初值为0。其同步描述(mio sh)如下: 初始化;共三百九十五页 PA:begin repeat 从磁盘
58、读一个(y )记录; p(empty1); 将记录存入缓冲区1; v(full1); until false; end共三百九十五页 PB:begin repeat p(full1); 从缓冲区1取出记录(jl); v(empty1); p(empty2); 将记录存入缓冲区2; v(full2); until false; end共三百九十五页PC:begin repeat p(full2); 从缓冲区2中取出记录(jl); v(empty2); 打印记录; until false end共三百九十五页中国(zhn u)矿大20044、P、V操作实现进程同步与互斥(40分)(1)P、V操作是
59、原语,用类似C(或C+,或Pascal,或Java)写出信号量和V操作的定义(5分)(2)针对您写出的V操作,说明(shumng)为什么V操作要求是原语?(10分)(3)使用P、V操作实现临界区的管理,S是信号量,说明S初始值为1,S值小于0,等于0的物理意义(5分)共三百九十五页(4)有三个并发进程:R负责从输入设备读入信息单元逐个放到缓冲区B1,B1由两个单元构成;M负责从B1缓冲区逐个读出信息单元,对信息加工处理后放入缓冲区B2,B2由两个单元构成;P负责从缓冲区B2逐个打印输出信息单元。使用P、V操作实现它们之间的同步。(20分)(设置您需要的信号量,指出它们的初始值,画出利用(lyn
60、g)P、V操作实现它们的同步的流程)共三百九十五页中国(zhn u)矿大20035、 有一个盆子可以放两个水果(两个苹果、或两个桃子、或一个苹果和一个桃子)。父亲不停地向盆子每次只放一个苹果,母亲不停地向盆子每次只放一个桃子;儿子从盆子只取一个苹果,消费(xiofi)完继续取一个苹果消费(xiofi);女儿从盆子只取一个桃子,消费(xiofi)完继续取一个桃子消费(xiofi)。 用P、V操作实现上述四个人的同步与互斥。共三百九十五页中国(zhn u)矿大20056、 有10个计算进程P1,P2,P10,它们负责各自的计算,计算完成后必须把一个单元的计算结果依次写入缓冲区B的一个单元,然后,继
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国羊毛球数据监测研究报告
- 2025年中国钳式起钉器市场调查研究报告
- 2025年中国CISCO网络产品市场调查研究报告
- 2024版通讯器材购销合同3篇
- 2025年度大型活动场地租赁及服务合同4篇
- 2025年PVC管道产品检测与质量保证服务合同范本3篇
- 2025年消防给水系统设备及工程安全防护合同3篇
- 2025年度餐饮股份合作人力资源合作协议3篇
- 2024版跨国投资风险共保协议版B版
- 二零二五版国有控股企业股权置换与混合所有制改革合同3篇
- 《消防设备操作使用》培训
- 新交际英语(2024)一年级上册Unit 1~6全册教案
- 2024年度跨境电商平台运营与孵化合同
- 2024年电动汽车充电消费者研究报告-2024-11-新能源
- 湖北省黄冈高级中学2025届物理高一第一学期期末考试试题含解析
- 上海市徐汇中学2025届物理高一第一学期期末学业水平测试试题含解析
- 稻壳供货合同范本
- 《采气树基础知识》课件
- 超龄员工用工免责协议书
- 机械工程师招聘笔试题及解答(某大型国企)
- 软件运维考核指标
评论
0/150
提交评论