メモリ一貫性(メモリいっかんせい、: Memory coherence)とは、2つ以上のプロセッサをそなえ記憶装置を共有するコンピュータにおいて、各プロセッサが読み書きするメモリのデータが不整合をきたさないという特質である。メモリ一貫性は、そうしたコンピュータシステムの設計に影響を与える問題である。

コンピュータシステムは永続記憶域からメモリにデータを読み出し、データに何らかの操作を施し(例えば二つの数値を加算するなど)、その結果を永続記憶域に書き戻すことにより動作する。プロセッサが一つのシステム(廉価なパーソナルコンピュータなど) ではデータの読み書きを行うプロセッサも一つしかない。 またプロセッサが一つであれば同時に一つのことしか行うことができないので、記憶域内の情報が変化させたとしても、その後の操作では確実に変化した情報を取り出すことができる。

マルチプロセッサのシステムでは、同時に動くプロセッサが複数存在し、 すべてのプロセッサが同時に同じ情報を処理する可能性が生じる。どのプロセッサも情報を書き換えることがなければプロセッサ間で情報を共有することに何の支障もないが、いずれかのプロセッサが情報を書き換えると、他のプロセッサは書き換えられる前の古いコピーを使って作業を行ってしまう。そこで何らかの方法を用いてすべてのプロセッサに情報が変化したことを通知しなければならない。それらの方法いくつかが"メモリ一貫性プロトコル" として知られる。メモリ一貫性だけでは並行動作するプログラムが安全にデータを書き込むことができず、キャッシュ一貫性モデルと組み合わせて使用する。

メモリ一貫性を維持するためにさまざまなプロトコルが考案されている。例えばMSI プロトコルや、その派生系である MESIプロトコルMOSIプロトコルMOESIプロトコルなどがある。

関連項目 編集