ハードウェアI / O中のプリエンプションはどのように機能しますか?

ハードウェアI / O中のプリエンプションはどのように機能しますか?

たとえば、Linuxを実行しているマイコンピュータ(Raspberry Piなど)と通信するためにSPIまたは他の通信プロトコルを使用するデバイスがあるとします。この通信が成功するには、中断は許可されません。しかし、Linuxでは、プロセスを中断して次のプロセスを実行するためにコンテキスト切り替えを実行しませんか?私が説明した場合、このようなことが起こらないのはなぜですか?凍りついたと思いますか?

また、クロック信号がハイまたはローになったときにピアが正しくデータを書き込んだり読み取ったりすることをどのように保証できますか?ピアが時計を変更したときに監視する以外の操作を行うとどうなりますか? Arduinoが他のタスクを実行している間、シリアルはどこかにバッファに格納されていますか?

ベストアンサー1

割り込み優先順位が入る場所は次のとおりです。

割り込みは優先順位の低い割り込みのみ中断できます(バックグラウンド処理は優先順位が最も低い)。プリエンプション割り込みは時間決定割り込みより優先順位が低いため、作業スイッチによって中断されません。待つ。

これを行うには、システム(ハードウェアとカーネル)デザイナーが従う必要があるいくつかの規則があります。

  • 時間が重要な割り込みの優先順位が高くなります。
  • 優先順位の高い割り込みはできるだけ早く作業を行い、邪魔にならないようにしてください。たとえば、データを移動したりデータを移動したりするようにハードウェアをより適切に設定した場合は、優先順位の低い割り込みまたは一般的なプロセスを実行するように要求できます。処理。

おすすめ記事