每个操作系统都需要RAM吗?


76

是否有没有RAM即可使用的操作系统,特别是我可以从中创建可启动Pendrive并在计算机中使用的OS?这很尴尬,因为引导实际上是将操作系统加载到RAM中。

注意:我最初想了解一个无RAM的OS,以检查我的笔记本电脑(无法启动但显示黑屏)RAM是否变坏,但是我喜欢这个问题激增的方式。


23
我不确定CPU是否可以在没有RAM的情况下完全运行,这对于Computer Science.SE可能是个好问题。我确实知道的是,即使您没有设法通过BIOS,也不会有任何收获。

12
@AndréDanielCPU具有高速缓存,从CS的角度来看,它也是随机存取存储器。因此,从理论上讲,您不需要其他RAM模块。但实际上,我怀疑x86架构是否允许这样做。
菲利普

30
所有有关使用处理器缓存的争论都具有不确定性,因为至少在x86上,缓存不是可以直接访问的内存。您的代码始终引用RAM,但是处理器会自动管理其缓存,因此实​​际上不必为最常访问的数据获取RAM中的数据。但是同样,没有汇编指令说“将其存储在高速缓存中”“将其存储在高速缓存中”,有寄存器,并且有主存储器(具有其所有奇怪的访问模式),周期。
Matteo Italia 2014年

3
(OTOH,理论上您可以利用其他RAM(例如视频RAM)或映射到物理地址空间中的外围设备)
Matteo Italia 2014年

13
现代的x86 CPU使您可以将片上缓存置于“作为RAM缓存”模式-我认为需要设置一些MSR。这可能也适用于某些ARM CPU。现代CPU上的高速缓存数量要比第一台PC可能拥有的最大内存量大。在PC上,如果没有RAM,固件仍无法启动。您需要自定义固件或PC平台以外的东西。
LawrenceC

Answers:


96

每个操作系统都需要RAM吗?
对于与IBM PC兼容的硬件,BIOS POST过程必需步骤是检查是否有RAM可以将BIOS加载到其中。(可选)POST过程检查您的RAM是否正常运行。POST过程之后,BIOS将引导加载程序加载到RAM中,并将控制权交给引导加载程序。因此,您的问题的答案(“每个操作系统都需要RAM吗?”)是:是的,每个与IBM PC兼容的硬件都至少需要一些正常运行的RAM才能启动。对于在该硬件上运行的任何OS都是如此。

请注意,在OP的原始问题中,提到了“笔记​​本电脑”,我将其解释为:IBM PC兼容硬件。对于此答案的其余部分,我将假定IBM PC兼容的硬件。

操作系统可以使用错误的RAM启动吗?
如果你的内存有问题(而不是完全不存在/断开),或者如果你可以(部分)取代你的RAM,您可能能够使用启动BadRAMBadMEM内核补丁。它要求您重新编译内核(听起来比第一次编译时要容易),并且可以重新启动并告诉内核您的坏内存在哪里。可以在此处找到有关Memtest86 / Memtest86 +,BadRAM / BadMEM 的用法的很好解释。

操作系统可以在没有RAM的情况下引导并且将CPU的缓存用作RAM吗?
据我所知,在注释中,如果系统上不存在任何RAM(如@philipp等建议),则无法将CPU的缓存用作RAM。如果有的话,最好在这里添加它。我唯一可以找到的关于该主题的论文该论文,其中指出:“将处理器的缓存用作RAM,直到RAM初始化为止”。不知道它是否(以及如何)没有 RAM 就可以工作。据我所知,没有可在IBM兼容PC上引导OS的工作代码。注释中欢迎引用任何概念验证,工作代码或任何内容,我将其添加到此答案中。

我可以进入BIOS吗?
如果笔记本电脑能够通过BIOS POST,则OP的问题有点含糊。正如@Tonny指出的那样,没有操作系统可以帮助您“ 进入BIOS ”。输入您使用的BIOS F1F2F10DELESC键,这取决于你的品牌的BIOS。

