(57)【要約】【課題】  外部からの入力に対して所定の時間内に応答を行うというリアルタイム性が要求されないタスクにより実現される処理の停滞を抑えつつ、リアルタイム性が要求されるタスクと、リアルタイム性が要求されないタスクとをＣＰＵに並行して実行させることが可能なプログラムを提供する。【解決手段】  スケジューラ１１１は、リアルタイム性が要求されるタスクである第一，第二のＶＭと、リアルタイム性が要求されないタスクである第三のＶＭとを対象としてスケジューリングを行なう。スケジューラ１１１は、第一〜第三のＶＭに対し所定のタイミングでタイムスロットを割当てることによりＣＰＵにこれらのＶＭを並行して実行させ、第一或いは第二のＶＭが、自身に割当てられたタイムスロットを全て消費することなく処理を終了した場合には、第三のＶＭ１４０にこのタイムスロットの残り時間を割当てる。【選択図】図１
2010170320.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理単位のうちのいずれかに対して予め設定されたタイミングでタイムスロットを割り当てることにより、これらの前記処理単位をＣＰＵに並行して実行させる基本プログラムであって、
前記処理単位として、外部からの入力に対し予め設定された時間内での応答が可能であるという性質であるリアルタイム性が要求されるリアルタイム処理単位と、前記リアルタイム性が要求されない非リアルタイム処理単位とが存在し、前記非リアルタイム処理単位は、いずれかの前記リアルタイム処理単位に対応付けられており、
前記基本プログラムは、前記処理単位に対して前記タイムスロットを割り当てるタイミングを示すデータであるタイムスロットデータを有しており、
前記基本プログラムは、
前記タイムスロットデータに基づき、前記リアルタイム処理単位に前記タイムスロットを割り当てる第一のステップと、
前記第一のステップにて割り当てられた前記タイムスロットを使い切ることなく、前記リアルタイム処理単位が終了した場合には、該リアルタイム処理単位に替えて、該リアルタイム処理単位に対応付けられている前記非リアルタイム処理単位に、該タイムスロットの残り時間を割り当てる第二のステップと、
を有すること、
を特徴とする基本プログラム。
【請求項２】
請求項１に記載の基本プログラムにおいて、
前記リアルタイム処理単位は、複数の前記非リアルタイム処理単位に対応付けられており、該リアルタイム処理単位に対応する前記非リアルタイム処理単位には、優先順位が設定されており、
前記第二のステップにおいて、前記リアルタイム処理単位に対応する前記非リアルタイム処理単位のうち、優先順位の高い前記非リアルタイム処理単位から順に前記タイムスロットの残り時間を割り当てること、
を特徴とする基本プログラム。
【請求項３】
請求項１または請求項２に記載の基本プログラムにおいて、
前記処理単位のうちの少なくとも一つは、前記基本プログラムが搭載される装置とは異なる他の装置の制御プログラムに基づく処理単位であるＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｐｒｏｇｒａｍの略）であること、
を特徴とする基本プログラム。
【請求項４】
請求項３に記載の基本プログラムにおいて、
前記ＶＭは、前記他の装置におけるＣＰＵの周辺デバイスであって、前記基本プログラムが搭載される装置におけるＣＰＵにおける周辺デバイスである自装置の周辺デバイスと同一の用途にて用いられる周辺デバイスである他の装置の周辺デバイスを制御するための処理を有しており、
前記自装置の周辺デバイスには、前記他の装置の周辺デバイスとは異なる形式で指示を行う必要があり、
前記基本プログラムは、
それぞれの前記ＶＭから、前記他の装置の周辺デバイスへの指示と同様の形式で、前記自装置の周辺デバイスに対しての指示を受け付ける第三のステップと、
前記第三のステップにて受け付けた指示を、前記自装置の周辺デバイスに対応する形式に変換し、該自装置の周辺デバイスに対しての制御を行う第四のステップと、
をさらに有すること、
を特徴とする基本プログラム。
【請求項５】
請求項４に記載の基本プログラムにおいて、
前記基本プログラムは、
前記自装置の周辺デバイスから提供されるデータを取得する第五のステップと、
前記第五のステップにて取得したデータを、該自装置の周辺デバイスに対応する前記他の装置の周辺デバイスを制御する処理を有する前記ＶＭに対し、該他の装置の周辺デバイスに対応する形式で提供する第六のステップと、
をさらに有すること、
を特徴とする基本プログラム。
【請求項６】
請求項１から請求項５のいずれかに記載の基本プログラムにおいて、
前記処理単位として、所定の割込みに対応する割込み処理を有している割込み対応処理単位が存在し、
前記基本プログラムは、前記割込み対応処理単位に対し、前記タイムスロット、または、前記タイムスロットの残り時間が割り当てられている間に、該割込み対応処理単位に対応する前記所定の割込みが発生すると、該所定の割込みに対応する前記割込み処理を実行する第七のステップをさらに有すること、
を特徴とする基本プログラム。
【請求項７】
請求項６に記載の基本プログラムにおいて、
前記所定の割込みが発生した後、該所定の割込みに対応する前記割込み対応処理単位に対して前記タイムスロット、または、前記タイムスロットの残り時間が割り当てられると、該所定の割込みに対応する前記割込み処理を実行する第八のステップをさらに有すること、
を特徴とする基本プログラム。
【請求項８】
請求項６または請求項７に記載の基本プログラムにおいて、
前記第一のステップにおいて前記タイムスロットが割り当てられる前記リアルタイム処理単位をメインの処理単位とすると共に、前記第二のステップにおいて、該第一のステップにて前記メインの処理単位に割り当てられた前記タイムスロットの残り時間が割り当てられる前記非リアルタイム処理単位をサブの処理単位とし、
前記基本プログラムは、前記メインの処理単位が前記割込み対応処理単位である場合において、前記サブの処理単位に前記タイムスロットの残り時間が割り当てられている間に、該メインの処理単位に対応する前記所定の割込みが発生すると、前記第七のステップに先立ち、該メインの処理単位である前記割込み対応処理単位が有する前記割込み処理を実行する第九のステップをさらに有すること、
を特徴とする基本プログラム。
【請求項９】
請求項１から請求項８のいずれかに記載の基本プログラムに従い処理を行うコンピュータを備える制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵに、複数の処理単位を並行して実行させるプログラム等に関する。
【背景技術】
【０００２】
車両には多くのＥＣＵが搭載されており、これらのＥＣＵは、車内ＬＡＮ等を介して通信を行い、互いに連携して処理を行う。今後、車両の高機能化、高性能化に伴い、より多くのＥＣＵが車両に搭載されると考えられている。
【０００３】
しかしながら、車両内部は限られた空間であるため、無制限にＥＣＵの数を増やすことはできない。また、ＥＣＵの数を増加させると、車内ＬＡＮの通信負荷が増加するため、各ＥＣＵの処理に対する悪影響が生じるおそれがある。さらに、ＥＣＵの数の増加により車両の重量が増加してしまうため、燃費の悪化が懸念される。このように、車両に搭載可能なＥＣＵの数には限りがあると共に、ＥＣＵの数の増加による様々なデメリットが存在する。このような問題の対策として、複数のＥＣＵを一つに統合するという方法が実施されている。複数のＥＣＵを一つに統合する際には、ＥＣＵの小型化やコスト低減の観点から、統合前のＥＣＵのマイコンにて行われていた処理を１台のマイコンで実施することが望ましい。このためには、統合前のＥＣＵのマイコンに搭載されているプログラムを一つに統合し、新たなプログラムを作成しなければならない。
【０００４】
ここで、非特許文献１には、複数のＥＣＵに搭載されているプログラムを統合し、一つのプログラムとする際に用いることができる保護機能付ＲＴＯＳについて記載されている。この保護機能付ＲＴＯＳでは、統合前のＥＣＵのプログラム（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｐｒｏｇｒａｍ、略してＶＭとも記載する）である第一のＶＭと、第二のＶＭと、第三のＶＭとに対し、例えば、図２の（ａ）に記載のＶＭスケジューリングテーブルに基づきタイムスロットを割り当て、各ＶＭを並行して実行させていると考えられる。この保護機能付ＲＴＯＳを用いることにより、プログラムを大きく変更することなく、複数のＥＣＵに搭載されているプログラムの統合を行うことができる。
【０００５】
ところで、車両には、例えば、エンジン制御ＥＣＵや、エアバック制御ＥＣＵが搭載されているが、このようなＥＣＵでは、安全上の観点から、外部からの入力に対して所定の時間内に応答を行うというリアルタイム性が要求される。これに対し、例えば、オーディオ制御ＥＣＵ等においては、エンジン制御ＥＣＵ等に比べると、リアルタイム性の必要性は低いといえる。このため、エンジン制御ＥＣＵ等とオーディオ制御ＥＣＵとを一つに統合する場合には、少なくともエンジン制御ＥＣＵ等に対応するＶＭのリアルタイム性を確保する必要がある。したがって、例えば、上述した保護機能ＲＴＯＳを用いる場合であれば、エンジン制御ＥＣＵ等に対応するＶＭに対しては、オーディオ制御ＥＣＵ等に対応するＶＭよりも優先的に、タイムスロットの割り当て周期や、タイムスロットの長さ等を設定する必要がある。しかしながら、このようにしてタイムスロットの設定を行なうと、オーディオ制御ＥＣＵ等に対応するＶＭが十分に実行されなくなってしまうおそれがある。このため、例えば、オーディオ制御ＥＣＵ等に対応するＶＭにて動画表示処理を行う場合であれば、滑らかな動画表示ができなくなってしまうといった具合に、このＶＭによる処理が停滞してしまうおそれがある。
【０００６】
ここで、特許文献１には、異なる優先度を有するスレッドを時分割処理するシステムにおけるスケジューリング方法が記載されている。特許文献１に記載の方法では、各スレッドに対してタイムスロットデータを対応付け、このタイムスロットデータに対してスケジューリングを行なう。つまり、タイムスロットデータに処理時間が割り当てられると、このタイムスロットデータに対応するスレッドが実行されるのである。そして、例えば、スレッドＡが、このスレッドＡよりも優先度がより低いスレッドＢにおける所定の処理の終了を待つ必要が生じた場合には、スレッドＡに対応するタイムスロットデータＡをスレッドＢに対応付けることにより、スレッドＡの優先度をスレッドＢに承継する。そして、スレッドＢにおける所定の処理が終了すると、タイムスロットデータＡは、再びスレッドＡに対応付けられる。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】［平成２１年１月６日検索］、インターネット＜URL:http://www.toppers.jp/docs/ipaward10-presen.pdf＞
【特許文献】
【０００８】
【特許文献１】特開２０００−２０３２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１に記載の方法によれば、スレッドの優先度を変更する際に生じるオーバーヘッドを抑えることができ、スレッドに割り当てられたＣＰＵの処理時間を有効に利用することができる。しかしながら、特許文献１に記載の方法を保護機能ＲＴＯＳに適用したとしても、上述したような、リアルタイム性の必要性が低いＶＭによる処理が停滞しまうおそれがあるという問題を解決することはできない。
【００１０】
本願発明は上記課題を解決するためになされたものであり、リアルタイム性が要求される処理単位と、リアルタイム性が要求されない処理単位とを並行してＣＰＵに実行させるプログラムに関する発明である。本願発明は、リアルタイム性が要求されない処理単位により実現される処理の停滞を抑えつつ、これらの処理単位をＣＰＵに並行して実行させることが可能なプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するためのなされた請求項１に記載の基本プログラムは、複数の処理単位のうちのいずれかに対して予め設定されたタイミングでタイムスロットを割り当てることにより、これらの処理単位をＣＰＵに並行して実行させる。尚、処理単位にタイムスロットを割り当てるとは、例えば、ＣＰＵにタイムスロットが示す時間にわたって処理単位を実行させることであっても良い。また、処理単位には、外部からの入力に対し予め設定された時間内での応答が可能であるという性質であるリアルタイム性が要求されるリアルタイム処理単位と、リアルタイム性が要求されない非リアルタイム処理単位とが存在し、非リアルタイム処理単位は、いずれかのリアルタイム処理単位に対応付けられている。また、基本プログラムは、処理単位に対してタイムスロットを割り当てるタイミングを示すデータであるタイムスロットデータを有している。また、基本プログラムは、タイムスロットデータに基づき、リアルタイム処理単位にタイムスロットを割り当てる第一のステップを有している。
【００１２】
ここで、リアルタイム処理単位は、外部からの入力に対し予め設定された時間内に応答することが要求されるが、例えば、この外部からの入力が無い場合等には、リアルタイム処理単位は、タイムスロットを割り当てられてもこのタイムスロットが示す時間にわたって処理を継続する必要が無いといったことが想定される。つまり、タイムスロットが割り当てられたリアルタイム処理単位は、タイムスロットを使い切ることなく処理を終了するという場合が想定されるのである。
【００１３】
そこで、この基本プログラムは、第一のステップにて割り当てられたタイムスロットを使い切ることなくリアルタイム処理単位が終了した場合には、該リアルタイム処理単位に替えて、該リアルタイム処理単位に対応付けられている非リアルタイム処理単位に、該タイムスロットの残り時間を割り当てる第二のステップをさらに有している。
【００１４】
このような構成を有することにより、タイムスロットを使い切ることなくリアルタイム処理単位の実行を終了した場合に、余った時間を、非リアルタイム処理単位に割り当てることができる。したがって、この基本プログラムは、非リアルタイム処理単位により実現される処理の停滞を抑えつつ、リアルタイム処理単位と非リアルタイム処理単位とをＣＰＵに並行して実行させることができる。
【００１５】
また、タイムスロットを使い切ることなくリアルタイム処理単位の実行を終了した場合に、次のようにして、余った時間を非リアルタイム処理単位に割り当てても良い。
【００１６】
すなわち、請求項２に記載されているように、リアルタイム処理単位は、複数の非リアルタイム処理単位に対応付けられており、該リアルタイム処理単位に対応する非リアルタイム処理単位には、優先順位が設定されており、第二のステップにおいて、リアルタイム処理単位に対応する非リアルタイム処理単位のうち、優先順位の高い非リアルタイム処理単位から順にタイムスロットの残り時間を割り当てても良い。
【００１７】
このような構成を有する場合であっても、非リアルタイム処理単位により実現される処理の停滞を抑えつつ、リアルタイム処理単位と非リアルタイム処理単位をＣＰＵに並行して実行させることができる。
【００１８】
また、既に述べたように、複数のＥＣＵを一つに統合するということが望まれているが、このような場合には、複数のＥＣＵの制御プログラムを一つに統合し、新たなプログラムを作成しなければならない。そこで、処理単位とは、次のようなソフトウェアであっても良い。
【００１９】
すなわち、請求項３に記載されているように、処理単位のうちの少なくとも一つは、プログラムが搭載される装置とは異なる他の装置の制御プログラムに基づく処理単位であるＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｐｒｏｇｒａｍの略）であっても良い。
【００２０】
こうすることにより、複数のＥＣＵの制御プログラムを一つに統合した場合に、リアルタイム性が要求されないＶＭの処理の停滞を抑えつつ、ＣＰＵに複数のＶＭを並行して実行させることができる。
【００２１】
また、処理単位をＶＭとした場合には、本プログラムを実行するＣＰＵの周辺デバイスに対し、次のようにして指示を行っても良い。
【００２２】
すなわち、請求項４に記載されているように、ＶＭは、他の装置におけるＣＰＵの周辺デバイスであって、基本プログラムが搭載される装置におけるＣＰＵにおける周辺デバイスである自装置の周辺デバイスと同一の用途にて用いられる周辺デバイスである他の装置の周辺デバイスを制御するための処理を有しており、自装置の周辺デバイスには、他の装置の周辺デバイスとは異なる形式で指示を行う必要があっても良い。そして、基本プログラムは、それぞれのＶＭから、他の装置の周辺デバイスへの指示と同様の形式で、自装置の周辺デバイスに対しての指示を受け付ける第三のステップと、第三のステップにて受け付けた指示を、自装置の周辺デバイスに対応する形式に変換し、該自装置の周辺デバイスに対しての制御を行う第四のステップとをさらに有していても良い。
【００２３】
このような構成を有することにより、ＶＭは、統合前のＥＣＵにおけるＣＰＵの周辺デバイスに対応する形式で、統合後のＥＣＵにおけるＣＰＵの周辺デバイスに対して指示を行うことができる。このため、統合前のＥＣＵにおける制御プログラムにおいてＣＰＵの周辺デバイスに対する指示を行う部位の構成を変更することなく、この制御プログラムに基づきＶＭを作成することができる。つまり、複数のＥＣＵの制御プログラムを一つに統合する際の変更規模の増加を抑えることができるのである。
【００２４】
また、ＶＭに対し、ＣＰＵの周辺デバイスから受け取ったデータを次のようにして提供しても良い。
【００２５】
すなわち、請求項５に記載されているように、基本プログラムは、自装置の周辺デバイスから提供されるデータを取得する第五のステップと、第五のステップにて自装置の周辺デバイスから取得したデータを、該自装置の周辺デバイスに対応する他の装置の周辺デバイスを制御する処理を有する前記ＶＭに対し、該他の装置の周辺デバイスに対応する形式で提供する第六のステップとをさらに有していても良い。
【００２６】
このような構成を有することにより、ＶＭは、統合前のＥＣＵにおけるＣＰＵの周辺デバイスに対応する形式で、統合後のＥＣＵにおけるＣＰＵの周辺デバイスからデータを受け取ることができる。このため、統合前のＥＣＵにおける制御プログラムにおいてＣＰＵの周辺デバイスからデータを受け取る部位の構成を変更することなく、この制御プログラムに基づきＶＭを作成することができる。つまり、複数のＥＣＵの制御プログラムを一つに統合する際の変更規模の増加を抑えることができるのである。
【００２７】
また、統合前のＥＣＵにおける制御プログラムには、割込み処理が用いられている場合がある。例えば、処理単位が、このような制御プログラムに基づくＶＭである場合には、プログラムは、次のようなステップをさらに有していても良い。
【００２８】
すなわち、請求項６に記載されているように、処理単位として、所定の割込みに対応する割込み処理を有している割込み対応処理単位が存在し、基本プログラムは、割込み対応処理単位に対し、タイムスロット、または、タイムスロットの残り時間が割り当てられている間に、該割込み対応処理単位に対応する所定の割込みが発生すると、該所定の割込みに対応する割込み処理を実行する第七のステップをさらに有していても良い。
【００２９】
このような構成を有することにより、処理単位が有している割込み処理を、確実に実行することができる。したがって、例えば、統合前のＥＣＵにおける制御プログラムに割込み処理が用いられている場合であっても、この割込み処理が流用されたＶＭを処理単位とすることができる。このため、複数のＥＣＵの制御プログラムを一つに統合する際の変更規模の増加を抑えることができる。
【００３０】
また、割込み処理は、割込み要求が発生した後、速やかに実行されるべきである。
【００３１】
そこで、請求項７に記載の基本プログラムは、所定の割込みが発生した後、該所定の割込みに対応する割込み対応処理単位に対してタイムスロット、または、タイムスロットの残り時間が割り当てられると、該所定の割込みに対応する割込み処理を実行する第八のステップをさらに有する。
【００３２】
こうすることにより、先に発生した割込み要求に対応する割込み処理を速やかに実行することができる。
【００３３】
また、次のようにして割込み処理が実行されても良い。
【００３４】
すなわち、請求項８に記載されているように、第一のステップにおいてタイムスロットが割り当てられるリアルタイム処理単位をメインの処理単位とすると共に、第二のステップにおいて、該第一のステップにてメインの処理単位に割り当てられたタイムスロットの残り時間が割り当てられる非リアルタイム処理単位をサブの処理単位としても良い。そして、基本プログラムは、メインの処理単位が割込み対応処理単位である場合において、サブの処理単位にタイムスロットの残り時間が割り当てられている間に、該メインの処理単位に対応する所定の割込みが発生すると、第七のステップに先立ち、該メインの処理単位である割込み対応処理単位が有する割込み処理を実行する第九のステップをさらに有していても良い。
【００３５】
こうすることにより、サブの処理単位にタイムスロットが割り当てられている間に、対応するメインの処理単位についての割込み要求が発生した場合には、優先的にこのメインの処理単位における対応する割込み処理を実行することができる。したがって、メインの処理単位を、サブの処理単位に対してより優先的に実行することができ、メインの処理単位に要求されるリアルタイム性を、より確実なものとすることができる。
【００３６】
ところで、請求項１から請求項８に記載の基本プログラムに従い処理を行うコンピュータを備える制御装置を構成しても良い。
【００３７】
こうすることにより、制御装置は、非リアルタイム処理単位により実現される処理の停滞を抑えつつ、リアルタイム処理単位と非リアルタイム処理単位とをＣＰＵに並行して実行させることができる。
【図面の簡単な説明】
【００３８】
【図１】統合ＥＣＵ、及び、統合制御プログラムの構成を示すブロック図である。
【図２】ＶＭスケジューリングテーブル、及び、スケジュールパラメータテーブルを示す表である。
【図３】タイムスロット管理テーブルを示す表である。
【図４】タイムスロット割当処理のフローチャートである。
【図５】サブのタスク開始処理のフローチャートである。
【図６】割込み発生処理のフローチャートである。
【図７】タイムスロット１〜３の利用状況についての説明図である。
【図８】割込み処理の実行状況についての説明図である。
【図９】仮想デバイス等の構成を示すブロック図である。
【図１０】ＣＡＮを介してのデータ送信が行なわれる際の仮想デバイス等の動作についてのシーケンス図である。
【図１１】ＣＡＮを介してのデータ受信が行なわれる際の仮想デバイス等の動作についてのシーケンス図である。
【発明を実施するための形態】
【００３９】
以下、本発明の実施形態について図面を用いて説明する。尚、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【００４０】
［構成の説明］
（１）統合ＥＣＵの構成について
図１の（ａ）は、本実施形態における統合ＥＣＵ１０の構成を示すブロック図である。この統合ＥＣＵ１０は、第一のＥＣＵと、第二のＥＣＵと、第三のＥＣＵという三つのＥＣＵが統合されたものであり、この三つのＥＣＵが有していた機能を全て有している。また、統合ＥＣＵ１０は、ＣＰＵ１１と、ＲＯＭ１２と、ＲＡＭ１３と、ＣＡＮコントローラ１４とを有しており、これらの部位は内部バス１５で接続されている。尚、統合ＥＣＵ１０は、これらの部位以外にも、第一〜第三のＥＣＵが備えている部位に対応する部位を有している。
【００４１】
ＣＰＵ１１は、ＲＯＭ１２に記憶されているプログラムや、ＲＡＭ１３にロードされたプログラムに従い統合ＥＣＵ１０の制御や各種演算を行う部位である。尚、統合前の三つのＥＣＵにそれぞれ搭載されていたＣＰＵで実行されていた全ての処理は、このＣＰＵ１１で実行される。
【００４２】
ＲＯＭ１２は、各種のプログラムやデータが記憶されている周知のＲＯＭである。
【００４３】
ＲＡＭ１３は、ＣＰＵ１１から直接アクセスされるメインメモリ等として利用される記憶装置である。このＲＡＭ１３には、ＲＯＭ１２等から、各種プログラムやデータがロードされる。
【００４４】
ＣＡＮコントローラ１４は、ＣＡＮ２０を介して他のＥＣＵと通信を行うための部位である。
【００４５】
（２）統合制御プログラムの構成について
また、図１の（ｂ）は、統合ＥＣＵ１０に搭載されている統合制御プログラム１００の構成を示すブロック図である。統合制御プログラム１００は、ＲＯＭ１２に記憶されている。統合制御プログラム１００は、保護機能付きＲＴＯＳ１１０と、第一のＶＭ１２０と、第二のＶＭ１３０と、第三のＶＭ１４０と、仮想デバイス１５０とを有している。尚、ＶＭとは、Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｐｒｏｇｒａｍの略である。
【００４６】
保護機能付きＲＴＯＳ１１０は、第一〜第三のＶＭや、仮想デバイス１５０といったタスクのスケジューリングを行なうプログラムである。このスケジューリングは、スケジューラ１１１により行なわれる。スケジューリングの詳細に関しては後述する。また、保護機能付きＲＴＯＳ１１０は、各タスクに対応するメモリ領域や、自身に対応するメモリ領域の保護を行なう。
【００４７】
また、第一のＶＭ１２０，第二のＶＭ１３０，第三のＶＭ１４０は、保護機能付きＲＴＯＳ１１０によるスケジューリングの対象となるタスクである。これらのＶＭは、それぞれ、統合前のＥＣＵである第一のＥＣＵ，第二のＥＣＵ，第三のＥＣＵの制御プログラムの一部を変更して作成されたプログラムである。尚、第一のＥＣＵ及び第二のＥＣＵは、外部からの入力に対して所定の時間内に応答を行うというリアルタイム性が要求されるＥＣＵであるため、第一のＶＭ１２０及び第二のＶＭ１３０により実現される処理には、リアルタイム性が要求される。また、これらのＥＣＵでは、ＡＵＴＯＳＡＲやＯＳＥＫ（登録商標）に準拠したリアルタイムＯＳがそれぞれ用いられている。このため、第一のＶＭ１２０，第二のＶＭ１３０は、それぞれ、ＡＵＴＯＳＡＲ，ＯＳＥＫに準拠したリアルタイムＯＳを有している。尚、第一のＶＭ１２０に用いられているリアルタイムＯＳをＡＵＴＯＳＡＲ１２１、第二のＶＭ１３０に用いられているリアルタイムＯＳをＯＳＥＫ１３１と記載する。一方、第三のＥＣＵはリアルタイム性が要求されないＥＣＵであり、第三のＶＭ１４０により実現される処理にはリアルタイム性は要求されない。また、このＥＣＵでは、ＯＳとしてＬｉｎｕｘが用いられており、第三のＶＭ１４０はＬｉｎｕｘ１４１を有している。
【００４８】
また、第一〜第三のＶＭでは、統合前のＥＣＵのプログラムで用いられていた割込みハンドラに対応する割込み処理が用いられており、保護機能付きＲＴＯＳ１１０は、周辺デバイスから割込み要求が発生すると、対応する上記割込み処理を実行する。
【００４９】
また、仮想デバイス１５０は、第一〜第三のＶＭと、統合ＥＣＵ１０におけるＣＰＵ１１の周辺デバイスへとのＩ／Ｆとなるタスクである。
【００５０】
［動作の説明］
統合制御プログラム１００は、第一〜第三のＥＣＵの機能を、統合ＥＣＵ１０にて実現するためのプログラムである。統合制御プログラム１００では、保護機能付きＲＴＯＳ１１０が第一〜第三のＶＭのスケジューリングを行い、第一〜第三のＶＭをＣＰＵ１１に並行して実行させることにより、第一〜第三のＥＣＵの機能を実現している。ここでは、保護機能付きＲＴＯＳ１１０の動作について説明する。
【００５１】
（１）タイムスロットについて
保護機能付きＲＴＯＳ１１０のスケジューラ１１１は、第一〜第三のＶＭと、仮想デバイス１５０とをタスクとしており、これらのタスクに対し、タイムスロット１〜１０を順次割り当てる。また、タイムスロット１０の割り当てが行なわれた後は、再度、タイムスロット１〜１０の割り当てが順次行なわれる。そして、タスクにいずれかのタイムスロットが割り当てられると、ＣＰＵ１１は、このタイムスロット分の処理時間にわたって、このタスクを実行する。尚、本実施形態では、タイムスロット１〜１０は全て１００μｓの長さであるが、各タイムスロットの長さは、この時間に限定されるものではない。また、例えば、割り当てるタスクに応じてタイムスロットの長さを変更しても良いし、条件に応じて異なる長さのタイムスロットが用いられても良い。また、タイムスロットの長さとして、例えば、１００μｓ〜１２０μｓといった具合に、一定の時間幅を持った時間が設定されていても良い。そして、例えば、所定の条件やタスクの状態等に応じて、この時間幅の範囲内でＣＰＵの実行時間を変動させても良い。
【００５２】
尚、タスクにタイムスロットを割り当てるということを、タスクに対し、タイムスロットが示す時間にわたってＣＰＵの実行権を付与すると言い換えることもできるということを、念のため付言しておく。
【００５３】
（２）第一〜第三のＶＭのスケジューリングについて
次に、第一〜第三のＶＭのスケジューリングについて説明する。図２の（ａ）には、タイムスロット１〜１０をどのＶＭに割り当てるかを示すＶＭスケジューリングテーブルが記載されている。ＶＭスケジューリングテーブルは、タイムスロット１は第一のＶＭ１２０に、タイムスロット２は第二のＶＭ１３０に、タイムスロット３は第三のＶＭ１４０に、タイムスロット４は第三のＶＭ１４０に、タイムスロット５は第三のＶＭ１４０に、タイムスロット６は第一のＶＭ１２０に、タイムスロット７は第二のＶＭ１３０に、タイムスロット８は第三のＶＭ１４０に、それぞれ割り当てられることを示している。また、タイムスロット９，１０に関しては、第一〜第三のＶＭに割り当てられないことを示している。スケジューラ１１１は、ＶＭスケジューリングテーブルが示すようにタイムスロット１〜１０を第一〜第三のＶＭに割り当て、ＣＰＵ１１に、第一〜第三のＶＭを並行して実行させる。
【００５４】
また、図２の（ｂ）には、第一〜第三のＶＭのサービス周期等を示すスケジューリングパラメータテーブルが記載されている。スケジューリングパラメータテーブルは、「ＶＭ」，「最短サービス周期」，「最長連続走行時間」，「サービス周期許容誤差」という項目を有している。
【００５５】
「ＶＭ」は、第一〜第三のＶＭのうちのいずれかを示す項目である。
【００５６】
また、「最短サービス周期」は、ＶＭに対してタイムスロットが割り当てられる時間間隔を示している。
【００５７】
また、「最長連続走行時間」は、ＶＭの最長の連続実行時間を示している。
【００５８】
また、「サービス周期許容誤差」とは、「最短サービス周期」の誤差として許容される時間を示している。
【００５９】
保護機能付きＲＴＯＳ１１０は、スケジューラ１１１による第一〜第三のＶＭについてのスケジューリングについて、スケジューリングパラメータテーブルに基づき異常判定を行うという機能を有している。この機能について具体的に説明する。保護機能付きＲＴＯＳ１１０は、各ＶＭについて、対応する「最短サービス周期」が示す時間に「サービス周期許容誤差」が示す時間を加えた時間を閾値とする。そして、リアルタイム性が要求されるＶＭに関して、このＶＭにタイムスロットが割り当てられた後、上記閾値に相当する時間が経過しても新たにタイムスロットが割り当てられない場合には、異常が発生したものとみなす。また、保護機能付きＲＴＯＳ１１０は、各ＶＭについて、タイムスロットが割り当てられた後、対応する「最長連続走行時間」を経過した後もＣＰＵ１１による実行が継続されている場合には、異常が発生したものとみなす。
【００６０】
（３）タスクのスケジューリングについて
スケジューラ１１１によるタスクのスケジューリングについて説明する。上述したように、タイムスロット１〜１０は、順次、第一〜第三のＶＭのいずれかに割り当てられる。しかし、仮想デバイス１５０に関しても、処理時間を確保する必要があり、仮想デバイス１５０に対してもタイムスロットを割り当てることができる。また、タイムスロットを割り当てられた第一のＶＭ１２０または第二のＶＭ１３０は、所定の条件が成立すると、自発的に処理を終了する。このため、第一のＶＭ１２０または第二のＶＭ１３０に関しては、割り当てられたタイムスロットを全て使い切ることなく、処理が終了してしまう場合がある。このようなケースを想定して、タイムスロット１〜１０に対し、メインのタスクとサブのタスクとを対応付けておくことができる。そして、スケジューラ１１１は、メインのタスクがタイムスロットを使い切ることなく終了した場合には、サブのタスクに対しタイムスロットの残り時間を割り当てるのである。
【００６１】
尚、図２の（ａ）に記載のＶＭスケジューリングテーブルは、タイムスロット１〜１０に対し、メインのタスクとして登録されているＶＭを示している。
【００６２】
（３−１）タイムスロット管理テーブルについて
図３には、タイムスロット１〜１０に対応付けられているメインのタスクとサブのタスクを示すタイムスロット管理テーブルの一例が記載されている。タイムスロット管理テーブルは、タイムスロット１，６には、メインのタスクとして第一のＶＭ１２０が、サブのタスクとして第三のＶＭ１４０が対応付けられていることを示している。また、タイムスロット２，７には、メインのタスクとして第二のＶＭ１３０が、サブのタスクとして第三のＶＭ１４０が対応付けられていることを示している。また、タイムスロット３〜５、８には、メインのタスクとして第三のＶＭ１４０が対応付けられており、サブのタスクに関しては対応付けがなされていないことを示している。また、タイムスロット９には、メインのタスクとして仮想デバイス１５０が対応付けられており、サブのタスクに関しては対応付けがなされていないことを示している。また、タイムスロット１０には、メインのタスク及びサブのタスクに関して、対応付けがなされていないことを示している。スケジューラ１１１は、タイムスロット管理テーブルに基づき、各タスクのスケジューリングを行なう。
【００６３】
（３−２）タイムスロット割当処理について
スケジューラ１１１によるタスクのスケジューリングについて、さらに詳しく説明する。スケジューラ１１１は、各タイムスロットに相当する時間（１００μｓ）が経過する度に、タイムスロット割当処理を実行する。ここでは、タイムスロット割当処理について、図４に記載のフローチャートを用いて説明する。
【００６４】
Ｓ２０５では、スケジューラ１１１は、ＣＰＵの実行権が付与されているタスク、つまり、動作中のタスクの有無についてチェックし、動作中のタスクが有る場合には（Ｓ２０５：Ｙｅｓ）、このタスクを停止させる（Ｓ２１０）。
【００６５】
続いて、スケジューラ１１１は、タイムスロット管理テーブルに基づき、タスクへの割り当てを行なうタイムスロットを特定する（Ｓ２１５）。尚、スケジューラ１１１は、番号の若いタイムスロットから順に対応するタスクへの割り当てを行い、タイムスロット１０についての割り当てを行なった後は、再度、タイムスロット１から順に割り当てを行なう。
【００６６】
そして、スケジューラ１１１は、タイムスロット管理テーブルに基づき、特定したタイムスロットを割り当てるメインのタスクの有無を判定する（Ｓ２２０）。そして、タイムスロット１〜９のように、タイムスロットを割り当てるメインのタスクが有る場合には（Ｓ２２０：Ｙｅｓ）、スケジューラ１１１は、このメインのタスクにタイムスロットを割り当てる（Ｓ２２５）。また、タイムスロット１０のように、タイムスロットを割り当てるメインのタスクが無い場合には（Ｓ２２０：Ｎｏ）、タイムスロットの割り当てを行うことなく本処理を終了する。
【００６７】
続いて、スケジューラ１１１は、タイムスロットを割り当てたメインのタスクがＶＭである場合（Ｓ２３０：Ｙｅｓ）、このＶＭに対応する割込み要求フラグがセットされているか否かを判定する（Ｓ２３５）。そして、このＶＭに対応する割込み要求フラグがセットされている場合（Ｓ２３５：Ｙｅｓ）、スケジューラ１１１は、ＣＰＵ１１に、このＶＭにおける、この割込み要求フラグに対応する割込み処理を実行させる（Ｓ２４０）。そして、この割込み処理の実行が終了すると、スケジューラ１１１は、上記割込み要求フラグをクリアし、本処理を終了する。そして、以後、タイムスロットが割り当てられたＶＭにおける、割込み処理以外の他の処理が実行される。
【００６８】
また、タイムスロットを割り当てたメインのタスクがＶＭでない場合や（Ｓ２３０：Ｎｏ）、このＶＭに対応する割込み要求フラグがセットされていない場合（Ｓ２３５：Ｎｏ）には、スケジューラ１１１は、本処理を終了する。そして、以後、タイムスロットが割り当てられたタスクが実行される。
【００６９】
尚、割込み処理とは、ＶＭに対応する統合前のＥＣＵの制御プログラムにて用いられていた割込みハンドラに相当するサブルーチンであり、周辺デバイスからの割込み要求に応じてＣＰＵ１１から直接コールされる割込みハンドラとは異なる処理であることを念のため付言しておく。
【００７０】
（３−３）サブのタスク開始処理について
また、上述したように、第一のＶＭ１２０及び第二のＶＭ１３０は、自発的に終了する場合があるが、タイムスロットを割り当てられたメインのタスクが自発的に終了すると、スケジューラ１１１は、サブのタスク開始処理を実行する。ここでは、サブのタスク開始処理について、図５に記載のフローチャートを用いて説明する。
【００７１】
Ｓ３０５では、スケジューラ１１１は、タイムスロット管理テーブルに基づき、終了したメインのタスクに対応するタイムスロットに、サブのタスクが登録されているか判定する。タイムスロット１，２，６，７のように、サブのタスクが登録されている場合には（Ｓ３０５：Ｙｅｓ）、Ｓ３１０に処理を移行する。また、サブのタスクが登録されていない場合には（Ｓ３０５：Ｎｏ）、本処理を終了する。
【００７２】
Ｓ３１０では、スケジューラ１１１は、サブのタスクにタイムスロットの残り時間を割り当て、Ｓ３１５に処理を移行する。
【００７３】
続いて、スケジューラ１１１は、タイムスロットを割り当てたサブのタスクがＶＭである場合（Ｓ３１５：Ｙｅｓ）、このＶＭに対応する割込み要求フラグがセットされているか否かを判定する（Ｓ３２０）。そして、このＶＭに対応する割込み要求フラグがセットされている場合（Ｓ３２０：Ｙｅｓ）、スケジューラ１１１は、ＣＰＵ１１に、このＶＭにおける、この割込み要求フラグに対応する割込み処理を実行させる（Ｓ３２５）。そして、この割込み処理の実行が終了すると、スケジューラ１１１は、上記割込み要求フラグをクリアし、本処理を終了する。そして、以後、タイムスロットが割り当てられたＶＭにおける、割込み処理以外の他の処理が実行される。
【００７４】
また、タイムスロットを割り当てたサブのタスクがＶＭでない場合や（Ｓ３１５：Ｎｏ）、このＶＭに対応する割込み要求フラグがセットされていない場合（Ｓ３２０：Ｎｏ）には、スケジューラ１１１は、本処理を終了する。そして、以後、タイムスロットが割り当てられたタスクが実行される。
【００７５】
（３−４）割込み発生処理について
既に述べたが、統合ＥＣＵ１０は、第一〜第三のＥＣＵを統合したＥＣＵであり、第一〜第三のＥＣＵが備える機能を有している。また、第一〜第三のＶＭは、それぞれ、第一〜第三のＥＣＵのプログラムの一部を変更して作成されたプログラムである。そして、第一〜第三のＥＣＵのプログラムでは、周辺デバイスからの割込み要求が発生した際にＣＰＵから直接コールされる割込みハンドラが用いられているが、第一〜第三のＶＭでは、この割込みハンドラに対応するサブルーチンが用いられている。
【００７６】
統合ＥＣＵ１０では、周辺デバイスからＣＰＵ１１に対して割込み要求が発生すると、割込みハンドラが実行される。この割込みハンドラでは、発生した割込み要求がどのＶＭに対応するものであるか特定し、対応するＶＭに対しての割込み要求フラグをセットすることにより、対応するＶＭに対して割込み要求を通知する。ここでは、周辺デバイスからの割込み要求が発生し、対応するＶＭに対しての割込み要求の通知がなされた直後にスケジューラ１１１が行なう処理である割込み発生処理について、図６に記載のフローチャートを用いて説明する。尚、周辺デバイスからＣＰＵ１１に対して割込み要求が発生した際に統合制御プログラム１００にて行われる処理については、後述する。
【００７７】
Ｓ４０５では、スケジューラ１１１は、第一〜第三のＶＭのうちのいずれかに対してタイムスロットが割り当てられているか判定する。そして、いずれかのＶＭにタイムスロットが割り当てられている場合には（Ｓ４０５：Ｙｅｓ）、Ｓ４１０に処理を移行し、いずれのＶＭにもタイムスロットが割り当てられていない場合には（Ｓ４０５：Ｎｏ）、本処理を終了する。尚、現在タイムスロットが割り当てられているＶＭのことを、実行中のＶＭとも記載する。
【００７８】
Ｓ４１０では、スケジューラ１１１は、実行中のＶＭは、タイムスロット管理テーブルにサブのタスクとして登録されているか判定する（尚、以後、タイムスロット管理テーブルにメインのタスクとして登録されているＶＭをメインのＶＭとも記載し、サブのタスクとして登録されているＶＭをサブのＶＭとも記載する）。そして、実行中のＶＭがサブのタスクとして登録されている場合には（Ｓ４１０：Ｙｅｓ）、発生した割込み要求が、実行中のサブのＶＭに対応するメインのＶＭに対応しているか判定する（Ｓ４１５）。発生した割込み要求がこのメインのＶＭに対応している場合には（Ｓ４１５：Ｙｅｓ）、スケジューラ１１１は、Ｓ４２０に処理を移行する。また、実行中のＶＭがサブのタスクでない場合や（Ｓ４１０：Ｎｏ）、発生した割込み要求が上記メインのＶＭに対応していない場合には（Ｓ４１５：Ｎｏ）、スケジューラ１１１は、Ｓ４３５に処理を移行する。
【００７９】
Ｓ４２０では、スケジューラ１１１は、実行中のサブのＶＭに替えて、このサブのＶＭに対応するメインのＶＭにタイムスロットの残り時間を割り当て、このメインのＶＭにおける、発生した割込み要求に対応する割込み処理を実行する（Ｓ４２５）。そして、この割込み処理の実行が終了すると、対応する割込み要求フラグをクリアし、メインのＶＭに替えて、このメインのＶＭに対応するサブのＶＭにタイムスロットの残り時間を割り当てる（Ｓ４３０）。そして、Ｓ４３５に処理を移行する。
【００８０】
Ｓ４３５では、スケジューラ１１１は、発生した割込み要求が、実行中のＶＭに対応しているか判定する。発生した割込み要求が実行中のＶＭに対応している場合（Ｓ４３５：Ｙｅｓ）、実行中のＶＭにおける対応する割込み処理を実行する（Ｓ４４０）。そして、この割込み処理の実行が終了すると、対応する割込み要求フラグをクリアし、本処理を終了する。発生した割込みが実行中のＶＭに対応していない場合（Ｓ４３５：Ｎｏ）、本処理を終了する。
【００８１】
（４）タイムスロットの利用状況について
次に、上述したタイムスロット割当処理やサブのタスク開始処理によりタイムスロットの割り当てを行った場合のタイムスロットの利用状況について説明する。尚、スケジューラ１１１は、図３に記載のタイムスロット管理テーブルに従いタイムスロットの割り当てを行うものとする。また、ここでは、わかりやすく説明するため、タイムスロット１〜３の利用状況については、図７に記載の説明図を用いて特に詳しく説明する。
【００８２】
図７に記載されているように、タイムスロット１は、最初、メインのタスクである第一のＶＭ１２０に割り当てられる。そして、タイムスロット１が割り当てられた後、１００μｓが経過する前に第一のＶＭ１２０が自発的に停止すると、タイムスロット１の残り時間がサブのタスクである第三のＶＭ１４０に割り当てられる。尚、第一のＶＭ１２０が自発的に停止しなかった場合には、第三のＶＭ１４０へのタイムスロット１の残り時間の割り当ては行なわれず、タイムスロット１は、全て、第一のＶＭ１２０により消費される。
【００８３】
タイムスロット１が全て消費されると（換言すれば、タイムスロット１が第一のＶＭ１２０に割り当てられた後１００μｓが経過すると）、タイムスロット２についての割り当てが行なわれる。タイムスロット２は、最初、メインのタスクである第二のＶＭ１３０に割り当てられる。そして、タイムスロット２が割り当てられた後、１００μｓが経過する前に第二のＶＭ１３０が自発的に停止すると、タイムスロット２の残り時間がサブのタスクである第三のＶＭ１４０に割り当てられる。尚、第二のＶＭ１３０が自発的に停止しなかった場合には、第三のＶＭ１４０へのタイムスロット２の残り時間の割り当ては行なわれず、タイムスロット２は、全て、第二のＶＭ１３０により消費される。
【００８４】
タイムスロット２が全て消費されると（換言すれば、タイムスロット２が第二のＶＭ１３０に割り当てられた後１００μｓが経過すると）、タイムスロット３についての割り当てが行なわれる。タイムスロット３は、メインのタスクである第三のＶＭ１４０に割り当てられる。第三のＶＭ１４０は、自発的に停止することはないため、タイムスロット３は、全て第三のＶＭ１４０により消費される。
【００８５】
そして、タイムスロット４〜８に関しても、同様にして対応するタスクへの割り当てが行なわれる。
【００８６】
尚、タイムスロット９に関しては、後述する仮想デバイス１５０に割り当てられ、この仮想デバイス１５０により全て消費される。
【００８７】
また、タイムスロット管理テーブルにおいて、タイムスロット１０に対応するタスクは登録されていないため、タイムスロット１０の割り当てを行なうタイミングが到来しても、タイムスロット１０の割り当ては行なわれない（つまり、どのタスクも実行されない）。そして、タイムスロット１０の割り当てを行なうタイミングが到来した後、タイムスロット１０に相当する時間（１００μｓ）が経過すると、再度、タイムスロット１の割り当てが行なわれる。
【００８８】
（５）割込み処理の実行状況について
次に、割込み処理の実行状況について、図８に記載の説明図を用いて説明する。尚、スケジューラ１１１は、図３に記載のタイムスロット管理テーブルに従いタイムスロットの割り当てを行うものとする。また、この説明では、例としてＡ割込み，Ｂ割込み，Ｃ割込みが発生するものとしているが、Ａ割込み，Ｂ割込みに関しては、第一〜第三のＶＭがそれぞれ対応する割込み処理を有しており、Ｃ割込みに関しては、第二，第三のＶＭがそれぞれ対応する割込み処理を有している。
【００８９】
タイムスロット１０に対応する期間においてＡ割込みが発生し、タイムスロット１がメインのタスクである第一のＶＭ１２０に割り当てられると、最初に第一のＶＭ１２０におけるＡ割込みに対応する割込み処理が実行され、次に、この割込み処理以外の他の処理が実行される。そして、第一のＶＭ１２０が終了し、タイムスロット１の残り時間がサブのタスクである第三のＶＭ１４０に割り当てられると、最初に第三のＶＭ１４０におけるＡ割込みに対応する割込み処理が実行され、次に、この割込み処理以外の他の処理が実行される。
【００９０】
続いてタイムスロット２がメインのタスクである第二のＶＭ１３０に割り当てられると、最初に第二のＶＭ１３０におけるＡ割込みに対応する割込み処理が実行され、次に、この割込み処理以外の他の処理が実行される。この割込み処理の実行によりＡ割込みに対応する割込み処理は全て実行済となり、Ａ割込みに対応する割込み要求フラグは全てクリアされる。
【００９１】
また、タイムスロット２がメインのタスクである第二のＶＭ１３０に割り当てられている間にＢ割込みが発生すると、第二のＶＭ１３０におけるＢ割込みに対応する割込み処理が実行される。この割込み処理が終了すると、第二のＶＭ１３０におけるこの割込み処理以外の他の処理が実行される。そして、第二のＶＭ１３０の実行が終了し、タイムスロット２の残り時間がサブのタスクである第三のＶＭ１４０に割り当てられると、最初に第三のＶＭ１４０におけるＢ割込みに対応する割込み処理が実行され、次に、この割込み処理以外の他の処理が実行される。
【００９２】
続いてタイムスロット３〜５は、それぞれ、第三のＶＭ１４０に割り当てられる。尚、第三のＶＭ１４０はＢ割込みに対応している。しかし、第三のＶＭ１４０におけるＢ割込みに対応する割込み処理はタイムスロット２が割り当てられている間に既に実行されたため、タイムスロット３〜５が第三のＶＭ１４０に割り当てられている間に、この割込み処理が実行されることはない。
【００９３】
そして、タイムスロット６がメインのタスクである第一のＶＭ１２０に割り当てられると、最初に第一のＶＭ１２０におけるＢ割込みに対応する割込み処理が実行され、次に、この割込み処理以外の他の処理が実行される。この割込み処理の実行により、Ｂ割込みに対応する割込み処理は全て実行済となり、Ｂ割込みに対応する割込み要求フラグは全てクリアされる。そして、第一のＶＭ１２０が終了すると、タイムスロット６の残り時間がサブのタスクである第三のＶＭ１４０に割り当てられる。
【００９４】
続いてタイムスロット７は、メインのタスクである第二のＶＭ１３０に割り当てられる。その後、第二のＶＭ１３０が終了すると、タイムスロット７の残り時間がサブのタスクである第三のＶＭ１４０に割り当てられる。サブのタスクである第三のＶＭ１４０を実行中にＣ割込みが発生すると、第三のＶＭ１４０に替えて、メインのタスクである第二のＶＭ１３０にタイムスロットの残り時間が割り当てられ、第二のＶＭ１３０におけるＣ割込みに対応する割込み処理が実行される。そして、この割込み処理の実行が終了すると、タイムスロット７の残り時間が再び第三のＶＭ１４０に割り当てられ、第三のＶＭ１４０におけるＣ割込みに対応する割込み処理が実行される。この割込み処理の実行により、Ｃ割込みに対応する割込み処理は全て実行済となり、Ｃ割込みに対応する割込み要求フラグは全てクリアされる。Ｃ割込みに対応する割込み処理が終了すると、第三のＶＭ１４０における他の処理が実行される。
【００９５】
そして、タイムスロット８は、メインのタスクである第三のＶＭ１３０に割り当てられ、タイムスロット９，１０に関しては、第一〜第三のＶＭへの割り当ては行なわれない。また、タイムスロット１は、再び第一のＶＭ１２０に割り当てられる。
【００９６】
（６）仮想デバイスについて
次に、スケジューラ１１１におけるタスクの一つである仮想デバイス１５０について説明する。上述したように、この仮想デバイス１５０は、第一〜第三のＶＭと、統合ＥＣＵ１０におけるＣＰＵ１１の周辺デバイスへとのＩ／Ｆとなる部位である。また、この仮想デバイス１５０は、図３に記載のタイムスロット管理テーブルでは、タイムスロット９に対応するメインのタスクとして設定されている。ここでは、一例として、仮想デバイス１５０におけるＣＡＮコントローラ１４に対応する機能について説明する。
【００９７】
第一のＥＣＵ及び第二のＥＣＵはＣＡＮによる通信機能を有している。これらのＥＣＵのプログラムは、ＣＡＮによる通信を制御するためのＣＡＮドライバを有しており、このＣＡＮドライバでは、統合前のＥＣＵにおけるＣＡＮコントローラを制御するためのレジスタへのＩＯアクセスが行われる。第一のＶＭ１２０，第二のＶＭ１３０は、統合前のプログラムにおけるＣＡＮドライバを流用した第一のＣＡＮドライバ１２２，第二のＣＡＮドライバ１３２をそれぞれ有している。仮想デバイス１５０は、第一のＣＡＮドライバ１２２や第二のＣＡＮドライバ１３２からＣＡＮコントローラ１４への指令を受け付け、このＣＡＮコントローラ１４を制御する機能を有している。
【００９８】
図９に記載のブロック図には仮想デバイス１５０の構成が記載されているが、仮想デバイス１５０は、第一の仮想ＣＡＮドライバ１５１と、第二の仮想ＣＡＮドライバ１５２と、デバイス調停機構１５３とを有している。
【００９９】
第一の仮想ＣＡＮドライバ１５１は、第一のＶＭ１２０がＣＡＮ２０による他のＥＣＵとの通信を行う際に、第一のＣＡＮドライバ１２２から、ＣＡＮコントローラ１４への指令を受け付ける部位である。
【０１００】
また、第二の仮想ＣＡＮドライバ１５２は、第二のＶＭ１３０がＣＡＮ２０による他のＥＣＵとの通信を行う際に、第二のＣＡＮドライバ１３２から、ＣＡＮコントローラ１４への指令を受け付ける部位である。
【０１０１】
また、デバイス調停機構１５３は、第一のＣＡＮドライバ１２２や第二のＣＡＮドライバ１３２からの指令に従い、ＣＡＮコントローラ１４を制御する部位である。
【０１０２】
（６−２）データ送信処理について
次に、第一のＶＭ１２０または第二のＶＭ１３０が、ＣＡＮ２０を介して接続されている他のＥＣＵにデータを送信する場合の動作について、図１０に記載のシーケンス図を用いて説明する。
【０１０３】
第一のＶＭ１２０では、ＣＡＮ２０を介してデータ送信を行う場合には、第一のＣＡＮドライバ１２２がコールされる（Ｓ５０５）。
【０１０４】
第一のＣＡＮドライバ１２２は、第一のＥＣＵにおけるＣＰＵの周辺デバイスであるＣＡＮコントローラに対応する形式で、ＣＡＮ２０を介しての送信要求と送信データの設定を行なう。このとき、第一のＣＡＮドライバ１２２から、仮想デバイス１５０における第一の仮想ＣＡＮドライバ１５１がサブルーチンとしてコールされる（Ｓ５１０）。そして、第一の仮想ＣＡＮドライバ１５１が、第一のＥＣＵにおけるＣＡＮコントローラに対応する形式でＣＡＮ２０を介しての送信要求等を受け付けるのである。
【０１０５】
このようにしてＣＡＮ２０を介しての送信要求等を受け付けることにより、第一のＥＣＵにおけるプログラムを流用して第一のＣＡＮドライバ１２２とする際の変更規模を抑えることが可能となる。また、このとき、第一の仮想ＣＡＮドライバ１５１は、例えば、第一のＥＣＵにおけるＣＡＮコントローラと同様にして、第一のＣＡＮドライバ１２２に対して応答を行っても良い。こうすることにより、第一のＣＡＮドライバ１２２は、第一のＥＣＵと同一の形式でＣＡＮ２０を介してのデータ送信を行うことが可能となる。したがって、第一のＥＣＵにおけるプログラムを流用して第一のＣＡＮドライバ１２２とする際の変更規模をより抑えることが可能となる。
【０１０６】
そして、第一の仮想ＣＡＮドライバ１５１では、デバイス調停機構１５３に属するサブルーチンがコールされ（Ｓ５１５）、このサブルーチンにて、第一のＣＡＮドライバ１２２から受け付けた送信データがバッファされる。
【０１０７】
第二のＶＭ１３０においても、同様にしてＣＡＮ２０を介してのデータ送信要求が行なわれる。第二のＶＭ１３０では、ＣＡＮ２０を介してのデータ送信を行う場合には、第二のＣＡＮドライバ１３２がコールされる（Ｓ５２０）。
【０１０８】
第二のＣＡＮドライバ１３２は、第二のＥＣＵにおけるＣＡＮコントローラに対応する形式で、ＣＡＮ２０を介しての送信要求と送信データの設定を行なう。このとき、第二のＣＡＮドライバ１３２から、仮想デバイス１５０における第二の仮想ＣＡＮドライバ１５２がサブルーチンとしてコールされる（Ｓ５２５）。そして、第二の仮想ＣＡＮドライバ１５２が、第二のＥＣＵにおけるＣＡＮコントローラに対応する形式でＣＡＮ２０を介しての送信要求等を受け付けるのである。また、このとき、第二の仮想ＣＡＮドライバ１５２は、例えば、第二のＥＣＵにおけるＣＡＮコントローラと同様にして、第二のＣＡＮドライバ１３２に対して応答を行っても良い。
【０１０９】
そして、第二の仮想ＣＡＮドライバ１５２では、デバイス調停機構１５３に属するサブルーチンがコールされ（Ｓ５３０）、このサブルーチンにて、第二のＣＡＮドライバ１３２から受け付けた送信データがバッファされる。
【０１１０】
次に、タイムスロット９が仮想デバイス１５０に割り当てられ、仮想デバイス１５０の実行が開始されると、デバイス調停機構に属するサブルーチンがコールされる（Ｓ５３５）。このサブルーチンは、ＣＡＮコントローラ１４に対し、このＣＡＮコントローラ１４に対応する形式で、第一のＣＡＮドライバ１２２等から受け取った送信データの送信を指示する。具体的には、ＣＡＮコントローラ１４にＩＯアクセスを行い（Ｓ５４０）、バッファされている送信データをＣＡＮコントローラ１４の送信バッファにセットし、送信を指示する。
【０１１１】
（６−２）データ受信時の動作について
次に、統合ＥＣＵ１０がＣＡＮ２０を介して接続されている他のＥＣＵからデータを受信する場合の仮想デバイス１５０等の動作について、図１１に記載のシーケンス図を用いて説明する。
【０１１２】
統合ＥＣＵ１０がＣＡＮ２０を介して他のＥＣＵからデータを受信すると、ＣＡＮコントローラ１４は、ＣＰＵ１１に対して割込み要求を通知し（Ｓ６０５）、この割込み要求に対応する割込みハンドラ（以後、ＣＡＮ受信割込みハンドラとも記載）がコールされる（Ｓ６１０）。尚、このＣＡＮ受信割込みハンドラは、仮想デバイス１５０におけるデバイス調停機構１５３に属するものである。
【０１１３】
このＣＡＮ受信割込みハンドラでは、ＣＡＮコントローラ１４から受信データが取得される。そして、受信データが第一のＶＭ１２０宛のデータである場合には、第一のＣＡＮドライバ１２２に属するサブルーチンがコールされる（Ｓ６１５）。このサブルーチンでは、第一のＶＭ１２０に対してのＣＡＮ受信割込み要求フラグがセットされ、第一のＥＣＵにおけるＣＡＮコントローラと同様の形式で、第一のＶＭ１２０に対してのデータ受信の通知や、受信データのバッファが行なわれる。また、受信したデータが第二のＶＭ１３０宛のデータである場合にも同様に、第二のＣＡＮドライバ１３２に属するサブルーチンがコールされる（Ｓ６２０）。このサブルーチンでも、第二のＶＭ１３０に対してのＣＡＮ受信割込み要求フラグがセットされ、第二のＥＣＵにおけるＣＡＮコントローラと同様の形式で、第二のＶＭ１３０に対してのデータ受信の通知や、受信データのバッファが行なわれる。
【０１１４】
［効果］
本実施形態の統合制御プログラム１００におけるスケジューラ１１１では、タイムスロット１，６に対応付けて、リアルタイム性が要求される第一のＶＭ１２０がメインのタスクとして登録されていると共に、リアルタイム性が要求されない第三のＶＭ１４０がサブのタスクとして登録されている。また、タイムスロット２，７に対応付けて、リアルタイム性が要求される第二のＶＭ１３０がメインのタスクとして登録されていると共に、第三のＶＭ１４０がサブのタスクとして登録されている。そして、メインのタスクとして登録されている第一のＶＭ１２０或いは第二のＶＭ１３０が、自身に割り当てられたタイムスロットを全て消費することなく処理を終了した場合には、サブのタスクである第三のＶＭ１４０に、このタイムスロットの残り時間が割り当てられる（Ｓ３１０）。したがって、スケジューラ１１１によれば、リアルタイム性が要求されない第三のＶＭ１４０により実現される処理の停滞を抑えつつ、第一〜第三のＶＭをＣＰＵに並行して実行させることができる。
【０１１５】
また、スケジューラ１１１では、実行中のＶＭに対応する割込み要求が発生した場合には、このＶＭにおける、発生した割込み要求に対応する割込み処理が実行される（Ｓ４４０）。したがって、ＶＭが有している割込み処理を確実に実行することができる。このため、統合前のＥＣＵの制御プログラムに割込みハンドラが用いられている場合であっても、この割込みハンドラが流用されたＶＭを処理単位とすることができる。このため、複数のＥＣＵの制御プログラムを一つに統合する際の変更規模の増加を抑えることができる。
【０１１６】
尚、この割込み処理の実行に関しては、例外が存在する。具体的には、サブのＶＭを実行中に、このサブのＶＭに対応するメインのＶＭに対しての割込み要求が発生した場合には、サブのＶＭの実行を中断し、メインのＶＭにおける、上記割込み要求に対応する割込み処理が実行される（Ｓ４２５）。そして、この割込み要求がサブのＶＭに対応している場合には、メインのＶＭにおける割込み処理が終了した後に、サブのＶＭにおける割込み処理が実行されるのである（Ｓ４４０）。このため、優先的にメインのＶＭにおける割込み処理を実行することができる。したがって、メインのＶＭをサブのＶＭに対してより優先的に実行することができ、メインのＶＭのリアルタイム性をより確実なものとすることができる。
【０１１７】
また、スケジューラ１１１では、割込み要求が発生した状態で、この割込み要求に対応するＶＭにタイムスロットが割り当てられると、最初に、このＶＭにおける、この割込み要求に対応する割込み処理が実行される（Ｓ２４０，Ｓ３２５）。したがって、発生した割込み要求に対応する割込み処理を速やかに実行することができる。
【０１１８】
また、本実施形態の統合制御プログラム１００では、仮想デバイス１５０は、第一のＶＭ１２０から、統合前のＥＣＵである第一のＥＣＵと同様の形式でＣＡＮコントローラ１４への指示を受け付ける第一の仮想ＣＡＮドライバ１５１を有していると共に、第二のＶＭ１３０から、統合前のＥＣＵである第二のＥＣＵと同様の形式でＣＡＮコントローラ１４への指示を受け付ける第二の仮想ＣＡＮドライバ１５２を有している。また、統合制御プログラム１００では、第一のＶＭ１２０に対し、第一のＥＣＵと同様の形式で、ＣＡＮコントローラ１４が受信したデータの提供が行なわれると共に、第二のＶＭ１３０に対し、第二のＥＣＵと同様の形式で、ＣＡＮコントローラ１４が受信したデータの提供が行なわれる。このため、第一のＥＣＵの制御プログラムに基づき第一のＶＭ１２０を作成する際、第一のＥＣＵの制御プログラムにおけるＣＡＮドライバを流用することが可能となる。また、同様にして、第二のＥＣＵの制御プログラムに基づき第二のＶＭ１３０を作成する際、第二のＥＣＵの制御プログラムにおけるＣＡＮドライバを流用することが可能となる。つまり、第一のＥＣＵの制御プログラムや第二のＥＣＵの制御プログラムを統合する際の変更規模の増加を抑えることができるのである。
【０１１９】
［他の実施形態］
（１）本実施形態では、第一〜第三のＶＭと、仮想デバイス１５０とがスケジューラ１１１の四つがタスクとして登録されているが、スケジューラ１１１に登録されるタスクの数は四つに限定されるものではない。また、本実施形態では、仮想デバイス１５０は、メインのタスクとしてタイムスロット９に割り当てられているが、サブのタスクとしてタイムスロットに割り当てられていても良い。また、ＶＭ等に替えて、例えば、外部装置を制御するためのアプリケーション等をタスクとしても良い。このような構成を有する場合であっても、同様の効果を得ることができる。
【０１２０】
（２）本実施形態のスケジューラ１１１では、一つのタイムスロットに対し、第一〜第三のＶＭのうちのいずれか一つがサブのタスクとして登録されている。しかし、一つのタイムスロットに対し、第一〜第三のＶＭ、或いは仮想デバイス１５０のうちの複数をサブのタスクとして登録可能とし、この複数のＶＭ等に優先順位を設定しても良い。そして、メインのタスクの実行が終了すると、サブのタスクとして登録されている複数のＶＭ等のうち、優先順位の高いＶＭ等から順に、タイムスロットの残り時間を割り当てても良い。このような構成を有する場合であっても、リアルタイム性が要求されないタスクにより実現される処理の停滞を抑えつつ、リアルタイム性が要求されるタスクとリアルタイム性が要求されないタスクをＣＰＵに並行して実行させることができる。
【０１２１】
［特許請求の範囲との対応］
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。
【０１２２】
保護機能付きＲＴＯＳ１１０及び仮想デバイス１５０が基本プログラムに相当する。また、保護機能付きＲＴＯＳ１１０によるスケジューリングの対象となるタスクが処理単位に相当する。また、第一のＶＭ１２０，第二のＶＭ１３０が、それぞれ、リアルタイム処理単位に相当し、第三のＶＭ１４０が非リアルタイム処理単位に相当する。また、第一のＶＭ１２０，第二のＶＭ１３０，第三のＶＭ１４０が、それぞれ、割込み対応処理単位に相当する。また、タイムスロット管理テーブルがタイムスロットデータに相当する。
【０１２３】
また、統合ＥＣＵ１０が制御装置に相当し、第一〜第三のＥＣＵが、それぞれ、他の装置に相当する。また、統合ＥＣＵ１０におけるＣＡＮコントローラ１４が自装置の周辺デバイスに、第一，第二のＥＣＵにおけるＣＡＮコントローラが、それぞれ、他の装置の周辺デバイスに相当する。
【０１２４】
また、タイムスロット割当処理におけるＳ２２５が第一のステップに、Ｓ２４０が第八のステップにそれぞれ相当する。また、サブのタスク開始処理におけるＳ３１０が第二のステップに、Ｓ３２５が第八のステップにそれぞれ相当する。また、割込み発生処理のＳ４４０が第七のステップに、Ｓ４２５が第九のステップにそれぞれ相当する。
【０１２５】
また、図１０に記載のシーケンス図におけるＳ５１０及びＳ５１５，Ｓ５２５及びＳ５３０が、それぞれ、第三のステップに相当し、Ｓ５３５が第四のステップに相当する。また、図１１に記載のシーケンス図におけるＳ６１０が第五のステップに相当し、Ｓ６１５，Ｓ６２０が、それぞれ、第六のステップに相当する。
【符号の説明】
【０１２６】
１０…統合ＥＣＵ、１１…ＣＰＵ、１２…ＲＯＭ、１３…ＲＡＭ、１４…ＣＡＮコントローラ、１５…内部バス、２０…ＣＡＮ、１００…統合制御プログラム、１１０…保護機能付きＲＴＯＳ、１１１…スケジューラ、１２０…第一のＶＭ、１２１…ＡＵＴＯＳＡＲ、１２２…第一のＣＡＮドライバ、１３０…第二のＶＭ、１３１…ＯＳＥＫ、１３２…第二のＣＡＮドライバ、１４０…第三のＶＭ、１４１…Ｌｉｎｕｘ、１５０…仮想デバイス、１５１…第一の仮想ＣＡＮドライバ、１５２…第二の仮想ＣＡＮドライバ、１５３…デバイス調停機構。
【図１】
2010170320.tif 000003
【図２】
2010170320.tif 000004
【図３】
2010170320.tif 000005
【図４】
2010170320.tif 000006
【図５】
2010170320.tif 000007
【図６】
2010170320.tif 000008
【図９】
2010170320.tif 000009
【図１０】
2010170320.tif 000010
【図１１】
2010170320.tif 000011
【図７】
2010170320.tif 000012
【図８】
2010170320.tif 000013