高速缓存和暂存器存储器

Cache and scratchpad memories

谁能解释一下高速缓存和暂存器有什么区别?我目前正在学习计算机体系结构。

暂存器就是用来存放一些东西的地方。缓存,是您通常不会谈论的内存。 Scratchpad 就像一个 post 便条,您可以在上面写点东西并随身携带。缓存是您发送给其他人的纸张,其中包含备忘录等说明。

缓存可以在不同的地方、层(L1、L2、L3...)。暂存器和高速缓存在某些芯片中都只是 sram,具有地址和数据总线以及 read/write/etc 控制信号。 (就像计算机中的许多其他东西一样,可能会或可能不会用于可寻址 ram)。在启动期间,在远端的 ram(较慢的 ram 端,处理器在近端)被初始化之前(如果您有缓存,通常最终会 dram,否则为什么要有缓存)可能可以将缓存作为可寻址 ram 进行访问。它在很大程度上取决于 system/design ,可能有一个控制寄存器使它能够像一个简单的 ram 一样工作,或者可能有一种模式,或者它的正常模式可能是这样的,只要你不解决根据其对齐方式超过 ram 的大小(可能是 32K 边界之间的 32K ram)那么它可能不会尝试驱逐任何东西并在缓存的 dram/slow/far 侧生成总线周期允许您将其用作 ram就像便笺簿一样。

但是,缓存的正常用例是作为 ram 的理想不可见路径。您不使用缓存寻址访问缓存 ram,而是使用 ram 的地址 space,而缓存只是允许处理器继续运行而无需等待慢速 ram。

再说开机,想一想开机时需要做的事情,也就是调出dram controller,这绝对是一件不简单的事情。拥有一些片上内存可以让您暂时拥有一些内存用于小堆栈和一些变量。例如,您可以使用像 C 这样的编译语言的编译器,它至少需要一些 ram 用于堆栈和变量。取决于 space 你也可以把一些程序放在那里,可能 运行 比闪存快得多。没有 ram 的替代方案可能必须仅使用处理器中的通用寄存器或其他寄存器在汇编中编写 dram init,这将完成一项复杂的任务并使其变得更加困难。一旦主系统 ram 启动,您可能会或可能不会选择不使用片上(暂存器)ram。

我会争辩说,如果你想测试 dram 看它是否工作,那么你不需要使用那个 ram 来测试那个 ram,测试程序不应该 运行 in 也不使用正在测试的公羊。芯片上有暂存器 ram(或地址 space 中的一些其他 ram,例如视频卡 ram)可用于 dram 测试程序。不幸的是,很多人会使用被测 ram 来保存堆栈、程序和变量以及来自进行测试的程序的堆,除了一个或少量模式之外,ram 的重要部分未经测试。