如何从不带RAM的笔记本电脑中恢复数据?
至于问题背后的目标:为什么需要访问笔记本电脑?可能是因为要恢复的HDD上仍有数据吗?在这种情况下,拔出HDD(请参阅手册)并将其连接到外部存储设备或直接连接到PC上要容易得多。是一个很好的指南。


3
在实践中,有可能与有些缺陷的内存(比如,有一家银行,其工作不正常)运行的机器。如果BIOS没有注意到(或者,如果确实注意到,可能是通常的F1替代),您仍然可以运行带有BadMEM / BadRAM补丁的Linux之类的操作系统,该操作系统指示内核避免指定的内存块。
Matteo Italia

5
@VusP:要检查您的RAM,请使用带livecd / -usb的Memtest86 / Memtest86 +,跳过BIOS中的RAM测试,然后从livecd / -usb运行memtest。
2014年

4
谁说引导时测试RAM是“ 强制性的 ”?机器只有几MB或更少的内存是很常见的,但是随着大小的增加和时间变得过长,很快就变成了可选的。
Andrew Medico 2014年

3
@agtoever:嗯?初始化RAM时,“ RAM缓存”技巧不会突然停止工作。只是在那个时候避免RAM是愚蠢的,所以没有人尝试过。但是这个技巧与未初始化的RAM无关。只是在它真正有用的时候。
Mehrdad 2014年

3
@ Hi-Angel,由于cpu无法直接访问磁盘的内容,因此无法直接从磁盘执行。它必须将命令戳入磁盘控制器,并等待其将数据块从磁盘传输到ram中的某个位置。CPU只能从那里直接执行指令。
psusi 2014年

33

理论上讲是有可能,但是它会非常慢,因为它需要将磁盘用于任何不适合CPU缓存的临时存储。(CPU具有几兆字节的缓存,因为即使RAM 对它们来说也太慢了。考虑一下。)因此,您需要一个相当小的OS。

(嗯,嵌入式片上系统可以从RAM或内部闪存执行代码-理论上,PC BIOS可以执行相同的操作,但不能运行整个OS。)

但是,另一件事是,BIOS 任何已安装的操作系统之前之外运行,而BIOS是使您可以从Pendrive或其他任何方式引导的BIOS。因此,如果您无法访问BIOS,那么世界上没有其他操作系统可以为您提供帮助。


6
可能是CPU可以使用其自己的缓存而不是RAM。对于在内存测试之前运行的BIOS代码的那些部分,这可能是有用的功能。但是在没有RAM的情况下使其他硬件正常工作可能会很棘手。您将无法执行DMA,因此磁盘I / O必须进行不同的处理。我猜如果找不到可用的RAM,BIOS甚至不会尝试加载操作系统。缓存的大小虽然不是问题。从现代标准来看,几个MB可能不是很多,但是从RAM仅为1 MB的那个年代开始的OS仍应该可以在现代计算机上运行。
kasperd 2014年

2
@kasperd DEC Alpha旨在从缓存(从“串行ROM”预加载)运行开机初始化的第一阶段。这是因为在初始化页表之前,CPU无法访问RAM,常规ROM或任何其他内存映射资源(包括所有I / O设备,IIRC)。
zwol 2014年

@grawity SSD怎么样?
TechLife

@TechLife:仍然比RAM慢几个数量级。不过,我想,如果您将其用作RAM ...它只会被称为 RAM,所以仍然没有。
grawity

15

您可以花费一些精力设计一个不包含RAM的系统。从ROM(或存储)加载软件,然后在寄存器或缓存中进行所有操作。这样的系统使用范围极窄,考虑到当今的RAM价格也毫无意义。没有一些内置内存,现成的笔记本电脑将无法运行。

您真正的问题很可能是“如何从无法启动的计算机中获取信息”,这很容易。拆卸它,卸下驱动器,然后将其连接到外部驱动器盒。

但是请注意,任何足够老而不能仅获得价值20美元的可用RAM的计算机都将具有ATA(常规ATA,而不是SATA)驱动器。该接口今天几乎已经不存在了,因此您还需要找到带有ATA卡以及全尺寸到笔记本尺寸适配器的驱动器盒。我有一个2000年买的,为了这个目的,我保留了一些旧箱子。


