记录型信号量s执行wait(s)和signal(s)的过程如下: procedure wait(s:semaphore); begins.value:=s.value-1; {先减1再判断} if ( 1 ) then block(s.L) end; procedure signal(s:semaphore); begins.value : = s.value + 1; if ( 2 ) then wakeup(s.L)end; 问题:wait操作相当于 资源,(1)处应为 ,block(s.L)代表将当前进程插入到信号量s的等待队列中。signal操作相当于 资源,(2)处应为 ,wakeup(s.L)代表唤醒s等待队列的第一个进程。 s<0时,则 表示s等待队列中的进程个数。(使用小写字母输入)
举一反三
- 设记录型信号量为s,则V操作可写成V(s),代表释放资源 也可写成用signal(s)或up(s)。将信号量s.value加1,若结果不大于0,则从该资源的阻塞队列首部唤醒一个进程插入就绪队列中。 s.value= s.value+1 if s.value≤0 then wakeup(s.L)
- 计算机操作系统中,若WAIT、SIGNAL操作的信号量S初值为3,当前值为-2,则表示当前有( )个等待信号量S的进程。 A: 1 B: 2 C: 3 D: 0
- wait(S)原语操作中,当信号量S的值减1小于0时,则调用block原语把执行wait(S)的进程阻塞。
- 用信号量S实现对系统中5台打印机的互斥使用,S.value的初值应设置为(),若S.value的当前值为-1,则表示S.L队列中有()个等待进程。
- 记录型信号量(设为s)为一个记录型数据结构,一个整形变量value代表资源数目,另一个进程队列指针L用于链接所有等待该资源的进程。