セグメント方式

セグメント方式によるメモリ管理



セグメント方式とは、プログラムやデータを目的に応じて可変のサイズでまとめるメモリ管理方法の一つです。この方式では、情報を属性ごとに分類されたグループ、すなわちセグメントとして管理します。プログラムを実行する際には、特定のセグメントを参照するためにその識別子とオフセットを指定し、メモリ空間にアクセスします。セグメントは、プログラムコンパイル時に生成されるオブジェクトファイル内でも利用され、リンクを経て実行ファイルが生成されます。

セグメントの活用と仮想記憶



セグメント方式は、主に仮想記憶システムやメモリ保護機能を実現するための手段です。メモリ内には「コードセグメント」や「データセグメント」など、プログラムによって異なるセグメントが存在します。これにより、異なるプログラムが同じセグメントを共有することも可能です。オペレーティングシステムは、必要なプログラムやデータをメモリに読み込む際に、空き領域が不足している場合は不要なセグメントを補助記憶装置に移動します。

各セグメントはセグメントテーブルによって管理されており、セグメント番号や開始物理アドレスが記録されています。そのため、特定のプログラムやデータの実アドレスはセグメントテーブルから算出されます。ただし、セグメントのサイズが可変であることから、実記憶の連続領域が不足する場合があり、これをフラグメンテーションと呼びます。

ページ化セグメンテーション



セグメント方式とページング方式を組み合わせたページ化セグメンテーションでは、各セグメントが複数のページから構成されます。これにより、セグメントが連続した実メモリに存在する必要がなくなり、外部断片化を防ぐことができます。また、特定のセグメントへのアクセス制限を設定することができ、メモリ使用の効率化が図られます。

この方法は、MULTICSやACOS-4で採用されています。

フラットメモリモデルでのセグメンテーション



ページング機能を持つシステムでは、一つの仮想アドレス空間を区切ることでセグメントが実現されることがあります。例えば、プロセスのコードやデータ、スタックは各セグメントとして分けられて配置されます。ハードウェアがこのセグメンテーション方式に対応していると、データ実行防止機能を個々のセグメントに適用できるため、セキュリティ向上にも寄与します。Linuxはこのアプローチを取り入れています。

ハードウェアの実装



セグメンテーションはメモリ保護の一手段として実装されます。セグメントは通常プログラム上の自然な領域に関連付けられ、それに対する参照はパーミッションによって許可されます。セグメントには、その長さとオフセット、配置情報が含まれており、オペレーティングシステムがセグメントを主記憶に読み込む際の管理も行います。

歴史的背景



セグメント方式を最初に実装したコンピュータの一つにバロースB5000があります。このコンピュータは、仮想記憶をセグメント方式で提供した商用コンピュータの一例です。また、GE-645やIntel iAPX 432などもセグメント方式の特長を持っています。

さらに、80286からはプロテクトモードが導入され、より高度なメモリ保護機能が実現されました。

x86アーキテクチャにおけるセグメンテーション



x86系プロセッサでは、リアルモードとプロテクトモードで異なるセグメンテーション動作があります。リアルモードではメモリ保護は存在せず、単純なセグメントレジスタを使用したアドレッシングが行われます。対してプロテクトモードでは、セグメントレジスタがメモリ保護を可能にし、64KiB以上のメモリへのアクセスも滑らかに行うことができます。

このように、セグメント方式はメモリ管理の重要な手法として、現在もさまざまなシステムで利用されているのです。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。