同意 没有RAM意味着没有堆栈,这意味着无法调用例程。在这种情况下可能起作用的任何代码都必须经过精心手工组装。
Loren Pechtel 2014年

真正。我已经看到了这样做的代码。(在初始化内存控制器之前,我是BIOS例程的第一部分)。
轩恩斯2014年

2
@LorenPechtel并非完全正确。堆栈可以(通常是)存储在片上存储器中。
reirab 2014年

2
@LorenPechtel不必要。ARM不使用堆栈来调用例程。
domen 2014年

1
据我所知,这些芯片具有内部SRAM ...,可以算作RAM。
domen 2014年

10

如果我正确地阅读了问题,那么这里的每个人都在树错树皮。

他明确声明“为了进入BIOS”。

如果笔记本电脑坏了,甚至无法进入BIOS,那么其他一切都没有意义。

无论RAM情况如何,都无法在此上引导任何操作系统。


8

您对内存不良的假设可能无效。如果没有发出哔声或屏幕消息,则根本原因几乎可以肯定是CPU故障(某种程度上不太可能)或主板故障(很有可能)。由于冷焊点,主板总是随着时间的流逝而失效,这在ROHS运动初期以及使用无铅焊锡的需求中很普遍。制造技术已针对使用铅基焊料进行了优化,该行业花了一段时间才赶上并解决了问题。许多组件制造商不太愿意花钱升级他们的工艺。毕竟,在任何保修期过后,设备都可以正常测试并燃烧,直到几个月或几年后才失效。只有随着故障的增加和用户的强烈负面反馈,制造商才开始改进。在这样的笔记本电脑上,让主板回流以纠正冷焊点几乎可以肯定是成本过高的。


这是可能的,但是糟糕的记忆也不是一个不好的猜测。我已经看到坏的内存(甚至坏的内存套接字)之前导致多次POST失败。当然,最简单的内存检查通常只是尝试在卸下其他记忆棒的情况下进行引导,或者仅使用一支已知的记忆棒进行引导。如果这样可以解决问题,则可能是内存,内存插槽或内存控制器。
reirab 2014年

5

在1980年代左右的大多数早期计算机中,ROM芯片中都装有某种操作系统(硬件驱动程序,IO支持,程序加载,非常简单的命令行界面等)。即使RAM芯片无法工作,它也可能会起作用。此功能用于特殊的ROM内容版本中,旨在运行硬件测试并主要通过蜂鸣器和键盘灯进行通信。

CPU具有多个寄存器,至少可以记住要执行的命令的地址,但是通常不将其称为RAM。

常规C代码无法在没有RAM的系统中运行,因为它使用堆栈内存分配变量,并且堆栈位于RAM中。当最近的计算机启动时,常规的动态RAM最初不可用,因为RAM刷新设备需要初始设置才能工作。汇编代码首先运行并执行主板初始化。RAM开始工作,然后可以运行C代码。


4
最后一段并非完全正确。堆栈不必位于片外RAM中。实际上,将堆栈放置在片上存储器中是很常见的。即使在普通计算机上,当前执行线程的堆栈通常也将位于高速缓存中,并且仅在调度程序交换线程时才会被推入DRAM。不过,我已经为DSP编写了代码,其中堆栈位于直接可寻址的片上存储器中,从未接触过DRAM。当然,在这种情况下,我猜您可能会争辩说片上内存在技术上是RAM。
reirab 2014年

4
同样,至少某些参数和返回值通过寄存器(而不是堆栈)传递给C函数也很常见。此外,局部变量也通常存储在寄存器中,而不是由C编译器存储在堆栈中。您甚至可以使用'register'关键字专门要求编译器将特定变量放入寄存器中。当然,一旦一个函数需要的局部变量多于您拥有的寄存器空间,就需要进入内存,但这是一种硬件约束,与编程语言无关。
reirab 2014年

4

