本発明は、ソフトウェアの実行に必要な情報である、データ、パラメータ、そして、コマンド等の記憶制御のための制御システム、そして、その制御方法であり、例えば、自動車、鉄道、航空機、ロボット、通信装置、ネットワーク装置、ビル設備等の制御対象の駆動のために必要な情報の記憶を制御する制御システムである。制御システムは制御対象とともに全体システムを構成する。制御システムは、マイコン、パソコン、または、サーバである。なお、ソフトウェアの実行に必要な情報である、データ、パラメータ、コマンド等を“データ”として括って、特許請求の範囲、そして、実施形態において表記した。
前記制御システムの実施形態を、図面を用いて説明する。図1に、マルチコアプロセッサを備える制御システム(制御装置)101のハードウェアブロック図を示す。制御システム101はCPU102、メインメモリ103、及び、周辺装置104を含む。CPU102は、夫々、アプリケーションプログラム(タスク)を実行する、N個のコア105~107を搭載し、夫々のコアにL1キャッシュ108~110が設けられている。コアは請求項に記載のコントローラの一例である。メインメモリとキャッシュメモリは夫々記憶資源である。なお、以後、実施形態、そして、特許請求の範囲において、アプリケーションプログラムをアプリケーションと略称する。メインメモリのデータは、HDD、フラッシュメモリドライブ等の非可搬型記憶媒体から読み出されて設定される。
夫々のコアとは別に、CPU102内にL2キャッシュ111が存在する。L1キャッシュ108~110とL2キャッシュ111とによってキャッシュメモリが構成される。L1キャッシュ108~110とL2キャッシュ111とは夫々メインメモリ103に保管されている命令およびデータを一時的に保持する。L1キャッシュ108~110はL2キャッシュ111よりも短時間で書き込みや読み出しを完了できる。L2キャッシュ111は、L1キャッシュ108~110とメインメモリ103の中間に位置して両者を繋ぐ機能を有する。なお、L1キャッシュ108~110、及び、L2キャッシュ111の配置は図1の例に限らず、L1キャッシュ108~110をまとめて全コア共通で管理される形態や、L2キャッシュ111を各コアで管理する等の他の形態でもよい。他の形態については後述する。
制御システム101は周辺装置104を介して外部と通信する。制御システム101は、例えば、自動車のコントロールユニットとして、周辺装置104を介して、カメラによる画像データ、超音波センサやレダーセンサ、速度センサ、加速度センサ等による検出データ、を得て、制御対象としての自動車に対して緊急制御(衝突回避等)を実行するよう、制御対象の操作系(ブレーキ装置、操舵装置、懸架装置等)に制御信号を送信する。なお、メインメモリやキャッシュメモリに格納されるコマンドも0/1の並びとして扱うことができるため、既述のとおり、狭義の“データ”に加えて、プログラム、コマンドも広義の“データ”に含めることとした。
L1キャッシュ108~110やL2キャッシュ111はメインメモリ103に格納されたデータの少なくとも一部を格納する。コアは、L1キャッシュ内に必要なデータが存在しない場合、L2キャッシュからデータを読み出し、L2キャッシュにもデータがない場合にはメインメモリ103からデータを読み出す。コアは読み出したデータによってL1キャッシュ内のデータを入れ替える。この入れ替えに多く用いられる方式がLRU(Least Recent Used)である。これは、キャッシュメモリに保存されたデータごとにLRUカウンタを設けて、データに最後にアクセスした順番を管理することによって、高頻度でアクセスするデータを優先的にキャッシュメモリに残すという管理方式である。
LRUカウンタを用いたキャッシュメモリの管理方式の概要を図2に示す。図2は、管理方式の一例として、キャッシュメモリの実装方式の一つであるフルセットアソシアティブ方式を示している。この方式は、キャッシュメモリ内のデータを、アドレス情報の代わりにTAGによって管理する。アプリケーションは、TAGにヒットした箇所のデータを参照する。例えば、アプリケーションはデータを読み出す際、アプリケーションを実行するコア1(105)のL1キャッシュ108にアクセスし、このデータが存在する場合にはこれを用いる。アプリケーションはアクセスしたデータのLRUカウンタを0に設定し、その他データのLRUカウンタを1インクリメントする。なお、アクセスしたデータよりLRUカウンタの値が大きいものはインクリメントされない。
L1キャッシュ108に対象データが存在しない場合、アプリケーションは、L2キャッシュ111にアクセスし、データが存在する場合にはこれを利用する。アプリケーションは、L1キャッシュ108に保存されているデータのうちLRUカウンタが一番大きいデータを削除し、L2キャッシュ111から読み込んだデータをL1キャッシュ108に保存のうえ、当該データのLRUカウンタを0に設定、その他データのLRUカウンタを1インクリメントする。
コアは、キャッシュメモリに格納されたデータ数がキャッシュメモリのライン数を超えた場合に、キャッシュメモリからデータを削除する。L1キャッシュ108から削除されたデータはL2キャッシュ111へ保存される。
アプリケーションは、L2キャッシュ111にも必要なデータが存在しない場合、メインメモリ103にアクセスし、目的のデータを取得する。この際、アプリケーションは、L1キャッシュ108に保存されているデータのうちLRUカウンタの値が一番大きいデータを削除し、メインメモリ103から読み込んだデータを保存のうえ、当該データのLRUカウンタを0に設定、その他データのLRUカウンタを1インクリメントする。
さらに、コアは、L2キャッシュ111に保存されているデータのうちLRUカウンタの値が一番大きいデータを削除し、メインメモリ103から読み込んだデータをL2キャッシュ111に保存し、当該データのLRUカウンタの値を0に設定し、その他データのLRUカウンタの値を1インクリメントする。
アプリケーションは、L2キャッシュ111から削除したデータをメインメモリ103に保存する。アプリケーションは、L2キャッシュ111に保存されているデータのうちLRUカウンタが一番大きいデータを削除し、メインメモリ103から読み込んだデータを保存のうえ、当該データのLRUカウンタを0に設定し、その他データのLRUカウンタの値を1インクリメントする。
アクセスの内容が書き込みであった場合、アプリケーションは、L1キャッシュ108へライトデータを格納する。その際、アプリケーションは、当該データがL1キャッシュ108に存在すると、当該データのLRUカウンタを“0”に設定し、その他データのLRUカウンタを1インクリメントする。アクセスしたデータよりLRUカウンタの値が大きいもののインクリメントは実行されない。
前記ライトデータがL1キャッシュ108に存在しない場合、アプリケーションは、LRUカウンタが一番大きいデータを削除し、そして、ライトデータを格納して、そのLRUカウンタを“0”に設定し、その他データのLRUカウンタを1インクリメントする。キャッシュメモリから削除されたデータの扱いは、既述した、データの読み出しにおける取り扱いと同じである。
なお、ライトデータは、既述のとおり、ライトバックと呼ばれる方式によって管理されるが、データの書き込み時に毎回L1キャッシュ108だけでなくL2キャッシュ111およびメインメモリ103にデータが書込まれるライトスルー方式の適用が否定されるものではない。
キャッシュメモリの内部を区切ってブロックごとにLRUが管理されるセットアソシアティブ方式、そして、キャッシュメモリの内部が区切られないフルセットアソシアティブ方式が存在する。両者とも、LRUカウンタの基本的動作は同様である。図1の制御システムは、フルセットアソシアティブ方式、セットアソシアティブ方式およびダイレクトマップ方式のいずれをも採用することができる。
キャッシュメモリへのデータの置き換えを管理する方式にはLRUの他に、ラウンドロビン、ランダム等があるが、いずれかに制限されるものではないではない。キャッシュメモリのラインサイズは通常32~64バイトであり、サイズは限定されるものではない。
L1キャッシュ108~110、及び、L2キャッシュ111に、アプリケーションが必要とするデータが存在せず、アプリケーションによって、メインメモリ103へアクセスされなければならないデータが多い場合、アプリケーションの実行に大幅な遅延が生じる。そこで、緊急時等高速に処理されなければならないアプリケーション(優先アプリケーション)が必要とするデータは極力L1キャッシュ108~110、及び/又は、L2キャッシュ111に維持されることが好ましい。これを、制御システムの機能ブロック図である図3に基づいて説明する。
図3は、CPU102内部のソフトウェアの構成、そして、メインメモリ103内のデータ構造の一部を示す。CPU102は、コア1(105)に、必要時、例えば、緊急時に優先して実行されるべき優先アプリケーション301と、それ以外のアプリケーション(通常アプリケーション)302とが混在して駆動させている。優先アプリケーションとは、例えば、相対的に優先度が高いアプリケーションをいい、通常アプリケーションとは相対的に優先度が中小程度のアプリケーションをいう。優先アプリケーション301を高優先アプリケーションと呼び、通常アプリケーション302を低優先アプリケーションと呼んでもよい。
さらに、CPU102は、スケジューリングモジュール303をコア1(105)以外のコアの一つ又は複数において動作させている。図3は、スケジューリングモジュール303がコア2(106)において実行されることを示している。スケジューリングモジュール303は、複数のアプリケーション夫々について、その駆動を開始するタイミング、そして、駆動を中断するタイミング等を制御している。すなわち、スケジューリングモジュール303は、コア1の優先アプリケーション301、通常アプリケーション302、そして、後述のキャッシュ維持アプリケーション304夫々の動作のタイミングを制御する。
スケジューリングモジュール303は、所定条件で、例えば、緊急時に、コア1が、通常アプリケーション302の駆動中でもこれを中断する等して、優先アプリケーション301を優先して実行させるようにする。スケジューリングモジュール303は、コア毎のアプリケーションの実装の形態を、後述のコア配置管理情報309に基づいて知ることができる。なお、“モジュール”とはソフトウェアによって実行される機能を意味する。“モジュール”を、“手段”、“機能”、“要素”、“回路”、又は、“部”等他の用語に置き換えてもよい。モジュールは、ハードウェア、又は、ソフトウェアとハードウェアとの協働によって、実現されてもよい。どのコアにどのようなアプリケーションを配置するかは、コアの負荷に応じて適宜、設定、又は、変更されてよい。
スケジューリングモジュール303は、コア配置管理情報309に基づいて、優先アプリケーション301、通常アプリケーション302が稼働している、コア1とは別なコア(コア2)に、キャッシュ維持アプリケーション304を稼働させている。図4に、コア配置管理情報309としての管理テーブルを示す。コア配置管理情報309は、アプリケーションの種別と、当該アプリケーションを実行するコアとの関係を規定している。コア配置管理情報309は、制御システム101のメインメモリ103に格納されている。コア配置管理情報309は制御システム101の管理者によってメインメモリ103に登録されてよい。
キャッシュ維持アプリケーション304は、優先アプリケーション301がキャッシュヒットミスを緊急時に発生して動作遅延をきたさないように、優先アプリケーション301に必要なデータ(維持対象データ)を、維持対象管理情報308に基づいて、キャッシュメモリに、事前に、維持、格納、登録、記憶、保持、保有、又は、設定しておく。キャッシュ維持アプリケーション304のこの動作を、“キャッシュ維持”と記載する。維持対象管理情報308はメインメモリ103に記録されている。
図3に示すように、キャッシュ維持アプリケーション304は、データアクセスモジュール306と維持対象管理モジュール307とを備える。維持対象管理機モジュール307はメインメモリ103の維持対象管理情報308を参照して、参照情報をデータアクセスモジュール306に渡し、データアクセスモジュール306はキャッシュメモリにアクセスして、キャッシュメモリに維持対象データを格納する。データが格納されるキャッシュメモリは、L1キャッシュ108、L2キャッシュ111、そして、L1キャッシュ108の少なくとも一つでよい。要するに、優先アプリケーション301がアクセスできるキャッシュメモリであればよい。
キャッシュ維持アプリケーション304は、例えば、タイマ割込み処理によって、継続的に実施されればよい。キャッシュ維持アプリケーション304が優先アプリケーション301の動作中に実行されることを妨げるものではないが、同じデータへの同時アクセスによる競合が発生して、優先アプリケーションの動作遅延を引き起こすのを防ぐため、優先アプリケーション301の駆動中にはスケジューリングモジュール303がキャッシュ維持アプリケーション304を中断すればよい。
コア2において、スケジューリングモジュール303はキャッシュ維持アプリケーション304を優先して動作させる。スケジューリングモジュール303は、キャッシュ維持アプリケーション304を動作させていない間、他アプリケーション305を駆動することができる。スケジューリングモジュール303は、キャッシュ維持アプリケーション304を常に高優先度で運用してもよい。また、スケジューリングモジュール303は他アプリケーション305が動作していない隙間時間に、キャッシュ維持アプリケーション304を動作させてもよいし、さらにまた、スケジューリングモジュール303はキャッシュ維持アプリケーション304を周期的に動作させてもよい。
図5に、維持対象データの管理情報(維持対象管理情報308)としての管理テーブルの一例を示す。管理テーブルには、対象番号(エントリ)と、データが格納されているメインメモリアドレスと、データの変数型とが記録されている。これらの管理情報によって、データアクセスモジュール306は維持対象データを特定することができる。
優先アプリケーション301が必要とするデータは予め判明しているため、維持対象管理モジュール307は、維持対象データを維持対象管理情報308としてメインメモリ103に予め設定(登録)し、また、これを更新することができる。データアクセスモジュール306は、維持対象管理情報308に基づいて、メインメモリ103にアクセスしてデータを取り込み、当該データをキャッシュメモリに記録する。
キャッシュ維持アプリケーション304を詳しく説明する。図6は、キャッシュ維持アプリケーション304の動作例を説明するフローチャートである。キャッシュ維持アプリケーション304は、維持対象管理モジュール307を実行して維持対象を決定するとデータアクセスモジュール306にキャッシュ維持を実行させる。
維持対象管理モジュール307は、維持対象を選択するための選択番号を変数として保持し、フローチャートの起動後にこれを0にセットする(S401)。その後、維持対象管理モジュール307は、選択番号と維持対象管理テーブル(維持対象管理情報308)の対象番号が一致する箇所を参照し、対象のアドレスおよびデータ型情報を取得する(S402)。
取得した情報をもとに、データアクセスモジュール306は対象のデータ型およびアドレスを指定してデータアクセスを行う(S403)。データアクセスモジュール306は、データアクセスによって、メインメモリ103からL1キャッシュ、又は、L2キャッシュへデータを格納し、そして、これらキャッシュメモリのLRUカウンタを更新して、優先アプリケーション301が必要とするデータが優先アプリケーション301の実行時にキャッシュメモリから削除された状態になっていないように、キャッシュメモリに対象データが維持されるようにする。次いで、維持対象管理モジュール307は、選択番号を1インクリメントする(S404)。
選択番号の値がキャッシュ維持の対象の数と同数まで達すると、即ち、データアクセスモジュール306が全ての維持対象にアクセスし終わると(S405:Yes)、データアクセスモジュール306は、選択番号を0にセットする。選択番号の値がキャッシュ維持対象の数まで達していない場合(S405:No)、ステップS407が終了シーケンスに入っているか確認し、これを肯定するとフローチャートが終了する(S407:Yes)。ステップS407がNoを判定すると、ステップS402にリターンする(S407:No)。図4のフローチャートによって、管理テーブル308に登録された全ての維持対象データがキャッシュメモリに設定され、突然に、優先アプリケーション301が動作してもキャッシュヒットミスが生じないようにできる。
なお、フローチャート終了の管理はフラグを用いた管理方法や、killシグナルやpthread_cancelのようなシグナルを、維持対象管理モジュール307が受け取ってキャンセルハンドラを呼びだす仕組み等、格別限定されない。また、維持対象管理情報308に、データ型の代わりにデータサイズが登録され、データアクセスモジュール306は、memcopyのような変数型によらずサイズを指定して、データのリード、ライトを実行してもよい。
既述のデータアクセス(図6:S403)について詳しく説明する。データアクセスモジュール306のデータアクセスは読み出しと書き込みとを含む。データ読み出しは、if文による参照やzeroレジスタへのコピー等により実現される。プログラミング言語にもよるが、アセンブリを直接指定可能な場合にはload命令等がある。
そのほか、例えば、ARMのCPUに実装されているプリフェッチ命令でも読み出しと同様の効果が得られる。キャッシュメモリのラインサイズは通常32~64バイトが多く、キャッシュメモリのラインに格納されている全データをアクセスする必要は無く、ラインごとに1つのデータをアクセスすることにより同ラインに格納されたデータのキャッシュ維持が可能である。
データ書き込みは、例えば target_data = target_data + 0;の形で対象自身に同じデータを書き込むなどにより実現される。アセンブリが直接指定可能な場合、store命令によってもよい。
データアクセス(S403)に基づく、キャッシュメモリへのデータの維持は、L1キャッシュ109、及び、/又は、L2キャッシュ111への維持対象データの登録を含む。例えば、図7において、データアクセスモジュール306は、L1キャッシュ109に維持対象データが存在すればLRUカウンタを更新し、当該データがL1キャッシュ109に存在せず、L2キャッシュ111に存在する場合には、L2キャッシュからデータを読み出してLRUカウンタを更新して格納する。データがL2キャッシュ111にも存在しない場合には、データアクセスモジュール306は、メインメモリ103からデータを読み出して、データをL2キャッシュ111にLRUカウンタを更新して格納する(S1)。
以上により、少なくともL2キャッシュ111に、優先アプリケーション301が必要とするデータが維持された状態を、優先アプリケーション301が動作する前に形成しておくことが可能になる。なお、L2キャッシュ111はL1キャッシュ109に比べて、アクセスのための時間を要するが、キャッシュ維持アプリケーション304の負荷は小さい、と云ってよい。
また、図8に示すように、データアクセスモジュール306は、メインメモリ103から維持対象データを読み出し、当該データをL1キャッシュ109の同じアドレスへ書込むことによって、L1キャッシュ109へ維持対象データを格納することができる(S2)。
一方、コア1に存在する所定アプリケーションがスヌープ機能に基づいてコア2にあるL1キャッシュ109から維持対象データを読み込んで、当該データをL1キャッシュ108に維持することが可能となる(S3)。スヌープの機能の分、キャッシュ維持アプリケーション304に加わる負荷は大きくなるが、優先アプリケーション301は自身のコア1(105)のL1キャッシュ108の維持対象データにアクセスできるために、優先アプリケーション301が実行される際のリアルタイム性が向上する。キャッシュの実装方法やアプリケーション構成によってはL2キャッシュ111に前記対象データを維持するのが困難な場合もあるため、L1キャッシュ109に維持対象データを格納することは望ましい。
図9に、コア2がキャッシュ維持アプリケーション304を実行している態様(図3)とキャシュアプリケーション304が付加されていない従来態様とについて、タイミングチャートに於ける比較結果を示す。図9の上段が後者のチャートを示し、図9の後段が前者のチャートである。図9の縦軸がアプリケーションの優先度を示し、横軸が時間経過を示す。縦軸の矢印方向が、優先度が高いことを示す。301は既述のとおり優先アプリケーションであり、302は通常アプリケーションであり、夫々コア1に属する。304は既述のとおり、キャシュ維持アプリケーションである。
図9の“H”は、前者に於ける優先アプリケーション301の所要時間と後者に於ける優先アプリケーション301の所要時間との差分である。後者においては、コア2にキャッシュ維持アプリケーション304が存在しないため、これが、オーバーヘッドとなって、優先アプリケーション301の開始から終了までHで示される時間幅の分長くなる。
従来、通常アプリケーション302が膨大なデータを利用してキャッシュを使いきってしまうと、優先アプリケーション301に係るデータはキャッシュメモリから削除されてしまい、優先アプリケーション301の遅延に繋がり、そのリアルタイム性が保証されない。キャッシュ維持アプリケーション304を、優先アプリケーション301とこれ以外のアプリケーション302とが混在するコアと別コアにおいて駆動させることにより、優先アプリケーション301の優先処理を妨げることなく、優先アプリケーション301が使用する可能性がある全てのデータ(命令およびデータ)をキャッシュメモリに維持できる。
既述の従来例のように、優先アプリケーションのキャッシュヒットミスを防ぐために、優先アプリケーションを非緊急時に実行しても、緊急制御時に於ける、優先アプリケーションのための入力値とは異なるため、結局のところ、緊急制御が必要になった時点では、優先アプリケーションに必要な命令やデータをキャッシュ維持できない。
一方、既述の実施形態によれば、キャシュ維持アプリケーション304によって、緊急時直前までに、優先アプリケーションに必要な命令やデータをキャッシュメモリに維持することができる。なお、図1に係る制御システムは、自動車の自動運転の他、電源ユニット制御やロボット制御等、様々な緊急制御を必要とする技術分野に適用することができる。
マルチコアの制御システムに於ける、アプリケーションの高速化方法としてはシングルコア向けアプリケーションを移植する方法があるが、シングルコア向けに作られたプログラム群をマルチコア上で実行する場合、実行タイミングの変化などによりタスク間のデッドロックやバグの誘発という危険性があり、プログラムの設計やその検証のやり直しが必要となる。これに対して、既述の実施形態によれば、この種の対応を必要とすることなく、優先アプリケーションの高速化を達成することができる。
次に、第2の実施形態について説明する。図10は、第2の実施形態に係る制御システムの機能ブロック図であり、図11は、第2の実施形態に係る維持対象管理情報308である。第2の実施形態が第1の実施形態と異なる点は、キャシュ維持アプリケーション304が維持依頼管理モジュール901を備えることである。維持依頼管理モジュール901は、優先アプリケーション301からのリクエストによって、維持対象管理モジュール307を経由して、維持対象管理情報308に、維持対象データの帰属先としてのアプリケーションを追加、変更、又は、削除する。
図11の維持対象管理情報308には、このアプリケーション名が登録されている。リクエストの内容は、アプリケーションのID、維持対象データ数、維持対象データそれぞれのアドレス、および、変数型を含む。アプリケーションのIDはスレッドIDやプロセスIDなど、アプリケーションをコア1に実装する形態に合わせて変えてよい。維持対象データの変数型はデータのサイズに置き換えてもよい。
状況変化により、維持対象データをキャッシュメモリに維持することが必要無くなった際、優先アプリケーション301は、キャッシュ維持をキャンセルできるようにしてもよい。維持依頼管理モジュール901は、優先アプリケーション301からキャンセルリクエストを受け取り、維持対象管理モジュール307を経由して、維持対象管情報308から、キャンセルリクエストに係るアプリケーションの情報を削除する。キャンセルリクエストの内容はアプリケーションのID、キャンセル対象データ数、キャンセル対象データそれぞれのアドレス及び変数型を含む。
キャンセル時のデータ指定を簡単化するため、維持依頼管理モジュール901は、依頼時に、維持対象データ群と結びついたラベルを生成し、依頼元アプリケーションへラベルを返し、キャンセル時にラベルを指定する形式を採ってもよい。さらに、通常アプリケーション302が誤って依頼をキャンセルしてしまうことを防ぐため、維持依頼管理モジュール901は、優先アプリケーション301以外からのキャンセル通知を拒否する形式や、キャンセル通知を受諾可能なアプリケーションを指定する形式を採用してもよい。
第2の実施形態によれば、システムの状況変化に応じて、複数の優先アプリケーションの中から、高速化を図るべき優先アプリケーションを変更することができる。例えば、自動車の自動運転システムにおいて、ドライバによる手動運転をサポートするモードと、システムが運転する自動運転のモードでは、夫々必要もしくは重要となるアプリケーションが異なる可能性がある。自動車に限らず、状況変化やモードの遷移などによりリアルタイム性を保障すべきアプリケーションが変わるようなシステムにおいて、アプリケーションからの依頼によりキャッシュ維持対象を変更することで、状況に応じて適したアプリケーションの高速化が可能となる。
次に、制御システムの第3の実施形態について説明する。第3の実施形態は、複数の優先アプリケーション301の優先度に基づいて、キャッシュメモリに、複数の優先アプリケーション夫々の維持対象データの格納の順番、及び、頻度を決定することに特徴を有する。優先アプリケーションが複数存在するなど、キャッシュメモリに維持すべき対象データ数が多い場合、全データをキャッシュメモリに格納できない可能性がある。そこで、維持対象管理モジュール307(図3、図 10)は、例えば、複数の優先アプリケーション夫々の優先度にしたがって、キャッシュメモリに対象データを維持すべき、優先アプリケーションを決定、判定、又は、選定することとした。これを図12~14を用いて説明する。
図12は、第3の実施形態に係る維持対象管理情報308の一例である。この管理テーブル308には、優先アプリケーションの優先度が追加されている。図13は、キャッシュ維持アプリケーション304の動作を説明するフローチャートである。図14は、キャッシュ維持アプリケーション304によって、対象データをキャッシュメモリに維持されるアプリケーションの遷移を表したタイムチャートである。
維持対象管理情報308は、図12に示されるように、アプリケーションの優先度、インデックス、対象数、連続維持数が追加されており、各データとアプリケーションとをタグ(インデックス)によって結び付けている。維持対象管理情報308は、維持数と、対象アプリケーションごとの選択番号とを保持している。
図13に示すように、まず、維持対象管理モジュール307は、維持数と各選択番号を0にセットする(S1201)。その後、維持対象管理モジュール307は、維持対象管理情報308(図12)にて管理している対象アプリケーション間の優先度を比較し、優先度比率に応じて各アプリケーションの連続維持数を決定する(S1202)。
図12のように、アプリケーション間の優先度比率(App_A:App_B)が2:1であった場合、維持対象管理モジュール307は、アプリケーションAとアプリケーションBについて、連続してキャッシュ維持を行う対象数の比率を優先度の比率と同様に2:1にする。そのうえで、データアクセスモジュール306は、優先度の高いアプリケーションから順番に選択する(S1203)。
データアクセスモジュール306は、選択したアプリケーションのインデックスを参照し、選択したアプリケーションの中で選択番号と一致するデータを選択し(S1204)、対象データのアドレス及び変数型情報を取得する(S1205)。データアクセスモジュール306は、取得したデータ情報をもとに、データアクセスを行う(S1206)。
データアクセスモジュール306は、維持数および選択番号を1インクリメントし(S1207)、選択番号が選択アプリケーションの対象数に達した場合(S1208:Yes)、選択番号を0にリセットする(S1209)。選択番号が選択アプリケーションの対象数に到達していない場合、そのまま次のステップへ進む(S1208:No)。
データアクセスモジュール306は、維持数が選択アプリケーションの連続維持数に達した場合(S1210:Yes)、選択アプリケーションを次の優先度のアプリケーションに変更する(S1211)。維持数が選択アプリケーションの連続維持数に到達していない場合、キャシュ維持アプリケーション304はそのまま次のステップへ進む(S1210のNo)。
その後、データアクセスモジュール306は、システムが終了シーケンスに入っているか確認し、入っている場合にはシステムを終了する(S1212:Yes)。システム終了でない場合、キャシュ維持アプリケーション304はS1204へ戻り、システム終了までS1204~S1212を繰り返す(S1212:No)。
データアクセスモジュール306は、図14に示すように、App_A(アプリケーションA)用の維持対象データの全てにアクセスしたのち、App_B(アプリケーションB)用の維持対象データの途中までアクセスする。次いで、キャシュ維持アプリケーション304は、App_Aのための維持に戻り、これを完了したらApp_B用の残りのための維持を継続する。以後これを繰り返す。アプリケーションAとアプリケーションBとの間の比率は、アプリケーションの優先度に依らず、イベント発生からデッドラインまでの時間や頻度等によって決定されてもよい。さらに、連続維持数を連続維持時間に代えてもよい。
第3の実施例によれば、アプリケーションの優劣に基づいて、アプリケーションのキャッシュに維持対象データの格納順番や頻度を制御することにより、優先アプリケーションが複数あっても、その中でより重要度が高いアプリケーションを優先して維持対象データをキャッシュメモリに保持させることが可能となる。なお、同一アプリケーション用の複数の維持対象データ間で優先度等の優劣を設けてキャッシュへメモリへのデータ維持を実行してもよい。
次に、第4の実施形態について説明する。この実施形態は、キャシュメモリにデータを維持すべき対象となるアプリケーションが複数存在する場合に、アプリケーションが起動するまでの時間に基づいて、複数のアプリケーション間でのデータの維持に関する順番等の優劣を決定する点に特徴を有する。図15は、第4の実施形態に係る制御システムの機能ブロック図である。図16は、第4の実施形態に係る維持対象管理情報308の一例を示す。図17は、第4の実施形態に於ける、キャシュ維持アプリケーション304の動作を示すフローチャートである。
キャッシュ維持アプリケーション304は、既述の第2の実施形態に係る制御システムの機能ブロックに加えて、周期/時間管理モジュール1401とタイマ設定モジュール1402とを備える。周期/時間管理モジュール1401は、図16の維持対象管理情報308に示すように、各アプリケーションについて、アプリケーションの実行周期と、当該周期と時刻に基づいて各アプリケーションが起動されるまでの時間と、を管理している。
周期/時間管理モジュール1401は、先ず、各アプリケーションの周期と前回の起動時刻から次の起動時刻を更新し、起動時刻が近いアプリケーションを選択する(S1601)。その後は、データアクセスモジュール306は、実施例3と同様に選択したアプリケーションの維持対象データ情報を取得し(S1602)、データアクセスを行う(S1603)。これをシステムが終了するまで繰り返す(S1604)。
周期/時間管理モジュール1401は、複数のアプリケーションの中から特定のアプリケーションを選択する際、キャッシュ維持に要する時間に基づいて、選択したアプリケーションが起動するまでにキャッシュ維持が完了できるアプリケーションを選択するようにしてもよい。また、キャッシュ維持アプリケーション304を常に動作させるのではなく、対象アプリケーションの次回起動時刻から維持に必要な起動時刻を算出し、タイマ設定機能1402によりタイマ1403をセットすることで、キャッシュ維持アプリケーションの駆動時刻を制御してもよい。
第4の実施形態によれば、キャッシュ維持対象としての複数のアプリケーションの夫々の次回起動時刻、即ち、夫々のアプリケーションの駆動タイミングに基づいて、複数のアプリケーションに対する、キャッシュ維持の優劣の一つとしての順番を決定することにより、実行タイミングが近いアプリケーションを優先して高速化を実現できる。また、キャッシュ維持時間とタイマを用いた駆動タイミング管理により、キャッシュ維持アプリケーション304の負荷を必要最小限に抑えることが可能である。
次に、本発明に係る制御システムのハードウェア構成の他の例を図面に示す。図18は、L1キャッシュ108もL2キャッシュ111と同様に、コア外でCPU内に構成されている例を示すブロック図である。図19は、L1キャッシュ108とL2キャッシュ111とも、マルチコアの夫々のコア内に構成されている例を示すブロック図である。図20は、図1のL1キャッシュ108とL2キャッシュ111とに加えて、各コア外でCPU102内にL3キャッシュ117が追加されている例を示すブロック図である。図21は、図19の制御システムの各コア外でCPU102内にL3キャッシュ117が追加されている例を示すブロック図である。CPU102がL3キャッシュを備える形態では、維持対象データをL3キャッシュ117に維持するようにしてもよい。