厦门大学操作系统5-6章习题讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p214习题6.13
b N个进程共享M个资源单元,一次只能保留或释放 一个单元,每个进程最大需求单元数不超过M,并且 所有最大需求的总和小于M+N。说明不会发生死锁。 方法一:
• 假定每个进程最多申请X个资源,最坏情况下,每个进程都得 到X-1个资源都在申请最后一个资源,这时系统剩余资源数量 为M-N(X-1),只要系统还有一个剩余资源,就可以使其中的 一个进程获得所需要的全部资源,该进程运行结束以后释放资 源,就可以使其他进程得到全部资源的 满足,因此,当MN(X-1)》1时系统不会发生死锁,解这个不等式X《(M+N1),系统不会发生死锁,因此,当所有进程的需求总和小于 M+N时,系统是不会发生死锁的。
I 输入缓冲区 P 输出缓冲区 0
p212习题6.6
• 说明可能死锁 当I的速度远大于P的速度,有可能使磁 盘上都是输入数据而此时P进程要处理输入 数据,即要将处理数据放入输出数据区。 于是P进程等待磁盘空间输出,I进程等待磁 盘空间输入,二者死锁。
p213习题6.7
• 给出在习题6.6中预防死锁的附加资源约束,仍 然通话输入和输出缓冲区之间的边界可以根据进 程的要求变化。
P182习题5.3
• 1.进程A载入tally值,并将tally的值加到1,在此时失去处理器(它已经增加寄 存器的值到1,但是还没有存储这个值). • 2.进程B载入tally值(仍然是0),然后运行完成49次增加操作,在它已经将49 这个值存储给共享变量tally后,失去处理器控制权. • 3.进程A重新获得处理器控制权去完成它的第一次存储操作(用1去代替先 前的49这个tally值),此时被迫立即放弃处理器. • 4.进程B重新开始,将1(当前的tally值)载入到它自己的寄存器中,但此时被 迫放弃处理器(注意这是B的最后一次载入). • 5.进程A被重新安排开始,但这次没有被中断,直到运行完成它剩余的49次 载入,增加和存储操作,结果是此时tally值已经是50. • 6.进程B在它终止前完成仅有的最后一次增加和存储操作.它的寄存器值 增至2,同时存储这个值做为这个共享变量的最终结果. 一些人认为会出现低于2这个值的结果,这种情况是不会出现.所以 tally值 的正确范围是[2,100].
不会死锁,剩下存储单元数: 150-(45+40+15+25)=25 满足进程1,2,可任选一个, 执行完后可满足其它
安全顺序是1-2-3-4 • • 银行家算法: 测试进程对资源的最大需求,若系 统当前的剩余资源满足它的最大需 求,则满足进程的当前的申请,否 则,推迟分配。这样能保证至少有 一个进程获得资源的最大需求而运 行,结束后释放资源供其它进程用。
b 第4个进程到达,最多要 60个存储单元,最初要35 个单元。
会死锁,剩下存储单元数: 150-(45+40+15+35)=15
a
b
p214习题6.13
a 3个进程共享4个资源单元,一次只能保留或释放一 个单元,每个进程最大需要2个单元。说明不会发生死 锁。
• 由于每个进程最多需要2个资源,最坏情况下,每个进程需要获 得一个,系统还剩1个,这一个资源,无论分给谁都能完成。完 成进程释放资源后,使剩余进程也完成,故系统不会死锁。
P182习题5.3
b、在a的假设下,允许任意多的进程并发执 行,tally值的范围?
对一般有N个进程的情况,tally值的最终范围 是[2,N*50],因为对其他所有进程来说,从最初开始运 行到在第五步完成.但最后都被进程B破坏掉它们的 最终结果.
P182习题5.13
• 考虑图5.10中定义的无限缓冲 区生产者/消费者问题的解决方 案,设生产者与消费者都以大 致相同的速度运行,运行情况 如下: 生产者: append;semSignal;produce;...; append;semSignal;produce;...; 消费者: consume;...;take;semWait;con sume;...;take;semWait;...; • 生产者通常管理给缓冲区添加 一个新元素,并在消费者消费 了前面的元素后发出信号。生 产者通常添加到一个空缓冲区 中,而消费者通常取走缓冲区 中的惟一元素。消费者从不在 信号量上阻塞,但必须进行大 量的信号量调用,产生相当多 的开销。 构造新程序,使之更有效。 提示:允许n的值为-1,这表示不 仅缓冲区为空,而且消费者也 检测到这个事实并将被阻塞, 直到生产者产生新的数据。这 个方案不要图5.10中的局部变 量m 。
p213习题6.10
• 考虑一个共有150个存储单元的系统,其单 元分给三个进程 • 进程 最大 占有 • 1 70 45 • 2 60 40 • 3 60 15
使用银行家算法,确定下面的请求是否安。如果安 全,说明能保证的终止序列;如果不安全,给出 结果分配简表
p213习题6.10
a 第4个进程到达,最多要 60个存储单元,最初要25个 单元。
5-6章作业
P177复习题5.8
• 在信号量上可执行的操作:
– 初始化>=0(一般情况) – semWait原语,值减1
• 如果值变为负数,则执行semWait的进程被阻塞
– semSignal原语,值加1
• 如果值小于或等于0,则唤醒一个该信号量的阻塞 进程
P177复习题5.11
• 什么是管程? • 管程(Monitor)是一个程序设计语言结构, 它提供与信号量同样的功能,但更易于操 作 • 管程是一个软件模块
P182习题5.13
• • • • • • • • • • • • • • • • • • • • • procedure consumer; begin repeat
semWaitB(s); take; n := n - 1; if n = -1 then begin semSignalB(s); semWaitB(delay); semWaitB(s) end; consume; semSignalB(s) forever
end; begin (*main program*) n := 0; parbegin producer; consumer parend
P182习题5.14
• 考虑图5.13,若发生下面的交换,程序的意 义是否会改变? • a. semWait(e);semWait(s) • b. semSignal(s);semSignal(n) • c. semWait(n);semWait(s) • d. semSignal(s);semSignal(e)
p214习题6.13
• 方法二:
• • • • 每个进程有Ni个资源未分配,有Ai个资源已分配 则∑Ci= ∑Ai+ ∑Ni < M+N 假设死锁: ∑Ai=M,则∑Ni<N,至少有一个Nk为0,矛盾
p214习题6.14
P182习题5.13
P182习题5.13
• program producerconsumer; • var n: integer; • s: (*binary*) semaphore (:= 1); • delay: (*binary*) semaphore (:= 0); • procedure producer; • begin • repeat • produce; • semWaitB(s); • append; • n := n + 1; • if n=0 then semSignalB(delay); • semSignalB(s) • forever • end;
ABCDE; ABDCE; ABDEC; ADBCE; ADBEC; ADEBC;DEABC; DAEBC; DABEC; DABCE
P179习题5.3
考虑右边的程序:
a、确定由这个并发程序输 出的共享变量最后值的上限与 下线。设进程可以以任意相对 速度执行,并当一个值由独立 的机器指令载入一个寄存器中 后,它只能增1. b、在a的假设下,允许任意多 的进程并发执行,tally值的范 围?
const int n=50; int tally; void total(){ int count; for(count=1;count<= n;count++){ tally++; } } void main(){ tally=0; parbegin(total(),total ()); write(tally); }
为输出缓冲区保留一个最小数目(称为reso)块, 但是当磁盘空间足够大时 允许输出块的数目超过这一个界限。 资源限制现在变成 I + O ≤max I≤ max – reso 其中 0 < reso < max 如果程序 P 正在等候递送输出给磁盘, 程序 O 最后处理所有的早先输出 而且产生至少reso页, 然后让 P 继续执行。 因此 P 不会因为 O 而延迟。 如果磁盘充满I/O,I能被延迟; 但是迟早, 所有的早先的 输入可以被P处理完,而且对应的输出将会被 O 处理, 因而可以让I继续执行。
– 一个或多个过程 – 一个初始化序列 – 局部数据
P177复习题5.13
• 与读者-写者问题相关联的条件:
– 任意多的读进程可以同时读一个文件 – 一次只有一个写进程可以往文件中写 – 如果一个写进程正在往文件中写时,则禁止任 何读进程读文件
P179习题5.2
• 一个并发程序,它的两个进程p与q,A、B、 C、D、E是任意的原子语句。设主程序执 行两个进程的parbegin。 void p(){A;B;C;} void q(){D;E;} 给出这两个进程所有可能的交替执行(根 据原子语句给出执行轨迹)
P182习题5.14
P182习题5.14
• 信号量s控制对临界区的访问,在临界区只 包含append 或take 操作。 • AC会导致死锁。 • BD不变,但效率变低(临界区变长)。
p211复习题 6.2
• 可能发生死锁所必需的三个条件: ① 互斥
– 一次只有一个进程可以使用一个资源
② 占有且等待
p212习题6.6
• 一个假脱机系统(如图示)含一个输入进 程I、用户进程P和一个输出进程0,他们之 间用两个缓冲区连接。进程以相等大小块 为单位交换数据,这些块利用输入缓冲区 和输出缓冲区之间的移动边界缓存在磁盘 上,并取决于进程的速度,所用的通信原 语满足下面的资源约束:i+o<=max max表磁盘中的最大块数,i表示输入块数, o表输出块数
– 一个进程在等待其它资源分配时,继续占有 已分配的资源
③ 非抢占
– 不能强行抢占已分配给其它进程的资源 – 除非进程主动释放
p211复习题6.3
• 产生死锁的第四个条件: 循环等待
– 资源分配图中存在一条封闭的进程链
p212习题6.3
• 证明图6.3所反映的情况不会发生死锁(图 见P186)
资源可重用的,P、Q同 时申请B,Q获得B,P、 Q同时申请A,P获得A, Q释放B,P得到A,P释 放A,Q得到A,不构成死 锁的第四个Baidu Nhomakorabea件。
P179习题5.3
• a. 乍一看,tally的范围好像是落在[50,100] 这个区 间里,因为当没有互斥时可以从0直接增加到50.这 一基本论点是当并发的运行这两进程时,我们不可 能得到一个比连续执行单一某进程所得tally值还 低的一个最终tally值.但是考虑下面由这两进程按 交替顺序执行载入,增加,存储的情况下同时变更 这个共享变量的取值:
p212习题6.5
• 把6.4节中的死锁检测算法应用于下面的数 据,给出结果。 Available=(2 1 0 0) • Request Allocation 2001 0010 1010 2001 2100 0120
p212习题6.5
• 1. W = (2 1 0 0) • 2. Mark P3; W = (2 1 0 0) + (0 1 2 0) = (2 2 2 0) • 3. Mark P2; W = (2 2 2 0) + (2 0 0 1) = (4 2 2 1) • 4. Mark P1; no deadlock detected • 算法步骤见P195