1. 概要

このチュートリアルでは、オペレーティングシステム(OS)の仮想メモリの概念について学習します。 仮想メモリを作成する主な動機となる問題について検討します。 最後に、OSでこの機能を使用する目的について説明します。

2. 動機

コンピューターは、それぞれが異なる量のデータを操作する多くのプログラムを実行できるように設計されています。 オペレーティングシステムは、より優れたコンピュータリソースを活用し、高速で効率的な処理を保証することが期待されています。

3つの主な問題により、処理が時間と消費メモリの点で遅くなります。 データはバイト単位でディスクに保存されるため、CPUはプログラムの実行時に必要なデータをRAMにロードする必要があります。

OSは、実行中に、プログラムがRAMから特定の範囲のアドレスを使用できるようにします。 このスペースがビットであると仮定します。これは、ここで予想されるRAMサイズ(エクサバイト)が必要であることを意味します。

ここで、OSがすでにその一部を予約していると仮定します()が、コンピューターのメモリは必要なRAMよりも少なくなっています。 範囲外のアドレスを使用しようとすると、コンピューターがクラッシュします。

さらに、OSがこのような大きなRAMの容量を持つことは現実的ではありません。

複数のプログラムを同時に実行する場合、OSはそれらのそれぞれにRAMの連続パーティションを割り当て、それらを同時に処理できるようにします。 ここで、2つのプログラムが実行を終了したと仮定します。 2つのプログラムによって解放されたスペースが連続でなく、他のプログラムを実行するのに十分でない場合、RAMにはさまざまな場所に穴があります。 これにより、 メモリの断片化が発生します:

多くのプログラムが同時に実行されるため、複数のプログラムが同じケースのメモリにアクセスできます。 値を変更するために、これらのプログラムは互いに衝突したり、メモリを破損したり、システムをクラッシュさせたりする可能性があります。次の図は、複数のプログラムからアクセスしたときにデータが簡単に破損する可能性があることを示しています。

3. 仮想メモリの概要

仮想メモリは、OSがメインメモリの一部と見なすようにセカンダリメモリを使用してメモリの物理的不足を解決することを目的とした手法です。仮想メモリは一時メモリです。 仮想メモリストレージのサイズは、OSが使用するアドレス指定スキームと使用可能なセカンダリメモリによって異なります。

仮想メモリは、プログラムアドレスをRAMアドレスにマップします。 使用可能なスペースがなくなると、これらのアドレスがディスクにマップされます。

仮想メモリの主な利点は、OSが物理メモリよりも大きなプログラムをロードできることです。コンピュータには無制限のメモリがあるという印象をユーザーに与えます。 また、メモリ保護も提供します。

マッピング操作を実現するために、仮想メモリはページテーブルと変換を使用する必要があります。 ページテーブルは、ページテーブルエントリ(PTE)と呼ばれるページテーブルを格納するデータ構造です。 ページテーブルの目標は、仮想アドレスを物理アドレスにマップすることです。 これは連続したブロックであり、仮想メモリの最小単位です。

メモリページの作成は、それらを同じサイズのフレームに分割することで構成されます。 各フレームは、各物理アドレスのフレーム番号、フレームオフセット、または絶対アドレスを参照します。

変換は、ページテーブルを使用して仮想アドレスを物理アドレスに変換するプロセスです。

データの読み取りプロセスを高速化するために、仮想メモリはキャッシュメモリを使用できます。物理キャッシュは高速プロセスを保証しないため、仮想キャッシュを使用します。 CPUはキャッシュに直接接続されており、変換を回避しながらキャッシュ内の仮想アドレスを検索します。 アドレスが見つからない場合にのみ、変換が行われます。 最終的に、各プログラムには独自の仮想キャッシュがあります。

4. なぜ仮想メモリが必要なのですか?

仮想メモリは、現代のOSで重要な役割を果たします。 このセクションでは、OSが仮想メモリを使用する必要があるいくつかの重要な理由について説明します。

4.1. メモリスペースの問題

仮想メモリにより、コードの共有が容易になります。 したがって、同じコードの複数のコピーを保持する必要はありません。仮想メモリを使用すると、異なる仮想アドレスを物理メモリ内の同じ場所にマップできます。 したがって、同じコードの複数のコピーをメインメモリに保存する必要はありません。

RAMは非常に高価です。 結果として、非常に大きなRAMを使用することは、ストレージ割り当ての必要性を軽減するための実行可能なソリューションではありません。 各プログラムに仮想メモリを割り当て、アドレスをディスクにマッピングすると、スペースの問題が解消されます。

バイナリファイルの場合、OSにロードすると、各関数がメインメモリに固定アドレスを予約します。 仮想メモリが存在しない場合、メインメモリに複数のプログラムをロードすることはできません。これは、仮想メモリがないと、一度に1つのプログラムしか実行できないことを意味します。 これは、各プログラムがRAM内の同じアドレスを指す可能性のある異なる関数を使用する必要がある場合があるためです。

4.2. データセキュリティ

もう1つの重要な問題は、データのセキュリティです。一般に、プログラムは別のプログラムの物理アドレスを推測し、機密データや秘密のデータにアクセスできます。

OSが仮想メモリ技術を使用している場合、一部のプログラムが同じアドレスにアクセスする必要がある場合でも、それらはすべて異なるマッピングを持っています。 これにより、RAMまたはディスク内の異なるアドレスに確実にアクセスできます。 これは、仮想メモリがデータセキュリティを可能にする方法です。

データの位置に依存しません。メインメモリの任意の位置にデータを保存できます。

4.3. メモリの断片化とエラー

仮想メモリは、独自のマッピングで各プログラムを容易にします。データスペースは連続している必要はなく、各プログラムは必要な場所にデータを格納できます。

また、デバッグを容易にし、未割り当てのメモリやnullポインタなどのさまざまな機能をチェックするためのオプションを提供します。

2つ以上のアプリケーションがOSで同時に実行されていると仮定しましょう。 これらのアプリケーションはすべて、RAMの直接アドレスを使用します。 アプリケーションの1つで、実行中にメモリエラーなどのエラーが発生した場合、他のアプリケーションが破壊されて停止する可能性があります。

ビデオRAMなどの一部の物理デバイスは、コンピューターで使用されているハードウェアに応じて、事前にいくつかのメモリアドレスを予約する場合があります。 OSが予約アドレスを知らずにプログラムのロードを開始すると、OSは予約アドレスの読み取りと書き込みを行う場合があります。 これにより、接続されているデバイスが物理的に破損する可能性があります。 仮想メモリは、OSがこれらの問題を回避するのに役立ちます。

5. 結論

この記事では、仮想メモリについて詳しく説明しました。 OSで仮想メモリを使用する動機のいくつかを説明することから議論を始めました。 次に、仮想メモリの概念の概要を説明しました。 最後に、OSに仮想メモリが必要な理由を説明しました。