
在他的自傳中,只是為了好玩,Linus 提到了「頁到磁碟」功能,該功能對於使 Linux 成為 Minix 和當時其他 UNIX 克隆的有力競爭對手至關重要:
我記得去年12月,德國有個傢伙只有2MB的RAM,他在嘗試編譯核心時卻無法執行GCC,因為當時的GCC需要超過1MB。他問我是否可以使用較小的編譯器來編譯 Linux,這樣就不需要那麼多記憶體了。所以我決定,即使我不需要這個特定的功能,我也會為他做到這一點。這稱為頁到磁碟,這意味著即使某人只有 2 mg 的 RAM,他也可以使其看起來更多地使用磁碟作為記憶體。那是 1991 年聖誕節前後。
頁到磁碟是一件相當大的事情,因為這是 Minix 從未做過的事情。它被包含在0.12 版本中,該版本於1992 年1 月的第一周發布。複製.從一開始,新增頁面到磁碟的行為就使 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 功能變得司空見慣,它就取代了普通交換,但與兩者相關的速度減慢和抖動導致了類似的情況。