アドレス空間(アドレスクウカン)とは | 意味や読み方など丁寧でわかりやすい用語解説

アドレス空間(アドレスクウカン)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

アドレス空間 (アドレスクウカン)

英語表記

address space (アドレススペース)

用語解説

アドレス空間とは、コンピュータシステムにおいて、プログラムがデータや命令を格納するために利用できるメモリ領域のアドレス(番地)が取りうる範囲全体のことを指す。これは、CPUがアクセスできるメモリの論理的な番地全体を示す概念であり、現代のオペレーティングシステム(OS)の基盤をなす重要な要素である。単に物理的なメモリの範囲を示すだけでなく、仮想化された「見かけ上の」メモリ領域として提供されることが一般的である。

コンピュータは、CPU、メモリ、ストレージなどのハードウェアで構成される。メモリはプログラムの命令やデータが一時的に保存される場所であり、CPUが直接アクセスして処理を行う。メモリ上の各データには、その位置を示す「アドレス」が付与されている。CPUが特定のデータにアクセスしたい場合、そのデータが格納されているアドレスを指定する。アドレス空間は、これらのアドレスの集合、つまりCPUが「ここからここまで」と認識できるメモリ領域全体の範囲を示す。例えば、あるシステムが0番地からある最大値までをアドレスとして指定できる場合、その範囲全体がアドレス空間である。

詳細に説明すると、アドレス空間には主に「物理アドレス空間」と「仮想アドレス空間」の二種類がある。物理アドレス空間とは、コンピュータに実際に搭載されている物理メモリ(RAM)の容量に対応するアドレスの範囲である。これは、ハードウェアに直接結びついた具体的な番地を指す。一方、仮想アドレス空間は、CPUや実行中のプログラムが見ている「論理的な」アドレスの範囲である。現代の多くのOSでは、この仮想アドレス空間が採用されており、各プロセス(実行中のプログラム)はそれぞれ独立した広大な仮想アドレス空間を持っているように見える。

仮想アドレス空間が必要な理由はいくつかある。第一に、物理メモリは有限であり、複数のプログラムが同時に実行されるマルチタスク環境では、各プログラムが物理メモリのどの部分を使用するかを厳密に管理する必要がある。もし各プログラムが直接物理メモリにアクセスすると、他のプログラムのメモリ領域を誤って上書きしたり、不正にアクセスしたりするリスクが生じる。これを防ぐため、OSは各プログラムに仮想アドレス空間を提供し、あたかもそのプログラムがシステム全体のメモリを独占しているかのように見せかける。これにより、プログラム間のメモリ干渉を防ぎ、セキュリティと安定性を向上させる。

この仮想アドレス空間の管理と、仮想アドレスから物理アドレスへの変換は、主にCPU内部に搭載されたメモリ管理ユニット(MMU: Memory Management Unit)というハードウェアが行う。プログラムが仮想アドレスを指定してメモリにアクセスしようとすると、MMUはその仮想アドレスを対応する物理アドレスに変換し、実際の物理メモリへのアクセスを仲介する。この変換処理は、ページングと呼ばれる手法によって行われることが一般的である。ページングでは、仮想アドレス空間と物理アドレス空間を「ページ」と呼ばれる固定長の小さなブロックに分割し、それぞれのページのマッピング情報(仮想アドレスと物理アドレスの対応関係)をOSが管理する。これにより、仮想メモリの一部が物理メモリに存在し、残りがハードディスクなどの二次記憶装置(スワップ領域)に一時的に保存される、いわゆる仮想記憶システムが実現される。

仮想アドレス空間の利点は多岐にわたる。プログラマーは物理メモリの制約を意識せずにプログラムを作成できるため、開発が容易になる。各プロセスが独立したアドレス空間を持つため、あるプロセスが不正なメモリアクセスを試みても、それが他のプロセスのメモリ領域に影響を与えることはなく、システム全体の安定性が保たれる。これがメモリ保護の仕組みである。さらに、ディスク上のスワップ領域を活用することで、物理メモリの容量を超えるプログラムも実行可能になる。

アドレス空間の大きさは、CPUがアドレスを表現するために使用するビット数によって決まる。例えば、32ビットシステムでは2の32乗、約4ギガバイト(GB)のアドレス空間を表現できる。一方、64ビットシステムでは2の64乗、約18エクサバイト(EB)という膨大なアドレス空間を表現できる。これにより、非常に大容量のメモリを扱えるようになり、より大規模なデータ処理や多くのプログラムの同時実行が可能になる。

このように、アドレス空間は現代のコンピュータシステムにおいて、プログラムの実行、メモリの効率的な管理、システムの安定性、そしてセキュリティを確保するための不可欠な概念である。システムエンジニアを目指す上で、この仮想アドレス空間の仕組みを理解することは、OSの動作原理、パフォーマンス、セキュリティを深く理解するための基盤となる。