linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

メモリバリア - mb()

概要

命令の実行順序がコード通りに実行されることを保証する

詳細

CONFIG_X86_32の値によって以下のように処理が異なる

  • 有効
    • alternative()の置き換え元の命令にlock; addl $0,0(%%esp)を、置き換え後の命令にmfenceを、機能番号としてX86_FEATURE_XMM2を指定して生成されたアセンブラ命令を実行する
    • 元の命令はNOP命令であり、CPUがサポートしている場合はmfence命令を実行する
  • 無効

mfence命令はCPUの最適化で命令が実行時に入れ替わること(アウト・オブ・オーダー実行)を防止するメモリバリアの役割を持つ