同步互斥
1.原子操作
2.临界区概述
临界区:进程中访问临界资源的一段需要互斥执行的代码。
进入区:检查可否进入临界区的一段代码,如可进入,设置相应“正在访问临界区”标志。
退出区:清除“正在访问临界区”标志。
3.临界区访问规则
空闲则入:没有进程在临界区时,任何进程可进入。
忙则等待:有进程在临界区时,其他进程均不能进入临界区。
有限等待:等待进入临界区的进程不能无限期等待。
让权等待(可选):不能进入临界区的进程,应释放CPU(如转换到阻塞状态)。
4.临界区的实现方法:
不同的临界区实现机制的比较,根据其性能(并发级别)来衡量。
1)禁用中断:
进入临界区时,禁止所有中断。退出临界区时,使能所有中断。这样没有并发,进程可以独享资源。
2)基于软件的实现方法:
用相应的算法实现。需要两个进程间的共享数据项,比较复杂,而且是忙等待。
算法中,turn指轮到某个进程进入临界区,flag[i]指i进程想进入临界区,只有当turn == i 且flag[i]为true 同时成立时,才会进入临界区。
3)更高级的抽象方法
硬件提供了一些同步原语,如中断禁用,原子操作指令等,操作系统利用这些同步原语来构建更高级的编程抽象来简化进程同步,如锁,信号量等。
原子操作指令:
4)三种方式的比较