操作系统进程机制与并发程序设计os3-4
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Pa
进程Pa 请求打印机 请求磁带机 释放打印机 释放磁带机
进程Pb 请求磁带机 请求打印机 释放磁带机 释放打印机
打印机 Pb
磁带机
北京林业大学信息学院
死锁的例子(2)
同类资源分配不当引起死锁
系统中有m个资源被n个进程共享,当每个进 程都要求K个资源,而m<n*K时,如果分配不 得当就可能引起死锁。 例如:m=4,n=4,K=2,执行中采用的分 配策略是为每个进程轮流分配资源。 假设每个进程对资源的申请和释放符合下列原 则: 一次只能申请一个单位;满足总申请后才 能使用;使用完后一次性释放
撤销进程的代价(代价最小)
•进程优先级 •进程运行代价(已运行的%) •进程类型
方法二:资源剥夺法
从一些进程剥夺足够的资源,分配给死锁的进程。
北京林业大学信息学院
作业
设系统中有3种类型的资源(A,B,C)和5个进程(P1, P2, P3, P4, P5),A资源的数量为17,B资源的数量为 5,C资源的数量为20。在T0时刻系统状态如下表。
TASK_SWAPPING
进程交换到交换区
北京林业大学信息学院
北京林业大学信息学院
进程与线程
线程
+ 堆栈 + 执行上下文TSS
进程 进程
线程
本质区别 进程地址空间独立 线程共享地址空间
+ + + + + +
代码 数据 堆栈 文件 IO 虚存
北京林业大学信息学院
进程调度(1)
调度策略
检测算法
北京林业大学信息学院
算法描述
Work:=Available; L:={ Li | Allocationi=0 Requesti=0 }; For all LiL do begin for all Requesti Work begin Work = Work +Allocationi Li L end end deadlock:=(L={P1,P2,…,Pn}
P2: 5 3 2
P4: 7 4 3
P1: 7 5 3 P3: 10 5 5 P5: 10 5 7
P3
P4 P5
9
2 4
0
2 3
2
2 3
P4
P5
2
0
1
0
1
2
P2 P4 P1 P3 P5
北京林业大学信息学院
5.解除死锁
方法一:撤销进程法
按照一定的次序逐次删除已死锁的进程,直到获得足 够的资源,解除死锁为止。
七、死锁
死锁原因和必要条件
死锁例子
死锁概念 产生死锁的原因和必要条件
预防死锁
资源独占(静态分配) 资源顺序分配
资源受控动态分配 (避免死锁)
发现死锁 (死锁检测) 解除死锁
北京林业大学信息学院
死锁的例子(1)
进程推进顺序不当产生死锁
cobegin Pa; Pb; coend
SCHED_OTHER SCHED_FIFO SCHED_RR 普通进程 执行时间不长的实时进程 (更高优先级可抢占CPU) 轮转的实时进程 (相同优先级进程用时间片调度)
weight priority counter
权值 静态优先级(时间片大小,单位时标) 动态优先级,当前的时间配额
DEF_PRIORITY =20, (每个时标10ms)
必要条件
互斥控制(资源独占) 非剥夺控制(不可剥夺) 请求和保持(部分分配,占有申请) 环路条件(循环等待)
北京林业大学信息学院
P1
P2 分 已 P1 请 求 配 F 请 求
P2 T
已
配 分
F 申请不来自百度文库类型的资源
T
简单的死锁例子
北京林业大学信息学院
3、预防死锁
通过设臵某些限制条件,去破坏死锁四个必 要条件中的一个或多个,来防止死锁。 在系统设计时确定资源分配算法,限制进程 对资源的申请,从而保证不发生死锁。 较易实现,广泛使用,但由于所施加的限 制往往太严格,可能导致系统资源利用率和 系统吞吐量的降低。
task 数组:进程控制块指针的集合(512个) task_struct结构 进程标识 进程状态 调度信息 进程链 时间片 进程通信信息 内存资源信息 文件资源信息 进程上下文
北京林业大学信息学院
Linux进程状态表
进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE TASK_ZOMBIE TASK_STOPPED 值 0 1 2 4 8 就绪 浅度睡眠 深度睡眠 僵死 暂停 说明
由于在避免死锁的策略中,允许进程动 态地申请资源。因而,系统在进行资源 分配之前预先计算资源分配的安全性。 若此次分配不会导致系统进入不安全状 态,则将资源分配给进程;否则,进程 等待。 最具有代表性的避免死锁算法:银行家 算法。
北京林业大学信息学院
安全状态与不安全状态
如果系统能按某种顺序为每个进程分配 其所需的资源,直至所有进程都能运行 完成,称系统处于安全状态。 若不存在这样一个安全序列称系统处于 不安全状态。
北京林业大学信息学院
静态资源分配
解决方法:
第一个必要条件
要求每一个进程在开始执行前就申请它所 需要的全部资源,仅当系统能满足进程的 资源申请要求且把资源分配给进程后,该 进程才能开始执行。 进程在执行过程中不再申请资源,故不可 能出现占有了某些资源再等待其他资源的 情况,即能使得“占有并等待”的条件不 成立,从而防止死锁的发生。
尚需申请数
2 3 5
最大需求数 剩余资源
4 6 8 2
北京林业大学信息学院
死锁检测中的数据结构
1、可用资源向量Available:表示m类资源中,每一 类的可用数目。
2、请求矩阵Request:是n m 矩阵,表示进程当 前对各类资源的请求数目。 3、分配矩阵Allocation:是 n m矩阵,用以表示 进程某一时刻的资源分配情况。 4、工作向量Work:表示系统可提供给进程继续运行 的各类资源数目。
Pa
S资源表示消息或信件 对信件的接收和发送不加限制
请求接收
Sc
Pc Sb
Sa
Pb
cobegin Pa; Pb; Pc; coend
北京林业大学信息学院
1、死锁概念
如果在一个进程集合中的每个进程都在等待 只能由该集合中的其他一个进程才能引发的事 件,则称这一组进程或系统此时发生了死锁。
一组进程中,每个进程都在无限等待被该 组进程中另一个进程所占有的永远不会释放的 资源,这种现象称系统处于死锁状态,简称死 锁。处于死锁状态的进程就称为死锁进程.
北京林业大学信息学院
R
R
P1
P2 (a)
P3
P4
P1
P2 (b)
P3
存储器共享的死锁
北京林业大学信息学院
死锁的例子(3)
对临时性资源使用不加限制引起死锁
资源的类型: 永久性资源:可供进程逐次再使用的资源; 临时性资源(消耗性资源):由一进程产生而被另一进 程消耗掉,只能使用短暂的时间。
产生和发送
Pm
an1
an2
…
amj
…
amn
北京林业大学信息学院
(1) 把未阻塞(Ci=0)的进程Pi记录在L表中(其全部资源请求已 得到满足的进程); (2) 从L表中选择一进程,根据资源分配表S释放分配给该进程 的所有资源; (3) 由进程等待表W依次检查和修改需要该进程释放资源的每 一个进程的等待计数器Cj; (4) 若Cj=0,则表示该进程所请求的资源已得到满足,不再阻 塞,将Pj记入L表中; (5)再从L表中选取另一进程,重复上述操作; (6) 若所有的进程都记入L表中,则系统初始状态为非死锁状 态,否则为死锁状态。
北京林业大学信息学院
死锁避免
max r1 P1 P2 7 3 r2 5 2 r3 3 2 P1 P2 P3
Available
r1
2
r2
3
r3
0
allocation r1 0 3 3 r2 1 0 0 r3 0 2 2 P1 P2 P3 P4 P5
need r1 7 0 6 0 4 r2 4 2 0 1 3 r3 3 0 0 1 1
缺陷:进程实际使用资源的顺序不一定 与资源的编号一致,会造成资源浪费。
北京林业大学信息学院
资源有序分配的实例
例如 #1: 卡片读入机 #2: 打印机 #3: 绘图仪 #4: 磁带驱动器 #5: 卡片穿孔机
北京林业大学信息学院
资源受控动态分配
系统中对进程发出的每一个系统能够 满足的资源申请进行动态检查,并根 据检查结果决定是否分配资源;如果 分配后系统可能发生死锁,则不予分 配,否则予以分配。
缺陷:降低资源的利用率。
北京林业大学信息学院
资源有序分配法
第四个必要条件
解决方法:把系统中所有资源排序加以全局编号, 进程申请资源时必须严格按资源编号的递增次序 进行,否则操作系统不予分配。 具体为,低优先级的资源申请高于高级资源,释 放资源的顺序和申请资源的次序相反。占用高级 资源时,若要申请低级资源,则高级资源需要先 行释放。
北京林业大学信息学院
4、发现死锁
通过设臵某些限制条件,去破坏死锁四个必要条件 中的一个或多个,来防止死锁。 在系统设计时确定资源分配算法,限制进程对资源 的申请,从而保证不发生死锁。 较易实现,广泛使用,但由于所施加的限制往往 太严格,可能导致系统资源利用率和系统吞吐量的 降低。
北京林业大学信息学院
当前进程的权值:weight=counter+priority+1 实时进程的权值:weight = 1000+rt_priority Weight是linux系统在进程调度过程中选择进程的唯一标准
北京林业大学信息学院
相关系统调用
系统调用:广义指令,操作系统提供给用户使 用的程序界面。 表3-4简要列出了和进程及进程间通信相关的 系统调用。
5、进程向量L:记录当前已不占有资源的诸进程。
北京林业大学信息学院
请求矩阵Request
资源
进程 P1 P2 … Pi R1 b11 b12 … b1j R2 b21 b22 … b2j … … … … … Rj b1j b2j … bij … … … … … Rm bm1 bm2 … bmj
… Pm
北京林业大学信息学院
单项资源的银行家算法
例如,设系统中有 10 台磁带机,由三个进程A、 B、C共享。假定A、B、C已分别占用了 2 台、3 台、 3 台,它们的最大需求量分别为4 台、 6 台、 8 台。 (假定只有当满足了最大需求量后才能释放所占用的 全部资源。)
进程名
A B C
已分配数
2 3 3
北京林业大学信息学院
关于死锁的一些结论
参与死锁的进程最少是两个(或是两个以上进程) 参与死锁的进程至少有两个已经占有资源 参与死锁的所有进程都在等待资源
如果死锁发生,会浪费大量系统资源,甚至 导致系统崩溃。
北京林业大学信息学院
2、产生死锁的原因和必要条件
原因:系统资源不足; 进程推进顺序不合适;
… bm1
… bm2
… …
… bmj
… …
… bmn
北京林业大学信息学院
分配矩阵Allocation
资源 进程 P1 P2 … Pi …
R1 a11
a21 … ai1 …
R2 a12
a22 … ai2 …
… …
… … … …
Rj a1j
a2j … aij …
… …
… … … …
Rn a1n
a2n … ain …
(1)T0时刻是否为安全状态?若是,给出安全序列。 (2)如果P2申请资源(0,3,4),能否分配?为什么?
北京林业大学信息学院
Linux中的进程
Linux进程控制块PCB简介 进程的状态 进程调度 相关系统调用 信号量 等待队列 管道 Linux内核体系结构
北京林业大学信息学院
Linux进程控制块PCB
北京林业大学信息学院
Linux信号量定义
北京林业大学信息学院
Linux 信号量数据结构中包含的信息
该域用来跟踪希望访问该资源的进程个数。正值 表示资源是可用的,而负值或零表示有进程正在 等待该资源。该计数的初始值为 1,表明同一时 刻有且只能有一个进程可访问该资源。进程要访 问该资源时,对该计数减 1,结束对该资源的访 问时,对该计数加 1。 等待该资源的进程个数,也是当该资源空闲时等 待唤醒的进程个数。 某个进程等待该资源时被添加到该等待队列中。 用来实现对 waking 域的互斥访问的 Buzz 锁 (自旋锁spin lock )。
北京林业大学信息学院
进程调度(2)
rt_priority 相对优先级(0-99)
(20*HZ / 100) // 其中:HZ=100
#define DEF_PRIORITY
几个计算式子: 普通进程的权值:counter = counter / 2 + priority
weight=counter+prinority
进程Pa 请求打印机 请求磁带机 释放打印机 释放磁带机
进程Pb 请求磁带机 请求打印机 释放磁带机 释放打印机
打印机 Pb
磁带机
北京林业大学信息学院
死锁的例子(2)
同类资源分配不当引起死锁
系统中有m个资源被n个进程共享,当每个进 程都要求K个资源,而m<n*K时,如果分配不 得当就可能引起死锁。 例如:m=4,n=4,K=2,执行中采用的分 配策略是为每个进程轮流分配资源。 假设每个进程对资源的申请和释放符合下列原 则: 一次只能申请一个单位;满足总申请后才 能使用;使用完后一次性释放
撤销进程的代价(代价最小)
•进程优先级 •进程运行代价(已运行的%) •进程类型
方法二:资源剥夺法
从一些进程剥夺足够的资源,分配给死锁的进程。
北京林业大学信息学院
作业
设系统中有3种类型的资源(A,B,C)和5个进程(P1, P2, P3, P4, P5),A资源的数量为17,B资源的数量为 5,C资源的数量为20。在T0时刻系统状态如下表。
TASK_SWAPPING
进程交换到交换区
北京林业大学信息学院
北京林业大学信息学院
进程与线程
线程
+ 堆栈 + 执行上下文TSS
进程 进程
线程
本质区别 进程地址空间独立 线程共享地址空间
+ + + + + +
代码 数据 堆栈 文件 IO 虚存
北京林业大学信息学院
进程调度(1)
调度策略
检测算法
北京林业大学信息学院
算法描述
Work:=Available; L:={ Li | Allocationi=0 Requesti=0 }; For all LiL do begin for all Requesti Work begin Work = Work +Allocationi Li L end end deadlock:=(L={P1,P2,…,Pn}
P2: 5 3 2
P4: 7 4 3
P1: 7 5 3 P3: 10 5 5 P5: 10 5 7
P3
P4 P5
9
2 4
0
2 3
2
2 3
P4
P5
2
0
1
0
1
2
P2 P4 P1 P3 P5
北京林业大学信息学院
5.解除死锁
方法一:撤销进程法
按照一定的次序逐次删除已死锁的进程,直到获得足 够的资源,解除死锁为止。
七、死锁
死锁原因和必要条件
死锁例子
死锁概念 产生死锁的原因和必要条件
预防死锁
资源独占(静态分配) 资源顺序分配
资源受控动态分配 (避免死锁)
发现死锁 (死锁检测) 解除死锁
北京林业大学信息学院
死锁的例子(1)
进程推进顺序不当产生死锁
cobegin Pa; Pb; coend
SCHED_OTHER SCHED_FIFO SCHED_RR 普通进程 执行时间不长的实时进程 (更高优先级可抢占CPU) 轮转的实时进程 (相同优先级进程用时间片调度)
weight priority counter
权值 静态优先级(时间片大小,单位时标) 动态优先级,当前的时间配额
DEF_PRIORITY =20, (每个时标10ms)
必要条件
互斥控制(资源独占) 非剥夺控制(不可剥夺) 请求和保持(部分分配,占有申请) 环路条件(循环等待)
北京林业大学信息学院
P1
P2 分 已 P1 请 求 配 F 请 求
P2 T
已
配 分
F 申请不来自百度文库类型的资源
T
简单的死锁例子
北京林业大学信息学院
3、预防死锁
通过设臵某些限制条件,去破坏死锁四个必 要条件中的一个或多个,来防止死锁。 在系统设计时确定资源分配算法,限制进程 对资源的申请,从而保证不发生死锁。 较易实现,广泛使用,但由于所施加的限 制往往太严格,可能导致系统资源利用率和 系统吞吐量的降低。
task 数组:进程控制块指针的集合(512个) task_struct结构 进程标识 进程状态 调度信息 进程链 时间片 进程通信信息 内存资源信息 文件资源信息 进程上下文
北京林业大学信息学院
Linux进程状态表
进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE TASK_ZOMBIE TASK_STOPPED 值 0 1 2 4 8 就绪 浅度睡眠 深度睡眠 僵死 暂停 说明
由于在避免死锁的策略中,允许进程动 态地申请资源。因而,系统在进行资源 分配之前预先计算资源分配的安全性。 若此次分配不会导致系统进入不安全状 态,则将资源分配给进程;否则,进程 等待。 最具有代表性的避免死锁算法:银行家 算法。
北京林业大学信息学院
安全状态与不安全状态
如果系统能按某种顺序为每个进程分配 其所需的资源,直至所有进程都能运行 完成,称系统处于安全状态。 若不存在这样一个安全序列称系统处于 不安全状态。
北京林业大学信息学院
静态资源分配
解决方法:
第一个必要条件
要求每一个进程在开始执行前就申请它所 需要的全部资源,仅当系统能满足进程的 资源申请要求且把资源分配给进程后,该 进程才能开始执行。 进程在执行过程中不再申请资源,故不可 能出现占有了某些资源再等待其他资源的 情况,即能使得“占有并等待”的条件不 成立,从而防止死锁的发生。
尚需申请数
2 3 5
最大需求数 剩余资源
4 6 8 2
北京林业大学信息学院
死锁检测中的数据结构
1、可用资源向量Available:表示m类资源中,每一 类的可用数目。
2、请求矩阵Request:是n m 矩阵,表示进程当 前对各类资源的请求数目。 3、分配矩阵Allocation:是 n m矩阵,用以表示 进程某一时刻的资源分配情况。 4、工作向量Work:表示系统可提供给进程继续运行 的各类资源数目。
Pa
S资源表示消息或信件 对信件的接收和发送不加限制
请求接收
Sc
Pc Sb
Sa
Pb
cobegin Pa; Pb; Pc; coend
北京林业大学信息学院
1、死锁概念
如果在一个进程集合中的每个进程都在等待 只能由该集合中的其他一个进程才能引发的事 件,则称这一组进程或系统此时发生了死锁。
一组进程中,每个进程都在无限等待被该 组进程中另一个进程所占有的永远不会释放的 资源,这种现象称系统处于死锁状态,简称死 锁。处于死锁状态的进程就称为死锁进程.
北京林业大学信息学院
R
R
P1
P2 (a)
P3
P4
P1
P2 (b)
P3
存储器共享的死锁
北京林业大学信息学院
死锁的例子(3)
对临时性资源使用不加限制引起死锁
资源的类型: 永久性资源:可供进程逐次再使用的资源; 临时性资源(消耗性资源):由一进程产生而被另一进 程消耗掉,只能使用短暂的时间。
产生和发送
Pm
an1
an2
…
amj
…
amn
北京林业大学信息学院
(1) 把未阻塞(Ci=0)的进程Pi记录在L表中(其全部资源请求已 得到满足的进程); (2) 从L表中选择一进程,根据资源分配表S释放分配给该进程 的所有资源; (3) 由进程等待表W依次检查和修改需要该进程释放资源的每 一个进程的等待计数器Cj; (4) 若Cj=0,则表示该进程所请求的资源已得到满足,不再阻 塞,将Pj记入L表中; (5)再从L表中选取另一进程,重复上述操作; (6) 若所有的进程都记入L表中,则系统初始状态为非死锁状 态,否则为死锁状态。
北京林业大学信息学院
死锁避免
max r1 P1 P2 7 3 r2 5 2 r3 3 2 P1 P2 P3
Available
r1
2
r2
3
r3
0
allocation r1 0 3 3 r2 1 0 0 r3 0 2 2 P1 P2 P3 P4 P5
need r1 7 0 6 0 4 r2 4 2 0 1 3 r3 3 0 0 1 1
缺陷:进程实际使用资源的顺序不一定 与资源的编号一致,会造成资源浪费。
北京林业大学信息学院
资源有序分配的实例
例如 #1: 卡片读入机 #2: 打印机 #3: 绘图仪 #4: 磁带驱动器 #5: 卡片穿孔机
北京林业大学信息学院
资源受控动态分配
系统中对进程发出的每一个系统能够 满足的资源申请进行动态检查,并根 据检查结果决定是否分配资源;如果 分配后系统可能发生死锁,则不予分 配,否则予以分配。
缺陷:降低资源的利用率。
北京林业大学信息学院
资源有序分配法
第四个必要条件
解决方法:把系统中所有资源排序加以全局编号, 进程申请资源时必须严格按资源编号的递增次序 进行,否则操作系统不予分配。 具体为,低优先级的资源申请高于高级资源,释 放资源的顺序和申请资源的次序相反。占用高级 资源时,若要申请低级资源,则高级资源需要先 行释放。
北京林业大学信息学院
4、发现死锁
通过设臵某些限制条件,去破坏死锁四个必要条件 中的一个或多个,来防止死锁。 在系统设计时确定资源分配算法,限制进程对资源 的申请,从而保证不发生死锁。 较易实现,广泛使用,但由于所施加的限制往往 太严格,可能导致系统资源利用率和系统吞吐量的 降低。
北京林业大学信息学院
当前进程的权值:weight=counter+priority+1 实时进程的权值:weight = 1000+rt_priority Weight是linux系统在进程调度过程中选择进程的唯一标准
北京林业大学信息学院
相关系统调用
系统调用:广义指令,操作系统提供给用户使 用的程序界面。 表3-4简要列出了和进程及进程间通信相关的 系统调用。
5、进程向量L:记录当前已不占有资源的诸进程。
北京林业大学信息学院
请求矩阵Request
资源
进程 P1 P2 … Pi R1 b11 b12 … b1j R2 b21 b22 … b2j … … … … … Rj b1j b2j … bij … … … … … Rm bm1 bm2 … bmj
… Pm
北京林业大学信息学院
单项资源的银行家算法
例如,设系统中有 10 台磁带机,由三个进程A、 B、C共享。假定A、B、C已分别占用了 2 台、3 台、 3 台,它们的最大需求量分别为4 台、 6 台、 8 台。 (假定只有当满足了最大需求量后才能释放所占用的 全部资源。)
进程名
A B C
已分配数
2 3 3
北京林业大学信息学院
关于死锁的一些结论
参与死锁的进程最少是两个(或是两个以上进程) 参与死锁的进程至少有两个已经占有资源 参与死锁的所有进程都在等待资源
如果死锁发生,会浪费大量系统资源,甚至 导致系统崩溃。
北京林业大学信息学院
2、产生死锁的原因和必要条件
原因:系统资源不足; 进程推进顺序不合适;
… bm1
… bm2
… …
… bmj
… …
… bmn
北京林业大学信息学院
分配矩阵Allocation
资源 进程 P1 P2 … Pi …
R1 a11
a21 … ai1 …
R2 a12
a22 … ai2 …
… …
… … … …
Rj a1j
a2j … aij …
… …
… … … …
Rn a1n
a2n … ain …
(1)T0时刻是否为安全状态?若是,给出安全序列。 (2)如果P2申请资源(0,3,4),能否分配?为什么?
北京林业大学信息学院
Linux中的进程
Linux进程控制块PCB简介 进程的状态 进程调度 相关系统调用 信号量 等待队列 管道 Linux内核体系结构
北京林业大学信息学院
Linux进程控制块PCB
北京林业大学信息学院
Linux信号量定义
北京林业大学信息学院
Linux 信号量数据结构中包含的信息
该域用来跟踪希望访问该资源的进程个数。正值 表示资源是可用的,而负值或零表示有进程正在 等待该资源。该计数的初始值为 1,表明同一时 刻有且只能有一个进程可访问该资源。进程要访 问该资源时,对该计数减 1,结束对该资源的访 问时,对该计数加 1。 等待该资源的进程个数,也是当该资源空闲时等 待唤醒的进程个数。 某个进程等待该资源时被添加到该等待队列中。 用来实现对 waking 域的互斥访问的 Buzz 锁 (自旋锁spin lock )。
北京林业大学信息学院
进程调度(2)
rt_priority 相对优先级(0-99)
(20*HZ / 100) // 其中:HZ=100
#define DEF_PRIORITY
几个计算式子: 普通进程的权值:counter = counter / 2 + priority
weight=counter+prinority