3

Linuxプロセスには2つの別々のスタックがあることを知っています。1つはユーザースペースに、もう1つはカーネルスペースにあります。しかし、ISRが使用するスタックはどこにありますか?プロセスのカーネルスペーススタックと共有されていますか?

4

1 に答える 1

5

以前は、ISR は現在のプロセスのスタックを使用して提供されていました。そのため、割り込みが発生すると、現在実行中のプロセスはすべてのデータをカーネルまたはユーザー空間スタックに保存し、独自のカーネル スタックを使用して適切な ISR 関数の実行を開始します。
しかし、ISR スタックの導入により、すべての ISR 関連の処理は、ISR スタックという名前の別のスタックを使用して行われます。割り込みの ISR ハンドラを実行できるのはカーネル スレッドのみであるため、ISR スタックはカーネル空間にあります。
ユーザー空間は、割り込みが現在のプロセスのカーネル スタックで提供されているのか、別の ISR スタックで提供されているのかを知りませんし、率直に言って気にしません。割り込みは CPU ごとに発生するため、ISR スタックは CPU ごとに存在する必要があります。

元の質問に答える: ISR スタックが存在する場合、プロセス カーネル スタックとはまったく異なります。それ以外の場合は、割り込みの処理にプロセス カーネル スタックが使用されます。

ISR スタックの存在もアーキテクチャに依存します。

于 2012-09-27T20:07:28.493 に答える