2012-05-13 10 views
2

私はLinuxスケジューラで何かを書いています。割り込みが来る前にどのプロセスが実行されていたのかを知る必要があります。割り込みハンドラ中にcurrent-> pidを実行すると、中断したプロセスのPIDを取得できますか?割り込み中にcurrent-> pidを取得する

答えて

3

current->pidが存在し、中断されたプロセス(アイドル状態のスレッドなど)があります。

Linuxスケジューラの中に書いているのなら、非常に注意が必要です。 currentは、スケジューラが実行する新しいプロセスを選択するときにスケジューラによって変更されるため、その値は正確にいつ読み込むかによって異なります。

+0

* current *は、%espの下位ビットをマスクします。そして、Linuxに割り込みスタックと呼ばれるものがあります。割り込みがあなたを他のスタックに切り替え、%espをマスクした場合、有効な構造体task_infoの近くにはどこもありません。 IOW task_infoはスタックの一部であり、割り込みスタック上には見つかりません。私は何かが欠けている? – moorray

+2

@mooray、 'current'が動作します。 'current'はまず' thread_info'(x86では%espをマスキングして)を取得し、そこで 'task_struct'へのポインタを見つけます。割り込みスタックに切り替えると、 'do_IRQ'はプロセスのカーネルスタックに従ってこのポインタを設定します。 – ugoren

+0

ああ...ありがとうございます;) – moorray

0

現在のはプロセスコンテキスト外で有効とは思われません。スケジューラで作業している場合、実行中のタスクへのポインタを格納する場所を把握できます。 struct cfs_rq。

関連する問題