linuxのメモ

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

2016-04-05から1日間の記事一覧

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

概要 指定した値とプリエンプションの値が等しいか確認する 詳細 preempt_count()で取得した実行待ちプロセス数とrcu_preempt_depth()で取得したRCUロックの深さの合計値が引数として取得した値と等しいか比較し、等しければ1を等しくなければ0を返す

RCU - rcu_preempt_depth()

rcu

概要 現在実行中のプロセスのRCUロックの深さを取得する 詳細 CONFIG_PREEMPT_RCUが無効な場合は常に0を返すが、有効な場合はcurrentで現在実行中のプロセス情報を取得し、struct task_struct構造体のrcu_read_lock_nestingメンバの値を返す

プロセス情報 - current

概要 現在実行中のプロセス情報を取得する 詳細 get_current()のwrapperマクロ

プロセス情報 - get_current()

概要 現在実行中のプロセス情報を取得する 詳細 this_cpu_read_stable()マクロでcurrent_taskによって示される現在実行中のプロセスを取得する

CPU操作 - this_cpu_read_stable()

cpu

概要 指定されたシンボルの値を取得する 詳細 percpu_stable_op()マクロに"mov"の文字列を引数として渡して実行する

CPU操作 - percpu_stable_op()

cpu

概要 CPU固有の指定した値を任意のアセンブラ命令で取得する 詳細 以下の引数を受け取る オペコード : op 入力値 : var 入力値を指定する際に__percpu_arg()マクロにP1を引数として渡して実行した結果を使用している P1を指定することによりアセンブラ命令実…

プロセス情報 - current_task

概要 CPU毎の現在実行中のプロセスを示す変数へのポインタ 詳細 DECLARE_PER_CPU()で宣言されるCPU個別のstruct task_struct構造体へのポインタ

プロセス情報 - is_idle_task()

概要 任意のプロセスがアイドルプロセスであるか確認する 詳細 取得したstruct task_struct構造体のpidメンバの値が0であるか確認する struct task_struct構造体のpidメンバはプロセスのpidを保持する変数で、アイドルプロセスはpidが0になる

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

概要 現在のタスクが他のプロセスに割り込んで実行されているかを確認する 詳細 preempt_count()で実行待ちプロセス数を取得し、この値が0の場合は0を0以外の値の場合は1を返す

バッファ操作 - rb_time_stamp()

概要 struct ring_buffer構造体の状態に応じたタイムスタンプを取得する 詳細 struct ring_buffer構造体のclock()メソッドを実行した結果をDEBUG_SHIFT分左にシフトした値を返す clock()メソッドはtrace_clocksグローバル変数の配列内の要素の一つでtracing_…