您的位置:首页 > 其它

操作系统-并发:互斥与同步

2018-03-30 17:55 225 查看

并发的原理

在多道程序设计系统种,进程会被交替执行,进而在宏观上表现出一种并发的外部特征。

为什么需要并发?

假设一个支持单用户的单处理器多道程序设计系统,用户可以从一个应用程序切换到另一个应用程序,每个应用程序都使用同一键盘输入,使用同一键盘输出。

由于每个程序都需要使用某一个输入输出过程,所以将他视为一个共享过程,载入到所有应用程序的共用全局存储区。

但是,这样问题就出来了,一旦第一个进程调用该过程,获得数据存储后立即中断,此时进程2被激活,调用该过程,获得数据就会覆盖掉之前的数据,进程1再次回来执行时,数据以及被修改,显示出来的是进程2的数据。

如果不对该共享过程加以保护,就会出现这种数据不一致的情况。

唯一的方法是:控制访问该变量的代码。

定义一条规则:一次只允许一个进程进入该共享空间。

竞争条件

竞争条件发生在多个进程或线程读写数据时,其最终结果取决于多个进程的执行指令顺序。

举例说明:

假设两个进程p1,p2共享全局变量a。在p1执行的某一时刻,他将a的值更新为1,在p2执行的某一时刻,将a的值更新为2.

因此,两个任务竞争更新不同的变量,竞争的失败者决定了变量a的最终值。

进程的交互

根据进程之间互相之间知道对方存在的程度,对进程间的交互方式进行分类。

进程之间互相不知道对方的存在:这是一些独立的进程,他们不会一起工作。尽管这些进程之间不会一起工作,但操作系统需要直到他们之间对资源的竞争情况。

进程间接知道对方的存在:这些进程不需要知道互相的进程id,但他们共享某些资源,如:i/o缓冲区。这类进程在共享同一个对象时会表现出合作行为。

进程直接知道对方的存在:这些进程可直接通过进程id进行通信,以合作完成某些活动。

进程间的 资源竞争

当并发进程竞争使用同一资源时,之间会发生冲突。我们把这些情况描述为:两个或更多进程在它们的执行过程中需要访问一个资源,每个进程并不知道其他进程的存在,且每个进程也不受其他进程的影响。

竞争进程之间没有任何信息交换,但一个进程的执行可能会影响到竞争进程的行为。特别是当两个进程都期望访问同一个资源时,如果操作系统把这个资源分配给一个进程,那么另一个进程就必须等待,一种极端情况是:被阻塞的进程永远不能访问这个资源,因此该进程永远不能成功运行结束。

竞争进程面临三个控制问题:

互斥:假设两个或更多进程需要访问一个不可共享的资源,如打印机。

临界资源:在执行过程中,每个进程都会给该i/o设备发命令,接受状态信息,发送数据和接收数据。这类资源称为临界资源。

临界区:使用临界资源的那部分程序称为程序的临界区。

进程间通过共享合作

进程间在互相并不确切知道对方的情况下进行交互。例如:多个进程可能访问一个共享变量,进程可能使用并修改共享变量而不涉及其他进程,但却知道其他进程也可能访问同一个数据。因此这些进程必须合作,以确保它们共享的数据得到正确管理。控制机制必须确保共享数据的完整性。

进程间通过通信合作(进程间的通信)

当今从通过通信进行合作时,各个进程都与其他进程进行连接。通信提供同步和协调各种活动的方法。

进程同步

多道程序系统中进程是并发执行的,这些进程之间存在着不同的制约关系,为了协调进程之间的相互制约关系,就需要实现进程的同步。互斥是同步的一种特殊情况。

同步:一个进程到达了某些点后,除非另一个进程已完成了某些操作,否则就不得不停下来等待这些结束,这就是进程的同步。

同步机制遵循规则:

空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态 ,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源。

忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥和访问。

有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。

让权等待:当今从不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。

互斥的要求

必须强制实施互斥:在与相同资源或共享对象的临界区有关的所有进程中,一次只允许一个进程进入临界区。

一个在非临界区停止的进程不能干涉其他进程。

绝不允许出现需要访问临界区的进程被无限延迟的情况,即不会死锁或饥饿。

没有进程在临界区时,任何需要进入临界区的进程必须能够立即进入。

对相关进程的执行速度和处理器的数量没有任何要求和限制。

一个进程驻留在临界区的时间必须是有限的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: