快捷搜索: 王者荣耀 脱发

存储器的集中刷新、分散刷新、异步刷新策略

书上讲的看不懂!找了一个通俗易懂的解释

设DRAM中电容的电荷每2ms就会丢失,所以2ms内必须对其补充。补充电荷是按行来进行的,为了【全部】内存都能保住电荷,必须对【所有】的行都得补充。 假设刷新1行的时间为0.5μs(刷新时间是等于存取周期的。因为刷新的过程与一次存取相同,只是没有在总线上输入输出。顺便说一下存取周期>真正用于存取的时间,因为存取周期内、存取操作结束后仍然需要一些时间来更改状态。——对于SRAM也是这样,对于DRAM更是如此)。 并假设按存储单元(1B/单元)分为64行64列。 (64×64个单元×1B/单元 = 2^12个单元×1B/单元 = 4KB内存 )。

集中刷新:快到2ms的时候,停止一切对内存的读取操作,使用0.5μs×64对64行依次刷新。这将占用3.2μs。在这3.2μs中,内存只用来刷新,阻塞一切存取操作。 为什么刷新与存取不能并行?:因为内存就一套地址译码和片选装置,刷新与存取有相似的过程,它要选中一行——这期间片选线、地址线、地址译码器全被占用着。同理,刷新操作之间也不能并行——意味着一次只能刷一行。

分散刷新:在每个存取操作后绑定一个刷新操作。这样存取周期就成了0.5μs + 0.5μs = 1μs。它延长了存取周期。但是由于与存取操作绑定,就不需要专门给出一段时间来刷新了。这样,每有64个读取操作,就会把0-63行(共计64行)全部刷新一遍。又因为刷新是不间地断循环着的——循环对64行依次刷新,所以对于同一行,每64次读取就会轮到其被刷新——它的刷新周期是1μs × 64 = 64μs <2ms , 在2ms丢失电荷前就会及时补充。

异步刷新:分散刷新的刷新周期64μs ,其实根本不需要这么频繁,有些浪费,异步刷新就是恰好卡在2ms这个时间点上。对于每行以2ms为刷新周期足够了,刷新循环到它需要64刷新次操作, 2ms ÷ 64 作为【每次刷新的周期】,(注意每次刷新周期与特定行的刷新周期的不同:每次刷新间隔指对于内存来说它隔多长时间就进行一次刷新操作,轮着刷新时,刷新的行是上一次刷新的行的下一行——是不同的两行,但对于全局内存来说确实是两次刷新操作间隔。特定哪一行的刷新周期:下一次对它进行刷新的间隔,期间要经过64次内存刷新周期才又轮得到它。)过64次刚好保证每行的刷新周期为2ms。刷新操作周期为2ms ÷ 64 。但是这个时间并不是绑定在存取周期内,所以仍然是拒绝存取的死时间。但是它已经很小了。所以这种刷新策略非常可行。

经验分享 程序员 微信小程序 职场和发展