在学习存储器时对死区的理解很迷惑,遂整理一下,本文主要参考唐朔飞老师第三版和26王道计组。
个人认为408不会专考死区,最多会问哪种刷新方式存在/不存在死时间,因此考研党重点关注三种刷新方式,对此不必深究。
概念
三种刷新方式
众所周知,DRAM是通过存储元电路中的栅极电容上的电荷工作的,由于电荷会流失(每隔1~2ms)和破坏性读入需要读后再生,故需要不断的刷新,可以简单理解为不断的给电容充电。
刷新有三种方式,分别为:集中刷新,分散刷新和异步刷新(结合前两种)。下面分别给出唐朔飞第三版计组书中的定义。
集中刷新:规定一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新。
可见,将一个刷新周期分为4000个短周期,每个短周期为2微秒。刷新时间被集中安排在了最后128个周期,共64微秒,在这64微秒的刷新时间内进行读/写操作,cpu不能对存储器进行访问,故称为“时间”,也成为访存“死区”。顾名思义,这种方式被称为集中刷新。
分散刷新:是指对每行存储单元的刷新时间分散到每个存取周期内完成。其中将机器的存取周期tc(tc=tm+tr)分成两半,前半段tm用来读/写操作或维持信息,后半段tr用来刷新。
相同情况下,比集中刷新方式时间间隔要短的多,而且不存在停止读写操/作的死时间,但存取周期长了,整个系统的速度降低了。
异步刷新:是前两种方式的结合,它既可以缩短“死时间”,又可以充分利用最大刷新间隔。具体做法是,将刷新周期除以行数,得到相邻两行之间刷新的时间间隔t,这样可以让死时间分布的更加分散,避免让CPU连续等待过长的时间。
异步方式克服了分散刷新独占的时间,使得整体的存取周期加长且降低系统速度的缺点,又不会出现集中刷新的访存“死区问题”,从根本上提高了整机的工作效率。
讨论—死区存在问题
异步刷新和分散刷新都是以某种方式将死区分散到短周期里,为什么说异步刷新不存在死区,而分散刷新存在死区????
这个问题其实很简单,但我弄了很久才明白。
实际上,王道和唐朔飞老师的书中并没有明确给出死区的定义,查阅资料后,总结下来,死区通常是指CPU无法进行访存操作,从而显著影响系统性能的不可用时间段。
所以上面说死区在三种刷新方式中都是存在的,其实这种观点也对,只是我们应注意定义中“显著”两字。
在集中刷新中,固定周期内来纳许执行所有的刷新操作,此时系统完全无法响应读写请求,形成了集中且长时间的死时间。
在分散刷新中,将刷新操作均匀拆分成极短的时间片,按固定间隔插入到存取周期中,每次刷新仅仅占用极小的时间窗口,系统几乎感受不到死区。
在异步刷新中,刷新操作其实由一个叫独立计时器触发,它可以动态的选择“空闲时间”执行,但是系统该段时间的负载不确定(类比计网中的网络负载),可能会将刷新操作集中在相邻存取周期中执行,导致死区被动积累(但其实这种概率很小),从而显著影响了系统的性能。
故可以认为:
总结—从系统整体角度看
死区是一种负载,既然作为负载,其实就说明了它的不可预测与未知。简单来说就是你无法知晓未来一段时间到底会产生多少死区时间,这完全是基于时间序列的不规则变化。
但我们却可以通过系统调度去处理这些时间,使得它对计算机的影响小之又小,从而对整个系统“透明”。事实上,现代计算机已经很好的优化的该问题,我们几乎感受不到影响。