DRAM的三种刷新方式

本文详细介绍了DRAM的三种刷新方式:集中刷新、分散刷新和异步刷新。集中刷新在读取全部数据后统一刷新,存在较长死区时间;分散刷新则在每次存取操作后立即刷新,没有明显死区但延长了存储周期;异步刷新结合两者优点,通过在2ms内分散刷新128行,显著降低了死区时间。每种方式各有优缺点,适用于不同的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DRAM由于在存储信息时采取了电容存储电荷,因此需要进行“刷新”操作

 SC-用于存储 AT-开合决定是否对存储进行读取/更改

DRAM有三种刷新方式。

一、集中刷新

所谓集中刷新,即在整体RAM读取完毕之后进行集中的刷新操作。

其死区大小为0.5*32,刷新的时间间隔为2ms

二、分散刷新

分散刷新指的是在每次存取周期之后均进行一次刷新(以行为单位),存取和刷新交替进行。

 不存在集中刷新中的长时间死区,这里所谓的不存在指的是将刷新的时间,加入到读写周期中。

即读写周期 = 0.5 + 0.5 = 1

刷新间隔为(从上一次刷新到下一次刷新中间的间隔)——128个读写周期

三、异步刷新

异步刷新是将上述两种方法结合到一起的刷新方式

指的是将128行的刷新周期分散在2ms中,即隔15.6 us刷新一次。

同时如果将刷新安排在译码阶段,不会出现死区。

其整体刷新时间仍然为 128 * 0.5 = 64us没有变,但是死区仅有0.5us

三种刷新方式的对比:

集中刷新——死区时间长

分散刷新——不存在死区,但存储周期加长

异步刷新——结合,死区时间显著降低 

 

 

 

### 计算机组成原理中不同刷新方式的区别和应用场景 #### 集中刷新 集中刷新是指在一个特定的时间间隔内,所有的行在同一时间进行刷新。这种方式通常会在一个固定的周期结束时执行全部的刷新操作。由于所有内存行几乎同时被刷新,在这段时间里系统的正常读写操作会被暂停,这可能会导致性能下降。 优点在于管理简单,因为只需要跟踪单一的时间点即可完成整个存储器阵列的刷新工作[^1]。 缺点是在刷新期间无法进行正常的读写访问,这对实时性和响应速度有较高要求的应用不利。 ```python def centralized_refresh(memory_rows, refresh_interval): while True: time.sleep(refresh_interval) for row in memory_rows: perform_refresh(row) # 执行刷新操作 ``` #### 分散刷新 分散刷新则是将总的刷新需求分配到多个较短的时间片段之中去完成。具体来说就是在每次CPU空闲或者允许中断处理的时候做少量的刷新动作直到覆盖所有需要刷新的位置为止。这样可以减少因大规模并发刷新带来的延迟影响。 这种方法使得刷新活动更加平滑地融入日常运行流程当中而不至于造成明显的停顿感。 ```python import random def distributed_refresh(memory_rows, max_per_cycle=10): rows_to_refresh = list(range(len(memory_rows))) while rows_to_refresh: selected_indices = random.sample(rows_to_refresh, min(max_per_cycle, len(rows_to_refresh))) for index in selected_indices: perform_refresh(memory_rows[index]) rows_to_refresh.remove(index) ``` #### 异步刷新 异步刷新意味着刷新不是按照固定模式来进行而是基于某些事件触发条件下的随机发生机制。例如当检测到某个区域即将失效前自动启动局部范围内的快速修复措施;或者是利用后台线程不定期检查并维护部分敏感数据区的安全状态等情形都属于此类范畴。 这种灵活性有助于优化资源利用率以及应对突发状况的能力提升,特别是在那些对于可靠性和稳定性有着极高标准的关键业务领域应用广泛。 ```python from threading import Thread import queue refresh_queue = queue.Queue() class AsyncRefreshThread(Thread): def run(self): while not refresh_queue.empty(): row_index = refresh_queue.get() perform_refresh(memory_rows[row_index]) async_thread = AsyncRefreshThread() async_thread.start() # 假设这里有一些逻辑决定何时向队列添加待刷新项... if some_condition_met(): refresh_queue.put(specific_row_index) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值