设记录型信号量为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)
举一反三
- 记录型信号量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的P原语操作定义中,使进程进入相应阻塞队列等待的条件是( )。 A: S.value > 0 B: S.value = 0 C: S.value < 0 D: S.value≠0
- 对信号量S执行P操作后,使进程进入等待队列的条件是( )。 A: S.value<0 B: S.value<=0 C: S.value>0 D: S.value>=0
- 在操作系统中,对信号量S的V原语操作定义中,使进程从阻塞队列激活进入就绪队列的条件是( )。 A: S≥0 B: S=0 C: S≤0 D: S=1
- 在操作系统中,对信号量S的P原语操作定义中,使进程进入相应阻塞队列等待的条件是()。 A: S.value>;0 B: S.value=0 C: S.value<;0 D: S.value¹0