操作系统笔记8
知识总览
为什么要引入信号量机制
为了更好的解决进程互斥与同步的问题
信号量机制
用户可以通过操作系统提供的一对原语对信号量操作,从而方便的实现了进程互斥,进程同步
信号量:就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量。
(原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指实现的。软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题。)
一对原语:wait(S) 原语和 signal(S) 原语,可以理解为我们自己写的函数,其中的信号量S就是函数调用的时候传入的一个参数,常常简称为P,V操作,所以经常把wait(S) 原语和 signal(S) 原语,写为P(S),V(S)
整型信号量
用一个整数型变量作为信号量,用来描述系统中某种资源的数量
一个进程如果一直进不了临界区,他一直在wait区循环等待,一直占用处理机,处于盲等的状态
记录型信号量
整型信号量的缺陷是存在忙等,所以提出了记录型信号量
semaphore
是一个结构体,value初始化为刚开始的资源数量,L等待队列初始化为NULL
block(S.L)
是阻塞该进程,就不用占用处理机了。
wakeup(S.L)
是唤醒该进程,从阻塞态转变为就绪态,也就是当s.value++
后还小于等于零,说明在阻塞队列中至少有一个进程,所以唤醒等待队列中的进程
总结
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Ethereal
评论