1.背景
多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关,称为竞争条件。
2.临界区问题
假设某个系统有n个进程。每个进程有一个代码段称为临界区,在该区中进程可能改变共同变量、更新一个表、写一个文件等。这种系统不允许两个进程同时在临界区执行。临界区问题是设计一个以便进程协作的协议
每个进程必须请求允许进入临界区,实现这一请求的代码称为进入区,临界区之后可有退出区,其余代码为剩余区
while (true)
{进入区
临界区
退出区
剩余区 }
如有进程需进入临界区,那么他是不在剩余区执行的进程。从一个进程请求进入临界区直至允许为止,其他进程允许进入临界区的次数有上限。
系统可存在多个处于内核模式的活动进程,因此内核代码会出现竞争条件,如两个进程同时打开文件。内核开发者有必要保证系统不会产生竞争条件。
抢占内核与非抢占内核可用于处理操作系统内的临界区问题。抢占与非抢占内核的区别在于是否允许处于内核模式的进程被抢占。处于内核模式进程会一直运行,直到退出内核模式、阻塞。显然非抢占式内核 不会导致竞争条件,因为只会有一个进程处于内核模式。 而抢占式内核需要更认真的设计。
3.Perterson算法
该算法适用于两个进程在临界区与剩余区交替执行
4.硬件同步
就任何临界区问题都需要一个简单工具——锁。一个进程进入临界区之前必须得到锁,退出临界区释放锁。
while {true}
{请求锁
临界区
释放锁
剩余区 }