web-dev-qa-db-ja.com

ベアメタルエグゼクティブとは対照的に、OSでのプログラミングの利点は何ですか?

マルチコア環境(CaviumまたはTileraと考えてください)でCをプログラムする組み込みシステムアプリケーションが提示され、2つの環境から選択する必要があるとします。

SMPモードのLinuxでアプリケーションをコーディングするか、おそらく制御タスクを実行できるUP Linuxを実行するシングルコアを使用して、シンベアメタルエグゼクティブ(非常に最小限のRTOSなど)でアプリケーションをコーディングします。

この質問の目的のために、両方の環境が、1秒あたりの意味のあるアクションの数、ジッター、待ち時間、リアルタイムの考慮事項-作業など、ランタイムパフォーマンスの測定可能な側面で同じレベルのパフォーマンス保証を提供すると仮定します。 (そして、はい、私はこれがまったく簡単な仮定ではないことを理解しています、私と一緒に裸で)。

ベアメタルシンエグゼクティブソリューションではなく、Linux SMPベースのソリューションをどのように正当化しますか?

質問はばかげているように見えるかもしれません。それは確かに私には明らかなようです-しかし、私は同じことを考えていない誰かを説得する必要があります。パフォーマンスの保証が問題ではないと想定して、実際のSMP対応OS(Linux)とベアメタルエグゼクティブのどちらを選ぶかを支持して、議論のリストを作るのを手伝っていただけませんか?

どうもありがとう

4
gby

最初の利点は次のとおりです。

  • オペレーティングシステムはメモリ保護を強制し、一部のタスクをスーパーバイザモードで実行し、その他のタスクをユーザーモードで実行できるため、コードの安全性を確保します。数年前、非常に人気のあるクラスがあったときRTOSこれがフラットな共有メモリ領域を使用しているのにショックを受けました。これが一般的かどうかはわかりませんが、後ろにジャンプします。
  • ドライバを介して多くの周辺機器の幅広いサポートを利用できます。
  • デバイスが利用できない場合、ドライバーは、デバイスの使用に伴うすべてのものではなく、対応するスタックに合わせるために必要な機能のみを実装できます。通常、少なくとも1つの同様のデバイスが作成されており、例として使用できます。
  • Linuxのスレッドセーフサポートには、コンパイラまたはライブラリレベルのサポートがある場合があります。幹部がいる場合、これが不足している可能性があり、自分で提供する必要がある場合があります。幹部がアクティブなユーザーベースを持っている場合、購入またはオープンソースを介して利用可能なライブラリの組み合わせがあるかもしれませんが、品質はコミュニティが提供するサポートの幅と深さに依存する可能性があります。注意してコミュニティを選択してください。
  • 実際のオペレーティングシステムに付属するすべての手荷物なしで開始する場合、これらの追加機能なしではうまくいかないまでどのくらいかかりますか?誰がそれらを作成、統合、保守しているのですか?

お役に立てれば。

6
DeveloperDon
  1. 携帯性
  2. スレッドのサポート
  3. 成熟したOSコードを再利用する場合は、OSのパーツ(デバイスドライバーなど)を独自のコードに置き換える場合よりもバグが少なくなります。
  4. Cライブラリの取得/作成ははるかに簡単です。
  5. Linuxなどの一般的なOSを使用すると、問題の答えを見つけるのがはるかに簡単になります。

そうは言っても、私があなたが納得させようとしている男だったとしても、ベアメタルコードで得られるのとまったく同じパフォーマンスを得ることができると言っても、私は感心しません。それはナンセンスです。

一方、違いは特定のアプリケーションにとって重要ではないほど小さいか、または違いは重要であるが、OSの利点はそれでも価値があるほど十分に大きいと私に納得させることができます。ただし、違いがあることを認めてください。あなたがそうしないなら、なぜ彼はあなたの分析を信頼すべきですか?

3
Jim Clay