これは簡単な質問です。freeRTOSは、「実際の」Linuxシステムと同じように、複数のプロセスで複数のスレッドを処理しますか?
5 に答える
FreeRTOSはLinuxではなく、そのふりもしていませんが、26の異なるコアをサポートしているため、それ自体がクロスプラットフォームの標準カーネルですが、マイクロプロセッサではなくマイクロコントローラ用に設計されています。ただし、これらのコアのほとんどはMMUを使用しないため、プロセスの概念はありません。必要に応じて、すべてのタスクは「スレッド」であり、単一の「プロセス」で実行されます。そのため、混乱を招かないように「タスク」という用語を使用しています。MPUの使用をサポートするFreeRTOSバージョンがありますが、これにより、MMUのようにメモリのパーティション分割とアクセス権が可能になりますが、仮想アドレス空間ではなく線形アドレス空間になります。
FreeRTOSは、ここに記載されている単純な優先度スケジューラを使用します。
Linuxのようにスレッドを処理することの意味はわかりませんが、すべてのスレッドの優先度が同じである場合は、CPU時間を公平に割り当てる必要があります。
はい、rmmhは正しいです。同様の優先度を持つタスクには、CPU時間も割り当てられます。これは、次のWebサイトから確認できます。
http://www.freertos.org/implementation/a00007.html
追加のポイントとして、FreeRTOSは、その名前が示すように、リアルタイムオペレーティングシステムです。そうは言っても、FreeRTOSは、Linuxのようなタイムシェアリングシステムのように機能するように構成でき、その逆も可能です。
お役に立てば幸いです。乾杯!
いいえ。(無料)RTOSは通常、Linuxなどの一般的なGPOSで使用されているものと同じプロセスとスレッドの考え方を持っていません。混乱を避けるために、代わりに「タスク」という用語がよく使用されます。
そうは言っても、FreeRTOSの実行スレッド-inna-taskの一種であるFreeRTOSコルーチンを見ることができるかもしれません。
すべてのプロセス/スレッド/タスクには独自のスタックがあります。FreeRTOSは、その目的のためにヒープからメモリを割り当てます。これは、コンテキストをTask_AからTask_Bに切り替えるときにFreeRTOSが行うことです。(1)すべてのコンテンツをCPUレジスタからTask_Aのスタックにプッシュします。(2)CPUスタックポインタがTask_AではなくTask_Bのスタックを参照するようにします。(3)Task_Bのスタックには、Task_Bがスリープ状態になったときのCPUの「保存されたステータス」を表すCPUレジスタが一番上にあります。今こそ、これらの値をCPUレジスタに復元するときです。(4)タスクBの実行を続行します。
このコンテキストスイッチは通常、FreeRTOSでは非常に定期的に発生します。このようにして、FreeRTOSオペレーティングシステムは、最も優先度の高いすべてのタスクがCPU時間の一部を確実に取得できるようにします。優先度の低いタスクは、優先度の高いタスクを実行できない場合にCPU時間を取得します。彼らがキューを待っているとき、セマフォ、..
FreeRTOSは、私が知る限り、マルチコアをサポートしていません。FreeRTOSは通常、CPUコアが1つしかない小さなマイクロコントローラーで実行されます。