DRAM集中刷新,分散刷新,异步刷新的区别

简介: DRAM集中刷新,分散刷新,异步刷新的区别

为什么DRAM需要刷新

DRAM(Dynamic Random Access Memory)即动态RAM,是我们熟知的内存,用在手机,电脑等设备当中用于存储数据与指令.通常所讲的RAM即指DRAM.DRAM由晶体管和小容电容存储单元组成。每个存储单元都有一小的蚀刻晶体管,这个晶体管通过小电容的电荷保持存储状态,即开和关。电容类似于小型充电电池。它可以用电压充电以代表1,放电后代表0,但是被充电的电容会因放电而丢掉电荷,所以它们必须由一新电荷持续地"刷新"。

接下来的例子我们以一个16K*1位的芯片来进行讲解.

16K->214=(27)2=(128×128)B,故该芯片有128*128根行线与列选择线.

而对DRAM刷新的方法是一次刷新完整的一行,即我们一共需要刷新128次共128行.

DRAM最大刷新周期:2ms,8ms,16ms等(DRAM在这些时间内会丢失电容,所以必须刷新).

我们假设最大刷新周期为2ms,即在间隔2ms的时间内,这128行必须全部刷新完毕,并设定存储周期为0.5us(即这0.5us将进行数据的读/写或一行的刷新)

集中刷新

集中刷新顾名思义,即在某一个时间段集中对这写行进行刷新.

首先我们计算出对128行刷新所需要的时间:

128*0.5us=64us(集中刷新时间)

2ms-64us=1936us(正常进行读写或维持电容内数据有效的时间)

故由于有着64us的时间需要对电容进行刷新,因此这一段时间称为"死区",即这段时间内CPU无法对DRAM进行访问.

优点:结构简单,实现简单

缺点:由于死区时间的导致,CPU在这段时间内无法进行大部分的工作,这是由于CPU所需要的部分指令是需要从内存中取得的

分散刷新

分散刷新的含义即对每一行进行独立的刷新,其实现方法为:

对于该行,前0.5us进行数据正常的存取,后0.5us进行该行的刷新,因此由于这一特性,使得DRAM的存储周期变为了1us(0.5+0.5),即128行将会在128us内完成全部的刷新,在2ms的时间内这128行将会被刷新2000/128=15.6次.

优点:无死区,不会导致CPU的空转

缺点:存储周期翻倍,CPU效率降低,且由于刷新时间间隔内会多次的对电容进行刷新,造成硬件磨损

异步刷新

异步刷新是前两种刷新的折中考虑.

对于这128行,在2ms的刷新间隔内,我们可以轻易的算出只需要每

2000/128=15.6us刷新一行即可完成2ms内对所有行的刷新,因此异步刷新也正是使用这思路.

即在这15.6us中,只会剩余0.5us用于最后对行的刷新,其余时间用于对存储单元进行数据访问.

如果将DRAM的刷新安排在CPU对指令的译码阶段,由于这个阶段CPU不访问存储器,所以这种方案既克服了分散刷新需独占0.5μs用于刷新,使存取周期加长且降低系统速度的缺点,又不会出现集中刷新的访存“死区”问题,从根本上上提高了整机的工作效率。

目前大部分使用的刷新方法都是这种

优点:不会过度刷新且没有死区

例题讲解


相关文章
|
2月前
|
canal 缓存 NoSQL
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-03 Refresh Ahead + SingleFlight + 删除缓存 + 延迟双删
【5月更文挑战第11天】Refresh Ahead模式通过CDC异步刷新缓存,但面临缓存一致性问题,可借鉴Write Back策略解决。SingleFlight限制并发加载,减少数据库压力,适合热点数据。删除缓存模式在更新数据库后删除缓存,一致性问题源于读写线程冲突。延迟双删模式两次删除,理论上减少不一致,但可能降低缓存命中率。选用模式需权衡优劣,延迟双删在低并发下较优。装饰器模式可用于实现多种缓存模式,无侵入地增强现有缓存系统。
70 2
|
2月前
|
NoSQL 关系型数据库 MySQL
热点数据更新导致CPU100%的解决方案
热点数据更新导致CPU100%的解决方案
49 0
|
存储 缓存 数据库
如果不知道这4种缓存模式,敢说懂缓存吗?
在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过。
|
存储 编译器 C语言
缓冲区刷新在 C++ 中意味着什么?
缓冲区刷新是将计算机数据从临时存储区域传输到计算机的永久内存。例如,如果我们对文件进行任何更改,我们在一台计算机屏幕上看到的更改会临时存储在缓冲区中。
129 0
|
缓存 Linux
缓存区的刷新及配置
缓存区的刷新及配置
154 0
|
存储 缓存 Java
【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )
【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )
134 0
【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )
|
存储 缓存 监控
进程缓存和缓存服务,如何抉择?
在互联网大潮下,随着用户量的激增,原来单体结构逐渐的向Web服务集群发展,在多实例目标下,进程缓存的弊端越来越明显。 比如缓存无法统一的问题。
进程缓存和缓存服务,如何抉择?
|
存储 缓存 算法
CPU缓存刷新的误解
即使是资深的技术人员,我经常听到他们谈论某些操作是如何导致一个CPU缓存的刷新。看来这是关于CPU缓存如何工作和缓存子系统如何与执行核心交互的一个常见误区。本文将致力于解释CPU缓存的功能以及执行程序指令的CPU核心如何与缓存交互。我将以最新的Intel x86 CPU为例进行说明,其他CPU也使用相似技术以达到相同目的。
189 0
CPU缓存刷新的误解
|
缓存 监控 NoSQL
如何优雅的设计和使用缓存?
1.确认是否需要缓存 在使用缓存之前,需要确认你的项目是否真的需要缓存。使用缓存会引入的一定的技术复杂度,后文也将会一一介绍这些复杂度。一般来说从两个方面来个是否需要使用缓存: CPU占用:如果你有某些应用需要消耗大量的cpu去计算,比如正则表达式,如果你使用正则表达式比较频繁,而其又占用了很多CPU的话,那你就应该使用缓存将正则表达式的结果给缓存下来。
1506 0