106 lines
5.8 KiB
TeX
106 lines
5.8 KiB
TeX
|
\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}
|