信号量与P、V操作--《操作系统》自学考试
信号量与P、V操作--《操作系统》自学考试
关于《操作系统》书籍中第四章第三阶节信号量及P、V操作中对于课本中所讲概念不明白,在百度和博客上查资料后给出我自己的理解,供参考,如有错误请大佬帮忙指正。
书籍中的定义
-
信号量:信号量是一种特殊的变量,它的表面形式上一个整形变量附加一个队列,且只能被P操作和V操作,P、V操作皆使用原语。
-
信号量与P、V操作的功能是实现进程之间的同步、互斥。
-
设信号量为S,S可以取不同的整数值,可以利用S的取值表示共享资源的使用情况,或用它表示协作进程间交换的信息。
-
P、V操作定义:
P(S) { S = S-1; //若S<0,将该进程状态设置为等待状态,然后将该进程的PCB插入相应的S信号量等待队列末尾,直到有其他进程在S上执行V操作为止 } //------------------------------- V(S) { S = S+1; //若S <= 0,释放在S信号队列中等待的一个进程,将其状态改变为就绪态,并将其插入就绪队列;然后,执行本操作的进程继续执行。 }
案例
- 进程间的互斥操作

对于这样两个进程运行过程我们可以这样理解:
- 首先两个进程是并行的,在第一行两个进程同时P操作时,只会有一个成功。假设A进程成功操作,使得S-1,这时S等于0,A进程被允许进入临界区操作。而B进程在进行P操作时S的值已经被变更为0,此时进程B执行P操作,S等于-1,B线程被设置为等待状态进入等待队列,不允许进入临界区。
- 在进程A执行完临界区操作后,执行V操作使得S+1,此时S等于0,且释放一个等待队列中的B进程插入就绪队列。执行完后A进程继续运行。
- B进程从就绪队列执行,进入临界区操作。操作完毕后执行V操作使得S+1,此时S等于1。执行完后B进程继续运行。
回顾整个过程,在初始竞争临界区资源时由于两个进程只有一个P操作能执行成功,便实现了一个进程使用临界资源,另一个等待信号。在其中一个进程使用完资源后使用V操作释放了资源并及时通知了另一个进程,另一个进程在插入就绪队列后立即使用临界资源,使用完毕后释放资源并使用V操作更改S的值。这样我们做到了两个进程互斥竞争资源,资源使用完毕后进程及时的通信和接管。
-
S的值的含义
S不同的值代表了当前临界资源的可用数量和等待队列的进程数目
在S=0时:代表当前可用资源为0,没有资源可以分配。
在S=-1时:表示没有资源可以分配,等待队列有1个进程。
在第二次S=0时:代表当前可用资源为0,此时临界资源已经分配给B进程。
在S=1时:表示当前可用资源为1,此时B进程已完成操作释放了1个资源。
每执行一次P操作,意味着请求的进程分配到一个资源;每执行一次V操作意味着进程释放了一个资源。
对于信号量S,常常用作同步时初始值为0,用作互斥时初始值为1。
Seven times have I despised my soul:
The first time when I saw her being meek that she might attain height.
The second time when I saw her limping before the crippled.
The third time when she was given to choose between the hard and the easy, and she chose the easy.
The fourth time when she committed a wrong, and comforted herself that others also commit wrong.
The fifth time when she forbore for weakness, and attributed her patience to strength.
The sixth time when she despised the ugliness of a face, and knew not that it was one of her own masks.
And the seventh time when she sang a song of praise, and deemed it a virtue.

浙公网安备 33010602011771号