*参照元 [#l5f8c43a]
#backlinks

*説明 [#u2466fd6]
-パス: [[linux-2.6.33/arch/x86/include/asm/thread_info.h]]

-現在実行中のタスクの情報を返す。


**引数 [#x29a746d]
-なし


**返り値 [#xb52e2b6]
-struct thread_info *
--現在実行中のタスクの情報。
--[[linux-2.6.33/thread_info]]


**参考 [#g6f70a2d]
-struct thread_info を配置する場所と、
カーネルスタックとの関連は下記を参照のこと。
--スタックポインタの現在値を、
カーネルスタックサイズ以下のビットを 0 でクリアした値を返す理由も書いてある。
--[[linux-2.6.33/current_thread_info()]]


*実装 [#t256669e]
 /* how to get the thread information struct from C */
 static inline struct thread_info *current_thread_info(void)
 {
 	return (struct thread_info *)
 		(current_stack_pointer & ~(THREAD_SIZE - 1));
-例えば THREAD_SIZE が 8192(= 2 ^ 13)だとすると、
 THREAD_SIZE       : 8192 = 0000 0000 0000 0000 0010 0000 0000 0000
 THREAD_SIZE - 1   : 8191 = 0000 0000 0000 0000 0001 1111 1111 1111
 ~(THREAD_SIZE - 1):      = 1111 1111 1111 1111 1110 0000 0000 0000
-下位 13ビットを全て 0 にする、
つまりカーネルスタックの末尾のアドレスを計算し、
thread_info のポインタにキャストして返す。
--スタックは 0 に向かう方向に成長するので、
thread_info はカーネルスタックの末尾にある。

-現在のカーネルスタックのポインタを返す。
--[[linux-2.6.33/current_stack_pointer(global)]]
-カーネルスタックのサイズを表す。
--[[linux-2.6.33/THREAD_SIZE]]

 }


*コメント [#la21204d]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS