仅使用内部缓存作为RAM,CPU可以仅使用电源和ROM来工作吗?


61

具有片上高速缓存RAM的CPU(例如Intel i3 / i5 / i7 / Xeon)能否将其用作唯一的功能RAM,而无需附加任何外部存储库?

还是必须有外部RAM,并且不能单独访问或使用缓存?

现代台式机/服务器CPU的内部缓存RAM通常比1990年代许多计算机的整个系统内存都要多,因此应该有足够的运行简单代码的空间。

诸如6502之类的存在于缓存之前的CPU将无法执行任何操作,因为内部CPU RAM仅占地址计数器和累加器的几个字节。

这不是运行任何现代操作系统的问题,而是运行编程到自定义ROM中或使用十六进制输入键盘手动输入的简单代码。


1
完全取决于CPU以及“高速缓存”的确切含义,因为某些CPU内置内存,而无需外部芯片。
PlasmaHH

42
基本上,如果您在处理器本身中包含可寻址内存,则可以构建我们称为微控制器的产品。这些存在。
MarcusMüller17年

1
谁说您根本不需要任何RAM?
克里斯·斯特拉顿

1
取决于您如何定义“功能”。我敢打赌,只要连接电池,i7就能完全产生热量。
德米特里·格里戈里耶夫

2
仅需几个寄存器,无需额外的RAM,您可以做很多事情。例如,函数生成器。
David Schwartz

Answers:


67

请参阅以下有关PC启动顺序的详细说明:http : //www.drdobbs.com/parallel/booting-an-intel-architecture-system-par/232300699?pgno=2

由于此时没有DRAM,因此代码最初在无堆栈环境中运行。大多数现代处理器都有一个内部高速缓存,可以将其配置为RAM以提供软件堆栈。开发人员在使用此RAM缓存功能时必须编写极其严格的代码,因为在引导顺序中,此时驱逐系统将无法接受驱逐。没有保持一致性的记忆。这就是为什么处理器在基于RAM缓存的情况下在引导过程中在“无退出模式”(NEM)下运行的原因。在NEM中,处理器中的高速缓存行未命中不会导致驱逐。使用可用的软件堆栈开发代码要容易得多,并且初始化代码经常执行最小的设置,以便甚至在DRAM初始化之前就可以使用堆栈。

您可以通过运行没有RAM的PC来观察到这一点:它将发出一系列的哔声。从BIOS Flash ROM运行运行这些程序的程序。

我还在某些ARM处理器上看到了这种行为。SoC内将有配置寄存器,使您可以在启动顺序的早期就将高速缓存用作RAM,以便运行查找,枚举和配置DRAM的程序。



2
有关x86的“ cache-as-ram”(CAR)模式如何工作的更多详细信息,将其作为一个用例进行回答INVD(退出CAR模式时,使缓存无效,而不是将无用的数据写入内存,可能会超过有价值的东西)。
彼得·科德斯

DRAM不可用时退出到底出了什么问题?是不是读取而不是写入 RAM的问题?
Mehrdad

14

通常,缓存是不可寻址的。程序无法有意存储或从中检索数据。


2
+1这是一个非常敏锐的答案。高速缓存行会以几乎随机的方式从主存储器的可寻址访问中随意加载和退出。
Ale..chenski

17
是的,这就是为什么它需要特殊模式(如pjc的回答)或某种特殊技巧的原因。另一个选择(除了可接受的答案之外)可能是使系统认为它具有一些DRAM,但是实际的存储器写入只是丢弃数据,而读取会产生全零(或从ROM的某些区域的实际数据)。只要所有负载都在缓存中命中,系统就会正常运行。关于x86的启动方式的IDK信息足以了解是否有可能进入64位长模式而无需任何实际的缓存刷新。
彼得·科德斯

3
但是,具有内置eDRAM缓存的Skylake CPU将其用作内存侧缓存(在内存控制器和其他所有设备之间,与Broadwell不同),因此它甚至可以缓存来自非CPU系统设备的DMA访问或CPU负载/存储到“不可缓存的”内存区域(绕过L1 / L2 / L3)。
彼得·科德斯

3
@PeterCordes但是答案不是“否”,仅仅是因为需要特殊模式-问题是关于特殊模式是否存在。
user253751

1
问题是-如果仍然使用缓存并确保它永远不会丢失或刷新,会发生什么-当将某些内容写入不存在的RAM中的地址时,它变为可寻址状态,否?实际的写入操作被丢弃在地板上,但是无论如何从缓存中读取数据?
rackandboneman

9

尽管这不能直接解决问题中指定的处理器系列,但下面的方案可以在较早的x86处理器上运行,因此,是的,可以在没有RAM或高速缓存的情况下进行操作,尽管这种方法需要一些创造性的编程技能。

早在1980年代,我就遇到了一个无线电接收机的设计,该接收机对在英国广播的MSF时间信号进行解码。该设计使用Z80处理器,并且只有ROM用于程序存储。所有处理和数据存储都是使用处理器内的内部寄存器执行的。显然,这意味着不可能有子例程调用,因为有可用的内存来保存堆栈。

那时,RAM的成本很高,并且由于这是一个业余项目,因此降低成本很重要,除了它是一项有趣的学术活动之外。这也早于微控制器广泛使用的时代(8751的价格超过100英镑IIRC)。


将自己限制在可以保存在寄存器中的数据实际上限制了您可以执行的有用功能。我认为问题更多是关于现代处理器中的缓存。
Mark Ransom

当然不用说,不使用RAM会限制可能的功能。引用的应用程序显示了在非常有限的数据存储资源,无线电前端和LCD显示器中可能实现的功能。
uɐɪ

-3

通常,CPU将需要一个外部时钟。但是有了,它可以。


1
解释原因并彻底回答用户的问题将是适当的。这个答案是薄弱的一面。
电压峰值
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.