(57)【要約】【課題】複数のシステムでデータを共用する共用メモリにおいて、更新処理と参照処理の待機による遅延をさらに低減した記憶装置等を提供すること。【解決手段】共有メモリ３４に記憶されたデータを操作する記憶装置５０であって、複数のブロックに分割されブロック毎にデータを記憶する共有メモリ３４と、複数のブロックの状態を個別に示すポインタ３５と、ポインタ３５を排他する排他制御手段４０と、排他制御手段４０がポインタを排他している間、ポインタ３５を操作してブロックの状態を制御するポインタ制御手段４２、４４と、共有メモリ３４を排他することなく、状態に従いブロックに記憶されたデータを更新又は参照するアクセス手段４３、４５と、を有することを特徴とする。【選択図】図３
2009110063.tif 000002
【特許請求の範囲】
【請求項１】
共有メモリに記憶されたデータにアクセスする記憶装置であって、
複数のブロックに分割されブロック毎にデータを記憶する共有メモリと、
複数の前記ブロックの状態を個別に示すポインタと、
前記ポインタを排他する排他制御手段と、
前記排他制御手段が前記ポインタを排他している間、前記ポインタを操作して前記ブロックの前記状態を切り換えるポインタ制御手段と、
前記共有メモリを排他することなく、前記状態に従い前記ブロックに記憶されたデータを更新又は参照するアクセス手段と、
を有することを特徴とする記憶装置。
【請求項２】
前記アクセス手段は、前記ブロックに記憶されたデータを更新する更新手段と、前記ブロックに記憶されたデータを参照する参照手段と、を有し、
前記更新手段が、複数の前記ブロックのいずれかのブロックＡに記憶されたデータを更新している間、前記参照手段は、前記ブロックＡとは異なる、複数の前記ブロックのいずれかのブロックＢに記憶されたデータを参照する、
ことを特徴とする請求項１記載の記憶装置。
【請求項３】
前記ポインタが有する複数の小ポインタのそれぞれのアドレスは、前記ブロックの前記状態に対応づけて予め定められており、
前記ポインタ制御手段は、第１小ポインタに記憶されていた、前記共有メモリの所定のブロックＣのアドレスを、前記第１小ポインタと異なる第２小ポインタに記憶させ、前記ブロックＣの前記状態を切り換える、
ことを特徴とする請求項１又は２記載の記憶装置。
【請求項４】
複数の前記小ポインタのいずれか１つは、前記ブロックが最も最近に更新されたデータを記憶している前記状態であることを示す最新ポインタであり、
複数の前記小ポインタのいずれか１つは、前記ブロックが更新中のデータを記憶している前記状態であることを示す更新中ポインタであり、又は、
複数の前記小ポインタのいずれか１つは、前記ブロックが参照中のデータを記憶している前記状態であることを示す参照中ポインタである、
ことを特徴とする請求項３記載の記憶装置。
【請求項５】
いずれかの前記ブロックに記憶されたデータを更新する場合、
前記ポインタ制御手段は、前記更新中ポインタに前記ブロックのうち空き領域のブロックのアドレスを記憶させ、
前記アクセス手段が前記ブロックのデータを更新した後、
前記ポインタ制御手段は、前記更新中ポインタに記憶されている前記ブロックのアドレスを、前記最新ポインタに記憶させる、
ことを特徴とする請求項４記載の記憶装置。
【請求項６】
いずれかの前記ブロックに記憶されたデータを参照する場合、
前記ポインタ制御手段は、前記最新ポインタに記憶された前記ブロックのアドレスを、前記参照中ポインタに記憶させ、
前記アクセス手段が前記ブロックのデータを参照した後、
前記ポインタ制御手段は、前記参照中ポインタに無効値を記憶させる、
ことを特徴とする請求項４記載の記憶装置。
【請求項７】
請求項１〜６いずれか１項記載の記憶装置を有する情報処理装置。
【請求項８】
複数のブロックに分割されブロック毎にデータを記憶する共有メモリ、に記憶されたデータを操作するデータアクセス方法であって、
排他制御手段が、複数の前記ブロックの状態を個別に示すポインタを排他するステップと、
前記ポインタが排他されている間、ポインタ制御手段が、前記ポインタを操作して前記ブロックの前記状態を切り換えるステップと、
アクセス手段が、前記共有メモリを排他することなく、前記状態に従い前記ブロックに記憶されたデータを更新又は参照するステップと、
を有することを特徴とするデータアクセス方法。
【請求項９】
複数のブロックに分割されブロック毎にデータを記憶する共有メモリ、に記憶されたデータを操作するプログラムであって、
コンピュータを、
複数の前記ブロックの状態を個別に示すポインタを排他する排他制御手段と、
前記排他制御手段が前記ポインタを排他している間、前記ポインタを操作して前記ブロックの前記状態を切り換えるポインタ制御手段と、
前記共有メモリを排他することなく、前記状態に従い前記ブロックに記憶されたデータを更新又は参照するアクセス手段と、
として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリに記憶されたデータにアクセスする記憶装置、情報処理装置、データアクセス方法及びプログラムに関する。
【背景技術】
【０００２】
複数のシステムが並行して独立に実行する情報処理システムでは、一方のシステム（以下、更新システムという）が次々と更新するデータを、他のシステム（以下、参照システムという）が参照する処理が発生することがある。更新システムと参照システムは共通に利用するデータを共有メモリにおいてそれぞれ非同期なタイミングでデータにアクセス（例えば、更新や参照）するため、データの整合性を確保する共有メモリの排他制御が用いられる。
【０００３】
排他制御としてはセマフォやミューテックスが知られているが、これらは共有メモリが使用中であることを示す変数がゼロでなければ、更新システム又は参照システムが共有メモリの使用を許可されるものであり、更新システム又は参照システムいずれかのシステムにのみ共有メモリへのアクセスを許可する。しかしながら、セマフォ等では更新システムがデータを更新している間、参照システムが待機状態になり、参照システムがデータを参照している間、更新システムが待機状態となるため、処理効率が低下し特に所定時間内に処理の完了が要求されるリアルタイムシステムには実装が困難である。
【０００４】
また、排他制御の一形態として共有メモリをブロック単位で読み書き可能にした共有メモリシステムが提案されている（例えば、特許文献１参照。）。
【０００５】
図８は、特許文献１に記載された共有メモリのブロック図を、図９（ａ）（ｂ）は更新処理と参照処理それぞれの手順を示すフローチャート図である。図８に示すように、更新システム１０１のページ（共有メモリのデータに相当）は、参照システム１０２のリモート領域にコピーされてから参照される。
【０００６】
また、図９（ａ）に示すようにコピーされたページを更新システム１０１が更新する場合、更新システム１０１は参照システム１０２に更新するページの無効化（パージ）を要求し、書き込み権を獲得した後、更新を開始する。これにより参照システム１０２が更新前の古い情報を参照することを防止する。また、図９（ｂ）に示すように参照システム１０２がページのコピーを更新システム１０１に要求する場合、参照システム１０２は更新システム１０１から更新するページの更新権を剥奪した後、参照システム１０２はページを受信し参照処理を開始する。ページが更新されなければ、参照システム１０２はコピーされた当該ページを排他されることなく参照することができる。
【特許文献１】特開平１１−３９２０８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１記載の共有メモリシステムでは、ページの更新頻度が比較的少なければ更新が完了するまで参照システム１０２が待機しても大きな遅延にならないが、共有メモリのデータが頻繁に更新される場合、その間、参照システム１０２はデータを参照できず待機しなければならない。また、共有メモリに、相互に関連する複数のデータが記憶されることがあるが、関連する複数のデータの一部だけが更新された状態で、参照システム１０２がデータを更新すると参照システム１０２の処理結果が不正となってしまうため、参照システム１０２は関連のある全てのデータが更新されるまで待機しなければならない。したがって、図９（ａ）を例にすれば、参照システム１０２にパージ要求があってから更新システム１０１が更新処理を完了するまでの待機時間Ｔ１が長時間に及び、大幅な処理の遅延をもたらすという問題がある。
【０００８】
また、特許文献１記載の共有メモリシステムでは、関連のある複数のデータが更新された時点で参照システム１０２にコピーしておくことができるが、更新の頻度が多いとコピーの頻度も増大することとなるため、コピー処理のための処理時間の増加を回避できないという問題がある。
【０００９】
本発明は、上記課題に鑑み、複数のシステムでデータを共用する共用メモリにおいて、更新処理と参照処理の待機による遅延をさらに低減した記憶装置、情報処理装置、データアクセス方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題に鑑み、本発明は、共有メモリに記憶されたデータを操作する記憶装置であって、複数のブロックに分割されブロック毎にデータを記憶する共有メモリと、複数のブロックの状態を個別に示すポインタと、ポインタを排他する排他制御手段と、排他制御手段が前記ポインタを排他している間、ポインタを操作してブロックの状態を切り換えるポインタ制御手段と、共有メモリを排他することなく、状態に従いブロックに記憶されたデータを更新又は参照するアクセス手段と、を有することを特徴とする。
【００１１】
本発明によれば、共有メモリのブロックの状態を個別にポインタで切り換えることができるので、データを他にコピーすることなく、更新と参照を繰り返すことができる。また、ポインタのみを排他するので、排他による更新処理と参照処理の待機時間を最小限に抑制できる。
【００１２】
また、本発明の一形態において、アクセス手段は、ブロックに記憶されたデータを更新する更新手段と、ブロックに記憶されたデータを参照する参照手段と、を有し、更新手段が、複数のブロックのいずれかのブロックＡに記憶されたデータを更新している間、参照手段は、ブロックＡとは異なる、複数のブロックのいずれかのブロックＢに記憶されたデータを参照する、ことを特徴とする。
【００１３】
本発明によれば、更新手段がデータを更新している間に、参照手段がデータを参照することができる。
【００１４】
また、本発明の一形態において、ポインタは複数の小ポインタを有し、小ポインタのそれぞれのアドレスは、ブロックの状態に対応づけて予め定められており、ポインタ制御手段は、第１小ポインタに記憶されていた、共有メモリの所定のブロックＣのアドレスを、第１小ポインタと異なる第２小ポインタに記憶させ、ブロックＣの状態を切り換える、ことを特徴とする。
【００１５】
本発明によれば、アドレスで指定された小ポインタに、ブロックのアドレスを記憶させることで、ブロックの状態を切り換えることができる。
【００１６】
また、本発明の一形態において、複数の小ポインタのいずれか１つは、ブロックが最も最近に更新されたデータを記憶している状態であることを示す最新ポインタであり、複数の小ポインタのいずれか１つは、ブロックが更新中のデータを記憶している状態であることを示す更新中ポインタであり、又は、複数の小ポインタのいずれか１つは、ブロックが参照中のデータを記憶している状態であることを示す参照中ポインタである、ことを特徴とする。
【００１７】
本発明によれば、小ポインタを、最新ポインタ、更新中ポインタ又は参照中ポインタに対応させるので、小ポインタに記憶するブロックのアドレスにより、ブロックの状態を切り換えることができる。
【００１８】
また、本発明の一形態において、いずれかのブロックに記憶されたデータを更新する場合、ポインタ制御手段は、更新中ポインタにブロックのうち空き領域のブロックのアドレスを記憶させ、アクセス手段がブロックのデータを更新した後、ポインタ制御手段は、更新中ポインタに記憶されているブロックのアドレスを、最新ポインタに記憶させる、ことを特徴とする。
【００１９】
本発明によれば、空き領域のブロックのデータを更新し、そのブロックのアドレスを最新ポインタに記憶させるので、参照中のブロックがあってもデータを更新することができる。
【００２０】
また、本発明の一形態において、いずれかの前記ブロックに記憶されたデータを参照する場合、ポインタ制御手段は、最新ポインタに記憶されたブロックのアドレスを、参照中ポインタに記憶させ、アクセス手段が前記ブロックのデータを参照した後、ポインタ制御手段は、参照中ポインタに無効値を記憶させる、ことを特徴とする。
【００２１】
本発明によれば、最新ポインタのアドレスを参照中ポインタに記憶させるので、データをコピーすることなく更新中のブロックがあってもデータを参照することができる。
【００２２】
また、本発明の一形態において、ポインタは複数の参照中ポインタを有し、アクセス手段は、時間的に重複して、複数のブロックに記憶されたデータを参照する、ことを特徴とする。
【００２３】
本発明によれば、参照中ポインタを複数個用意することで、時間的に重複してデータを参照することができる。
【発明の効果】
【００２４】
複数のシステムでデータを共用する共用メモリにおいて、更新処理と参照処理の待機による遅延をさらに低減した記憶装置、情報処理装置、データアクセス方法及びプログラムを提供することができる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明を実施するための最良の形態について図面を参照しながら説明する。本実施形態の記憶装置５０は、更新されるデータを記憶する共用メモリを複数のブロックに分割し、ポインタにより各ブロックの状態を切り換えることで、更新中のブロックと参照中のブロックを別領域に用意することができる。ポインタの更新中は排他が必要だが、ポインタは共用メモリとは別の領域に記憶されているので、共用メモリの更新処理又は参照処理の間は排他が必要なく、待機時間を最小限に抑制できる。
【００２６】
図１は、記憶装置５０を有する情報処理装置１００の概略構成図の一例を示す。図１では、情報処理装置１００がＣＡＮ（Controller  Area  Network）やＬＩＮ（Local  Interconnect  Network）等の車内ＬＡＮ１７を介してディスプレイ２２、外部通信ユニット２３及びセンサ２４と接続され、車載システム２００を構成している。
【００２７】
情報処理装置１００は、プログラムを実行するマルチコアＣＰＵ１１、プログラム実行の作業領域となりまた一時的にデータを記憶するＲＡＭ１２、プログラムやファイルを記憶するハードディスクドライブ１３、キーボード、タッチパネル、音声入力等で構成されユーザの操作を入力する入力装置１４、ブートプログラムやＢＩＯＳを記憶するＲＯＭ１５、及び、車内ＬＡＮ１７を介して表示制御部２１、外部通信ユニット２３又はセンサ２４と通信する通信装置１６、がバスにより接続されたコンピュータである。
【００２８】
なお、ディスプレイ２２は液晶や有機ＥＬなどの表示部又は電子メータや警告ランプを備えたインストルメントパネルである。また、外部通信ユニット２３は、携帯電話や無線ランの基地局に接続して、所定のプロトコルでサーバと通信する。また、センサ２４は、車速センサや温度センサ等、制御系や情報系の処理で利用する車両状況や外部環境を検出する。
【００２９】
情報処理装置１００は、車載装置を制御する制御系処理とデータを加工する情報系処理の２系統の情報処理を１台で実行する。情報処理装置１００は、制御系処理で生成されたデータを情報系処理で利用するなどの処理形態を実現しているため、制御系と情報系でデータを共有している。
【００３０】
例えば、情報系処理がナビゲーションシステムによる自車位置の表示や経路案内の場合、情報処理装置１００は制御系処理で生成されたデータに基づき、ディスプレイ２２に自車位置及び経路と共に道路地図を表示し、情報系処理が外部のサーバと通信する処理の場合、情報処理装置１００は制御系処理で生成されたデータを、外部通信ユニット２３に送出し、外部通信ユニット２３からサーバに送信する。
【００３１】
ところで、このように制御系処理と情報系処理とは要求される機能が異なることから、それぞれに好適なＯＳ（Operating  System）も異なる。このため、情報処理装置１００はマルチコアＣＰＵ１１を備え、複数のＯＳが独立して実行可能であることが好ましい。なお、単一のＯＳであってもデータを共有することは少なくないので、本実施形態の記憶装置５０はＣＰＵを１つのみ有する情報処理装置１００にも好適に適用できる。
【００３２】
本実施形態の情報処理装置１００は、制御系ＯＳ３１と情報系ＯＳ３２を実行するものとし、ハードディスクドライブ１３に制御系ＯＳ３１及び情報系ＯＳ３２が記憶されていると共に、制御系処理と情報系処理との間でデータの共有を実現するＯＳ連携プログラム３３が記憶されている。
【００３３】
また、情報処理装置１００は、制御系処理と情報処理系が共有する共有メモリ３４及び後述するポインタメモリ３５をＲＡＭ１２に記憶している。なお、共有メモリ３４やポインタメモリ３５はマルチコアＣＰＵ１１のキャッシュやハードディスクドライブ１３などいかなる記憶手段に記憶してもよい。
【００３４】
図２は、記憶装置５０の機能ブロック図を示す。本実施形態の記憶装置５０は、１つのハードウェア（以下、ＨＷという）上で２つの制御系ＯＳ３１及び情報系ＯＳ３２が独立かつ並行に動作する。ＨＷは、マルチコアＣＰＵ１１、ＲＡＭ１２及びハードディスクドライブ１３等、制御系ＯＳ３１や情報系ＯＳ３２、ＯＳ連携プログラム３３と協働するハードウェアである。
【００３５】
情報系処理は、データベース処理など処理時間の制約が緩やかであるため、情報系ＯＳ３２は例えばＷｉｎｄｏｗｓ（登録商標）やＵｎｉｘ（登録商標）、Ｌｉｎｕｘ（登録商標）等である。これに対し、制御系処理は遅延が許されない場合が多いので、制御系ＯＳ３１は例えばリアルタイムＯＳである。そして、制御系ＯＳ３１上ではエンジンなどの車載装置を制御する制御系アプリケーション３６が実行され、情報系ＯＳ３２上ではナビゲーションシステムなどの情報系アプリケーション３７が実行される。なお、図２では、ＯＳの数は２つであるがこれは３以上でよく、また、情報系アプリケーション３７が２以上実行されていてもよい。
【００３６】
制御系アプリケーション３６は通信装置１６により不定期に受信するデータや制御系処理の結果得られたデータを共用メモリ３４に記憶させ、情報系アプリケーション３７は自身の処理タイミングで共用メモリ３４に記憶されたデータを参照することで、制御系アプリケーション３６と情報系アプリケーション３７がデータを共有する。以下、更新及び／又は参照を単にアクセスという場合がある。
【００３７】
しかしながら、制御系アプリケーション３６が自由に共有メモリ３４のデータを更新したり、情報系アプリケーション３７が自由に共有メモリ３４を参照するとデータの整合性を取ることが困難になるため、共有メモリ３４へのアクセスはＯＳ連携プログラム３３を介して実現する。
【００３８】
ＯＳ連携プログラム３３は、情報処理装置１００のユーザが存在を意識することのない常駐型のソフトウェアで、制御系ＯＳ３１と情報系ＯＳ３２に対しＨＷを論理的に分割し割り当てる。ＯＳ連携プログラム３３は、この論理分割を利用して複数の仮想的な計算機の実行環境を作り、それらの実行環境の上で制御系ＯＳ３１と情報系ＯＳ３２を動作させる。
【００３９】
ＯＳ連携プログラム３３は、仮想的な実行環境の制御に必要なＨＷを制御系ＯＳ３１及び情報系ＯＳ３２から隠蔽している。制御系ＯＳ３１及び情報系ＯＳ３２は、例えば、システムコールを発行することで各種のサービスをＯＳ連携プログラム３３に要求することができる。
【００４０】
ＯＳ連携プログラム３３は、制御系ＯＳ３１と情報系ＯＳ３２とを通信させるため、実行環境間の割り込み（イベント発生）やメッセージ送受信等を提供することができるが、本実施形態では共有メモリ３４を介して制御系ＯＳ３１と情報系ＯＳ３２とが通信する。
【００４１】
制御系アプリケーション３６と情報系アプリケーション３７の共有メモリ３４へのアクセス要求は、ＯＳ連携プログラム３３により、共有メモリ３４のアドレスを示すポインタに変換され、ＯＳ連携プログラム３３はポインタで示された共有メモリ３４に記憶されたデータにアクセスする。制御系アプリケーション３６と情報系アプリケーション３７がポインタの示す実際のアドレスを知っている必要はない。
【００４２】
図３は共有メモリ３４及びポインタメモリ３５のブロック図を示す。共有メモリ３４は同一サイズの複数のブロックを有し、この複数のブロックはそれぞれ、最新の更新結果を記憶する最新共有メモリ、更新対象となる更新対象共有メモリ、参照対象となる参照対象共有メモリ１〜ｎ、実用される情報が記憶されていない空き共有メモリの４つの状態を遷移する。共有メモリ３４の各ブロックの４つ状態は、次述するようポインタメモリ３５のどのポインタにブロックのアドレスが記憶されるかにより遷移する。ポインタメモリ３５のいずれにもアドレスが記憶されないブロックは、空き共有メモリになる。
【００４３】
なお、参照対象共有メモリ１〜ｎの数は、時間的に並行にデータを参照する処理が何個あるかにより決定できるが、データの参照が同時に起こらないのであれば参照対象共有メモリ１〜ｎは１個あればよい。共有メモリ３４は、データを参照する処理（例えば、ナビ、サーバ送信）の数＋２（更新対象共有メモリと最新共有メモリ）だけ必要となる。なお、空き共有メモリは、参照対象共有メモリ又は最新共有メモリから遷移した状態であるので数に含まれない。
【００４４】
ポインタメモリ３５は、最新ポインタ、更新中ポインタ、参照中ポインタ１〜ｎの各ポインタであり、アドレスＰ１〜Ｐ３ｎに設けられている。ポインタメモリ３５では、アドレスＰ１〜Ｐ３ｎとポインタとしての機能が固定である。すなわち、アドレスＰ１のポインタは最新ポインタであり、アドレスＰ２のポインタは更新中ポインタであり、アドレスＰ３１〜Ｐ３ｎのポインタは参照中ポインタ１〜ｎである。
【００４５】
最新ポインタは共有メモリ３４のブロックのうち最も最近更新されたデータを記憶するブロックのアドレスを示す。更新中ポインタは共有メモリ３４のブロックのうち更新中のブロックのアドレスを示す。参照中ポインタ１〜ｎは、共有メモリ３４のブロックのうち参照中のブロックのアドレスを示す。なお、ポインタメモリ３５が共有メモリ３４のいずれのブロックのアドレスも示さない場合、無効値（例えば、ＦＦＦＦ）が記憶される。
【００４６】
したがって、ポインタメモリ３５の各ポインタが、共有メモリ３４のブロックのアドレス又は無効値を記憶することで、共有メモリ３４の各ブロックは４つの状態に遷移する。
【００４７】
以上の構成によれば、本実施形態の記憶装置５０は、ポインタメモリ３５にアクセスする場合にのみポインタメモリ３５の排他が必要で、共有メモリ３４にアクセスする場合は共有メモリ３４の排他が必要ないという特徴を有することができる。すなわち、制御系アプリケーション３６が共有メモリ３４のデータを更新している間、情報系アプリケーション３７は共有メモリ３４を参照でき、情報系アプリケーション３７が共有メモリ３４を参照している間、制御系アプリケーション３６が共有メモリ３４のデータを更新できるので、互いの待機時間を最小限に留めることができる。
【００４８】
更新処理時の共有メモリ３４及びポインタメモリ３５の状態の遷移について図４に基づき説明する。簡単のため、参照中ポインタ１〜ｎは参照中ポインタ１のみを、参照対象共有メモリ１〜ｎは参照対象共有メモリ１のみを示す。
【００４９】
更新処理は、ＯＳ連携プログラム３３をマルチコアＣＰＵ１１が実行して実現される、ポインタ排他手段４０、空きメモリ検出手段４１、更新処理ポインタ制御手段４２及びデータ更新手段４３が実行する。なお、空きメモリ検出手段４１と更新処理ポインタ制御手段４２がポインタメモリ３５にアクセスする前に、ポインタ排他手段４０がポインタメモリ３５のみを排他するが、排他制御については後述する。
【００５０】
（Ｉ）の状態でＯＳ連携プログラム３３に更新要求があると、空きメモリ検出手段４１は、最新共有メモリでもなく、かつ、参照対象共有メモリでもないブロックを、共有メモリ３４のブロックから決定する。このブロックは、最新ポインタにも参照中ポインタにも示されていないブロックのアドレスから決定できる。決定されたブロックは空き共有メモリであり、図４ではアドレスＳ３が空き共有メモリとして検出される。
【００５１】
空き共有メモリが検出されると、更新処理ポインタ制御手段４２は更新中ポインタにアドレスＳ３を記憶する。これにより、更新中ポインタは、共有メモリ３４のアドレスＳ３が更新対象共有メモリであることを示すことになる（II）。
【００５２】
（II）の状態になると、データ更新手段４３は更新対象共有メモリのデータを更新することができる。データ更新手段４３は、更新中ポインタの示すアドレスのブロックである更新対象共有メモリのデータを更新する。
【００５３】
次いで、更新処理ポインタ制御手段４２は更新中ポインタが記憶するアドレスＳ３を最新ポインタに記憶すると共に、更新中ポインタに無効値を記憶する。これにより、共有メモリ３４のアドレスＳ３に記憶されたデータは最新共有メモリとなる（III）。なお、この結果、（II）の状態まで最新ポインタに記憶されていたアドレスＳ１はいずれのポインタからも指定されないブロックになるので、アドレスＳ１の最新共有メモリは空き共有メモリに遷移する。
【００５４】
このように、参照中ポインタがアドレスＳ２を示していても（情報系アプリケーション３７が参照中であることを示す）、アドレスＳ３のデータを更新することができる。
【００５５】
次に、参照処理時の共有メモリ３４及びポインタメモリ３５の状態の遷移について図５に基づき説明する。参照処理は、ＯＳ連携プログラム３３をマルチコアＣＰＵ１１が実行して実現される、ポインタ排他手段４０、参照処理ポインタ制御手段４４及びデータ参照手段４５が実行する。なお、参照処理ポインタ制御手段４４はポインタメモリ３５にアクセスする前に、ポインタ排他手段４０がポインタメモリ３５のみを排他するが、排他制御については後述する。
【００５６】
（IV）の状態でＯＳ連携プログラム３３に参照要求があると、参照処理ポインタ制御手段４４は、最新ポインタが記憶するアドレスＳ３を参照中ポインタに記憶する。これにより、アドレスＳ３の最新共有メモリは参照対象共有メモリに遷移する（Ｖ）。
【００５７】
なお、最新ポインタはアドレスＳ３を示したままであるが、更新処理により最新ポインタに別のブロックのアドレスが記憶されると、次の参照処理は別のブロックを参照対象共有メモリ（参照対象共有メモリが複数の場合）にして、最新のデータを参照することができる。したがって、次々にデータが更新される場合、一つの参照処理によりデータが参照中であっても、次々データを更新でき、別の参照処理は最新のデータを次々に参照できる。
【００５８】
データ参照手段４５は、参照中ポインタで示されるアドレスＳ３の参照対象共有メモリのデータを参照することができる。
【００５９】
データ参照が終了すると、参照処理ポインタ制御手段４４は参照中ポインタに無効値を記憶する。これによりアドレスＳ３はいずれのポインタにも指定されなくなるので、共有メモリ３４のアドレスＳ３は空き共有メモリとなる（VI）。
【００６０】
このように、更新中ポインタがアドレスＳ１を示していても（制御系アプリケーション３６が更新中であることを示す）、アドレスＳ３のデータを参照することができる。
【００６１】
図６は、ＯＳ連携プログラム３３が更新処理を実行する手順を示すフローチャート図である。図６のフローチャート図は、制御系アプリケーション３６が更新要求するとスタートする。
【００６２】
まず、ポインタ排他手段４０はポインタメモリ３５を排他する（Ｓ１０）。この排他は、例えばハードウェア的に実装した割り込み禁止であって、命令数が少なくて済み短時間に終了することができる。
【００６３】
ついで、更新処理ポインタ制御手段４２は、最新共有メモリでも参照対象共有メモリでもない共有メモリ３４のブロックのアドレスを更新中ポインタに記憶させる（Ｓ２０）。そして、ポインタ排他手段４０はポインタメモリ３５の排他を解除する（Ｓ３０）。
【００６４】
データ更新手段４３は、更新中ポインタが示す更新対象共有メモリのデータを更新する（Ｓ４０）。データの更新処理は、ポインタメモリ３５の排他処理よりも時間がかかるが、本実施形態では排他が必要ないので、情報系アプリケーション３７の待機時間は最小限となる。
【００６５】
ついで、ポインタ排他手段４０はポインタメモリ３５を排他し（Ｓ５０）、更新処理ポインタ制御手段４２は、更新中ポインタが記憶するブロックのアドレスを最新ポインタに記憶させ、また、更新中ポインタに無効値を記憶させる（Ｓ６０）。これにより、最新ポインタが最新のデータが記憶された共有メモリ３４のブロックのアドレスを示すことができる。そして、ポインタ排他手段４０はポインタメモリ３５の排他を解除する（Ｓ７０）。
【００６６】
図７は、ＯＳ連携プログラム３３が参照処理を実行する手順を示すフローチャート図である。図７のフローチャート図は、情報系アプリケーション３７が参照要求するとスタートする。
【００６７】
ポインタ排他手段４０はポインタメモリ３５を排他する（Ｓ１１０）。排他方法は更新処理と同様である。ポインタメモリ３５が排他されると、参照処理ポインタ制御手段４４は最新ポインタが記憶するアドレスを参照中ポインタに記憶させる（Ｓ１２０）。そして、ポインタ排他手段４０はポインタメモリ３５の排他を解除する（Ｓ１３０）。
【００６８】
データ参照手段４５は、参照中ポインタが示す参照対象共有メモリのデータを参照する（Ｓ１４０）。データの参照処理は、ポインタメモリ３５の排他処理よりも時間がかかるが排他が必要ないので、制御系アプリケーション３６の待機時間は最小限となる。また、参照のためにデータをコピーする必要もないので参照時間が増大することもない。
【００６９】
ついで、ポインタ排他手段４０はポインタメモリ３５を排他し（Ｓ１５０）、参照処理ポインタ制御手段４４は、参照中ポインタに無効値を記憶させる（Ｓ１６０）。これにより、参照中ポインタが示していた共有メモリ３４のアドレスを空き領域とすることができる。そして、ポインタ排他手段４０はポインタメモリ３５の排他を解除する（Ｓ１７０）。
【００７０】
以上説明したように、本実施形態の記憶装置５０は、共有メモリ３４を複数のブロックに区分し、ポインタメモリ３５のポインタにより複数のブロックの状態を更新用や参照用に切り換えるので、更新処理の間に参照処理が待機する必要がなく、参照処理の間に更新処理が待機する必要がない。また、参照時にデータをコピーする必要もないので、コピー処理により処理時間が増大することもない。ポインタメモリ３５の更新時にはポインタメモリ３５の排他が必要になるが、ポインタメモリ３５の排他は共有メモリ（データ）３４の更新処理及び参照処理に比べて短時間なので、排他による遅延を回避できる。
【図面の簡単な説明】
【００７１】
【図１】記憶装置を有する情報処理装置の概略構成図の一例である。
【図２】記憶装置の機能ブロック図の一例である。
【図３】共有メモリ及びポインタメモリのブロック図の一例である。
【図４】更新処理時の共有メモリ及びポインタメモリの状態遷移図の一例である。
【図５】参照処理時の共有メモリ及びポインタメモリの状態遷移図の一例である。
【図６】ＯＳ連携プログラムが更新処理を実行する手順を示すフローチャート図である。
【図７】ＯＳ連携プログラムが参照処理を実行する手順を示すフローチャート図である。
【図８】従来の共有メモリのブロック図の一例である。
【図９】従来の更新処理と参照処理それぞれの手順を示すフローチャート図である。
【符号の説明】
【００７２】
３１      制御系ＯＳ
３２      情報系ＯＳ
３３      ＯＳ連携プログラム
３４      共有メモリ
３５      ポインタメモリ
３６      制御系アプリケーション
３７      情報系アプリケーション
４０      ポインタ排他手段
４１      空きメモリ検出手段
４２      更新処理ポインタ制御手段
４３      データ更新手段
４４      参照処理ポインタ制御手段
４５      データ参照手段
５０      記憶装置
１００    情報処理装置
２００    車載システム
【図１】
2009110063.tif 000003
【図２】
2009110063.tif 000004
【図３】
2009110063.tif 000005
【図４】
2009110063.tif 000006
【図５】
2009110063.tif 000007
【図６】
2009110063.tif 000008
【図７】
2009110063.tif 000009
【図８】
2009110063.tif 000010
【図９】
2009110063.tif 000011