信号量机制
发布网友
发布时间:2022-03-30 01:21
我来回答
共3个回答
懂视网
时间:2022-03-30 05:43
信号量机制是一种卓有成效的进程同步工具,在长期且广泛的应用中,信号量机制又得到了很大的发展,它从整型信号量经记录型信号量,进而发展为“信号量集”机制,现在,信号量机制已经被广泛地应用于单处理机和多处理机系统以及计算机网络中。
热心网友
时间:2022-03-30 02:51
《Operating Systems Design and Implementation》中Andrew S. Tanenbaum对信号量的描述和以前看过的教材有区别。但其核心思想是类似的。
以前的书上(包括网上不少帖子)是这么叙述的:
―――――――――――――――――――――――――――――――――――――
信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用临界区的进程数。
Dijkstra同时提出了对信号量操作的PV原语。
P原语操作的动作是:
(1)S减1;
(2)若S减1后仍大于或等于零,则进程继续执行;
(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作的动作是:
(1)S加1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。
―――――――――――――――――――――――――――――――――――――
说明:要保证PV是原子操作,对于操作系统,只须在操作过程中关中断即可。
Andrew S. Tanenbaum对信号量的定义有所不同,其PV操作也有区别。
―――――――――――――――――――――――――――――――――――――
信号量是一个整数,其值不小于0。它表示被积累下来的唤醒操作数。
P原语操作的动作是:
(1) 检查S是否大于0。
(2) 若S>0,则S = S – 1;否则,执行P操作的进程将睡眠,并且此时P操作并未结束。
V原语操作的动作是:
(1)S = S + 1。
(2)如果一个或多个进程在该信号量上睡眠,无法完成先前的P操作,则有系统选择其中一个并允许它完成P操作。
――――――――――――――――――――――――――――――――――――――
Andrew S. Tanenbaum的观点认为:当S = 0时,P操作不会马上结束。其作用(S = S – 1)必须在该进程被唤醒后才能实现。
两种定义的区别是:
前者定义的PV操作都不会阻塞,而后者中P操作可能被阻塞。
前者的S的初值一般大于0,而后者中,S通常初值为0。
热心网友
时间:2022-03-30 04:09
kfk kkf