質問: virtual memory?
回答: 仮想メモリ/ページング機能により、カーネルはメモリをユーザースペースプロセスに「仮想化」できます。カーネルは物理メモリからページを取得し、ページングを介してそれらを配置して、ユーザー空間プロセスに隣接して見えるようにすることができます。ユーザースペースプロセスのメモリに制限を設定できます。プロセスがそれを超えると、「ページフォールト」が発生し、cpu例外が発生してカーネルに戻ります。これにより、カーネルの許可なしに、ユーザー空間プログラムがカーネルまたは他のプログラムに割り当てられたメモリを乱用するのを防ぎます。通常、ユーザー空間プログラムは、適切に定義されたインターフェース(たとえば、c関数malloc()およびfree()によって呼び出されます)を介して、この制限を拡張するようカーネルに要求します。カーネルは、プログラムに割り当てられているメモリの量とメモリを追跡する責任があります。この「ページフォールト」メカニズムは、カーネルがメモリをオーバープロビジョニングできる場合(およびwindowsとlinuxの両方がこれをサポートしている場合)、プロセスがアクセスしようとしていたページをディスクからスワップさせることもできます。そのため、これはスワップと呼ばれます。メモリアクセスが実際に無効だった場合(つまり、プロセスが最初に要求しなかったメモリにアクセスしようとしている場合)、通常、プロセスはsigsegvで強制終了されます。したがって、「スワッピング」は仮想メモリ/ページングに依存する追加機能です(linuxでは、必要に応じて実際に完全に無効にすることができます)が、cpuに仮想メモリ/ページングがあるという理由だけで必須ではありません。概念は同じではありませんが、スワッピングは存在するページング/仮想メモリに依存します。また、質問を詳しく読んだ後、「ページング」は「スワッピング」の同義語として使用されることもありますが、プロセス全体のメモリがスワップアウトされることを意味する「スワッピング」と、一部のみを意味する「ページング」については聞いたことがありません。スワップアウトされます。 しかし、なぜlinuxにはスワップパーティションが必要なのでしょうか。物理メモリがいっぱいになると、一部のプロセスがハードドライブにアウトソーシングされ、新しいプロセスが仮想メモリから物理メモリにマッピングされます。 「仮想メモリ」 です 物理メモリ、単に「再マップ」。 mmuハードウェアはどのストレージデバイスにも直接マップできません。mmuは、プロセスがメモリにアクセスしようとしたことをカーネルに通知する障害をスローする可能性があります。 -カーネルはこのメカニズムを使用して、プロセスがメモリ内にあると考えたディスクから何かを戻したいことを確認し、「スワップ」を実行できます。重要なのは、ページをディスクに保存して使用できるようにするのはオペレーティングシステムです。ハードウェアではなく、他のプロセスのページ。