操作系统:进程间的同步和互斥

临界资源和临界区

临界资源:系统中一次只允许一个进程访问的资源。如I/O设备、共享文件、共享变量等。

临界区:并发执行的进程中,访问临界资源的必须互斥执行的代码段叫临界区。

在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。
对于临界资源的访问:也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被成为临界区。

互斥

**互斥:**一组并发进程中的一个或多个程序段,因共享某一公有资源而导致它们必须以一个不允许交叉执行的单位执行。也就是说,不允许两个以上的共享该资源的并发进程同时进入临界区。

一般情况下,作为程序段的一个过程不允许多个进程同时访问它。但如果该过程是纯过程,则各并发进程可以同时访问它。纯过程是指在执行过程中不改变过程自身代码的一类过程。

一组并发进程互斥执行时必须满足如下准则

平等竞争:不能假设各并发进程的相对执行速度。即各并发进程享有平等地、独立地竞争共有资源的权利,且在不采取任何措施的条件下,在临界区内任意指令结束时,其他并发进程可以进入临界区。
不可独占:并发进程中的某个进程不在临界区时,它不能阻止其他进程进入临界区。
互斥使用:并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入。
有限等待:并发进程中的某个进程从申请进入临界区时开始,应在有限时间内得以进入临界区。

互斥的实现
1,互斥锁
对临界区加锁以实现互斥。当某个进程进入临界区后,它将锁上临界区,直到它退出临界区为止。并发进程在申请进入临界区时,首先测试该临界区是否上锁。

加锁实现中的lock(key[S])和unlock(key[S])均为原子操作。有一点需要注意的是:在系统实现时锁定位key[S]总是设置在公有资源所对应的数据结构中的。

2,信号量
【信号量】 在操作系统中,信号量sem是一个整数。
分为计数信号量和二值信号量

P原语操作:

sem减1;
若sem减1后仍大于或等于0,则P原语返回,该进程继续执行;
若sem减1后小于0,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作:

sem加1;
若相加结果大于0,V原语停止执行,该进程返回调用处,继续执行;
若相加结果小于或等于0,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转进程调度。

同步

进程同步:进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的多个进程之间的协调调用次序等,传递消息告知资源占用情况。进程间的直接制约关系来源于他们之间的合作。

进程同步机制应遵循的准则:
空闲让进:当临界资源处于空闲状态时,允许相应的进程立即进入自己的临界区
忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待
有限等待:对要求进入临界区的进程,应保证在有限时间内能进入自己的临界区
让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。

生产者-消费者问题

把并发进程的同步和互斥问题一般化,可以得到一个抽象的一般模型,即生产者-消费者问题(producer-consumer problems)。
把系统中使用某一类资源的进程称为该资源的消费者,而把释放同类资源的进程称为该资源的生产者

设生产者进程和消费者进程是互相等效的,其中,各生产者进程使用的过和各消费者使用的进程可描述如下:
首先,可以看到,上述生产者-消费者问题是一个同步问题。即生产者和消费者之间满足如下条件:

(1)消费者想接收数据时,有界缓冲区至少有一个单元是满的。
(2)生产者想发送数据时,有界缓冲区至少有一个单元是空的。

另外,由于有界缓冲区是临界资源,因此,各生产者进程和各消费者进程之间必须互斥执行。

你可能感兴趣的:(操作系统)