linuxのメモ

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

barrier

メモリバリア - __smp_mb()

概要 マルチプロセッサシステムで命令の実行順序の最適化を抑止する 詳細 mb()のwrapperマクロ

メモリバリア - mb()

概要 命令の実行順序がコード通りに実行されることを保証する 詳細 CONFIG_X86_32の値によって以下のように処理が異なる 有効 alternative()の置き換え元の命令にlock; addl $0,0(%%esp)を、置き換え後の命令にmfenceを、機能番号としてX86_FEATURE_XMM2を指…

メモリバリア - smp_rmb()

概要 読み込んだメモリの内容が全てのCPUで同期されることを保証する 詳細 CONFIG_SMPが有効な場合はsmp_rmb()マクロを実行するがx86では__smp_rmb()もbarrier()と定義されているため、コンフィギュレーションに関係なくbarrier()のwrapperとなっている

メモリバリア - smp_wmb()

概要 変更したメモリの内容が全てのCPUで同期されることを保証する 詳細 CONFIG_SMPが有効な場合は__smp_wmb()マクロを実行するがx86では__smp_wmb()もbarrier()と定義されているため、コンフィギュレーションに関係なくbarrier()のwrapperとなっている

メモリバリア - barrier()

概要 メモリの内容が確実に同期されることを保証する 詳細 gccでコンパイルする場合はlinux/compiler-gcc.hに定義されている __asm__ __volatile__("": : :"memory") が実行されると思いがちだが、IntelのCPUの場合はlinux/compiler-intel.hに定義されている…