DMA操作中断时间

时间:2013-11-29 08:14:24

标签: computer-architecture numerical dma

我面临以下问题的困难:

考虑具有以下规格的磁盘驱动器。

  

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是怎么来的?如何计算中断时间?请帮忙 。

3 个答案:

答案 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。告诉我,如果我做错了吗?