10 年間にわたる JAVA の移動ブリック - オペレーティング システムのメモリ管理

コンピュータのメモリ管理の概念

コンピュータのメモリ管理とは、コンピュータ システムのメモリ リソースを割り当て、使用、解放するためのオペレーティング システムの管理プロセスを指します。メモリは、コンピュータ システムにプログラムやデータを保存するための重要なリソースです。メモリ管理の目標は、メモリの使用率を最大化し、システムのパフォーマンスと効率を向上させることです。
メモリ管理には次のものが含まれます。
1. メモリ割り当て: メモリ管理は、使用可能なメモリ領域をプロセスまたはアプリケーションに割り当てる責任を負います。どのメモリ ブロックが空いているか、どのブロックが割り当てられているかを追跡し、必要に応じて割り当てます。一般的なメモリ割り当てアルゴリズムには、ファーストフィット、ベストフィット、ワーストフィットがあります。
2. メモリ マッピング: メモリ管理は、プロセスの仮想アドレス空間を物理メモリ内の実際のアドレスにマップします。このようにして、各プロセスは、他のプロセスのメモリに干渉することなく、独自のメモリ空間に独立してアクセスできます。
3. メモリ保護: メモリ管理は、アクセス権、アドレス空間の分離、その他のメカニズムを設定することにより、他のプロセスによる不正アクセスや改ざんからプロセスのメモリを保護します。これにより、システムのセキュリティと安定性が確保されます。
4. メモリ回復: プロセスが終了するか、割り当てられたメモリが不要になった場合、メモリ管理はメモリ空間を再利用し、その後のメモリ割り当てのために空きとしてマークする責任があります。

物理アドレス論理アドレスの概念

物理アドレスは、コンピュータ システムの実際のメモリ アドレスを指し、コンピュータ ハードウェアの記憶装置に対応します。物理アドレスはハードウェアによって直接管理および使用され、オペレーティング システムは物理アドレスに直接アクセスしたり制御したりすることはできません。物理アドレスはハードウェアのメモリ管理ユニット (MMU)またはメモリ コントローラによって処理および管理されるためです。
MMU は、コンピュータの中央処理装置 (CPU) と物理メモリの間に位置するハードウェア コンポーネントです。これは、論理アドレス (オペレーティング システムとアプリケーションによって使用される) を対応する物理アドレスに変換し、メモリ アクセスを制御する役割を果たします。
CPUがメモリアクセス要求を発行すると、MMUは論理アドレスとページテーブル(またはセグメントテーブル)のマッピング関係に従って論理アドレスを物理アドレスに変換する。次に、MMU は実際のメモリ アクセスのために物理アドレスをメモリ コントローラに渡します。
メモリ コントローラは、物理メモリ モジュールとの通信を担当するハードウェア コンポーネントです。物理アドレスに基づいて読み取りまたは書き込みを行うメモリの場所を選択し、データの読み取りと書き込み、データのキャッシュなどのメモリ転送に関連する詳細を処理します。
したがって、物理アドレスはハードウェア内のMMUやメモリコントローラによって直接制御・アクセスされ、オペレーティングシステムがハードウェアと連携して物理アドレス空間を管理・利用します。

論理アドレス空間とは、プロセスまたはプログラムによって使用される仮想メモリのアドレス空間を指します。論理アドレスはプロセスに対して相対的なものであり、実行時にプログラムによって使用されるアドレスです。論理アドレス空間はオペレーティング システムによって各プロセスに割り当てられ、実行時に物理アドレス空間上の実際の物理メモリにマップされます。

オペレーティング システムは、メモリ管理ユニット (MMU) を使用して、論理アドレスを物理アドレスにマップします。MMU は、プロセスの論理アドレスを対応する物理アドレスに変換する役割を果たします。このマッピングは、ページテーブルやセグメントテーブルなどのデータ構造によって実現でき、これらのデータ構造には論理アドレスと物理アドレスの対応が記録されています。

論理アドレス空間は、仮想メモリ テクノロジによって実現される実際の物理メモリ空間よりもはるかに大きくなることがあります。仮想メモリ テクノロジを使用すると、オペレーティング システムがプロセスのデータとコードの一部をディスクに保存し、必要な場合にのみ物理メモリにロードできるようになります。これにより、より大きなアドレス空間が提供され、システムがより多くのプロセスを同時に実行できるようになり、メモリ リソースをより適切に管理できるようになります。
メモリの再配置、メモリ保護の概念

