操作系统4--同步软硬件方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.10/21 4.10/21 10 ©2011
进入区:进入临界区之前, 进入区:进入临界区之前,检查 可否进入临界区的一段代码。 可否进入临界区的一段代码。如果 可以进入临界区,通常设置相应“ 可以进入临界区,通常设置相应“ 正在访问临界区”标志; 正在访问临界区”标志; 临界区:进程中访问临界资源的 临界区: 一段代码; 一段代码; 退出区:用于将" 退出区:用于将"正在访问临界 标志清除。 区"标志清除。 剩余区:代码中的其余部分。 剩余区:代码中的其余部分。
4.8/21 4.8
©2011
操作系统
2、临界区
每个进程中访问临界 资源的那段程序段称为 临界区( 临界区(critical section)。 section)。
4.9/21 4.9
©2011
操作系统
访问临界资源的循环进程
Repeat Entry section Critical section; Exit section Remainder section; Until false;
Repeat Flag[i]:=true;turn:=j; While(flag[j] and turn=j) do no_op Critical section; Flag[i]:=false; remainder section; Until false;
结合算法1和算法3 结合算法1和算法3,是正确的算法 turn=j;描述可进入的进程 同时修改标志时) 描述可进入的进程( turn=j;描述可进入的进程(同时修改标志时) 在进入区先修改后检查,并检查并发修改的先后: 在进入区先修改后检查,并检查并发修改的先后: 检查对方flag 如果不在临界区则自己进入——空闲则入 flag, 检查对方flag,如果不在临界区则自己进入 空闲则入 否则再检查turn 保存的是较晚的一次赋值, turn: 否则再检查turn:保存的是较晚的一次赋值,则较晚的进 程等待,较早的进程进入——先到先入,后到等待 程等待,较早的进程进入 先到先入, 先到先入
操作系统
3.3 3.3 进程同步
3.3.1 3.3.1 3.3.2 3.3.2 3.3.3 3.3.4
进程同步的基本概念 信号量( 信号量(semaphore) 经典进程同步问题 进程间通信
4.1/21 4.1
©2011
进程间的合作关系
司机 售票员
操作系统
正常行车 合作 到站停车
售票 开车门
开车
合作
关车门
©2011
4.2/21 4.2
操作系统
进程间竞争资源
打印进程1 打印进程 打印进程2 打印进程
获得打印数据
获得打印数据
打印
竞争
打印
4.3/21 4.3
©2011
操作系统
计算进程
合作与竞争
完成数据计算 竞争 计算结果送到Buffer 计算结果送到 合作 通知打印进程打印 Buffer
打印进程 合作 通知计算进程 送下一个数
<a> <b>
缺点:Pi和Pj可能都进入不了临界区。 缺点:Pi和Pj可能都进入不了临界区。按下面序列执行 可能都进入不了临界区 会都进不了临界区: Pj<b>"。 时,会都进不了临界区:"Pi<a> Pj<a> Pi<b> Pj<b>"。
4.15/21 4.15/21 15 ©2011
操作系统
算法4(Peterson s Algorithm): 算法4(Peterson’s Algorithm): 4(Peterson 先修改、后检查、 先修改、后检查、后修改者等待
4.7/21 4.7 ©2011操作系统Βιβλιοθήκη 1.临界资源 1.临界资源
对于计算机中的有些软硬件资源, 对于计算机中的有些软硬件资源,当多个进程对其进 行访问时(关键是进行写入或修改), ),必须互斥地进 行访问时(关键是进行写入或修改),必须互斥地进 这些一次只允许一个进程使用的资源称为临界资 行,这些一次只允许一个进程使用的资源称为临界资 resource)。 源(critical resource)。 打印机、内存变量、指针、数组等都是临界资源。 打印机、内存变量、指针、数组等都是临界资源。 生活中的例子如:电话机等。 生活中的例子如:电话机等。 临界资源需要采用互斥方式,实现对资源的共享。 临界资源需要采用互斥方式,实现对资源的共享。
©2011
操作系统
算法2 锁变量方法(双标志、先检查) 算法2:锁变量方法(双标志、先检查)
设立一个标志数组flag[]:描述进程是否在临界区,初值均为FALSE。 设立一个标志数组flag[]:描述进程是否在临界区,初值均为FALSE。 flag[] FALSE 先检查,后修改:在进入区检查另一个进程是否在临界区, 先检查,后修改:在进入区检查另一个进程是否在临界区,不在时 修改本进程在临界区的标志; 修改本进程在临界区的标志; 在退出区修改本进程在临界区的标志; 在退出区修改本进程在临界区的标志;
Repeat While turn≠i do no_op ≠ Critical section; turn:=j; remainder section; Until false;
4.13/21 4.13/21 13
缺点: 缺点: 强制轮流进入临界区 进入临界区, 强制轮流进入临界区,没 有考虑进程的实际需要。 有考虑进程的实际需要。容易 造成资源利用不充分 资源利用不充分: 造成资源利用不充分: 在Pi出让临界区之后,Pj Pi出让临界区之后, 出让临界区之后 使用临界区之前,Pi不可能再 使用临界区之前,Pi不可能再 次使用临界区; 次使用临界区;
空闲则入:其他进程均不处于临界区; 空闲则入:其他进程均不处于临界区; 忙则等待:已有进程处于其临界区; 忙则等待:已有进程处于其临界区; 有限等待:等待进入临界区的进程不能"死等" 有限等待:等待进入临界区的进程不能"死等"; 让权等待:不能进入临界区的进程,应释放CPU( 让权等待:不能进入临界区的进程,应释放CPU( CPU 如转换到阻塞状态) 如转换到阻塞状态)
利用TS实现进程互斥: 利用TS实现进程互斥:每个临界资源设置一个公共布尔变量 TS实现进程互斥 lock,初值为FALSE lock,初值为FALSE 在进入区利用TS进行检查:有进程在临界区时,重复检查; TS进行检查 在进入区利用TS进行检查:有进程在临界区时,重复检查; 直到其它进程退出时,检查通过; 直到其它进程退出时,检查通过;
Repeat While flag[j] do no_op <a> Flag[i]:=true; <b> ; Critical section; Flag[i]:=false; remainder section; Until false;
4.14/21 4.14/21 14 ©2011
优点:不用交替进入, 优点:不用交替进入,可连续使用 缺点:Pi和Pj可能同时进入临界 缺点:Pi和Pj可能同时进入临界 按下面序列执行时, 区。按下面序列执行时,会同时 进入: 进入:"Pi<a> Pj<a> Pi<b> Pj<b>"。 Pj<b>"。
3.3.1 3.3.1 进程同步的基本概念
竞争资源关系: 竞争资源关系:
进程同步的主要任务:保证诸进程能互斥地 进程同步的主要任务:保证诸进程能互斥地 互斥 访问临界资源
相互合作关系: 相互合作关系:
进程同步的主要任务: 进程同步的主要任务:保证相互合作的诸进 程在执行次序上的协调——同步。 同步。 程在执行次序上的协调 同步
Test-and-Set指令 Test-and-Set指令
该指令读出标志后设置为TRUE 该指令读出标志后设置为TRUE boolean TS(boolean *lock) { boolean old; old = *lock; *lock = TRUE; return old; } lock表示资源的两种状态 TRUE表示正被占用 表示资源的两种状态: 表示正被占用, lock表示资源的两种状态:TRUE表示正被占用, FALSE表示空闲 FALSE表示空闲
4.6/21 4.6
©2011
操作系统
计算进程与打印进程的同步
计算进程
完成数据计算
打印进程
互斥 计算结果送到Buffer Buffer
是 Buffer空? 空 否
向打印进程发信号 通知其从Buffer里取数 通知其从 里取数 否 Buffer空? 空 是
从Buffer中取数 互斥 协调
打印
向计算进程发信号 通知其向Buffer送数 通知其向 送数
4.17/21 4.17/21 17 ©2011
操作系统
利用TS实现进程互斥 利用TS实现进程互斥 TS
Repeat While TS(lock) do skip Critical section; lock:=false; remainder section; Until false;
boolean TS(boolean *lock) { boolean old; old = *lock; *lock = TRUE; return old; }
4.19/21 4.19/21 19
©2011
操作系统
利用Swap指令实现互斥算法 利用Swap指令实现互斥算法 Swap
操作系统
进入区、 进入区、退出区各部分的作用
... ... 进入区 临界区 退出区 ... ... 进程1 进程 改变资源 状态 释放资源 ... ... 进入区 临界区 退出区 ... ... 进程2 进程 阻塞等待 资源释放
4.11/21 4.11/21 11
©2011
操作系统
3、同步机制应遵循的准则
操作系统
算法3 锁变量方法(双标志、后检查) 算法3:锁变量方法(双标志、后检查)
类似于算法2 类似于算法2,与2的区别在于先修改后检查。可防止两个进程同 的区别在于先修改后检查。 时进入临界区。 时进入临界区。
Repeat Flag[i]:=true; ; While flag[j] do no_op Critical section; Flag[i]:=false; remainder section; Until false;
4.16/21 4.16/21 16 ©2011
操作系统
进程互斥的硬件方法(补充) 5、进程互斥的硬件方法(补充)
完全利用软件方法,有很大局限性(如不适于多进程),实现过 完全利用软件方法,有很大局限性(如不适于多进程),实现过 ), 于复杂,需要高的编程技巧。 于复杂,需要高的编程技巧。 可以利用某些硬件指令——其读写操作由一条指令完成,因而保 其读写操作由一条指令完成, 可以利用某些硬件指令 其读写操作由一条指令完成 证读操作与写操作不被打断; 证读操作与写操作不被打断;
竞争
从Buffer中取数 中取数 打印
4.4/21 4.4
©2011
操作系统
进程间存在两种关系
操作顺序冲突
司机与售票员 计算者与打印者 多个打印者
共享外设、内存( 共享外设、内存(变 量)等资源
协调好这些关系的过程——进程的同步 进程的同步 协调好这些关系的过程
4.5/21 4.5 ©2011
操作系统
4.18/21 4.18/21 18 ©2011
操作系统
Swap指令( Exchange指令) Swap指令(或Exchange指令) 指令 指令 交换两个字(字节)的内容: 交换两个字(字节)的内容: void SWAP(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }
4.12/21 4.12/21 12
©2011
4、进程互斥的软件方法(补充) 进程互斥的软件方法(补充) 算法1 强制轮换法(单标志) 算法1:强制轮换法(单标志)
操作系统
有两个进程Pi, Pj,其中的Pi 有两个进程Pi, Pj,其中的Pi turn: 设立一个公用整型变量 turn:描述允许进入临界区的进程标识 在进入区检查是否允许本进程进入:turn :turn为 进程Pi可进入; Pi可进入 在进入区检查是否允许本进程进入:turn为i时,进程Pi可进入; 在退出区修改turn的值:进程Pi退出时,改turn为j; 在退出区修改turn的值:进程Pi退出时, turn为 turn的值 Pi退出时
相关文档
最新文档