运行没有RAM的计算机?[重复]


14

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

然后我想知道仅使用硬盘但不使用RAM时会发生什么情况?



1
@Cornelius感谢您的答复,我将检查出来:)
akash ujjwal 2014年

12
发生一些哔声,然后屏幕变黑。
arch-abit 2014年

1
我的问题是,我至少可以测试一下显卡是否在工作吗?会不会有视频或显示器无法正常工作?
法警艇

Answers:


27

在某个时候,这成为什至算作“ RAM”的问题。许多CPU和微控制器都具有大量的片上内存来运行小型操作系统,而没有连接单独的RAM芯片。实际上,这实际上在嵌入式系统领域相对普遍。因此,如果您仅指的是没有连接任何单独的RAM芯片,那么可以,您可以使用许多当前的芯片,尤其是为嵌入式世界设计的芯片来实现。我是在工作中亲自做的。但是,由于可寻址的片上存储器和单独的RAM芯片之间的唯一真正区别只是位置(并且显然是延迟),因此将片上存储器本身视为RAM是完全合理的。如果您将其计为RAM,那么当前的数量

如果您指的是普通PC,否,没有连接单独的RAM棒就无法运行它,但这仅是因为BIOS设计为不尝试在未安装RAM的情况下进行引导(这反过来是因为现代PC操作系统需要运行RAM,特别是因为x86机器通常不允许您直接寻址片上内存;它仅用作高速缓存。)

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

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

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


现在,我终于得到了我所需要的。您回答的正是我正在讲的内容。非常感谢您:)
akash ujjwal 2014年

实际上,PC无法在没有RAM的情况下引导的原因是BIOS,如果BIOS代码无法在RAM中找到重定位地址,它将中止。您所听到的只是电源的嗡嗡声,风扇的噪音以及可能旋转的磁盘的噪音-但是计算机基本上是脑瘫的。CPU永远没有机会使其全部正常工作。因此,RAM非常重要。
arch-abit 2014年

@ arch-abit是的,但是RAM是运行计算机的必要组件吗?
akash ujjwal 2014年

2
除了@reirab所说的,在执行指令的意义上,可以在没有DRAM的情况下运行“ PC”-这是系统在DRAM控制器初始化之前运行的模式(由BIOS / EFI / Coreboot等完成)。但是,由于大多数组件仍可能使用DMA,因此您不可能做任何有用的事情。
Maciej Piechotka 2014年

1
32位x86 cpu寄存器仅为32位,而不是64位,而64位x86 cpus具有32位而不是8位。
psusi 2014年

23

理论上讲,设计一台计算机时只需很少的内存(只有几个寄存器的值)或没有RAM(查找图灵机的定义),这实际上可以在适当的大型/快速实施的Conway's Life中构建。模拟)。

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

对于没有RAM的现代Windows或Linux计算机(类似于真正的Turing机器)而言,其系统或类似的复杂性,仅需几天即可启动,而要花几小时的时间才能更新具有现代分辨率的图形界面的屏幕。即使是与CP / M或DOS早期版本相当的纯文本操作系统,也要花费很长时间才能到达初始命令提示符。


4
我认为您可能会认为某些DSP(数字信号处理器)和类似的微处理器是没有RAM的计算机,因为它们实际上是在连续数据流上进行计算。
jamesqf 2014年

1
我认为您对“仅虚拟内存”计算机的运行速度的估计有些夸张,但原则上是正确的。
大约

1
由于磁盘比RAM慢> 1,000,000,因此我认为估算值偏低。
Dancrumb 2014年

2
@Dancrumb我不确定您的1,000,000(倍)来自何方。DDR3 SDRAM可以为您提供10 GB / s的速度,而即使是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 仍然相去甚远。
CVn

1
@PeterCordes编辑过,所以似乎我没有宣称Win / Linux可以在没有RAM的情况下运行。
Zeiss Ikon

10

