読み方 : セグメントほうしき
セグメント方式【memory segmentation】セグメンテーション方式
セグメント方式とは?

プログラムが実行されるとき、オペレーティングシステム(OS)はコード(命令)、データ、スタックといった用途ごとに「セグメント」(segment)と呼ばれる領域を割り当てる。各セグメントにはベースアドレス(開始メモリ番地)とリミット(長さ)が設定され、CPUはこの情報をもとに実際の物理アドレスを計算する。
プログラム上でメモリを参照する際には、セグメント番号と、開始番地からの距離であるオフセット値から論理アドレスを求めてアクセスする。開発者はプログラム中での相対的な位置を指定すればよく、コードやデータの実際の物理的な配置や番地を意識しなくてよい。
セグメント方式の利点の一つはアクセス制御のしやすさにある。セグメントごとに「読み取り専用」「実行不可」といった保護属性を設定できるため、誤ったメモリ書き込みや不正な実行を防ぎやすい。また、プログラムの論理構造とメモリ管理の単位が対応しているため、共有ライブラリなど複数プロセスで同一セグメントを共有する仕組みも実装しやすい。
一方、セグメント方式には「外部断片化」と呼ばれる問題がある。セグメントは可変長であるため、割り当てと解放を繰り返すうちに、使用されていない小さな空き領域が物理メモリ上に散在するようになる。これらの断片はそれぞれ単独では利用できないことが多く、メモリの実効的な利用効率が低下する原因となる。
現代のOSでは、固定長のページ単位でメモリを管理する「ページング方式」が広く採用されており、外部断片化を起こしにくいという点で運用管理上の優位性がある。x86アーキテクチャのプロテクトモードのように、セグメント方式とページング方式を組み合わせたメモリ管理方式が採用されることもあった。