另一种询问方式是:
“为什么硬盘、U盘和 SSD 需要分区方案而 RAM 不需要?“
只是想更好地理解所有记忆装置是如何工作的。
答案1
嗯,问题有点复杂。
首先,问题中表达的假设是错误的。硬盘和闪存实际上根本不需要分区!您只需将原始数据写入硬盘,然后将其读回,它就可以正常工作。一些相对简单的计算机系统甚至今天也没有使用分区,因为没有必要使用它们。例如,我现在桌上就有一台基于 ATmega 162 微控制器的计算机,它使用闪存很好,没有分区。
基本上,分区的作用是使系统设计人员能够分工负责。在我的 162 上,我需要知道每个数据的存储位置以及每个闪存单元被访问的次数,这样我就可以实现磨损均衡。为此,我甚至不需要文件。但问题是我的微型计算机只有 16 KiB 的闪存,这个数量可以通过手动和源代码注释来管理。这就像有一张只有一个抽屉的桌子。我可以把任何东西放在那里,而且很容易拿到和取用。
在大型计算机系统(例如当今的台式计算机)中,软件是数千名程序员独立工作的产物。他们需要某种方式来存储数据,这就是我们需要文件和分区的原因。有了它们,程序员就可以只关注他需要处理的数据,而不必担心损坏其他数据。他可以让从事文件系统编程的程序员担心数据的物理存储。继续我的抽屉示例,这就像拥有一个仓库系统,如果您有数十万件库存商品,则尝试找到一件商品。因此,虽然您可以伸手到简单的抽屉里拿一支铅笔,但在仓库案例中,铅笔应该在仓库 3、P 区、货架 273、3 层、盒子 5 中。
我希望我能更清楚地解释为什么我们使用分区,即使我们实际上并不需要它们。
现在谈谈 RAM。RAM 中没有分区的说法也是不正确的。我们使用分区的基本原因是组织,RAM 也是有组织的。然而,在 RAM 的情况下,系统内核决定每一位信息的去向,并跟踪空间使用情况。
让我们比较一下我的简单 ATmega 162 上的程序如何工作,以及 Windows 等现代操作系统上的程序如何工作。在 162 上,程序已预先编程了用于存储数据的内存位置地址。由于 162 只有一个程序,我不必担心覆盖其他程序使用的数据或内存分配。我可以将任何我想要的内容写入每个内存单元,并且在计算机运行时它将保留在那里。
另一方面,在 Windows 上,我们可以同时运行大量程序,并且所有程序都会将数据写入内存并从内存中读取数据。也就是说,我们不能允许单个程序直接访问内存单元(而且程序员必须知道如何访问特定计算机上的内存以及该计算机有多少 RAM 等等。此时,我们又回到了数千个程序员与一个程序员的讨论。)。相反,当每个程序启动时,内核会为其分配内存,并且对于该程序而言,它看起来好像是计算机上唯一运行的程序。内核的存在是为了确保我们的程序不会尝试读取或写入分配给其他程序的内存,不会尝试执行标记为数据的内存,也不会危及整个系统。因此,基本上在 Windows 和许多其他现代操作系统上,每个程序都有自己的 RAM 分区。值得注意的是,在 32 位系统上,每个程序最多只能占用 2 GiB 的 RAM,因为这是“分区”大小的上限。
我想在这里说点题外话。有些程序会受到 RAM 分区的影响。例如,有些称为训练器的程序允许在电脑游戏中作弊。它们的工作原理是找到游戏存储数据(例如生命值或健康值)的内存位置,然后直接访问并更改数据。另一方面,我们也有病毒,它们的工作原理是尝试访问重要系统服务使用的内存并破坏它,以便它们能够执行邪恶的行为。
另一件值得一提的事情是页面文件或交换分区。对于编写应用程序的程序员来说,程序是在页面文件中还是在 RAM 中并不重要,因为内核会处理这些。在我的 ATmega 162 上,情况稍微复杂一些。当我需要使用比可用 RAM 更多的 RAM 时,我必须首先手动检测是否已用完所有 RAM,之后我需要手动将数据从 RAM 复制到闪存,释放 RAM,将其用于我需要的任何用途,再次释放它,将数据从闪存移动到 RAM,然后释放闪存中占用的空间。在台式计算机上,程序甚至无法看到它是否已被交换到磁盘上然后移回 RAM。
另一个有趣的事情是性能。让我们回到抽屉和仓库的例子。让我们把仓库里的所有物品都放在一堆。所以如果我们需要从抽屉里拿出一支铅笔,我们只需打开抽屉,拿出这支铅笔。如果我们需要从成千上万支铅笔、笔记本、尺子、糖果棒、橡皮擦等一堆东西中拿出一支特定的铅笔,我们将不得不花费大量时间寻找它。这段时间(平均而言)比在一个组织良好的仓库中找到同一支铅笔所需的时间要长得多。另一方面,在一个有组织的仓库中找到铅笔所需的时间比在抽屉里找到铅笔所需的时间要长得多。所以有些方法对少量数据很有效,有些方法对大量数据很有效。文件系统通过以逻辑方式将数据存储在磁盘上来提高性能,每个单独的数据都很容易找到。一些文件系统还提供其他好处。以 JFFS2(一种专为闪存设计的文件系统)为例,该文件系统实现了磨损均衡,因此用户或硬件设计者不需要这样做。
另一件有趣的事情是,我们也可以将标准文件系统用于 RAM!有些程序会占用 RAM,并像文件系统一样组织它,并允许程序像使用磁盘空间一样使用它。
一些有趣的链接: Wikipeda 内存管理文章描述RAM中的数据如何以及为何被分区。 操作系统文章,内存部分解释了为什么我们需要内存分段、虚拟内存分页等。
答案2
简单地说,RAM 确实有一个布局方案,但它被硬件抽象掉了。
在内部,RAM 被排列成“存储单元”矩阵,按行和列排列,就像电子表格一样。每个存储单元用于存储一些数据,可以通过指示数据的行和列位置(或地址)来即时检索这些数据。
这与长期存储工作的基本概念没有太大区别,文件系统和分区映射只是一种抽象,以防止您直接访问原始磁盘。
答案3
硬盘驱动器的分区方案是为了让您能够安装多个不兼容的操作系统,这些操作系统可以共存于同一磁盘的不同部分。U 盘和 SSD 驱动器继承了硬盘驱动器(它们的堂兄弟)的分区方案。
对于个人计算机来说,通常 RAM 一次只由一个操作系统使用,因此没有分区方案。但即便如此,在一些大型计算机(大型机)中,也有 RAM 分区方案。
答案4
RAM 不需要分区,因为它以页面形式组织,并且这些页面是动态 (MMU) 结构的,无需预先分配区域。但是,当硬件组件(主要是一些显卡,但可以是任何东西)在操作系统启动之前保留一部分物理 RAM 时,RAM 会发生某种短暂分区。
实际上,硬盘、U 盘或 SSD 也不需要分区方案,或者至少它们不应该。仍有一些不可避免的组件,如 BIOS(或等效固件)和引导加载程序,它们需要分区表才能正常工作,但除此之外,分区只是由于操作系统(更准确地说是文件系统和卷管理器)的设计限制才需要的。
ZFS 池概念表明,即使您想要启动多个操作系统,并且这些操作系统需要多个卷和文件系统,也不需要分区。
仅当驱动器由一个或多个不支持 ZFS(或假设的等效操作系统)的操作系统使用时,才需要分区。