\documentclass[全部作业]{subfiles} \input{mysubpreamble} \begin{document} \setcounter{chapter}{4} \chapter{I/O设备管理} \begin{enumerate} \questionandanswer[]{ 假定某磁盘共有 200 个柱面(编号为 0$\sim $199),如果在为访问80 号柱面的请求者服务后,当前正在为访问 108 号柱面的请求者服务,同时有若干个请求者在等待服务,它们依次要访问的柱面号为: 187,64,169,48,171,118,120,84 \begin{enumerate} \item 分别用先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描(SCAN)和循环扫描(CSCAN)算法进行磁盘调度时,试确定实际的服务次序。 \item 按实际服务次序计算(1)中四种算法下磁臂移动的距离。 \end{enumerate} }{ \includexopp{5.1.1} 每次磁臂移动的距离已经用蓝色字标在两次访问的柱面号之间,要注意循环扫描的返回是瞬间完成,不应算到磁臂移动的距离中。 } \end{enumerate} \chapter{死锁} \begin{enumerate} \questionandanswer[]{ 在某系统中,有 N 个进程共享 R 台同类设备资源,每个进程最多需要M台设备资源,试问:N 最多为几时才能保证系统不会发生死锁?请简略说明原因。 }{ % N最多为 $\bm{\left\lfloor R / M \right\rfloor}$ 时才能保证系统不会发生死锁。因为当N达到这个值时,如果此时所有进程都按照最大资源数量申请,那么总申请的资源数量为$\left\lfloor R / M \right\rfloor \times M \leqslant R$,所以不会发生死锁,但如果N多一个,那么总申请的资源数量为$\left( \left\lfloor R / M \right\rfloor+1 \right) \times M$这就可能大于R,那么就可能发生死锁。 (这里的N、R、M应该均为正整数) 当N固定时,根据抽屉原理,每个进程都恰好分到最大资源数量少一个资源,并且都申请一个资源,这时如果没有资源可以分配,那么就死锁了;如果有至少一个资源可以分配,那么就不会死锁。所以R最少应取$N\times (M-1) + 1$才能保证不会发生死锁,那么 $$ R\geqslant N\times (M-1)+1 \implies N \leqslant \frac{R-1}{M-1} $$ 因为N为整数,所以N最多为$\displaystyle \left\lfloor \frac{R-1}{M-1} \right\rfloor$。 } \questionandanswer[]{ 考虑有 3 个进程共享 9 个资源,当前资源分配情况如下: \begin{center} \begin{tabular}{ccc} \toprule 进程 & 已占资源数 & 最大需求量 \\ \midrule P1 & 2 & 6 \\ P2 & 3 & 6 \\ P3 & 1 & 5 \\ \bottomrule \end{tabular} \end{center} 请回答以下问题: }{} \begin{enumerate} \questionandanswer[]{ 目前系统是否处于安全状态?为什么? }{ 目前已占资源总数为6,那么还有3个资源,这时如果分配给P2,P2就达到了最大需求量,那么P2运行结束后就有6个空闲资源,这时可以分配给P1 4个资源,P1就达到了最大需求量,P1运行结束后分配给P3 4个资源,P3就达到了最大需求量,P3运行完后就结束了。\boldkai{所以可以找到资源分配安全序列 P2、P1、P3,所以目前系统处于安全状态。}示意图如下: \bigskip \includexopp[1.2]{6.2.1.1} } \questionandanswer[]{ 如果接着 3 个进程均再申请 2 个资源,可以先分配资源给哪个进程? }{ 在未实际分配资源时,安全序列不变,仍然为P2、P1、P3,所以可以先分配资源给\boldkai{P2}。 } \end{enumerate} \questionandanswer[]{ 假如系统中有 5 个进程{P0,P1,P2,P3,P4}和4 种类型资源{A,B,C,D},T0 时刻系统的资源分配情况如下所示: \begin{center} \begin{tabular}{c|cccc|cccc|cccc} \toprule 进程 & \multicolumn{4}{c}{Al} \vline& \multicolumn{4}{c}{Need} \vline & \multicolumn{4}{c}{Av} \\ \midrule P0 & 0 & 2 & 3 & 2 & 0 & 0 & 1 & 2 & 1 & 6 & 2 & 2 \\ P1 & 1 & 0 & 0 & 0 & 1 & 7 & 5 & 0 & & & & \\ P2 & 1 & 3 & 5 & 4 & 2 & 3 & 5 & 6 & & & & \\ P3 & 0 & 3 & 3 & 2 & 0 & 6 & 5 & 2 & & & & \\ P4 & 1 & 0 & 1 & 4 & 0 & 6 & 5 & 6 & & & & \\ \bottomrule \end{tabular} \end{center} 试问: }{} \begin{enumerate} \questionandanswer[]{ T0 时刻该系统是否安全? }{ 尝试寻找安全序列如下图所示: \includexopp[1.3]{6.4.1.1} 成功找到安全序列P0、P1、P3、P2、P4,所以T0 时刻系统\boldkai{安全}。 } \questionandanswer[]{ T1 时刻进程 P2 提出资源请求 Re2(1,2, 0,0),能否将资源分配给它? }{ Re2 < Av,进行试探性分配,尝试寻找安全序列如下图所示: \includexopp[1.3]{6.4.2.1} 与T0 时刻相比有不同的地方已用红色标出,所以成功找到安全序列P0、P3、P4、P1、P2,所以\boldkai{能}将资源分配给它。 } \questionandanswer[]{ T2 时刻进程 P3 提出资源请求 Re3(0, 0,2,2),能否将资源分配给它? }{ Re3 < Av,进行试探性分配,尝试寻找安全序列如下图所示: \includexopp[1.2]{6.4.3.1} 发现找不到安全序列,所以\boldkai{不能}将资源分配给它。 } \end{enumerate} \end{enumerate} \end{document}