(57)【要約】  コプロセッサ（１０１−１）は、各ドライバの実行開始ごとにドライバの実行開始時刻をローカルメモリ（１０２−１）に格納する。コプロセッサ（１０１−１）は、ドライバ（Ａ）を実行中にＣＰＵ呼出処理が行われる場合、ドライバ（Ｂ）、ドライバ（Ｃ）ごとに実行開始時刻と現時刻との差分値を算出する。ドライバ（Ｃ）を例に挙げると、コプロセッサ（１０１−１）は、ドライバ（Ｃ）について算出された差分値に、ドライバ（Ａ）のＣＰＵ呼出処理にかかる処理時間（ｔ２ａ）と、ドライバＢの通常処理にかかる処理時間（ｔ１ｂ）を加算する。コプロセッサ（１０１−１）は、ドライバ（Ｃ）についてのそれぞれの加算結果がそれぞれの制約時間を遵守しているか否かを判断する。ドライバ（Ｃ）についての加算結果が制約時間を遵守できないと判断され、コプロセッサ（１０１−１）は、ドライバ（Ｃ）の実行依頼を他のコプロセッサ（１０１−２）に通知する。
2013140517.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを有し、前記複数のプロセッサのうちの特定のプロセッサが複数のセンサの各々に応じた処理を順に繰り返し実行する検出装置であって、
前記特定のプロセッサがアクセス可能である、前記各々に応じた処理に対応する第１の処理にかかる処理時間と、前記各々に応じた処理に対応する第２の処理にかかる処理時間と、前記各々に応じた処理に対応する制約時間と、を記憶する記憶部と、
前記特定のプロセッサによって、前記各々に応じた処理の実行切り替え時に、前記各々に応じた処理に対応した実行開始時刻を前記記憶部に格納する格納部と、
前記各々に応じた処理のうちの実行中の処理が前記第２の処理を行う場合に、前記特定のプロセッサによって、前記各々に応じた処理のうち前記実行中の処理を除いた残余の処理に対応した前記記憶部に記憶された実行開始時刻と前記実行中の処理が前記第２の処理を行う開始時刻との差分値に、前記実行中の処理の前記第２の処理にかかる処理時間と、前記残余の処理の前記第１の処理にかかる処理時間と、を前記各々に応じた処理の実行順序に基づいて加える算出部と、
前記特定のプロセッサによって、前記算出部によって前記残余の処理に対応して算出された時間が前記記憶部に記憶された前記残余の処理に対応する制約時間を遵守するか否かを判断する判断部と、
前記特定のプロセッサによって、前記判断部によって前記制約時間を遵守しないと判断された処理の実行依頼を、前記複数のプロセッサのうちの前記特定のプロセッサ以外の他のプロセッサに通知する通知部と、
を有することを特徴とする検出装置。
【請求項２】
前記他のプロセッサは、前記複数のセンサのうちのいずれのセンサに応じた処理も割り当てられていない場合に、停止していることを特徴とする請求項１に記載の検出装置。
【請求項３】
前記通知部は、
前記複数のプロセッサのうち起動中のいずれのプロセッサであっても前記制約時間を遵守しないと判断された処理を実行できない場合、前記特定のプロセッサによって、前記複数のプロセッサのうち、前記他のプロセッサを起動させ、起動後の前記他のプロセッサに前記制約時間を遵守しないと判断された処理の実行指示を通知することを特徴とする請求項２に記載の検出装置。
【請求項４】
前記他のプロセッサによって、前記実行依頼が受け付けられた後、前記実行依頼の対象となる処理を実行中に、前記実行依頼の対象となる処理の実行依頼を前記特定のプロセッサに通知する通知部と、
前記特定のプロセッサが前記通知部により通知された実行依頼を受託した場合、前記他のプロセッサによって、前記他のプロセッサを停止する停止部と、
を有することを特徴とする請求項３に記載の検出装置。
【請求項５】
複数のプロセッサのうち、複数のセンサの各々に応じた処理を順に繰り返し実行する特定のプロセッサが、
前記各々に応じた処理に対応する第１の処理にかかる処理時間と、前記各々に応じた処理に対応する第２の処理にかかる処理時間と、前記各々に応じた処理に対応する制約時間と、を記憶する記憶部に、前記各々に応じた処理の実行切り替え時に前記各々に応じた処理に対応した実行開始時刻を格納し、
前記各々に応じた処理のうちの実行中の処理が前記第２の処理を行う場合に、前記各々に応じた処理のうち前記実行中の処理を除いた残余の処理に対応した前記記憶部に記憶された実行開始時刻と、前記実行中の処理が前記第２の処理を行う開始時刻との差分値に、前記実行中の処理の前記第２の処理にかかる処理時間と、前記残余の処理の前記第１の処理にかかる処理時間と、を前記各々に応じた処理の実行順序に基づいて加え、
前記残余の処理に対応して算出された時間が、前記記憶部に記憶された前記残余の処理に対応する制約時間を遵守するか否かを判断し、
前記制約時間を遵守しないと判断された処理の実行依頼を、前記複数のプロセッサのうちの前記特定のプロセッサ以外の他のプロセッサに通知する、
処理を実行することを特徴とする通知方法。
【請求項６】
複数のプロセッサのうち、複数のセンサの各々に応じた処理を順に繰り返し実行する特定のプロセッサに、
前記各々に応じた処理に対応する第１の処理にかかる処理時間と、前記各々に応じた処理に対応する第２の処理にかかる処理時間と、前記各々に応じた処理に対応する制約時間と、を記憶する記憶部に、前記各々に応じた処理の実行切り替え時に前記各々に応じた処理に対応した実行開始時刻を格納し、
前記各々に応じた処理のうちの実行中の処理が前記第２の処理を行う場合に、前記各々に応じた処理のうち前記実行中の処理を除いた残余の処理に対応した前記記憶部に記憶された実行開始時刻と、前記実行中の処理が前記第２の処理を行う開始時刻との差分値に、前記実行中の処理の前記第２の処理にかかる処理時間と、前記残余の処理の前記第１の処理にかかる処理時間と、を前記各々に応じた処理の実行順序に基づいて加え、
前記残余の処理に対応して算出された時間が、前記記憶部に記憶された前記残余の処理に対応する制約時間を遵守するか否かを判断し、
前記制約時間を遵守しないと判断された処理の実行依頼を、前記複数のプロセッサのうちの前記特定のプロセッサ以外の他のプロセッサに通知する、
処理を実行させることを特徴とする通知プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検出装置、通知方法、および通知プログラムに関する。
【背景技術】
【０００２】
従来、たとえば、マルチコアプロセッサシステムにおいて、特定のプロセッサが、各プロセッサの負荷を分散するために、各プロセッサの負荷を予測する技術が知られている（たとえば、下記特許文献１参照。）。【０００３】
また、従来、たとえば、マルチコアプロセッサシステムにおいて、プロセッサの稼働率により負荷分散が行われる技術が知られている（たとえば、下記特許文献２参照。）。【０００４】
また、従来、たとえば、マルチコアプロセッサシステムにおいて、デバイスドライバを使用するすべてのプロセッサが該デバイスドライバを搭載し、排他制御によっていずれのプロセッサが該デバイスドライバを実行するかが決定される技術が知られている（たとえば、下記特許文献３参照。）。これにより、各プロセッサは常にドライバの実行要求を待ち受けることにより、応答性能の向上を図ることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１４１７８２号公報
【特許文献２】特開２００２−４９４０５号公報
【特許文献３】特開２００８−１４０１９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、各プロセッサは排他制御、負荷分散を行うことにより、ドライバの実行を継続させることができるが、各プロセッサには排他制御、負荷分散にかかる処理による負荷量が増大する問題点がある。【０００７】
本発明は、上述した従来技術による問題点を解消するため、排他制御、負荷分散を行わなくともドライバの実行を継続させることができる検出装置、通知方法、および通知プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のプロセッサのうち、複数のセンサの各々に応じた処理を順に繰り返し実行する特定のプロセッサが、前記各々に応じた処理に対応する第１の処理にかかる処理時間と、前記各々に応じた処理に対応する第２の処理にかかる処理時間と、前記各々に応じた処理に対応する制約時間と、を記憶する記憶部に、前記各々に応じた処理の実行切り替え時に前記各々に応じた処理に対応した実行開始時刻を格納し、前記各々に応じた処理のうちの実行中の処理が前記第２の処理を行う場合に、前記各々に応じた処理のうち前記実行中の処理を除いた残余の処理に対応した前記記憶部に記憶された実行開始時刻と、前記実行中の処理が前記第２の処理を行う開始時刻との差分値に、前記実行中の処理の前記第２の処理にかかる処理時間と、前記残余の処理の前記第１の処理にかかる処理時間と、を前記各々に応じた処理の実行順序に基づいて加え、前記残余の処理に対応して算出された時間が、前記記憶部に記憶された前記残余の処理に対応する制約時間を遵守するか否かを判断し、前記制約時間を遵守しないと判断された処理の実行依頼を、前記複数のプロセッサのうちの前記特定のプロセッサ以外の他のプロセッサに通知する検出装置、通知方法、および通知プログラムが提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、排他制御、負荷分散を行わなくともドライバの実行を継続させることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、検出装置のハードウェア構成例を示すブロック図である。
【図２】図２は、ポーリング型のセンサと割り込み型のセンサの各制約例を示す説明図である。
【図３】図３は、コプロセッサ１０１による一動作例を示す説明図である。
【図４】図４は、コプロセッサ１０１による実行依頼を受け付けた場合の動作例を示す説明図である。
【図５】図５は、バックアップ・コプロセッサ１０１に実行指示を通知する例を示す説明図である。
【図６】図６は、バックアップ・コプロセッサ１０１による実行依頼例を示す説明図である。
【図７】図７は、ドライバの処理時間と制約時間と実行開始時刻の記憶例を示す説明図である。
【図８】図８は、センサの機能例を示す説明図である。
【図９】図９は、各スケジューラの機能例を示すブロック図である。
【図１０】図１０は、スケジューラ１２１−ｉが行う処理手順を示すフローチャート（その１）である。
【図１１】図１１は、スケジューラ１２１−ｉが行う処理手順を示すフローチャート（その２）である。
【図１２】図１２は、スケジューラ１２１−ｉが行う実行依頼または実行指示を受付時の処理手順を示すフローチャートである。
【図１３】図１３は、スケジューラ１２１−ｊが行う実行依頼を受付時の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明にかかる検出装置、通知方法、および通知プログラムの実施の形態を詳細に説明する。ここで、検出装置は、複数のセンサと、センサによって検知されたデータに応じた処理を実行するコプロセッサと、を有するセンサアーキテクチャである。検出装置は、センサによって検知された検知データの異常をコプロセッサによって検出したり、検知データを解析したりする。通知プログラムは、コプロセッサによって実行されるスケジューラである。
【００１２】
（センサアーキテクチャのハードウェア構成例）
図１は、検出装置のハードウェア構成例を示すブロック図である。センサアーキテクチャ１００は、複数のコプロセッサ１０１−１〜１０１−ｎと、複数のバックアップ・コプロセッサ１０１−ｎ＋１〜１０１−ｍと、複数のローカルメモリ１０２と、複数のセンサ（センサＡ，センサＢ，センサＣ・・・）と、電源供給回路１０３と、を有している。「ｎ≧１」であり、「ｍ≧ｎ＋１」である。さらに、センサアーキテクチャ１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０５と、メインメモリ１０７と、を有している。複数のセンサと、複数のコプロセッサ１０１と、複数のローカルメモリ１０２と、はセンサバス１０４によって接続されている。
【００１３】
ここで、コプロセッサ１０１と、コプロセッサ１０１の数と、バックアップ・コプロセッサ１０１について説明する。本実施の形態では、センサアーキテクチャ１００が有するコプロセッサ１０１とバックアップ・コプロセッサ１０１とは、センサのドライバを実行するためのプロセッサであり、他のアプリケーションの処理を実行しない。センサのドライバではセンサの制約さえ遵守されれば応答性能が無視されてもよい。センサの制約とは、センサのドライバ実行要求が発生してから実際にドライバが実行されるまでの時間に対する制約のことである。
【００１４】
そこで、複数のコプロセッサ１０１−１〜１０１−ｎは、排他制御、負荷分散を行うことなく、ドライバの実行を行う。各コプロセッサ１０１には、各センサのドライバの第１の処理である通常処理の処理時間に基づいて処理可能なドライバが割り当てられる。そして、コプロセッサ１０１は、実行中のドライバが第２の処理であるＣＰＵ呼出処理が行われると、ドライバの制約時間を遵守できない場合に、他のコプロセッサ１０１に制約時間を遵守できないドライバの実行依頼を通知する。具体的には、たとえば、コプロセッサ１０１は、他のコプロセッサ１０１への実行依頼の通知をＩＰＣ（Ｉｎｔｅｒ−Ｐｒｏｃｅｓｓｏｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）によって行う。第１の処理である通常処理と第２の処理であるＣＰＵ呼出処理については後述する。これにより、各コプロセッサ１０１は、排他制御、負荷分散にかかる負荷量を低減させることができる。
【００１５】
コプロセッサ１０１およびバックアップ・プロセッサ１０１は、最大負荷の場合にすべてのセンサの制約を遵守させるために足る数だけ準備される。「最大負荷」とは、各センサのドライバがすべてＣＰＵ呼出処理を実行した場合である。そのため、最大負荷時以外では余剰コプロセッサ１０１が発生し無駄な電力を消費してしまう。そこで、たとえば、運用開始時のドライバは、センサアーキテクチャ１００の設計者によって最小負荷の場合を仮定してすべてのセンサの制約が守れる最少のコプロセッサ１０１数で均等に配置される。「負荷が最少」とは、すべてのセンサのドライバの実行において、通常処理が行われる場合である。
【００１６】
ここで、全コプロセッサ１０１の数が三つであり（ｍ＝３）、センサが八つあり（センサＡ〜センサＨ）、各センサのドライバの負荷が最少であると仮定した場合を例に挙げる。コプロセッサ１０１が一つですべてのセンサのドライバが実行可能であるならば、すべてのドライバが一つのコプロセッサ１０１に割り当てられる。そして、残りの二つのコプロセッサ１０１は、バックアップ・コプロセッサ１０１となり、電源が落とされて停止状態になる。同様の条件において、コプロセッサ１０１が二つですべてのセンサのドライバが実行可能であるならば、二つのコプロセッサ１０１には四つずつドライバが割り当てられる。残りの一つのコプロセッサ１０１はバックアップ・コプロセッサ１０１として電源が落とされて停止状態になる。これにより、センサアーキテクチャ１００は、消費電力を低減させることができる。つぎに、たとえば、起動中のコプロセッサ１０１だけではすべてのドライバの制約を遵守できない場合に、バックアップ・コプロセッサ１０１が起動される。
【００１７】
各コプロセッサ１０１は、スケジューラ１２１と、割り当てられたセンサのドライバと、を実行する。スケジューラ１２１は、コプロセッサ１０１に割り当てられたドライバの実行を制御する。スケジューラ１２１は、ディスパッチループ１３１を有しており、ディスパッチループ１３１にドライバの識別情報が登録されることにより、ドライバがコプロセッサ１０１に割り当てられたことになる。コプロセッサ１０１が実行するスケジューラ１２１とバックアップ・コプロセッサ１０１が実行するスケジューラ１２１とは異なるが、それぞれの詳細については、後述する。上述したように、バックアップ・コプロセッサ１０１は、センサアーキテクチャ１００の起動時には電源供給回路１０３から電源が供給されず、停止状態になっている。
【００１８】
電源供給回路１０３は、各部に電源を供給する。ここで、たとえば、電源供給回路１０３は、コプロセッサ１０１またはバックアップ・コプロセッサ１０１からの指示により各部への電源の供給を遮断したり、電源の供給を開始することができる。
【００１９】
複数のセンサ（センサＡ，センサＢ，センサＣ・・・）は、それぞれの機能に応じてデータを検知する。たとえば、センサとしては、方位を検知する方位計、体温、気温を検知する温度センサ、湿度を検知する湿度センサ、心拍数を計測する心拍計が挙げられる。
【００２０】
センサのドライバは、センサに応じた処理に関するソフトウェアである。たとえば、温度センサであれば、センサのドライバは、温度センサによって検知された温度が基準値以下であるか否かを判断してもよい。センサのドライバは、予めセンサアーキテクチャ１００の設計者によって割り当てられていてもよい。たとえば、センサアーキテクチャ１００の電源投入時に、各コプロセッサ１０１は、決められたドライバを立ち上げてもよい。
【００２１】
各センサのドライバは、通常処理と、ＣＰＵ呼出処理と、を有している。上述したように、通常処理が第１の処理であり、ＣＰＵ呼出処理が第２の処理である。通常処理は、取得処理と、解析処理と、検出処理と、を有している。ここで、各センサのドライバが行うＣＰＵ呼出処理と、ＣＰＵが行う特定の処理と、を応用処理と称する。
【００２２】
取得処理は、センサによって検知されたデータをセンサのバッファから取得する。解析処理は、取得されたデータを解析する。検出処理は、取得されたデータの変化を検出する。ＣＰＵ呼出処理は、データの変化が検出された場合、検出した変化に応じた処理を行う。ＣＰＵ１０５はＣＰＵ呼出処理により呼び出されると、特定の処理を行う。ＣＰＵ呼出処理は、特定の処理の終了を待って終了してもよい。たとえば、心拍数を計測するセンサを例に挙げると、解析処理は、たとえば、対象者の現在の心拍数を求める。つぎに、検出処理は、たとえば、心拍数が閾値以上に変化することを検出する。そして、ＣＰＵ呼出処理は、心拍数が閾値以上であることが検出された場合、ＣＰＵ１０５に対して心拍数が閾値以上である旨を通知する。さらに、ＣＰＵ１０５は、たとえば、病院のサーバに通知してもよいし、警報を鳴らす処理を行ってもよい。
【００２３】
コプロセッサ１０１−１〜コプロセッサ１０１−ｎとバックアップ・コプロセッサ１０１−（ｎ＋１）〜バックアップ・コプロセッサ１０１−ｍは、それぞれローカルメモリ１０２−１〜ローカルメモリ１０２−ｍを有している。各コプロセッサ１０１は、ローカルメモリ１０２をワークエリアとして使用する。
【００２４】
ローカルメモリ１０２としては、たとえば、ＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）が挙げられる。さらに、ローカルメモリ１０２には、割り当てられたドライバの実行コードと、割り当てられたドライバのそれぞれの通常処理にかかる処理時間と、ＣＰＵ呼出処理にかかる処理時間と、ドライバの制約時間と、ドライバの実行開始時刻と、が記憶される。各処理時間と制約時間と実行開始時刻との記憶例については、図面を用いて後述する。実行コードとは、アセンブリ言語などのコプロセッサ１０１、ＣＰＵ１０５が識別可能な情報である。
【００２５】
ＣＰＵ１０５と、メインメモリ１０７と、センサバス１０４と、はメインバス１０８によって接続されている。これに限らず、たとえば、ＣＰＵ１０５およびメインメモリ１０７と、センサバス１０４とは、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）を介して接続されてもよい。Ｉ／Ｆは、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、このネットワークを介して他の装置に接続される。そして、Ｉ／Ｆは、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆとしては、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２６】
ＣＰＵ１０５は、複数のコプロセッサ１０１がＣＰＵ呼出処理を行った場合、該ＣＰＵ呼出処理に基づく処理を実行する。たとえば、温度センサに応じた処理を実行するコプロセッサ１０１が、温度が基準値以上であると判断した場合、異常温度であることをＣＰＵ１０５へ通知する処理を実行する。そして、ＣＰＵ１０５は、コプロセッサ１０１から異常温度であることを通知された場合、利用者に異常温度である旨を通知する。たとえば、利用者への通知方法としては、ディスプレイにエラーを表示したり、ブザーを鳴らしてもよい。または、たとえば、ＣＰＵ１０５は、コプロセッサ１０１から異常温度であることを通知された場合、空調設備の温度設定を変更してもよい。
【００２７】
メインメモリ１０７は、ＣＰＵ１０５のワークエリアとして使用される。メインメモリ１０７としては、たとえば、ＲＡＭが挙げられる。ストレージ１０６は、ＣＰＵ１０５が実行するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、アプリケーションのプログラムが記憶されている。ストレージ１０６としては、たとえば、ＲＯＭ、ハードディスクが挙げられる。ストレージ１０６は、たとえば、センサのドライバに関するプログラムを記憶していてもよい。複数のコプロセッサ１０１の起動時に、各コプロセッサ１０１は、割り当てられたドライバに関するプログラムをストレージ１０６から読み出してもよい。
【００２８】
ここで、たとえば、各センサは、一定の間隔でセンシングしてデータをバッファに書き込むポーリング型のセンサと、所定のイベントでセンシングしてデータをバッファに書き込む割り込み型のセンサと、の二つに大別することができる。図２を用いてポーリング型のセンサと割り込み型のセンサのそれぞれの制約例について説明する。
【００２９】
図２は、ポーリング型のセンサと割り込み型のセンサの各制約例を示す説明図である。ポーリング型のセンサとしては、たとえば、温度センサが挙げられる。図２の上側に示すように、ポーリング型のセンサについては、コプロセッサ１０１は、センサのバッファからセンサによって検知されたデータの取得を一定の間隔で行う。一定の間隔は、センサの処理能力によって異なるため、センサごとに定められている。したがって、ポーリング型のセンサでは、該一定の間隔が制約時間となる。
【００３０】
割り込み型のセンサは、たとえば、ボタン、マウスが挙げられる。図２の下側に示すように、割り込み型のセンサがイベントの発生を検出すると、割り込み信号をコプロセッサ１０１に対して出力する。そして、コプロセッサ１０１は、割り込み信号の出力から所定時間以内にセンサのバッファに記憶されたデータを取り出す。所定時間とは、センサの機能によって異なるため、センサごとに定められている。したがって、割り込み型のセンサでは、該所定時間が制約となる。
【００３１】
以降、コプロセッサ１０１に割り当てられたドライバは、ポーリング型のセンサのドライバである。割り込み型のセンサのドライバについては、たとえば、コプロセッサ１０１に固定で割り当てることとし、図面を用いた詳細な例を省略する。
【００３２】
（コプロセッサ１０１による動作例）
各コプロセッサ１０１は、ＣＰＵ呼出処理が行われることにより、ドライバの制約時間を遵守できない場合に、他のコプロセッサ１０１に制約を遵守できないドライバの実行を依頼する。ここで、図３〜６ではｎ＝２、ｍ＝３の場合を例に挙げて説明する。
【００３３】
図３は、コプロセッサ１０１による一動作例を示す説明図である。コプロセッサ１０１１−１には、センサＡ、センサＢ、センサＣのそれぞれに対応するドライバＡ、ドライバＢ、ドライバＣが割り当てられている。割り当てられたドライバＡ、ドライバＢ、ドライバＣは、ディスパッチループ１３１−１に登録されて、スケジューラ１２１−１によって順に繰り返して実行される。コプロセッサ１０１−２には、センサＤ、センサＥのそれぞれに対応するドライバＤ、ドライバＥが割り当てられている。割り当てられたドライバＤ、ドライバＥは、ディスパッチループ１３１−２に登録されて、スケジューラ１２１−２によって順に繰り返して実行される。
【００３４】
センサアーキテクチャ１００において、センサのドライバを実行するすべてのコプロセッサ１０１が該ドライバを搭載する場合、あるドライバを複数のコプロセッサ１０１が同時に実行すると、該ドライバの実行により得られるデータが壊れてしまう可能性がある。そのため、排他制御が行われなければならない。本実施の形態では、コプロセッサ１０１−１およびコプロセッサ１０１−２は、割り当てられたセンサのドライバを搭載し、他のコプロセッサ１０１に割り当てられたドライバは搭載しない。そのため、排他制御が行われなくてもよい。
【００３５】
各スケジューラ１２１−１およびスケジューラ１２１−２は、ドライバの実行が切り替わるときに、切り替え時の時刻を取得して、ドライバの識別情報と、該現時刻を関連付けてそれぞれのローカルメモリ１０２に格納する。時刻は、たとえば、各コプロセッサ１０１が有するタイマから取得される。
【００３６】
図３では、スケジューラ１２１−１は、ドライバＡを実行中にＣＰＵ呼出処理が実行される条件を満たしたか否かを判断する。図３の例では、「Ａ’」がドライバＡのＣＰＵ呼出処理を示している。たとえば、温度センサのドライバであれば、温度センサによって検知された温度が閾値以上または閾値以下となると、ＣＰＵ呼出処理が実行される。そのため、スケジューラ１２１−１は、温度センサのドライバはＣＰＵ呼出処理が実行される条件を満たしたと判断する。ＣＰＵ呼出処理が実行される条件が満たされた場合、スケジューラ１２１−１は、ドライバＡのＣＰＵ呼出処理にかかる処理時間と、ドライバＢ、ドライバＣのそれぞれの制約時間、ドライバＢ、ドライバＣの通常処理にかかる処理時間と、をローカルメモリ１０２−１から取得する。さらに、スケジューラ１２１−１は、ドライバＢ、ドライバＣのそれぞれの実行開始時刻をローカルメモリ１０２−１から取得する。さらに、スケジューラ１２１−１は、現時刻ｔｃを取得する。現時刻ｔｃは、たとえば、各コプロセッサ１０１が有するタイマから取得される。
【００３７】
そして、スケジューラ１２１−１は、実行中のドライバがＣＰＵ呼出処理を行う場合に、割り当てられたドライバのうち実行中のドライバを除いた残余のドライバごとにローカルメモリ１０２に記憶された実行開始時刻と現時刻ｔｃとの差分値を算出する。実行中のドライバはドライバＡであり、残余のドライバは、ドライバＢとドライバＣである。スケジューラ１２１−１は、残余のドライバごとに算出された差分値に実行中の処理のＣＰＵ呼出処理にかかる処理時間と、ドライバの実行順序に基づいて残余のドライバの通常処理にかかる処理時間と、を加える。
【００３８】
具体的には、たとえば、スケジューラ１２１−１は、ドライバＢの実行開始時刻ｔｓｂと現時刻ｔｃとの差分値を算出する。ここで、ドライバＡとドライバＢとドライバＣの実行順序は、ディスパッチループ１３１−１の登録順によって決まる。図３の例では、ドライバＢはドライバＡのつぎに実行されるため、スケジューラ１２１−１は、算出した差分値に、ドライバＡのＣＰＵ呼出処理にかかる処理時間ｔ２ａを加算する。これにより、ローカルメモリ１０２に記憶されたドライバＢの実行開始時刻ｔｓｂから、つぎにドライバＢが実行されるまでにかかる時間ｔｅｂが算出される。
【００３９】
具体的には、たとえば、スケジューラ１２１−１は、ドライバＣの実行開始時刻ｔｓｃと現時刻ｔｃとの差分値を算出する。ここで、ドライバＡとドライバＢとドライバＣの実行順序は決まっている。図３の例では、ドライバＢはドライバＡのつぎに実行され、ドライバＣは、ドライバＢのつぎに実行される。そのため、スケジューラ１２１−１は、算出した差分に、ドライバＡのＣＰＵ呼出処理にかかる処理時間ｔ２ａとドライバＢの通常処理にかかる処理時間ｔ１ｂとを加算する。これにより、ローカルメモリ１０２に記憶されたドライバＣの実行開始時刻ｔｓｃから、つぎにドライバＣが実行されるまでにかかる時間ｔｅｃが算出される。
【００４０】
つぎに、スケジューラ１２１−１は、残余のドライバに対応して算出された時間が、ローカルメモリ１０２に記憶された残余のドライバの制約時間を遵守するか否かを判断する。具体的には、たとえば、スケジューラ１２１−１は、時間ｔｅｂがドライバＢの制約時間ｔｐｂ以下であるか否かを判断する。時間ｔｅｂがドライバＢの制約時間ｔｐｂ以下の場合、スケジューラ１２１−１は、時間ｔｅｂがドライバＢの制約時間ｔｐｂを遵守していると判断する。具体的には、たとえば、スケジューラ１２１−１は、時間ｔｅｃがドライバＣの制約時間ｔｐｃ以下であるか否かを判断する。時間ｔｅｃがドライバＣの制約時間ｔｐｃ以下の場合、スケジューラ１２１−１は、時間ｔｅｃがドライバＣの制約時間ｔｐｃを遵守していると判断する。ここでは、たとえば、時間ｔｅｃがドライバＣの制約時間ｔｐｃを遵守していないと判断する。
【００４１】
そして、スケジューラ１２１−１は、起動中の他のコプロセッサ１０１にドライバＣの実行依頼を通知する。具体的には、たとえば、スケジューラ１２１−１は、他のコプロセッサ１０１への実行依頼の通知をＩＰＣによって行う。ここでは、起動中の他のコプロセッサ１０１は、コプロセッサ１０１−２である。たとえば、実行依頼は、ドライバＣの実行開始時刻ｔｓｃと、ドライバＣの制約時間ｔｐｃと、ドライバＣの通常処理にかかる処理時間ｔ１ｃと、を有している。
【００４２】
これにより、センサアーキテクチャは、排他制御、分散処理を行わなくても、センサのドライバを継続して実行させることができる。
【００４３】
図４は、コプロセッサ１０１による実行依頼を受け付けた場合の動作例を示す説明図である。スケジューラ１２１−２は、スケジューラ１２１−１からドライバＣの実行依頼を受け付ける。
【００４４】
つぎに、スケジューラ１２１−２は、実行依頼の対象となるドライバの通常処理にかかる処理時間と、割り当てられたすべてのドライバの通常処理にかかる処理時間と、の合計値を算出する。具体的には、たとえば、合計値ｔｏｔａｌは、ドライバＤの通常処理にかかる処理時間ｔ１ｄと、ドライバＥの通常処理にかかる処理時間ｔ１ｅと、ドライバＣの通常処理にかかる処理時間ｔ１ｃと、の加算結果である。
【００４５】
そして、スケジューラ１２１−２は、合計値ｔｏｔａｌが実行依頼の対象となるドライバの制約時間および割り当てられた各ドライバの制約時間を遵守するか否かを判断する。具体的には、たとえば、スケジューラ１２１−２は、合計値ｔｏｔａｌが実行依頼の対象となるドライバＣの制約時間ｔｐｃおよび割り当てられたドライバＤ、ドライバＥのそれぞれの制約時間ｔｐｄ、ｔｐｅ以下であるか否かを判断する。
【００４６】
合計値ｔｏｔａｌが制約時間ｔｐｃ、ｔｐｄ、ｔｐｅ以下である場合、スケジューラ１２１−２は、合計値ｔｏｔａｌが制約時間ｔｐｃおよび制約時間ｔｐｄ、ｔｐｅを遵守すると判断する。一方、制約時間ｔｐｃと制約時間ｔｐｄと制約時間ｔｐｅのうちいずれか一つの制約時間であっても合計値ｔｏｔａｌより小さい場合、スケジューラ１２１−２は、制約時間ｔｐｃ、ｔｐｄ、ｔｐｅを遵守しないと判断する。
【００４７】
いずれか一つのドライバの制約時間であっても遵守することができないと判断された場合、スケジューラ１２１−２は、実行依頼の通知元であるスケジューラ１２１−１に実行不可を通知する。スケジューラ１２１−２は、すべてのドライバの制約時間を遵守することができると判断した場合、実行依頼の通知元であるスケジューラ１２１−１に実行受託を通知する。具体的には、たとえば、スケジューラ１２１−２は、実行依頼の通知元への実行不可または実行受託の通知をＩＰＣによって行う。
【００４８】
これにより、センサアーキテクチャ１００は、排他制御、負荷分散を行わずにすべてのセンサのドライバの制約時間を遵守させることができる。したがって、センサアーキテクチャ１００は、運用中に排他制御および負荷分散にかかる処理の負荷量を低減させることができる。
【００４９】
また、図４の例では、各ドライバの通常処理にかかる処理時間の合計値によって各ドライバの制約時間が遵守されるか判断している。これに限らず、スケジューラ１２１−２は、各ドライバの格納された実行開始時刻ｔｓｄ、ｔｓｅ、ｔｓｃに基づいてドライバごとにつぎの実行開始時刻を詳細に予測してもよい。そして、ドライバごとに格納された実行開始時刻と予測された実行開始時刻との差分値が制約時間を遵守するか否かが判断されてもよい。これにより、センサアーキテクチャ１００は、制約時間を遵守できるか否かの判断の精度を向上させることができる。
【００５０】
（バックアップ・コプロセッサ１０１）
上述したように、センサアーキテクチャ１００の設計者によってドライバの割り当てが行われなかったコプロセッサ１０１については、バックアップ・コプロセッサ１０１として停止させておく。これにより、センサアーキテクチャ１００は、消費電力を低減させることができる。そして、起動中のコプロセッサ１０１だけではすべてのドライバの制約時間を遵守できない場合に、バックアップ・コプロセッサ１０１が起動され、バックアップ・コプロセッサ１０１にドライバが割り当てられる。
【００５１】
図５は、バックアップ・コプロセッサ１０１に実行指示を通知する例を示す説明図である。スケジューラ１２１−１は、スケジューラ１２１−２から実行不可を受け付けた場合、バックアップ・コプロセッサ１０１−３を起動させる。具体的には、たとえば、スケジューラ１２１−１は、電源供給回路１０３にバックアップ・コプロセッサ１０１−３へ電源を供給させる指示を通知する。そして、たとえば、電源供給回路１０３は、該指示を受け付けると、バックアップ・コプロセッサ１０１−３に電源を供給する。これにより、バックアップ・コプロセッサ１０１−３は起動する。スケジューラ１２１−１は、バックアップ・コプロセッサ１０１−３へドライバＣの実行指示を通知する。
【００５２】
たとえば、ドライバＣの実行指示は、ドライバＣの実行コードと、ドライバＣの実行開始時刻ｔｓｃと、ドライバＣの通常処理にかかる処理時間ｔ１ｃと、ドライバＣのＣＰＵ呼出処理にかかる処理時間ｔ２ｃと、ドライバＣの制約時間ｔｐｃと、を有している。起動後のバックアップ・コプロセッサ１０１−３が実行するスケジューラ１２１−３は、ドライバＣの実行指示を受け付けると、ドライバＣを実行する。
【００５３】
したがって、センサアーキテクチャ１００は、センサのドライバを継続して実行させることができ、信頼性を向上させることができる。
【００５４】
図６は、バックアップ・コプロセッサ１０１による実行依頼例を示す説明図である。スケジューラ１２１は、一定時間ごとに割り当てられたドライバＣの実行依頼をコプロセッサ１０１−１、コプロセッサ１０１−２へ通知する。
【００５５】
スケジューラ１２１−３からの実行依頼を受け付けたスケジューラ１２１−１とスケジューラ１２１−２は、図３に示したように、割り当てられたドライバと実行依頼を受け付けたドライバとのそれぞれの制約時間を遵守できるか否かを判断する。スケジューラ１２１−１またはスケジューラ１２１−２は、割り当てられたドライバと実行依頼を受け付けたドライバとのそれぞれの制約時間を遵守できる場合、実行依頼の通知元であるバックアップ・コプロセッサ１０１−３に実行受託を通知する。一方、スケジューラ１２１−１またはスケジューラ１２１−２は、割り当てられたドライバと実行依頼を受け付けたドライバとのいずれか一つの制約時間であっても遵守できない場合、実行依頼の通知元であるバックアップ・コプロセッサ１０１−３に実行不可を通知する。たとえば、スケジューラ１２１−１またはスケジューラ１２１−２は、実行不可または実行受託の通知をＩＰＣによって行う。
【００５６】
スケジューラ１２１−３は、実行受託をいずれかのコプロセッサ１０１から受け付けたら、ドライバＣの実行指示を実行受託の通知元のコプロセッサ１０１に通知する。スケジューラ１２１−３は、ドライバＣの実行指示の通知をＩＰＣによって行う。そして、スケジューラ１２１−３は、バックアップ・コプロセッサ１０１−３を停止させる。
【００５７】
これにより、センサアーキテクチャ１００は、コプロセッサ１０１に余力のない場合にセンサのドライバの制約時間を遵守させるためにバックアップ・コプロセッサ１０１を動作させる。そして、センサアーキテクチャ１００は、コプロセッサ１０１に余力があればバックアップ・コプロセッサ１０１を停止させることができる。これにより、センサアーキテクチャ１００は、各ドライバの実行を継続して動作させることができる。したがって、センサアーキテクチャ１００は、信頼性を向上させつつ、消費電力を低減させることができる。
【００５８】
（処理時間、制約時間、実行開始時刻の記憶例）
つぎに、ドライバごとに記憶される通常処理にかかる処理時間と、ＣＰＵ呼出処理にかかる制約時間と、実行開始時刻と、の記憶例について説明する。
【００５９】
図７は、ドライバの処理時間と制約時間と実行開始時刻の記憶例を示す説明図である。ドライバテーブル７００は、コプロセッサ１０１ごとにローカルメモリ１０２に記憶されており、割り当てられたドライバに関するドライバ情報が記憶されている。図７では、ドライバテーブル７００−１は、コプロセッサ１０１−１に割り当てられたドライバＡ、ドライバＢ、ドライバＣについての情報が記述されている。ドライバテーブル７００−２は、コプロセッサ１０１−２に割り当てられたドライバＤ、ドライバＥについての情報が記述されている。
【００６０】
各ドライバテーブル７００は、ドライバＩＤ、通常処理の処理時間、ＣＰＵ呼出処理の処理時間、制約時間、実行開始時刻のフィールドを有している。ドライバＩＤは、複数のコプロセッサ１０１の実行対象となるドライバの識別子である。本実施の形態では、ドライバの識別子とセンサの識別子とを同一にしている。第１の処理時間は、各ドライバの通常処理にかかる処理時間である。第２の処理時間は、各ドライバのＣＰＵ呼出処理にかかる処理時間である。
【００６１】
上述したように、制約時間は、センサごとに定められたセンサのバッファからセンサによって検知されたデータの取得を行う一定の間隔である。実行開始時刻は、ドライバの実行開始時に記憶される時刻である。実行開始時刻のフィールドは、割当先のコプロセッサ１０１によって実行される都度、更新される。
【００６２】
ドライバテーブル７００−１では、各フィールドに情報が設定されることにより、ドライバ情報（たとえば、７０１−１、７０１−２、７０１−３）がレコードとして記憶される。ドライバテーブル７００−２では、各フィールドに情報が設定されることにより、ドライバ情報（たとえば、７０２−１、７０２−２）がレコードとして記憶される。
【００６３】
ドライバテーブル７００に付された「−番号」は、ローカルメモリ１０２の「−番号」と同一であり、各ドライバテーブル７００は、同一番号の付されたローカルメモリ１０２に記憶されていることとする。
【００６４】
各スケジューラ１２１は、他のコプロセッサ１０１に対して実行指示を行う場合に、実行指示の対象となるドライバのドライバ情報を実行指示に付与して通知する。そして、各コプロセッサ１０１は、実行指示後に、該実行指示の対象となるドライバの実行コードと共にドライバ情報を自ローカルメモリ１０２のドライバテーブル７００から削除する。したがって、割り当て先のコプロセッサ１０１が、割り当てられたドライバの実行コード、ドライバ情報を有していればよいため、排他制御が不要となる。
【００６５】
（各センサの機能例）
図８は、センサの機能例を示す説明図である。たとえば、図８に示すセンサは、バッファ８０１と、制御部８０３と、センシング部８０２と、を有している。たとえば、図８に示すセンサはセンサＡからセンサＥである。たとえば、センシング部８０２は、センサｘの機能に応じて検知処理を行う。たとえば、制御部８０３は、検知処理によって検知されたデータがバッファに記憶されたら、各コプロセッサ１０１に割り込み信号を出力する。ポーリング型のセンサの場合、制御部８０３は割り込み信号を出力しなくてもよい。たとえば、バッファ８０１が複数ある場合に、制御部８０３は、センシング部８０２によって検知されたデータを記憶させるバッファを切り替える機能を有していてもよい。
【００６６】
温度センサを例に挙げると、温度センサのセンシング部は、たとえば、温度を検知する。そして、温度センサのセンシング部８０２は、たとえば、検知した温度を示すアナログのデータをデジタルのデータに変換してバッファ８０１に記憶する。
【００６７】
（各スケジューラの機能例）
図９は、各スケジューラの機能例を示すブロック図である。コプロセッサ１０１と、バックアップ・コプロセッサ１０１とによってスケジューラの機能が異なる。バックアップ用でないコプロセッサ１０１−ｉのスケジューラ１２１−ｉは、制御部９０１−ｉと、判断部９２０−ｉと、移管部９０３−ｉと、を有している。図３〜６の例では、ｉは１および２である。バックアップ・コプロセッサ１０１−ｊのスケジューラ１２１−ｊは、受付部９５１−ｊと、制御部９５２−ｊと、通知部９５３−ｊと、停止部９５４−ｊと、を有している。図３〜図６の例では、ｊは３である。
【００６８】
制御部９０１−ｉから移管部９０３−ｉの処理は、たとえば、ローカルメモリ１０２−ｉまたはストレージ１０６などの記憶装置に記憶されたスケジューラ１２１−ｉにコーディングされている。コプロセッサ１０１−ｉが該スケジューラ１２１−ｉを記憶装置からロードし、スケジューラ１２１−ｉにコーディングされた処理を実行することにより、制御部９０１−ｉから移管部９０３−ｉの機能が実現される。
【００６９】
受付部９５１−ｊから停止部９５４−ｊの処理は、たとえば、ローカルメモリ１０２−ｊまたはストレージ１０６などの記憶装置に記憶されたスケジューラ１２１−ｊにコーディングされている。コプロセッサ１０１−ｊが該スケジューラ１２１−ｊを記憶装置からロードし、スケジューラ１２１−ｊにコーディングされた処理を実行することにより、受付部９５１−ｊから停止部９５４−ｊの機能が実現される。
【００７０】
各機能部の処理結果は、たとえば、それぞれのローカルメモリ１０２の作業領域に記憶される。以降の説明において、各機能部に付された“−番号”はコプロセッサ１０１に付された番号に対応しており、各コプロセッサ１０１のスケジューラの機能部であることを示している。
【００７１】
たとえば、制御部９０１−ｉは、割り当てられたセンサのドライバの実行を制御する。具体的には、制御部９０１−ｉは、選択部９１１−ｉと、格納部９１２−ｉと、実行部９１３−ｉと、検出部９１４−ｉと、を有している。たとえば、選択部９１１−ｉは、センサアーキテクチャ１００の起動後に、予め割り当てられたセンサのドライバをすべてディスパッチループ１３１−ｉに入れて、ディスパッチループ１３１−ｉから順にドライバを選択する。
【００７２】
たとえば、格納部９１２−ｉは、ローカルメモリ１０２−ｉに記憶されたドライバテーブル７００−ｉから、選択部９１１−ｉによって選択されたドライバの識別情報に基づいて選択されたドライバに対応するドライバ情報を検索する。たとえば、格納部９１２−ｉは、コプロセッサ１０１−ｉが有するタイマから現時刻を取得する。たとえば、格納部９１２−ｉは、検索されたドライバ情報の実行開始時刻のフィールドに取得した現時刻を格納する。
【００７３】
そして、たとえば、実行部９１３−ｉは、選択されたドライバの実行を開始する。たとえば、検出部９１４−ｉは、選択されたドライバの通常処理を実行中に、特定の条件を満たすか否かを検出する。特定の条件とは、ＣＰＵ呼出処理が実行される条件でありドライバごとに定められている。
【００７４】
たとえば、判断部９０２−ｉは、検出部９１４−ｉによって特定の条件を満たすことが検出された場合、実行中のドライバのＣＰＵ呼出処理が実行されても、ディスパッチループ１３１−ｉに登録されたドライバの制約を遵守できるか否かを判断する。具体的には、判断部９０２−ｉは、算出部９２１−ｉと、判断部９２２−ｉと、を有している。
【００７５】
たとえば、算出部９２１−ｉは、ドライバテーブル７００−ｉから、ディスパッチループ１３１−ｉに登録されたドライバのうち、実行中のドライバを除く残余のドライバごとに実行開始時刻を取得する。そして、たとえば、算出部９２１−ｉは、現時刻を取得する。算出部９２１−ｉは、残余のドライバごとに実行開始時刻と現時刻との差分値を算出する。
【００７６】
つぎに、たとえば、算出部９２１−ｉは、ドライバテーブル７００−ｉから、残余のドライバの通常処理にかかる処理時間と、実行中のドライバのＣＰＵ呼出処理にかかる処理時間と、を取得する。上述したように、通常処理にかかる処理時間は、ドライバテーブル７００−ｉの第１の処理時間のフィールドに登録され、ＣＰＵ呼出処理にかかる処理時間は、ドライバテーブル７００−ｉの第２の処理時間のフィールドに登録されている。算出部９２１−ｉは、残余のドライバごとの差分値に、取得した実行中のドライバのＣＰＵ呼出処理にかかる処理時間を加える。そして、算出部９２１−ｉは、残余のドライバごとの加算結果にディスパッチループ１３１−ｉに登録された順に基づいて残余のドライバの通常処理にかかる処理時間を加える。これにより、残余のドライバごとに残余のドライバが最後に実行された実行開始時刻からつぎに実行されると予測される実行開始時刻までの時間が算出される。
【００７７】
そして、判断部９２２−ｉは、残余のドライバごとに算出部９２１−ｉによって算出された時間がローカルメモリ１０２−ｉに記憶された残余のドライバの制約時間を遵守するか否かを判断する。具体的には、たとえば、判断部９２２−ｉは、ドライバテーブル７００−ｉから、残余のドライバごとに残余のドライバの制約時間を取得する。そして、たとえば、判断部９２２−ｉは、残余のドライバごとに算出部９２１−ｉによって算出された時間が取得した制約時間以下であるか否かを判断する。残余のドライバごとに算出された時間が取得した制約時間以下である場合、判断部９２２−ｉは、制約時間を遵守していると判断する。一方、残余のドライバごとに算出された時間が取得した制約時間以下でない場合、判断部９２２−ｉは、制約時間を遵守していないと判断する。
【００７８】
移管部９０３−ｉは、判断部９２２−ｉによって制約時間を遵守しないと判断されたドライバの実行依頼を、複数のコプロセッサ１０１のうち他のコプロセッサ１０１に通知する。具体的には、たとえば、移管部９０３−ｉは、通知部９３１−ｉと、受付部９３２−ｉと、を有している。
【００７９】
たとえば、通知部９３１−ｉは、該実行依頼をコプロセッサ１０１に通知する。上述したように、たとえば、実行依頼には、依頼対象となるドライバの実行コードと、ドライバのドライバ情報と、が付されている。そして、受付部９３２−ｉは、該コプロセッサ１０１からの実行受託または実行不可の通知を受け付ける。通知部９３１は、受付部９３２によって実行受託が受け付けられた場合、実行受託の通知元のコプロセッサ１０１に対して、実行指示を通知する。
【００８０】
一方、通知部９３１−ｉは、受付部９３２−ｉによって実行不可が受け付けられた場合、バックアップ・コプロセッサ１０１を起動させる。バックアップ・コプロセッサ１０１の起動後に、通知部９３１−ｉは、制約時間を遵守しないと判断されたドライバの実行指示をバックアップ・コプロセッサ１０１に通知する。
【００８１】
実行指示の対象となるドライバの実行コードおよびドライバ情報は実行指示の通知先のローカルメモリ１０２に格納されるため、ドライバの移管完了後に、通知部９３１−ｉは、該ドライバの実行コードおよびドライバ情報をローカルメモリ７００−ｉから削除する。これにより、各ドライバの実行コードおよびドライバ情報は、コプロセッサ１０１と起動中のバックアップ・コプロセッサ１０１のうちのいずれか一つのコプロセッサ１０１のローカルメモリ１０２に格納される。したがって、コプロセッサ１０１および起動中のバックアップ・コプロセッサ間で排他制御が行わなくても、ドライバの実行を継続させることができる。さらに、通知部９３１−ｉは、ドライバの移管完了後に、ディスパッチループ１３１−ｉから移管されたドライバを削除する。
【００８２】
また、受付部９３２−ｉは、他のコプロセッサ１０１からの実行依頼を受け付ける。そして、判断部９０２−ｉは、受付部９３２−ｉによって他のコプロセッサ１０１からの実行依頼を受け付けられた場合、実行依頼の対象となるドライバと、割り当てられたドライバと、のすべての制約を遵守できるか否かを判断する。
【００８３】
具体的には、たとえば、算出部９２１−ｉは、実行依頼の対象となるドライバの通常処理にかかる処理時間と、割り当てられたドライバの通常処理にかかる処理時間と、の合計値を算出する。判断部９０２−ｉは、合計値が各ドライバの制約時間以下であるか否かを判断する。これにより、実行依頼の対象となるドライバと割り当てられたドライバとの制約時間を遵守できるか否かが判断される。
【００８４】
そして、判断部９０２−ｉによって実行依頼の対象となるドライバと割り当てられたドライバとの制約が遵守されると判断された場合、通知部９３１−ｉは、実行依頼の通知元に実行受託を通知する。一方、判断部９０２−ｉによって実行依頼の対象となるドライバと割り当てられたドライバとの制約のうちいずれかの制約が遵守されないと判断された場合、通知部９３１−ｉは、実行依頼の通知元に実行不可を通知する。具体的に、通知部９３１−ｉは、ＩＰＣによって通知する。
【００８５】
つぎに、バックアップ・コプロセッサ１０１−ｊが実行するスケジューラ１２１−ｊの機能について説明する。コプロセッサ１０１−ｉがバックアップ・コプロセッサ１０１−ｊを起動させる。受付部９５１−ｊは、コプロセッサ１０１−ｉから実行指示を受け付ける。上述したように、たとえば、実行指示には、依頼対象となるドライバの実行コードと、ドライバのドライバ情報と、が付されている。受付部９５１−ｊは、受け付けた実行指示に含まれるドライバ情報および実行コードをローカルメモリ１０２−ｊに格納する。
【００８６】
そして、制御部９５２−ｊは、実行指示を受け付けると、実行指示の対象となるドライバをディスパッチループ１３１に登録する。制御部９５２−ｊは、ディスパッチループ１３１−ｊ内のドライバを順に繰り返して実行する。
【００８７】
具体的には、たとえば、制御部９５２−ｊは、選択部９６１−ｊと、格納部９６２−ｊと、実行部９６３−ｊと、を有している。選択部９６１−ｊは、ディスパッチループ１３１−ｊ内のドライバを順に選択する。格納部９６２−ｊは、選択部９６１−ｊによってあらたにドライバが選択されると、現時刻を取得する。格納部９６２−ｊは、ドライバテーブル７００の実行開始時刻のフィールドに取得した時刻を格納する。実行部９６３−ｊは、選択されたドライバを実行する。
【００８８】
さらに、通知部９５３−ｊは、受付部９５１−ｊによって実行受託を受け付けるまで、一定時間ごとにバックアップ・コプロセッサ１０１でないコプロセッサ１０１に対して割り当てられたドライバの実行依頼を通知する。一定時間については、たとえば、センサアーキテクチャ１００の設計者が定めてもよいし、バックアップ・コプロセッサ１０１が有するタイマによるタイマ割り込みのタイミングであってもよい。
【００８９】
そして、通知部９５３−ｊは、受付部９５１−ｊによって実行受託を受け付けると、実行受託の通知元に実行指示をＩＰＣにより通知する。停止部９５４−ｊは、ディスパッチループ１３１が空の場合、電源を落とすことにより停止する。具体的には、たとえば、停止部９５４−ｊは、電源供給回路１０３にバックアップ・コプロセッサ１０１−ｊに供給する電源を０［Ｖ］に設定する指示を通知してもよい。
【００９０】
（スケジューラ１２１−ｉが行う処理手順）
図１０および図１１は、スケジューラ１２１−ｉが行う処理手順を示すフローチャートである。スケジューラ１２１−ｉは、コプロセッサ１０１−ｉが実行する。コプロセッサ１０１−ｉには、センサアーキテクチャ１００の設計者によって予めドライバが割り当てられている。スケジューラ１２１−ｉは、初期化を行う（ステップＳ１００１）。つぎに、スケジューラ１２１−ｉは、ディスパッチループ１３１−ｉから順にドライバを選択する（ステップＳ１００２）。ここでは、選択されたドライバを選択ドライバと称する。
【００９１】
そして、スケジューラ１２１−ｉは、タイマから現時刻を取得し（ステップＳ１００３）、取得された現時刻と選択ドライバとを関連付けてローカルメモリ１０２−ｉに出力する（ステップＳ１００４）。スケジューラ１２１−ｉは、選択ドライバを実行する（ステップＳ１００５）。
【００９２】
つぎに、スケジューラ１２１−ｉは、ＣＰＵ呼出処理が行われるか否かを判断する（ステップＳ１００６）。上述したように、温度センサのドライバであれば、検知された温度が閾値以上、閾値未満であると判断された場合、ＣＰＵ呼出処理があらたに行われると判断される。ここでは、ステップＳ１００６において、ＣＰＵ呼出処理が行われる条件を満たしたことが検出されると、ＣＰＵ呼出処理が行われると判断される。そのため、ＣＰＵ呼出処理が実行中の場合にはＣＰＵ呼出処理が行われると判断されない。
【００９３】
ＣＰＵ呼出処理が行われない場合（ステップＳ１００６：Ｎｏ）、スケジューラ１２１−ｉは、選択ドライバの実行が終了したか否かを判断する（ステップＳ１００７）。選択ドライバの実行が終了していない場合（ステップＳ１００７：Ｎｏ）、ステップＳ１００６へ戻る。選択ドライバの実行が終了した場合（ステップＳ１００７：Ｙｅｓ）、スケジューラ１２１−ｉは、選択ドライバをディスパッチループ１３１の最後尾に登録し（ステップＳ１００８）、ステップＳ１００２へ戻る。
【００９４】
ステップＳ１００６において、ＣＰＵ呼出処理が行われる場合（ステップＳ１００６：Ｙｅｓ）、ステップＳ１００９へ移行する。そして、スケジューラ１２１−ｉは、ディスパッチループ１３１内のドライバの通常処理にかかる処理時間と、選択ドライバのＣＰＵ呼出処理にかかる処理時間と、各ドライバの制約時間と、をローカルメモリ１０２−ｉから取得する（ステップＳ１００９）。
【００９５】
つぎに、スケジューラ１２１−ｉは、ディスパッチループ１３１内のドライバの各々について、取得した情報に基づき、記憶された実行開始時刻からつぎの実行開始時刻までの時間を算出する（ステップＳ１０１０）。スケジューラ１２１−ｉは、各ドライバの制約を遵守できるか否かを判断する（ステップＳ１０１１）。
【００９６】
各ドライバの制約が遵守される場合（ステップＳ１０１１：Ｙｅｓ）、ステップＳ１００７へ戻る。各ドライバの制約時間が遵守されない場合（ステップＳ１０１１：Ｎｏ）、スケジューラ１２１−ｉは、制約時間を遵守できないと判断されたドライバの実行依頼を他のコプロセッサ１０１に通知する（ステップＳ１０１２）。
【００９７】
スケジューラ１２１−ｉは、応答を受け付けたか否かを判断する（ステップＳ１０１３）。応答が受け付けられていない場合（ステップＳ１０１３：Ｎｏ）、ステップＳ１０１３へ戻る。応答が受け付けられた場合（ステップＳ１０１３：Ｙｅｓ）、スケジューラ１２１−ｉは、応答が実行受託通知であるか否かを判断する（ステップＳ１０１４）。
【００９８】
応答が実行受託通知の場合（ステップＳ１０１４：Ｙｅｓ）、スケジューラ１２１−ｉは、受託通知の通知元にＩＰＣによりドライバを送信し（ステップＳ１０１５）、ステップＳ１００７へ戻る。応答が実行受託通知でない場合（ステップＳ１０１４：Ｎｏ）、スケジューラ１２１−ｉは、バックアップ・コプロセッサ１０１−ｊを起動させる（ステップＳ１０１６）。そして、スケジューラ１２１−ｉは、バックアップ・コプロセッサ１０１−ｊにＩＰＣによりドライバを送信し（ステップＳ１０１７）、ステップＳ１００７へ戻る。
【００９９】
（スケジューラ１２１−ｉが行う処理手順）
図１２は、スケジューラ１２１−ｉが行う実行依頼または実行指示を受付時の処理手順を示すフローチャートである。スケジューラ１２１−ｉは、実行依頼または実行指示を受け付けたか否かを判断する（ステップＳ１２０１）。実行依頼および実行指示が受け付けられていない場合（ステップＳ１２０１：Ｎｏ）、ステップＳ１２０１へ戻る。実行依頼が受け付けられた場合（ステップＳ１２０１：実行依頼）、スケジューラ１２１−ｉは、実行依頼の対象となるドライバの通常処理にかかる処理時間と、割り当てられたドライバの通常処理にかかる処理時間と、の合計値を算出する（ステップＳ１２０２）。
【０１００】
そして、スケジューラ１２１−ｉは、合計値が、実行依頼の対象となるドライバの制約時間および割り当てられたドライバの制約時間以下であるか否かを判断することにより、制約が遵守されるか否かを判断する（ステップＳ１２０３）。
【０１０１】
制約が遵守されない場合（ステップＳ１２０３：Ｎｏ）、スケジューラ１２１−ｉは、実行不可を実行依頼の通知元に通知し（ステップＳ１２０４）、ステップＳ１２０１へ戻る。一方、制約が遵守される場合（ステップＳ１２０３：Ｙｅｓ）、スケジューラ１２１−ｉは、実行受託を実行依頼の通知元に通知し（ステップＳ１２０５）、ステップＳ１２０１へ戻る。
【０１０２】
実行指示が受け付けられた場合（ステップＳ１２０１：実行指示）、スケジューラ１２１−ｉは、実行指示の対象となるドライバをディスパッチループ１３１に登録し（ステップＳ１２０６）、ステップＳ１２０１へ戻る。
【０１０３】
（スケジューラ１２１−ｊが行う処理手順）
図１３は、スケジューラ１２１−ｊが行う実行依頼を受付時の処理手順を示すフローチャートである。スケジューラ１２１−ｊは、バックアップ・コプロセッサ１０１−ｊが実行する。バックアップ・コプロセッサ１０１−ｊには、センサアーキテクチャ１００の設計者によって予めドライバが割り当てられていない。まず、スケジューラ１２１−ｊは、実行指示を受け付けたか否かを判断する（ステップＳ１３０１）。実行指示が受け付けられていない場合（ステップＳ１３０１：Ｎｏ）、ステップＳ１３０４へ移行する。
【０１０４】
実行指示が受け付けられた場合（ステップＳ１３０１：Ｙｅｓ）、スケジューラ１２１−ｊは、実行指示の対象となるドライバをディスパッチループ１３１に登録する（ステップＳ１３０２）。そして、スケジューラ１２１−ｊは、ディスパッチループ１３１内のドライバを順に実行する（ステップＳ１３０３）。
【０１０５】
スケジューラ１２１−ｊは、一定時間経過したか否かを判断する（ステップＳ１３０４）。一定時間経過していない場合（ステップＳ１３０４：Ｎｏ）、ステップＳ１３０１へ戻る。一方、一定時間経過した場合（ステップＳ１３０４：Ｙｅｓ）、スケジューラ１２１−ｊは、ディスパッチループ１３１内のドライバの実行依頼を通知する（ステップＳ１３０５）。たとえば、ディスパッチループ１３１内のドライバが複数ある場合、スケジューラ１２１−ｊは、ディスパッチループ１３１内からドライバを一つ選択し、選択したドライバについて実行依頼を通知してもよい。
【０１０６】
つぎに、スケジューラ１２１−ｊは、実行受託を受け付けたか否かを判断する（ステップＳ１３０６）。実行受託が受け付けられない場合（ステップＳ１３０６：Ｎｏ）、ステップＳ１３０４へ戻る。一方、実行受託が受け付けられた場合（ステップＳ１３０６：Ｙｅｓ）、スケジューラ１２１−ｊは、受託通知の通知元にＩＰＣによりドライバを送信する（ステップＳ１３０７）。たとえば、スケジューラ１２１−ｊは、実行受託の応答が最も速いコプロセッサ１０１にドライバを送信してもよい。
【０１０７】
スケジューラ１２１−ｊは、ディスパッチループ１３１が空か否かを判断する（ステップＳ１３０８）。ディスパッチループ１３１が空である場合（ステップＳ１３０８：Ｙｅｓ）、スケジューラ１２１−ｊは、電源供給回路１０３にスケジューラ１２１−ｊへの電源供給を停止させることにより、停止する（ステップＳ１３０９）。一方、ディスパッチループ１３１が空でない場合（ステップＳ１３０８：Ｎｏ）、ステップＳ１３０４へ戻る。
【０１０８】
以上説明したように、コプロセッサは、各ドライバが通常処理を行えば制約を遵守するが、一のドライバがＣＰＵ呼出処理を行うと他のドライバの制約を遵守しない場合、他のドライバを他のコプロセッサに実行させる。これにより、センサアーキテクチャは、排他制御、分散処理を行わなくても、センサのドライバを継続して実行させることができる。したがって、センサアーキテクチャは、信頼性を向上させることができる。
【０１０９】
また、コプロセッサは最大負荷の場合にすべてのセンサの制約を守るに足る数だけ準備される。運用開始時のドライバは、センサアーキテクチャの設計者によってドライバ実行の負荷が最少の場合を仮定してすべてのセンサの制約が守れる最少のコプロセッサ数に配置される。そして、運用開始時に割り当てがないコプロセッサは、バックアップ・コプロセッサとして停止させておく。これにより、検出装置は、余剰なコプロセッサを停止させることにより、消費電力を低減させることができる。
【０１１０】
また、コプロセッサは、起動中のプロセッサだけではすべてのドライバの制約を遵守できない場合、バックアップ・コプロセッサを起動させ、ドライバを実行させる。これにより、すべてのドライバの制約を遵守させることができる。これにより、センサアーキテクチャは、センサのドライバを継続して実行させることができる。したがって、センサアーキテクチャは、信頼性を向上させることができる。
【０１１１】
また、バックアップ・コプロセッサは、コプロセッサの能力に余剰があれば、割り当てられたドライバをコプロセッサに実行させ、自バックアップ・コプロセッサを停止する。これにより、消費電力を低減させることができる。
【０１１２】
なお、本実施の形態で説明した通知方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通知プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通知プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１１３】
１００  センサアーキテクチャ
１０１−１〜１０１−ｎ  コプロセッサ
１０１−（ｎ＋１）〜１０１−ｍ  バックアップ・コプロセッサ
Ａ〜Ｅ，ｘ  センサ
９１２−ｉ  格納部
９２１−ｉ  算出部
９２２−ｉ  判断部
９３１−ｉ  通知部
９５３−ｊ  通知部
９５４−ｊ  停止部
【図１】
2013140517.tif 000003
【図２】
2013140517.tif 000004
【図３】
2013140517.tif 000005
【図４】
2013140517.tif 000006
【図５】
2013140517.tif 000007
【図６】
2013140517.tif 000008
【図７】
2013140517.tif 000009
【図８】
2013140517.tif 000010
【図９】
2013140517.tif 000011
【図１０】
2013140517.tif 000012
【図１１】
2013140517.tif 000013
【図１２】
2013140517.tif 000014
【図１３】
2013140517.tif 000015
【国際調査報告】
2013140517.tif 000016
2013140517.tif 000017
2013140517.tif 000018
2013140517.tif 000019