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