セグメント方式
セグメント方式の最新ニュースをまとめて検索!
セグメント方式は、メモリ管理の方式の一つ。プログラムやデータをセグメントという「可変な」大きさのまとまりで管理する。セグメントは、メモリ空間上で、情報の属性などによって分類されたグループである。
目次 |
[編集] 仮想記憶におけるセグメント方式
オペレーティングシステムは、必要なプログラムやデータを主記憶上に読み込み(ロールイン)、セグメントとして管理する。読み込む際に、空き領域が足りないときは、不要なセグメントを補助記憶装置に退避(ロールアウト)して必要な空き領域をつくる。
各セグメントは、セグメントテーブルで管理され、セグメント番号とセグメントの開始アドレスが保管されている。各セグメントに属するプログラムやデータの実アドレスは、セグメントテーブル内の開始アドレスとそこからの相対アドレスから算出する。
セグメントは、実記憶上に連続した領域として割り当てられる。セグメントの大きさが可変長なため、場合によっては、実記憶上には空き領域の合計が十分あるのに連続領域が空いていないことがある(フラグメンテーション)。
[編集] ページ化セグメンテーション
セグメント方式とページング方式と組み合わせた方式。この方式では、プログラムコード用、データ用などの各セグメントが複数のページで構成される。これによって、1つのセグメントが連続した実メモリに存在する必要が無く、外部断片化を防ぎ、効率的にメモリを使用することができる。さらに、プログラムコード用のセグメントの書き換えを禁止するといったアクセス制限や、リードオンリーのセグメントをプログラム間で共有することによりメモリ消費を抑えるといったことができる。
メリットの多い方式であるが、一般的なパソコン用のOSであるWindowsやLinuxでは採用しておらず、1つのセグメント内にコードやデータ、スタックが配置されるフラットメモリモデルを採用していることが多い。しかし、近年のセキュリティ意識の高まりと共に、ウイルスなどの不正なプログラムがデータセグメントを不正に利用することを防ぎたいという要求から、データ実行防止機能は実現されている。
ページ化セグメンテーションはMULTICSやACOS-4のメモリ管理に採用されている。
[編集] メモリ空間におけるセグメント
メモリ空間上、プロセスが使用するコード、データやスタックが配置されるが、その領域をセグメントと呼ぶ事がある。それぞれコードセグメント(テキストセグメント)、データセグメントやスタックセグメントと言う。
例として、インテル系CPUの8086では、16ビットのアドレスレジスタ(64KBオフセット)とセグメントレジスタの組み合わせにより(後者を4ビット右シフトして加算)、1MBの物理アドレス空間へのアクセスを可能としている。セグメントレジスタにはCS/DS/SS/ESの4つがあり、これは以降のIA-32アーキテクチャやその後継においても拡張されつつ踏襲されている。
Intel 80286においては、セグメント方式を採用したメモリ管理ユニットが搭載され、グローバルディスクリプタテーブル(GDT)・ローカルディスクリプタテーブル(LDT)等によるメモリ保護機能が提供された。8086でのセグメントレジスタは、セグメントディスクリプタテーブルを指し示すセグメントセレクタとなった。
Intel 80386ではメモリ管理ユニットにページング方式が追加採用され、アドレスレジスタも32ビット(4GB)に拡張された。80386以降で動作するオペレーティングシステムには、メモリ管理にページ化セグメンテーション方式を適用したものが主流となった。
[編集] 関連項目
最終更新 2009年8月7日 (金) 06:33 (日時は個人設定で未設定ならばUTC)。
【セグメント方式】変更履歴