1967年我上大学时,计算系有一架Stantec Zebra。内存由8192字磁鼓组成。还有12个寄存器和两个累加器。您可能会考虑该RAM,但并非我们所知道的那样。


3

您至少需要在芯片上缓存用于寄存器(实际上是非常少量的芯片上RAM),以便CPU执行单元可以正常工作。因此,即使您的CPU也具有“ RAM”。

我相信没有内存需求就没有设计Von-Neumann操作系统。

所以不行。


3

正如这里的所有其他人一样,我确实同意您确实需要RAM且没有它就无法工作的事实,但是我也阅读以下内容:

(我本来想加载一个无RAM的OS,以检查RAM是否变质,但是我喜欢这个问题滚雪球的方式。)

这实际上在BIOS中确实存在,它具有检查RAM深度的功能。在引导并进入BIOS时,将“快速开机自检”选项更改为“关闭”,它将对RAM进行一次完整的检查。此选项应位于“高级BIOS功能”中,类似于AMI BIOS上的第二选择。

希望能使您更进一步。;-)


3

不需要 RAM,例如,使用Turing机

图灵机是一种假想的设备,可以根据规则表来操纵一条胶带上的符号。尽管图灵机很简单,但它可以适用于模拟任何计算机算法的逻辑,并且在解释计算机内部CPU的功能时特别有用。

(我不认为磁带是RAM。)

现在,您真正的问题应该在询问“有用”,并定义“有用”的含义


3
在图灵机的概念级别上,所有类型的读写数据存储基本上都是等效的:RAM,寄存器,高速缓存,磁带,磁盘。它们之间的唯一区别是访问速度。
Barmar 2014年

1
@Barmar RAM表示随机存取存储器。这意味着您可以按任何顺序访问其中的单元格。图灵机上磁带上的单元只能依次访问(方向或交替访问)。所以我想说图灵机上的磁带不是RAM。
kasperd 2014年

1
@Barmar那是不正确的。RAM的定义不允许查找时间。因此,TM的磁带根本不符合RAM的定义,因为您不能不寻求就访问任意单元。
kasperd 2014年

1
@Barmar,墙上时钟时间的概念可能不适用,但是时间的概念确实适用,因为它需要O(n)读操作才能到达。
psusi 2014年

1
@Barmar,不,你不知道。这就是为什么我们使用大的“ O”符号来谈论纯粹的数学复杂性,而该复杂性与实际事物可能花费的“时间”无关。此TM中的磁带机的数学模型是这样的,它在任何时间都只能读...任一方向...不能向前或向后缩放。因此,如果最后读取字节1,则必须先读取两个字节之间的26个字节才能读取字节27。这就是为什么它不是公羊。如果您希望内存可以跳过这26个字节,那么执行此操作需要花费0时间还是5分钟,那就是ram,而不是磁带。
psusi 2014年

3

有专门用于嵌入式用途的OS,这些OS完全用完ROM(只读存储器)。但是,要执行任何有用的操作,通常仍需要至少少量RAM。我还没有看到没有RAM即可启动的PC。

至于有关内存测试的原始问题,如果计算机可以开机自检(即使其通过开机自检并尝试启动),则Memtest86专为测试您的RAM而设计。它会测试前64KB的RAM,将自身加载到该RAM中,然后根据需要彻底测试系统的其余部分。“片状”内存(而不是普通的坏内存)并不常见,但是我已经看到Memtest86间歇性地发现了计算机的内存测试丢失的坏点(毕竟,POST内存测试旨在在合理的时间内完成) ,而memtest86最快的测试运行5-10分钟,而更全面的测试则需要数小时。)


1

是的,您可以有一台没有RAM的计算机。大多数x86处理器中都有一种特殊模式,该模式只能在缓存中运行它。如果您检查coreboot(以前的linuxbios),它可以做到。它称为cache-ram。实际上,您可以基于此创建一个完整的操作系统,并且使用现代的大容量缓存,即使拥有gui(检查menuet-os),它也可能最终会结束。但是还没有这样做。

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.