再配置とは、プログラムの実行時またはロード時に、プログラムで使用されるアドレスを相対アドレス (オフセットなど) から実際の物理アドレスに変換するプロセスを指します。コンピュータ システムでは、プログラムはメモリ内のデータや命令を参照するために相対アドレスを使用することがよくあります。再配置メカニズムは、相対アドレスとベース アドレスの合計を計算して実際の物理アドレスに変換し、プログラムがメモリ内のデータや命令に正しくアクセスできるようにします。

メモリ保護(メモリ保護) は、プロセスのメモリを不正なアクセスや改ざんから保護するためのハードウェアとオペレーティング システムのメカニズムを指します。メモリ保護は次の側面に分類できます。

  1. アクセス許可: オペレーティング システムは、プロセスまたはメモリ領域ごとに、読み取り専用、読み取り/書き込み、実行許可などのアクセス許可を設定できます。これにより、プロセスのメモリへのアクセスが制限され、不正な操作が防止されます。

  2. アドレス空間の分離: 各プロセスは独自の独立した仮想アドレス空間を持っているため、各プロセスは自分のメモリにのみアクセスでき、他のプロセスのメモリにはアクセスできません。この分離により、プロセス間のデータとコードのセキュリティが保護されます。

  3. 例外処理: オペレーティング システムは、不正なメモリへのアクセスや範囲外のアクセスなどの例外を検出して処理できます。メモリ アクセス エラーが発生すると、オペレーティング システムはプロセスを終了するか、システムの安定性とセキュリティを保護するために適切な措置を講じます。

オペレーティング システムは、再配置およびメモリ保護メカニズムを通じて、プログラムがメモリに正しくアクセスできることを保証し、不正なアクセスや損傷からメモリを保護します。これは、システムが適切に機能し、アプリケーションを実行するために非常に重要です。

**

メモリ管理のためのパーティション管理

**
メモリ管理のパーティション管理とは、コンピュータのメモリを異なる領域に分割し、各領域を異なるプログラムやデータの保存に使用することを指します。この分割により、メモリの使用率と管理効率が向上します。
メモリ管理のための主流のパーティション管理方法には次のものがあります。

  1. 固定パーティション化: このアプローチでは、メモリが固定サイズのパーティションまたは領域に分割されます。各パーティションは特定のプロセスまたはプログラムに割り当てられます。これはシンプルで効率的なアプローチですが、パーティション サイズが必要なメモリより大きい場合、内部断片化が発生する可能性があります。

  2. 可変パーティション: 固定パーティションとは異なり、可変パーティションでは、プログラムまたはプロセスのサイズに基づいてメモリを動的に割り当てることができます。メモリは可変サイズのパーティションに分割され、必要に応じて各パーティションがプロセスに割り当てられます。このアプローチにより内部の断片化は軽減されますが、外部の断片化につながる可能性があります。

  3. 動的パーティショニング: 動的パーティショニングは、可変パーティショニングの拡張です。これにより、実行時にメモリを可変サイズのパーティションに分割できます。プロセスがメモリを要求すると、オペレーティング システムは適切な空きパーティションを検索し、それをプロセスに割り当てます。このアプローチはメモリ使用率の最適化に役立ちますが、より複雑なメモリ管理アルゴリズムが必要になります。

  4. バディ システム: バディ システムは、バイナリ ツリー データ構造を使用してメモリを固定サイズのブロックに分割するメモリ割り当て手法です。各ブロックのサイズは 2 の累乗です。プロセスがメモリを要求すると、システムは要求されたサイズを保持できる最小の利用可能なブロックを見つけます。チャンクが必要なサイズより大きい場合、チャンクは 2 つの同じサイズのバディ チャンクに分割されます。このアプローチにより外部の断片化は軽減されますが、内部の断片化が発生する可能性があります。

スワップ テクノロジは、メモリが不足している場合に、プログラムまたはデータの一部をメモリからディスクまたはその他の外部記憶媒体に交換する方法です。スワッピング テクノロジを使用すると、スワップ アウトされたプログラムまたはデータの状態が保存され、必要なときにメモリに再ロードできるようにしながら、メモリ空間を他のプログラムで使用できるように解放できます。

