1

add_timerdel_timerを使用してタイマーを開始および停止する Linux カーネル モジュール コードを見ています。

場合によっては、del_timerを呼び出した直後に、実装によってタイマーの「オブジェクト」 ( struct timer_list ) が削除されます。

これが安全かどうかを知りたいです。これはユニプロセッサの実装であり、SMP が無効になっていることに注意してください (代わりにdel_timer_syncを使用する必要があります)。

del_timer_sync の実装は、タイマーが現在どこかで処理されているかどうかを確認しますが、del_timer はそうではありません。UP システムで、del_timer が知らないうちにタイマーを処理することは可能ですか? つまり、タイマーは保留中のタイマー リストから削除され、処理されていますか?

4

1 に答える 1

1

UP は物事をかなり単純化しますが、答えはやはり「場合による」と思います。

プロセスコンテキストで実行している場合del_timer、UP では、タイマーが戻った後はどこでも実行されていないと想定しても安全だと思います。タイマーは保留中のリストから削除され、タイマー割り込みから実行され、その割り込みが開始された場合、プロセス コンテキスト コードの続行を許可する前に、完了まで実行されます。

ただし、割り込みコンテキストにいる場合は、割り込みがタイマー割り込みを中断した可能性があるため、タイマーが実行中の可能性があります。

于 2012-08-22T21:13:41.500 に答える