トップQs
タイムライン
チャット
視点

Load-Link/Store-Conditional

ウィキペディアから

Remove ads

load-linkロード・リンクLL、他に load-linkedロードリンクトまたは load and reserveロード・アンド・リザーヴstore-conditionalストア・コンディショナルSCは組み合わせて使用されるコンピュータの命令。これによりロックなしアトミックなリード・モディファイ・ライト操作[1]が可能となる。

load-link 命令は指定されたメモリ位置の現在の内容を返す。その後の store-conditional 命令は同じメモリ位置へ新たな値を書き込むが、前回の load-link 命令以降にそのメモリ位置の内容が書き換えられていないときだけ書き込みが行われる。何らかの更新がなされていたら、たとえ load-link 命令で読み取った値と同じ内容が書かれていたとしても store-conditional 命令は失敗する。従って、LL/SC命令はコンペア・アンド・スワップ (CAS) 命令のようなFalse Positive(偽陽性)問題を発生しない。

Remove ads

弱いLL/SC

LL/SC命令の実装においては、そのメモリ位置への更新がないときでも失敗することがある。二つの操作の間に何らかの例外事象(例えばコンテキストスイッチ、別の load-link 命令実行、多くの実装では他のロード命令やストア命令も)が発生すると store-conditional 命令は失敗する。古い実装では、メモリバス上に何らかの更新ブロードキャストがあっただけで失敗していた。

このため、研究者はこれを「弱い」[2]LL/SCと呼び、本来の理論上のLL/SCアルゴリズムと区別している。弱さは相対的で、弱い実装でもアルゴリズムで使うことが出来る。

弱いLL/SCとコンペア・アンド・スワップ(CAS)を比較したとき、後者の方が公平さで優れていると言える。本来のLL/SCも公平さを持っている。(訳注:弱いLL/SCでは、後から load-link 命令を実行した方が勝ってしまうため、load-link 命令を発行した順番に処理できるようにすべきという公平さに問題がある)

Remove ads

実装

LL/SC命令を実装したプロセッサとして、DEC Alphaデック・アルファ (ldl_l/stl_c命令とldq_l/stq_c命令)、PowerPCパワーピーシー (lwarx/stwcx命令)[3][4]MIPSミップス (ll/sc命令、lld/scd命令)[5]ARM (ldrex/strex命令) がある。

ほとんどのプラットフォームではデータサイズ毎の命令を備えている。例えば、PowerPC にはダブルワード用の ldarx/stdcx命令がある。

いくつかのCPUはライトスルーモードに設定して排他的にそのアドレスにアクセスする必要がある。

どのプラットフォームも弱いLL/SCを提供している。PowerPC の実装が最も強く、LL/SCの間で他のキャッシュラインへのロードやストアを許している。これを利用すると、ロックフリーなリファレンスカウントを実装できる(他にDCASでも実装可能)。

Remove ads

関連項目

脚注

参考文献

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads