运行没有 RAM 的计算机?

aka*_*wal 13 memory cpu hard-drive

我正在阅读有关CPU fetch time 的文章,我发现与访问硬盘相比,CPU 从 RAM 访问数据所花费的时间要少得多,并且该 RAM 用于存储执行程序的信息和数据。

然后我想知道当我们只使用硬盘而不使用RAM会发生什么?

rei*_*rab 29

在某些时候,这就涉及到什么才算作“RAM”的问题。有许多 CPU 和微控制器具有足够的片上内存来运行小型操作系统,而无需连接单独的 RAM 芯片。其实这在嵌入式系统的世界里其实是比较常见的。因此,如果您只是指不连接任何单独的 RAM 芯片,那么,是的,您可以使用许多当前的芯片来实现,尤其是那些专为嵌入式领域设计的芯片。我在工作中自己做过。然而,由于可寻址的片上存储器和单独的 RAM 芯片之间唯一真正的区别只是位置(显然还有延迟),因此将片上存储器本身视为 RAM 是完全合理的。如果你把它算作内存,那么当前的数量,

如果您指的是普通 PC,不,您不能在没有连接单独的 RAM 棒的情况下运行它,但这只是因为 BIOS 设计为不会在未安装 RAM 的情况下尝试启动(反过来,因为所有现代 PC 操作系统需要 RAM 才能运行,尤其是因为 x86 机器通常不允许您直接寻址片上内存;它仅用作缓存。)

最后,正如蔡司所说,除了几个寄存器之外,没有任何理论上的理由表明你不能设计一台完全没有任何 RAM 的计算机。RAM 的存在仅仅是因为它比片上内存便宜且比磁盘快得多。现代计算机具有从大但慢到非常快但很小的存储器层次结构。正常的层次结构是这样的:

  • 寄存器 - 非常快(可以直接由 CPU 指令操作,通常没有额外的延迟),但通常非常小(例如,64 位 x86 处理器内核只有 16 个通用寄存器,每个都能够存储一个单个 64 位数字。)寄存器大小通常很小,因为每个字节的寄存器非常昂贵。
  • CPU 缓存 - 仍然非常快(通常是 1-2 个周期的延迟)并且明显大于寄存器,但仍然比普通 DRAM 小得多(并且速度快得多)。CPU 缓存的每字节也比 DRAM 贵得多,这就是它通常要小得多的原因。此外,许多 CPU 实际上甚至在缓存中也有层次结构。除了更大更慢的缓存 (L3) 之外,它们通常还有更小、更快的缓存(L1 和 L2)。
  • DRAM(大多数人认为是“RAM”)——比缓存慢得多(访问延迟往往是几十到几百个时钟周期),但每字节便宜得多,因此通常比缓存大得多。DRAM 仍然比磁盘访问快许多倍(通常快数百到数千倍。)
  • 磁盘 - 同样,这些比 DRAM 慢得多,但通常每字节便宜得多,因此更大。此外,磁盘通常是非易失性的,这意味着即使在进程终止后(以及在计算机重新启动后),它们也允许保存数据。

