什么是集中刷新,分散刷新,和异步刷新
首先,为什么需要“刷新”?—— 先搞懂DRAM的“漏电”问题
计算机里的主存(比如内存条)大多是DRAM(动态内存),它存数据的原理像“装水的杯子”:每个存储单元是一个电容,充电代表“1”,没电代表“0”。但电容会偷偷“漏水”(漏电),数据过一段时间就会消失,所以必须定期“补水”—— 这就是刷新(Refresh)。
1. 集中刷新:一口气干完活,但中间要“停工”
类比场景:比如你要给100盆花浇水,但浇水时不能干别的事。你选择先疯狂工作1小时,然后用10分钟集中把所有花浇完,浇水时啥也不干。
原理:
- DRAM的存储单元按“行”排列,假设共有1024行。
- 系统设定一个刷新周期(比如64ms),在这64ms内,前63.9ms正常读写,最后0.1ms“一刀切”:停止所有读写操作,集中刷新所有1024行(每行刷一次)。
- 优点:控制简单,读写效率高(大部分时间在干活)。
- 缺点:最后0.1ms是“死时间”(啥也不能干),如果CPU刚好要访问内存,就得等,像上课突然停水10分钟,全班干坐着。
2. 分散刷新:边干活边“摸鱼”刷新,但效率低
类比场景:你每工作1分钟,就花5秒浇一盆花,100盆花需要100次,全程不耽误干活,但每次浇水都打断一下。
原理:
- 把刷新操作分散到每个“存储周期”里。比如一个存储周期是100ns,其中90ns用来读写,10ns用来刷新1行。
- 这样,每完成一次读写,就顺便刷新1行,1024行需要1024个周期才能刷完,但全程不停止读写。
- 优点:没有集中死时间,CPU不用等。
- 缺点:每个周期都要分时间刷新,相当于“干活时总被打断”,整体效率降低,比如原本1秒能干10次活,现在只能干9次。
3. 异步刷新:按计划“摸鱼”,效率和稳定性兼顾
类比场景:你算好1小时内必须浇完100盆花,于是每36秒浇1盆(1小时=3600秒,3600÷100=36),既不耽误干活,也不会集中浇水。
原理:
- 结合前两者的优点:
- 计算刷新周期:比如64ms内要刷新1024行,那么每隔64ms÷1024≈62.5μs刷新1行。
- 系统按这个间隔自动触发刷新,比如每62.5μs偷偷刷新1行,刷新时不影响正常读写(因为只花一点点时间)。
- 优点:没有集中死时间,也不会频繁打断读写,就像上课期间老师允许你每隔10分钟喝一口水,不耽误听课,也不会渴着。
- 缺点:需要一个定时器精准控制间隔,硬件稍微复杂,但现代DRAM基本都用这种方式。
一句话总结三者区别
- 集中刷新:先拼命干,最后集中摸鱼,但摸鱼时全停工;
- 分散刷新:干一点活摸一次鱼,全程不停工,但干活慢;
- 异步刷新:按计划摸鱼,既不停工,也不耽误干活,最聪明的方式。