(57)【要約】【課題】ＣＰＵに同期して動作するクロックカウンタに基づいて、精度良く所望の周期で動作するカウンタを提供する。【解決手段】カウンタ装置は、ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する第１カウンタによる第１カウント値を算出し、時刻情報を、特定の周期で動作する第２カウンタによる第２カウント値に変換し、記第１カウント値と第２カウント値の差分の経時的変動が所定の範囲内となるように換算係数を調整する。【選択図】図１
2020150356.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する第１カウンタによる第１カウント値を算出する第１カウンタ生成部と、
時刻情報を、前記特定の周期で動作する第２カウンタによる第２カウント値に変換する第２カウンタ変換部と、
前記第１カウント値と前記第２カウント値の差分の経時的変動が所定の範囲内となるように、前記換算係数を調整する換算係数算出部と、
を備えるカウンタ装置。
【請求項２】
前記換算係数算出部は、システム起動時における前記差分である初期差分値を基準として、その後の前記差分が、前記初期差分値より所定の閾値以上乖離すると前記換算係数を更新する、
請求項１に記載のカウンタ装置。
【請求項３】
前記差分が前記初期差分値より所定の閾値以上乖離した場合であって、前記差分が、前記初期差分値より小さい場合、
前記換算係数算出部は、前記換算係数の値をより大きな値に更新する、
請求項２に記載のカウンタ装置。
【請求項４】
前記差分が前記初期差分値より所定の閾値以上乖離した場合であって、前記差分が、前記初期差分値より大きい場合、
前記換算係数算出部は、前記換算係数の値をより小さな値に更新する、
請求項２から請求項３の何れか１項に記載のカウンタ装置。
【請求項５】
前記時刻情報を外部の装置から取得する場合に、前記時刻情報の取得における障害を検出する障害検出部と、
前記障害検出部が障害を検出した場合に、前記ＣＰＵクロックカウンタのカウント値に乗じる第２の換算係数を、前記障害が検出されない間の複数の時刻に計測した前記ＣＰＵクロックカウンタのカウント値および前記第２カウント値に基づいて算出する事前換算係数算出部と、
をさらに備える請求項１から請求項４の何れか１項に記載のカウンタ装置。
【請求項６】
請求項１から請求項５の何れか１項に記載のカウンタ装置と、
前記第１カウント値をカレンダ時刻に変換するカレンダ時刻変換部と、
を備えるシステム時刻算出装置。
【請求項７】
請求項１から請求項５の何れか１項に記載のカウンタ装置と、
ＮＴＰサーバから時刻情報を取得するＮＴＰ時刻取得部と、
を備える情報処理装置。
【請求項８】
ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタに基づいて動作する第１カウンタの制御方法であって、
前記ＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する前記第１カウンタによる第１カウント値を算出するステップと、
時刻情報を、前記特定の周期で動作する第２カウンタによる第２カウント値に変換するステップと、
前記第１カウント値と前記第２カウント値の差分の経時的変動が所定の範囲内となるように、前記換算係数を調整するステップと、
を有する制御方法。
【請求項９】
請求項８に記載の制御方法で前記第１カウンタを制御し、
前記第１カウント値に基づいてカレンダ時刻を算出する、
時刻の算出方法。
【請求項１０】
コンピュータを、
ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する第１カウンタによる第１カウント値を算出する手段、
時刻情報を、前記特定の周期で動作する第２カウンタによる第２カウント値に変換する手段、
前記第１カウント値と前記第２カウント値の差分の経時的変動が所定の範囲内となるように、前記換算係数を調整する手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カウンタ装置、システム時刻算出装置、情報処理装置、制御方法、時刻の算出方法及びプログラムに関する。
【背景技術】
【０００２】
情報処理装置は、ＣＰＵクロックによって動作するカウンタを基にシステムタイマを生成している。この情報処理装置で動作するオペレーティングシステムやタスク間で共有するシステム時刻は、１つのシステムタイマによって時刻情報が管理されている。システムタイマは、ＮＴＰサーバから取得した時刻によって更新される。システムタイマが更新されると、タイマ割り込みや時刻参照のタイミングによって、タスクの実行順序が逆転したり、処理が急に進んだりするなど、システムの時間事象に狂いが生じることがある。
【０００３】
このような事象を回避するため情報処理装置の中には、精度の高いオシレータを搭載し、システム起動時のみＮＴＰサーバから時刻情報を取得して、システム起動後はオシレータを利用することでシステム時刻を管理するものが存在する。この方法の場合、ＮＴＰサーバから継続的に時刻情報を取得してシステムタイマを更新することをしない為、システム上の時間事象の逆転などは生じないが、システム起動後の経過時間が長くなるとＮＴＰサーバの時刻とシステム時刻との差が少しずつ開いてしまう。
【０００４】
関連する技術として、特許文献１には、自機が備える水晶振動子に基づいてシステム時刻の管理を行うプリンタが開示されている。このプリンタは、水晶振動子が所定回数振動する度に１回の基準クロック信号を出力し、この基準クロック信号が所定回数出力されると時刻を１秒進めるようにしてシステム時刻を管理する。このプリンタは、ＮＴＰサーバから時刻を取得すると、取得した時刻と自機の時刻とを比較して両者の差分を計算し、差分に相当する補正量を計算する。そして、水晶振動子が（所定回数＋補正量）だけ振動すると１回の基準クロック信号を出力するように動作を変更し、これによってシステム時刻の調整を行う。
【０００５】
また、特許文献２には、ＮＴＰサーバ装置とＮＴＰクライアント端末装置との間の通信が最小時間で行われた場合のみ、ＮＴＰサーバ装置から取得した時刻情報でＮＴＰクライアント端末装置の時刻を更新することにより、サーバ・クライアント間の通信時間の変動に関わらず、ＮＴＰサーバ装置とＮＴＰクライアント端末装置との間で、安定した時刻同期を実現する方法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２０７５８６号公報
【特許文献２】特開２０１８−０９８７１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
精度の高いオシレータが無くても、一定の精度を保ちつつ特定の周期でカウントする、ＣＰＵクロックに基づいて動作するカウンタが求められている。
【０００８】
そこでこの発明は、上述の課題を解決するカウンタ装置、システム時刻算出装置、情報処理装置、制御方法、時刻の算出方法及びプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、カウンタ装置は、ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する第１カウンタによる第１カウント値を算出する第１カウンタ生成部と、時刻情報を、前記特定の周期で動作する第２カウンタによる第２カウント値に変換する第２カウンタ変換部と、前記第１カウント値と前記第２カウント値の差分の経時的変動が所定の範囲内となるように、前記換算係数を調整する換算係数算出部と、を備える。
【００１０】
また、本発明の他の一態様によれば、システム時刻算出装置は、上記のカウンタ装置と、前記第１カウント値をカレンダ時刻に変換するカレンダ時刻変換部と、を備える。
【００１１】
また、本発明の他の一態様によれば、情報処理装置は、上記のカウンタ装置と、ＮＴＰサーバから時刻情報を取得するＮＴＰ時刻取得部と、を備える。
【００１２】
また、本発明の他の一態様によれば、ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタに基づいて動作する第１カウンタの制御方法であって、前記ＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する前記第１カウンタによる第１カウント値を算出するステップと、時刻情報を、前記特定の周期で動作する第２カウンタによる第２カウント値に変換するステップと、前記第１カウント値と前記第２カウント値の差分の経時的変動が所定の範囲内となるように、前記換算係数を調整するステップと、を有する制御方法である。
【００１３】
また、本発明の他の一態様によれば、上記の制御方法で前記第１カウンタを制御し、前記第１カウント値に基づいてカレンダ時刻を算出する、カレンダ時刻の算出方法である。
【００１４】
また、本発明の他の一態様によれば、プログラムは、コンピュータを、ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する第１カウンタによる第１カウント値を算出する手段、時刻情報を、前記特定の周期で動作する第２カウンタによる第２カウント値に変換する手段、前記第１カウント値と前記第２カウント値の差分の経時的変動が所定の範囲内となるように、前記換算係数を調整する手段、として機能させる。
【発明の効果】
【００１５】
本発明によれば、精度よく所定の目標周期でカウントし続けるカウンタを得ることができる。また、このカウンタを用いることにより情報処理装置のシステム時刻の精度を保つことができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第一実施形態に係る情報処理装置の一例を示す図である。
【図２】本発明の第一実施形態による１μ秒カウンタの制御を説明する第１の図である。
【図３】本発明の第一実施形態による１μ秒カウンタの制御を説明する第２の図である。
【図４】本発明の第一実施形態による１μ秒カウンタの制御の一例を示すフローチャートである。
【図５】本発明の第二実施形態に係る情報処理装置の一例を示す図である。
【図６】本発明の第二実施形態による１μ秒カウンタの制御の一例を示すフローチャートである。
【図７】本発明の一実施形態におけるカウンタ装置の最小構成を示す図である。
【図８】本発明の一実施形態における情報処理装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の第一実施形態に係る１μ秒カウンタの制御方法について図面を参照して説明する。図１は、本発明の第一実施形態に係る情報処理装置の一例を示す図である。
図示するように情報処理装置３０１は、ＣＰＵクロックカウンタ１０と、１μ秒カウンタ生成部２００と、カレンダ時刻変換部２０１と、ＮＴＰ時刻取得部２０２と、ＮＴＰ時刻取得部２０２と、１μ秒カウンタ変換部２０３と、カウント値比較部２０４と、換算係数算出部２０５と、設定時刻取得部２０６と、を備える。
【００１８】
ＣＰＵクロックカウンタ１０は、図示しないＣＰＵに同期して動作し、ＣＰＵのクロック周期でカウント値を出力する。ＣＰＵクロックカウンタ１０は、一般的にＣＰＵの機能としてＣＰＵチップ内部に設けられている。
【００１９】
１μ秒カウンタ生成部２００は、ＣＰＵクロックカウンタ１０が出力するカウント値に予め設定された換算係数１５を乗じて、1μ秒周期でカウント値１１を生成する。本実施形態では、１μ秒カウンタ生成部２００が動作することによって１μ秒カウンタを実現し、この１μ秒カウンタを時刻計算の基となるシステムクロックとして利用する。１μ秒カウンタは１秒間で１００００００回カウントするので、１００００００をＣＰＵクロックカウンタ１０による１秒間あたりのカウント値で割った値が換算係数１５となる。つまり、１μ秒カウンタ生成部２００は、ＣＰＵクロックカウンタ１０が出力するカウント値が、換算係数１５の値だけ増加する毎に、１カウントアップしたカウント値１１を生成する。例えば、カウント値１１はシステム起動時から現時点までの経過時間をμ秒単位で表した値である。
【００２０】
カレンダ時刻変換部２０１は、１μ秒カウンタ生成部２００が算出した1μ秒単位のカウント値をカレンダ時刻に変換する。
ＮＴＰ時刻取得部２０２は、ＮＴＰサーバ３００から時刻情報（カレンダ時刻１６）を取得する。
【００２１】
１μ秒カウンタ変換部２０３は、ＮＴＰ時刻取得部２０２が取得したカレンダ時刻１６を、1μ秒周期で動作するカウンタによるカウント値に変換する。１μ秒カウンタ変換部２０３が変換する1μ秒単位のカウント値は、１μ秒カウンタ生成部２００が実現する1μ秒カウンタの精度を保つために参照する目的で利用する。ＮＴＰサーバ３００から取得したカレンダ時刻１６のままでは、1μ秒カウンタ生成部２００が生成するカウント値１１と比較することができない。そこで、１μ秒カウンタ変換部２０３は、ＮＴＰ時刻取得部２０２が取得した時刻情報を1μ秒ごとにカウントアップされるカウント値１２に変換する。例えば、カウント値１２は特定の日時から現時点までの経過時間をμ秒単位で表した値を示しており、カウント値１２とカレンダ時刻の間の相互変換が可能である。また、カウント値１２とカウント値１１は、共にある時刻を基準として、その時刻からの経過時間を示す値であるから比較可能である。
【００２２】
カウント値比較部２０４は、１μ秒カウンタ生成部２００で生成されたカウント値１１と１μ秒カウンタ変換部２０３で変換されたカウント値１２の差を求める。１μ秒カウンタ生成部２００が生成するカウント値１１と１μ秒カウンタ変換部２０３が変換するカウント値１２が、ともに正確に１μ秒ごとに１ずつカウントアップされるならば、カウント値１１とカウント値１２の差は一定である。しかし、ＣＰＵクロックカウンタ１０のクロック周期は変動するため、実際には、ＣＰＵクロックカウンタ１０の動作に基づいて算出されるカウント値１１と、カウント値１２の差は変動する。徐々にカウント値１１がカウント値１２より大きくなる傾向が検出されれば、１μ秒カウンタ生成部２００による１μ秒カウンタは、実際の１μ秒よりも短い間隔でカウントしていることになる。この場合、カレンダ時刻変換部２０１が算出する時刻情報は、実際の時刻に比べ進みがちになる。反対にシステム起動時に比べて、徐々にカウント値１１がカウント値１２より小さくなる傾向が検出されれば、１μ秒カウンタは、実際の１μ秒よりも長い間隔でカウントしていることになり、カレンダ時刻変換部２０１が算出する時刻情報は、実際の時刻に比べ遅れがちになる。次に説明する換算係数算出部２０５は、カウント値１１の遅延や先行を補正するように換算係数１５を調整する。
【００２３】
換算係数算出部２０５は、システム起動時にカウント値比較部２０４から得られる差分値１３と、システム起動時から一定時間経過後にカウント値比較部２０４から得られる差分値１４とを比較し、その差が許容範囲（補正指示判断時間１７）を上回っていれば、その差が小さくなるように換算係数１５の値を更新する。
【００２４】
設定時刻取得部２０６は、ユーザから情報処理装置３０１のシステム時刻の設定を受け付ける。システム時刻は、ＮＴＰサーバ３００が提供する実際の現在時刻であってもよいし、過去や未来の任意の時刻であってもよい。情報処理装置３０１のシステム時刻には、設定時刻取得部２０６が受け付けた日時が設定され、設定後のシステム時刻は、１μ秒カウンタ生成部２００が生成したカウント値１１とカレンダ時刻変換部２０１によって、精度よく管理される。
【００２５】
一般にサーバ装置などに使用されるＣＰＵクロックカウンタ１０のクロック周期の精度は、十分ではないことが多く、例えば、情報処理装置３０１自身の発熱や周囲の環境の影響などによっても変動することがある。上記の通り、ＣＰＵクロックカウンタ１０の動作精度は、そのまま１μ秒カウンタ生成部２００が生成するカウント値１１の精度となり、カレンダ時刻変換部２０１で変換されるシステム時刻の精度となる。そのため、ＣＰＵクロックカウンタ１０のクロック周期が変動すると、情報処理装置３０１のシステム時刻にも狂いが生じ、タスクの実行などにも影響が及ぶ可能性がある。これに対し、本実施形態では、精度の高いオシレータなどを用いずに、情報処理装置３０１の稼働中にＮＴＰサーバ３００から定期的に時刻情報を取得し、時刻情報に基づいて、換算係数１５の値を調整する。そして、ＣＰＵクロックカウンタ１０のクロック周期に換算係数１５を乗じた時間がある程度以上の精度で１μ秒を保つように制御する。
次に換算係数１５の調整方法について図２および図３を参照して説明する。
【００２６】
図２は、本発明の第一実施形態によるカウンタの制御を説明する第１の図である。
図３は、本発明の第一実施形態によるカウンタの制御を説明する第２の図である。
システム起動直後を最初の測定ポイントの時刻Ｔ０とする。まず、カウント値比較部２０４が、１μ秒カウンタ変換部２０３が時刻Ｔ０に変換したカウント値１２（Ｔｂ０）と、１μ秒カウンタ生成部２００が時刻Ｔ０に生成したカウント値１１（Ｔａ０）との差分値１３（Ｔｃ０）を、Ｔａ０−Ｔｂ０によって算出する。この差分値１３（Ｔｃ０）を時間補正の基準値とする。
【００２７】
その後、時刻Ｔｃ０から一定時間が経過し、次の測定ポイント（時刻Ｔｘ）を迎えると、カウント値比較部２０４は、時刻Ｔｘにおけるカウント値１１（Ｔａｘ）およびカウント値１２（Ｔｂｘ）の差分値１４（差分値Ｔｃｘ）を、Ｔａｘ−Ｔｂｘによって算出する。そして、換算係数算出部２０５が、差分値１３（Ｔｃ０）と差分値１４（Ｔｃｘ）の比較を行う。差分値１３（Ｔｃ０）と差分値１４（Ｔｃｘ）の差が補正指示判断時間１７の示す値（Ｔｓ）の範囲内であれば（図３の３行目の設定）、１μ秒カウンタ生成部２００のカウント周期は、ほぼ１μ秒を維持しているとみなし、換算係数算出部２０５は、換算係数１５の補正は行わない。
【００２８】
差分値１３（Ｔｃ０）よりも差分値１４（Ｔｃｘ）が小さく、かつその差が、補正指示判断時間１７が示す時間差（Ｔｓ）よりも大きい場合（図３の１行目の設定）、１μ秒カウンタ生成部２００が生成するカウント値１１が遅れていると判断し、換算係数算出部２０５は、１μ秒カウンタ生成部２００が生成するカウント値１１が進むように換算係数１５を新たに求める。つまり、換算係数算出部２０５は、換算係数１５をシステム起動時に設定した値よりも大きな値に更新する。
【００２９】
また、差分値１３（Ｔｃ０）よりも差分値１４（Ｔｃｘ）が大きく、かつその差が、補正指示判断時間１７が示す時間差（Ｔｓ）よりも大きい場合（図３の２行目の設定）、カウント値１１が進んでいると判断し、換算係数算出部２０５は、１μ秒カウンタ生成部２００が生成するカウント値１１が遅れるように換算係数１５を新たに求める。つまり、換算係数算出部２０５は、換算係数１５を、システム起動時に設定した値よりも小さな値に更新する。
【００３０】
このようにして１μ秒カウンタ生成部２００が算出するカウント値１１の精度を保つことができる。また、カレンダ時刻変換部２０１がカウント値１１を変換して算出するシステム時刻は、上記の換算係数１５の補正により、ＮＴＰサーバ３００から取得したカレンダ時刻１６との差が一定時間内に収まるように補正される。つまり、換算係数１５の更新および更新後の換算係数１５による時刻補正を定期的に行うことにより、システム時刻の精度を保つことが可能となる。
【００３１】
次に第一実施形態における１μ秒カウンタの制御方法について説明する。
図４は、本発明の第一実施形態による１μ秒カウンタ（カウント値１１）の制御の一例を示すフローチャートである。
前提として、ＣＰＵクロックカウンタ１０の設計値などに基づいて、ＣＰＵクロックカウンタ１０のクロック周期を１μ秒に変換する換算係数１５の初期値Ｋ０が予め算出され、１μ秒カウンタ生成部２００は、このＫ０をＣＰＵクロックカウンタ１０のカウント値に乗じてカレンダ時刻変換部２０１へ出力するよう構成されているとする。
【００３２】
まず、ユーザが情報処理装置３０１を起動する。カウント値比較部２０４は、システム起動時に基準となる差分値（Ｔｃ０）を算出する（ステップＳ１１）。具体的には、ＮＴＰ時刻取得部２０２は、ＮＴＰサーバ３００からカレンダ時刻１６を取得する。１μ秒カウンタ変換部２０３は、カレンダ時刻１６を1μ秒単位のカウント値１２に変換する。例えば、カウント値１２は、特定の日時から取得したカレンダ時刻１６が示す時点までの経過時間を１μ秒単位でカウントしたときのカウント値を示している。１μ秒カウンタ変換部２０３は、カウント値１２をカウント値比較部２０４へ出力する。
【００３３】
一方、１μ秒カウンタ生成部２００は、ＣＰＵクロックカウンタ１０からカウント値を取得し、換算係数１５の初期値Ｋ０を乗じてカウント値１１を生成する。１μ秒カウンタ生成部２００は、カウント値１１をカウント値比較部２０４へ出力する。
カウント値比較部２０４は、カウント値１１の初期値（Ｔａ０）から、カウント値１２の初期値（Ｔｂ０）を減じて両者の差分値（Ｔｃ０）を算出する。カウント値比較部２０４は、基準となる差分値（Ｔｃ０）を記憶する。
【００３４】
これらの処理と並行して、１μ秒カウンタ生成部２００は、カウント値１１をカレンダ時刻変換部２０１へ出力する。また、ユーザは、情報処理装置３０１のシステム時刻として設定する時刻を情報処理装置３０１へ入力する。ユーザが入力する設定時刻は、任意の日時でもよいし、ＮＴＰサーバ３００から取得した現在の時刻に情報処理装置３０１のシステム時刻を合わせることを指示する情報でもよい。設定時刻取得部２０６は、ユーザが入力した設定時刻を取得し、カレンダ時刻変換部２０１へ出力する。カレンダ時刻変換部２０１は、最新のカウント値１１をユーザが指定した設定時刻に変換してシステム時刻を設定する。
【００３５】
また、ＮＴＰ時刻取得部２０２は、所定の時間間隔でＮＴＰサーバ３００からカレンダ時刻１６を取得し、そのたびに１μ秒カウンタ変換部２０３はカウント値１２を算出する。また、１μ秒カウンタ生成部２００は、ＣＰＵクロックカウンタ１０の動作に基づいて１μ秒ごとにカウント値１１を算出し、カレンダ時刻変換部２０１は、そのカウント値１１に基づいてシステム時刻に変換する処理を継続して行う。また、カウント値比較部２０４は、１μ秒カウンタ生成部２００と１μ秒カウンタ変換部２０３から、それぞれカウント値１１とカウント値１２を取得しつつ、測定ポイントの到来を待機する（ステップＳ１２）。
【００３６】
測定ポイントが到来すると（ステップＳ１２；Ｙｅｓ）、カウント値比較部２０４は、最新のカウント値１１（Ｔａｘ）から、カウント値１２（Ｔｂｘ）を減じて、両者の差分値（Ｔｃｘ）を算出する。そして、カウント値比較部２０４は、最新の差分値（Ｔｃｘ）と基準となる差分値（Ｔｃ０）とを換算係数算出部２０５へ出力する。
【００３７】
換算係数算出部２０５は、最新の差分値（Ｔｃｘ）と基準となる差分値（Ｔｃ０）を比較し、両者の大小関係と差の絶対値を算出する。換算係数算出部２０５は、算出した大小関係と差の絶対値に基づいて換算係数１５の値を調整する。Ｔｃ０とＴｃｘの差が所定の範囲内（差が補正指示判断時間１７以下）の場合（ステップＳ１３；Ｙｅｓ）、換算係数算出部２０５は、換算係数１５を更新しない（ステップＳ１４）。１μ秒カウンタ生成部２００は、ＣＰＵクロックカウンタ１０が出力するカウント値に、これまでと同じ換算係数１５を乗じて生成したカウント値１１をカレンダ時刻変換部２０１へ出力する。
【００３８】
Ｔｃ０とＴｃｘの差が補正指示判断時間１７以上の場合（ステップＳ１３；Ｎｏ）、換算係数算出部２０５は、換算係数１５を更新する（ステップＳ１５）。より具体的には、図３を参照して説明したようにＴｃｘ＞Ｔｃ０ならば、換算係数１５を小さくし、Ｔｃｘ＜Ｔｃ０ならば、換算係数１５を大きくする。例えば、システム起動時に設定した換算係数１５の値をＫ０とした場合、１時間でｔ秒遅らせるようにするための換算係数ＫｎはＫｎ＝（１−ｔ／３６００）×Ｋ０で算出する。１時間でｔ秒進むようにするための換算係数１５の値ＫｎはＫｎ＝（１＋ｔ／３６００）×Ｋ０で算出する。
換算係数算出部２０５は、更新後の換算係数１５を、１μ秒カウンタ生成部２００へ出力する。１μ秒カウンタ生成部２００は、ＣＰＵクロックカウンタ１０が出力するカウント値に、更新後の新たな換算係数１５を乗じて生成したカウント値１１をカレンダ時刻変換部２０１へ出力する。
【００３９】
次にカレンダ時刻変換部２０１は、カウント値１１をシステム時刻に変換する（ステップＳ１６）。次に情報処理装置３０１のシステムを停止するかどうかを判定する（ステップＳ１７）。停止しない場合（ステップＳ１７；Ｎｏ）、ステップＳ１２以降の処理を繰り返す。これにより、システムの起動中、カウント値１１が遅延しすぎたり、先行しすぎたりすると換算係数１５の値が調整され、カウント値１１は、一定の精度で１μ秒ごとに出力される。また、情報処理装置３０１のシステム時刻も一定の精度に保たれる。
【００４０】
システム停止する場合（ステップＳ１７；Ｙｅｓ）、一連の処理を停止する。そして、再度、システムが起動されると、ステップＳ１１からの処理が実行される。
【００４１】
本実施形態によれば、高精度のオシレータなど専用のハードウェアを必要とせず、高精度なＣＰＵクロックに基づくカウンタを生成することができる。また、例えば、ＮＴＰサーバ３００が提供する時刻とのずれが検出された場合に、急激にＮＴＰサーバ３００の時刻に同期させるのではなく、換算係数１５を調整することにより、少しずつＮＴＰサーバ３００の時刻に近づけていくことができるため、タスク間の実行順の逆転などが生じない。従って、システム運用中にシステムの動作に影響を与えることなく、ＮＴＰサーバ３００の時刻に同期させることができる。
【００４２】
なお、カレンダ時刻１６は、ＮＴＰサーバ３００とＮＴＰ時刻取得部２０２の間でインターネットを利用して取得するため、通信による遅れなどのタイムラグが考えられるが、本実施形態では、ＮＴＰサーバ３００との時間差が広がらないように常時1秒程度の補正ができればよく、ＮＴＰサーバ３００との時間差が、例えば、数百ミリ秒程存在してもよい。
【００４３】
＜第二実施形態＞
以下、本発明の第二実施形態による１μ秒カウンタの制御方法について図５〜図６を参照して説明する。
第一実施形態では、ＮＴＰサーバ３００との通信が可能であることを前提とした。しかし、通信障害などにより、ＮＴＰサーバ３００から最新の時刻情報（カレンダ時刻１６）が取得できない状況も生じ得る。この場合、１μ秒カウンタ変換部２０３は、ＮＴＰサーバ３００から取得した時刻情報に基づいてカウント値１２を生成することができず、第一実施形態の方法でカウント値１１を補正することができない。すると、１μ秒カウンタ生成部２００が参照する換算係数１５の値は、通信回線が正常になるまで固定される。このとき、カウント値１１の値は完全にＣＰＵクロックカウンタ１０のクロック数に比例した値となるが、ＣＰＵクロックカウンタ１０のクロック周期には揺らぎがあり、そのクロック周期も装置によって個体差があるため、それを利用して生成されるカウント値１１の精度は低くなる可能性がある。これを回避するため、第二実施形態に係る情報処理装置３０１ａは、通信回線が正常な時にあらかじめ長時間ＣＰＵクロックカウンタ１０のカウント値およびカウント値１２の測定を行い、ＣＰＵクロックカウンタ１０のクロック周期を平均化した値に基づいて換算係数１５ａを算出しておく。そして、ＮＴＰサーバ３００から時刻情報が取得できない間は、ＣＰＵクロックカウンタ１０の揺らぎを考慮して設定された換算係数１５ａを用いるようにし、１μ秒カウンタの精度を一定以上に保つ。
【００４４】
図５は、本発明の第二実施形態に係る情報処理装置の一例を示す図である。
情報処理装置３０１ａは、第一実施形態の構成に加え、事前換算係数算出部４００と、時刻同期異常検出部４０１と、換算係数切り替え部４０２と、換算係数保持部４０３と、を備える。第二実施形態に係る構成のうち、第一実施形態と同じ構成には同じ符号を付し、それらの説明を省略する。
【００４５】
事前換算係数算出部４００は、システム起動時から所定時間が経過するまでにＣＰＵクロックカウンタ１０が出力するカウント値と、システム起動時から所定時間が経過するまでに１μ秒カウンタ変換部２０３が出力するカウント値１２に基づいて、ＮＴＰサーバ３００から時刻情報を取得できない状況で用いる換算係数１５ａを算出する。
【００４６】
時刻同期異常検出部４０１は、ＮＴＰ時刻取得部２０２によるＮＴＰサーバ３００からの時刻情報の取得が回線などの異常によって正常にできなくなったことを検出する。
換算係数切り替え部４０２は、時刻同期異常検出部４０１が異常を検出した場合、通常動作時に使用している換算係数１５から換算係数１５ａに切り替え、通信が正常に戻った場合は元の換算係数１５に戻す切り替え制御を行う。
換算係数保持部４０３は、事前換算係数算出部４００が算出した換算係数１５ａの値を保持する。
【００４７】
次に事前換算係数算出部４００による換算係数１５ａの算出方法について説明する。
システム起動時の時刻をＴ０とする。事前換算係数算出部４００は、時刻Ｔ０にＣＰＵクロックカウンタ１０が出力するカウント値Ｔｄ０と、時刻Ｔ０に１μ秒カウンタ変換部２０３が出力するカウント値１２の値Ｔｎ０を記憶する。さらに事前換算係数算出部４００は、ＣＰＵクロックカウンタ１０のクロックのゆらぎが平均化できるよう長時間（Ｔ１時間）待つ。Ｔ１時間が経過すると、事前換算係数算出部４００は、Ｔ１時間後にＣＰＵクロックカウンタ１０が出力するカウント値Ｔｄ１と、Ｔ１時間後に１μ秒カウンタ変換部２０３が出力するカウント値１２の値Ｔｎ１を記憶する。そして、事前換算係数算出部４００は、ＣＰＵクロックカウンタ１０のクロックのゆらぎを平均化した換算係数１５ａの値Ｋａを、下記の式（１）によって算出する。
Ｋａ＝（Ｔｎ１−Ｔｎ０）／（Ｔｄ１−Ｔｄ０）・・・（１）
事前換算係数算出部４００は、算出した値Ｋａを換算係数保持部４０３へ出力する。換算係数保持部４０３は、値Ｋａを記憶する。
【００４８】
次に第二実施形態における１μ秒カウンタ（カウント値１１）の制御方法について説明する。
図６は、本発明の第二実施形態による１μ秒カウンタの制御の一例を示すフローチャートである。
システム起動後、Ｔ１時間が経過するまでの間、ＮＴＰサーバ３００との通信が可能であるとして説明を行う。
まず、ユーザの操作により情報処理装置３０１ａのシステムが起動する（ステップＳ２１）。事前換算係数算出部４００は、システム起動直後（時刻Ｔ０）におけるＣＰＵクロックカウンタ１０のカウント値Ｔｄ０と、１μ秒カウンタ変換部２０３のカウント値１２の値Ｔｎ０を記憶する。
次に時刻同期異常検出部４０１は、ＮＴＰサーバ３００との通信が正常かどうかを判定する（ステップＳ２２）。通信が正常な場合（ステップＳ２２；Ｙｅｓ）、換算係数切り替え部４０２は、１μ秒カウンタ生成部２００が使用する換算係数に、換算係数１５を設定する（ステップＳ２３）。すると、図４を参照して説明した処理によって、換算係数算出部２０５が、換算係数１５を更新等し、１μ秒カウンタ生成部２００が生成するカウント値１１の精度を維持する（ステップＳ２４）。
【００４９】
また、事前換算係数算出部４００は、システム起動後、時間Ｔ１が経過し、且つ、換算係数１５ａが未算出かどうかを判定する（ステップＳ２５）。これらの条件を満たす場合（ステップＳ２５；Ｙｅｓ）、事前換算係数算出部４００は、時間Ｔ１経過後におけるＣＰＵクロックカウンタ１０のカウント値Ｔｄ１と、１μ秒カウンタ変換部２０３のカウント値１２の値Ｔｎ１と、先に記憶した値Ｔｄ０、Ｔｎ１とを用いて、換算係数１５ａの値Ｋａを、上記の式（１）により算出する（ステップＳ２６）。換算係数保持部４０３は、事前換算係数算出部４００が算出した値Ｋａを保持する。時間Ｔ１が経過していない場合や換算係数１５ａが算出済みの場合（ステップＳ２５；Ｎｏ）、換算係数１５ａの算出は行わず、ステップＳ２８の処理に進む。
【００５０】
次にカレンダ時刻変換部２０１は、カウント値１１をカレンダ時刻に変換する（ステップＳ２８）。情報処理装置３０１のシステムを停止する場合（ステップＳ２８；Ｙｅｓ）、本フローチャートの処理を終了する。システムを停止しない場合（ステップＳ２８；Ｎｏ）、ステップＳ２２以降の処理を繰り返す。例えば、ステップＳ２２で時刻同期異常検出部４０１が、通信異常を検出すると、換算係数切り替え部４０２は、１μ秒カウンタ生成部２００が使用する換算係数を、換算係数１５から換算係数保持部４０３が保持する換算係数１５ａに切り替える（ステップＳ２７）。換算係数１５ａは、クロック周期の揺らぎを平均化したＣＰＵクロックカウンタ１０のカウント値を、実際の時刻情報に基づく１μ秒周期で動作するカウンタが出力するカウント値に変換する係数である。通信異常が検出される間、１μ秒カウンタ生成部２００は、ＣＰＵクロックカウンタ１０が出力するカウント値に換算係数１５ａを乗じて生成したカウント値１１を、カレンダ時刻変換部２０１へ出力する。カレンダ時刻変換部２０１は、カウント値１１をカレンダ時刻に変換する（ステップＳ２８）。
【００５１】
そして、ＮＴＰサーバ３００との通信が回復すると、換算係数切り替え部４０２は、１μ秒カウンタ生成部２００が使用する換算係数を、換算係数１５ａから換算係数１５に切り替える。そして、第一実施形態と同様の制御を行う。
【００５２】
本実施形態によれば、何らかの障害でＮＴＰサーバ３００と通信ができない状態を想定して予めＣＰＵクロックカウンタ１０の揺らぎを平均化した換算係数１５ａを求めておき、回線障害が発生した場合は換算係数１５ａを利用することができる。これにより、第一実施形態の効果に加え、ＮＴＰサーバ３００から時刻情報が取得できない状況でも、ある程度の精度を保持した状態でカウント値１１を生成することができる。従って、時刻補正用のオシレータなどの専用ハードウェアを必要とすることなく、専用ハードウェアに近い精度でシステムタイマを構成することが可能となる。
なお、ステップＳ２５では、一度換算係数１５ａを算出した後は、更新しないこととしたが、例えば、時間Ｔ１が経過する度に、最新の時間Ｔ１の開始と終了時点におけるＣＰＵクロックカウンタ１０のカウント値とカウント値１２に基づいて、換算係数１５ａを算出してもよい。
【００５３】
また、近年のコンピューティング環境では、複数の情報処理装置をネットワーク接続し、複数システムを協調して運用することが求められる場面が増加している。このようなシステムでは、各情報処理装置のシステム時刻を一致させる必要があるが、システム運用中にＮＴＰサーバから取得した時刻情報に基づいて、瞬間的に時刻を変更するとオペレーティングシステムやタスク間の時間関係が逆転してしまう可能性がある。これに対し、第一実施形態、第二実施形態が提供する１μ秒カウンタ（１μ秒カウンタ生成部２００）によれば、各情報処理装置が自律的に、ＮＴＰサーバ３００からの時刻情報に基づいてシステム時刻を少しずつ早めたり、遅らせたりすることで、ＮＴＰサーバ３００の時刻に合わせることができる。また、その際、時刻同期によって、情報処理装置３０１内のタスク間の時間関係に矛盾が生じないようにシステム時刻の調整を行うことができる。
【００５４】
図７は、本発明の一実施形態におけるカウンタ装置の最小構成を示す図である。
図７に示すようにカウンタ装置１００は、少なくとも第１カウンタ生成部１０１と、第２カウンタ変換部１０２と、換算係数算出部１０３を備える。
第１カウンタ生成部１０１は、ＣＰＵのクロックに同期して動作するＣＰＵクロックカウンタのカウント値に換算係数を乗じて、特定の周期で動作する第１カウンタによる第１カウント値を算出する。
第２カウンタ変換部１０２は、時刻情報を、前記特定の周期で動作する第２カウンタによる第２カウント値に変換する。
換算係数算出部１０３は、第１カウント値と第２カウント値の差分の経時的変動が所定の範囲内となるように、換算係数を調整する。
上記の第一実施形態、第二実施形態の構成と対比すると、第１カウンタ生成部１０１は１μ秒カウンタ生成部２００に対応し、第２カウンタ変換部１０２は１μ秒カウンタ変換部２０３に対応し、換算係数算出部１０３は換算係数算出部２０５に対応する。
一つの実施形態では、第１カウンタ生成部１０１のカウント値から第２カウンタ変換部１０２のカウント値を減じた差分値について、システム起動時における差分値Ｔｃ０と、システム起動後所定時間経過してからの差分値Ｔｃｘとの差が所定の範囲内に収まらない場合、換算係数算出部１０３は、その差が正である場合は第１カウンタ生成部１０１が進んでいると判断し、第１カウンタ生成部１０１のカウントを遅らせるように、換算係数を算出する。また差が負である場合は、第１カウンタ生成部１０１が遅れていると判断し、第１カウンタ生成部１０１のカウントを進めるように換算係数を算出する。
【００５５】
図８は、本発明の一実施形態における情報処理装置のハードウェア構成の一例を示す図である。
コンピュータ９００は、ＣＰＵ９０１、主記憶装置９０２、補助記憶装置９０３、入出力インタフェース９０４、通信インタフェース９０５を備える。上述の情報処理装置３０１，３０１ａは、コンピュータ９００に実装される。そして、上述した１μ秒カウンタ生成部２００、カレンダ時刻変換部２０１、ＮＴＰ時刻取得部２０２、ＮＴＰ時刻取得部２０２、１μ秒カウンタ変換部２０３、カウント値比較部２０４、換算係数算出部２０５、設定時刻取得部２０６、事前換算係数算出部４００、時刻同期異常検出部４０１、換算係数切り替え部４０２、換算係数保持部４０３の各機能は、プログラムの形式で補助記憶装置９０３に記憶されている。ＣＰＵ９０１は、プログラムを補助記憶装置９０３から読み出して主記憶装置９０２に展開し、当該プログラムに従って上記処理を実行する。また、ＣＰＵ９０１は、プログラムに従って、記憶領域を主記憶装置９０２に確保する。また、ＣＰＵ９０１は、プログラムに従って、処理中のデータを記憶する記憶領域を補助記憶装置９０３に確保する。
【００５６】
なお、少なくとも１つの実施形態において、補助記憶装置９０３は、一時的でない有形の媒体の一例である。一時的でない有形の媒体の他の例としては、入出力インタフェース９０４を介して接続される磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等が挙げられる。また、このプログラムが通信回線によってコンピュータ９００に配信される場合、配信を受けたコンピュータ９００が当該プログラムを主記憶装置９０２に展開し、上記処理を実行しても良い。また、当該プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、当該プログラムは、前述した機能を補助記憶装置９０３に既に記憶されている他のプログラムとの組み合わせで実現するもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００５７】
その他、本発明の趣旨を逸脱しない範囲で、上記した実施の形態における構成要素を周知の構成要素に置き換えることは適宜可能である。また、この発明の技術範囲は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲において種々の変更を加えることが可能である。
例えば、実施形態では、カウンタの周期を1μ秒としたが、他の周期でもよい。
【符号の説明】
【００５８】
１０・・・ＣＰＵクロックカウンタ
２００・・・１μ秒カウンタ生成部
２０１・・・カレンダ時刻変換部
２０２・・・ＮＴＰ時刻取得部
２０３・・・１μ秒カウンタ変換部
２０４・・・カウント値比較部
２０５・・・換算係数算出部
２０６・・・設定時刻取得部
３００・・・ＮＴＰサーバ
３０１、３０１ａ・・・情報処理装置
４００・・・事前換算係数算出部
４０１・・・時刻同期異常検出部
４０２・・・換算係数切り替え部
４０３・・・換算係数保持部
【図１】
2020150356.tif 000003
【図２】
2020150356.tif 000004
【図３】
2020150356.tif 000005
【図４】
2020150356.tif 000006
【図５】
2020150356.tif 000007
【図６】
2020150356.tif 000008
【図７】
2020150356.tif 000009
【図８】
2020150356.tif 000010