(57)【要約】      （修正有）【課題】汎用ＯＳ等のスケジューリング周期よりも高速、高精度な制御周期が必要となる情報処理において、スケジューラの起動周期に制約されず、スケジューラの処理に起因する精度低下のない情報処理装置および制御方法を提供する。【解決手段】タスク処理実行部と、タイマと、タスク処理実行部を起動する補正部と、周期処理登録部と、補正部を起動する補正部起動手段と、時計とを有する情報処理装置において、補正部は各周期の起動時刻の差分の最大値から周期を引いた値を初期待機期間とし、タスク処理実行部の起動時には次期目標待機時刻まで待機してからタスク処理実行部の周期処理を起動する。周期的割込みタイマにより初期待機期間待機し、その後現在時刻に周期を足した次期目標待機時刻を求めて周期処理を実行する。再びタイマ割込みで起動後に次期目標待機時刻まで待機し、次期目標待機時刻を再度計算してから周期処理を実行する。【選択図】図１
2010003030.tif 000002
【特許請求の範囲】
【請求項１】
周期的なタスク処理を実行するタスク処理実行部と、所定の周期で割込みを発生可能なタイマと、前記タスク処理実行部を起動する補正部と、前記補正部からの依頼を受けて前記タイマの割込みから前記補正部を起動するように登録する周期処理登録部と、前記タイマの割込みから前記補正部を起動する補正部起動手段と、時刻を前記補正部に提供する時計とを有し、
前記補正部は、補正部を周期起動させ各周期起動時刻の差分の最大値から周期を引いた値を初期待機期間とする待機期間設定部と、前記タスク処理実行部の初回起動時には初期待機期間のあいだ待機し、次回以降の起動時には次期目標待機時刻まで待機してから前記タスク処理実行部の周期処理を起動する待機部と、前記待機部が待機後の時刻に周期を足した時刻を次期目標待機時刻とする次期目標待機時刻設定部を有することを特徴とする情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、前記補正部起動手段を割込みハンドラ起動部としたことを特徴とする情報処理装置。
【請求項３】
請求項１または２に記載の情報処理装置において、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、各情報処理装置で求めた前記初期待機期間を前記通信部を用いて各情報処理装置間で交換し、そのうちの最大となる初期待機期間を各情報処理装置の初期待機期間とし、各情報処理装置は前記同期部で同期されたタイミングで同時に周期処理を実行することを特徴とする情報処理装置システム。
【請求項４】
請求項１記載の情報処理装置において、前記補正部起動手段をスケジューラとしたことを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置において、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、各情報処理装置で求めた前記初期待機期間を前記通信部を用いて各情報処理装置間で交換し、そのうちの最大となる初期待機期間を各情報処理装置の初期待機期間とし、各情報処理装置は前記同期部で同期されたタイミングで同時に周期処理を実行することを特徴とする情報処理装置システム。
【請求項６】
周期的なタスク処理を実行するタスク処理実行部と、所定の周期で割込みを発生可能なタイマと、前記タスク処理実行部を起動するとともに待機期間設定部と次期目標待機時刻設定部と待機部とを有する補正部と、前記補正部からの依頼を受けて前記タイマの割込みから前記補正部を起動するように登録する周期処理登録部と、前記タイマの割込みから前記補正部を起動する補正部起動手段と、時刻を前記補正部に提供する時計とを有する情報処理装置の周期タスク実行方法において、
前記補正部の待機期間設定部は前記補正部を周期起動させ各周期の起動時刻の差分の最大値から周期を引いた値を初期待機期間とし、前記待機部は前記補正部による前記タスク処理実行部の初回起動時には初期待機期間のあいだ待機し、次回以降の前記補正部の起動時には前記次期目標待機時刻設定部が設定する次期目標待機時刻まで待機してから前記タスク処理実行部の周期処理を起動し、次期目標待機時刻設定部は前記待機部が待機後の時刻に周期を足した時刻を次期目標待機時刻とすることを特徴とする情報処理装置の周期タスク実行方法。
【請求項７】
請求項６記載の情報処理装置の周期タスク実行方法において、前記補正部起動手段を割込みハンドラ起動部としたことを特徴とする情報処理装置の周期タスク実行方法。
【請求項８】
請求項６または７に記載の情報処理装置の周期タスク実行方法において、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、各情報処理装置で求めた前記初期待機期間を前記通信部を用いて各情報処理装置間で交換し、そのうちの最大となる初期待機期間を各情報処理装置の初期待機期間とし、各情報処理装置は前記同期部で同期されたタイミングで同時に周期処理を実行することを特徴とする情報処理装置システムの周期タスク実行方法。
【請求項９】
請求項６記載の情報処理装置の周期タスク実行方法において、前記補正部起動手段をスケジューラとしたことを特徴とする情報処理装置の周期タスク実行方法。
【請求項１０】
請求項９に記載の情報処理装置の周期タスク実行方法において、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、各情報処理装置で求めた前記初期待機期間を前記通信部を用いて各情報処理装置間で交換し、そのうちの最大となる初期待機期間を各情報処理装置の初期待機期間とし、各情報処理装置は、前記同期部で同期されたタイミングで同時に周期処理を実行することを特徴とする情報処理装置システムの周期タスク実行方法。
【請求項１１】
請求項７に記載の情報処理装置の周期タスク実行方法において、
所定の周期で割込みを発生させるように前記タイマを設定し、割込み発生から割込みハンドラ起動部の起動までの処理時間のジッタを計測し、初回の周期処理の実行時には計測した前記ジッタの最大値の間待機してから周期処理を実行し、次回以降は前回の周期処理開始時点に周期を足した時刻まで待機してから周期処理を実行することを特徴とする情報処理装置の周期タスク実行方法。
【請求項１２】
請求項１１に記載の情報処理装置の周期タスク実行方法において、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、それぞれの情報処理装置で、所定の周期で割込みを発生させるように前記タイマを設定し、割込み発生から割込みハンドラ起動部の起動までの処理時間のジッタを計測して、前記ジッタの最大値を他の情報処理装置と交換し、各情報処理装置は交換された前記ジッタの中の最大値の間、初回の周期処理の実行時に待機してから周期処理を実行し、次回以降は前回の周期処理開始時点に周期を足した時刻まで待機してから周期処理を実行することを特徴とする情報処理装置システムの周期タスク実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、周期タスクを実行する情報処理装置及び情報処理ソフトウェアを用いた情報処理制御方法に関する。
【背景技術】
【０００２】
一般に計算機では、計算機上のハードウェアを抽象化し、計算機資源を効率よく管理する基本ソフトウェアとしてオペレーティングシステム（以下ＯＳと称す）が稼動している。これらのＯＳ上での実行処理の単位をタスクと呼び、ある一つのタスクは何らかの機能／目的を果たすために動作する。
【０００３】
マルチタスクＯＳは複数のタスクを動作させ、自身の持つスケジューリング機能によって動作するタスクを適宜切り替える。このようなタスクの切り替えを行う要素をスケジューラと呼ぶ。通常、スケジューラは一定周期で発生するクロックの割り込みによって起動され、ＯＳの実装に依存した評価指標によって実行可能なタスク群から、次に実行するタスクを選択し起動させる。特に、評価指標としてタスクの時間的な制約を考慮したスケジューリングを実行するＯＳをリアルタイムＯＳという。
【０００４】
一般にスケジューラの処理時間は、必要最低限のことのみを行いなるべく短くなるように実装される。これは、スケジューラの実行によるオーバーヘッド（システム維持負荷）を最小化し、タスクの実行時間を長くしてシステム全体のスループットを向上させるためである。スケジューラの処理内容としては、実行タスクを選択するスケジューリング機能の他にソフトウェアタイマの更新やタスクキューの更新等が挙げられる。
【０００５】
また、スケジューラの起動周期の長さはプロセッサ等のハードウェアの性能に依存する。スケジューラの起動周期を短くすると、ソフトウェアタイマの分解能が高まることや単位時間あたりのタスク切り替えの機会が増える等の利点はあるものの、スケジューラの実行頻度が高まりシステム全体でのスループットは低下する。起動周期をスケジューラの処理時間と同等程度まで短くした場合は、タスクの実行時間はほぼゼロとなり、事実上スループットはゼロとなる。
【０００６】
逆に起動周期を長くした場合は、システム全体でのスループットは向上するが、ソフトウェアタイマの分解能が悪化することやタスク切り替えの機会が減少する等の短所があり、時間的制約を有するリアルタイムシステムには適さない。一般のＯＳでは、これらの状況を踏まえて適切なスケジューリング周期が設定される。
【０００７】
周期的な処理を実行する場合、これらのスケジューラやスケジューラ実行時に更新されるソフトウェアタイマを用いる方法が一般的である。周期的な処理では、その周期の時間経過をソフトウェアタイマによって管理し、指定する時間が経過した場合に該当する処理を起動する。
【０００８】
従来、特許文献１においては、ある目標時刻にタスクを起動するために、目標起動時刻よりも早く、スケジューラが起動するタイミングで該当するタスクを起動させ、その後、分解能補正部によって、スケジューリング周期よりも高い分解能で起動タイミングを補正する。また、特許文献２においては、スケジューラを起動するために用いるクロックとは別の第２のクロックを用いて、第２のクロックの割込みによって遊技制御処理を開始させている。
【０００９】
【特許文献１】特許３７３４０４２号公報
【特許文献２】特開２００１−０８７５２３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、モーションコントロールやサーボモータ制御といった高速、高精度な制御周期が必要となる分野においては、現状の汎用ＯＳやリアルタイムＯＳによる周期実行の実装では不十分である。周期の長さは、ソフトウェアタイマの分解能に依存し、その分解能はスケジューラの起動周期に依存している。そのため、スケジューラの起動周期よりも周期的な処理の周期を短くすることはできない。さらにスケジューラの起動周期は、プロセッサの性能に依存したスケジューリング処理の実行時間に依存している。
【００１１】
また、精度においても、スケジューラ内の処理でのソフトウェアタイマのタイムアウトによって、周期的な処理が開始されるため、スケジューラの処理時間が周期精度低下の原因となる。
【００１２】
前述の通り、スケジューラの処理時間はなるべく短くなるように実装され、一般の用途では問題にならないことが多いが、高速、高精度な制御周期が必要なる分野では問題となることがある。また、スケジューラの処理時間が毎回一定であれば周期精度の観点からは望ましいが、ソフトウェアタイマの数が不定であることやタスクキューの更新処理の時間が不定である等の原因から、実際はスケジューラの処理時間は一定とはならない場合が多い。
【００１３】
前述した従来例でも一定の対策は取られている。しかし例えば特許文献１では周期的な処理の起動は考慮されておらず、分解能補正部による補正期間の長さの考慮がなされていない。分解能補正部による待機中は他のタスクが動作することはできない。したがって、スケジューリング周期内における目標起動時刻までの待機期間が長すぎれば、他のタスクが動作できない時間が長くなりシステム全体のスループットが低下する。一方で、待機期間が短すぎればスケジューラの処理時間のジッタ内に目標起動時刻が設定されることとなり、スケジューリング処理終了後に周期的な処理を起動することとなり周期精度の低下を招く。特許文献２では、割込みによる制御処理の開始までの時間についてもスケジューラと同様にジッタ（信号の時間的ずれ）が存在するのが一般的であり、周期精度の低下を招く。また、特許文献１、特許文献２のいずれにおいても、クロックの割込みからタスクの処理が開始するまでの処理時間のジッタが考慮されていない。
【課題を解決するための手段】
【００１４】
本発明は、周期的なタスク処理を実行するタスク処理実行部と、所定の周期で割込みを発生可能なタイマと、前記タスク処理実行部を起動する補正部と、前記補正部からの依頼を受けて前記タイマの割込みから前記補正部を起動するように登録する周期処理登録部と、前記タイマの割込みから前記補正部を起動する補正部起動手段と、時刻を前記補正部に提供する時計とを有し、前記補正部は、補正部を周期起動させ各周期起動時刻の差分の最大値から周期を引いた値を初期待機期間とする待機期間設定部と、前記タスク処理実行部の初回起動時には初期待機期間のあいだ待機し、次回以降の起動時には次期目標待機時刻まで待機してから前記タスク処理実行部の周期処理を起動する待機部と、前記待機部が待機後の時刻に周期を足した時刻を次期目標待機時刻とする次期目標待機時刻設定部を有することを特徴とする。
【００１５】
また、前記補正部起動手段を割込みハンドラ起動部としたことを特徴とする。
【００１６】
また、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、各情報処理装置で求めた前記初期待機期間を前記通信部を用いて各情報処理装置間で交換し、そのうちの最大となる初期待機期間を各情報処理装置の初期待機期間とし、各情報処理装置は前記同期部で同期されたタイミングで同時に周期処理を実行する情報処理装置システムであることを特徴とする。
【００１７】
また、前記補正部起動手段をスケジューラとしたことを特徴とする。
【００１８】
さらに、周期的なタスク処理を実行するタスク処理実行部と、所定の周期で割込みを発生可能なタイマと、前記タスク処理実行部を起動するとともに待機期間設定部と次期目標待機時刻設定部と待機部とを有する補正部と、前記補正部からの依頼を受けて前記タイマの割込みから前記補正部を起動するように登録する周期処理登録部と、前記タイマの割込みから前記補正部を起動する補正部起動手段と、時刻を前記補正部に提供する時計とを有する情報処理装置の周期タスク実行方法において、前記補正部の待機期間設定部は前記補正部を周期起動させ各周期の起動時刻の差分の最大値から周期を引いた値を初期待機期間とし、前記待機部は前記補正部による前記タスク処理実行部の初回起動時には初期待機期間のあいだ待機し、次回以降の前記補正部の起動時には前記次期目標待機時刻設定部が設定する次期目標待機時刻まで待機してから前記タスク処理実行部の周期処理を起動し、次期目標待機時刻設定部は前記待機部が待機後の時刻に周期を足した時刻を次期目標待機時刻とする情報処理装置の周期タスク実行方法であることを特徴とする。
【００１９】
さらに、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、各情報処理装置で求めた前記初期待機期間を前記通信部を用いて各情報処理装置間で交換し、そのうちの最大となる初期待機期間を各情報処理装置の初期待機期間とし、各情報処理装置は前記同期部で同期されたタイミングで同時に周期処理を実行する情報処理装置システムの周期タスク実行方法であることを特徴とする。
【００２０】
さらに、所定の周期で割込みを発生させるように前記タイマを設定し、割込み発生から割込みハンドラ起動部の起動までの処理時間のジッタを計測し、初回の周期処理の実行時には計測した前記ジッタの最大値の間待機してから周期処理を実行し、次回以降は前回の周期処理開始時点に周期を足した時刻まで待機してから周期処理を実行する情報処理装置の周期タスク実行方法であることを特徴とする。
【００２１】
さらに、前記情報処理装置は複数の情報処理装置間で時刻を同期できる同期部と、複数の情報処理装置間で情報を通信できる通信部とを備え、それぞれの情報処理装置で、所定の周期で割込みを発生させるように前記タイマを設定し、割込み発生から割込みハンドラ起動部の起動までの処理時間のジッタを計測して、前記ジッタの最大値を他の情報処理装置と交換し、各情報処理装置は交換された前記ジッタの中の最大値の間、初回の周期処理の実行時に待機してから周期処理を実行し、次回以降は前回の周期処理開始時点に周期を足した時刻まで待機してから周期処理を実行する情報処理装置システムの周期タスク実行方法であることを特徴とする。
【発明の効果】
【００２２】
本発明はスケジューラの起動周期に制約されず、周期精度の高い周期処理を実行可能な情報処理装置およびその周期タスク実行方法を提供することができる。また、周期精度の高い周期処理を実行可能な情報処理システムを提供することができる。
さらに、複数の計算機で構成され各計算機が通信手段で接続されて、各計算機の時刻を同期させる同期手段を有するシステムにおいて、各計算機が同期されたタイミングでスケジューラの起動周期に制約されず、周期精度の高い周期処理を実行することができる情報処理装置システムを提供することができる。
【発明を実施するための最良の形態】
【００２３】
以下に、本発明の実施形態を図面に基づいて説明する。
［第１の実施の形態］
図１は、本発明の第１の実施の形態におけるソフトウェア構成を示すブロック図である。タスク処理実行部１００は所定の処理を実行し、ＯＳの提供する機能を用いるアプリケーションとして実装される。タスク処理実行部１００は、タスクを所定の周期で実行する周期処理部１０８を有する。周期処理部１０８が実行される各周期のタイミングは、補正部１０１によって定められる。
【００２４】
補正部１０１は、タスク処理実行部１００内の周期処理部１０８でタスクが実行される各周期のタイミングを定める。補正部１０１は、待機部１０５、次期目標設定部１０６、待機期間設定部１０７から構成される。また、補正部１０１は周期処理登録部１０２へ周期処理実行の準備を依頼する。また、補正部１０１は時計１０９と接続する。補正部１０１の実装形態としては、アプリケーション、ライブラリ、ミドルウェア、カーネル、カーネルモジュール、サーバープロセス等が挙げられる。
次期目標待機時刻設定部１０６は、待機部１０５が待機し続けるまでの目標待機時刻を設定する。待機部１０５は、次期目標待機時刻設定部１０６が設定する目標待機時刻まで待機した後、周期処理部１０８を実行させる。待機期間設定部１０７は、次期目標設定部１０６が設定する目標待機時刻の設定に必要な初期待機期間を求める。
【００２５】
周期処理登録部１０２は補正部１０１の依頼を受けて周期処理実行を準備する。すなわち指定周期で割込みを発生するようにタイマ１０４を設定し、タイマ１０４の割込みによって補正部１０１が起動するように割込みハンドラ起動部１０３を設定する。割込み処理を行う割込みハンドラ起動部１０３は、タイマ１０４から通知された割込み信号によって補正部１０１を起動する。割込みハンドラ起動部１０３はＯＳに含まれる機能として実装される。タイマ１０４は、周期処理登録部１０２によって指定された周期で割込みを発生するタイマＩＣである。
【００２６】
時計１０９は、補正部１０１に対して現在時刻を提供する。提供する情報の表現形態は、時間を表すものであればよい。したがって、時刻だけでなく、クロック数等でも構わない。時計１０９は、タイマ１０４と一体となっていても構わない。
【００２７】
図２は、本発明を適用したソフトウェア構成を実装する計算機システムの一実施例である。ＣＰＵ１１０は、不揮発性記憶媒体１１２からプログラムをＲＡＭ１１１に転送して実行する。実行処理プログラムとしては、ＯＳおよび図１に示されるソフトウェア構成を適用できる。
【００２８】
ＲＡＭ１１１は、ＣＰＵ１１０が動作するための一時的な記憶領域であり、不揮発性記憶媒体１１２から転送したＯＳ、アプリケーションプログラム等が格納される。不揮発性記憶媒体１１２は、情報の記憶媒体で、ＣＰＵ１１０を動作させるためのプログラムの保存、プログラムの実行結果の保存に利用される。
【００２９】
割込みコントローラ１１３は、割込み信号を通知可能な周辺デバイスと割込み信号を通じて接続し、周辺デバイス間の優先順位を考慮して、ＣＰＵ１１０へ割込み信号を通知する。割込みコントローラ１１３はＣＰＵ１１０内に含まれていてもよく、バス１１５に接続されていなくてもよい。クロック発振器１１４は、ＣＰＵ１１０を動作させるために必要なクロック信号を生成する。
【００３０】
バス１１５は、ＣＰＵ１１０、ＲＡＭ１１１、不揮発性記憶媒体１１２、割込みコントローラ１１３をそれぞれ接続する。バス１１５としては、ＰＣＩバス、ＩＳＡバス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、システムバス、メモリバス等が例示される。バス規格によって、ＣＰＵ１１０、ＲＡＭ１１１、不揮発性記憶媒体１１２、割込みコントローラ１１３、クロック発振器１１４、タイマ１０４、時計１０９の接続形態はさまざまであるが、本発明の効果が失われるものではない。タイマ１１６は、ＯＳのスケジューラを起動するために、所定の周期で割込みを発生するタイマＩＣである。
【００３１】
つぎに、本発明による周期処理の実行手順のフローチャートを図３に示す。はじめに、タスク処理実行部１００は、周期処理実行の準備を補正部１０１に依頼する（Ｓ００１）。次に待機期間設定部１０７が初期待機期間を求める（Ｓ００２）。その後、周期処理部１０８は周期処理を実行する（Ｓ００３）。
【００３２】
次に、周期処理実行のための準備手順について図４のフローチャートにより説明する。補正部１０１は、周期処理登録部１０２に周期処理実行の準備を依頼する（Ｓ０１０）。次に周期処理登録部１０２は、タイマ１０４の割込みによって補正部１０１が起動するように登録する（Ｓ０１１）。続けて、周期処理登録部１０２は、周期処理部１０８の指定する周期で割込み信号を発生させるようにタイマ１０４を設定し、タイマ１０４の動作を開始させる（Ｓ０１２）。タイマ１０４は、指定周期が経過すると割込みを発生させる（Ｓ０１３）。この割込みによって、割込みハンドラ起動部１０３は、補正部１０１を起動させる（Ｓ０１４）。
【００３３】
起動した補正部１０１の待機期間設定部１０７は現在の時刻を時計１０９から取得して保存する（Ｓ０１５）。次のタイマ１０４の割込みによって、再び待機期間設定部１０７が起動すると現在の時刻を時計１０９から取得して保存する（Ｓ０１６）。その後、前回保存した時刻との差分を求め、これまでに求めた計算値で最大のものを保存する（Ｓ０１７）。次に終了条件が成立したかをみて、成立していない場合はＳ０１６からの手順を繰り返し、成立していれば手順を終了する（Ｓ０１８）。これらの計測によって求められた差分の最大値から周期を引いた値を初期待機期間αとする（Ｓ０１９）。なお、これらの手順の中で計測できなかったより大きな差分が存在する可能性を考慮して、差分の最大値に所定の値を足した値を初期待機期間αとしてもよい。図４の準備手順によって初期待機期間αを求めるタイミングは、タスク処理実行部１００が補正部１０１に依頼する時の他、ＯＳのアイドル時に実行したり定期的に実行することができる。定期的実行の具体例として、ＵＮＩＸ系ＯＳにおけるｃｒｏｎコマンドが挙げられる。
【００３４】
初期待機期間αは、これと別に割込み発生から割込みハンドラ起動までの処理時間のジッタを計測し、初回の周期処理の実行時には計測した前記ジッタの最大値を採用しても良い。所定の周期で割込みを発生させるように前記タイマを設定し、割込み発生から割込みハンドラ起動部の起動までの処理時間のジッタを計測し、初回の周期処理の実行時には計測した前記ジッタの最大値の間待機してから周期処理を実行し、次回以降は前回の周期処理開始時点に周期を足した時刻まで待機してから周期処理を実行することができる。
【００３５】
手順の終了条件としては、所定の回数タイマ１０４の割込みを発生させて差分を計算したか、所定の時間経過したか、所定のプログラム変数、レジスタ、メモリの値が所定の値になったか等が挙げられる。
【００３６】
時計１０９における時刻表現がクロック数の場合は、時計１０９の動作時間が時計１０９の計測可能な時間を越えた場合は、出力が初期化されて前回の計測値よりも現在時刻が小さい場合がある。その場合は差分計算を中止し、あるいは初期化を考慮して時計１０９の計測可能な時間を足して差分を計算する方法を使用しても良い。
【００３７】
次に、周期処理の実行手順を図５のフローチャートに示す。はじめに、タスク処理実行部１００が補正部１０１に周期処理部１０８の開始を依頼する（Ｓ０２０）。次に補正部１０１は、周期処理登録部１０２に割込みハンドラの設定を依頼する（Ｓ０２１）。周期処理登録部１０２は、タイマ１０４の割込みによって補正部１０１が起動するように登録する（Ｓ０２２）。そして周期処理登録部１０２は、周期処理部１０８の指定する周期で割込み信号を発生させるようにタイマ１０４を設定し、タイマ１０４の動作を開始させる（Ｓ０２３）。タイマ１０４は、指定周期が経過すると割込みを発生させる（Ｓ０２４）。この割込みによって、割込みハンドラ起動部１０３は、補正部１０１を起動させる（Ｓ０２５）。
【００３８】
起動した補正部１０１の待機部１０６は、初期待機期間α待機する（Ｓ０２６）。その後、次期目標待機時刻設定部１０６が次期目標待機時刻Ｔｎｅｘｔを求める（Ｓ０２７）。それから、補正部１０１は周期処理部１０８を起動し、周期的な処理を実行する（Ｓ０２８）。周期的な処理の終了後、終了条件が成立したかをみて（Ｓ０２９）、成立していれば手順を終了する。成立していない場合は次のタイマ１０４の割込みを待つ。タイマ１０４は、指定周期が経過すると割込みを発生させる（Ｓ０３０）。この割込みによって、割込みハンドラ起動部１０３は、補正部１０１を起動させる（Ｓ０３１）。起動した補正部１０１の待機部１０６は、次期目標待機時刻Ｔｎｅｘｔまで待機する（Ｓ０３２）。その後、次期目標待機時刻設定部１０６が次期目標待機時刻Ｔｎｅｘｔを求める（Ｓ０３３）。それから、補正部１０１は周期処理部１０８を起動し、周期的な処理を実行する（Ｓ０３４）。あとはＳ０２９からの手順を繰り返す。
【００３９】
終了条件としては、所定の回数タイマ１０４の割込みを発生させて差分を計算したか、所定の時間経過したか、所定のプログラム変数、レジスタ、メモリの値が所定の値になったか等が挙げられる。
【００４０】
タスク処理実行部１００が補正部１０１に周期処理部１０８の開始を依頼する実装としては、専用のＡＰＩ（アプリケーションプログラミングインターフェース）を定義することができる。その場合、引数には周期、周期処理部１０８へのポインタが例示される。その他の引数として、関数呼出し後、どれくらいの期間で周期処理部１０８を実行するかという時間、周期処理部１０８の開始条件となる事象、周期処理部１０８の１回あたりの最大処理時間等が用いられる。また、定義されたＡＰＩの戻り値として所定の値を返すことができる。所定の値の内容としては、成功、周期指定が短すぎる、長すぎる、すでに他に周期処理が登録されており実行不能あるいは周期精度が期待できない等のエラーが挙げられる。
【００４１】
上記の事項手順において、補正部１０１が起動した時すでに次期目標待機時刻Ｔｎｅｘｔを過ぎていた場合は、以下の様な所定の処理を実行する。所定の処理の具体例として、ＯＳの画面上に次期目標待機時刻Ｔｎｅｘｔを過ぎたことを知らせるダイアログを表示する、ログに記録する、周期処理を実行しない、次期目標待機時刻Ｔｎｅｘｔを過ぎた現在時刻に周期を足した時刻を次期目標待機時刻として周期処理を継続する、ＬＥＤ等の表示装置を計算機１１７に取り付け、外部へ通知する等が挙げられる。
【００４２】
タイマ１０４の割込み発生後の次期目標待機時刻Ｔｎｅｘｔの求め方を図６に示す。はじめに、タイマ１０４の割込みによって割込みハンドラ起動部１０３が補正部１０１を起動する（Ｓ０４０）。次に、補正部は周期処理が初回かどうかを判断する（Ｓ０４１）。初回であれば、初期待機期間α待機し（Ｓ０４２）、初回でなければ、次期目標待機時刻Ｔｎｅｘｔまで待機する（Ｓ０４３）。待機後、時計１０９から現在時刻を取得し、その現在時刻に周期を足した時刻を次のＴｎｅｘｔとする（Ｓ０４４）。
【００４３】
次に、待機部１０５の二つの待機方法を図７、図８のフローチャートに示す。図７に示す第１の方法では、はじめに待機を開始すると（Ｓ０５０）、次に時計１０９から現在時刻を読み取る（Ｓ０５１）。読み取った現在時刻が目標待機時刻以降かどうかをみる（Ｓ０５２）。目標待機時刻以降でなければ手順Ｓ０５１を繰り返し、目標待機時刻以降であれば待機処理を終了する（Ｓ０５３）。
【００４４】
また、図８に空ループを用いた第２の待機方法を示す。空ループはC言語等ではｆｏｒ文によって実装される。事前に空ループの１回の処理時間を計測し（Ｓ０６０）、目標待機時刻までの期間分の空ループの必要な実行回数を求める（Ｓ０６１）。そして、求めた実行回数分空ループを実行する（Ｓ０６２）。実行回数分空ループを実行すると待機終了となる（Ｓ０６３）。図７、図８のいずれの方法においても、待機していることを確認するため待機中は外部ＩＯを用いて信号を出力することができる。
【００４５】
これらの構成をとることによって、タスク処理実行部１００の周期処理部１０８は、待機部１０５の精度と、タイマ１０４の周期で実行することができる。割込みハンドラ起動部１０３によりタイマ１０４の割込みを用いることで、OSのスケジューラの周期とは独立して周期を指定することができ、且つ、スケジューラのスケジューリング処理を伴わないため、低ジッタ、低遅延で周期処理を実行することができる。したがって、スケジューラを用いて周期処理を実行する場合に比べて他のタスクの実行時間を増加させることができ、システム全体のスループットを向上することができる。
［第２の実施の形態］
図９は、本発明を適用したソフトウェア構成の第２の実施形態を示すブロック図である。図に使用する符号が同一の場合は特に断りのない限り第１の実施の形態で説明した機能や要素と同一である。
【００４６】
図１の割込みハンドラ起動部１０３に替えてスケジューラ１２０が設けられている。スケジューラ１２０は、一定周期で発生するクロックの割り込みによって起動され、ＯＳの実装に依存した評価指標によって実行可能なタスク群から、次に実行するタスクを選択し起動させる。実行可能なタスク群には補正部１０１が含まれる。
【００４７】
図１０は、本発明を適用したソフトウェア構成を実装するシステムを示すブロック図である。本発明による周期処理の実行手順の概要は第１の実施の形態における図３と同様である。
【００４８】
次に、周期処理実行のための準備手順について図１１のフローチャートに示す。補正部１０１は、周期処理登録部１０２に周期処理実行の準備を依頼する（Ｓ０７０）。次に周期処理登録部１０２は、スケジューラ１２０の起動周期の整数倍である、周期処理部１０８の指定する周期で、周期処理部１０８が起動するようにスケジューラ１２０を設定する（Ｓ０７１）。周期処理部１０８の指定周期は、スケジューラ１２０の起動周期のＮ倍とする（Ｓ０７２）。スケジューラ１２０の実行回数の計測値Ｉを０とする（Ｓ０７３）。スケジューラ１２０が実行されると計測値Ｉを１増やす（Ｓ０７４）。次に、計測値ＩがＮと等しいかどうかをみる（Ｓ０７５）。等しくなければ、Ｓ０７４からの手順を繰り返す。
【００４９】
計測値ＩがＮと等しければ、補正部１０１を起動する（Ｓ０７６）。起動した補正部１０１は現在の時刻を時計１０９から取得して保存する（Ｓ０７７）。次に、再び補正部１０１が起動すると現在の時刻を時計１０９から取得して保存する（Ｓ０７８）。その後、前回保存した時刻との差分を求め、これまでに求めた計算値で最大のものを保存する（Ｓ０７９）。終了条件が成立したかをみて（Ｓ０８０）、成立していない場合はＳ０７８からの手順を繰り返し、成立していれば手順を終了する。これらの計測によって求められた差分の最大値から周期を引いた値を初期待機期間αとする（Ｓ０８１）。終了条件としては、所定の回数スケジューラ１２０が起動したかや、所定の時間経過したか、所定のプログラム変数、レジスタ、メモリの値が所定の値になったか等が挙げられる。
【００５０】
次に、周期処理の実行手順を図１２に示す。はじめに、タスク処理実行部１００が補正部１０１に周期処理部１０８の開始を依頼する（Ｓ０９０）。次に補正部１０１は、周期処理登録部１０２にスケジューラ１２０が補正部１０１を起動するように依頼する（Ｓ０９１）。次に周期処理登録部１０２は、スケジューラ１２０の起動周期の整数倍である、周期処理部１０８の指定する周期で、周期処理部１０８が起動するようにスケジューラ１２０を設定する（S０９２）。周期処理部１０８の指定周期は、スケジューラ１２０の起動周期のＮ倍とする（Ｓ０９３）。スケジューラ１２０の実行回数の計測値Ｉを０とする（Ｓ０９４）。スケジューラ１２０が実行されると計測値Ｉを１増やす（Ｓ０９５）。次に、計測値ＩがＮと等しいかどうかをみる（Ｓ０９６）。等しくなければ、Ｓ０９５からの手順を繰り返す。
【００５１】
計測値ＩがＮと等しければ補正部１０１を起動する（Ｓ０９７）。起動した補正部１０１の待機部１０６は、初期待機期間α待機する（Ｓ０９８）。その後、次期目標待機時刻設定部１０６が次期目標待機時刻Ｔｎｅｘｔを求める（Ｓ０９９）。それから、補正部１０１は周期処理部１０８を起動し、周期的な処理を実行する（Ｓ１００）。周期的な処理の終了後、終了条件が成立したかをみて（Ｓ１０１）、成立していれば手順を終了する。
【００５２】
成立していない場合は次の補正部１０１の起動を待つ。スケジューラ１２０による補正部１０１の起動手順はＳ０９３〜Ｓ０９７の手順である。スケジューラ１２０は、補正部１０１を起動させる（Ｓ１０２）。起動した補正部１０１の待機部１０６は、次期目標待機時刻Ｔｎｅｘｔまで待機する（Ｓ１０３）。その後、次期目標待機時刻設定部１０６が次期目標待機時刻Ｔｎｅｘｔを求める（Ｓ１０４）。それから、補正部１０１は周期処理部１０８を起動し、周期的な処理を実行する（Ｓ１０５）。あとはＳ１０１からの手順を繰り返す。終了条件としては、所定の回数スケジューラ１２０が起動したかや、所定の時間経過したか、所定のプログラム変数、レジスタ、メモリの値が所定の値になったか等が挙げられる。次期目標待機時刻Ｔｎｅｘｔの求め方は図６と同様である。
【００５３】
以上の実施例によって、タスク処理実行部１００の周期処理部１０８を、待機部１０５の精度と、スケジューラ１２０の周期で実行することができる。
［第３の実施の形態］
図１３は、本発明を適用したソフトウェア構成の第３の実施の形態を示すブロック図である。実施例に使用する符号が同一の場合は、特に断りのない限り第１の実施の形態、第２の実施の形態で説明した機能や要素等と同一であることを意味する。図１に比較して、新たに同期部１３０、通信部１３１を備えている。
【００５４】
同期部１３０は、図１３のソフトウェア構成を有する複数の計算機の同期部１３０とのタイミングの同期をとる。具体例としてはＮＴＰ（Ｎｅｔｗｏｒｋ  Ｔｉｍｅ  Ｐｒｏｔｏｃｏｌ）、ＳＮＴＰ（Ｓｉｍｐｌｅ  Ｎｅｔｗｏｒｋ  Ｔｉｍｅ  Ｐｒｏｔｏｃｏｌ）、ＧＰＳ、ＩＥＥＥ１５８８方式による同期等が挙げられる。通信部１３１は、図１３のソフトウェア構成を有する複数の計算機と接続し、情報を送受信する。通信部１３１の具体例としては、Ｅｔｈｅｒｎｅｔ、ＴＣＰ／ＩＰ、無線通信等が挙げられる。
【００５５】
図１４は、本発明を適用したソフトウェア構成を実装するシステムを示すブロック図である。ＬＡＮ１４０は、ネットワークとの通信機能を実装した送受信機ＩＣである。ＬＡＮ１４０の提供する通信規格としてＥｔｈｅｒｎｅｔ等が例示される。ネットワーク１４１は、計算機１１７と図１３のソフトウェア構成を有する計算機を含む他の計算機と接続し、所定の情報通信を行う。
【００５６】
初期待機期間を求める手順は図４と同様であるが、初期待機期間を求める前に、図１４に示すシステムにネットワーク１４１で接続された図１３のソフトウェア構成を有する複数の計算機の各補正部１０１に、補正部１０１は通信部１３１を用いて、同様に図４の手順を実行するように通知する。各計算機において、各初期待機間が求められたら、通信部１３１を通じて、それぞれの初期待機期間を交換し、交換された初期待機期間の中の最大値を最終的な初期待機期間として決定する。それから、各計算機の周期処理部１０８を実行させるタイミングを、同期部１３０によって同期させ、各計算機で図５の手順を実行する。
【００５７】
以上の実施例によって、複数の計算機において、同期部１３０によって同期されたタイミングで、各計算機はタスク処理実行部１００の周期処理部１０８を、それぞれの計算機における待機部１０５の精度と、タイマ１０４の周期で実行することができる。
【図面の簡単な説明】
【００５８】
【図１】本発明の第１の実施形態のソフトウェア構成を示すブロック図である。
【図２】本発明の第１の実施形態のハードウェア構成のブロック図である。
【図３】本発明の第１の実施形態による周期処理手順の概要を示すフローチャートである。
【図４】本発明の第１の実施形態による周期処理実行の準備手順を示すフローチャートである。
【図５】本発明の第１の実施形態による周期処理の実行手順を示すフローチャートである。
【図６】本発明の第１の実施形態による次期目標待機時刻の求め方を示すフローチャートである。
【図７】本発明の第１の実施形態による第１の待機方法を示すフローチャートである。
【図８】本発明の第１の実施形態による第２の待機方法を示すフローチャートである。
【図９】本発明の第２の実施形態のソフトウェア構成を示すブロック図である。
【図１０】本発明の第２の実施形態のハードウェア構成を示すブロック図である。
【図１１】本発明の第２の実施形態による周期処理実行の準備手順を示すフローチャートである。
【図１２】本発明の第２の実施形態による周期処理の実行手順を示すフローチャートである。
【図１３】本発明の第３の実施形態のソフトウェア構成を示すブロック図である。
【図１４】本発明の第３の実施形態のハードウェア構成のブロック図である。
【符号の説明】
【００５９】
1００ … タスク処理実行部、1０１ … 補正部、１０２ … 周期処理登録部、１０３ … 割込みハンドラ起動部、１０４、１１６ … タイマ、１０５ … 待機部、１０６ … 次期目標待機時刻設定部、１０７ … 待機期間設定部、１０８ … 周期処理部、１０９ … 時計、１１０ … ＣＰＵ、１１１ … ＲＡＭ、１１２ … 不揮発性記憶媒体、１１３… 割込みコントローラ、１１４… クロック発振器、１１５ … バス、１１７ … 計算機、１２０ … スケジューラ、１３０ … 同期部、１３１ … 通信部、１４０ … ＬＡＮ、１４１ … ネットワーク
【図１】
2010003030.tif 000003
【図２】
2010003030.tif 000004
【図３】
2010003030.tif 000005
【図４】
2010003030.tif 000006
【図５】
2010003030.tif 000007
【図６】
2010003030.tif 000008
【図７】
2010003030.tif 000009
【図８】
2010003030.tif 000010
【図９】
2010003030.tif 000011
【図１０】
2010003030.tif 000012
【図１１】
2010003030.tif 000013
【図１２】
2010003030.tif 000014
【図１３】
2010003030.tif 000015
【図１４】
2010003030.tif 000016