ASM/C/C++ プログラムですべての割り込みを無効にして、プロセッサを完全に制御することはできますか?
はいの場合 -> どうやって?
そうでない場合 -> 「アトミック」オペレーション システム コールはどのように機能しますか (たとえば、クリティカル セクションに入る)。
ご協力いただきありがとうございます!
ASM/C/C++ プログラムですべての割り込みを無効にして、プロセッサを完全に制御することはできますか?
はいの場合 -> どうやって?
そうでない場合 -> 「アトミック」オペレーション システム コールはどのように機能しますか (たとえば、クリティカル セクションに入る)。
ご協力いただきありがとうございます!
x86 およびその他の最新のプロセッサのほとんどでは、アトミックな命令を取得できます。別のスレッド/プロセッサがそのメモリにアクセスできるようになる前に実行を終了しないことが保証されているもの。
Win32 では、サポートされているプラットフォームでそれを抽象化する Interlocked* 関数があります。
MIPS では、インターロックを保証するために、命令の最後に .I を追加する命令が多数あります。
x86には、FLAGSレジスタに割り込みフラグ(IF)があります。このフラグが0に設定されている場合、ハードウェア割り込みは無効になり、そうでない場合は有効になります。コマンドcliはこのフラグを0に設定し、stiはそれを1に設定します。FLAGSレジスタに値をロードする命令(popfやiretなど)もこのフラグを変更する可能性があります。
幸運を!