わかりましたが、ARMにはspおよびlrなどのバンクレジスタがあります。換言すれば、 IRQモードにある間、sp_usr(及びlr_usr)はsp_irqによって影、すなわち、見えません。だから、私の質問は、割り込みハンドラが保存する方法ですsp_usr。 sp_usrは、irqモードでは不可視でアクセス不可能なため、割り込みの処理中は自動的に変更されないため、これは不要であると考える人もいます。ただし、必ずしもそうではありません。以下のシナリオを検討してください。ARMでは、ユーザモードで実行中のスレッドが中断された場合、sp_usrレジスタを保存する方法
a)スレッドAはユーザー空間で実行されています。
b)外部割り込みが発生します。
c)ハンドラが実行され、高い優先度を持つスレッドBが待機していたリソースを取得したので、再スケジュールすることを決定します。
d)は、スレッドAのコンテキストは今Bは、次にバックユーザモードにおいて、SVCモードで最初の、実行スレッド保存します。 これは、スレッドBが睡眠のようなものを呼び出す)sp_usrの値は、スレッドB.
電子によって上書きされるだけの瞬間です。スレッドAは中断された時点から実行を再開します。
したがって、スレッドAが中断されたときにsp_usrが保存されなかった場合、スレッドAはどのようにコンテキストを復元しますか?
明らかに、SP&LRを保存して後で復元する必要があります。 CPUがユーザモードまたはシステムモードのいずれかになっているときにそれらを保存する必要があります。 –
あなたが見ているARMアーキテクチャのバージョンを明確にする必要があります。これは、解答の詳細に影響を与える可能性があります。 –
@Sean Houlihane私はARMv7 Cortex-A9を使用しています – xiaokaoy