1. 概要

このチュートリアルでは、最も一般的な2つの非連続メモリ割り当て手法であるセグメント化ページングとページングセグメンテーションについて説明します。両方の方法の仕組み、長所と短所について説明します。

最後に、それらのコアの違いを示します。

2. 動機

コンピュータのメモリ容量の最適な使用は、広範な研究の対象となっています。 コンピュータの進歩に伴い、プログラムもより複雑になり、実行のためにより多くのメモリを必要とします。

どのマシンでも、複数のプログラム間でメモリを共有する必要があります。 ただし、CPUがそれぞれのデータをRAMにロードする必要があるため、処理が遅くなる可能性があります。

コンピューターで実行できるプログラムの数の制限を判断することはできません。 したがって、 RAMのサイズは、最新のコンピューターには決して十分ではありません。

ここで、メモリの問題を解決するために、 1つの解決策は、データをセカンダリメモリに保存することです。次に、必要に応じて、コンピュータはセカンダリメモリからRAMにデータを取得できます。 オペレーティングシステムは、仮想メモリを使用して、メモリの物理的な不足に対処し、コンピュータに一時メモリを割り当てます。

このアプローチの問題は、論理アドレス空間が大きい場合、ページテーブルがRAM内の大量のメモリを占有する可能性があることです。したがって、RAM内のページテーブルのサイズを削減できるメモリ管理技術が必要です。

3. セグメント化されたページングの概要

RAM内のページテーブルのサイズを縮小するために、セグメンテーションとページングの両方を組み合わせた戦略を使用します。しかし、組み合わせた戦略の詳細に入る前に、まず、ページングの問題について説明しましょう。

ページングにより、ジョブとプロセスを不連続なスペースとしてメモリに格納できます。 したがって、外部フラグメンテーションの問題を解決します。

この手法を実装するために、プロセスを固定サイズのブロックに分割します。 これらのブロックはページと呼ばれます。 また、物理メモリをフレームと呼ばれる固定サイズのブロックに分割します。

OSがプロセスを実行すると、CPUは各ページの論理アドレス物理アドレスに変換します。 さらに、フレームにアクセスするために生成されたアドレスは、ページ番号とフレーム番号に分けられます。

ページング手法の主な制限は、仮想アドレスが大きい場合、ページは実際のメモリで大きなスペースを占めるという事実にあります。一般に、プログラムは大きくなる傾向があります。 したがって、かなりの量のメモリを消費します。 その結果、一部のアドレスが無効になります。

この問題を解決するために、ページテーブルサイズを縮小するためにページングとともにセグメンテーションを使用できます。通常、プログラムをコードセグメント、データセグメント、スタックセグメント、およびヒープセグメントの4つのセグメントに分割できます。 。

理想的には、プロセスを分割できるセグメントの数に制限はありません。プロセスをセグメントに分割した後、各セグメントのセグメントテーブルを作成します。 次に、各セグメントを固定サイズのページに分割します。

したがって、セグメントテーブルの各セグメントエントリは、セグメントに対応するフレームアドレスを格納するページテーブルを指します。 このプロセスにより、ページテーブルのサイズが大幅に削減されます。

3.1. 物理アドレスコンピューティング

セグメント化されたページング手法を使用する場合、CPUによって提供されるアドレスをセグメント番号、ページ番号、およびページオフセットに分割します。

ここで、論理アドレスをリールアドレスに変換するには、フレームアドレスが必要です。 セグメントテーブルからフレームアドレスを取得します。 最後に、ページテーブルはメインメモリ内のセグメントのフレームを指します。

プロセス全体を要約しましょう。最初に、プログラムをセグメントに分割します。 各セグメントには、セグメントテーブルが含まれています。 各セグメントテーブルには、ページテーブルのアドレスが格納されます。 ページテーブルには、メインメモリを指すフレームアドレスが含まれています。

3.2. 例

セグメント化されたページング手法の実際の使用法を理解するために、例として取り上げましょう。 関数とそれが使用するデータを備えたプログラムを使用しています。

プログラムを2つのセグメントに分割します。(A)関数用と(B)データ用です。 セグメントテーブルでは、セグメント(A)と(B)の場合があります。

