- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#l5f8c43a]
*参照元 [#qf05a54b]
#backlinks
*説明 [#u2466fd6]
*説明 [#jdca7fbd]
-パス: 複数あり
--x86 版: [[linux-2.6.33/arch/x86/include/asm/thread_info.h]]
--arm 版: [[linux-2.6.33/current_thread_info()(x86)]]
--x86 版: [[linux-2.6.33/current_thread_info()(arm)]]
-現在実行中のタスクの情報を返す。
--タスクの情報は、はカーネルスタックの末尾
(メモリアドレスで言うとアドレス 0 に近い側)に配置されている。
--タスクの情報は、カーネルスタックの末尾
(メモリアドレスで言うとアドレス 0 に近い側)に配置される。
スタックポインタが 0x87650987 で、
THREAD_INFO = 8192 の場合
0x00000000 ----> |----------|
|**********|
====(略)====
|**********|
0x87650000 ----> |----------| <- カーネルスタックの末尾
| thread_ |
| info |
|----------|
| |
| |
stack_pointer -> |----------| <- カーネルスタックは↑に成長する
| 使用中 |
| カーネル |
| スタック |
| 領域 |
| |
0x87651fff ----> |----------| <- カーネルスタックの先頭
|**********|
====(略)====
|**********|
0xffffffff ----> |----------|
**引数 [#x29a746d]
**引数 [#i41fd22e]
-なし
**返り値 [#xb52e2b6]
-struct thread_info *
--現在実行中のタスクの情報。
--[[linux-2.6.33/thread_info]]
**返り値 [#m42ca884]
-各アーキテクチャのページを参照してください。
**参考 [#g6f70a2d]
**参考 [#a2f7941a]
*実装 [#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 はカーネルスタックの末尾にある。
*実装 [#i6b27561]
-各アーキテクチャのページを参照してください。
-現在のカーネルスタックのポインタを返す。
--[[linux-2.6.33/current_stack_pointer(global)]]
-カーネルスタックのサイズを表す。
--[[linux-2.6.33/THREAD_SIZE]]
}
*コメント [#af78e2f1]
*コメント [#la21204d]