私は、200 ミリ秒以内にシリアル ポートからメッセージを確認する必要がある組み込み Linux プロジェクトに取り組んでいます。リアルタイムのバリアントを使用していない場合、Linux がその制限時間内に応答することを保証することは不可能ではないでしょうか? ハードウェアは、Debian を実行する 200MHz ARM です。現在使用しているカーネルバージョンは「2.6.32 #1 SMP PREEMPT」です。また、ここで PREEMPT が何を意味するのかを正確に知りたいです。
2 に答える
プリエンプティブとは、適切な優先度を持つ任意のタスクが、OS のスケジューラで実行されているタスクをいつでも中断できることを意味します。この機能を使用すると、タイミング制約のあるタスクがその要件を満たすことができることを保証できます。
以下の図は、スケジューリングが何を行っているかを正確に示しています。
今日では、ほぼすべての一般的な OS が、ユーザー空間でのプリエンプティブ スケジューリングをサポートしています。ただし、カーネル空間 (ドライバー、その他の重要なカーネル タスク) では、この種のスケジューリングはサポートされていないため、RTLinux やお使いの OS、Debian SMP PREEMPTなど、OS で完全なプリエンプティブ スケジューリングをサポートしようとするイニシアチブがあります (それをハードリアルタイムシステム)。
そうです、カーネルはアプリケーションに必要なタイミング制約を提供します。
これは、リアルタイム カーネルであることを意味します。プリエンプトとは、アクションを中断または停止することを意味します。そのため、カーネルに irq 要求が届くと、カーネルは実行中の処理を即座に停止し、irq を処理します。そのため、シリアル バスまたはオーディオ入力で発生するイベントにリアルタイムで応答できます。
私は必要に応じてビルド リアルタイム カーネル (通常はオーディオ アプリケーション) を使用します。これは、バニラ カーネルに追加してプリエンプティブ (リアルタイム) にする一連のパッチです。
200 ミリ秒でシリアル リクエストに応答できるかどうかは、テストしないとわかりませんが、それは間違いなく可能に思えます。
Debian、RedHat、およびプリエンプティブ カーネルを備えたその他のディストリビューションに加えて、RTLinux のようなリアルタイム Linux 専用のディストリビューションがあり、それらのほとんどに ARM バージョンがあると思います。