Decouplingとは分離を意味する単語で、SDV開発の文脈においてはソフトウェア/ハードウェアの分離や、安全/セキュリティレベルの異なるソフトウェア同士の分離を指します。
本記事では、安全機能のDecouplingが必要な背景とその具体的な方法をご紹介します。
「安全機能のDecoupling」 が必要な背景
自動車産業向けの展示会/セミナーでは Software Define Vehicle、SDVという言葉は必ず耳にします。
経済産業省と国土交通省が策定した「モビリティDX戦略」による SDV 定義は『クラウドとの通信により、自動車の機能を継続的にアップデートすることで、運転機能の高度化など従来自動車にない新たな価値が実現可能な次世代の自動車』と定義されています。
「自動車の機能を継続的にアップデート」という言葉があらわすように、今後の自動車向けソフトウェア開発は量産開始が終わりではなく、量産後にもOTAを通じ様々なソフトウェアを追加/更新し続ける必要があります。
このような事からSDVは、よく「自動車のスマートフォン化」と表現されます。
しかし、自動車とスマートフォンでは要求が異なります。その一つが高い安全性です。
例えば、スマートフォンで地図データの更新等は頻繁に行われますが、まれにデータ更新の処理に問題が発生してアプリケーションが動かなくなることがあり、場合によってはシステム自体が停止するケースもあります。
自動車の場合はシステムが停止することはもちろん、地図データだとしても利用するのが自動運転システムであれば、搭乗者の生命を危険にさらす可能性が高いため、これらのアプリケーションの停止は許容されることではありません。
マップアプリケーションが意図しない振る舞いをしても、「走る」「曲がる」「止まる」といった自動車の基本的な制御機能は正常に動作する必要があります。
そのため、SDV 時代の自動車には搭乗者の生命に直接影響する安全機能とそれ以外の機能を非干渉化するDecoupling が必要不可欠です。
Decouplingの具体的な方法
安全機能とそれ以外の機能 のDecoupling方法例を 2 つご紹介します。
1 つ目のDecoupling方法は「CPUレベルで安全機能をDecoupling」する方法です。
近年のチップは複数の CPU アーキテクチャが混在するヘテロジニアス構成のチップが主流です。
ARMアーキテクチャを例にすると制御処理が得意なArm Cortex-MアーキテクチャCPUと高機能な処理が得意なArm Cortex-AアーキテクチャCPUの両方を搭載したCPU チップです。
ヘテロジニアス構成のチップでは安全機能とそれ以外の機能処理のプロセッサ割り当てを変更することで高い隔絶性を確保します。
前述のARMアーキテクチャを例にしますと、「走る」「曲がる」「止まる」など安全機能はArm Cortex-M プロセッサに割り当て、ナビゲーション、インフォテイメントなどの高機能はArm Cortex-Aプロセッサに割り当てることで、安全機能とそれ以外の機能を物理的にDecouplingします。
一方、CPU レベルの物理的なDecouplingは、システム構成の柔軟さに欠けます。
以下の例にあるように、1つのプロセッサ上での安全機能とそれ以外の機能の混在が困難になります。
- 安全機能向けCPUリソースに余裕があるため、安全機能とそれ以外の機能を 1つのCPU 上で混在させたい
- 安全機能向けCPU リソースに余裕がないため、一部の安全機能を高機能処理向けCPU 上で実行したい
そこで2 つ目のDecoupling方法は「ソフトウェアレベルで安全機能とそれ以外の機能をDecoupling 」する方法です。
ここでは、弊社 RTOS 製品である eMCOS® を例にし OS レベルでのDecoupling方法をご紹介します。
車載向けの機能安全規格であるISO 26262では以下の3つを安全の分離要求として定義しています。
- Timing and Execution
- Memory
- Exchange Information
eMCOS は「Timing and Execution」と「Memory」の分離方策を提供しています。
(Exchange Information は Application 間の通信であり、一般的には Platform 層で提供されるため、ここでの紹介は割愛します。)
まず、「Timing and Execution」の分離方策です。
eMCOS はスレッド、プロセスなどの処理単位に優先度を割り当て高優先度の処理を優先的に実行する「優先度制御スケジューリング」、複数のスレッドを階層的なグループに分け、各グループに対して異なるスケジューリングポリシー適用やグループ別に実行時間を割り当てる「階層型スケジューリング」、プロセスや仮想マシンに対して一定の待ち時間を順番に割り当てる「ラウンドロビンスケジューリング」の3つのスケジューリングを提供することで、安全処理とそれ以外の処理を「時間的に分離」しています。
次に、「Memory」の分離方策です。
eMCOSはMMU を使用したプロセスの実行領域空間の分離、ハイパーバイザー等の仮想化拡張によるバーチャルマシン分離などの一般的な空間分離に加え、デバイスドライバやミドルウェアなどのシステムサービスとOS との空間分離を提供しています。
一般的にはシステムサービスとOSは同一の空間に配置されますが、システムサービスとOSを同一空間に配置するとシステムサービスに障害が発生した際、分離方策機能を提供しているOSまで影響を及ぼす可能性があります。
例えば、ネットワークスタックの脆弱性に起因する障害が発生するとOSまで影響し、最悪の場合はシステム全体の停止を引き起こしてしまいます。
eMCOS はシステムサービスとOSをそれぞれ別の空間に配置することで、システムサービスの障害や脆弱性の影響をOSが受けない構成を採用してシステム全体の安全性を向上させています。
これらの「ソフトウェアレベルで安全機能とそれ以外の機能をDecoupling」は、CPU レベルの物理的なDecoupling より隔絶性は低いですが、柔軟なシステム構成が実現可能です。
最後に
本記事では、SDV 実現に安全機能の Decoupling が必要な背景とDecoupling の具体的な方法をご紹介しました。
イーソルは、世界トップクラスの車載ソフトウェア技術や長年のリアルタイムOSの開発実績を活かし、お客様のシステム開発に最適な製品やサービスの提供を行っています。
お客様のご要望に対し柔軟なご提案が可能ですので、ご検討の場合はぜひお気軽にご相談ください。
ビジネスマネジメント本部 技術営業部 T.M