一台没有RAM但有磁盘的计算机等同于有RAM的计算机吗?


18

据我了解,内存用于很多事情。它充当磁盘缓存,并包含程序的指令及其堆栈和堆。这是一个思想实验。如果人们不关心计算机处理数据的速度或时间,那么假设计算机的磁盘容量很大,那么它可以拥有的最小内存量是多少?可以只拥有一个磁盘就可以消除内存吗?

显然不需要磁盘缓存。如果我们在磁盘上设置交换空间,则程序堆栈和堆也不需要内存。是否有需要记忆的东西?



3
这个问题背后的想法是什么?
Yves Daoust

12
定义“磁盘”。我们正在迅速迈向无盘世界(很高兴Terry Pratchett不必亲眼目睹)。这意味着所有存储都将是某种固态或另一种固态,这可能在回答您的问题,尽管可能相反。
彼得-恢复莫妮卡

2
记忆即记忆即记忆
爱德华

8
据我所知,随机寻址存储器并不是计算机的必需品。来自图灵机的磁带不是随机可寻址的。如果您愿意,没有什么可以阻止您仅对每个块读/写一位。
爱德华

Answers:


24

当然。原则上,给定适当的硬件,您可能只有一个磁盘,所有内容都存储在磁盘上。每当CPU执行加载或存储指令时,可能会有一些硬件将其转换为磁盘读或写操作。速度非常慢:在磁盘上,每次寻道大约需要10毫秒,因此您每秒可以进行约100次随机访问读写。

一些系统将闪存映射到其地址空间。闪存提供非易失性(永久)存储。因此,在某些方面,这类似于您提到的内容-尽管这些系统通常也具有RAM。


6
@MSalters提出了一个很好的观点,即如果我们修改磁盘(或在磁盘之上添加额外的硬件)以使其类似于RAM,那么我们最好也将其称为RAM。问题是,“是否有可能取消内存,而只有磁盘”这个问题太含糊了。内存和磁盘是什么意思?我们是说那些存在于现代台式电脑中的东西吗?那么答案是否定的。我们是否意味着一些假设的内存和磁盘?然后,在那种情况下,两者之间的区别还是变得模糊了,问题等同于“是否可能有一台具有基于机械的RAM的计算机?”
JBentley

1
AS / 400的工作原理是这样的。有一个单级存储,只有一个地址空间。磁盘和内存由平台固件组合成单个存储抽象,操作系统本身只能看到一个单一的统一存储空间。没有指针,只有对象引用。对象通过平台固件(使用PC的BIOS,使用AS / 400的SLIC)从内存移动到磁盘,然后透明地移回。如果您删除了磁盘并且仅具有RAM或删除了RAM并且仅具有磁盘,则对操作系统和应用程序没有影响。
约尔格W¯¯米塔格

另外,我认为HDD的寿命将大大缩短。甚至更糟糕的是SSD。最有可能是Android手机无法更换的原因
Suici Doga 2016年

16

在可计算性方面,众所周知,每台现代计算机都可以由图灵机模拟,该图灵机的唯一存储是可以写入的单个线性磁带单元。假设您可以继续增加磁盘存储的数量,那么仅具有硬盘驱动器的计算机的功能就一样强大。因此可以肯定,您可以制造一台没有内存的计算机。

当然,没有“无限空间”的硬盘驱动器,但是也没有无限的RAM。

存在许多实际问题,例如,您将需要用于映射磁盘上不同区域和地址的约定,将数据写入磁盘以获取中间存储空间和托管磁盘地址的操作系统。实际上,您最终会密切模拟硬盘驱动器上的RAM。


14

这个问题并非纯粹是学术性的。从历史记录来看,最早的商业生产的计算机之一(对不起,我不记得哪个是副产品)没有任何RAM-所有程序都是通过直接从磁鼓(旋转圆柱体)中获取指令来执行的表面可磁化(磁盘稍后问世)]。速度相对较慢,但比许多竞争对手便宜。[这是在“地铁”时代的回头路]

有趣的是,它配备了一种现在已经过时的工具,称为“优化汇编程序”-即汇编程序不仅生成机器指令,而且还连续地将它们写到感光鼓上,从而最大程度地减少了每条指令的时间等待鼓旋转到下一个。



3
其实,我想我可能一直在想IBM 1408
PMAR

8
另请参阅《梅尔的故事》(catb.org/jargon/html/story-of-mel.html),该故事是关于使用Royal McBee LPG-30(带有鼓存储器)工作的程序员的。
db48x

@ db48x:我忘了那个故事有多酷。我可能已经十年没读了。
彼得·科德斯

7

不能。磁盘驱动器不能像RAM那样随机寻址。相反,它们是块存储设备。您不能从它们读取或写入字节。而且您的CPU无法一次读取整个扇区,因此需要随机访问。操作系统向您隐藏了这一详细级别,但是它们是通过将整个sctor读取到RAM中,对其进行修改并将其写回来实现的。

因此,您需要一块随机存取存储器。不过,这可能是CPU缓存,它是由SRAM(一种快速的RAM)制成的。

不只是磁盘。闪存是按块设计构建的,这是其低价格的关键。它甚至具有比普通磁盘扇区大得多的块,但是它在内部使用RAM将其隐藏在操作系统中。

您可以使持久存储可以直接由CPU使用。EEPROM存储将属于此类(电子可擦可编程“只读”存储器-尽管“读取优化”实际上是更好的描述)。


