在他的自传中,只是为了好玩,Linus 提到了“页到磁盘”功能,该功能对于使 Linux 成为 Minix 和当时其他 UNIX 克隆的有力竞争对手至关重要:
我记得去年12月,德国有个家伙只有2MB的RAM,他在尝试编译内核时却无法运行GCC,因为当时的GCC需要超过1MB。他问我是否可以使用较小的编译器来编译 Linux,这样就不需要那么多内存了。所以我决定,即使我不需要这个特定的功能,我也会为他做到这一点。这称为页到磁盘,这意味着即使某人只有 2 mg 的 RAM,他也可以使其看起来更多地使用磁盘作为内存。那是 1991 年圣诞节前后。
页到磁盘是一件相当大的事情,因为这是 Minix 从未做过的事情。它包含在 0.12 版本中,该版本于 1992 年 1 月的第一周发布。立即,人们不仅开始将 Linux 与 Minix 进行比较,而且还与 Coherent 进行比较,Coherent 是 Mark Williams 公司开发的一个小型 Unix 克隆。从一开始,添加页到磁盘的行为就使 Linux 在竞争中脱颖而出。
那是Linux起飞的时候。突然有人从 Minix 转向 Linux。
他本质上是在谈论swapping
这里吗?对 Linux 有一定历史了解的人可能会知道。
答案1
是的,这就是有效的交换。引用0.12 的发行说明:
虚拟内存。
除了“mkfs”程序之外,根磁盘上现在还有一个“mkswap”程序。语法是相同的:“mkswap -c /dev/hdX nnn”,同样:这会覆盖分区,所以要小心。然后可以通过将引导映像中偏移量 506 处的字更改为所需的设备来启用交换。使用与设置根文件系统相同的程序(当然将 508 偏移量更改为 506)。
笔记!这已经由拥有 2M 机器的 Robert Blum 测试过,它可以让你在没有太多内存的情况下运行 gcc。然而,我不得不停止使用它,因为我的磁盘空间被 beta-gcc-2.0 吃掉了,所以我想知道它仍然有效:我完全无法为即使是基本的程序创建交换分区大约从圣诞节开始进行测试。因此,新的更改可能会对虚拟机产生适得其反的效果,但我对此表示怀疑。
在 0.12 中,分页用于许多功能,而不仅仅是交换到设备:按需加载(仅在使用时从二进制文件加载页面)、共享(在进程之间共享公共页面)。
答案2
是的,这正是所谓的概念分页或交换。 (很久以前,这些术语的含义略有不同,但在 21 世纪,它们是同义词,除了在某些非 Unix 操作系统的上下文中。)
需要明确的是,交换并不是一项创新功能:大多数“严肃”的 Unix 系统都有它,而且该功能比 Unix 更古老。交换对 Linux 的作用是将其转变为“严肃的”Unix,而 MINIX 则用于教育目的。
今天交换仍然是同样的概念。决定保存哪些页面以及何时保存它们的启发式方法变得更加复杂,但基本原则仍然存在。
答案3
交换是一个早于虚拟内存甚至内存保护的概念:它只是意味着将一个进程放在磁盘上为另一个进程腾出空间。最初的 Unix 在这方面有两个怪癖:“共享文本”程序只将程序代码保留在内存中一次,并且只交换数据部分。它具有“fork”系统调用,将进程交换到磁盘,同时不替换内存映像,而是保持副本(子进程)运行。
与交换相反,页到磁盘允许运行不适合物理内存的进程。它需要所有可保护的内存、虚拟地址到物理地址的内存映射,以及可重新启动的页面错误机制,该机制将允许将映射从未映射的虚拟地址更改为合理可选择的物理地址,并恢复必须中止的命令,因为缺失的映射。
UNIX 能够在没有 MMU 的情况下在 68000 个处理器上运行(包括交换),并且它充分利用了 MMU(如果可用于内存保护),但直到 68010 才真正具有允许在页面错误后恢复程序的机制。
80386 在很多方面都是一种糟糕且过时的设计。但它的内置 MMU 和正确页面错误的能力使其立即变得更适合类 UNIX 系统,这些系统不仅能够交换,而且能够进行页面到磁盘的操作。
这是一种历史性的讽刺,这种对现代系统诸神的硅片(成熟的 MMU 和具有虚拟功能的 CPU 设计占用了相当多的芯片空间)的巨大牺牲主要是由业余爱好者承担的,而“像 Xenix 和 OS/2 这样的大鱼最终都被淘汰了。
虽然您可以将“没有任何页面调入且未计划运行”与“交换”相同,但它并不是像“交换”的原始含义那样真正是一个全有或全无的命题。
从那时起的几十年里,这种差异就消失了,因为请求分页比普通交换更有用,而且扩展性更好,一旦必要的 CPU 和 MMU 功能变得司空见惯,它就取代了普通交换,但与两者相关的速度减慢和抖动导致了类似的情况。外观和感觉。