26考研——进程与线程_同步和互斥_同步与互斥的基本概念(2)
408答疑
文章目录
- 五、同步和互斥
- 同步与互斥的基本概念
- 为什么要引入同步和互斥?
- 临界资源和临界区
- 同步(协同完成一项任务)
- 定义
- 同步进程的协调
- 示例
- 互斥(竞争同一资源而发生相互制约)
- 定义
- 进程互斥的特点
- 资源共享关系
- 示例
- 进程同步机制应遵循的原则
- 七、参考资料
- 鲍鱼科技课件
- 26王道考研书
五、同步和互斥
同步与互斥的基本概念
为什么要引入同步和互斥?
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步的概念。
- 例如,让系统计算 1 + 2 × 3 1 + 2 \times 3 1+2×3,假设系统产生两个进程:一个是加法进程,一个是乘法进程。
- 要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的。
- 因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生,而这种机制就是本节要讨论的内容。
临界资源和临界区
- 虽然多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所用,我们将一次仅允许一个进程使用的资源称为临界资源。
- 许多物理设备都属于临界资源,如打印机等。此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。
- 对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区。
- 为了保证临界资源的正确使用,可将临界资源的访问过程分成 4 个部分:
while(true) {entry section; // 进入区critical section; // 临界区exit section; // 退出区remainder section; // 剩余区 }
- 进入区:为了进入临界区使用临界资源,在进入区要检查可否进入临界区,若能进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。
- 临界区:进程中访问临界资源的那段代码,又称临界段。
- 退出区:将正在访问临界区的标志清除。
- 剩余区:代码中的其余部分。
同步(协同完成一项任务)
定义
- 同步亦称直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要协调它们的运行次序而等待、传递信息所产生的制约关系。
- 同步关系源于进程之间的相互合作。
同步进程的协调
- 共享资源:同步进程通过共享资源来协调活动,在执行时间的次序上有一定约束。
- 相互合作:虽然彼此不直接知道对方的名字,但知道对方的存在和作用。
- 任务完成:在协调动作的情况下,多个进程可以共同完成一项任务。
示例
- 输入进程 A 通过单缓冲向进程 B 提供数据:
- 当该缓冲区空时,进程 B 不能获得所需数据而阻塞,一旦进程 A 将数据送入缓冲区,进程 B 就被唤醒。
- 反之,当缓冲区满时,进程 A 被阻塞,仅当进程 B 取走缓冲数据时,才唤醒进程 A。
互斥(竞争同一资源而发生相互制约)
定义
- 进程互斥是指当一个进程进入临界区使用临界资源时,另一个进程必须等待。
- 当占用临界资源的进程退出临界区后,另一个进程才被允许使用临界资源。
进程互斥的特点
- 独立进程的制约:在逻辑上这两个进程本来完全独立,毫无关系,只是由于竞争同一个物理资源而相互制约。
- 无时间次序特征:它们的运行不具有时间次序的特征。
资源共享关系
- 访问控制:多个进程需要访问共同的资源,即当一个进程访问共享资源时,访问该共享资源的其他进程必须等待。
- 互斥访问:当这个进程使用完后,其他进程才能使用。这时要求进程应互斥地访问共享资源。
示例
- 在仅有一台打印机的系统中,有两个进程 A 和进程 B:
- 若当进程 A 需要打印时,系统已将打印机分配给进程 B,则进程 A 必须阻塞。
- 一旦进程 B 将打印机释放,系统便将进程 A 唤醒,并将其由阻塞态变为就绪态。
进程同步机制应遵循的原则
为禁止两个进程同时进入临界区,同步机制应遵循以下准则:
-
空闲让进(单独进入):当无进程处于临界区时,临界资源处于空闲状态,可以允许一个请求进入临界区的进程进入自己的临界区,有效地使用临界资源。
-
忙则等待(独占临界区):当已有进程进入自己的临界区时,意味着临界资源正被访问,因而其他试图进入临界区的进程必须等待,以保证进程互斥地使用临界资源。
-
有限等待(限时退出):对要求访问临界资源的进程,应保证该进程在有效的时间内进入自己的临界区,以免陷入 “死等” 状态。
-
让权等待(原则上应该遵循,但非必须):当进程不能进入自己的临界区时,应立即释放处理器,以免陷入 “忙等”。
知道程度 | 关系 | 对其他进程的影响 | 潜在的控制问题 |
---|---|---|---|
进程之间不知道对方 | 竞争(进程互斥) | 1. 一个进程的结果与其它进程的活动无关 2. 进程的分时可能会受到影响 | • 互斥 • 死锁 • 饿死 |
进程间接知道对方 (如共享对象) | 通过共享合作(进程同步) | 1. 一个进程的结果可能依赖于从其他进程获得的信息 2. 进程的分时可能会受到影响 | • 互斥 • 死锁 • 饿死 • 数据一致性 |
进程直接知道对方 (有可用通信原语) | 通过通信合作(进程通信) | 1. 一个进程的结果可能依赖于从其他进程获得的信息 2. 进程的分时可能会受到影响 | • 死锁 • 饿死 |
七、参考资料
鲍鱼科技课件
b站免费王道课后题讲解:
网课全程班: