为什么不创建一个在内存中运行的操作系统?

为什么不创建一个在内存中运行的操作系统?

这可能是一个不适合提出这个问题的 StackExchange 网站,但我找不到更好的网站。似乎没有一个关于操作系统的问题的网站。

最近我一直在考虑一种纯粹在内存中运行的操作系统,它会有很多好处。

  • 创建这样的操作系统会简单得多,因为您不必处理文件系统、缓存等。
  • 这样会快得多。
  • 程序会更容易编写,因为它们不需要加载或保存任何内容。
  • 程序可以直接在内存中操作,而不必编写源代码然后进行编译。REPL 已经接近这个水平,但为什么不完全做到这一点呢?光桌就像这样,它“允许您修改正在运行的程序”,但我认为它可以更进一步。显然,我们需要其他方式来操作/构建内存中的程序。
  • 数据库将得到极大简化,因为不再需要进行查询缓存。甚至可能根本没有必要进行查询缓存。
  • 无需开机或关机

显然这种方法存在问题:

  • 内存是易失性的:您必须更换硬件,以便内存始终通过备用电池或类似设备保持活动状态。
  • 很多情况下数据太大,无法装入内存。例如拥有大量数据库的大型网站、拥有大量音乐/视频收藏的人等。但是,大多数人并没有大量的视频收藏,他们从 Netflix 流式传输内容。例如,看看 ChromeBook 的成功,它只有 16GB SSD。
  • 更新内存中的操作系统可能会比较棘手,但有些语言已经做到了这一点,例如 Java、Erlang 热插拔

无论如何,我一定是忽略了一些东西,否则所有比我聪明得多的计算机科学家早就这样做了,但它是什么呢?

答案1

如果您只有 RAM,那么您就无法有效使用 RAM,原因有二:

  1. 如果某个页面很脏但未被访问,则必须将其保存在 RAM 中,即使您宁愿将 RAM 用于其他用途。

  2. 任何时候应用程序可能会使用内存或可能不会使用内存,您都必须说不,除非您可以满足已经做出的每个预留,即使大多数预留不太可能被使用,因为否则您必须强制终止进程。

因此,您只有 RAM,但无法有效利用它。这对于通用操作系统来说是一个糟糕的解决方案。

但这是一个坏主意的基本原因很简单——除了 RAM 之外,还有其他东西并不会强迫你使用它们。它只是允许如果它们对你有用,你就去使用它们。你无法通过剥夺选择来让事情变得更好。

答案2

即便在今天,RAM 和磁盘存储的价格也相差一个数量级。这意味着,随着存储需求的增加,将所有东西都存储在 RAM 中会比其他方式贵得多。这也适用于 ROM 内存(必须是非易失性的东西才能启动),使用少量内存并将其余所需程序/代码放在磁盘上比全部放在 ROM 中更经济。

1TB 硬盘 50 美元 vs 1GB RAM 30 美元

120GB SSD 售价 100 美元,16GB RAM 售价 150 美元

几十年前我买了一台全 RAM 电脑,现在还保留着。一台 Tandy Model 102,静态 RAM 为 24k。它仍然有某种文件系统,因为您仍然需要组织和选择文档和程序。由于价格原因,它没有流行起来——我买的时候花了 600 美元。

在此处输入图片描述

答案3

您可以让 Linux 操作系统完全从 RAM 运行(即从持久介质或 PXE 启动后)。

您只需要让自定义的 initrd 创建一个 ramfs,并在填充之后将其作为 root 挂载。

然而,由于与 SSD、HDD 等相比,RAM 相对昂贵且较小,因此存在一些实际限制。

答案4

嵌入式操作系统通常可以完全在 RAM 中运行,具体取决于应用程序。写了一个几年前,我曾为 Atmel 微控制器做过研究。

早在 20 世纪 80 年代,就有多种系统可以完全在 RAM 中运行。从技术上讲,你不需要任何原始 IBM PC 或 XT 中的驱动器,因为它们可以直接启动到内置于 ROM 中的 BASIC 解释器。所有早期的 Commodore 机器(如 VIC-20、C64、4+、C16 等)(以及许多其他机器)都是相同的。

在 20 世纪 90 年代,最流行的整个操作系统都在 RAM 中执行的消费系统是 PalmOS,它最初没有任何文件系统(内部所有内容都存储在一个大型(非关系型)RAM 记录数据库中。如果您还记得 PRC 和 PDB 文件,那么它们基本上只是针对特定应用程序资源或数据存储的 RAM 记录转储)。直到他们引入外部存储选项,任何类型的文件系统访问才被内置到操作系统中,即使那时,如果您的设备中没有使用 SD 或 MMC 卡,系统也会完全从 RAM 运行。应用程序不必“加载”,因为它们几乎在原地运行(尽管它们可以自然地分配堆栈和堆空间)。

Linux 内核可以配置为完全在 RAM 内运行。这对于通用计算来说并不是很有用(设备不知道您要向其输入什么),但是如果您知道给定应用程序的特定内存范围,则可以以这种方式配置和运行它。您将没有任何交换,并且首先必须使用某种东西来加载内核以及要运行的任何应用程序代码,但这是可以做到的(当然,在现实世界中,您至少需要某种固件来存储内核和应用程序数据,以便在设备重新初始化时使用)。

至于为什么我们在嵌入式空间的某些区域之外的实践中很少看到这种情况?即使是嵌入式设备也需要从某物,而且如今闪存非常便宜可靠,因此至少添加一些小型固态存储来启动非常容易且便宜。除非您的设备容量很大,否则制作包含操作系统进行引导/重新初始化的 ROM 芯片可能会很昂贵。当然,在更通用的 PC 中,制造商不知道您打算在系统上放置什么样的负载,能够拥有可用作交换虚拟内存页面的后备存储的持久存储是一个巨大的好处。但对于不需要大量存储的更多自定义需求,有各种各样的操作系统可以完全从 RAM 运行。

相关内容