ベースアドレス指定(ベースアドレスしてい)とは | 意味や読み方など丁寧でわかりやすい用語解説
ベースアドレス指定(ベースアドレスしてい)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
ベースアドレス指定 (ベースアドレスしてい)
英語表記
base addressing (ベースアドレス参照)
用語解説
ベースアドレス指定は、コンピュータのメモリ管理において、プログラムが実行される際に使用されるアドレス変換方式の一つである。この方式は、プログラムの再配置性やメモリ保護を実現するために不可欠な技術であり、現代のマルチタスクOS環境の基盤をなす考え方の一つと言える。
コンピュータのメモリは、バイト単位で一意のアドレスが割り振られた広大な記憶領域である。プログラムがこのメモリ上で動作するためには、CPUが命令やデータを読み書きする際に、それらがメモリ上のどのアドレスにあるかを正確に知る必要がある。しかし、プログラムがメモリ上で常に同じ固定された物理アドレスに配置されるとは限らない。複数のプログラムが同時に実行されるマルチタスク環境では、オペレーティングシステム(OS)がメモリの使用状況に応じてプログラムを動的にメモリ上の異なる位置にロードする必要があるからである。
そこで、ベースアドレス指定という概念が導入される。これは、プログラムが自身の内部で管理しているアドレス(論理アドレスや相対アドレスと呼ばれる)を、実際にメモリに存在する物理アドレスに変換するための仕組みである。この変換処理は、プログラムの実行中にリアルタイムで行われる。
詳細に入ると、ベースアドレス指定は主に「ベースアドレス(基底アドレス)」と「オフセット(相対アドレス)」という二つの要素を用いて機能する。 プログラムはコンパイルやリンクの際に、コードやデータが先頭からどれくらい離れているかを示す「オフセット」という形で内部アドレスを生成する。このオフセットは、プログラムの開始位置を基準とした相対的な位置を示す値であり、プログラム自身がメモリ上のどこにロードされるかに関わらず変化しない。
一方、OSがプログラムを物理メモリ上にロードする際、そのプログラムがメモリのどこから始まるかという実際の物理アドレスを決定する。このプログラムの開始物理アドレスが「ベースアドレス」である。OSは、このベースアドレスをCPU内部の特別なレジスタである「ベースレジスタ」に設定する。
プログラムが実行され、CPUが特定の命令やデータにアクセスしようとする際には、その命令やデータがプログラムの内部で持っているオフセット値が参照される。このオフセット値に、ベースレジスタに格納されているベースアドレスが加算されることで、メモリ上の実際の物理アドレスが計算される。すなわち、「物理アドレス = ベースアドレス + オフセット」という単純な計算によってアドレス変換が行われる。この計算は、CPU内のメモリ管理ユニット(MMU)と呼ばれるハードウェアによって高速に実行されるため、プログラムの実行性能に大きな影響を与えることは少ない。
この方式の最大のメリットの一つは、「プログラムの再配置性(リロケータビリティ)」を実現できる点にある。プログラムは、コンパイル時にメモリ上の特定のアドレスを前提とするのではなく、常に0番地からの相対的なオフセットとしてアドレスを扱うことができる。そのため、OSは利用可能なメモリ領域に応じて、プログラムを物理メモリ上の任意の位置にロードすることが可能となる。これにより、メモリの断片化を避け、メモリ資源を効率的に活用できる。例えば、あるプログラムが終了してメモリが解放された場合、その空いた領域に別のプログラムをロードできるようになり、メモリの利用効率が向上する。
さらに、ベースアドレス指定は「メモリ保護」の実現にも寄与する。ベースアドレスレジスタに加えて、「リミットレジスタ(限界レジスタ)」や「境界レジスタ(バウンドレジスタ)」と呼ばれるレジスタが併用されることが多い。リミットレジスタには、プログラムに割り当てられたメモリ領域のサイズが格納される。CPUがアドレス変換を行う際、計算されたオフセット値がこのリミットレジスタの値を超えていないかも同時にチェックされる。もしオフセットがリミットを超えていた場合、それはプログラムが自身に割り当てられたメモリ領域外へのアクセスを試みていることを意味し、OSはこれを不正なメモリアクセスとして検知し、プログラムを強制終了させるなどの適切な処理を行うことができる。これにより、あるプログラムが誤って、あるいは悪意を持って、他のプログラムのメモリ領域やOSの重要なメモリ領域を破壊するのを防ぎ、システムの安定性とセキュリティを保つことが可能となる。
このように、ベースアドレス指定は、プログラムの実行環境に柔軟性をもたらし、複数のプログラムが安全かつ効率的に共存できるマルチタスク環境を構築するための、非常に基本的ながらも重要なメモリ管理技術である。現代の仮想メモリシステムにおいても、ページングやセグメンテーションといったより高度なアドレス変換方式の基礎概念として、このベースアドレスとオフセットの考え方が応用されている。デメリットとしては、アドレス変換のための計算処理がわずかではあるがオーバーヘッドとなる点や、リミットレジスタがなければ十分なメモリ保護が提供できない点などが挙げられるが、その利点はこれらのデメリットを大きく上回る。