信号量是操作系统中用于互斥和同步机制的一个共享的整数变量。信号量仅可以由初始化、唤醒(Signal)和等待(Wait)三种操作访问。
对于给定的信号量S,等待操作Wait(S)(又称P操作)定义为:
if s>0 then (17) else挂起调用的进程
唤醒操作Signal(S)(又称V操作)定义为:
if 存在等待的进程 then 唤醒这个进程else (18)
给定信号量S,可以定义一个临界区来确保其互斥,即保证在同一时刻这个临界区只能够被一个进程执行。当S被初始化为1时,代码段
(19) :
临界区
(20) :
定义了一个临界区。
这样的临界区实际上是将共享数据和对这些数据的操作一起封装起来,通过其互斥机制一次只允许一个进程进入,这种临界区通常称为 (21) 。
21()
A.模块
B.类程
C.管程
D.线程
参考答案:C
解析:
本题主要考查进程的同步与互斥机制,以及管程的概念。
信号量是操作系统中用于互斥和同步机制的一个共享整数变量,除初始化外,仅能通过两个标准的原子操作(atomic operation)Wait(S)和Signal(S)来访问。
对于给定的信号量S,等待操作Wait(S)(又称为P操作P(S))为:
Wait(S)
{if S>0 then S:=S-1 else挂起调用的进程}
即信号量值大于0时,将其值减1,进程继续,否则当前进程阻塞自己。
唤醒操作Signal(S)(又称为V操作V(S))为:
Signal(S)
{if存在等待的进程then唤醒它else s:=s+1,允许其他进程访问此临界资源}
临界区(Critical Section)是指一段必须互斥执行的代码。显然,若能保证每个进程互斥地进入自己的临界区,就能实现它们对临界资源的互斥访问。这样,每个进程进入临界区,访问该资源,并设置信号量,表示资源正在被访问,否则应等待(挂起),这个操作即Wait(S)。当其访问完临界资源,退出临界区时,检查若有进程被挂起(即在等待访问此临界资源),则唤醒该进程,否则应当恢复信号量,以使其他进程将来能访问此临界资源,这个操作即Signal(S)。代码格式为:
Wait(S)
{临界区}
Signal(S)
如上定义的代码段中,临界区将共享数据和对这些共享数据的操作封装起来,在进入临界区时实施Wait(S)操作,出临界区时实施Signal(S)操作,这就保证了某一时刻,只允许一个进程进入,而其他进程只能等待,这样的代码段称为管程。管程是一种并发性的构造,它包括变量、数据及过程组成的集合,只能通过特定的管程入口被调用,在边界上严格实施互斥。管程采用信息掩蔽的方法,即管程中的数据包括管程中所有过程的全局变量及某个特定过程的局部变量,所有这些数据只能在管程中访问,管程外的进程无法访问管程内的数据。