操作系统之同步与信号量机制笔记

说明:本总结的代码示例参考汤小凤等编著的《计算机操作系统(第四版)》P52-61页。


顺序梳理

1.什么是进程同步?
进程同步就是多个相关进程在执行时的协调。


2.常见的进程同步机制有?
硬件同步机制、信号量机制、管程机制等。


3.什么是临界资源?
一次仅允许一个进程使用的资源称为临界资源。
临界资源的特点可以使多个进程同步时保存可再现性(也就是说,无论这些进程执行步骤如何,只要初始与终止条件不变,最终得到的结果是固定的)。


4.同步机制遵循的规则
(类比于借教室上课)
空闲让进、忙则等待、有限等待、让权等待。
这里需要注意的是,上述短语的主语均为进程。如果教室为,则直接进入;如果教室有人,则等待教室没人上课再进入;如果教室里的课没完没了,那肯定不能再无限等待下去;如果等待的进程不能进入自己的临界区(访问教室的那一段代码),那就不再占着位置反复试图进入而是让出等待的权利。


5.进程同步之硬件机制
先说我所理解的实现同步的实质:就是上锁解锁的过程。
(1)关中断
(2)TS指令:初始锁打开(lock=false),代表资源空闲;当一个进程执行TS指令时,进行锁判断:如果锁本来是打开的,就直接执行下面的语句;如果锁原本是关闭的,则反复测试(利用while循环)直到锁打开。另外,无论是上面哪种情况,在执行一次测试后锁的状态均应该是关闭(lock=true)的。


6.进程的硬件同步机制存在的问题
(1)因为存在while循环,这意味着当程序不能进入自己的临界区时,将反复测试直到可以进入,这就处于了“忙等”的状态,显然不符合让权等待的规则。
(2)由于锁的开关只是由布尔值控制,因此当很多进程复杂同步时会很难(此处存疑)。


7.信号量机制
提出者:荷兰学者Dijstra
wait(进程申请资源,P操作)、signal(进程释放资源,V操作) 二者均为原语操作
一直不知道为啥叫PV操作,后来才知道迪基斯特拉是荷兰人,PV是荷兰语两操作的简称…
(1)整型信号量机制
这最初是迪基斯特拉提出的,使用信号量S的多少来体现资源与进程的关系。

S >= 0 表示有S个资源可以使用
S < 0|S|表示有那么多的进程处于等待队列当中

解决了复杂的进程同步,但由于使用了while语句,仍然没有遵循让权等待的规则而是忙等。

(2)记录型信号量机制
在数据结构中使用进程链表指针pcb *list用于链接所有等待的进程。(等待队列
wait 和 signal 更像是控制进程是否向下进行的开关。
wait 操作试图为当前进程申请一个资源(S->value--),如果申请成功则继续向下执行,否则将当前进程阻塞并加入等待队列;(block(S->list))
signal 操作释放资源(S->value++),若释放后仍有资源处于等待队列,则唤醒wakeup下一个等待的进程,否则向下执行。

(3)AND型信号量
用于解决多进程共享多个资源的问题。涉及多资源的情况同样使用“临界资源”的思想,将每个进程按照一次性使用全部资源分组,只有当前进程使用完全部资源才能轮到下一个进程。实际上是利用了AND连接的条件全真时才能触发的特点。


8.利用信号量实现互斥
将资源数S->value初始化为 1,这样通过PV操作就能实现两个进程的互斥。


9.利用信号量实现前驱关系
将初始的公用信号量设置为0.
将前驱进程先执行再signal,后继的进程先 wait 再执行,这样如果先运行后继进程的话,就会导致资源数变为-1从而阻塞。
网状结构同样适用,有多少前驱后继关系就设置多少初始信号量为0的变量。参考书P62页。

发布了189 篇原创文章 · 获赞 107 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/cprimesplus/article/details/102488673