OS カーネルは仮想メモリを使用していますか、それとも OS カーネルの一部をハードディスクに常駐させることができますか?
3 に答える
「仮想メモリを使用する」というのは、あいまいな表現です。大まかに解釈すると、答えはイエスです。仮想メモリは、あるプロセスを別のプロセスから保護し、コンピュータのメモリ全体を自分自身が所有しているようにプロセスに錯覚を与えるための、オペレーティング システムの基本的な部分です。仮想メモリに関するウィキペディアの記事は、これがどのように機能するかについての良いリファレンスです。(公平を期すために言うと、Linux は仮想メモリなしで構成できます。また、仮想メモリを使用しない他のカスタム システムやリアルタイム システムもあります。)
さて、オペレーティング システムがカーネル データ構造を保持するメモリをページ アウトするかどうかというより詳細な質問をしている場合、Linux カーネルはページ アウトしないとしか答えられません。最近のメモリは十分に大きく、カーネル データ構造をページアウトすることによって得られる余分なメモリは、追加された複雑さやページ フォールトのコストを正当化するものではありません。
NT カーネルとデバイス ドライバは、ストレージに安全にページ アウトできるデータ構造とオブジェクトに仮想メモリを使用します。たとえば、ドライバーは、ユーザーモード プログラムが行うように、仮想メモリを要求できます。
ただし、カーネルには次のようなデータとコードがあります。1) 効率上の理由から常にメモリに保持する必要がある、2)ページ フォールトを処理できないため、メモリに保持する必要がある。典型的な例は、ISR (割り込みサービス ルーチン) (ページ フォールト処理コード自体など) の入力です。このタイプのコードとデータは常に物理メモリに保持され、NT カーネルでは非ページ プールと呼ばれます。
後者は、非ページ メモリ アドレスが直接参照されることを意味するものではありません。これらは、カーネル メモリ マネージャーによって常に物理アドレスに変換されます (その逆も同様です)。
仮想マッピングなしで使用される唯一の物理アドレスは、システムが起動したときの最初の1MBだと思います(WinNTでは、保護モードがアクティブになるまでのNTLDR / NTDETECT.COMフェーズ)。
どのOSカーネル?
一部のOSカーネルは仮想メモリを使用しますが、使用しないものもあります。最近の多くのオペレーティングシステムには、仮想メモリすらありません。(VMはC、C ++または同様のポインター非安全言語にのみ必要ですが、現在使用されている言語とプラットフォームの大部分はポインター安全です(JavaScript、Python、Ruby、PHP、Perl、Java、CLIマイナスunsafe
など)。本当にもうVMは必要ありません。)