我面临以下问题的困难:
考虑具有以下规格的磁盘驱动器。
16个表面,512个轨道/表面,512个扇区/轨道,1 KB /扇区,转速3000 rpm。磁盘以循环窃取模式运行,每当1字节字准备就绪时,它被发送到存储器;类似地,对于写入,磁盘接口在每个DMA周期中从存储器读取4字节字。存储器周期时间为40 ns。在DMA操作期间CPU被阻止的最大时间百分比是?
唯一网站上提供的此问题的解决方案是:
Revolutions Per Min = 3000 RPM
or 3000/60 = 50 RPS
In 1 Round it can read = 512 KB
No. of tracks read per second = (2^19/2^2)*50
= 6553600 ............. (1)
Interrupt = 6553600 takes 0.2621 sec
Percentage Gain = (0.2621/1)*100
= 26 %
我理解到(1)。
任何人都可以解释我0.2621是怎么来的?如何计算中断时间?请帮忙 。
答案 0 :(得分:1)
反转形成你给出的数字,即6553600 * 40ns,给出0.2621秒。
一个非常明显的问题是计算中的注释有些错误。这不是
Revolutions Per Min = 3000 RPM ~ or 3000/60 = 50 RPS
In 1 Round it can read = 512 KB
No. of tracks read per second = (2^19/2^2)*50 <- WRONG
数字是512K / 4 * 50.所以,它是以字节为单位。怎么称为'曲目数'?读完整曲目是1个完整旋转,因此1秒内可读的曲目数为50,因为有50个RPS。
但是,1s中可读的总字节数仅为512K * 50,因为512K是轨道上的数据量。
但是它进一步除以4 ..
所以,我想,实际的评论应该是:
Revolutions Per Min = 3000 RPM ~ or 3000/60 = 50 RPS
In 1 Round it can read = 512 KB
Interrupts per second = (2^19/2^2) * 50 = 6553600 (*)
中断触发一个内存操作,然后:
total wasted: 6553600 * 40ns = 0.2621 sec.
但是,我真的不喜欢如何计算'每秒中断次数'。我目前看不到/不知道如何/为什么它只是Bytes/4
。
唯一可以解释为“将它除以4”的VAGUE解释是:
在写入控制器内存的每个字节处,触发一个事件。但是,DMA控制器只能读取4个字节的PACKETS。因此,硬件DMA控制器必须等待,直到准备好读取至少4个字节。只有这样,DMA才会启动并暂停总线(或部分),持续一个存储周期,复制数据所需的时间。当总线冻结时,处理器可能必须等待。它不需要,它可以做自己的操作并在缓存上工作,但如果它尝试触摸内存,则需要等到DMA完成。
但是,我不喜欢这个“解释”中的一些内容。我不能保证你是有效的。这实际上取决于您正在分析的架构以及DMA / CPU / BUS的组织方式。
答案 1 :(得分:0)
唯一的错误是它不是
没有。阅读的曲目
它实际上没有。发生了中断(没有多少次DMA提供数据,这些很多次CPU都会被阻止)
但我再次不知道为什么50会成倍增加,可能是因为1秒,但我希望在没有乘以50的情况下解决这个问题
答案 2 :(得分:0)
我的解决方案: -
这里,1个旋转界面可以读取512 KB数据。 1个旋转时间= 0.02秒。因此,一个字节数据准备时间= 39.1nsec ----&gt;对于4B,它需要156.4纳秒。内存周期时间= 40ns。因此,CPU被阻塞的时间百分比= 40 /(40 + 156.4)= 0.2036~ = 20%。但在答案小册子中,选项如A)10 B)25 C)40 D)50。告诉我,如果我做错了吗?