系分考试知识:PV操作释疑
信号量
信号量是最早出现的用来解决进程同步与互斥问题的机制,
包括一个称为信号量的变量及对它进行的两个原语操作。
一. 信号量的概念
1.信号量的类型定义
每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类PASCAL语言表述)
semaphore = record
value: integer;
queue: ^PCB;
end;
其中PCB是进程控制块,是操作系统为每个进程建立的数据结构。
s.value>=0时,s.queue为空;
s.value<0时,s.value的绝对值为s.queue中等待进程的个数;
2.PV原语
对一个信号量变量可以进行两种原语操作:p操作和v操作,定义如下: procedure p(var s:samephore);
{
s.value=s.value-1;
if (s.value<0) asleep(s.queue);
}
procedure v(var s:samephore);
{
s.value=s.value+1;
if (s.value<=0) wakeup(s.queue);
}
其中用到两个标准过程:
asleep(s.queue);执行此操作的进程的PCB进入s.queue尾部,进程变成等待状态
0条评论