首页 文章

回写与直写

提问于
浏览
48

我的理解是两种方法的主要区别在于,“直写”方法数据立即通过缓存写入主存,而“回写”数据则写入“后期” .

我们还需要在“后期”等待内存,那么“直写”有什么好处?

3 回答

  • 57

    直写到主存储器的好处是它简化了计算机系统的设计 . 通过直写,主存储器始终具有该行的最新副本 . 因此,当完成读取时,主存储器总是可以使用所请求的数据进行回复 .

    如果使用回写,有时最新数据在处理器高速缓存中,有时它在主存储器中 . 如果数据在处理器高速缓存中,则该处理器必须停止主存储器回复读取请求,因为主存储器可能具有数据的陈旧副本 . 这比直写更复杂 .

    此外,直写可以简化缓存一致性协议,因为它不需要修改状态 . “修改”状态记录缓存必须在缓存行无效或逐出之前写回缓存行 . 在直写中,高速缓存行总是可以无效而无需回写,因为内存已经具有该行的最新副本 .

    还有一件事 - 在写回内存映射I / O寄存器的回写体系结构软件上,必须采取额外步骤以确保立即从缓存中发送写入 . 否则写入在核心外部不可见,直到另一个处理器读取该行或该行被驱逐为止 .

  • 0

    让我们借助一个例子来看看这个 . 假设我们有一个直接映射的缓存,并使用了回写策略 . 因此,我们在高速缓存行中有一个有效位,一个脏位,一个标记和一个数据字段 . 假设我们有一个操作:写A(其中A映射到缓存的第一行) .

    发生的事情是来自处理器的数据(A)被写入高速缓存的第一行 . 有效位和标记位已设置 . 脏位设置为1 .

    脏位只是表示自上次进入缓存以来是否写入了缓存行!

    现在假设执行另一个操作:读取E(其中E也映射到第一个缓存行)

    由于我们有直接映射的高速缓存,因此可以简单地将第一行替换为将从内存中获取的E块 . 但由于最后写入行(块A)的块尚未写入内存(由脏位指示),因此缓存控制器将首先向内存发出 write back 以将块A传输到内存,然后它将通过向存储器发出读操作来替换块E的行 . 脏位现在设置为0 .

    因此,回写策略不保证块在内存及其关联的缓存行中是相同的 . 但是,每当要更换线路时,首先执行回写 .

    通读政策恰恰相反 . 据此,内存将始终具有最新数据 . 也就是说,如果写入高速缓存块,则也将相应地写入存储器 . (不使用脏位)

  • 2

    回写是一个更复杂的,需要复杂的高速缓存一致性协议(MOESI),但它是值得的,因为它使系统快速和有效 .

    Write-Through的唯一好处是它使得实现非常简单,并且不需要复杂的高速缓存一致性协议 .

相关问题