请注意,内存层次结构的全部原因只是经济学。没有任何理论上的理由(至少在计算机科学中)为什么我们不能在 CPU 芯片上拥有 1 TB 的非易失性寄存器。问题是,建造它会非常困难且昂贵。拥有从少量非常昂贵的内存到大量廉价内存的层次结构使我们能够以合理的成本保持快速的速度。

  • 除了@reirab 所说的,在执行指令的意义上,可以在没有 DRAM 的情况下运行“PC” - 这是系统在 DRAM 控制器初始化之前运行的模式(由 BIOS/EFI/[Coreboot](http ://en.wikipedia.org/wiki/Coreboot#Initializing_DRAM) 等)。然而,您不太可能做任何有用的事情,因为大多数组件可能无论如何都使用 [DMA](http://en.wikipedia.org/wiki/Direct_memory_access)。 (2认同)

Zei*_*kon 22

这将是理论上可以设计一个计算机用很少的(几个寄存器的值)或无RAM操作(查找图灵机的定义-这实际上可以在一个适当大/快速实现Conway的生命构成模拟)。

所有现实世界的计算机都使用 RAM 的原因首先是历史性的:核心存储器(RAM 的原型,只是半易失性)大大早于磁鼓或磁盘等大容量存储(尽管它确实出现在打孔卡和纸带之后——前者的原始形式可以追溯到1801 年(是的,19 世纪初;提花织机使用打孔卡自动编织任意复杂的颜色图案,甚至比巴贝奇差分机或霍勒瑞斯制表机早几十年);其次,RAM(如核心存储器)是电子的,比任何依赖存储介质的物理移动以将数据呈现给读/写机制的设备快得多。

一个系统或类似于现代 Windows 或 Linux 计算机的复杂性,没有 RAM(类似于真正的图灵机),需要几天才能启动,并且需要几个小时才能以现代分辨率更新图形界面的屏幕。即使是类似于 CP/M 或早期版本的 DOS 的纯文本操作系统,也需要很长时间才能到达初始命令提示符。

  • 我认为您也许可以将一些 DSP(数字信号处理器)和类似的微处理器视为没有 RAM 运行的计算机,因为它们本质上是对连续的数据流进行计算。 (4认同)
  • @Dancrumb 我不确定你的 1,000,000(次?)来自哪里。[DDR3 SDRAM 可为您提供 10 GB/s 的速度](https://superuser.com/a/686384/53590),而即使是旋转 7200 rpm 的 HDD 也会为您提供大约 100 MB/s (0.1 GB/ s) 连续的。这是 100 的因数;当然很重要,但与 1,000,000 次相差甚远。RAM 大大优于 HDD 的地方在于寻道延迟,但您可以通过使用 SSD 来大大缓解这种情况。DDR3 的延迟在 10 ns 范围内,而快速 SSD 的延迟可能在 10,000 ns 范围内(100k IOPS),系数为 1,000;*仍然*与1,000,000相差甚远。 (3认同)

Law*_*ceC 11

所有现代的、标准的、通用的 CPU 基本上都是这样工作的:

  • CPU 维护一个寄存器,该寄存器在其地址空间中指向下一条指令
  • CPU 获取该地址空间中的任何内容并递增该寄存器
  • 如果指令需要额外的信息,比如目标地址或其他操作数,它也会被获取
  • CPU执行指令
  • 如果指令是跳转、调用、返回、从中断返回或分支,它可能会修改指向下一条指令的寄存器。
  • 重复

CPU 获取该地址空间中的任何内容并递增该寄存器

什么可以“生活”在地址空间中?

  • 什么都没有(可以返回零、随机数据或导致 CPU 锁定)
  • RAM(主板 RAM、来自 PCI 设备(如图形适配器等)的 RAM)
  • 只读存储器
  • I/O 设备的寄存器(包括“内部 I/O 设备”,如 CPU 的本地 APIC)
  • 现代 CPU 允许“缓存为 RAM”,因此 CPU 缓存的一部分可以出现在地址空间中

请注意“硬盘”不在该列表中。硬盘不直接连接到CPU。数据通过连接到 CPU 的 I/O 设备(SATA 主机适配器)进出硬盘。

I/O 设备使用 DMA 向/从硬盘加载/保存数据。这意味着 I/O 设备直接读取/写入 RAM 本身 - 无需 CPU 干预 - 并且还依赖于那里的 RAM。但是如果数据没有被 I/O 设备加载到 RAM 中,CPU 就没有机会看到它。

所以你不能让 CPU 直接从硬盘获取指令。


页面错误期间发生的情况是:

  • CPU 尝试访问在本地 CPU 页表(始终存在于 RAM 中)中标记为换出的内存页。
  • 这种访问会导致 CPU 中的页面错误异常。
  • CPU,现在处于内核模式,查看另一个进程试图访问的页面。
  • 内核注意到一个用户进程正试图访问一个换出的页面,并调用正常的 I/O 进程将该页面从磁盘换回。 这与从磁盘加载/保存任何其他数据时使用的过程相同。 仅仅因为 CPU 在交换的内存中进行分页并没有什么不同。
  • CPU 然后将控制权交还给被中断的进程,该进程继续进行,好像什么也没发生。

因此,由于内存被换出而需要从磁盘获取数据的 CPU 没有什么不同。

  • `+1` 是这里处理*真实*问题的唯一答案,不仅是*会发生什么*,还有*为什么*。 (2认同)
  • 查看编辑。交换内存中的内核分页与程序加载或程序读/写磁盘没有什么不同。它只发生在内核内部和用户进程的幕后,而不是内核的幕后。 (2认同)

小智 11

您可以,因为当 x86 CPU 启动时,L2 缓存在用作缓存之前最初是一个 SRAM。因此,您可以编写自己的 bios,以便不初始化 RAM 并仅使用 CPU 内部的少量 SRAM 作为 RAM 而不是 L2/L3 缓存。

只需阅读 CPU 制造商的 BIOS 指南即可。

  • +1 表示。事实上,每个 x86 系统(计算机)都“不使用 ram”启动。Bios 代码首先检测是否有任何内存,如果没有则发出哔哔声。这段代码可以在没有 ram 的情况下运行;)(ofc 没有 ram 就不能做很多事情,当然寄存器不足以处理 HDD 并“作为 ram”使用它) (4认同)

LPC*_*hip 6

个人计算机需要RAM 才能运行。每个从硬盘启动的应用程序在执行之前都会先复制到 RAM 中。

因此,如果您的计算机中没有任何 RAM,您的计算机将无法启动,可能会发出几声警告哔声,让您知道没有安装任何 RAM。

  • 然后你敲了敲额头说“我不应该在 12 月 27 日在北半球尝试将这些 RAM 棒安装在湿度低于 10% 的地毯环境中?” 是的? (5认同)

Car*_*l B 5

计算机将无法运行。RAM 是从主板成功发布的重要组成部分。当 RAM 不存在或损坏时,许多主板通常会发出蜂鸣声代码,以指示在故障排除中查找的位置。