Java教程

二--4.进程同步

本文主要是介绍二--4.进程同步,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地相互合作,从而使程序的执行具有可再现性。

1.进程同步的基本概念

  1.1两种形式的制约关系

    (1)间接相互制约关系(进程互斥)

      多个进程并发执行时,因共享系统资源而产生的相互制约关系

      例:打印机,要保证多个进程互斥的访问打印机。用户在使用前应先提出请求并由OS统一分配,不允许用户进程直接使用,从而形成间接相互制约关系。

    (2)直接相互制约关系(进程同步)

      为完成某任务而建立多个进程,这些进程因相互合作而形成的制约关系

      例:输入进程A和计算进程B之间因共享一个缓冲区而形成的制约关系

  1.2临界资源(Critical Resouce)

    一段时间内仅允许一个进程使用的资源

    进程间应采用进程互斥方式共享使用他们

    如打印机、CPU

  1.3临界区(critical section)

    进程中访问临界资源的那段代码

    若能保证诸进程互斥的进入自己的临界区,便可实现进程对临界资源的互斥访问

    一个访问临界资源的循环进程描述:

      while(TRUE)

      {
        进入区
        临界区
        退出区
        剩余区
      }

      进入区:检查临界资源是否被访问,若未被访问,则可进入临界区并设它整杯访问的标志。

      退出区:将临界区正被访问的标志恢复为未被访问

  1.4同步机制应遵循的规则

    (1)空闲让进:无进程处于临界区时,允许请求进入临界区的进程立即进入

    (2)忙则等待:已有进程进入临界区。其他试图进入临界区的进程必须等待

    (3)有限等待:对要求访问临界资源的进程,保证其在有限时间内能进入自己的临界区,避免进入“死等”

    (4)让权等待:进程不能进入自己的临界区时,应立即释放处理及,防止“忙等”

2.硬件同步机制

  2.1关中断

    实现互斥的最简单的方法之一

    进入锁测试之前关闭中断,这样进程在临界区执行期间计算机系统不响应中断,不会引发调度,保证了对锁的测试和关锁操作的连续性和完整性,保证了互斥(进入临界区关中断,离开临界区开中断)

    缺点:

      滥用关中断权力可能导致严重后果

      关中断时间过长影响系统效率,限制处理器交叉执行程序的能力

      关中断方法不适用于多CPU系统,因为不能防止进程在其他CPU上执行

  2.2Test-and-Set指令

      

 

      进程进入临界区之前,用TS指令测试lock,如果其值为FALSE,表示没有进程在临界区内,可以进入,并将TRUE赋给lock,即关闭了临界资源,使任何进程不能进入临界区,循环测试直到TS(s)为TRUE。

   2.3Swap指令

    

 

  

 3.信号量机制

  3.1整型信号量

    

 

  3.2记录型信号量

    

 

     S->value的初值表示系统中某类资源的数目,因而又称为资源信号量,对他的每次wait操作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类资源数减少一个,描述为S->value--

    当S->value < 0时,表示该类资源已经分配完毕,因此进程应调用block原语进行自我阻塞,放弃处理机,并插入到信号量链表S->list中

    此时S->value的绝对值表示在该信号量链表中已阻塞的进程的数目

    对信号量的每次signal操作表示执行进程释放一个单位资源,使可分配的该类资源数加一,即S->value++

    若加一后仍S->value <= 0 则表示链表中仍有等待该资源的进程被阻塞,故还要调用wakeup原语,将S->list中的第一个进程唤醒

    如果S->value的初值为1,此时信号量转化为互斥信号量,用于进程互斥。

  3.3AND型信号量

    前面的方法是多个进程仅共享一个临界资源,若涉及多个临界资源

    

 

     

    

 

    Swait即Simultaneous wait

  3.4信号量集

     

 

     

 

 4.信号量的应用

  4.1利用信号量实现进程互斥

    

 

     mutex取值范围为(-1,0,1),mutex=1时,两个进程皆未进入需要互斥的临界区

    mutex=0时,有一个进程进入临界区运行,另一个必须等待,进入阻塞队列

    mutex=-1时,一个在临界区,一个在阻塞,需要被已在临界区运行的进程退出时唤醒

  4.2利用信号量实现前趋关系

    

 

 5.管程机制

  

  5.1管程的定义

     由代表共享资源的数据结构以及对该数据结构实施操作的一组过程组成的资源管理程序共同构成的操作系统的资源管理模块,被称为管程。

    Hansan的定义:一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。

    管程的四部分:

      (1)管程的名称

      (2)局部于管程的共享数据结构说明

      (3)对该数据结构进行操作的一组过程

      (4)对局部于管程的共享数据设置初始值的语句

    

 

 

     进程与管程的不同

      

 

  5.2条件变量

    与信号量区别:

      wait和signal不涉及资源,只涉及进程的阻塞与唤醒

 

这篇关于二--4.进程同步的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!