24


11

リアルタイムOSが期限を逃すことなく期限に間に合うことができるのはどういうわけですか。 それともこれは単なる神話でしょうか(期限を守れないということではありませんか)。 通常のOSとどのように違うのですか。

12 Answer


28


期限を守ることは、あなたが書くアプリケーションの機能です。 RTOSは単に会議の期限を守るための機能を提供します。 また、大きなメインループで "ベアメタル"(RTOSなし)をプログラムして、期限を守ることもできます。

また、より一般的な目的のOSとは異なり、RTOSは非常に限られた一連のタスクと実行されているプロセスを持っています。

RTOSが提供する機能のいくつか:

  • 優先順位ベースのスケジューラ

  • システムクロック割り込みルーチン

  • 決定論的な振る舞い

優先度ベースのスケジューラ

ほとんどのRTOSは、個々のタスク/プロセスに対して32から256の優先順位を持っています。 スケジューラは最も高い優先度でタスクを実行します。 実行中のタスクがCPUを放棄すると、次に優先順位の高いタスクが実行されます。

システム内で最も優先順位の高いタスクは、次の条件を満たすまでCPUを使用します。

  • それは完了するまで走ります(すなわち それは自発的にCPUをあきらめます)

  • 優先順位の高いタスクが準備されます。その場合、元のタスクは新しい(優先順位の高い)タスクによって横取りされます。

開発者として、あなたの締め切りが守られるようにタスク優先順位を割り当てるのはあなたの仕事です。

システムクロック割り込みルーチン

RTOSは通常、時間に敏感な操作を実行することを可能にするある種のシステムクロック(500μSから100msまでのどこか)を提供します。 1msのシステムクロックがあり、50msごとにタスクを実行する必要がある場合は、通常、「50msでは、起こしてください」と言うことができるAPIがあります。 その時点で、タスクはRTOSがそれを起こすまで眠っているでしょう。

ただ目が覚めたからといって、その時点で正確に走るとは限らないことに注意してください。 それは優先順位次第です。 優先順位の高いタスクが現在実行されている場合は、遅れる可能性があります。

決定論的なふるまい

RTOSは、あなたが10のタスクを持っているのか、100のタスクを持っているのか、コンテキストの切り替え、次に優先順位の高いタスクが何であるのかなどを判断するのに長い時間を要しません。

一般に、RTOS操作はO(1)になろうとします。

RTOSの決定論的動作の主要な分野の1つは割り込み処理です。 割り込みラインが通知されると、RTOSは即座に正しい割り込みサービスルーチンに切り替わり、遅延なしで割り込みを処理します(現在実行中のタスクの優先順位に関係なく)。

ほとんどのハードウェア固有のISRは、プロジェクトの開発者によって書かれることに注意してください。 RTOSはすでにシリアルポート、システムクロック、ネットワークハードウェア用のISRを提供しているかもしれませんが、特殊なもの(ペースメーカー信号、アクチュエータなど)はRTOSの一部ではありません。

これは総括的な一般化であり、他のすべてと同様に、RTOSの実装にはさまざまな種類があります。 いくつかのRTOSは異なったことをしますが、上記の説明は既存のRTOSの大部分に適用できるはずです。


3


RTOSでは、注意が必要な最も重要なパラメータは、待ち時間の短縮と時間決定論です。 それはある特定の方針およびトリックに続くことによってそれが愉快にする。

GPOSでは、許容可能な待ち時間とともに、重要なパラメーターはハイスループットです。 時間決定論をGPOSに頼ることはできません。

RTOSにはGPOSのプロセス/スレッドよりもはるかに軽いタスクがあります。


2


それは彼らが期限を守ることができるということではありません、それはむしろ通常のOSではそのような期限がないのに対し、彼らは期限が固定されているということです。

通常のOSでは、タスクスケジューラはそれほど厳密ではありません。 つまり、プロセッサは1秒間に非常に多くの命令を実行しますが、実行しないこともあります。 たとえば、優先順位の高いタスクを実行できるようにタスクが横取りされる可能性があります(そして、より長い時間がかかる可能性があります)。 RTOSでは、プロセッサは常に同じ数のタスクを実行します。

さらに、失敗が報告されるまでのタスクの完了には通常制限時間があります。 これは通常のOSでは起こりません。

説明すべき詳細は明らかにたくさんありますが、上記はRTOSで使用されている2つの重要な設計上の側面です。


2


RTOSは、ハードウェア割り込み処理や必要なときにスリーププロセスを正確に起こすなど、重要なイベントのタイミングを保証できるように設計されています。

この正確なタイミングにより、プログラマーは、OSが別の非効率的なタスクで忙しかったため、数十ミリ秒後ではなく、必要なときに正確に自分の(たとえば)ペースメーカーがパルスを出力するようになります。