オーバーレイ テクノロジは、メモリが限られている場合にプログラムまたはデータをいくつかのモジュールまたはセグメントに分割し、必要に応じて異なるモジュールまたはセグメントをメモリにロードする方法です。オーバーレイ技術により、限られたメモリ空間を有効に活用し、メモリの使用率を向上させることができます。小さなブロックはすべて上書きされます。オーバーレイ テクノロジの適用は比較的少なく、ページングやセグメンテーションなどのより高度なメモリ管理テクノロジがより多く使用されます。

セグメント管理方法:

セグメント化メモリ管理は、プログラムの論理構造を複数の論理セグメントに分割し、各セグメントに独立したメモリ空間を割り当てるメモリ管理手法です。各セグメントは、コード セグメント、データ セグメント、ヒープ セグメント、スタック セグメントなど、プログラム内の論理単位を表します。

セグメント管理では、各セグメントは独自の開始アドレスと長さを持ちます。これらのセグメントは、プログラムのニーズに応じて動的に割り当てたり解放したりできます。各セグメントのサイズはプログラムの要件に応じて変更できるため、さまざまな種類のプログラムに適切に適応できます。

従来の固定パーティション管理や可変パーティション管理と比較して、セグメント管理はより柔軟なメモリ割り当て方法を提供します。これにより、プログラム全体がメモリ内に存在する必要がなく、プログラムが必要に応じてメモリ セグメントを割り当てたり解放したりできるようになります。これによりメモリ使用率が向上し、より大きなプログラムがサポートされます。

ただし、セグメント管理にはいくつかの課題もあります。その 1 つは外部フラグメンテーションです。複数のセグメントが割り当てられ、割り当てが解除されると、空きメモリの不連続なチャンクが残される可能性があります。これによりメモリの断片化が発生し、メモリの使用効率が低下する可能性があります。

外部断片化の問題を解決するには、通常、ページングやセグメント ページ管理などのより高度なメモリ管理技術が使用されます。これらの技術は、セグメンテーションとページングの利点を組み合わせて、メモリ管理と使用効率を向上させます。

ページング管理方法:

メモリのページングは​​、物理メモリと論理メモリを固定サイズのページに分割するメモリ管理手法です。各ページは同じサイズで、連続した番号が付けられます。

ページング管理では、プログラムの論理アドレス空間は論理ページに分割され、物理メモリは物理ページに分割されます。論理ページと物理ページ間のマッピングは、ページ テーブルを通じて行われます。ページ テーブルは、論理ページと物理ページの対応を記録するために使用されるデータ構造です。

プログラムが論理アドレスにアクセスすると、オペレーティング システムは論理ページのページ テーブル エントリを対応する物理ページの物理アドレスに変換します。この変換プロセスは、アドレス変換またはページ テーブル ルックアップと呼ばれます。ページング管理により、プログラムは物理メモリの実際のレイアウトを気にせずに、連続した論理アドレス空間を使用できます。

ページング管理は、メモリ使用率と柔軟性の向上に役立ちます。これにより、複数のプログラムが物理メモリを共有できるようになり、ページを動的に割り当てたり割り当て解除したりできます。さらに、ページング管理は仮想メモリ抽象化レイヤーも提供し、プログラムが物理メモリよりも大きな論理アドレス空間にアクセスできるようにします。

ただし、ページング管理では、ページ テーブルのメンテナンスやアドレス変換時間のオーバーヘッドなどのオーバーヘッドも発生します。ページング管理のパフォーマンスを最適化するために、高度なページ テーブル構造、キャッシュ メカニズム、ページ置換アルゴリズムなどのテクノロジを使用できます。これらの手法により、ページ テーブルの検索時間を短縮し、メモリ アクセスの効率を向上させることができます。

**

セグメントページの管理方法:

**
セグメント ページング管理は、メモリ管理のセグメント化テクノロジとページング テクノロジを組み合わせたメモリ管理方法です。プログラムの論理アドレス空間をセグメントに分割し、各セグメントは固定サイズのページに分割されます。セグメントページ管理により、セグメント管理とページング管理の利点を同時に享受できます。