5
我认为您的“否”应为“是,但是需要自定义构建的磁盘”。
Taemyr

3
您当然可以同时读取一个字节。您不能做的就是写一个字节,因为写操作需要一次整个块。但是,从原则上讲,您没有理由不能修改块,方法是将未修改的数据从原始块复制到新块,然后在必要时写入新数据,然后再将其复制回原始块。您会很快用完磁盘,但是从OP的问题来看,这是不可避免的。
Graham

3
为了有效利用物理磁盘空间,进行了“阻塞”操作:您需要在每条“真实”数据周围留出空间来识别块,在块之间提供“保护”空间,等等。没有技术上的原因,块不能成为一个块个字节长(但速度会进一步下降,容量也会下降)。
TripeHound

6
实际上,即使是当前的RAM也不是真正的字节寻址-DDR3可以突发工作,并且最小读/写大小为8个64位字(即64个字节)。我不是专家,但是我敢打赌,还需要统一的访问权限。所有这些都与块大小约为512字节的旧磁盘并没有什么不同,因此我想说这些区别主要是历史性的,这条线确实很模糊。
Matteo Italia

1
(同样,没有什么会阻止您使用整个块的-无论它是什么大小-仅保留一个字节-效率低下,但只要我不是一个付磁盘的人就可以了)
Matteo Italia

1

当您使用虚拟内存并需要处理页面错误时,至少要处理页面错误的异常处理程序是,磁盘驱动器从硬盘驱动器读取数据,然后首先将脏页面写入磁盘,并且页面表需要一直在内存中。因为如果它们不在RAM中,则无法将它们交换回RAM。另外,您至少需要一页RAM的空间。

如果您的CPU像大型的12核Xeon,具有30 MB的高速缓存,则可能有一个既没有RAM也没有硬盘的系统,而仅使用高速缓存。(不确定是否确实有效,或者是否由于某种原因需要RAM)。


IIRC,x86具有一种使用内部缓存作为主内存的模式。 electronics.stackexchange.com/questions/16485/…包含一些详细信息。我认为它有时被称为“无填充模式”,即CPU不会尝试从外部内存实际填充缓存行。这可能会排除将DMA用于硬盘驱动器I / O的可能性,因为“系统代理”无法DMA进入三级缓存。它可以在带有L4 eDRAM的Skylake上运行,因为它被设置为可以缓存所有内容(包括DMA )的内存侧缓存(与Broadwell不同)。Programmed-IO仍适用于磁盘。
彼得·科德斯

当然,那时您正在运行具有128MiB RAM的片上系统,这在15年前是不错的数目。仅使用L3 SRAM高速缓存,在台式机芯片中仍为4至8MiB,对于一个非常精简的Linux来说可能就足够了,但对于DOS来说就足够了。如果您的大多数代码在ROM中,而不是RAM中,那么就可以了。
彼得·科德斯

1

从概念上讲这是可能的。RAM只是一个缓存级别。现代计算机中有许多缓存级别(请参阅CPU的L1,L2,L3 ..缓存,当然是Ram,交换区域-这是用作RAM的磁盘的逻辑部分...-),如果您将或添加一台,机器即可运行。例如,Ubuntu Live CD可能不使用HDD的缓存级别。但是,我认为没有任何操作系统可以支持不存在RAM级别的情况。


1
它不是操作系统,而是设计的硬件,要求将指令放入ram(实际上是映射在地址空间上)。
安赫尔

@Angel在现代OS中是否真的需要将文本(指令),bss,堆栈和堆加载到内存中以便程序执行?他们不能在交换区(磁盘)上吗?在Linux中,说。
托什

1
我们在谈论计算机科学还是计算机工程?我不知道操作系统的实现,也不知道硬件级别,我仅基于Church-Turing论文。使用市场上现有的硬件或使用现有的操作系​​统,这可能是不可能的,但在理论上是可行的。
Picci

1
@Tosh这不是操作系统的问题,而是硬件。您的CPU执行一条指令,该指令位于指令指针指向的存储器地址处。因此,只有磁盘是行不通的(不更改硬件)。回答您的问题,并非所有部分都需要加载到内存中,实际上,操作系统仅在程序尝试访问它们时才加载它们。作为一个极端的反例,您可以通过使用从硬盘一次读取一个单词*的仿真器来“从磁盘”运行程序。但是您将需要在内存中,因此您仍然需要一些 RAM。
安赫尔

1
抱歉,@ Tosh:“您的仿真器必须在内存中”。
安赫尔

-1

从技术上讲,RAM是主要的易失性存储器,用于提高处理速度。一旦断电,主存储器中的数据就会丢失。如果我们使用磁盘,即仅磁盘而不是RAM,我们仍然可以运行计算机,但会有更多的读写开销,从而大大降低了系统速度。因此,我们使用RAM。


欢迎来到CS.SE!您能否证明更多读写开销会增加系统频繁崩溃的机率?这听起来不对我。
DW

这取决于您正在使用。像在UNIX / Linux中一样,有一个称为缓冲区缓存的概念。它可用于存储预取的块或标记为延迟写入的块。但是在Windows或Mac中没有这样的概念。因此,您必须从辅助存储访问所需的块。现在,在运行并行进程时,读写开销将增加,处理速度将相应降低。该进程将无法执行,从而降低计算机的速度,使其开始挂起并随后崩溃
Sanket Gupte

2
这听起来像是一个误解。降低计算机运行速度并不意味着计算机将崩溃。
DW
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.