(A)の仮想アドレスが次の場合:

住所は次のようになります .

3.3. 長所と短所

セグメント化されたページングの主な利点はメモリ使用量の削減です。固定サイズのページを割り当てるため、外部の断片化を引き起こしません。 これにより、メモリの割り当てが簡単になります。

主な欠点は外部の断片化です。ただし、外部の断片化が発生する可能性は大幅に低くなります。 セグメント化されたページング手法では、より多くのハードウェアリソースも必要になります。 変換はシーケンシャルであるため、メモリアクセス時間が長くなり、複雑さが増します。 ページテーブルは、メモリに格納するために連続している必要があります。

4. ページセグメンテーションの概要

セグメンテーションでは、各プロセスをセグメントに分割します。各セグメントのサイズは異なります。 セグメントは、さまざまな長さのセグメントのセットである論理アドレスメモリスペースにロードされます。

各セグメントには名前と長さがあります。 セグメントを実行するために、その論理アドレスが物理メモリ空間にロードされます。

通常、セグメントは名前ではなく番号で参照されます。 したがって、セグメントにアクセスするには、その番号とオフセットが必要です。 この番号は、オペレーティングシステムによってマップされたセグメントテーブルのインデックスとして使用されます。 オフセットの値は、セグメントの制限を決定するのに役立ちます。

セグメント番号とオフセット値を結合すると、物理メモリ空間にセグメントアドレスが生成されます。

それにもかかわらず、セグメンテーションには多くの欠点があります。 可変サイズのブロックを物理メモリに割り当てます。 したがって、セグメンテーションは外部フラグメンテーションを引き起こす可能性があります。

ページングセグメンテーションは、メモリ管理を改善するためのソリューションとして提案されました。 ページ分割手法は、セグメントテーブルをページに分割し、セグメントテーブルのサイズを縮小することで構成されます。ここでは、セグメントをページに分割します。

4.1. 物理アドレスコンピューティング

ページ分割では、まず、セグメントテーブルをページに分割します。 したがって、ページテーブルを作成します。 したがって、仮想アドレスは、ページ番号、セグメント番号、2ページ目番号、およびオフセットの4つのフィールドで構成されます。

プロセス全体を要約しましょう。最初に、プログラムをセグメントに分割します。 セグメントごとにセグメントテーブルがあります。 次に、セグメントテーブルアドレスも含むページテーブルも作成します。 ページテーブルでは、メインメモリを指すフレームアドレスを見つけることができます。

4.2. 例

ページングセグメンテーション手法を実際に理解するために、例として取り上げましょう。 セグメント(A)、(B)、(C)のプログラムを受講しています。

セグメント(C)の仮想アドレスがに等しいと仮定しましょう。 いくつかの情報を抽出するには、その物理アドレスにアクセスする必要があります。

まず、ページテーブルのページにある対応するセグメントテーブルアドレスを知る必要があります。 次に、前のページテーブルのエントリからセグメントに対応するページテーブルアドレスを抽出する必要があります。 最後に、フレームアドレスは最後のページテーブルのページで見つけられ、オフセットに追加されます。

住所は次のようになります .

4.3. 長所と短所

ページセグメンテーションの主な利点は、外部の断片化を排除し、ページテーブルのサイズを縮小することです。

一方、の問題内部の断片化はまだ完全には解決されていません。 内部の断片化が発生する場合がありますが、その可能性は低くなります。 メモリにアクセスするときに遅延が存在します。 また、ページングセグメンテーション手法の実装に必要なハードウェアは複雑です。

5. 違い

ページングセグメンテーションとセグメント化ページングの主な違いを見てみましょう。

6. 結論

ページングとセグメンテーションにはいくつかの利点がありますが、それらは依然としてメモリの断片化の主な原因の1つです。 メモリの断片化の可能性を減らすために、組み合わせたメモリ管理技術が開発されています。

このチュートリアルでは、セグメント化されたページングとページングされたセグメンテーションの2つのメモリ割り当て手法について説明します。 各手法の基本的な考え方を、作業手順を示す例とともに紹介しました。

最後に、それらの間のコアの違いについて話しました。