セグメントページ管理では、プログラムの論理アドレスはセグメント番号とページ番号の 2 つの部分で構成されます。対応するセグメント テーブル エントリはセグメント番号によって見つけることができ、次に対応するページ テーブル エントリはページ番号によって見つけることができます。最後に、セグメント テーブル エントリとページ テーブル エントリの組み合わせにより、論理アドレスを物理アドレスに変換できます。

セグメント ページング管理の主な利点は、より柔軟なメモリ割り当てと高いメモリ使用率を実現できることです。異なるサイズのプログラムやデータ構造に適応するために、プログラムのニーズに応じてセグメントとページを動的に割り当てたり解放したりできます。さらに、セグメント ページ管理により、メモリ保護とセキュリティが向上し、異なる許可ビットを設定することで、異なるセグメントやページへのアクセス権を制御できます。

セグメント ページングには多くの利点がありますが、メモリ管理の複雑さとオーバーヘッドも増加します。セグメントテーブルとページテーブルを保守し、セグメントページのアドレス変換を実行する必要があります。したがって、実際のアプリケーションでは、セグメント ページ管理は、一般的に使用されているメモリ管理方法ではなく、より高度なメモリ管理機能を必要とする大規模なオペレーティング システムやシナリオで主に使用されます。

個人のラップトップは通常、ページ メモリ管理を使用します。ページ メモリ管理では、プログラムの論理構造に従ってメモリをセグメントではなく固定サイズのページに分割します。各ページのサイズは通常 4KB 以上です。プログラムがメモリにアクセスする必要がある場合、オペレーティング システムは論理アドレスを物理アドレスに変換し、必要なページを物理メモリにロードします。

ページ メモリ管理の利点は、シンプルで効率的であることです。これにより、オペレーティング システムがページ単位でメモリの割り当てと再利用を行うことができるようになり、メモリの使用率と柔軟性が向上します。さらに、ページ メモリ管理は仮想メモリのサポートも提供し、各プロセスが独立した仮想アドレス空間を持つことができます。

パーソナル ノートブック コンピュータでは、仮想メモリ管理やメモリ キャッシュなどの他のメモリ管理テクノロジも使用される場合があることに注意してください。これらの手法により、メモリの使用率とパフォーマンスをさらに向上させることができます。使用される具体的なメモリ管理方法は、オペレーティング システムとハードウェアによって異なる場合があります。

仮想メモリの基本概念

仮想メモリはコンピュータ オペレーティング システムのテクノロジであり、コンピュータの物理メモリとディスク領域を組み合わせて、実行中の各プログラムに
仮想メモリ領域を提供します。仮想メモリの概念により、オペレーティング システムは、プログラムのメモリのすべてを物理メモリにロードするのではなく、その一部を一時的にディスクに保存できます。これにより、使用可能なメモリ領域が効果的に拡張され、コンピュータでより多くのプログラムを同時に実行できるようになります。

仮想メモリの局所性原理は、プログラムがメモリにアクセスするときに、時間的局所性と空間的局所性の特性があることを意味します。つまり、プログラムは、最近使用したメモリ位置または近くのメモリ位置にアクセスする傾向があります。

  1. 時間的局所性: この原則は、プログラムがメモリ位置にアクセスすると、近い将来同じメモリ位置に再びアクセスする可能性が高いということです。これは、プログラムが周期的または反復的な方法で実行されることが多く、同じメモリ領域に繰り返しアクセスするためです。

  2. 空間的局所性: この原則は、プログラムが特定のメモリ位置にアクセスすると、次の期間には近くのメモリ位置にアクセスする可能性が高いということです。これは、プログラムのデータは通常、連続してメモリに格納され、プログラムはデータを塊で処理する傾向があるためです。

仮想メモリの局所性の原則は、オペレーティング システムがメモリ管理において次のような最適化措置を講じることを可能にするため、システム パフォーマンスに重要な影響を与えます。

  1. キャッシュ: オペレーティング システムは、キャッシュ メカニズムを利用して、最近使用したメモリ データをキャッシュに保存し、アクセスを高速化できます。

  2. ページ置換: 物理メモリが不十分な場合、オペレーティング システムは、局所性の原則に従って、アクセス頻度の低いメモリ ページの一部をディスクに置き換えることを選択でき、これにより、より頻繁にアクセスされるページのためのスペースが確保されます。

  3. プリフェッチ: オペレーティング システムは、プログラムのメモリ アクセス モードに従って、必要なデータを事前にメモリにロードして、アクセス遅延を減らすことができます。