您可以,因为x86 CPU启动时,二级缓存最初是用作缓存的SRAM。因此,您可以编写自己的BIOS以便不初始化RAM,而仅将CPU内部的少量SRAM用作RAM,而不使用L2 / L3高速缓存。

只需阅读CPU制造商的BIOS准则。


4
+1说明。实际上,每个x86系统(计算机)都可以“不使用ram”启动。BIOS代码首先检测是否有公羊,如果没有公羊,则发出蜂鸣声。此代码可以在没有ram的情况下运行;)(没有ram不能完成很多工作,因为肯定寄存器不足以处理HDD并将其“用作ram”)
Sebi 2014年

10

所有现代的标准通用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也不例外。


2
+1因为这是处理实际问题的唯一答案,不仅会发生什么,而且还会为什么

@ultrasawblade为什么cpu没有机会查看数据,即使cpu对页面(info)有需求,并且如果在ram(primary memory)中不可用,那么也会出现页面错误,然后cpu向硬键请求所需的数据。这意味着cpu最后必须进入硬盘以获取必需的信息。
akash ujjwal 2014年

2
查看修改。交换内存中的内核分页与程序加载或程序对磁盘的读/写没有区别。它只发生在内核中以及用户进程的幕后,而不是内核的幕后。
LawrenceC

请注意,x86至少可以在无填充模式下将缓存用作 RAM,但是与内置RAM的微控制器在同一条船上。仅使用ROM且没有可写地址空间运行CPU是合理的(如果所有状态都适合寄存器,请注意,最新的x86 CPU具有32个512b ZMM矢量寄存器...),但同意没有合理性是不合理的代码的可读地址空间(以及x86的GDT / LDT / IDT和其他表)。
彼得·科德斯

7

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

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


5
然后您敲着额头说:“我不应该尝试在12月27日在北半球的湿度低于10%的地毯上安装这些RAM棒吗?” 是?
arch-abit 2014年

@LPChip为什么将其存储到Ram的主要目的是什么。为了使系统快速运行或减少访问时间,内置了缓存功能。我是对还是错?
akash ujjwal 2014年

1
RAM是快速的内存存储,磁盘访问是缓慢的,非易失性内存存储和CPU高速缓存存在于其他原因。
Fiasco Labs 2014年

1
@FiascoLabs实际上,存在CPU缓存的原因与RAM相同:它的存储速度非常快。它比RAM快得多,但每个字节的价格更高。
reirab 2014年

而且计算机不会在其上独立运行,因此是“其他原因”
Fiasco Labs

5

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


是的,它们是会被磁化/消磁的小金属环。en.wikipedia.org/wiki/Magnetic-core_memory(回复有关已删除的旧真空管计算机的评论)
Fiasco Labs

2

实际上,至少在两种情况下,您可以在没有技术上称为RAM的情况下运行计算机

  1. 第一台旧的机械“计算机”(Konrad Zuse的构造和Charles Babbage的计算机是没有RAM的机械设备,仍称为计算机)

  2. 没有RAM且只有带有寄存器的处理器(芯片)的现代计算机。在大多数情况下,处理器上具有SRAM(高速缓存存储器),但是最快的计算机存储器称为芯片上的寄存器,从技术上讲,芯片上的寄存器不是RAM。


1
感谢您的回答-我第一次回想起有关Zuse和他的早期机电计算机的信息(即使我记得最早的关于计算机的读物总是说“继电器”是开关单元,所有其他早期计算机似乎都使用了真空管)。 )。
Zeiss Ikon 2014年

1

它只是不会运行。主板很可能会以一种不寻常的方式发出提示音并关闭。如果您没有足够的RAM,即使Windows XP甚至没有128MB,它也会拒绝安装(实际上是在旧计算机上尝试过的;其中一个芯片未正确放置)。因此,使用当前设置是不可能的。即使您可以禁用主板检查,CPU也无法直接从硬盘读取数据,并且每次操作都需要RAM。

我猜,从理论上讲,有可能构建一台仅使用很少或不使用RAM的机器,但是效率很低。

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.