【发布时间】:2015-05-31 21:55:43
【问题描述】:
有人能解释一下高速缓存和暂存器内存之间的区别吗?我目前正在学习计算机体系结构。
【问题讨论】:
标签: caching arm computer-architecture
有人能解释一下高速缓存和暂存器内存之间的区别吗?我目前正在学习计算机体系结构。
【问题讨论】:
标签: caching arm computer-architecture
便签本就是存放一些东西的地方。缓存,是您通常不会谈论的内存。 Scratchpad 就像一个便利贴,你可以在上面写一些东西并随身携带。缓存是您发送给其他人的纸张,带有备忘录等说明。
缓存可以在不同的地方、层(L1、L2、L3...)。暂存器和缓存都只是某些芯片中的 sram,具有地址和数据总线以及读/写/等控制信号。 (就像计算机中的许多其他东西可能会或可能不会用于可寻址内存一样)。在启动过程中,在远端(较慢的 ram 端,处理器是近端)的 ram 初始化之前(如果你有缓存,最终通常是 dram,否则为什么要有缓存),可以将缓存作为可寻址 ram 访问。不过,它在很大程度上取决于系统/设计,可能有一个控制寄存器使它能够像一个简单的 ram 一样工作,或者可能有一个模式,或者它的正常模式可能是这样的,只要你不寻址超过内存的大小基于它的对齐方式(可能是 32K 边界之间的 32K 内存),那么它可能不会尝试驱逐任何东西并在缓存的 dram/slow/far 侧生成总线周期,从而允许您将其用作 ram 就像一个便签本。
但是,缓存的正常用例是作为 ram 的理想不可见路径。您不使用缓存寻址来访问缓存内存,而是使用内存之外的地址空间,并且缓存只是允许处理器继续运行而无需等待慢速内存。
再谈开机,想想你在开机时需要做的事情,即调出DRAM控制器,这绝对是一件不平凡的事情。拥有一些片上内存可以让您暂时为小堆栈和一些变量提供一些内存。例如,您可以在 C 等编译语言上使用编译器,该编译器至少需要一些内存用于堆栈和变量。根据空间的不同,您也可以将一些程序放在那里,可能比从闪存运行得快得多。没有 ram 的替代方法可能是只使用处理器中的通用寄存器或其他寄存器在汇编中编写 dram init,从而完成一项复杂的任务并使其变得更加困难。主系统内存启动后,您可能会或可能不会选择不使用片上(暂存器)内存。
我会并且确实争辩说,如果您想测试 dram 以查看它是否工作,那么您不需要使用该 ram 来测试该 ram,测试程序不应运行,也不应使用被测 ram。芯片上的暂存器内存(或地址空间中的其他内存,例如视频卡内存)可用于 DRAM 测试程序。不幸的是,很多人会使用被测 ram 来保存堆栈和程序以及来自执行测试的程序的变量和堆,从而使 ram 的重要部分除了一个或少数模式之外未经测试。
【讨论】: