操作系统之进程同步

本文详细介绍了操作系统中进程同步的基本概念,包括间接和直接相互制约关系、临界区、进入区、退出区和剩余区。文章阐述了进程同步的四条准则,并探讨了硬件同步机制,如关中断、Test-and-Set指令和Swap指令。接着,文章深入讲解了信号量机制,包括整型信号量、记录型信号量、AND型信号量以及信号量集。最后,提出了管制机制和条件变量的概念,讨论了管程如何实现进程互斥和同步。
摘要由CSDN通过智能技术生成

操作系统之进程同步

一、 进程同步的基本概念:
  • 主要任务:进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地相互合作,从而使程序的执行具有可再现性。
  • 两种形式的制约关系:
  1. 间接相互制约关系
    多个程序在并发执行时,由于共享系统资源,如CPU、I/O设备等,致使在这些并发执行的程序之间形成相互制约的关系。对于像打印机、磁带机这样的临界资源,必须保证多个进程对之只能互斥地访问,由此,在这些进程间形成了源于对该类资源共享的所谓间接相互制约关系。为了保证这些进程能有序地运行,对于系统中的这类资源,必须由系统实施统一分配,即用户在要使用之前,应先提岀申请,而不允许用户进程直接使用。
  2. 直接相互制约关系
    某些应用程序,为了完成某任务而建立了两个或多个进程。这些进程将为完成同一项任务而相互合作。进程间的直接制约关系就是源于它们之间的相互合作。例如,有两个相互合作的进程——输入进程A和计算进程B,它们之间共享一个缓冲区。进程A通过缓冲向进程B提供数据。进程B从缓冲中取出数据,并对数据进行处理。但如果该缓冲空时,计算进程因不能获得所需数据而被阻塞。一旦进程A把数据输入缓冲区后便将进程B唤醒; 反之,当缓冲区已满时,进程A因不能再向缓冲区投放数据而被阻塞,当进程B将缓冲区数据取走后便可唤醒A。
  • 临界区(critical section): 人们把在每个进程中访问临界资源的那段代码称为临界区(critical section)
  • 进入区(entry section): 在临界区前面增加一段用于进行上述检查的代码,把这段代码称为进入区(entry section)
  • 退出区(exit section): 在临界区后面也要加上一段称为退出区(exit section)的代码,用于将临界区正被访问的标志恢复为未被访问的标志。
  • 剩余区: 进程中除上述进入区、临界区及退出区之外的其它部分的代码在这里都称为剩余区。
二、所有同步机制都应遵循下述四条准则:
  1. 空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。
  2. 忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因而其它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
  3. 有限等待。对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入"死等”状态。
  4. 让权等待。当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入 “忙等”状态。
三、硬件同步机制
  1. 背景:虽然可以利用软件方法解决诸进程互斥进入临界区的问题,但有一定难度,并且存在很大的局限性,因而现在已很少采用。相应地,目前许多计算机已提供了一些特殊的硬件指令,允许对一个字中的内容进行检测和修正,或者是对两个字的内容进行交换等。可利用这些特殊的指令来解决临界区问题。
  2. 实现互斥的方法:
    • 关中断:
      关中断是实现互斥的最简单的方法之一。
      在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断。这样,进程在临界区执行期间,计算机系统不响应中断,从而不会引发调度,也就不会发生进程或线程切换。由此,保证了对锁的测试和关锁操作的 连续性和完整性,有效地保证了互斥。但是,关中断的方法存在许多缺点:①滥用关中断 权力可能导致严重后果;②关中断时间过长,会影响系统效率,限制了处理器交叉执行程 序的能力;③关中断方法也不适用于多CPU系统,因为在一个处理器上关中断并不能防 止进程在其它处理器上执行相同的临界段代码。
    • 利用Test-and-Set指令实现互斥:
      这是一种借助一条硬件指令——“测试并建立”指令TS(Test-and-Set)以实现互斥的方法。在许多计算机中都提供了这种指令。
      TS指令的一般性描述如下:
      在这里插入图片描述
      见链接:https://blog.csdn.net/Abit_Go/article/details/104012860
      操作系统中的Test-and-Set指令实现互斥(java实现)
    • 利用Swap指令实现进程互斥
      该指令称为对换指令,在Intel 80x86中又称为XCHG指令,用于交换两个字的内容。 其处理过程描述如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值