仮想メモリの局所性の原理を理解することは、メモリ管理戦略を最適化し、システムのパフォーマンスとリソース使用率を向上させるのに役立ちます。

ページフォルト

ページフォールト(Page Fault)とは、仮想メモリシステムにおいて、プログラムがアクセスしたページ(Page)が物理メモリ上にない場合、ページフォールト割り込みと呼ばれる割り込みが発生することを意味します。

プログラムが仮想メモリ アドレスにアクセスすると、オペレーティング システムはまず、そのアドレスに対応するページが物理メモリにロードされているかどうかを確認します。ページがすでに物理メモリ上にある場合、それはページ ヒット (Page Hit) と呼ばれ、プログラムはそのページに直接アクセスできます。ただし、ページが物理メモリにない場合は、ページ フォールトと呼ばれます。

ページ ミスが発生すると、オペレーティング システムは次の手順を実行します。
1. レジスタ ステータスやプログラム カウンタなどを含む、現在のプログラムのコンテキスト情報を保存します。
2. ディスクに保存されているページのデータを見つけます。
3. ディスクから物理メモリ内の空きページ フレーム (ページ フレーム) にページをロードします。
4. ページテーブル内の仮想メモリアドレスに対応するマッピング関係を更新します。
5. プログラムのコンテキスト情報を復元し、中断された命令を再実行します。

ページ フォールト割り込みメカニズムを通じて、オペレーティング システムはオンデマンドで仮想メモリ内のページを物理メモリにロードできるため、より大きなメモリ空間とより高い動作効率が実現します。ページミスが発生すると、ページデータをディスクからロードする必要があるため、多少の遅延が発生する可能性があります。ただし、合理的なページ置換アルゴリズムとプリフェッチ メカニズムを通じて、欠落ページの数を最小限に抑え、システム パフォーマンスを向上させることができます。

アドレス変換プロセス

仮想メモリのアドレス変換プロセスは、次の手順で説明できます。

  1. プログラムが仮想メモリ アドレスにアクセスする: プログラムが仮想メモリ アドレスにアクセスするとき、その仮想アドレスを使用して目的のデータまたは命令をアドレス指定します。

  2. 仮想アドレスから物理アドレスへのマッピング: オペレーティング システムのメモリ管理ユニット (MMU) は、仮想アドレスから物理アドレスへの変換を担当します。アドレスマッピングにはページテーブル(Page Table)を使用します。

  3. ページ テーブル ルックアップ: MMU は、仮想アドレスのページ番号部分に従って、ページ テーブル内の対応するページ テーブル エントリ (Page Table Entry) を検索します。

  4. 有効ビットを確認します (有効ビット): ページ テーブル エントリには、ページが物理メモリ内にあるかどうかを示すために使用される有効ビットがあります。有効ビットが有効な場合は、ページが物理メモリ内にあり、直接アクセスできることを意味します。有効ビットが無効(無効)の場合は、ページが物理メモリに存在しないことを意味し、ページング(ページ置換)が必要です。

  5. ページフォールト割り込み処理:ページテーブルエントリのバリッドビットが無効な場合は、ページフォールト割り込み(Page Fault)が発生したことを意味します。オペレーティング システムは割り込みを処理し、失われたページをディスクから物理メモリにロードし、ページ テーブル エントリの有効ビットと物理アドレスを更新します。

  6. 物理アドレスの生成: ページ テーブルの検索が成功すると、MMU はページ テーブル エントリの物理ページ番号と仮想アドレスのページ オフセットを使用して、最終的な物理アドレスを生成します。

  7. 物理メモリへのアクセス: 生成された物理アドレスを使用して、CPU は物理メモリ内のデータまたは命令に直接アクセスできます。

仮想メモリ システムは、アドレス変換プロセスを通じて、プログラムが使用する仮想アドレスを物理アドレスに変換し、メモリの透過的なアクセスと管理を実現します。このアドレス マッピング メカニズムにより、仮想メモリがより大きなメモリ空間を提供できるようになり、複数のプログラムを同時に実行できるようになり、より優れたメモリ分離と保護メカニズムが提供されます。

おすすめ

転載: blog.csdn.net/weixin_43485737/article/details/132607363