操作系统之进程管理:10、信号量机制(整形、记录型)

思维导图

操作系统之进程管理:10、信号量机制(整形、记录型)

信号量机制的引入

来看几个问题。
1、在用软件实现进程互斥的时候,双标志先检查算法由于 “上锁”“检查”操作无法一气呵成 而导致多个程序进入临界区的问题

2、无论是硬件还是软件实现进程互斥都无法实现“让权等待”
为了解决上述的问题,Dijkstra提出了卓有成效的方法----------信号量机制

操作系统之进程管理:10、信号量机制(整形、记录型)

什么是信号量机制

操作系统之进程管理:10、信号量机制(整形、记录型)

信号量的分类

整形信号量

操作系统之进程管理:10、信号量机制(整形、记录型)

由于任然无法解决让权等待的问题,所以整型信号量也不是优选方案
为了解决让权等待的问题,又提出了记录型信号量

记录型信号量

操作系统之进程管理:10、信号量机制(整形、记录型)
看个例子:

操作系统之进程管理:10、信号量机制(整形、记录型)

场景:两台打印机、四个进程
初始值:S.values = 2,S.L = 0
1、进程A使用打印机,执行P(S)操作:S.values = 1,使用资源
2、进程A执行同时进程B也使用打印机,执行P(S)操作:S.values = 0,使用资源
3、进程AB执行同时进程C也使用打印机,执行P(S)操作:S.values = -1,进程C进入阻塞状态,进入等待队列
4、进程ABC执行同时进程D也使用打印机,执行P(S)操作:S.values = -2,进程D进入阻塞状态,进入等待队列
5、当进程A运行结束后,执行V(S)操作:S.values = -1,释放资源等待队列中的进程C被唤醒,使用资源
6、当进程B运行结束后,执行V(S)操作:S.values = 0,释放资源等待队列中的进程D被唤醒,使用资源
7、当进程C运行结束后,执行V(S)操作:S.values = 1 ,释放资源
8、当进程D运行结束后,执行V(S)操作:S.values = 2 ,释放资源
PS:S.values的值改变是因为执行PV操作的自加或自减,不是直接赋值操作
PS:资源数目为负,即S.values为负的含义是:等待队列中进程的个数;S.values=-1说明等待队列中有一个进程

操作系统之进程管理:10、信号量机制(整形、记录型)



信号量介绍完了,下一篇:用信号量实现进程互斥、同步