線形アドレス

読み:せんけいアドレス
外語:linear address
品詞:名詞

電子計算機においてアドレス、特にメモリアドレスを指定する際に、0から始まる連続した一つの整数によって表わす方法のこと。

現在主流のノイマン型電子計算機は、基本的にチューリングマシンであるため、全てが線形アドレスを用いており、一つも例外はない。

但し、従来と互換性を保ちながら大容量のメモリ空間を扱う、という課題の解決のために、ユーザプログラムから見た状況が線形アドレスではないこともある(例えば8086セグメント等)。このような場合でも、最終的に求められるアドレスは一つの数値なので、線形アドレスである。

チューリングマシン

チューリングマシンは仮想の電子計算機なので、完全なチューリングマシンは存在しえないが、その基本的な要素については充分実現可能であり、そして現在の殆ど全ての電子計算機は、このチューリングマシンなのである。

チューリングマシンの要求として、読み書きできる場所(例えばテープ)を前後に移動する機能があればよく、特定のアドレスを一意に示す機能は求められていない。

しかし無限の容量を扱うことは現実的に不可能であるので、特定の幅を持ったアドレスの範囲内で、その読み書きできる位置に番号を振ることになる。この場所を示すためにポインタが使われるため、結果としてチューリングマシンをほぼ忠実に再現できることになり、同時に、0から始まる連続した番号によってアドレスを管理する、という仕様が生まれることとなる。

80x86プロセッサの場合

16ビットマイクロプロセッサから始まった80x86は、その進化の途上において、様々な苦労を重ねてアドレス幅を増やしてきた。

16ビット時代はセグメントによって、32ビット化してからもPAE(Physical Address Extension、物理アドレス拡張)という技術によってアドレスの拡張をしている。

このとき、例えばセグメントを用いる方法において、ds:[si]のようにしてメモリにアクセスする場合、これは線形とは言いがたい。しかしCPU内部では、dsレジスタとsiレジスタを組み合わせ、20ビットの線形アドレスを算出しているのである。

一方、PAEなどが無くアドレスバスが32ビットとなった80x86プロセッサを想定すれば、[esi]のようにしてメモリにアクセスする場合、これは線形だと言える。