分散
共有メモリ(Distributed Shared Memory, DSM)は、複数の計算ノードが連携して動作するクラスター環境において、あたかも単一の
共有メモリ空間を共有しているかのように見える仕組みを提供する技術です。各ノードは、全体で共有されるメモリ領域にアクセスできると同時に、各ノードがローカルに持つ非
共有メモリ領域も保持します。
この分散
共有メモリは、ソフトウェアとハードウェアの両方で実装が可能です。ソフトウェアによるDSMシステムは、
オペレーティングシステム(OS)のカーネル内で実装される場合と、プログラミングライブラリとして提供される場合があります。OS内で実装される場合、それは仮想記憶アーキテクチャの拡張として捉えられ、開発者からは基盤となる分散メモリの実態が隠蔽されます。一方、ライブラリとして実装される場合は、プログラミングの際に特別な記述が必要になりますが、異なるプラットフォーム間での移植性が高まるという利点があります。
ソフトウェアDSMシステムには、
共有メモリ領域の構成に関する柔軟性にいくつかのバリエーションが存在します。ページベースのアプローチでは、
共有メモリは固定サイズのページ単位に分割されます。オブジェクトベースのアプローチでは、様々なサイズのオブジェクトを格納するための抽象化された空間として
共有メモリが分割されます。また、タプルスペースと呼ばれるデータ構造を利用して共有を行う実装もあります。タプルスペースでは、タプルと呼ばれるデータの集合単位で共有が行われます。
共有メモリアーキテクチャは、メモリを各ノードに分散された共有部分と、メインメモリに分割する方法と、すべてのメモリをノード間で共有する方法があります。いずれの場合でも、メモリ一貫性モデルに従って選択されたコヒーレンシプロトコルが、メモリの整合性を保つ役割を果たします。
具体的な実装例としては、DIPC、Kerrighed、MOSIX、OpenSSI、TreadMarksなどが挙げられます。これらのシステムは、分散環境において
共有メモリプログラミングを可能にし、並列処理の効率化に貢献します。
関連事項として、分散システムにおけるデータ整合性に関する概念であるイベンチュアル・コンシステンシー、
共有メモリ環境でのデータの一貫性を保つためのモデルである一貫性モデル、仮想化されたメモリ空間を提供する仮想化メモリ、複数のシステムを単一のシステムとして扱うことを目指すシングルシステムイメージ(単一システムイメージ)などが挙げられます。
より深く分散
共有メモリについて理解するための参考情報として、以下の外部リンクが有益です。
Distributed Shared Memory Home Pages: 分散共有メモリに関する情報が集約されたページ
JSTM - Object Replication using an extended Software Transactional Memory: ソフトウェアトランザクショナルメモリを用いたオブジェクトレプリケーションに関する研究
これらの情報は、分散
共有メモリの概念をより深く理解し、実際のシステム開発に役立てるための手助けとなるでしょう。