cre*_*gox 3 memory partitioning
另一种提问方式是:
“为什么硬盘、笔式驱动器和 SSD 需要分区方案而 RAM 不需要? ”
只是想更好地了解所有内存事物是如何工作的。
And*_*aKo 22
嗯,问题有点复杂。
首先,问题中表达的假设是错误的。硬盘和闪存实际上根本不需要分区!您可以简单地将原始数据写入硬盘,然后将其读回,它会正常工作。一些相对简单的计算机系统即使在今天也不使用分区,因为没有必要使用它们。例如,我现在在我的办公桌上有一台基于 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。
更有趣的一件事是性能。让我们回到抽屉和仓库的例子。让我们从仓库中取出所有物品并把它们堆成一堆。因此,如果我们需要从抽屉中取出一支铅笔,我们只需打开抽屉并取出铅笔即可。如果我们需要从成千上万的其他铅笔、笔记本、尺子、糖果棒、橡皮擦等等中取出一支特定的铅笔,我们将不得不花费大量时间寻找它。与在组织良好的仓库中找到相同铅笔所需的时间相比,该时间(在平均情况下)要长得多。另一方面,在有组织的仓库中找到铅笔所需的时间比在抽屉中找到铅笔所需的时间要长得多。所以有些方法在少量数据上效果很好,有些方法在大量数据上效果很好。文件系统通过在磁盘上以逻辑方式存储数据来提高性能,在磁盘中可以轻松找到每个单独的数据。一些文件系统还提供其他好处。在 JFFS2(一种为闪存设计的文件系统)的情况下,文件系统实现了磨损均衡,这样用户或设计的硬件就不必这样做了。
另一个有趣的事情是,我们也可以为 RAM 使用标准文件系统!有些程序会占用 RAM 并像文件系统一样组织它,并允许程序像磁盘空间一样使用它。
一些有趣的链接: Wikipeda 内存管理文章描述了 RAM 中的数据如何以及为何被分区。 操作系统文章,内存部分解释了为什么我们需要内存分段、虚拟内存分页等内容。
| 归档时间: |
|
| 查看次数: |
5085 次 |
| 最近记录: |