首页 > 试题广场 >

某文件占10个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,

[单选题]
某文件占10个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析。假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区时间为80μs,将缓冲区的数据传送到用户区的时间是60μs,CPU对一块数据进行分析的时间为40μs。在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是()。

  • 1260μs,840μs
  • 1440μs,840μs
  • 1440μs,900μs
  • 1260μs,900μs
单缓冲区总时间=(磁盘写入缓冲区时间+缓冲区读出时间)*磁盘块数+CPU处理最后一块数据的时间=(80+60)*10+40=1440us
双缓冲总时间=磁盘写入缓冲区时间*磁盘块数+读出最后一块数据时间+CPU分析最后一块数据时间=80*10+60+40=900us

发表于 2017-09-04 09:56:34 回复(3)
简单的缓冲区的问题。由于缓冲区的访问是互斥的,所以对单一缓冲区,从磁盘写入和读出到用户区的操作必须串行执行,也就是要保证互斥操作。而CPU对数据的分析与从用户区读数据也是需要互斥操作,但是CPU分析与从磁盘写入缓冲区的操作可以并行。从本题看,由于分析所用的时间小于从磁盘写入缓冲区的时间,因此,CPU会空闲。单缓冲区的总时间=(磁盘写入缓冲区时间+缓冲区读出时间)×100+CPU处理最后一块数据的时间=(80+60)×10+40=1440μs。当采用双缓冲区时,每块缓冲区的操作也必须满足互斥操作,但是,对两块缓冲区的操作却可以并行,所以,当第一个缓冲区写满以后,磁盘紧接着写另一个缓冲区,同时,前一个已经满了的缓冲区被读出到用户区,并立即进行CPU的数据分析。读出操作和数据分析必须互斥进行,故,从时间上看,当数据被读出并分析后,恰好另一个缓冲区也写满了,可以立即进行读出数据到用户区并进行数据分析。两块缓冲区交替进行读写,直到数据分析完毕,因此,总时间=(磁盘写入缓冲区时间)×100+读出最后一块数据时间+CPU分析最后一块数据时间=(80)×10+60+40=940μs。
编辑于 2017-09-01 15:12:38 回复(1)
单缓冲区总时间=(磁盘写入缓冲区时间+缓冲区读出时间)*10+CPU处理最后一块数据的时间=(80+60)*10+40=1440us
双缓冲总时间=磁盘写入缓冲区时间*100+读出最后一块数据时间+CPU分析最后一块数据时间=80*10+60+40=900us
编辑于 2017-08-26 15:42:28 回复(1)
拿到用户区+分析就100us了,还搁这80*10呢,双缓冲到后面缓冲区都满了还得等CPU,自己画个时间轴看看吧。我认为单缓冲是(40+60+40)*10+40=1440,双缓冲是(60+40)*10+80=1080
发表于 2020-09-05 16:11:10 回复(2)
单缓冲区必须串行操作,即一个磁盘写入,读出必须一个一个来,所以是(80+60)*10+40 = 1440s,
而双缓冲区就可以采用类似流水的形式,第一个缓冲区写入后再写入第二个缓冲区,而在写第二的缓冲区的时候(80us的时间里)第一个缓冲区已经完成了读出(60us)的操作,所以在时间上的体现就是80us的时间里第一个缓冲区完成了读出,第二个完成了写入,可以想象一下,所以最后就是(80)*10+60+40 = 900us。
发表于 2019-03-14 19:52:16 回复(0)
读数据到用户区在分析需要100,怎么可能只用900微秒,应该是80+(60+40)*100=900us
发表于 2017-09-26 16:54:32 回复(2)

解析

作者:孑小白
(1)如果我们单纯的思考每个流程,那么10次操作的总时间就是:TotalTime = (80+60+40)x10 = 1800(us)


(2)单缓存情况:由于下一次缓存读取的时间(80us)超过CPU分析的时间(40us),当下一个数据送到CPU进行分析的同时缓存也开始读取数据,那么就相当于节约了9次的CPU分析时间(40us):时间 = 1800 - 9 x 40 = 1800 - 360 = 1440(us)


(3)双缓存情况:当A缓存读取完数据,准备写入的时候,B缓存就准备读取数据,那么A缓存送到用户区的时间(60us)就被节约了下来(因为B缓存此时已经开始读取数据,除了第一次执行以外,剩余的9次,读取时间(90us)内另外一个缓存早已把数据送到用户区域(60us)),和(2)同理节约了9次的时间:时间 = 1440 - 60 x 9 = 900(us)

发表于 2022-09-07 21:53:34 回复(0)
可以这么理解,通过计算每个数据需要多长时间来解题:
1.单缓冲区:
//第一个数据全部跑满
第一次:80  60  40
//从第二个数开始,每当缓冲区数据传给用户区后,再把下一个数据往缓冲区里传,所以CPU对数据进行分析的时间是共享的,即60、40跑满,第二个数开始有传入缓冲区的时间-40即80-40=40,则有:
第二次:40  60  40        
第三次:40  60  40
.。。。。
总时间=(80+60+40)+(40+60+40)*9=1440

2.双缓冲区
//第一个数据跑满
第一次:80    60    40
//因为160>60+40>80,则两个缓冲区永远不会填满也永远都有数据,从第二个数据开始,当前数据传入缓冲区的时间已经在上一个数据传入cpu和cpu处理时已经完成还倒欠了20,当前数据实际用的时间只有传入cpu的时间和cpu处理的时间,再减去占用之前数据处理的20,则有:
第二次:-20    60    40
第三次:-20    60    40
.。。。。。
总时间=(80+60+40)+(60+40-20)*9=900
发表于 2022-09-07 18:45:56 回复(0)
这什么公式啊?直接套就能解决?我怎么分析得出1080????
发表于 2022-08-23 23:20:45 回复(0)
单缓冲区就是先写再读 双缓冲区读写可以同时在两个缓冲区中分别进行 计算 单缓冲区=(读+写)*磁盘块数+第一块的分析时间 双缓冲区=(读*磁盘块数)+最后一块读取时间
发表于 2021-10-15 11:33:06 回复(0)
其实比较实用的方法就是画图来理解吧。使用书本上的图,就很好做了
发表于 2019-06-28 10:38:32 回复(0)
C
发表于 2018-03-11 07:16:13 回复(0)
单缓冲区总时间=(磁盘写入缓冲区时间+缓冲区读出时间)*磁盘块数+CPU处理最后一块数据的时间=(80+60)*10+40=1440us
 
双缓冲总时间=磁盘写入缓冲区时间*磁盘块数+读出最后一块数据时间+CPU分析最后一块数据时间=80*10+60+40=900us
发表于 2017-09-27 11:22:51 回复(0)