質問: MIPSの命令に load linked/store conditional(以下LL/SC)という命令があり、これらの動作が分かりません。 <私の理解> LLとSCによる不可分なSWAP LLの動作 1メモリ上のアドレスを指定し、アドレスに入っている値が1かどうか確かめる 2値が1ならば、ロックがかかっているので何もしない。値が0ならば、ロックするアドレスの値をレジスタにストアする SC 1メモリ上のアドレスを指定し、対となるLL命令によってロックされているならば、 レジスタの値をメモリ上のアドレスにストアする。 21が成功したらレジスタの値を1にする。失敗なら0にする。 <質問> LLやSC自体がbeqなどを含んだ複雑な命令に見えるのですが、 これらは単一の命令なのですか? LLとSCは一対の命令であると、「コンピュータの構成と設計(上)」に書かれているのですが、一対の命令という意味がわかりません。連続して使うから一対と言うのですか? マルチプロセッサなどでは、どのプロセッサの命令がどういう順番で実行されるかわからないから、競合が発生する可能性があり、あるプロセッサのLLによりロックされた場合、同じプロセッサのSCであれば、それをアンロックできると言うことですか?
回答: 記憶を頼って、、と不安でしたので、調べてみました。 そのまま、該当する箇所の話と思います。 マルチタスク(or 類似)を前提にした命令で、LLで、指定アドレスの値を取得し、SCで更新するという事です。もし、LL と SCの実行の間に、他のアプリ(or CPU)が指定アドレスの値を書き換えていた場合、SCは失敗する(エラーになる)という事ですね。 (beq でその結果を元に処理を変更する) なお、上記のページでも触れられていますが、MIPSは、RISC-CPU(この言い方で良い?)なので、複雑な命令はほとんどありません。シンプルな命令の組合せて処理します。