通常、本格的なLinuxやWindowsよりもはるかに単純なOSです。単純なコードの動作の分析と予測が簡単だからです。 RTOS環境でLinuxが使用されるような本格的なOSを止めるものは何もありません、そしてそれはRTOS拡張を持っています。 コードベースが複雑なため、タイミングを小さいOSほど小さく保証することはできません。

RTOSスケジューラは汎用スケジューラよりも厳密です。 あなたは長い間実行していて、対話型のユーザーがいないので、スケジューラがタスクの優先順位を変更しないことを知っておくことが重要です。 ほとんどのOSは、このタイプのプロセスの優先順位を内部的に下げて、インターフェースが遅れるとは思われないような短期間の対話型プログラムを優先します。


2


典型的なRTOSのソースを読むのが役に立つかもしれません。 そこにはいくつかのオープンソースの例があります、そして、以下はクイック検索のほんの少しの間にリンクをもたらしました:

よく文書化されており、ソースコード形式で入手可能であり、取り扱いが容易な市販のRTOSは μC/ OS-IIです。 それは教育的使用のための非常に寛容なライセンスを持っています、そしてそのソースは例のコードとして実際の実装を使ってその動作の理論を説明する本に束縛されることができました。 この本は、Jean Labrosseによる* https://rads.stackoverflow.com/amzn/click/com / 1578201039 * [MicroC OS II:リアルタイムカーネル]です。

私は長年にわたっていくつかのプロジェクトでµC / OS-IIを使用してきましたが、それを推奨できます。


0


重要なのはリアルタイムOSではなく、リアルタイムアプリケーションです。 通常リアルタイムのアプリケーションは予測可能です:多くのテスト、検査、WCET分析、証明、…​ 指定された状況で期限が守られていることを示すために実行されました。

RTOSがこの作業(アプリケーションの構築とRT制約の検証)を行うのに役立つことがあります。 しかし、私はリアルタイムアプリケーションが標準のLinux上で実行されているのを見て、OSの設計よりもハードウェアの処理能力に頼っています。


0


私はRTOSを使ったことはありませんが、これが彼らの働き方だと思います。

「ハードリアルタイム」と「ソフトリアルタイム」には違いがあります。 WindowsのようなRTOS以外でリアルタイムアプリケーションを書くことができますが、それらは「ソフト」リアルタイムです。

  • アプリケーションとして、O / Sに尋ねるスレッドまたはタイマーがあるかもしれません 1秒間に10回実行するには…​ ほとんどの場合、O / Sがそれを実行する可能性がありますが、それが常に可能になるという保証はありません…​ これが「ソフト」と呼ばれる理由です。 O / Sができない理由は、別のスレッドがシステムを他のことをしてビジー状態にしている可能性があるためです。 アプリケーションとして、スレッドの優先度を例えば `+ HIGH_PRIORITY_CLASS +`に上げることができますが、これを行ってもO / Sには特定の実行を保証する*保証*を要求するために使用できるAPIがまだありません回。

  • 「ハード」リアルタイムO / Sには(私が想像するように)要求できるAPIがあります 保証された実行スライス。 RTOSがそのような保証をすることができる理由は、予想以上に時間がかかるスレッドを異常終了させたいという理由からです。


0


  1. well …​

リアルタイムオペレーティングシステムは確定的で期限を守ろうとしますが、それはすべてアプリケーションの作成方法に依存します。 「適切な」コードの書き方がわからない場合は、RTOSを非常に非リアルタイムにすることができます。

あなたが正しいコードを書く方法を知っていても:それは速くなることよりも決定論的であることを試みることに関するものです。

決定論について話すとき

1)イベント決定論

入力の各セットに対して、システムの次の状態と出力は既知です。

{空} 2)時間的決定論

…また、各出力セットの応答時間もわかっています

つまり、割り込みなどの非同期イベントが発生した場合、システムは厳密に言えば時間的な決定論的なものではなくなります。 (そしてほとんどのシステムは割り込みを使用します)

あなたが本当に決定論的になりたいのであれば、すべてを調べてください。

  1. but maybe it’s not necessary to be 100% deterministic


0


教科書/インタビューの答えは「決定論的横取り」です。 システムは、優先順位の高いプロセスが実行可能な状態(レディキュー内)にある場合、または割り込みがアサートされた場合(通常はCPU / MCUの外部からの入力)、制限時間内に制御を転送することが保証されます。


0


彼らは実際には会議の締め切りを保証するものではありません。彼らが本当にRTOSにしているのは、期限超過を認識して対処する手段を提供することです。 'ハード' RTシステムは一般的に期限を逃すのが悲惨である種のシャットダウンが要求されるものですが、 'ソフト' RTシステムは機能の低下を続けることが意味のあるものです。 いずれにせよ、RTOSはあなたがそのようなオーバーランに対する応答を定義することを可能にします。 RT以外のOSはオーバーランさえ検出しません。