操做系统基础-信号量机制的理解

初步了解信号量

信号量机制的提出,是为了解决进程间关系通讯的问题,由于进程间不可能用嘴来讲“我在使用这个资源啊,你先等我用完再用”,或者说“我用完了,接下来轮到你了!”这是咱们人之间通讯的方式,那么现实中如何让某个进程知道,本身暂时不能用哪一个资源或能够用哪一个资源呢?web

好比在火车上上厕所,假设有个空厕所,门上显示器写着"无人",当我进去把门锁上后,门上显示变为"有人",这样后来者看到门上显示"有人"就会在外等待而不会冒然闯进来。svg

这就是用到信号量的机制,其中门上的显示器就扮演了"信号量"的角色,在计算机中,咱们称这是进程互斥。固然,进程间关系还不止互斥。xml

首先有几个概念咱们要先了解队列

临界资源

一段时间内只容许一个进程访问的资源称为临界资源或独占资源。
好比打印机,上文咱们提到的厕所,只能你一我的用,不能多人同时用。进程

临界区

进程中访问临界资源的那段代码称为临界区。
这个容易理解,我有一段代码,其中调用打印机的那段代码块,就是临界区。资源

进程互斥

为使多个进程互斥地访问某临界资源,须为该资源设置互斥信号S,并设其初始值为1,而后将各进程访问资源的临界区置于p操做和v操做之间便可。同步

P操做是申请使用资源的操做,假设我要使用打印机了,就进行P(S),这样以后,S的值就会减1变成0,S的值为0表示打印机也就是资源不可用。it

若是另外一我的要使用也是先进行P(S),因为S为0资源还不能用,这样S的值会变成-1,表示他暂时没能使用而在排队,信号量S为负数时其绝对值表示阻塞队列中等待该资源的进程数。class

若是没人在排队,当我用完打印机后就执行V操做,V操做表示释放资源,V(S)就让信号量S由0加1变成了1,这样后来者就能够用打印机了。
如有1人在排队,那S就变0,这个后来者直接使用打印机,使用完后再V操做,S会变1。变量

进程同步

两进程协做完成一件事,咱们叫同步。
设有a,b两进程共用一个变量x,a负责算数获得x的结果,而后把结果传给b,b负责把结果x打印出来。这里咱们须要两个信号量S1,S2,初值为1,0。(S1给a用,S2给b用)
要完成此次任务
执行P(S1)→获得结果→V(S2)→P(S2)→打印结果→V(S1)

P(S1)表示a进程要工做了,把它对应的信号量S1置0,表示a进程不可用正在工做中。 获得结果后,V(S2)把S2置1,表示b能够开始工做。 P(S2)表示b进程要工做了,把它对应的信号量S2置0。 打印出结果后,V(S1)讲S1置1,表示任务完成,a进程能够开始下一轮的工做了。

相关文章
相关标签/搜索