厳密な一貫性とは? わかりやすく解説

不可分操作

(厳密な一貫性 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/12/18 23:40 UTC 版)

不可分操作(ふかぶんそうさ)あるいはアトミック操作 (: atomic operation) とは、情報工学においていくつかの操作を組み合わせたもので、システムの他の部分から見てそれらがひとつの操作に見えるものをいう。

条件

不可分操作は、以下の2つの条件を満たさなければならない。

  1. 全操作が完了するまで、他のプロセスはその途中の状態を観測できない。
  2. 一部操作が失敗したら組合せ全体が失敗し、システムの状態は不可分操作を行う前の状態に戻る。

システムの他の部分から見て、操作の組合せが一度に成功したか失敗したように見える。途中の状態にアクセスすることはできない。このため不可分操作あるいはアトミック操作(= 原子操作)と呼ぶのである。

マルチプロセッサでなくとも、この実装は重要である。制御の流れが変更される可能性がある限り、不可分性がなければシステムが不正な状態になってしまう可能性がある。

単純な例

例えば、プロセスがあるメモリ位置の内容をインクリメントしているとする。その処理の流れは以下のようになる:

  1. プロセスがその位置の値を読み込む。
  2. 同じプロセスがその値に 1 を加算する。
  3. 同じプロセスがそのメモリ位置に加算結果を書き込む。

ここで、2つのプロセスが一箇所の共有メモリ上の位置の内容をインクリメントすると仮定する:

  1. 1番目のプロセスがその位置の値を読み込む。
  2. 1番目のプロセスがその値に 1 を加算する。

ここで、1番目のプロセスが加算結果を書き戻す前にサスペンドされ、2番目のプロセスが走行し始めたとする:

  1. 2番目のプロセスがその位置の値を読み込む。読み込まれた値は1番目のプロセスが先に読み込んだのと同じ値。
  2. 2番目のプロセスがその値に 1 を加算する。
  3. 2番目のプロセスが加算結果を書き戻す。

ここで、2番目のプロセスがサスペンドされ、1番目のプロセスが再度走行する:

  1. 1番目のプロセスが自身の持つ加算結果を書き戻すが、それは2番目のプロセスの処理を反映していない。

これは些細な例である。実際のシステムでは、操作はより複雑で、微妙なエラーとなって現われるかもしれない。例えば、64ビットの値をメモリから読む操作は32ビットのリードを2回行うことで実現されている場合がある。プロセスが最初の32ビットをリード後、次の32ビットをリードする前に値が変更されるかもしれない。結果として得られた64ビット値は変更前とも変更後とも異なる無意味な値となる。

さらに、このような結果はプロセスの動作する順番に依存しており、デバッグしようとしても検出が難しい。

CPUアーキテクチャによる違いとロック

カウンタのインクリメント/デクリメントは、RISCアーキテクチャの場合、上記の例のようにリードとライトが別々の命令で行われるために、そのままでは不可分操作にできない。しかし、x86アーキテクチャのようなCISCでは、インクリメントやデクリメントを1命令で実行する命令が存在するため、それだけで不可分性が成立する。必要最小限の不可分操作は、結局テスト・アンド・セットのような指定されたメモリアドレスへのリードとライトを不可分に行う操作となる。しかし、RISCアーキテクチャは 1命令で複数回のメモリアクセスを行わないのが基本思想であるため、直接テスト・アンド・セット命令を実装することはできない(テスト・アンド・セットを命令として実装する場合、バスをロックしてリードとライトを行って他のバスマスタがメモリアクセスを途中で発行できないようにしている)。そのためにコンペア・アンド・スワップLoad-Link/Store-Conditionalといった不可分操作が使われるようになった。

上記の例は「クリティカルセクション」のまわりでロックを獲得することで解決するように見える。しかし、ロックもハードウェアのサポート無しでは単なるメモリ上のデータでしかない。スピンロックなどのアルゴリズムをソフトウェアだけで実装することは可能だが、効率的ではない。そのために、上述のテスト・アンド・セットなどの不可分操作が最近のプロセッサで実装されており、そういった機能でロックを実装する。

関連項目


厳密な一貫性

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/29 18:38 UTC 版)

一貫性モデル (ソフトウェア)」の記事における「厳密な一貫性」の解説

詳細は「厳密な一貫性」を参照 厳密な一貫性は、最も強力な一貫性モデルである。このモデルでは、任意のプロセッサによる変数への書き込みは、すべてのプロセッサによって瞬時確認される必要がある。 厳密モデルの図と非厳密モデルの図は、時間制約である「瞬間」を表している。これは、あたかもグローバルクロックが存在しすべての書き込みがそのクロック期間の終わりまでにすべてのプロセッサキャッシュ反映されなければならないように理解することができる。次の操作は、次のクロック期間にのみ行われなければならないシーケンス厳密なモデル厳密なモデルP1P2P1P21W(x)1 W(x)1 2 R(x)1 R(x)0 3 R(x)1 これは最も厳格なモデルである。このモデルでは、プログラマー期待した結果毎回返ってくる。よって決定論的なモデルである。瞬間的なメッセージ交換不可能なので、実用的な関連性思考実験形式論限られるまた、同時書き込み不可能であることを前提としているため、同じデータアイテムへの同時書き込みにおける衝突解決問題にも役立たない

※この「厳密な一貫性」の解説は、「一貫性モデル (ソフトウェア)」の解説の一部です。
「厳密な一貫性」を含む「一貫性モデル (ソフトウェア)」の記事については、「一貫性モデル (ソフトウェア)」の概要を参照ください。

ウィキペディア小見出し辞書の「厳密な一貫性」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「厳密な一貫性」の関連用語

厳密な一貫性のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



厳密な一貫性のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの不可分操作 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの一貫性モデル (ソフトウェア) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS