信号量机制例题集2
OS进程同步(信号量典型题)
例题1(北京大学1999年)有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大,但要求:(1)一次只能存人一种产品((A或B);(2)一N< A产品数量一B产品数量<M其中,N和M是正整数。
试用“存放A’和‘存放B’以及P操作和V操作描述产品A和产品B的人库过程。
解答:应先将表达式转换成制约条件,不可在程序中直接使用该表达式将表达式分解为:B产品数量—A产品数量<NA产品数量—B产品数量<M可这样理解:(1)若只放人A产品,而不放入B产品,则A产品最多可放M—1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为M—1),当计数器值为0时,进程程A被阻塞;每当放入一个B产品,则可令A产品的计数器增加1,表明A产品可以多一次放入产品的机会;同理,(2)若只放人B产品,而不放入A产品,则B产品最多可;放N一1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为N—1)。
当计数器值为0时,进程B被阻塞;每当放人一个A产品,则可令B产品的计数器增加1,表明B产品可以多一次放入产品的机会。
由此可见,该问题是一个同步控制问题。
又因为一次仅允许一种产品人库,设置信号量mutex控制粮进程互斥访问临界资源(仓库)。
过程如下:beginmutex:=1;Sa := M-1;Sb := N-1;ParbeginA产品beginrepeatP (Sa);P (mutex);A人库;V (mutex);V (Sb);Until false;End;B产品beginrepeatP (Sb);P (mutex);B人库;V (mutex);V (Sa);Until false;End;rend;例题2(华中理工大学1999年试题)设公共汽车上,司机和售票员的活动分别是:司机:售票员:启动车辆上乘客正常行车关车门到站停车售票开车门下乘客在汽车不断地到站,停车,行驶过程中,这两个活动有什么同步关系?并用信号灯的P, V操作实现它们的同步。
信号量机制例题集2
爸爸,妈妈,儿子,女儿
Var mutex,apple,banana:Semaphore:=1,0,0;son() Main() { while (true) { cobegin { p(banana);从盘子取香蕉; v(mutex); Father();mother();son();daugher(); 吃香蕉;} Coend } } Father() { while (true) {p(mutex); 将苹果放入盘子;v(apple);} daugher() { while (true) } { p(apple);从盘子取苹果; v(mutex); Mother() 吃苹果;} { while (true) } { p(mutex);将香蕉放入盘子;v(banana);} } 返回
Use() { while(true) { p (full) ;
p(count) ; P(mutex2) ;
从缸中取水;
v (mutex2) ; v(empty) ; v (count) ;
} } 返回
信号量机制例题:理发师
• 理发店里有一位理发师,一把理发椅,n把 侯等待理发的顾客坐的椅子。如果没有顾 客,理发师便在理发椅上睡觉,当一个顾 客到来时,他必须叫醒理发师。如果理发 师正在理发时又有顾客来到,那么,如果 又有空椅子可坐,顾客就坐下等待,否则 就离开理发店。
Else { p(sb); p(mutex); 将产品入库; v(mutex); v(sa);
返回
信号量机制例题:阅览室
有一个阅览室,共有100个座位,读者进入 时必须在一张登记表上登记,该表为每一座 位列一表目,包括做好和读者姓名等,读者 离开时要削掉登记的信息。
阅览室
Semaphore mutex=1;seats=100;readers=0 getin() { while(true) { p(seats); p(mutex); 填写登记表; 进入阅览室读书; v(mutex); v(readers); } }
习题册第二章参考答案
习题集第二章参考答案一、单项选择题1、 D2、 D3、 B4、 D5、 C6、 B7、 A 8、 B9、 C10、 B11、 C12、 B13、 D14、 C15、 D16、 A17、 B18、 A19、 B20、 D21、 C22、 D23、 B24、 D25、 D26、 B27、 C28、 B29、 A30、 B31、 A32、 B33、 A34、 C二、填空题1 进程2 就绪执行阻塞3 等待的事件发生的4 进程控制块5 进程控制块(或PCB)6 99 1 1007 就绪8 静止阻塞9 阻塞就绪10 共享存储器,管道通信,消息传递11 信号量12 [1-n,1]13 进程控制块(PCB)14 同步互斥信号量15 wait(mutex)signal(mutex)16 顺序性,封闭性,可再现性17 并发18 临界区19 wait, signal20 1,(1-n)或-(n-1)21 722 wait signal23 阻塞就绪三、判断题×√1×2√3×4×5×6×7√8×9×10√11√12×13√四、简答题1、解释进程的顺序性和并发性。
答:进程的顺序性是指进程在顺序的处理器上的执行是严格按序的,只有在前一个操作结束后才能开始后继操作。
进程并发性是指一组进程可以轮流占用处理器,一个进程的工作没有全部完成之前,另一个进程就可开始工作。
把这样的一组进程看做是同时执行的,把可同时执行的进程称为并发进程。
所以,进程的顺序性是对每个进程而言的,进程的并发性是对一组具有顺序性的进程而言的。
一组进程并发执行时各进程轮流占用处理器交替执行,占用处理器的进程按各自确定的顺序依次执行指令。
2、简述进程与程序的区别和联系。
答:区别:(1)进程能真实地描述并发,而程序不能。
(2)动态性是进程的基本特征,进程实体具有创建、执行和撤销的生命周期,而程序只是一组有序指令的集合,存放在某种介质上,是静态的。
计算机操作系统(习题集)第二章 答案
第二章进程管理一、单项选择题1、在单一处理机上执行程序,多道程序的执行是在(B)进行的。
A.同一时刻B. 同一时间间隔内C.某一固定时刻D. 某一固定时间间隔内2、引入多道程序技术后,处理机的利用率( C)。
A.降低了B. 有所改善C.大大提高D. 没有变化,只是程序的执行方便了3、顺序程序和并发程序的执行相比,( C)。
A.基本相同 C.并发程序执行总体上执行时间快B. 有点不同 D.顺序程序执行总体上执行时间快4、单一处理机上,将执行时间有重叠的几个程序称为(C )。
A.顺序程序B. 多道程序C.并发程序D. 并行程序5、进程和程序的本质区别是(D )。
A.存储在内存和外存 B.顺序和非顺序执行机器指令C.分时使用和独占使用计算机资源D.动态和静态特征6、进程就是程序在并发环境中的执行过程,它是系统进行资源分配和调度的一个基本单位。
进程具有[1A]、[2D]、调度性、异步性和结构性等基本特征。
进程是一次执行过程,具有生命期体现了进程的[1]特征。
进程由程序段、[3B]、[4C]组成,其中[4]是进程在系统中存在的唯一标识。
供选择的答案:[1][2] :A、动态性 B、静态性 C、共行性 D、并发性 E、可执行性 F、易用性[3] :A、过程 B、数据 C、进程标识符 D、函数[4] :A、FCB B、FIFO C、PCB D、JCB7、进程执行时的间断性,决定了进程可能具有多种状态。
进程的基本状态有三种,在分时系统中,当一个进程拥有的时间片到时,则该进程即由[1D]进入[2A]。
如果出现因某种原因使得处理机空闲时,则需要从就绪队列中选择一进程,并将处理机分配给它,此时该进程进入[3D],这个过程是由[4C]来完成。
供选择的答案:[1][2][3] :A、就绪状态 B、静止状态 C、阻塞状态 D、运行状态[4] :A、进程控制程序B、资源分配程序C、进程调度程序 D、处理机分配程序8、为了描述进程的动态变化过程,采用了一个与进程相联系的(C ),根据它而感知进程的存在。
信号量的PV操作(例题)汇总
???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。
参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。
V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。
PV操作的物理含义:信号量S值的大小表示某类资源的数量。
当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。
每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。
每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。
无论以上哪种情况,执行V操作的进程都可继续运行。
1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。
设两个信号量S和C,初值为S=0;C=0;司机:L1:正常行车售票员:L2:售票到站停车P(S)V(S)开车门P(C)关车门启动开车V(C)GO TO L1 GO TO L22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。
爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。
(2)桌上一个盘子,只能放一只水果。
操作系统信号量例题
操作系统信号量例题信号量是操作系统中用于同步和互斥的一种机制。
它可以用于进程间的通信和资源的管理。
下面我将从多个角度来回答关于操作系统信号量的例题。
1. 什么是信号量?信号量是一个整数变量,用于控制对共享资源的访问。
它可以是二进制信号量(取值为0或1)或计数信号量(取值大于等于0)。
二进制信号量用于互斥访问共享资源,计数信号量用于控制资源的数量。
2. 信号量的基本操作有哪些?常见的信号量操作有P操作(等待操作)和V操作(发送操作)。
P操作用于申请资源,如果资源不可用,则进程将被阻塞。
V操作用于释放资源,使得其他等待资源的进程可以继续执行。
3. 请举个例子说明信号量的使用场景。
假设有一个共享资源,比如打印机,多个进程需要使用它。
为了避免冲突,可以使用信号量来进行控制。
当一个进程要使用打印机时,它需要执行P操作来申请打印机资源,如果打印机正在被其他进程使用,则该进程将被阻塞。
当打印机空闲时,进程执行V操作释放打印机资源,其他等待资源的进程可以继续执行。
4. 信号量如何实现互斥?互斥是指只允许一个进程访问共享资源。
可以使用二进制信号量来实现互斥。
当一个进程要访问共享资源时,它执行P操作申请资源,如果资源已经被其他进程占用(信号量的值为0),则该进程被阻塞。
当资源被释放时,执行V操作使得等待资源的进程可以继续执行。
5. 信号量如何实现同步?同步是指多个进程按照一定的顺序执行。
可以使用计数信号量来实现同步。
例如,有两个进程A和B,进程A需要等待进程B完成某个操作后才能继续执行。
可以使用一个计数信号量来控制,初始值为0。
进程A执行P操作等待信号量,进程B完成操作后执行V 操作释放信号量,进程A才能继续执行。
6. 信号量的优缺点是什么?信号量的优点是可以实现进程间的同步和互斥,避免竞态条件和资源冲突。
它是一种简单而有效的机制。
然而,信号量也存在一些缺点。
例如,信号量的使用需要谨慎,如果使用不当可能导致死锁或活锁的发生。
信号量地PV操作(例题)
???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。
参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。
V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。
PV操作的物理含义:信号量S值的大小表示某类资源的数量。
当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。
每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。
每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。
无论以上哪种情况,执行V操作的进程都可继续运行。
1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。
设两个信号量S和C,初值为S=0;C=0;司机: L1:正常行车售票员: L2:售票到站停车 P(S)V(S)开车门P(C)关车门启动开车 V(C)GO TO L1 GO TO L22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。
爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。
(2)桌上一个盘子,只能放一只水果。
【转】进程同步之信号量机制(pv操作)及三个经典同步问题
【转】进程同步之信号量机制(pv操作)及三个经典同步问题上篇博客中(),我们对临界区,临界资源,锁机制详细解读了下,留下了⼀个问题,就是锁机制只能判断临界资源是否被占⽤,所以他解决了互斥问题,但是他不能确定前⾯的进程是否完成,所以他不能⽤于同步问题中。
下⾯就为你讲解信号量机制是如何解决这⼀问题的。
1.信号量机制信号量机制即利⽤pv操作来对信号量进⾏处理。
什么是信号量?信号量(semaphore)的数据结构为⼀个值和⼀个指针,指针指向等待该信号量的下⼀个进程。
信号量的值与相应资源的使⽤情况有关。
当它的值⼤于0时,表⽰当前可⽤资源的数量;当它的值⼩于0时,其绝对值表⽰等待使⽤该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
⼀般来说,信号量S³0时,S表⽰可⽤资源的数量。
执⾏⼀次P操作意味着请求分配⼀个单位资源,因此S的值减1;当S<0时,表⽰已经没有可⽤资源,请求者必须等待别的进程释放该类资源,它才能运⾏下去。
⽽执⾏⼀个V操作意味着释放⼀个单位资源,因此S的值加1;若S£0,表⽰有某些进程正在等待该资源,因此要唤醒⼀个等待状态的进程,使之运⾏下去。
2.PV操作什么是PV操作?p操作(wait):申请⼀个单位资源,进程进⼊经典伪代码wait(S){while(s<=0)<span style="white-space:pre"> </span>//如果没有资源则会循环等待;;S-- ;}v操作(signal):释放⼀个单位资源,进程出来signal(S){S++ ;}p操作(wait):申请⼀个单位资源,进程进⼊v操作(signal):释放⼀个单位资源,进程出来PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进⾏操作,具体定义如下:P(S):①将信号量S的值减1,即S=S-1;②如果S<=0,则该进程继续执⾏;否则该进程置为等待状态,排⼊等待队列。
操作系统 信号量机制P、V操作习题全解
Get
Copy
Put
A
B
卡片机
buffer1
C
D
buffer2
打印机
• 2. 互斥信号量 s1=1, s2=1; • (因为只有一个get、copy和put进程,故可不定
义互斥信号量) • 同步信号量4个: • full1=0, empty1=1; 为一对 • full2=0, empty2=1; 为一对
• 两个同步关系: • 有顾客营业员才叫号s1=0 • 营业员先叫号,顾客才能被服务service
=0
• Process 顾客 i:
• { P (empty);
• P(mutex);
• 从取号机获取一个号码;
• V(mutex);
• V(s1);
• P(service); //等待叫号;
• V (empty); • 获得服务; •}
Agent() int rr, rr1=4; while (1) { do
rr = random (3); while (rr == rr1);
rr1=rr; wait (done); if (rr == 0) {
put paper and tobacco; signal (PaperTobacco ); } else if (rr == 1) {
put match and tobacco; signal (MatchTabacco);
}
else { put paper and match; signal (PaperMatch);
} Smaker1 () /* has match */ while(1) { wait (PaperTobacco);
操作系统习题集 配套 答案
1.研究操作系统的主要观点有那些?答:(1)资源的观点:研究如何对计算机系统中的各种软、硬件资源进行管理;怎样使计算机系统协调一致地、有效地为用户服务;如何既发挥计算机系统资源的使用效率、提高计算机系统的服务质量,又确保计算机系统的安全可靠。
(2)用户观点:操作系统是一个黑盒子,配置了操作系统的计算机与原来真实的物理计算机迥然不同,因为它提供了用户使用计算机的更方便手段,构造了一台虚拟机,采用的操作命令决定了虚拟机的功能。
(3)进程观点:从进程角度分析操作系统,则所有进程的活动就构成了操作系统的当前行为,在每一个瞬间都有一棵进程家族树,它展示着操作系统行为主体的一个快照。
(4)模块分层观点:用模块分层观点讨论模块之间的关系或者说讨论如何形成操作系统的架构,如何安排连结这些程序模块才能构造一个结构简单清晰、逻辑正确、便于分析和实现的操作系统。
2.什么是操作系统?简述现代操作系统的特征。
答:操作系统是控制和管理计算机系统内各种硬件和软件资源、合理有效地组织计算机系统的工作,为用户提供一个使用方便可扩展的工作环境,从而起到连接计算机和用户的接口作用。
现代操作系统具有如下特征:○1并发(共行)性:指能处理多个同时性活动的能力。
I/O操作和计算重叠,内存中同时存放几道用户程序,这些都是并发的例子。
○2共享:指多个计算任务对资源的共同享用。
并发活动可能要求共享资源和信息;多个用户共享一个程序的同一个副本,而不是分别向每个用户提供一个副本可以避免重复开发,节省人力资源。
○3不确定性:指操作系统必须能处理任何一种事件序列,以使各个用户的算题任务正确地完成。
3.操作系统和用户程序之间的关系是什么?答:操作系统通过虚拟及其界面给用户程序提供各种服务,用户程序在运行过程中不断使用操作系统提供的服务来完成自己的任务。
如用户程序在运行过程中需要读写磁盘,这时就要调用操作系统的服务来完成磁盘读写操作。
另一方面,用户程序不可能先于操作系统启动之前启动,因此每次启动一个用户程序,都相当于操作系统将控制转移给用户程序;而在用户程序执行完毕后,又将控制还回给操作系统。
信号量机制——精选推荐
信号量机制1965年,荷兰学者Dijkstra提出的信号量(Semaphores)机制是⼀种卓有成效的进程同步⼯具。
在长期且⼴泛的应⽤中,信号量机制⼜得到了很⼤的发展,它从整型信号量经记录型信号量,进⽽发展为“信号量集”机制。
现在,信号量机制已经被⼴泛地应⽤于单处理机和多处理机系统以及计算机⽹络中。
[1]信号量S是⼀个整数,S⼤于等于零是代表可供并发进程使⽤的资源实体数,当S⼩于零时则表⽰正在等待使⽤的进程数。
Dijkstra同时提出了对的。
P操作的动作是:(1)S减1;(2)若S减1后仍⼤于或等于零,则进程继续执⾏;(3)若S减1后⼩于零,则该进程被阻塞后进⼊与该信号相对应的队列中,然后转。
V原语操作的动作是:(1)S加1;(2)若相加结果⼤于零,则进程继续执⾏;(3)若相加结果⼩于或等于零,则从该信号的等待队列中唤醒⼀等待进程,然后再返回原进程继续执⾏或转。
PV操作对于每⼀个进程来说,都只能进⾏⼀次,⽽且必须成对使⽤。
在执⾏期间不允许有中断的发⽣。
信号量机制分信号量机制、记录型信号量机制、and型信号量机制、。
整型信号量是⼀种最简单的信号量,主要⽤于解决互斥访问问题。
记号信号量在信号量的举出上进⾏了改进,让不能进⼊的进程“让权等待”,即进程状态有运⾏转换为,进程进⼊阻塞队列中等待。
AND型是将进程在运⾏中所需要的全部⼀次性分配给进程,等进程⽤完后再全部⼀次释放。
信号量集的定义1.⽤s1、s2、...sn分别表⽰有n类裂解资源信号量;2.⽤d1、d2、...dn分别表⽰进程需要的每类个数;3.⽤t1、t2、...tn分别表⽰每类分给进程的下限值;信号量分类1. 整型信号量 最初Dijkstra把整型信号量定义为⼀个⽤于表⽰资源数⽬的整型量S,它与⼀般的整型量不同,除初始化外,仅能通过两个标准原⼦操作(Atomic Operation)wait(S)和signal(S)操作可以描述为:wait(S): while S<=0 do no-op;S:=S-1;signal(S):S:=S+1;2. 记录型信号量在整型信号量机制中的wait操作,只要是信号量S<=0,就会不断测试。
利用信号量机制解决哲学家进餐问题
利用信号量机制解决哲学家进餐问题————————————————————————————————作者:————————————————————————————————日期:成绩:课程设计报告课程名称:课程设计(UNIX程序设计)设计题目:利用信号量机制解决哲学家进餐问题姓名:专业:网络工程班级:学号:计算机科学与技术学院网络系2013年12月28日设计项目:利用信号量机制解决哲学家进餐问题一、选题背景1965年,数学家迪杰斯特拉提出,并成为经典的IPC问题—哲学家进餐问题。
该问题的简单描述如下:五个哲学家围坐在一张圆桌周围,每个哲学家面前都一盘通心粉。
由于通心粉很滑,需要两把叉子才能夹住。
哲学家的生活中有两种交替活动时段,吃饭(EATING)和思考(THINKING)。
当一个哲学家觉得饿了时,他就试图分两次去取左手边和右手边的叉子,每次拿一把,但不分次序。
如果成功拿到两把叉子,就进入吃饭状态,吃完后放下叉子继续思考。
二、设计思路1.每个哲学家的行为活动状态为两种:进餐(EATING)和思考(THINKING)。
因此创建一个有5个元素的状态数组,每个数组元素的状态值为EATING或者THINKING。
2.五个哲学家围坐成一圈,每两个人中间有一个叉子,即每个哲学家的边和右边有一个叉子,但这个叉子需要和旁边的邻居竞争使用。
对于每一个哲学家来说,其只有成功获得两个叉子,才能进入进餐状态。
在进完餐后,需要成功放下手中的两个叉子,才能进入思考的状态。
换个角度的描述就是,每个哲学家查询左右边的邻居当前状态,如果左右的邻居当前状态都为THINKING,则该哲学家可以进餐;如果左右邻居当前状态不都是THINKING,则哲学家不能进餐。
因此可以为每一个哲学家设置一个信号量,来描述哲学家的活动状态。
3.因为五只叉子做多只能允许两个哲学家进餐,所以可以将桌子作为一个临界资源。
通过设置一个互斥信号量来限制对临界资源的访问数。
操作系统原理-(信号量机制)
实例2
假设在某单CPU系统中有两个合作进程P1、P2,他们的主要操作如下:
P1:…… Calculating……; P2:……Input……Output……; 若要求的执行顺序为: …Input…Calculating…Output…;
请用信号量上的P、V操作实现P1和P2进程 的协调执行。
实例2 P1:…… Calculating……;
parend
Process P2 var t,u:integer; Begin (5) x:=0; (6) t:=0; (7) if x<=1 then t:=t+2; (8) u:=t; End
分析:顺序执行:y=1,z=1;t=2,u=2;
并发执行:如果按照(1)(5)(2)(3)(4)(6)(7)(8)的顺序 改正方执法行:,找则到结临果界为区y=,0,设z=置0;t信=2号,u=量2 s,初值为1
信号量集用于进程需要多个资源时的信号量操作;
1) AND型信号量集机制
基本思想:
将一段代码同时需要的多个临界资源,采用原子方 式,要么全分配给它,要么一个都不分配。称为 Swait(Simultaneous Wait)。同样地,使用结束后 一起释放,称为Ssignal;
Swait(Simultaneous Wait)
V(mutex);
remainder section; until false; end
注 意:
❖必须成对使用wait和signal原语 ❖wait、signal原语不能出现次序错误、重复或遗漏
遗漏wait原语则不能保证互斥访问 遗漏signal原语则不能在使用临界资源之后将其释 放(给其他等待的进程);
Consumer
信号量相关习题答案
信号量相关习题答案信号量是操作系统中用于实现进程间同步和互斥的一种机制。
它可以用于解决多进程共享资源的竞争问题,保证进程之间的有序执行。
在学习信号量的过程中,我们常常会遇到一些相关的习题,下面我将为大家提供一些信号量相关习题的答案。
1. 什么是信号量?答:信号量是一个整型变量,用于控制对共享资源的访问。
它可以用来实现进程间的同步和互斥。
2. 信号量的值有什么含义?答:信号量的值表示可用资源的数量。
当信号量的值大于等于0时,表示可用资源的数量;当信号量的值小于0时,表示等待资源的进程数量。
3. 什么是PV操作?答:PV操作是对信号量进行操作的基本方法。
P操作(也称为申请操作)会使信号量的值减1,如果信号量的值小于0,则阻塞当前进程。
V操作(也称为释放操作)会使信号量的值加1,如果信号量的值小于等于0,则唤醒一个等待的进程。
4. 请说明信号量的原子性操作。
答:信号量的P操作和V操作是原子性的,即不会被其他进程的操作中断。
这是为了保证在多进程环境下对共享资源的访问是有序的。
5. 什么是互斥信号量?答:互斥信号量用于实现对共享资源的互斥访问。
当互斥信号量的值为1时,表示资源未被占用;当互斥信号量的值为0时,表示资源已被占用。
6. 请举例说明如何使用信号量实现进程间的同步。
答:假设有两个进程A和B,它们需要按照特定的顺序执行。
可以使用两个信号量A和B来实现进程间的同步。
进程A执行完某个任务后,会对信号量A进行V操作,然后阻塞等待信号量B。
进程B执行完某个任务后,会对信号量B 进行V操作,然后阻塞等待信号量A。
这样,进程A和进程B就可以按照特定的顺序交替执行。
7. 请举例说明如何使用信号量实现进程间的互斥。
答:假设有两个进程A和B,它们需要对共享资源进行访问。
可以使用一个互斥信号量mutex来实现进程间的互斥。
在进程A访问共享资源之前,先对mutex进行P操作,如果mutex的值为0,则进程A会被阻塞。
在进程A访问完共享资源后,对mutex进行V操作,唤醒等待的进程。
信号量机制——精选推荐
信号量机制信号量机构是⼀种功能较强的机制,可⽤来解决互斥与同步的问题。
在长期且⼴泛的应⽤中,信号量机制得到了很⼤的发展。
由最初的整形信号量,经过记录性信号量、AND信号量,最后发展为“信号量集”。
⼀、信号量的分类1.整型信号量整型信号量被定义为⼀个⽤于表⽰资源数⽬的整型量S,它只能被两个标准的原语wait(S)和signal(S)来访问,也可以记为“P 操作”和“V操作”。
可描述为:wait(S){while (S<=0);S=S-1;}//p操作signal(S){S=S+1;}//v操作wait操作中,只要信号量S<=0,就会不断地测试。
因此,该机制并未遵循“让权等待” 的准则,⽽是使进程处于“忙等”的状态。
2.记录型信号量记录型信号量是不存在“忙等”现象的进程同步机制。
除了需要⼀个⽤于代表资源数⽬的整型变量value外,再增加⼀个进程链表L,⽤于链接所有等待该资源的进程,记录型信号量是由于⾤⽤了记录型的数据结构得名。
记录型信号量可描述为:相应的wait(S)和signal(S)的操作如下:void wait (semaphore S) { //相当于申请资源S.value--;if(S.value<0) {add this process to S.L;block(S.L);}}wait操作,S.value--,表⽰进程请求⼀个该类资源,当S.value<0时,表⽰该类资源已分配完毕,因此进程应调⽤block原语,进⾏⾃我阻塞,放弃处理机,并插⼊到该类资源的等待队列S.L中,可见该机制遵循了“让权等待”的准则。
void signal (semaphore S) { //相当于释放资源S.value++;if(S.value<=0){remove a process P from S.L;wakeup(P);}}signal操作,表⽰进程释放⼀个资源,使系统中可供分配的该类资源数增1,故S.value++。
信号量习题
操作系统信号量习题第三章 进程的同步与通信1.3 临界资源(critical resource ) 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量。
如磁带机,打印机等。
1.4 临界区(critical section) 一个程序片段的集合,我们把在每个进程中访问临界资源的那段代码称为临界区。
1.5进程的同步(直接作用) 指系统中一些进程需要相互合作,共同完成一项任务。
具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。
1.6 进程的互斥(间接作用) 由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。
2.进程的互斥2.1临界区的使用原则1)空闲让进:当无进程在临界区时,任何有权使用临界区的进程可进入。
2)忙则等待:不允许两个以上的进程同时进入临界区。
3)有限等待:任何进入互斥区的要求应在有限的时间内得到满足,以免陷入“死等”。
4)让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进入“忙等”。
2.2解决互斥问题的方法•有两个进程Pi, Pj ,其中的Pi软件方法:算法1:单标志while (turn != i);critical section turn = j;remainder section•设立一个公用整型变量turn :描述允许进入临界区的进程标识–在进入区循环检查是否允许本进程进入:turn 为i 时,进程Pi 可进入;–在退出区修改允许进入进程标识:进程Pi 退出时,改turn 为进程Pj 的标识j ;• 缺点:强制轮流进入临界区,没有考虑进程的实际需要。
容易造成资源利用不充分:在Pi 出让临界区之后,Pj 使用临界区之前,Pi 不可能再次使用临界区;算法2:双标志、先检查•设立一个标志数组flag[]:描述进程是否在临界区,初值均为FALSE 。
关于信号量问题的例题
关于信号量问题的例题:
1:考虑有几类资源需要控制
2:考虑资源的初始情况是怎样的;
3:给出每个进程使用资源部分的相关过程
4:将相关过程转换为信号量的语句
例题:
1.一个生产者与一个消费者,它们共用一个缓冲器。
生产者不断地生产物品,每生产一件物品就要存入缓冲器,但缓冲器中每次只能存入一件物品,只有当消费者把物品取走后,生产者才能把下一件物品存入缓冲器。
同样,消费者要不断地取出物品去消费,当缓冲器中有物品时他就可以去取,每取走一件物品后,必须等生产者再放入一件物品才能再取。
试采用进程的同步机制,写出对他们的管理方式。
●考虑有几类资源需要控制?
●考虑资源的初始情况是怎样的;
●给出每个进程使用资源部分的相关过程
生产者:
消费者
●将相关过程转换为信号量的语句
begin
Buffer:integer;
SP,SG:semaphore;
SP:=1;SG:=0;
cobegin
PROCESS Producer
begin
L1:produce a product;
Wait(SP);
Buffer:=product;
Signal(SG);
goto L1
end;
PROCESS Consumer
begin
L2:Wait(SG);
Take a product from Buffer; Signal(SP);
consumer;
goto L2
end;
coend;
end;。
chap2(17-18)
2.5 管程机制
•生产者——消费者问题管程定义如下:
Typedef monitor PC { 第一部分:数据结构定义 第二部分:操作定义 定义putitem操作 定义getitem操作 第三部分:数据结构初始化
w=r=count=0;
}
2.5 管程机制
生产者进程: void Producer() {L1:生产一个产品nextp; pc.put(nextp); goto L1; } 消费者进程:void Consumer() { L2:pc.get(nextc); 消费nextc中的产品; goto L2; }
2.6 进 程 通 信
发送原语:把消息发送给目标进程。
void send(receiver , a )//发送区a中为要发送的消息 { getbuf( a.size , i) ; //根据a.size申请消息缓冲区i i.sender:=a.sender ; text := a.text; 将发送区a中的内容复制到消 息缓冲区中 i.next:= 0 ; getid(pcb set, receiver,j ); wait( j.mutex) ; 将消息缓冲区插入接收进程的消 insert(j.mq,i) ; 息队列上。因消息队列属于临界 资源,因此使用wait、signal signal(j.mutex); signal(j.sm); }
实现进程通信的数据结构
消息缓冲区的数据结构: typedef struct message {int sender; long size; char text[500]; struct message *next;} MESSAGE;
2.6 进 程 通 信
进程PCB中应增加通信的数据项: 消息队列的队头指针:mq 消息队列的互斥信号量:mutex 消息数量的资源信号量:sm
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Use() { while(true) { p (full) ;
p(count) ; P(mutex2) ;
从缸中取水;
v (mutex2) ; v(empty) ; v (count) ;
} } 返回
信号量机制例题:理发师
• 理发店里有一位理发师,一把理发椅,n把 侯等待理发的顾客坐的椅子。如果没有顾 客,理发师便在理发椅上睡觉,当一个顾 客到来时,他必须叫醒理发师。子可坐,顾客就坐下等待,否则 就离开理发店。
信号量机制例题:出租车
某宾馆门前有一个出租车停车位,假设宾馆 每一位顾客出门都要乘坐出租车,并且对顾 客约定:如果有其他顾客在此等车位等车, 则在旁等待;否则在此等车;此停车位有车 则乘坐。对出租车做出约定:如果此停车位 已停有车,则等待此停车位空闲;否则停到 此停车位等待顾客;有顾客则搭载顾客离开。 试用P、V原语编写程序描述顾客与出租车的 行为。
信号量机制例题
• • • • • • A、B两种产品 阅览室 吸烟者 出租车 南开大学和天津大学 司机和售票员 • 爸爸,妈妈,儿子,女儿
• 理发师
• R,M,P,共享同一缓 冲区 • 信箱传递消息
• 分拣黑、白棋子
生产者-消费者
• 和尚吃水
读者-写者
• 过独木桥 • 读者——写者问题、 写者优先 • 桥上不允许两车交会, 但允许同方向多辆车 依次通过。 • 猴子过峡谷 • 单行车道
else V(mutex); end.返回
读者——写者问题
一个数据文件或记录可被多个进程共享。 只要求读文件的进程称为“Reader进程”, 其它进程则称为“Write进程”。 允许多个进程同时读一个共享对象,但不允 许一个Write进程和其他Reader进程或 Write进程同时访问共享对象。 “读者——写者问题”是保证一个Write进程 必须与其他进程互斥地访问共享对象的同 步问题。
•
S = S + 1 S ≤ ≥ 0 是 否 否 是 返 回
•
V操作: (1)S加l; (2)若相加结果大于零,进程继续执行 (无等待该临界资源的阻塞进程); (3)若相加结果小于或等于零,则从该信 号的等待队列中唤醒一个等待进程,然后 再返回原进程继续执行或转进程调度。
唤醒等待队列中的一个进程 调用进程入等待队列 返回或转进程调度 转进程调度
生产者—消费者问题:
有一群生产者进程生产产品供给消费 者进程消费,为使两者并发执行,在两者 之间设置具有n个缓冲区的缓冲池,生产者 进程所生产的产品放入一个缓冲区中,消 费者进程可从一个缓冲区中取走产品去消 费。
生产者-消费者
Var mutex, empty, full: semaphore :=1, n, 0; consumer : begin buffer: array [ 0, …, n-1] of item; repeat in, out: integer :=0, 0; wait(full); begin wait(mutex); nextc:=buffer(out); parbegin out:=(out+1) mod n; producer : begin signal(mutex); repeat signal(empty); … consume the item in nexc; until false; produce an item in nexp; end parend … end wait(empty); wait(mutex); buffer(in):=nexp; in:=(in+1) mod n; signal(mutex); signal(full); until false; end
信号量机制例题:和尚吃水
• 某寺庙,有小、老和尚若干,有一水 缸,有小和尚提水入缸供老和尚饮用。 水缸可容10 桶水,水取自同一井中。 水井径窄,每次只能容一个桶取水。 水桶总数为3个。每次入、取缸水仅为 1桶,且不可同时进行。给出取水、入 水的算法描述。
Semaphore mutex1=1;mutex2=1; empty=10;full=0;count=3; Main() {cobegin get(); use(); coend } Get() {while (true) { p(empty) ; p(count) ; P(mutex1) ; 从井中取水; v(mutex1) ; P(mutex2) ; 将水倒入缸中; v (mutex2) ; v (count) ; v (full) ; } }
盘中可同时放两个水果?N个水果?
• 爸爸、妈妈、两个儿子、两个女儿: 桌上有一空盘,最多可以容纳两个水 果。爸爸可向盘中放苹果,妈妈向盘 中放桔子,两个儿子专等吃盘中的桔 子,两个女儿专等吃盘中的苹果。
Var empty,mutex,apple,banana:Semaphore :=2,1,0,0; Main() { cobegin Father();mother();son();daugher(); Coend } Father() { while (true) {p(empty); p(mutex); 将苹果放入盘子; v(mutex); v(apple);} } Mother() { while (true) { p(empty);p(mutex); 将香蕉放入盘子; v(mutex); v(banana);} }
爸爸,妈妈,儿子,女儿
Var mutex,apple,banana:Semaphore:=1,0,0;son() Main() { while (true) { cobegin { p(banana);从盘子取香蕉; v(mutex); Father();mother();son();daugher(); 吃香蕉;} Coend } } Father() { while (true) {p(mutex); 将苹果放入盘子;v(apple);} daugher() { while (true) } { p(apple);从盘子取苹果; v(mutex); Mother() 吃苹果;} { while (true) } { p(mutex);将香蕉放入盘子;v(banana);} } 返回
理发师var
waiting:integer; CHAIRS:integer; customers,barbers,mutex:semaphore; customers:=0; barbers:=0; waiting:=0; mutex:=1;
procedure barber: procedure customer begin begin P(mutex); while(true); if waiting<CHAIRS P(customers); begin P(mutex); waiting:=waiting+1; waiting:=waiting-1; V(customers); V(barbers); V(mutex); P(barbers); V(mutex); get_haircut(); cut_hair; end; end;
son() { while (true) { p(banana); p(mutex);从 盘子取香蕉;v(mutex); v(empty) 吃香蕉;} }
daugher() { while (true) { p(apple); p(mutex);从 盘子取苹果;v(mutex); v(empty) 吃苹果;} }
信号量机制例题: A、B两种产品
有一个仓库,可以存放A、B两种产品,但 要求: (1)每次只能存入一个产品( A或B) (2)-N<A产品数量-B产品数量<M
A、B两种产品
Semaphore mutex=1;sa=m-1;sb=n-1 Main() { while(true) { 取一个产品; if(取得是A产品) { p(sa); p(mutex); 将产品入库; v(mutex); v(sb); }
signal(wmutex); until false; end parend end
信号量机制例题:过独木桥
• 某条河上只有一座独木桥,以便行人过桥, 现在河的两边都有人要过桥,按照下面的 规则过桥,为了保证过桥安全,请用P,V 操作分别实现正确的管理。 过桥的规则:同一方向的可连续过桥,某方 向有人过桥时另一方向的人要等待。
Semaphore mutexn=1; countn互斥信号量 Semaphore mutexs=1; counts互斥信号量 Semaphore flag=1; Int countn=0; 北方正在过桥的车辆数 Int counts=0; 南方正在过桥的车辆数
Else { p(sb); p(mutex); 将产品入库; v(mutex); v(sa);
返回
信号量机制例题:阅览室
有一个阅览室,共有100个座位,读者进入 时必须在一张登记表上登记,该表为每一座 位列一表目,包括做好和读者姓名等,读者 离开时要削掉登记的信息。
阅览室
Semaphore mutex=1;seats=100;readers=0 getin() { while(true) { p(seats); p(mutex); 填写登记表; 进入阅览室读书; v(mutex); v(readers); } }
出租车
Semaphore:st=1,s=0, sc=1;
Customer () { p (sc); P (s); 乘坐离开; V (sc); V (st) }
taxi() { P (st); 停车; V (s); } 返回
信号量机制例题:爸爸,妈妈,儿子,女儿 • 桌上有一空盘,允许存放一只水果。 爸爸可向盘中放苹果,妈妈向盘中放 香蕉,儿子专等吃盘中的香蕉,女儿 专等吃盘中的苹果。
吸烟者Semaphore: a[0..2]=0;agent=1;
r,s:integer;