操作系统之并发性:互斥和同步1

并发是所有问题的基础,也是操系统设计的基础。并发包括很多设计问题,如进程间通信、资源共享与竞争、多个进程活动的同步以及分配给进程的处理器时间等(P140)
多处理器环境,分布式处理器环境,

一. 处理器的多道程序设计

1.单处理器的多道程序设计:进程交替执行,表现出一种并发的外部特征。即使不能真正并行处理,并且在进程间切换也需要一定开销,交替执行在处理效率和程序结构上还是带来了好处。

2.多处理器系统环境:不仅可以交替执行进程,还可以重叠执行。

二.关于并发

并发发生场景

并发会在以下三种不同的上下文中出现:多个应用程序,结构化应用程序,操作系统结构。

并发产生的基本需求

支持并发进程的基本需求是加强互斥能力。也就是说,当一个进程被授予互斥能力时,那么在其活动期间,它具有排斥所有其他进程的能力。

互斥解决方案:信号量,管程,消息传递

00001
00002

三.产生并发的原理

多道程序设计系统的一个基本特性:进程的相对执行速度不可预测,取决于其他进程活动、操作系统中断方式以及操作系统的调度策略。

多道程序设计系统特性引发相关问题
1.全局资源的共享充满危险(不同的读写执行顺序非常关键)
2.操作系统很难对资源进行最优化分配(容易发生死锁)
3.定位程序设计错误困难(结果不确定性与不可再现)

相关例子

共享变量的问题例子:问题的本质在于共享全局变量。多个进程访问这个全局变量,如果一个进程修改了它,然后被中断,另一个进程可能在第一个进程使用它的值之前又修改了这个变量。

扫描二维码关注公众号,回复: 1643495 查看本文章

两类问题
1.在单处理器系统的情况下,出现问题的原因是中断可能会在进程中的任何地方停止指令的执行;

2.在多处理器系统的情况下,不仅同样的条件可以引发问题,而且当两个进程同事执行并且都试图访问同一个全局变量时,也会引发问题。

解决思路控制对共享变量的访问。上面的例子说明,如果需要保护共享的全局变量(及其他共享的全局资源),唯一的办法是控制访问该变量的代码。如果我们定义了一条规则,一次只允许一个进程进入 echo,并且只有在 echo 过程允许结束后,他才对另一个进程是可用的,那么刚才讨论的那类问题就不会发生了。

四. 竞争条件

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

操作系统关注的问题

  • 操作系统必须能够跟踪不同的进程;
  • 操作系统必须为每个活跃的进程分配和释放各种资源;
  • 操作系统必须包含每个进程的数据和物理资源,避免其他进程的无意干涉;
  • 一个进程的功能和输出结果必须与其相对于其他并发进程的执行速度无关。

五.进程的交互

00002

三种方式

  • 进程之间相互不知道对方的存在(竞争情况);
  • 进程通过共享某些对象的方式间接知道对方的存在(合作行为);
  • 进程之间知道对方的存在(这些进程可以通过进程ID互相通信即合作行为)。
1.进程间的资源竞争

当并发进程竞争使用同一组员时,他们之间会发生冲突。竞争进程间没有任何信息交换,但是一个进程的执行可能会影响到竞争进程的行为。

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

a)互斥的要求:竞争进程仅可以访问一个临界资源(一次仅有一个进程可以访问临界资源),并发机制必须满足一次只有一个进程可以访问临界资源这个规则。假设两个或更多的进程需要访问一个不可共享的资源,我们把这类资源称为临界资源,使用临界资源的那一部分程序称为程序的临界区

b)死锁 :如果竞争进程需要唯一的访问多于一个资源,并且当一个进程控制着一个进程,且在等待另一个进程,死锁可能发生。

c)饥饿:一组进程的一个可能会无限期地拒绝进入到一个需要资源,因为其他成员组成垄断这个资源。

2.进程间通过共享合作

多个进程可能访问一个共享变量、共享文件或数据库,进程可能使用并修改共享变量而并不涉及其他进程,但却知道其他进程也可能访问同一个数据。因此,这些进程必须合作,以确保它们共享的数据得到正确的管理。

由于数据保存在资源中,因此再次涉及有关互斥、死锁和饥饿等控制问题。唯一的却别是可以以两种不同的模式(读和写)访问数据项,并且只有写操作必须保持互斥。

对于数据一致性的要求,在通过共享进行合作的情况下,临界区的概念是非常重要的。

3.进程间通过通信合作

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

六. 互斥问题

实现互斥的互斥要求

  • 必须强制实施互斥:在具有关于相同资源或共享对象的临界区的所有进程中,一次只允许一个进程进入临界区。
  • 一个在临界区停止的进程必须不干涉其他进程。
  • 绝不允许出现一个需要访问临界区的进程被无限延迟的情况,即不会饿死或饥饿。
  • 当没有进程在临界区中时,任何需要进入临界区的进程必须能够立即进入。
  • 对相关进程的速度和处理器的数目没有任何要求和限制。
  • 一个进程驻留在临界区中的时间是有限的。

为满足互斥条件的几种方法

  • 软件方法:让由并发执行的进程担负实现互斥的责任,这类进程,不论是系统程序还是应用程序,都需要与另一个进程合作,二不需要程序设计语言或操作系统通过任何支持来实施互斥。
  • 第二种方法涉及专门的机器指令。
  • 在操作系统货程序设计语言中提供某种级别的支持。

猜你喜欢

转载自blog.csdn.net/qq_36148847/article/details/79780532