リアルタイムはシステム全体の特性です。システムでリアルタイムの特性を実現するには、そのすべてのコンポーネント(ハードウェア、オペレーティングシステム、ドライバー、ライブラリ、およびアプリケーションを含む)を、リアルタイムシステムに適用される要件を考慮して設計する必要があります。このようなコンポーネント(RTOSなど)を使用して、リアルタイムシステムを構築できます。しかし、それらの使用法は、最終的なシステムがリアルタイムシステムになることを自動的に意味するわけではありません。実際、システムのコンポーネントの少なくとも1つがリアルタイムシステムの要件をサポートしていない場合、システム全体がリアルタイムになることはありません。
リアルタイムシステムには通常、リアルタイムタスクの平均要件を大幅に超えるリソースがあります。未消費のリソースは、ロギング、システム状態の監視、統計の収集と分析など、有用であるが重要ではないバックグラウンドタスクを実行するために使用できます。このタスクを実行するアプリケーションは、上で実行される非リアルタイムコンポーネントとして設計できます。リアルタイムコンポーネントの。この設計は、リアルタイムタスクに参加するすべてのコンポーネントがリアルタイムの要件をサポートしていることが確実な場合に安全です。あなたの質問に対するこの直接の答えのために:
それは完全にアプリケーションに依存します。一般に、リアルタイムタスクの処理に使用されないすべてのコードは、非リアルタイムとして記述できます。リアルタイムタスクの処理に使用されるすべてのコードは、リアルタイムとして記述されている必要があります。
Xenomaiが行っているのは、非リアルタイムLinuxと、RTOSカーネル上で実行されRTOSベースのリアルタイムタスクと並行して実行される特別なコンテナー内の非リアルタイムタスクの処理に使用されるそのアクティビティの分離です。 。Xenomaiベースでリアルタイムシステムを構築するには、アプリケーションはXenomai APIと、リアルタイムであることがわかっていることが証明されている他のライブラリとAPIのみに依存する必要があります。有用であるが完全に重要ではないすべてのバックグラウンドアクティビティは、通常のLinuxアプリケーションとして記述できます。
ストレージやネットワークサービスなどのシステムやサービスは、通常、リアルタイムタスクでは使用されません。これは、一般的に使用されるハードウェアが非常に不確定であり、リアルタイムの概念にうまく適合しないためです。ネットワーク経由で5つのパケットを送信したり、HDDにファイルを書き込んだりするのにどれくらいの時間がかかるかを事前に言うのは難しいです。このため、このようなシステムのインターフェースは一般的ではありません。しかし、繰り返しになりますが、アプリケーションは必要なリアルタイムサービスを指示します。ストレージとネットワークアクションを含むリアルタイムタスクを想像できます。そのようなタスクの場合、設計者は、リアルタイムのストレージとネットワークサービスを提供するそのようなシステムコンポーネントを見つけることを余儀なくされます。ご覧のとおり、Xenomaiは候補ではありません。