linuxのメモ

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

2016-03-16から1日間の記事一覧

トレース - tracing_is_enabled()

概要 traceが有効か確認する 詳細 smp_rmb()を実行し、すべてのCPUでメモリを同期しglobal_trace変数のbuffer_disabledメンバが有効な値の場合に0を、それ以外の場合に1を返す global_trace変数のbuffer_disabledメンバはtracing_off()で無効にされる

atomic操作 - atomic_dec()

概要 指定された値をatomicにデクリメントする 詳細 引数として受け取ったatomic_t型のポインタのcounterの値をアセンブラのdecl命令でデクリメントする decl命令の直前にLOCK_PREFIXを実行する この値はCONFIG_SMPが有効な場合は"\n\tlock; "となりメモリを…

atomic操作 - atomic_inc()

概要 指定された値をatomicにインクリメントする 詳細 引数として受け取ったatomic_t型のポインタのcounterの値をアセンブラのincl命令でインクリメントする incl命令の直前にLOCK_PREFIXを実行する この値はCONFIG_SMPが有効な場合は"\n\tlock; "となりメモ…

プリエンプション - preempt_trace()

概要 実行待ちプロセスが存在するか確認する 詳細 CONFIG_PREEMPT_TRACER の値によって以下のように処理が異なる 有効 trace_typeの値にTRACER_PREEMPT_OFFのbitが立っており、かつpreempt_count() を実行し実行待ちプロセス数を確認し、実行待ちプロセス数…

プリエンプション - preempt_count()

概要 実行待ちのプロセス数を取得する 詳細 CPU毎の実行待ちプロセス数を表す__preempt_countの値をraw_cpu_read_4()で取得し、PREEMPT_NEED_RESCHEDのbitを反転した値を返す

CPU操作 - raw_cpu_read_x()

cpu

概要 指定されたシンボルの値を取得する 詳細 以下のいずれかのマクロを表し、いずれの場合においてもpercpu_from_op()マクロに"mov"の文字列を引数として渡して実行する raw_cpu_read_1() raw_cpu_read_2() raw_cpu_read_4() raw_cpu_read_8()

CPU操作 - percpu_from_op()

cpu

概要 CPU固有の指定した値を任意のアセンブラ命令で取得する 詳細 以下の引数を受け取る オペコード : op 入力値 : var 入力値を指定する際に__percpu_arg()マクロに1を引数として渡して実行した結果を使用している また、opにはvarのサイズに応じてb, w, l,…

プリエンプション - __preempt_count

概要 実行待ちプロセスカウンター 詳細 DECLARE_PER_CPU()で宣言されるint型のCPU個別の変数で、CPU毎の実行待ちプロセスのカウンターで、この値が0以上の場合はプリエンプションが無効になる 尚、この値には複数の割込みのカウンタを持ち、以下のように値が…