《王道操作系统》:第二章 进程管理:进程的同步与互斥、死锁

本文深入探讨了进程同步与互斥的概念,包括直接制约和间接制约的关系,临界资源及其访问规则。重点介绍了软件(单标志、双标志法等)和硬件(中断屏蔽、TestAndSet等)实现进程互斥的方法,以及信号量机制在这些问题上的应用。此外,还涵盖了生产者消费者问题、哲学家进餐问题和管程在解决这些问题中的角色。最后,讲解了死锁的概念、预防和避免策略,以及检测与解除方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.3_进程的同步与互斥

2.3.1_进程的同步与互斥

在这里插入图片描述

1)、进程同步

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

进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进

2)、进程互斥

两种资源共享方式:

  • 互斥共享方式(系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
  • 同时共享方式(系统中的某些资源,允许一个时间段内由多个进程同时对它们进行访问

我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源

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

在这里插入图片描述

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

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

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

  1. 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区
  2. 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待
  3. 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)
  4. 让权等待。当进程不能进入临界区时,应立即释放处理机,访问进程忙等待

2.3.2_进程互斥的软件实现方法

在这里插入图片描述

1)、单标志法

在这里插入图片描述

在这里插入图片描述

2)、双标志先检查法

在这里插入图片描述

3)、双标志后检查法

在这里插入图片描述

4)、Peterson算法

在这里插入图片描述

Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则

2.3.3_进程互斥的硬件实现方法

在这里插入图片描述

1)、中断屏蔽方法

在这里插入图片描述

2)、TestAndSet(TS指令/TSL指令)

在这里插入图片描述

3)、Swap指令(XCHG指令)

在这里插入图片描述

2.3.4_信号量机制

在这里插入图片描述

在这里插入图片描述

1)、整型信号量

在这里插入图片描述

2)、记录型信号量

在这里插入图片描述

在这里插入图片描述

CPU轮流为 P 0 P_0 P0 P 1 P_1 P1 P 2 P_2 P2 P 3 P_3 P3服务,同时value和L的值发生变化

在这里插入图片描述

CPU运行到 P 2 P_2 P2进程,但是没有打印机资源, P 2 P_2 P2转为阻塞态,CPU转而准备去运行 P 3 P_3 P3进程

在这里插入图片描述

CPU运行到 P 3 P_3 P3进程,但是没有打印机资源, P 3 P_3 P3转为阻塞态,CPU转而准备去运行 P 0 P_0 P0进程

在这里插入图片描述

P 0 P_0 P0进程运行完毕,叫醒 P 2 P_2 P2进程来用打印机,同时value和L的值发生变化

在这里插入图片描述

P 2 P_2 P2进程运行完毕,叫醒 P 1 P_1 P1进程来用打印机,同时value和L的值发生变化

在这里插入图片描述

2.3.5_š用信号量机制实现进程互斥、同步、前驱关系

在这里插入图片描述

1)、实现进程互斥

在这里插入图片描述

2)、实现进程同步

在这里插入图片描述

在这里插入图片描述

3)、实现进程的前驱关系

在这里插入图片描述

2.3.6_生产者消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用

生产者、消费者共享一个初始为空、大小为n的缓冲区

只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待

只有缓冲区不空时,消费者才能从中取出产品,否则必须等待

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用

在这里插入图片描述

生产者、消费者共享一个初始为空、大小为n的缓冲区

在这里插入图片描述

只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待

在这里插入图片描述

只有缓冲区不空时,消费者才能从中取出产品,否则必须等待

在这里插入图片描述

缓冲区是临界资源,各进程必须互斥地访问

在这里插入图片描述

在这里插入图片描述

2.3.7_哲学家进餐问题

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.3.8_管程

1)、管程的定义和基本特征

管程是一种特殊的软件模型,由这些部分组成:

  • 局部于管程的共享数据结构说明
  • 对该数据结构进行操作的一组过程
  • 对局部于管程的共享数据设置初始值的语句
  • 管程有一个名字

管程的基本特征:

  • 局部于管程的数据只能被局部于管程的过程所访问
  • 一个进程只有通过调用管程内的过程才能进入管程访问共享数据
  • 每次仅允许一个进程在管程内执行某个内部过程
2)、用管程解决生产者消费者问题

在这里插入图片描述

在这里插入图片描述

2.4_死锁

2.4.1_死锁的概念

在这里插入图片描述

1)、什么是死锁

在这里插入图片描述

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

在这里插入图片描述

3)、死锁产生的必要条件

在这里插入图片描述

4)、什么时候会发生死锁

在这里插入图片描述

5)、死锁的处理策略

在这里插入图片描述

2.4.2_死锁的处理策略——预防死锁

在这里插入图片描述

1)、破坏互斥条件

在这里插入图片描述

2)、破坏不可剥夺条件

在这里插入图片描述

3)、破坏请求和保持条件

在这里插入图片描述

4)、破坏循环等待条件

在这里插入图片描述

2.4.3_死锁的处理策略——避免死锁

1)、什么是安全序列

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2)、银行家算法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3)、小结

在这里插入图片描述

2.4.4_死锁的处理策略——检测和解除

在这里插入图片描述

1)、死锁的检测

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2)、死锁的解除

在这里插入图片描述

脑图地址:

https://github.com/hxt970311/os_outline

参考:

https://www.bilibili.com/video/BV1YE411D7nH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邋遢的流浪剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值