计算机操作系统-进程(6)进程同步与互斥、管制、死锁

  • 进程同步与进程互斥概念

进程同步

因为进程具有异步性的特征,即并发执行的进程是以各自独立的、不可预知的速度向前推进。而进程同步就是希望能保证并发执行进程时,进程中指令执行的顺序

同步亦称直接制约关系,它是指为了完成某种任务而建立的两个或者多个进程,这些进程因为需要在某些位置上协调他们的工作次序而产生的制约关系。进程间的直接制约关系就是源于他们之间的相互合作

进程互斥

进程的并发需要共享的支持。各个并发执行的进程不可避免地需要共享一些系统资源

我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,此外还有一些变量、数据、内容缓冲区等等

对临界资源的访问,必须互斥地进行。互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源

进程互斥的过程

对临界资源的互斥访问,可在逻辑上分为以下四个部分

do{

    entry section; //进入区

    critical section; //临界区

    exit section; //退出区

    remainder section; //剩余区

} while(True)
  • entry section:

负责检查是否可以进入临界区,若可以进入,则设置正在访问临界资源的标准,即上锁。以防止其他进程同时进入临界区

  • critical section:

访问临界资源的代码

  • exit section:

负责解除正在访问临界资源额标准,即解锁

  • remainder section:

做其他处理

注意

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

进入区和退出区是负责实现互斥的代码段

临界区也可称为“临界段”

为了实现临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则

1.空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区

2.忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待

3.有限等待:对请求访问的进程,应保证能在有限时间内进入临界区,保证不会饥饿

4.让权等待:当进程不能进入临界区时,应立即释放处理机,放置进程忙等待

  • 管程

定义

管程是一个特殊的软件模块,组成部分:

  1. 局部于管程的共享数据结构说明
  2. 对该数据结构进行操作的一组过程(过程可以理解为函数)
  3. 对局部于管程的共享数据设置初始值的语句
  4. 管程的名字

所以可以看出,其实管程就像是OOP中的类的概念

基本特征

  1. 局部于管程的数据只能被局部于管程的过程所访问
  2. 一个进程只有通过调用管程内的过程才能进入管程访问共享数据
  3. 每次仅允许一个进程在管程内执行某个内部过程
  • 死锁

定义

每个进程都占有一个资源,同时又在等待另一个人手里的资源。发生“死锁”

在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。发生死锁后若无外力干预,这些进程都无法继续向前推进

死锁、饥饿、死循环的区别

  • 死锁

各个进程互相等待对方手里的资源,导致各进程都阻塞 ,无法向前推进的现象。正因为是“循环等待对方手里的资源”导致的死锁,那么如果有死锁现象,那至少有两个及以上的进程同时死锁。另外发生死锁的进程一定出于阻塞态

  • 饥饿

由于长期得不到想要的资源,某进程无法向前推进的现象。发生饥饿的进程既可能是阻塞态,例如长期得不到需要的IO设备,也可能是就绪态,例如长期得不到处理机。可能只有一个进程发生饥饿

  • 死循环

某进程执行过程中一直跳不出某个循环的现象,有时是因为程序逻辑bug导致的,有时是程序员故意设计的。死循环来说,可能只有一个进程发生死循环。死循环进程可以上处理机允许,只不过无法像期待那样顺利推进

死锁和饥饿问题是由于操作系统分配资源策略不合理导致的,而死循环是由代码逻辑的错误导致的。死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题

产生死锁的必要条件

产生死锁必须同时满足以下四个条件,只要有一个不满足,死锁就不会发生

  1. 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
  2. 不可剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
  3. 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源的请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放
  4. 循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求

猜你喜欢

转载自blog.csdn.net/weixin_39721347/article/details/86533687