割り込み可能な命令

By 高尾 - Posted: 2008/10/19 Last updated: 2008/10/19 - Leave a Comment
なんとなくインストラクションって実行中は割り込みなんか受け付けない気がしてませんか。
それって大間違い。一番いい例がMVC(MoVe Charactor)。とあるメモリからとあるメモリへ転送する命令。
指定するアドレスは当然ながら仮想アドレス。もし、そのアドレスがリアルメモリーになかったらどうなるでしょうか?

はい。もちろんページフォールトという割り込みが起きます。そしてページング処理がガチャガチャっと動いてメモリのアドレスに対応するリアルメモリが用意されてから、命令の残りを続行するぜ、となるわけです。命令の解説をよく見ると乗ってるんですけどね。

一方、この命令の途中で割り込まれたらマルチタスク、マルチスレッドは無理というのがCS(Compare and Swap)。とあるメモリを参照し、その値が自分の期待した内容と同じならば、というふたつの動作が整合性をもつことを保障した命令です。ロック、セマフォ、なんでもいいのですが共有資源を矛盾なく更新するためには必須の命令です。どんなプロセッサアーキテクチャを組んだところでマルチスレッドをやりたいのであれば、必ず同様の命令が必要となります。

普段はどーでもいい話ですが、OSの一部として動くプログラムを書く場合には頭の隅にチラチラしているべき話です。
Posted in MVS実践アセンブラー・プログラミング • • Top Of Page