对于非科班出身的我,,,最近自学操作系统做了一些进程同步的笔记,写出来,希望能对大家有帮助,我是参照哈工大张英涛老师的视频和汤子瀛的书写的:
进程与进程之间的合作机制:
信号量机制!!!
信号量是一种数据结构。
信号量的值与相应资源的使用情况有关。
信号量的值仅由原语P、V操作改变
(1)整型信号量
整型数 S <=0 代表资源被占用,不可用 S>0代表空闲可用
P操作(wait)原语
V操作(signal)原语
Wait(S) While S<=0 do no-op(无行为) S:=S-1; //可用啦,那我就用咯 |
Signal(S) S:=S+1; |
wait(S) 和signal(S)是原子操作。
缺点:只要信号量小于等于0,不满足让权等待。就是不会先让其进入阻塞,把CPU让给别人用。
(2)记录型信号量(目前应用较广)
记录型结构,包含两个数据项:
Type semaphore = record Value:integer; L:lise of process; end |
S.value为资源信号量初值,是某类资源的数目;
value大于0 的时候代表可用资源数目
value<0时候,绝对值代表等待使用资源的进程个数。也就是扔进阻塞队列。
wait操作申请某一个单位资源
Procedure wait(s) Var S:semaphore; Begin S.value:=S.value-1; If S.value<0 then block(s,L); End |
signal操作:释放一个资源
Procedure signal(s) Var S:semaphore; Begin S.value = S.value+1; If S.value<=0 then |