以下、本開示の例示的な実施形態について図面を参照しながら説明する。
[1.第1実施形態]
[1-1.構成]
図1に示す電子制御装置1(以下「ECU1」という。)は、車両に搭載されて使用される。なお、ECUは、Electronic Control Unitの略である。ECU1は、マイクロコンピュータ2(以下「マイコン2」という。)を中心に構成される。
マイコン2は、CPU21と、メモリ22と、入出力部23と、バス24と、を備える。本実施形態では、CPU21は、シングルコアCPUである。メモリ22は、RAM、ROM、フラッシュメモリ等の半導体メモリである。入出力部23は、マイコン2の外部とマイコン2との間でデータの入出力を行わせるための回路である。バス24は、CPU21、メモリ22及び入出力部23を、互いにデータ入出力可能に接続する。マイコン2の各種機能は、CPU21が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。本実施形態では、メモリ22が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムが実行されることで、プログラムに対応する方法が実行される。
メモリ22には、2つのゲストOSである、第1ゲストOS30及び第2ゲストOS40のプログラムが格納されている。ゲストOSは、各種アプリを動作させるための基本ソフトウェアである。さらに、メモリ22には、ハイパーバイザ50のプログラムが格納されている。ハイパーバイザ50は、複数のゲストOSをCPU上で並列に実行可能とするために複数のゲストOSを管理する機能を有する。すなわち、ハイパーバイザ50は、第1ゲストOS30及び第2ゲストOS40の実行タイミングをスケジューリングする。
さらに、メモリ20には、第1ゲストOS30上で動作するアプリA,Bのプログラムが格納されているとともに、第2ゲストOS40上で動作するアプリC,Dのプログラムが格納されている。アプリA~Dは、ECU1の搭載車両の出荷時から存在するアプリ(以下「既存アプリ」ともいう。)である。また、図1及び図2に破線で示すアプリEは、ECU1に新たに追加されるアプリ(以下「追加アプリ」ともいう。)である。本実施形態では、追加アプリEは、第2ゲストOS40上で動作するようにECU1に追加される。アプリの追加時に、追加アプリEのプログラムがメモリ22に格納される。
各アプリは、図示しないタイマのカウントに基づいて、予め設定された一定の周期で繰り返し実行されるように構成されている。ここでは、当該周期、すなわち、アプリの実行タイミングの周期をアプリ動作周期という。本実施形態では、アプリA及びアプリBのアプリ動作周期は1ms、アプリC及びアプリDのアプリ動作周期は2ms、アプリEのアプリ動作周期は3msである。
図2に示すように、第1ゲストOS30は、CPU21が第1ゲストOS30のプログラムを実行することで実現される機能の構成として、追加処理部31と、OS動作周期算出部32と、を備える。同様に、第2ゲストOS40は、CPU21が第2ゲストOS40のプログラムを実行することで実現される機能の構成として、追加処理部41と、OS動作周期算出部42と、を備える。なお、第1ゲストOS30及び第2ゲストOS40の機能は同一であるため、以下にまとめて説明する。
追加処理部31,41は、上記プログラムに従い、後述する図6に示すアプリ追加処理を実行する。
OS動作周期算出部32,42は、上記プログラムに従い、後述する図7に示す再計算周期通知処理を実行する。
ハイパーバイザ50は、CPU21がハイパーバイザ50のプログラムを実行することで実現される機能の構成として、通信部51と、入出力モニタ部52と、テーブル変更部53と、スケジューリング部54と、を備える。
通信部51は、アプリ追加要求及びアプリデータを、追加処理部31,41へ送信する。アプリ追加要求及びアプリデータは、ECU1へアプリが追加される際に、外部装置から有線通信又は無線通信により送信され、マイコン2へ入力されたものである。外部装置とは、ECU1に対してアプリの追加を行うために用いられる、車両の外部に存在する装置である。例えば、外部装置は、ディーラ等でECU1に有線接続された端末であってもよいし、OTAサーバであってもよい。なお、OTAはOver The Airの略である。アプリ追加要求は、追加処理部に対して新たなアプリの追加を要求する信号である。アプリデータは、追加アプリのデータである。アプリデータには、追加アプリを動作させるために必要なプログラム及びデータが含まれる。さらに、アプリデータには、アプリ動作周期を示す情報であるアプリ動作周期情報が付与される場合がある。なお、アプリが追加されるゲストOSの追加処理部がアプリデータの保存を行うため、通信部51は、アプリが追加されるゲストOSの追加処理部にアプリ追加要求及びアプリデータを送信する。本実施形態では、追加アプリEは第2ゲストOS40に追加されるため、通信部51は、第2ゲストOS40の追加処理部41にアプリ追加要求及びアプリデータを送信する。
入出力モニタ部52は、上記プログラムに従い、後述する図8に示す推測周期通知処理を実行する。
テーブル変更部53は、上記プログラムに従い、後述する図9に示すテーブル変更処理を実行する。テーブル変更処理により、後述するOS動作周期テーブル541が変更される。
スケジューリング部54は、各ゲストOSのOS動作周期が登録されているOS動作周期テーブル541を有しており、OS動作周期テーブル541に基づくスケジューリングを行う。OS動作周期とは、各ゲストOSについて当該ゲストOS上のアプリのアプリ動作周期に基づいてあらかじめ設定された実行タイミングの周期である。各ゲストOSは、スケジューリングにより設定された所定の周期で実行タイミングが到来して実行され、各実行タイミングにおいて実行されることにより所定の時間だけ動作する。
本実施形態では、OS動作周期とは、ゲストOS上のアプリすべてが各々のアプリ動作周期に従って正常に動作するために適した、ゲストOSの実行タイミングの周期の最大値である。具体的には、OS動作周期は、ゲストOS上のアプリすべてのアプリ動作周期の最大公約数として算出される。すなわち、ECU1の搭載車両の出荷時には、第1ゲストOS30のOS動作周期は、既存アプリA及び既存アプリBのアプリ動作周期の最大公約数である1ms、第2ゲストOS40のOS動作周期は、既存アプリC及び既存アプリDのアプリ動作周期の最大公約数である2msであり、これらのOS動作周期がOS動作周期テーブル541に登録されている。そして、アプリEが追加されると、第2ゲストOS40のOS動作周期は、既存アプリC、既存アプリD及び追加アプリEのアプリ動作周期の最大公約数である1msとなる。一方、第1ゲストOS30のOS動作周期は、アプリEの追加前後に関わらず、既存アプリA及び既存アプリBのアプリ動作周期の最大公約数である1msである。ゲストOSが少なくともOS動作周期で実行されることにより、ゲストOS上のアプリすべてについて、ゲストOSの動作中にアプリの実行タイミングが到来するようにできるため、ゲストOS上のアプリすべてをアプリ動作周期で実行できる。このため、ゲストOS上のアプリすべてを正常に動作させることができる。なお、ゲストOS上の各アプリが実行タイミングにおいて実行されることによるアプリの動作時間の合計は、ゲストOSが実行タイミングにおいて実行されることによるゲストOSの動作時間よりも短い。
スケジューリング部54は、OS動作周期テーブル541に登録されたOS動作周期に基づいて、各ゲストOSの実行タイミングをスケジューリングする。スケジューリング方法としては、例えば、スケジューリング部54は、所定の周期で到来する基準タイミングを生成し、当該基準タイミングの1周期であるタイムスライスにおいて各ゲストOSに順次実行権を付与することで、各ゲストOSを並行して動作させるようにしてもよい。この場合に、各ゲストOSのOS動作周期の最大公約数をタイムスライスとして設定してもよい。このようにタイムスライスを設定することで、各ゲストOSが少なくともOS動作周期で実行されるように、各ゲストOSの実行タイミングをスケジューリングできる。
[1-2.処理の概要]
次に、ECU1にアプリが追加されることによりOS動作周期テーブル541が変更される際の処理の概要について、図3~図5のタイミングチャートを用いて説明する。OS動作周期テーブル541が変更される際の処理の流れは、アプリの追加方法や追加アプリのアプリ動作周期情報の有無によって異なる。
<OS動作周期テーブルが手動変更される場合>
図3は、ディーラでECU1に新たなアプリEを追加する場合における、OS動作周期テーブル541の変更処理の流れを示している。ディーラでは、ECU1に有線接続された端末を操作者が操作することにより、ECU1に新たなアプリを追加する。また、アプリを追加する際に、端末にてOS動作周期テーブル541を読み出し、アプリの追加によりOS動作周期テーブル541の変更が必要となるかの確認を行い、変更が必要である場合、端末の操作によりOS動作周期テーブル541の変更を行う。このように、ディーラ等の端末でアプリを追加する場合は、アプリの追加に合わせて、手動でOS動作周期テーブル541を直接変更することができる。具体的な処理の流れについて以下で説明する。
操作者の端末操作により、S101で、端末から第2ゲストOS40の追加処理部41へアプリ追加要求が送信されると同時に、S102で、端末から追加処理部41へアプリデータが送信される。
アプリ追加要求を受信した追加処理部41は、後述するアプリ追加処理を進める。具体的には、S103で、追加処理部41は、受信した追加アプリEのアプリデータをメモリ22に保存する。
次に、操作者が端末にてハイパーバイザ50のOS動作周期テーブル541を読み出し、アプリEの追加によりOS動作周期テーブル541に登録されている第2ゲストOS40のOS動作周期の変更が必要となるか否かを確認する。変更が必要と判断される場合、操作者の端末操作により、S104で、端末からハイパーバイザ50のテーブル変更部53へOS動作周期情報が送信される。OS動作周期情報とは、アプリが追加されるゲストOSの新たなOS動作周期を表す情報である。具体的には、OS動作周期情報とは、追加アプリのアプリ動作周期も考慮して算出された、当該追加アプリが追加されるゲストOSのOS動作周期を表す情報である。なお、ディーラでは、追加アプリのアプリ動作周期及びアプリ追加後のゲストOSのOS動作周期を予め把握しているため、OS動作周期の変更の必要性の確認及びOS動作周期情報の送信を手動で行うことが可能である。本実施形態では、上述したように、第2ゲストOS40のOS動作周期は、アプリEの追加前は2msであるが、アプリEの追加後は1msであるため、アプリEの追加によりOS動作周期テーブル541に登録されている第2ゲストOS40のOS動作周期を変更する必要があると判断される。
S105で、テーブル変更部53は、OS動作周期テーブル541に登録されている第2ゲストOS40のOS動作周期を、受信したOS動作周期情報により表されるOS動作周期に変更する。
アプリの追加及びOS動作周期テーブル541の変更が完了した後、ECU1の再起動が行われる。本実施形態では、操作者の端末操作により、S106で、端末からECU1へ、再起動を要求する信号である再起動要求が送信され、ECU1が再起動される。再起動を行うと、OS動作周期テーブル541の変更が反映されるため、変更後のOS動作周期で第2ゲストOS40を動作させることができ、第2ゲストOS40上で追加アプリEを正常に動作させることができる。
<OS動作周期テーブルが自動変更される場合であって、追加アプリのアプリ動作周期情報がある場合>
図4は、OTAによってECU1に新たなアプリEが追加される場合における、OS動作周期テーブル541の変更処理の流れを示している。OTAによってアプリを追加する場合は、アプリの追加時に、マイコン2で実行される処理により自動でOS動作周期テーブル541が変更される。図4では、追加アプリEのアプリデータにアプリ動作周期情報が付与されている場合を示している。具体的な処理の流れについて以下で説明する。
S201で、OTAサーバから第2ゲストOS40の追加処理部41へアプリ追加要求が送信されると同時に、S202で、OTAサーバから追加処理部41へアプリデータが送信される。当該アプリデータには、追加アプリEのアプリ動作周期情報が付与されている。
アプリ追加要求を受信した追加処理部41は、後述するアプリ追加処理を進める。すなわち、追加処理部41は、S203で、受信した追加アプリEのアプリデータをメモリ22に保存し、S204で、アプリ動作周期情報をOS動作周期算出部42へ送信する。
アプリ動作周期情報を受信したOS動作周期算出部42は、後述する再計算周期通知処理を進める。すなわち、OS動作周期算出部42は、S205で、追加アプリEのアプリ動作周期も含めて第2ゲストOS40のOS動作周期を再計算し、S206で、算出されたOS動作周期を表すOS動作周期情報をハイパーバイザ50のテーブル変更部53へ送信する。
OS動作周期情報を受信したテーブル変更部53は、後述するテーブル変更処理を進める。すなわち、S207で、テーブル変更部53は、OS動作周期情報に基づいて、OS動作周期テーブル541に登録されている第2ゲストOS40のOS動作周期の変更が必要であるか否かを判定する。変更が必要であると判定された場合、テーブル変更部53は、S208で、OS動作周期テーブル541を変更し、S209で、追加アプリの起動を要求する信号であるアプリ起動要求を追加処理部41へ送信する。本実施形態では、OS動作周期テーブル541の変更と同時にアプリ起動要求が送信される。
S210で、追加処理部41は、追加アプリEを起動させる。追加アプリEは、第2ゲストOS40のOS動作周期が変更されると同時に起動されて動作を開始するため、第2ゲストOS40上で追加アプリEを正常に動作させることができる。
<OS動作周期テーブルが自動変更される場合であって、追加アプリのアプリ動作周期情報がない場合>
図5は、OTAによってECU1に新たなアプリEが追加される場合における、OS動作周期テーブル541の変更処理の流れを示している。図5では、追加アプリEのアプリデータにアプリ動作周期情報が付与されていない場合を示している。具体的な処理の流れについて以下で説明する。
S301で、OTAサーバから第2ゲストOS40の追加処理部41へアプリ追加要求が送信されると同時に、S302で、OTAサーバから追加処理部41へアプリデータが送信される。当該アプリデータには、追加アプリEのアプリ動作周期情報は付与されていない。
アプリ追加要求を受信した追加処理部41は、後述するアプリ追加処理を進める。すなわち、追加処理部41は、S303で、受信した追加アプリEのアプリデータをメモリ22に保存し、S304で、追加アプリEを仮起動させる。
追加アプリEのアプリ動作周期情報がないため、図4の場合のようにOS動作周期算出部42でOS動作周期を再計算できないことから、ハイパーバイザ50の入出力モニタ部52において、後述する推測周期通知処理によりOS動作周期の推測が行われる。入出力モニタ部52は、各ゲストOSについて、ゲストOSへのデータの入出力情報をデータ種別ごとに常時記録して、当該入出力情報に基づいて算出されるデータ種別ごとの入出力周期を監視しており、S305で、当該入出力周期に変化があった場合はこれを検知する。本実施形態では、第1ゲストOS30については、追加アプリEの仮起動前後にわたって、既存アプリA及び既存アプリBによる入出力情報が記録されるため、算出される入出力周期に変化はない。一方、第2ゲストOS40については、追加アプリEの仮起動前は、既存アプリC及び既存アプリDによる入出力情報が記録されるのに対して、追加アプリEの仮起動後は、既存アプリC及び既存アプリDによる入出力情報に加えて追加アプリEによる入出力情報も記録されるようになるため、追加アプリEによる入出力周期が新たに算出されるようになり、入出力周期の変化が検知される。そして、S306で、入出力モニタ部52は、入出力周期の変化が検知された第2ゲストOS40について、算出された入出力周期に基づいて、追加アプリEのアプリ動作周期も考慮した第2ゲストOS40のOS動作周期を推測する。なお、OS動作周期の推測方法の詳細については後述する。S307で、入出力モニタ部52は、推測されたOS動作周期を表すOS動作周期情報をハイパーバイザ50のテーブル変更部53へ送信する。
OS動作周期情報を受信したテーブル変更部53は、後述するテーブル変更処理を進める。すなわち、S308で、テーブル変更部53は、OS動作周期情報に基づいて、OS動作周期テーブル541に登録されている第2ゲストOS40のOS動作周期の変更が必要であるか否かを判定する。変更が必要であると判定された場合、テーブル変更部53は、S309で、OS動作周期テーブル541を変更し、S310で、追加アプリの再起動を要求する信号であるアプリ再起動要求を追加処理部41へ送信する。本実施形態では、OS動作周期テーブル541の変更と同時にアプリ再起動要求が送信される。
S311で、追加処理部41は、追加アプリEを再起動させる。追加アプリEは、第2ゲストOS40のOS動作周期が変更されると同時に再起動されて動作を開始するため、第2ゲストOS40上で追加アプリEを正常に動作させることができる。
[1-3.処理]
次に、アプリEが追加される第2ゲストOS40において実行されるアプリ追加処理、再計算周期通知処理及び推測周期通知処理、並びに、ハイパーバイザ50において実行されるテーブル変更処理について、図6~図9のフローチャートを用いて説明する。
<アプリ追加処理>
第2ゲストOS40の追加処理部41が実行するアプリ追加処理について、図6を用いて説明する。なお、アプリ追加処理は、ECU1の電源がオンされることにより開始される。
まず、S401で、追加処理部41は、アプリ追加要求を受信したか否かを判定する。追加処理部41は、S401でアプリ追加要求を受信していないと判定した場合、S401の処理を繰り返す。
一方、追加処理部41は、S401でアプリ追加要求を受信したと判定した場合、処理をS402へ移行する。
S402で、追加処理部41は、追加アプリEのアプリデータを受信したか否かを判定する。追加処理部41は、S402で追加アプリEのアプリデータを受信していないと判定した場合、S402の処理を繰り返す。
一方、追加処理部41は、S402で追加アプリEのアプリデータを受信したと判定した場合、処理をS403へ移行する。
S403で、追加処理部41は、追加アプリEのアプリデータをメモリ22に保存する。
続いて、S404で、追加処理部41は、OS動作周期テーブル541が手動変更される場合であるか否かを判定する。例えば、追加処理部41は、S401で受信したアプリ追加要求がディーラ等の端末から送信されたものであった場合に、OS動作周期テーブル541が手動変更される場合であると判定する。追加処理部41は、S404でOS動作周期テーブル541が手動変更される場合であると判定した場合、処理をS401に戻す。
一方、追加処理部41は、S404でOS動作周期テーブル541が手動変更される場合でないと判定した場合、処理をS405へ移行する。
S405で、追加処理部41は、追加アプリEのアプリ動作周期情報があるか否かを判定する。具体的には、追加処理部41は、S402で受信したアプリデータに追加アプリEのアプリ動作周期情報が付与されているか否かを判定する。
追加処理部41は、S405で追加アプリEのアプリ動作周期情報があると判定した場合、処理をS406へ移行する。
S406で、追加処理部41は、追加アプリEのアプリ動作周期情報をOS動作周期算出部42へ送信する。
続いて、S407で、追加処理部41は、ハイパーバイザ50のテーブル変更部53からアプリ起動要求を受信したか否かを判定する。追加処理部41は、S407でアプリ起動要求を受信していないと判定した場合、S407の処理を繰り返す。
一方、追加処理部41は、S407でアプリ起動要求を受信したと判定した場合、処理をS408へ移行する。
S408で、追加処理部41は、追加アプリEを起動させた後、処理をS401に戻す。
追加処理部41は、S405で追加アプリEのアプリ動作周期情報がないと判定した場合、処理をS409へ移行する。
S409で、追加処理部41は、追加アプリEを仮起動させる。
続いて、S410で、追加処理部41は、ハイパーバイザ50のテーブル変更部53からアプリ再起動要求を受信したか否かを判定する。
追加処理部41は、S410でアプリ再起動要求を受信していないと判定した場合には、処理をS410に戻す。
一方、追加処理部41は、S410でアプリ再起動要求を受信したと判定した場合には、処理をS411へ移行する。
S411で、追加処理部41は、追加アプリEを再起動した後、処理をS401に戻す。
<再計算周期通知処理>
第2ゲストOS40のOS動作周期算出部42が実行する再計算周期通知処理について、図7のフローチャートを用いて説明する。なお、再計算通知処理は、追加処理部41から追加アプリのアプリ動作周期情報を受信したことを契機に開始される。
まず、S501で、OS動作周期算出部42は、アプリ動作周期情報に基づいて、アプリが追加されるゲストOSのOS動作周期を再計算する。具体的には、OS動作周期算出部42は、アプリ動作周期情報により表される追加アプリEのアプリ動作周期も考慮して、追加アプリEが追加される第2ゲストOS40のOS動作周期を再計算する。すなわち、OS動作周期算出部42は、第2ゲストOS40のOS動作周期を、追加アプリEも含めた第2ゲストOS40上のアプリすべて(すなわち、既存アプリC、既存アプリD及び追加アプリE)のアプリ動作周期の最大公約数である1msとして算出する。
続いて、S502で、OS動作周期算出部42は、S501で算出されたOS動作周期を表すOS動作周期情報をハイパーバイザ50のテーブル変更部53へ送信した後、図7の再計算周期通知処理を終了する。
<推測周期通知処理>
ハイパーバイザ50の入出力モニタ部52が実行する推測周期通知処理について、図8のフローチャートを用いて説明する。なお、推測周期通知処理は、ECU1の電源がオンされることにより開始される。
アプリが追加された際には、各ゲストOSの入出力周期の変化が検知されやすくするために、各ゲストOSの実行タイミングの周期が可能な限り短くなるように調整される。本実施形態では、追加アプリEの仮起動中は各ゲストOSの実行タイミングの周期が可能な限り短くなるように、ハイパーバイザ50にて調整される。
まず、S601で、入出力モニタ部52は、各ゲストOSについて、ゲストOSへのデータの入出力時刻をデータ種別ごとに記録する。すなわち、入出力モニタ部52は、各ゲストOSについて、ゲストOSへデータが入力された時刻(以下「OS入力時刻」という。)及びゲストOSからデータが出力された時刻(以下「OS出力時刻」という。)を、データ種別ごとに記録する。ゲストOSへ入力される入力データは、例えば、通信装置、スイッチ、AD変換器等の種々の入力装置から入力されるが、入出力モニタ部52は、入力データのデータ種別、すなわち、入力データがどのような入力装置から入力されたものであるかを識別できる。また、ゲストOSから出力される出力データは、例えば、通信装置、アクチュエータ等の種々の出力装置へ出力されるが、入出力モニタ部52は、出力データのデータ種別、すなわち、出力データがどのような出力装置へ出力されたものであるかを識別できる。入力データ及び出力データのデータ種別は、例えば、通信装置との間での入出力の場合は、データに含まれる通信ID等により識別される。このように、推測周期通知処理の各サイクルのS601において入出力時刻がデータ種別ごとに記録されることで、入出力モニタ部52には、各ゲストOSへのデータの入出力時刻の記録情報がデータ種別ごとに蓄積される。
ここで、ゲストOS上の各アプリは、実行タイミングにおいて実行されることにより、ゲストOSを介して入力装置からデータを入力する入力処理と、入力データに基づいて出力データ(例えば、制御対象を制御するためのデータ)を生成する制御処理と、生成された出力データをゲストOSを介して出力装置へ出力する出力処理とを、シーケンス的に進めるように構成されている。このため、各ゲストOSが持つ入出力のデータ種別の数は、ゲストOS上の各アプリが持つ入出力のデータ種別の数を合計したものになる。
本実施形態では、第1ゲストOS30上のアプリA及びアプリBそれぞれが、第1ゲストOS30を介して入力された異なる3種類の入力データに基づいて制御処理を行い、生成された異なる2種類の出力データを第1ゲストOS30を介して出力するように構成されている。よって、第1ゲストOS30については、6つのデータ種別ごとのOS入力時刻及び4つのデータ種別ごとのOS出力時刻が記録される。また、第2ゲストOS40上のアプリC、アプリD及びアプリEそれぞれが、第2ゲストOS40を介して入力された異なる3種類の入力データに基づいて制御処理を行い、生成された異なる2種類の出力データを第2ゲストOS40を介して出力するように構成されている。よって、第2ゲストOS40については、アプリEの追加前は、6つのデータ種別ごとのOS入力時刻及び4つのデータ種別ごとのOS出力時刻が記録され、アプリEの追加後は、9つのデータ種別ごとのOS入力時刻及び6つのデータ種別ごとのOS出力時刻が記録される。なお、第1ゲストOS30については、アプリが追加されないため、アプリEの追加前後において記録される入出力時刻のデータ種別の数に変化はない。
続いて、S602で、入出力モニタ部52は、各ゲストOSについて、今までに記録された入出力時刻に基づいて、データ種別ごとの入出力周期を算出する。すなわち、入出力モニタ部52は、各ゲストOSについて、今回以前のサイクルのS601において記録されたデータ種別ごとのOS入力時刻のうち、最新のOS入力時刻と最新から2番目のOS入力時刻との差分を、データ種別ごとに算出し、当該差分をデータ種別ごとの入力周期とする。同様に、入出力モニタ部52は、各ゲストOSについて、今回以前のサイクルのS601において記録されたデータ種別ごとのOS出力時刻のうち、最新のOS出力時刻と最新から2番目のOS出力時刻との差分を、データ種別ごとに算出し、当該差分をデータ種別ごとの出力周期とする。
上述したように、ゲストOS上の各アプリは、アプリの実行タイミングにおいて実行されることにより、入力処理、制御処理及び出力処理をシーケンス的に進める。このため、入力から次の入力までの時間である入力周期や、出力から次の出力までの時間である出力周期、すなわち、アプリにおけるデータの入力周期及び出力周期であるアプリ入出力周期は、アプリの実行タイミングの周期であるアプリ動作周期と同じとみなせる。また、ゲストOSにおけるデータの入力周期及び出力周期は、当該ゲストOS上のアプリのアプリ入出力周期と同じであるとみなせる。すなわち、あるゲストOSについて、あるデータ種別の入出力周期が算出された場合、当該入出力周期は、当該ゲストOS上のアプリのうち当該データ種別の入出力を持つアプリのアプリ動作周期と同じとみなせる。
本実施形態では、第1ゲストOS30については、入出力周期として、アプリEの追加前後において、6つのデータ種別ごとの入力周期及び4つのデータ種別ごとの出力周期が算出される。具体的には、第1ゲストOS30上のアプリA及びアプリBのアプリ動作周期は1msであるため、第1ゲストOS30の入出力周期は、1msの入力周期が6個、1msの出力周期が4個、算出される。また、第2ゲストOS40については、入出力周期として、アプリEの追加前は、6つのデータ種別ごとの入力周期及び4つのデータ種別ごとの出力周期が算出され、アプリEの追加後は、9つのデータ種別ごとの入力周期及び6つのデータ種別ごとの出力周期が算出される。具体的には、第2ゲストOS40上のアプリC及びアプリDのアプリ動作周期は2ms、アプリEのアプリ動作周期は3msであるため、アプリEの追加前は、第2ゲストOS40の入出力周期は、2msの入力周期が6個、2msの出力周期が4個、算出される。アプリEの追加後は、第2ゲストOS40の入出力周期は、2msの入力周期が6個、3msの入力周期が3個、2msの出力周期が4個、3msの出力周期が2個、算出される。
続いて、S603で、入出力モニタ部52は、今回のサイクルのS602で算出された入出力周期の算出値を、前回のサイクルのS602で算出された入出力周期の算出値と比較し、入出力周期の算出値に変化があったゲストOSがあるか否かを判定する。例えば、今回のサイクルのS602において、初めて、第2ゲストOS40の入出力周期の算出値に、追加アプリEによる入出力周期(すなわち、3msの入力周期が3個及び3msの出力周期が2個)の算出値が加わったとする。この場合、第2ゲストOS40については、前回のサイクルにおける入出力周期の算出値は2msが10個であったのに対して、今回のサイクルにおける入出力周期の算出値は2msが10個及び3msが5個となったこと、すなわち、入出力周期の算出値に変化があったことが検知される。なお、第1ゲストOS30については、アプリEの追加の前後において算出される入出力周期に変化はないため、入出力周期の算出値の変化は検知されない。よって、入出力モニタ部52は、第2ゲストOS40のみ入出力周期の算出値に変化があったことを検知し、入出力周期の算出値に変化があったゲストOSがあると判定する。
入出力モニタ部52は、S603で入出力周期の算出値に変化があったゲストOSがないと判定した場合には、処理をS601に戻す。
一方、入出力モニタ部52は、S603で入出力周期の算出値に変化があったゲストOSがあると判定した場合には、処理をS604へ移行する。
S604で、入出力モニタ部52は、入出力周期の算出値に変化があったゲストOSについて、当該ゲストOSの入出力周期の算出値に基づいてOS動作周期を算出する。具体的には、入出力モニタ部52は、入出力周期の算出値に変化があったゲストOSについて、S602で算出された当該ゲストOSの入出力周期の算出値すべての最大公約数を、当該ゲストOSのOS動作周期として算出する。すなわち、入出力モニタ部52は、当該ゲストOSについて算出された入出力周期を当該ゲストOS上のアプリのアプリ動作周期であると推測し、当該アプリ動作周期の推測値を用いて算出されたOS動作周期を、追加アプリのアプリ動作周期も考慮した当該ゲストOSのOS動作周期であると推測する。本実施形態では、入出力周期の算出値に変化があった第2ゲストOS40について、S602で算出された入出力周期の算出値である2ms及び3msの最大公約数である1msを、第2ゲストOS40のOS動作周期として算出する。
続いて、S605で、入出力モニタ部52は、S604で算出されたOS動作周期を表すOS動作周期情報をテーブル変更部53へ送信した後、処理をS601に戻す。
<テーブル変更処理>
ハイパーバイザ50のテーブル変更部53が実行するテーブル変更処理について、図9のフローチャートを用いて説明する。なお、テーブル変更処理は、OS動作周期算出部42又は入出力モニタ部52からOS動作周期情報を受信したことを契機に開始される。
まず、S701で、テーブル変更部53は、OS動作周期テーブル541に登録されているOS動作周期の変更が必要であるか否かを判定する。具体的には、テーブル変更部53は、OS動作周期情報により表されるゲストOSのOS動作周期の値が、OS動作周期テーブル541に登録されている当該ゲストOSのOS動作周期の値と異なる場合、OS動作周期の変更が必要であると判定する。
テーブル変更部53は、S701でOS動作周期テーブル541に登録されているOS動作周期の変更が必要であると判定した場合、処理をS702へ移行する。
S702で、テーブル変更部53は、OS動作周期テーブル541を変更する。具体的には、テーブル変更部53は、OS動作周期情報により表されるゲストOSのOS動作周期の値を、OS動作周期テーブル541に上書き登録することにより、アプリが追加されたゲストOSのOS動作周期を更新する。その後、テーブル変更部53は、処理をS703へ移行する。
一方、テーブル変更部53は、S701でOS動作周期テーブル541に登録されているOS動作周期の変更が必要でないと判定した場合、処理をS703に移行する。
S703で、テーブル変更部53は、OS動作周期情報をOS動作周期算出部42から受信したか否かを判定する。テーブル変更部53は、S703でOS動作周期情報をOS動作周期算出部42から受信したと判定した場合、処理をS704へ移行する。
S704で、テーブル変更部53は、アプリ起動要求を追加処理部41へ送信した後、図9のテーブル変更処理を終了する。
一方、テーブル変更部53は、S703でOS動作周期情報をOS動作周期算出部42から受信していないと判定した場合、処理をS705へ移行する。
S705で、テーブル変更部53は、OS動作周期情報を入出力モニタ部52から受信したか否かを判定する。テーブル変更部53は、S705でOS動作周期情報を入出力モニタ部52から受信していないと判定した場合、図9のテーブル変更処理を終了する。
一方、テーブル変更部53は、S705でOS動作周期情報を入出力モニタ部52から受信したと判定した場合には、処理をS706へ移行する。
S706で、テーブル変更部53は、アプリ再起動要求を追加処理部41へ送信した後、図9のテーブル変更処理を終了する。
[1-4.効果]
以上詳述した第1実施形態によれば、以下の効果が得られる。
(1a)本実施形態では、入出力モニタ部52は、アプリA~Eそれぞれにおけるデータの入力周期及び出力周期に基づいて、アプリEが追加された第2ゲストOS40について、第2ゲストOS40上のアプリすべてが各々のアプリ動作周期に従って動作するために適したOS動作周期を推測する。そして、テーブル変更部53は、必要に応じて、OS動作周期テーブル541に登録されている第2ゲストOS40のOS動作周期を、入出力モニタ部52で推測されたOS動作周期に更新する。このような構成によれば、ECU1にアプリEが追加された場合に、追加アプリEのアプリ動作周期情報が与えられない場合であっても、アプリEが追加された第2ゲストOS40のOS動作周期を、追加アプリEが正常に動作するために適した周期に更新できる。
(1b)本実施形態では、ハイパーバイザ50の入出力モニタ部52が、各ゲストOSについて、ゲストOSにおけるデータの入力周期及び出力周期をデータ種別ごとに算出し、算出値を当該ゲストOS上のアプリのアプリ入出力周期とみなして、推測周期通知処理を実行する。このような構成によれば、ECU1にアプリEが追加された場合に、ハイパーバイザ50において、アプリEが追加された第2ゲストOS40のOS動作周期を推測し、追加アプリEが正常に動作するために適した周期に更新できる。
(1c)本実施形態では、追加アプリEのアプリデータが外部装置から入力された場合に、追加処理部41が、追加アプリEのアプリ動作周期情報が付与されているか否かを判定する。追加処理部41によりアプリ動作周期情報が付与されていると判定された場合、OS動作周期算出部42が、再計算周期通知処理を実行し、アプリ動作周期情報が表す追加アプリEのアプリ動作周期に基づいて、アプリEが追加された第2ゲストOS40のOS動作周期を再計算する。一方、追加処理部41によりアプリ動作周期情報が付与されていないと判定された場合、入出力モニタ部52が、推測周期通知処理を実行し、第2ゲストOS40のOS動作周期を推測する。テーブル変更部53は、アプリEが追加された第2ゲストOS40のOS動作周期を、必要に応じて、OS動作周期算出部42で算出されたOS動作周期又は入出力モニタ部52で推測されたOS動作周期に更新する。このような構成によれば、追加アプリEのアプリ動作周期情報が与えられている場合には、再計算周期通知処理によりアプリEが追加された第2ゲストOS40のOS動作周期をより正確に算出できる。また、追加アプリEのアプリ動作周期情報が与えられている場合には、推測周期通知処理に代えて再計算周期通知処理を行うことで、処理量を低減できる。
なお、第1実施形態では、S601~S604が周期推測部としての処理に相当し、S702が周期更新部としての処理に相当し、S405が判定部としての処理に相当し、S501が周期再算出部としての処理に相当する。
[2.第2実施形態]
[2-1.構成]
第2実施形態のECU1は、基本的な構成は第1実施形態と同様であるため、相違点について以下に説明する。なお、第1実施形態と同じ符号は、同一の構成を示すものであって、先行する説明を参照する。
上述した第1実施形態のECU1では、ハイパーバイザ50の機能として入出力モニタ部52が備えられていた。これに対して、第2実施形態のECU1では、第1ゲストOS30及び第2ゲストOS40の機能として入出力モニタ部33,43が備えられている点で第1実施形態の構成と相違する。
図10に示すように、第2実施形態のECU1では、第1ゲストOS30は、CPU21が第1ゲストOS30のプログラムを実行することで実現される機能の構成として、追加処理部31及びOS動作周期算出部32bに加え、入出力モニタ部33を備える。同様に、第2ゲストOS40は、CPU21が第2ゲストOS40のプログラムを実行することで実現される機能の構成として、追加処理部41及びOS動作周期算出部42bに加え、入出力モニタ部43を備える。なお、第1ゲストOS30及び第2ゲストOS40の機能は同一であるため、以下にまとめて説明する。
OS動作周期算出部32b,42bは、第1実施形態と同様の図7に示す再計算周期通知処理を実行するが、以下の点で第1実施形態と異なる。第1実施形態では、再計算通知処理は、追加処理部41から追加アプリのアプリ動作周期情報(すなわち、アプリデータに付与されていたアプリ動作周期情報)を受信したことを契機に開始された。これに対して、第2実施形態では、追加処理部41から追加アプリのアプリ動作周期情報を受信したこと、又は、入出力モニタ部43から追加アプリのアプリ動作周期情報(すなわち、入出力モニタ部43で推測された追加アプリのアプリ動作周期情報)を受信したことを契機に、再計算通知処理が開始される点で、第1実施形態とは異なる。
入出力モニタ部33,43は、上記プログラムに従い、後述する図11に示す推測周期通知処理を実行する。
ハイパーバイザ50は、CPU21がハイパーバイザ50のプログラムを実行することで実現される機能の構成として、通信部51と、テーブル変更部53bと、スケジューリング部54と、を備える。
テーブル変更部53bは、第1実施形態と同様の図9に示すテーブル変更処理を実行するが、以下の点で第1実施形態と異なる。すなわち、テーブル変更部53bは、入出力モニタ部43から直接的にOS動作周期情報を受信することはなく、追加アプリのアプリ動作周期情報の有無にかかわらず、OS動作周期算出部42bからOS動作周期情報を受信する。そこで、例えば、図9に示すテーブル変更処理のS703で、追加アプリの仮起動のない状態でOS動作周期情報を受信したか否かを判定し、S705で、追加アプリが仮起動された状態でOS動作周期情報を受信したか否かを判定してもよい。すなわち、テーブル変更部53bは、ゲストOS上で追加アプリが正常に動作するように、S701又はS702の後に、アプリ起動要求又はアプリ再起動要求のうち適当なものを追加処理部41へ送信するように構成されればよい。
[2-2.処理の概要]
第2実施形態では、<OS動作周期テーブルが自動変更される場合であって、追加アプリのアプリ動作周期情報がない場合>における、追加アプリの仮起動からOS動作周期の推測までの処理の流れが第1実施形態とは異なるため、この部分のみを説明する。
第2実施形態では、追加アプリEのアプリデータにアプリ動作周期情報が付与されていない場合、追加処理部41により追加アプリEが仮起動されると、入出力モニタ部43において、後述する図11の推測周期通知処理により、追加アプリEのアプリ動作周期の推測が行われる。すなわち、入出力モニタ部43は、追加アプリEへのデータの入出力情報を記録し、当該入出力情報に基づいて算出されるデータ種別ごとのアプリ入出力周期に基づいて、追加アプリEのアプリ動作周期を推測する。そして、入出力モニタ部43は、追加アプリEの推測されるアプリ動作周期を表すアプリ動作周期情報を、OS動作周期算出部42bへ送信する。
当該アプリ動作周期情報を受信したOS動作周期算出部42bは、図7の再計算周期通知処理により、追加アプリEの推測されるアプリ動作周期も含めて第2ゲストOS40のOS動作周期を再計算する。そして、OS動作周期算出部42bは、算出されたOS動作周期を表すOS動作周期情報をハイパーバイザ50のテーブル変更部53bへ送信する。
以降のOS動作周期テーブル541の変更等の処理の流れは、第1実施形態と同様である。
[2-3.処理]
<推測周期通知処理>
第2ゲストOS40の入出力モニタ部43が実行する推測周期通知処理について、図11のフローチャートを用いて説明する。なお、推測周期通知処理は、追加アプリEが仮起動されることにより開始される。
推測周期通知処理の実行中は、追加アプリEの入出力周期が検知されやすくするために、各ゲストOSの実行タイミングの周期が可能な限り短くなるようにハイパーバイザ50にて調整される。
まず、S801で、入出力モニタ部43は、所定時間の間、追加アプリEへのデータの入出力時刻をデータ種別ごとに記録する。すなわち、入出力モニタ部43は、追加アプリEへデータが入力された時刻(以下「アプリ入力時刻」という。)及び追加アプリEからデータが出力された時刻(以下「アプリ出力時刻」という。)を、データ種別ごとに記録する。アプリ入力時刻及びアプリ出力時刻をデータ種別ごとに記録する方法は、第1実施形態と同様である。具体的には、追加アプリEは、追加アプリEへ入力された異なる3種類の入力データに基づいて制御処理を行い、生成された異なる2種類の出力データを出力するように構成されているため、3つのデータ種別ごとのアプリ入力時刻及び2つのデータ種別ごとのアプリ出力時刻が記録される。S801において、所定時間の間、入出力時刻がデータ種別ごとに記録されることで、入出力モニタ部43には、追加アプリEへのデータの入出力時刻の記録情報がデータ種別ごとに蓄積される。
続いて、S802で、入出力モニタ部43は、S801で記録された入出力時刻に基づいて、追加アプリEのデータ種別ごとのアプリ入出力周期を算出する。すなわち、入出力モニタ部43は、S801において記録されたデータ種別ごとのアプリ入力時刻のうち、最新のアプリ入力時刻と最新から2番目のアプリ入力時刻との差分を、データ種別ごとに算出し、当該差分をデータ種別ごとの入力周期として算出する。同様に、入出力モニタ部43は、S801において記録されたデータ種別ごとのアプリ出力時刻のうち、最新のアプリ出力時刻と最新から2番目のアプリ出力時刻との差分を、データ種別ごとに算出し、当該差分をデータ種別ごとの出力周期として算出する。上述したように、アプリ入出力周期は、アプリの実行タイミングの周期であるアプリ動作周期と同じとみなせる。本実施形態では、S802で、アプリEのデータ種別ごとのアプリ入出力周期として、3つのデータ種別ごとの入力周期及び2つのデータ種別ごとの出力周期が算出される。具体的には、アプリEのアプリ動作周期は3msであるため、3msの入力周期が3個、3msの出力周期が2個、算出される。
続いて、S803で、入出力モニタ部43は、S802で算出された追加アプリEのデータ種別ごとのアプリ入出力周期の算出値に基づいて、追加アプリEのアプリ動作周期を推測する。具体的には、入出力モニタ部43は、S802で算出されたアプリ入出力周期の算出値すべての最大公約数を、追加アプリEのアプリ動作周期として推測する。本実施形態では、S802で算出されたアプリ入出力周期の算出値である、入力周期の3ms及び出力周期の3msの最大公約数である3msを、追加アプリEのアプリ動作周期として推測する。
続いて、S804で、入出力モニタ部43は、S803で推測された追加アプリEのアプリ動作周期を表すアプリ動作周期情報をOS動作周期算出部42bへ送信した後、図11の推測周期通知処理を終了する。
[2-4.効果]
以上詳述した第2実施形態によれば、上述した第1実施形態の(1a)及び(1c)と同様の効果に加え、以下の効果が得られる。
(2a)本実施形態では、アプリEが追加された第2ゲストOS40の入出力モニタ部43が、追加アプリEのアプリ入出力周期を算出し、算出されたアプリ入出力周期に基づいて、推測周期通知処理を実行する。このような構成によれば、ECU1にアプリEが追加された場合に、アプリEが追加された第2ゲストOS40のOS動作周期の推測を、第2ゲストOS40において行うことができる。
なお、第2実施形態では、S801~S804,S501が周期推測部としての処理に相当し、S702が周期更新部としての処理に相当し、S405が判定部としての処理に相当し、S501が周期再算出部としての処理に相当する。
[3.他の実施形態]
以上、本開示の実施形態について説明したが、本開示は、上記実施形態に限定されることなく、種々の形態を採り得ることは言うまでもない。
(3a)上記第1実施形態では、入出力モニタ部52は、各ゲストOSについてデータ種別ごとの入出力周期を算出し、入出力周期の算出値に変化があったゲストOSをアプリが追加されたゲストOSであるとして、当該ゲストOSについて、入出力周期の算出値に基づいてOS動作周期を推測した。しかし、例えば、ハイパーバイザにおいてアプリが追加されたゲストOSの入出力周期のみを算出できる場合は、当該ゲストOSの入出力周期のみを算出し、算出値に基づいて当該ゲストOSのOS動作周期を推測してもよい。
(3b)上記第1実施形態では、入出力モニタ部52は、S603で入出力周期の算出値に変化があったゲストOSがあるか否かを、入出力周期の算出値及び算出値の個数の変化の有無によって判定したが、判定の方法はこれに限定されない。例えば、入出力モニタ部は、入出力周期の算出値に変化があったゲストOSがあるか否かを、入出力周期の算出値の変化の有無のみによって判定してもよい。具体的には、上記第1実施形態におけるS603で、第2ゲストOSについては、前回のサイクルにおける入出力周期の算出値は2msのみであったのに対して、今回のサイクルにおける入出力周期の算出値は2ms及び3msとなったことから、入出力周期の算出値に変化があったと判定してもよい。
(3c)上記第1実施形態では、推測周期通知処理において各ゲストOSの入出力周期の変化が検知されやすくするために、追加アプリEの仮起動中は各ゲストOSの実行タイミングの周期が可能な限り短くなるように、ハイパーバイザ50にて調整される。しかし、各ゲストOSの実行タイミングの周期を短くする期間については、これに限定されない。例えば、ハイパーバイザは、通信部がアプリ追加要求を受信した時点から所定の時間だけ、各ゲストOSの実行タイミングの周期を短くするように調整してもよい。
(3d)上記第2実施形態では、S803で、入出力モニタ部43は、S802で算出されたアプリ入出力周期の算出値すべての最大公約数を、追加アプリEのアプリ動作周期として推測する。しかし、例えば、アプリ入出力周期すべてが同じ値となるようにアプリが構成されている場合は、入出力モニタ部43は、上記第2実施形態のS803で、S802で算出されたアプリ入出力周期の算出値自体を追加アプリEのアプリ動作周期であると推測してもよい。
(3e)上記各実施形態では、アプリの追加の例として、アプリの追加のみ行われる場合を例示したが、アプリの追加に伴い既存アプリが削除される場合、つまりアプリの変更であってもよい。
(3f)上記各実施形態では、アプリ入出力周期として、アプリにおけるデータの入力周期及び出力周期の両方をみることにより、アプリが追加されたゲストOSのOS動作周期を推測することを例示した。しかし、アプリ入出力周期として、アプリにおけるデータの入力周期及び出力周期のうちの少なくとも一方をみて、アプリが追加されたゲストOSのOS動作周期を推測してもよい。例えば、アプリ入出力周期として、アプリにおけるデータの入力周期のみをみて、アプリが追加されたゲストOSのOS動作周期を推測してもよい。また、この場合、上記第1実施形態において、ゲストOSにおけるデータの入力周期及び出力周期のうち少なくとも一方を算出し、算出値を当該ゲストOS上のアプリのアプリ入出力周期として、上記OS動作周期の推測が行われてもよい。例えば、アプリ入出力周期として、アプリにおけるデータの入力周期のみをみる場合は、ゲストOSにおけるデータの入力周期のみを算出して、算出値を当該ゲストOS上のアプリのアプリ入出力周期としてもよい。
(3g)上記各実施形態では、ハイパーバイザ50により第1ゲストOS30及び第2ゲストOS40の実行がスケジューリングされる場合について例示したが、ゲストOSの個数はこれに限定されない。例えば、ハイパーバイザにより3つ以上のゲストOSの実行がスケジューリングされる構成でもよい。
(3h)上記各実施形態では、CPU21はシングルコアCPUであるが、CPUはマルチコアCPUであってもよい。マルチコアCPUの場合、例えば、アプリの追加時に空きのあるコアがあれば、アプリの仮起動のために空いているコアを占有して使用し、上記第2実施形態の推測周期通知処理を実行するように構成されてもよい。
(3i)上記実施形態における1つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を1つの構成要素に統合したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。
(3j)本開示は、上述した電子制御装置1の他、当該電子制御装置1を構成要素とするシステム、当該電子制御装置1としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、周期推測方法など、種々の形態で実現することができる。