
彼の自伝では、ただ楽しむためLinus は、Linux を当時の Minix やその他の UNIX クローンに対する強力な競争相手にする上で極めて重要だった「ページ ツー ディスク」機能について次のように述べています。
12 月に、2 メガバイトの RAM しか持っていないドイツ人がいて、カーネルをコンパイルしようとしていたのですが、当時の GCC は 1 メガバイト以上必要だったため、GCC を実行できませんでした。彼は、Linux をそれほど多くのメモリを必要としないより小さなコンパイラでコンパイルできないかと私に尋ねました。そこで、私は、その特定の機能が必要なかったにもかかわらず、彼のためにそれを実現することにしました。これは、ページ ツー ディスクと呼ばれるもので、RAM が 2 メガバイトしかない場合でも、ディスクをメモリとしてより多く使用しているように見せることができるというものです。これは 1991 年のクリスマス頃のことでした。
ページ トゥ ディスクは、Minix がこれまで実行したことがなかったため、かなり大きな出来事でした。これは、1992 年 1 月の第 1 週にリリースされたバージョン 0.12 に含まれていました。すぐに、Linux は Minix だけでなく、Mark Williams Company が開発した小さな Unix クローンである Coherent とも比較されるようになりました。最初から、ページ トゥ ディスクを追加したことで、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 によってディスク領域が消費されたため、使用を中止しなければなりませんでした。そのため、まだ動作しているかどうか知りたいです。クリスマスの頃から、基本的なテストのためのスワップ パーティションさえ作成できなくなっていました。したがって、新しい変更が VM で裏目に出た可能性もありますが、それは考えにくいです。
0.12 では、ページングはデバイスへのスワップだけでなく、デマンドロード (バイナリからページが使用されるときにのみロード)、共有 (プロセス間で共通ページを共有) など、さまざまな機能に使用されます。
答え2
はい、まさにそれがページングまたはスワッピング(昔はこれらの用語の意味は若干異なっていましたが、21 世紀では、一部の非 Unix オペレーティング システムのコンテキストを除いて同義語になっています。)
誤解のないように言っておくと、スワッピングは革新的な機能ではありませんでした。ほとんどの「本格的な」Unix システムにこの機能は備わっており、この機能は Unix よりも古いものです。スワッピングによって Linux が「本格的な」Unix に変わったのに対し、MINIX は教育目的のものでした。
今日のスワッピングの概念は依然として同じです。どのページを保存するか、いつ保存するかを決定するヒューリスティックははるかに複雑になりましたが、基本的な原則は変わりません。
答え3
スワッピングは、仮想メモリやメモリ保護よりも前からある概念です。つまり、プロセスをディスク上に置き、別のプロセスのためのスペースを確保するということです。オリジナルの Unix には、この点で 2 つの癖がありました。プログラム コードをメモリ内に 1 回だけ保持し、データ セクションのみをスワップ アウトする「共有テキスト」プログラムです。また、メモリ イメージを置き換えずにコピー (子) を実行したまま、プロセスをディスクにスワップ アウトする「fork」システム コールもありました。
ページツーディスクは、スワッピングとは異なり、物理メモリに収まらないプロセスの実行を可能にします。保護可能なメモリ、仮想アドレスから物理アドレスへのメモリ マッピング、およびマッピングされていない仮想アドレスから適切に選択可能な物理アドレスへのマッピングを変更し、マッピングが欠落しているために中止する必要があったコマンドを再開できる再開可能なページ フォールト メカニズムがすべて必要です。
UNIX は、MMU なしで 68000 プロセッサ上で実行することができ (スワッピングを含む)、メモリ保護に使用可能な場合は MMU を有効に活用していましたが、ページ フォールト後にプログラムを再開できるメカニズムが実際に備わったのは 68010 になってからでした。
80386 は多くの点で粗悪で時代遅れの設計でした。しかし、その内蔵 MMU と適切なページ フォールト機能により、スワップだけでなくディスクへのページングも可能な UNIX 系システムですぐにより実行可能になりました。
現代のシステムの神々に対するシリコンのこの大きな犠牲 (本格的な MMU と仮想対応の CPU 設計にはかなりのダイ スペースが必要) が主に愛好家によって引き継がれ、Xenix や OS/2 のような「大物」が最終的に脇に追いやられたのは、ある意味歴史的な皮肉です。
「何もページインされておらず、実行がスケジュールされていない」ことを「スワップ」と同じと呼ぶこともできますが、これは実際には「スワップ」の本来の意味のようにすべてか無かという命題ではありません。
それから数十年の間に、その違いは失われました。なぜなら、デマンド ページングは通常のスワッピングよりもはるかに便利で、スケーラビリティに優れていたため、必要な CPU と MMU の機能が一般的になるにつれて、デマンド ページングが通常のスワッピングに取って代わったからです。しかし、どちらにも関連する速度低下とスラッシングにより、ルック アンド フィールは似通ったものになりました。