操作系统之缓冲技术习题
虽然只有两题,俗话说懂得了原理,题目怎么变都写得出来。
第一题
设从磁盘将一块数据传送到缓冲区所用实际为80μs,将缓冲区中数据传送到用户区所用时间为40μs,
CPU处理数据所用的时间为30μs。则处理该数据,采用单缓冲传送磁盘数据,系统所用总时间为()。
A.120μs
B.110μs
C.150μs
D.70μs
解答: 选A;
具体解析:
有题目可知,采用的是单缓冲技术,
单缓冲技术就是
- 先从磁盘读取数据到缓冲区,
- 然后从缓冲区将数据读取到用户区,
- 最后由CPU处理该数据。
从缓冲区读取数据到用户区过程中,CPU是不能处理数据的,并且也不能从磁盘读取数据到缓冲区。
而当CPU处理数据过程中,我们可以从磁盘读取数据到缓冲区。
这时有两种情况:
- 第一种是CPU先处理完数据,等待磁盘读取数据到缓冲区,即比较它们花费的时间:C<T,如下图图1所示,那么读取并处理这块磁盘需要的时间为M + T。
- 第二种是磁盘先读完数据到缓冲区,等待CPU处理完数据,即比较它们花费的时间:C>T,如下图图2所示,那么读取并处理这块磁盘需要的时间为M + C。
故读取一块数据花费的时间为MAX(T,C) + M,
对该题来说,T=80μs , M=40μs , C=30μs,
系统所用的总时间为:MAX(80,30) + 40 = 80 + 40 = 120(μs)
第二题
设系统缓冲区和用户工作区均采用单缓冲,从外设读入1个数据块到系统缓冲区的时间为100,从系统
缓冲区读入1个数据块到用户工作区的时间为5,对用户工作区中的1个数据块进行分析的时间为90(如
下图所示)。进程从外设读入并分析2个数据块的最短时间是()
A.200
B.295
C.300
D.390
解答:
由题可知:T=100,M=5,C=90,又因为采用的是单缓冲,
- 方法一:
读入第一个数据块花的时间100
+单个数据块花的时间M+Max(T,C)
*数据块数目2
-最后一个数据块多加的时间T-C
= 100 + (5+100) * 2 - (100-90) = 300,故选C。 - 方法二:使用公式:
单个数据块花的时间M+Max(T,C)
*数据块数目2
+C
= (5+100) * 2 + 90 = 300,故选C。
第三题
某文件占10个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区的时间为100ms,将缓冲区的数据传送到用户区的时间是50ms,CPU对一块数据进行分析的时间为50ms。在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是()
A.1500ms、1000ms
B.1550ms、1100ms
C.1550ms、1550ms
D.2000ms、2000ms
解答: 选哪个呢?你听我细细分析即可明白。[滑稽]
①采用单缓冲技术:
-
如下图所示,当读取第一块磁盘到缓冲区时,花费的时间为100ms,如下图左侧所示。
-
而从100ms之后进入一个有规律且循环的读取磁盘并处理的过程,从下图可知,读取一块磁盘并处理所花费的时间为
M1+MAX(C1+T)
,这个公式大家应该熟悉,从题目得知从磁盘读取数据到缓冲区花的时间T=100ms,从缓冲区读取数据到用户区花的时间M = 50ms,CPU处理数据花的时间C=50ms,所以读取并处理一块磁盘花的时间为50+MAX(50,100) = 150(ms)。从题目中我们又知道,一共要读取并处理10块磁盘,所以是10 * 150 = 1500(ms)。再加上读取第一块磁盘的100ms,100+1500 = 1600ms,当然了这并不是最后的答案。 -
当读取并处理最后一块磁盘数据时,是没有下一块磁盘可以读取到缓冲区了,如下图右侧所示,图中最后圈起来的T应该删除掉,也就是说,读取并处理10个磁盘块中的最后一块磁盘花费的时间应该为
M+C=50+50=100
,而不是M+MAX(T,C)=50+100=150
,那我们上一步计算出的1500ms应该减去这一多出的时间,剪掉多少呢?我们计算读取并处理一块磁盘花掉的时间为150ms,而这最后一块磁盘花的时间实际为M+C=50+50=100(ms),150-100=50(ms),所以我们应该减去50才得到最后的答案。
综上所述,采用单缓冲计算,读入并分析该文件(占10个磁盘块)需要花费的时间为:
100 + 10 * 150 - 50 = 1550(ms)
还有一个更简单的方法,直接使用公式计算:
公式为:一块磁盘读取处理所花费的时间(M+MAX(T,C)) x 磁盘块 + CPU处理花费的时间(C);
那么我们使用公式计算上面的题目就是:(50 + MAX(100,50) ) x 10 + 50 = 1550(ms)。
是不是简单多了。
②第二问:采用双缓冲技术:
图4中的T1是从磁盘读取数据到缓冲区1花的时间,
T2是从磁盘读取数据到缓冲区2花的时间,
M是从缓冲区读取数据到用户区花的时间
C是CPU处理数据花费的时间。
模拟运行过程如下:
结合上图5来看,
在0~100, 是从磁盘读取数据到缓冲区1,故我们在T1这里从0~100之间画线;而T1一结束,T2就可以马上开始。
在100~150,M1是从缓冲区1读取数据到用户区,
在150~200,C1是CPU处理从T1读取过来的数据花费的时间
在200~300,前面C1处理数据完毕以及从磁盘读取数据到缓冲区2后,我们才可以从缓冲区2读取数据到用户区,以及开始从磁盘读取数据到缓冲区1。
在300~400,前面C2处理数据完毕以及从磁盘读取数据到缓冲区1后,我们才可以从缓冲区1读取数据到用户区,以及开始从磁盘读取数据到缓冲区2。
在500~600,前面C1处理数据完毕以及从磁盘读取数据到缓冲区2后,我们才可以从缓冲区2读取数据到用户区,以及开始从磁盘读取数据到缓冲区1。
…
如此反复,直到最后一个磁盘块,从中我们可以得出读取并处理一块磁盘花费的时间为: Max(T,M+C)。跟我们在上一题的情况一样,最后一块磁盘的处理过程中并不需要再去从磁盘读取数据到缓冲区了,因为磁盘已经读到最后一块了。
那么我们一共花费的时间为:
读取第一块磁盘花费的时间 (只是读取到缓冲区) + Max(T,M+C) x 磁盘块的数目 - 最后一块磁盘多加的时间
即 = 100 + 100 * 10 - (100-50-50)=1100
还有一个更简单的方法,直接使用公式计算:
公式为:一块磁盘读取处理所花费的时间MAX(T,M+C) x 磁盘块 + M + C;
那么我们使用公式计算上面的题目就是: MAX(100,50+50) )x 10 + 50 + 50 = 1100(ms)。
是不是简单多了。
画这图好得我好痛苦啊,兄弟们看明白了的点个赞呗!如果写得有毛病的请指正!冲冲冲!