(57)【要約】【課題】装置の状況や利用の状況に応じて、一定の電力を必要とせずに、イベントの発生を信頼して順序付けるために利用できる少なくとも何らかのクロック情報を、電子装置に備えることが可能となるクロック構造を提供する。【解決手段】電子装置から読取り可能なクロックタイムと単調進行タイムとを含むクロックオブジェクトである。単調進行タイムは、クロックオブジェクトから単調進行タイムを読取るごとに増分される。クロックオブジェクトは、クロックタイムの信頼レベルの指標を含むものであってもよい。【選択図】図１
2007293861.tif 000002
【特許請求の範囲】
【請求項１】
電子装置によって読取り可能なクロックタイムと、
前記電子装置によって読取り可能で、クロックオブジェクトからの単調進行タイムの読込みごとに増分する前記単調進行タイムと、
を含むクロックオブジェクト。
【請求項２】
請求項１記載のクロックオブジェクトにおいて、前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記クロックタイムと前記単調進行タイムとを単一のメッセージで電子装置に返すクロックオブジェクト。
【請求項３】
請求項１記載のクロックオブジェクトにおいて、前記単調進行タイムは、前記クロックタイムとは独立しているクロックオブジェクト。
【請求項４】
請求項１記載のクロックオブジェクトにおいて、前記クロックタイムと前記単調進行タイムはともにハイブリッドタイムを形成し、前記クロックオブジェクトからの前記ハイブリッドタイムの各読取りに応じて、前記単調進行タイムは増分するクロックオブジェクト。
【請求項５】
請求項４記載のクロックオブジェクトは、さらに、
揮発性クロックデータベースであって、揮発性メモリ内に保存され、前記単調進行タイムを揮発性単調進行タイムとして保存する前記揮発性クロックデータベースと、
不揮発性クロックデータベースであって、不揮発性メモリ内に保存され、前記クロックオブジェクトは周期的に揮発性単調進行タイムを不揮発性データベースに不揮発性単調進行タイムとして格納する前記不揮発性クロックデータベースと、
を含むクロックオブジェクト。
【請求項６】
請求項５記載のクロックオブジェクトは、さらに予約値を含み、前記クロックオブジェクトは、前記揮発性単調進行タイムの変化の各予約値回数ごとに、前記揮発性単調進行タイムを前記不揮発性データベースに格納し、
前記クロックオブジェクトのリセットに対して、前記クロックオブジェクトは、前記揮発性単調進行タイムを、少なくとも、前記不揮発性単調進行タイムと前記予約値との和に設定するクロックオブジェクト。
【請求項７】
請求項１記載のクロックオブジェクトであって、さらに
クロックデータベースであって、クロックソースから受信したソースタイムを表す静的な設定時間を含むクロックデータベースと、
タイマであって、タイマ値を増分させ、前記クロックタイムは設定時間と前記タイマ値との関数である前記タイマと、
を含むクロックオブジェクト。
【請求項８】
請求項１記載のクロックオブジェクトであって、さらに、クロックデータベースを含み、該クロックデータベースは、
クロックソースから読取ったソースタイムを表す静的な設定時間であって、前記クロックタイムは、前記ソースタイムに基づく前記静的な設定時間と、
前記クロックデータベース内の前記設定時間の記録に成功した際の遅れを表す遅れ時間と、
を含むクロックオブジェクト。
【請求項９】
請求項８記載のクロックオブジェクトにおいて、前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記クロックタイムと前記遅れ時間を前記電子装置に返すクロックオブジェクト。
【請求項１０】
請求項１記載のクロックオブジェクトであって、さらに、前記クロックタイムの信頼レベルの指標を含むクロックオブジェクト。
【請求項１１】
請求項１記載のクロックオブジェクトにおいて、
前記クロックタイムは、高信頼クロックタイムと、低信頼クロックタイムと、タイマー値とを含むグループから選択された少なくとも一つの種類を含み、前記高信頼クロックタイムは前記低信頼クロックタイムよりも信頼できるものであり、
前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記高信頼クロックタイムと、前記低信頼クロックタイムと、前記タイマー値の中の少なくとも一つを、返されるクロックタイムの前記種類を表す指標とともに、前記電子装置に返すクロックオブジェクト。
【請求項１２】
請求項１１記載のクロックオブジェクトであって、さらに、クロックデータベースを含み、該クロックデータベースは、前記高信頼クロックタイムと前記低信頼クロックタイムを格納し、さらに利用可能であるならば、前記データベースが前記高信頼クロックタイムを含むか、データベースが前記低信頼クロックタイムを含むかを表す指標を格納するクロックオブジェクト。
【請求項１３】
電子装置によって読取り可能なクロックタイムと、
クロックタイムの信頼レベルを表す信頼度指標とを含み、
前記電子装置からのクロック読取り要求に応じて、前記クロックタイムと前記信頼度指標とを前記電子装置に返すクロックオブジェクト。
【請求項１４】
請求項１３記載のクロックオブジェクトにおいて、
前記クロックタイムは、高信頼クロックタイムと低信頼クロックタイムとのうちの少なくとも一つの種類を含み、前記高信頼クロックタイムは前記低信頼クロックタイムよりも信頼できるものであり、
前記クロック読取り要求に応じて、前記クロックオブジェクトは、前記高信頼クロックタイムと前記低信頼クロックタイムとの少なくとも一つと、前記信頼度指標とを前記電子装置に返すクロックオブジェクト。
【請求項１５】
請求項１４記載のクロックオブジェクトにおいて、前記信頼度指標は、返されるクロックタイムの前記種類を表すクロックオブジェクト。
【請求項１６】
請求項１４記載のクロックオブジェクトであって、さらにクロックデータベースを含み、該クロックデータベースは、前記高信頼クロックタイムと前記低信頼クロックタイムを格納し、さらに利用可能であるならば、前記データベースが前記高信頼クロックタイムを含むか、前記データベースが前記低信頼クロックタイムを含むかを表す指標を格納するクロックオブジェクト。
【請求項１７】
請求項１３記載のクロックオブジェクトであって、さらに、
前記電子装置によって読取り可能なハイブリッドタイムを含み、該ハイブリッドタイムは、前記クロックタイムと単調進行タイムとを含み、該単調進行タイムは、前記クロックオブジェクトからの前記ハイブリッドタイムの読取りごとに増分するクロックオブジェクト。
【請求項１８】
請求項１７記載のクロックオブジェクトであって、さらに、
予約値と、
揮発性メモリ内に保存され、揮発性単調進行タイムとして前記単調進行タイムを格納する揮発性クロックデータベースと、
不揮発性メモリ内に保存される不揮発性クロックデータベースであって、前記クロックオブジェクトは、前記揮発性単調進行タイムの変化の回数が予約値に達するごとに前記揮発性単調進行タイムを不揮発性単調進行タイムとして前記不揮発性データベースに格納するように構成される前記不揮発性クロックデータベースと、
を含み、
前記クロックオブジェクトのリセット時に、前記クロックオブジェクトは、前記揮発性単調進行タイムを、少なくとも、前記不揮発性単調進行タイムと前記予約値との和に設定するクロックオブジェクト。
【請求項１９】
請求項１３記載のクロックオブジェクトであって、さらに、
クロックソースから受信したソースタイムを表す静的な設定時間と、タイマ値を増分させるタイマとを含むクロックデータベースを含み、
前記クロックタイムは、前記設定時間と前記タイマ値との関数であるクロックオブジェクト。
【請求項２０】
請求項１３記載のクロックオブジェクトであって、さらに、
クロックソースから受信したソースタイムを表す静的な設定時間と、クロックデータベースに前記設定時間の記録に成功した際の遅れを表す遅れ時間とを含むクロックデータベースを含むクロックオブジェクト。
【発明の詳細な説明】
【技術分野】
【０００１】
「汎用アクセス制御システム」と題する米国特許出願第 号および「汎用の信頼および非信頼メッセージング」と題する米国特許出願第 号を相互参照する。これらは、本願と同日に出願されており、参照として本願明細書に引用する。
【０００２】
さらに、以下の同時係属米国出願を相互参照する。「付属した格納装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、２００１年７月２５日に出願された米国特許出願第０９／９１２，９３１号、「汎用のセキュリティ及びデジタル権利管理、ならびにストレージコントローラからのプライバシーサービスを提供するためのシステム及び方法」と題する、２００４年１０月１２日に出願された米国特許出願第１０／９６３，３７３号、「汎用のセキュリティ及びデジタル権利管理、ならびにストレージコントローラからのプライバシーサービスを提供するためのシステム及び方法」と題する、２００４年１１月９日に出願された米国特許出願第１０／９８４，３６８号、「付属した格納装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、２００５年７月１１日に出願された米国特許出願第１１／１７８，９０８号、「ストレージ装置上での汎用サービスを提供する方法および装置」と題する、２００６年１月３１日に出願された米国特許出願第１１／３４３，３３８号、「付属したストレージ装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、２００６年２月２日に出願された米国特許出願第１１／３４６，１１８号。
【０００３】
本発明は、一般的に、電子計算機装置に関し、特に、次のものに限られるものではないが、セキュリティ機能などのための、時間に関する情報を提供するためのクロック構造に関するものである。
【背景技術】
【０００４】
電子装置には、時間に関する情報を提供するためのクロックが含まれている。例えば、電子装置では、日付と時刻に関する情報を取得するための手段を備えるために、セキュリティ機能を実施することが望まれている。フォレンジック（ｆｏｒｅｎｓｉｃ）な記録機能として、所定のイベントが発生した時刻を記録できる能力を備えることが重要となる。
【０００５】
リアルタイムクロックは、装置の電源を落としても、現在時刻を刻み続ける。従って、リアルタイムクロックには、装置の電源が落ちた後でも、クロックが時間を取得し時刻を刻み続けられるように、バッテリなどの電源が必要となる。一方、リアルタイムに対応していないクロックは、装置の電源が落ちている時には機能しないが、電源が入った時には、かなり正確に時間を記録する。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ストレージ装置などの多くの電子装置に共通する問題として、コスト上の理由や電源が必要とされる実用上の理由から、リアルタイムクロックを備えることが現実的でないという問題がある。これにより、どのイベントが発生しているか、またそのイベントがいつ発生したかに関する証拠を、容易に把握できるように、正確な時間情報を保持し、発生したイベントを正しい順序で記録することが困難となる。
【０００７】
従って、装置の状況や利用の状況に応じて、一定の電力を必要とせずに、イベントの発生を信頼して順序付けるために利用できる少なくとも何らかのクロック情報を、電子装置に備えることが可能となるクロック構造が求められている。
【０００８】
本発明の一つあるいはそれ以上の数の実施例は、これらの問題やその他の問題に対する解決策を提供し、従来技術に対する他の利点をもたらすものである。
【課題を解決するための手段】
【０００９】
本発明の一実施例は、クロックオブジェクトに関するものである。クロックオブジェクトは、電子装置から読取り可能なクロックタイムと単調進行タイムを含んでいる。単調進行タイムは、クロックオブジェクトから単調進行タイムを読取るたびに更新される。
【００１０】
本発明の他の実施例は、クロックオブジェクトに関するものであり、このクロックオブジェクトは、電子装置から読取り可能なクロックタイムと、クロックタイムの信頼レベルを示す信頼度指標を含んでいる。クロックオブジェクトは、電子装置から出されたクロック読取り要求に応じて、クロックタイムと信頼度指標を電子装置に返すように構成されている。
【００１１】
例えば、クロックタイムは、高信頼クロックタイムと低信頼クロックタイムとの少なくとも一つを含むことができる。信頼度指標と、少なくとも一つの高信頼クロックタイムと低信頼クロックタイムとが、読取り要求に応じて、電子装置に返される。
【００１２】
さらに他の実施例では、クロックオブジェクトは、クロックソースから読み取ったソースタイムを表す静的な設定時間を含んでおり、クロックタイムは、ソースタイムに基づいている。クロックオブジェクトは、さらに、クロックデータベースへの設定時間の記録に成功した際の、遅延を表す遅れ時間を含んでいる。
【００１３】
本発明の実施例を特徴づける他の特徴と効果は、以下の詳細な説明と対応する図面とから明らかになるものである。
【実施例】
【００１４】
本願明細書の一つあるいはそれ以上の数の実施例は、クロックオブジェクトの形式をもつハイブリッド型のクロック構造に関するものであり、このクロックオブジェクトは、装置の状況や利用の状況に応じて、クロックエラーとクロック信頼度とともに、複数の異なるクロックソースにもとづいた“クロックタイム”を提供するものである。また、クロックオブジェクトは、クロックタイムの時間分解能によらず、イベントの発生した順序を常に識別することが可能な、単調進行タイムを提供するものである。“時間”あるいは“クロックタイム”という用語は、日付、時刻、及び／あるいはカウントなどの、任意の形式あるいは時間単位の時間情報を含んでいる。
【００１５】
クロックオブジェクトに対して、クロックタイムに関する情報を取得する要求が発行された際には、クロックオブジェクトは、クロック情報を提供する元となるクロックの種類を表すものとともに、現在のクロックタイムを返す。クロックオブジェクトの一実施例は、以下の基本的な特徴を有している。
ａ．クロックオブジェクトは、状況に応じて、実際のクロック（日付／時刻）と、単調に増分するカウンタ（単調進行タイム）の両者を記録し通知することが可能である。
ｂ．クロックオブジェクトは、外部で設定された信頼性の低いクロックタイムと、外部で設定された信頼性の高いクロックタイムとを区別して扱うことが可能である。
ｃ．クロックオブジェクトは、外部で設定されたクロックタイムについて、誤差に制限を設ける手段を提供する。
ｄ．クロックオブジェクトは、信頼できる内部のリアルタイムクロックが利用可能である場合には、それを利用するための自然な手段を提供する。
【００１６】
１．序文
説明の目的のために、以下の開示は、通信チャネルを介して“ホスト”に接続された“周辺装置”に関連したハイブリッド型のクロックオブジェクトの一例を提供するものであり、ホストは、通信チャネルを介して現在のクロックタイムを設定し、その値を読取る。ホストと周辺装置という用語は、ホストは周辺装置との通信セッションを要求するとうことを定義するために区別して用いられる。ホスト装置と周辺装置は、各々、次のものに限定されるものではないが、デスクトップコンピュータシステム、ラップトップコンピュータシステム、ネットワーク接続型コンピュータシステム、携帯電話や個人情報端末などの無線システム、内蔵ＷＥＢカメラを含むデジタルカメラ、格納装置、及び／又はこれらの装置や他のシステムや装置を合理的に組み合わせたものなどの、任意の電子計算機装置又は、計算機装置の周辺装置を含むものである。
【００１７】
クロックオブジェクトは、メッセージング又は非メッセージング環境のホスト上に直接実装するような、他の環境や任意の電子装置上に実装することも可能である。クロックオブジェクトは、通信チャネル、データバス、あるいは他の直接的あるいは間接的な接続やデータベースを介してアクセスすることができる。
【００１８】
一実施例において、クロックオブジェクトは、時間記録と時間に関する他の情報を格納した、テーブル又は他のデータベースを保持している。周辺装置は、任意の数のクロックオブジェクトを含むことが可能であるが、通常は、一つのオブジェクトがデフォルトクロックオブジェクトとして割り当てられている。
【００１９】
クロックオブジェクトは、例えば、以下の２つの時間マーカーを用いて、日付と時刻を追跡する。
ＥｘａｃｔＴｉｍｅと称する、６４ビットのＳＮＴＰクロックタイムフィールド（ＩＥＴＦ  ＲＦＣ  ２０３０準拠）
ＬａｇＴｉｍｅと称する、６４ビットのＳＮＴＰクロックタイムエラーフィールド
ここで、ＳＮＴＰとは、“シンプル・ネットワーク・タイム・プロトコル”を指す。他の時間フォーマット、プロトコル、基準を用いることもできる。
【００２０】
クロックオブジェクトは、ホストからＥｘａｃｔＴｉｍｅを受信することにより、ホスト又はホストを介したなんらかのプロセス通信がクロックタイムのソースからクロックタイムを読み取った時刻と、ＥｘａｃｔＴｉｍｅが受信されたとの確認をクロックオブジェクトから受信したことを確認した時刻との間の時間遅れを、計測できるようになっている。次に、ホストプロセスは、ＬａｇＴｉｍｅをクロックオブジェクトに送り、クロックオブジェクトは、ＬａｇＴｉｍｅを受信して、ＥｘａｃｔＴｉｍｅとＬａｇＴｉｍｅとを永続的に記録する。このようにして、クロックオブジェクトは、ＥｘａｃｔＴｉｍｅについての数値を知り、ＬａｇＴｉｍｅを介して、大まかではあるが、エラーについても把握することが可能である。オプションとして、特定の環境に対応するために、ホストは、この操作を繰り返し、平均の遅れ時間あるいは最大限の遅れ時間を提供することができることは明白である。
【００２１】
クロックオブジェクトは、高信頼クロックソース（ＨｉｇｈＴｒｕｓｔＳｏｕｒｃｅ）から受信した時刻と、低信頼クロックソース（ＬｏｗＴｒｕｓｔＳｏｕｒｃｅ）から受信した時刻とを区別する能力も備えている。高信頼クロックソース（ＨｉｇｈＴｒｕｓｔＳｏｕｒｃｅ）は遠隔にあるものでもよいが、強固に保護された時間のソースであり、低信頼クロックソース（ＬｏｗＴｒｕｓｔＳｏｕｒｃｅ）は近隣にあるものであるが、ローカルのパソコン（ＰＣ）クロックなどの、強固には保護されていない時間のソースである。
【００２２】
本発明の一実施例において、クロックオブジェクトは、高信頼（ＨｉｇｈＴｒｕｓｔ）ソースが、信頼度はより高いが、長い遅れ時間（ＬａｇＴｉｍｅ）をもつ時刻を提供することを仮定しているため、クロックオブジェクトは、高信頼（ＨｉｇｈＴｒｕｓｔ）ソースを用いて、低信頼（ＬｏｗＴｒｕｓｔ）のＥｘａｃｔＴｉｍｅ中のエラーをある範囲に留める。このようにして、低信頼（ＬｏｗＴｒｕｓｔ）であるが正確な時刻を検出して用いることが可能となる。多くの場合、低信頼（ＬｏｗＴｒｕｓｔ）ソースは、高信頼（ＨｉｇｈＴｒｕｓｔ）ソースよりも時間分解能は大きいが、より正確で信頼性の高い時刻を提供する。しかし、高信頼（ＨｉｇｈＴｒｕｓｔ）ソースは、現在の相対時間については、より信頼できるものとなっている。
【００２３】
以下で詳細に説明するように、クロックオブジェクトは、低信頼（ＬｏｗＴｒｕｓｔ）のＥｘａｃｔＴｉｍｅと高信頼（ＨｉｇｈＴｒｕｓｔ）のＥｘａｃｔＴｉｍｅとの両者、高信頼（ＨＩｇｈＴｒｕｓｔ）の制限範囲をもたない低信頼（ＬｏｗＴｒｕｓｔ）のＥｘａｃｔｔｉｍｅ、または高信頼モード（ＨｉｇｈＴｒｕｓｔＭｏｄｅ）及び低信頼モード（ＬｏｗＴｒｕｓｔＭｏｄｅ）と呼ばれるクロックオブジェクトモードを用いる高信頼（ＨｉｇｈＴｒｕｓｔ）のＥｘａｃｔＴｉｍｅを受信するように設定されている。
【００２４】
クロックオブジェクトは、さらに、タイマーモード（ＴｉｍｅｒＭｏｄｅ）とクロックモード（ＣｌｏｃｋＭｏｄｅ）という２つの時間モードを備え、装置のリセットの後に時間が設定されたものであるか、クロックオブジェクトに設定時間が与えられていないかどうかを区別する。リセットの後では、（装置のリセットや電源切断の際に、時間の進行と時間情報を保持するためのバックアップバッテリを、装置が含んでいない場合には）クロックオブジェクトは、タイマーモード（ＴｉｍｅｒＭｏｄｅ）になる。タイマーモード（ＴｉｍｅｒＭｏｄｅ）では、ＥｘａｃｔＴｉｍｅは、時間が更新されるが、リセットの後であるため、取り出された時刻値は絶対値としては信頼できないことを、その読み値は示すことになる。
【００２５】
低信頼タイム（ＬｏｗＴｒｕｓｔＥｘａｃｔＴｉｍｅ）と高信頼タイム（ＨｉｇｈＴｒｕｓｔＥｘａｃｔＴｉｍｅ）に加え、クロックオブジェクトは、単調進行カウンタを独立して保持しており、このカウンタは、クロックタイムがクロックオブジェクトから読み取られる毎に、そのカウンタ数値が更新される。一実施例では、このカウンタは、単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）と呼ばれる値を有する６４ビットの永続カウンタを含んでいる。単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）は、“単調”であり、リセット又はリブートがあっても、進行とともに増分（あるいは漸減）する値を含んでいる。従って、クロックタイムの各読み値は、現在のクロックタイム（ＥｘａｃｔＴｉｍｅ）に加え、フォレンジックの記録などで、イベントを順序付けるために用いることが可能な一意の単調値を提供する。単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）は、均一あるいは不均一な増分で増分することができるが、同一の計数値を二度返すことはない。単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）が単調に変化する（すなわち、時間の進行とともに増加あるいは減少する）限り、これらの増分は、正値又は負値である。
【００２６】
単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）は、クロックオブジェクトのＥｘａｃｔＴｉｍｅを時間的に後戻りさせることができるため、有用である。さらに、連続した読取りのスピードが時間分解能に関連した値となるように設定することにより、クロックタイムを続けて読み取り、同一のＥｘａｃｔＴｉｍｅ値を返すことが可能となる。これらの場合には、もしこのような方法をとらなければ、一つのイベントと他のイベント間の時間的な順序関係を、高い信頼性をもって決定することは困難となる。
【００２７】
本発明の位置実施例においては、クロックオブジェクトからクロックタイムを読み出すことに応じて、クロックオブジェクトは、ＥｘａｃｔＴｉｍｅか、遅れタイム（ＬａｇＴｉｍｅ）か、単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）か、どの種類のクロックタイムを戻そうとしているかを示す表示を、要求元に返す。
【００２８】
２．実施例
図１は、本発明の一実施例による、通信チャネル１０６を介して周辺装置１０４に接続されたホスト１０２を有する、複数の構成要素からなるプラットフォーム１００のブロック図である。ＡＰＰ１（符号１１０）とＡＰＰ２（符号１１２）など、多数のホストソフトウェアアプリケーションは、ドライバ１１４と周辺インターフェース１１６とを介して、周辺装置１０４との間で相互にやりとりする。
【００２９】
周辺装置１０４は、セキュリティプロバイダ（ＳＰ）１２０を含んでおり、これは、周辺装置の確実な信頼状態を制御するために作成されたテーブルとメソッドの組を含んでいる。一実施例では、セキュリティプロバイダ１２０は、完全に自己完結しており、スタンドアロンのセキュリティ領域にこれらのテーブルを有している。セキュリティプロバイダは永続的なデータとメソッド（あるいはリモートプロシージャコール）から各々構成されたオブジェクトを含んでいる。一実施例では、セキュリティプロバイダ１２０は、アクセス制御オブジェクト１２２の組と、クロックオブジェクト１２４とを含んでいる。セキュリティプロバイダ１２０へのアクセスは、例えば、２００３年１月３０日発行の米国特許出願公開番号ＵＳ２００３／００２３８６７に記載されているように、制御される。
【００３０】
ホスト１０２上のアプリケーションは、セキュリティプロバイダ１２０との通信セッションを確立することにより、クロックオブジェクト１２４によって保持されているクロックタイムの状態などの周辺装置１０４上の永続的な状態について、問い合わせを行ったり、変更を加えることができる。これらのセッションは、一つあるいはそれ以上の数のオブジェクトのメソッド（図１のコネクタ１３０）を実行する。ホスト１０２は、特定のインターフェース１１６のインターフェースコマンドを用いてセッションをオープンすることにより、セキュリティプロバイダ１２０との間で通信を行う。単純な場合では、ホスト１０２は、周辺装置が直接接続されたプラットフォームホストである。より一般的な場合では、ホスト１０２は、中間的なプラットフォームホストとの間で通信を行う他のプラットフォームであり、このプラットフォームホストは、ネットワークを介して周辺装置１０４にセッションストリームを中継する。通信セッションと、セキュリティプロバイダ１２０のセキュリティ及びアクセス制御機能については、前述の相互参照した米国特許出願に、詳細に記載されている。
【００３１】
一つあるいはそれ以上の数の実施例において、クロックオブジェクト１２４は、周辺装置１０４のファームウェア内に、例えば、セキュリティプロバイダ１２０のアクセス制御とセキュア／非セキュアメッセージングシステムを実装するファームウェアの一部として、実装されている。図１に示した実施例は、周辺装置１０４のセキュリティとアクセス制御機能に関して記載されているものであるが、クロックオブジェクト１２４は、任意の電子装置とともに、セキュリティあるいはアクセス制御機能の一部として、あるいはその外部にあるものとして用いることができる。本発明の他の実施例では、クロックオブジェクト１２４は、任意のセキュリティアクセス制御あるいはメッセージングシステムとは関係のない分離した機能として実装することも可能である。
【００３２】
一実施例では、クロックオブジェクト１２４は、永続的なデータと（リモートプロシージャコールなどの）メソッドとを集めたものを含んでいる。データは、一つあるいはそれ以上の数のテーブル又は他のデータベース形式で保持されている。メソッドは、例えば、テーブルや他のオブジェクトに対して操作を行う手続きである。（ホスト１０２上のアプリケーションなどの）呼び出し側は、メソッドのパラメータ値のリストを、クロックオブジェクト１２４に送り、クロックオブジェクトは、結果値のリストと、それに続けて、例えば、状態コードとを返す。
【００３３】
クロックオブジェクト１２４は、クロック情報データと、データに対して操作を行うメソッドとを集めたものを含んでいる。さらに、クロックオブジェクトは、例えば、クロック機能を実装し、クロックデータを格納し、メソッドを実行するための、任意のハードウェア、ソフトウェアあるいはファームウェアの全て又は一部を含む。
【００３４】
図１に示した実施例では、クロックオブジェクト１２４は、クロックテーブル１４０を
揮発性メモリ１４２内に保持し、それに対応する永続的なクロックテーブル１４４を不揮発性メモリ１４６に保持している。例えば、周辺装置が、ディスク駆動装置などのデータ格納装置を含んでいる場合には、揮発性メモリ１４２は、駆動プロセッサ１５０が用いるランダムアクセスメモリ（ＲＡＭ）を含み、不揮発性メモリ１４６は、データ格納ディスクの媒体を含むことが可能である。しかし、他の実施例では、他の任意の種類の揮発性メモリと不揮発性メモリを用いることも可能である。
【００３５】
以下で詳細に説明するように、クロックテーブル１４０、１４４は、ホスト１０２上のアプリケーションによって変更されたり読取られるクロック情報を格納する。例えば、アプリケーションＡＰＰ１（符号１１０）は、ローカルあるいは遠隔に存在する（ローカルＰＣクロックなどの）低信頼クロックソース１６０あるいはローカルあるいは遠隔に存在する高信頼クロックソース１６２から、タイム値を読取ることにより、ＬｏｗＴｒｕｓｔＥｘａｃｔＴｉｍｅ又はＨｉｇｈＴｒｕｓｔＥｘａｃｔＴｉｍｅを設定することができる。高信頼クロックソースの一例としては、例えば、有線あるいは無線の、ローカルあるいは広域ネットワークを介して、ホスト１０２によって読取られるＳＮＴＰクロックソースがある。ローカルの低信頼クロックソース１６０は、即座に利用可能で正確ではあるが、信頼できないＬｏｗＴｒｕｓｔＥｘａｃｔＴｉｍｅを提供し、高信頼クロックソース１６２は、正確さには及ばないものの、信頼性の高いＨｉｇｈＴｒｕｓｔＥｘａｃｔＴｉｍｅを提供する。高信頼クロックソース１６２は、通常、ローカルの低信頼クロックソース１６０よりも長いアクセス時間を有している。
【００３６】
クロックオブジェクト１２４で保持される低信頼又は高信頼ＥｘａｃｔＴｉｍｅを設定する際には、ホストアプリケーションＡＰＰ１は、遅れタイマー１７０を起動し、次に、クロックソース１６０又は１６２から、ＥｘａｃｔＴｉｍｅを読取る。ホストアプリケーションは、読取ったタイム値を、例えば、“クロック設定（ＣｌｏｃｋＳｅｔ）”メソッド呼び出しのパラメータとしてクロックオブジェクト１２４に送る。クロックオブジェクト１２４は、そのタイム値を受信し、ホストアプリケーションＡＰＰ１に対して、クロックタイムをクロックテーブル１４０に記録したことを応答する。クロックオブジェクト１２４がＥｘａｃｔＴｉｍｅ値を受信したことの確認をホストアプリケーションＡＰＰ１が受け取ると、ホストアプリケーションは、遅れタイマー１７０の値“遅れ時間（ＬａｇＴｉｍｅ）”を読取る。遅れ時間（ＬａｇＴｉｍｅ）値は、クロックオブジェクト１２４によって記録されたＥｘａｃｔＴｉｍｅが実際より遅れている時間の最大値を表しており、その値は、クロックデータベースにＥｘａｃｔＴｉｍｅを正しく書き込む時の遅延である。遅れ時間（ＬａｇＴｉｍｅ）は、最悪の場合の遅れエラーを上回るが、本発明の一つあるいはそれ以上の数の実施例においては、より詳細な評価を行う必要はない。
【００３７】
ホストアプリケーションは、他のメッセージのパラメータとして、遅延時間（ＬａｇＴｉｍｅ）値を、クロックオブジェクト１２４に送る。クロックオブジェクト１２４は、それを受信すると、揮発性メモリ上のクロックテーブル１４０を、不揮発性メモリ上のクロックテーブル１４４に転送することにより、（ＥｘａｃｔＴｉｍｅ）と遅延時間（ＬａｇＴｉｍｅ）を永続的に記録する。遅延時間（ＬａｇＴｉｍｅ）値は、クロックオブジェクト１２４によって格納されたＥｘａｃｔＴｉｍｅを修正したり、クロックエラーの計測や制限を設けるために用いられる。
【００３８】
ホストアプリケーションは、実装の違いによって、クロックソース１６０又は１６２から時間を読取る前か後のどちらで、クロックオブジェクト１２４を用いてメッセージングセッションを開くことを選択してもよい。最も近い時間を求めることが望まれる場合には、ホスト側のプロセスは、ソースクロックタイムを読取して送る前に、クロックオブジェクト１２４でセッションを開く。しかし、時間は、ローカル又は広域ネットワークを経由して取得する必要があり、この場合には、セッションは、時間を更新する前に、セッション自身の認証を行ったり、クロックオブジェクト１２４によりセッションのセキュリティを確保する必要があることが原因の一部となって、より長い遅れ時間が発生する。
【００３９】
静的な（ＥｘａｃｔＴｉｍｅ）値が記録されると、記録された時間が、ＬｏｗＴｒｕｓｔＥｘａｃｔＴｉｍｅであるか、ＨｉｇｈＴｒｕｓｔＥｘａｃｔＴｉｍｅであるかにかかわらず、クロックオブジェクト１２４は、タイマ１８０を用いて、その現在のクロックタイムの計測値を増分させる。周辺装置１０４に電源が入ると、タイマ１８０は、格納されたＥｘａｃｔＴｉｍｅ値からの時間進行について正確な計測を継続する。
【００４０】
さらに、クロックオブジェクト１２４は、単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）と呼ばれる独立した単調進行カウンタ値を、揮発性メモリ上のクロックテーブル１４０に保持する。クロックオブジェクト１２４は、ホストアプリケーションあるいは他のオブジェクト又はプロセスが、クロックオブジェクト１２４から時間を読取るごとに、単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）を増分させる。以下に詳細に説明するように、クロックオブジェクト１２４は、不揮発性メモリ上のクロックテーブル１４４に単調進行タイム（ＭｏｎｏｔｏｎｉｃＴｉｍｅ）を定期的に格納し、単調に増加するカウンタ値を、常に、提供できるようにする。
【００４１】
リアルタイムクロック１９０が、周辺装置１０４で利用可能である場合には、クロックオブジェクト１２４は、その値を、低信頼クロックタイム値あるいは高信頼クロックタイム値として適宜利用することが可能である。また、クロックオブジェクト１２４は、リアルタイムクロック値を、例えば、ホストアプリケーションによって行われるプロシージャを介して設定することも可能である。
【００４２】
他の実施例において、クロックオブジェクト１２４のタイマや他の支援機能は、ハードウェア、ファームウェア、ソフトウェアあるいはそれらの組み合わせによって実装することが可能である。
【００４３】
３．クロックテーブル
本発明の一実施例において、テーブルは、一般的に、名前が付けられた列と、アドレス指定可能な行とを含んでいる。行と列が交叉する場所には、セルが存在する。一つの列内の全てのセルは、同一の種類のデータを有している。しかし、本願明細書と特許請求の範囲で用いられる“テーブル”という用語は、メモリ中のデータの2つあるいはそれ以上の数のフィールドを関連付けるために用いられる、任意のデータ構造あるいは配置を含むものとなっている。テーブルの“列”と“行”は、フィールドが格納されているメモリセルの物理的な配置を必ずしも限定するものではないが、フィールド間を関連付ける方法を指すものであり、これらの用語“列”と“行”は、入れ替えて使うことが可能である。
【００４４】
一実施例では、クロックテーブル１４０、１４４は、単一の列を有している。表１は、本発明の一実施例における、クロックテーブル１４０、１４４の列の記載例を示すものである。
【表１】
2007293861.tif 000003
【００４５】
上記の表では、データ種類“ブール値”は、１バイトの符号なし整数、ｕｉｎｔｅｇｅｒ{１}であり、例えば、“偽”の場合は値が０で、“真”の場合は値が１となる。これに代えて、１ビットの値を用いることも可能である。データ種類“ｕｉｄｒｅｆ{Ａｕｔｈｏｒｉｔｙ}”は、特定のアクセス制御の権限を識別するための一意の識別子であり、図１のアクセス制御オブジェクト１２２によって保持され、高信頼タイム又は低信頼タイムを設定することによるものである。データ種類“ｃｌｏｃｋ＿ｋｉｎｄ”は、ｅｎｕｍ{Ｔｉｍｅｒ，Ｌｏｗ，Ｈｉｇｈ，ＬｏｗＨｉｇｈ}の形式を有している。これらの形式のひとつは、この列の中で列挙され得る。データ形式“ｃｌｏｃｋ＿ｔｉｍｅ”は、ｔｙｐｅＯｒ｛ｔｒｕｓｔｅｄ：ｓｎｔｐ＿ｔｉｍｅ，ｍｏｎｏｔｏｎｉｃ：ｕｉｎｔｅｇｅｒ｛８｝｝の形式を有している。ホストが、電源起動からの信頼できる時間（ＬｏｗＴｒｕｓｔ又はＨｉｇｈＴｒｕｓｔ）を与えた場合には、“信頼された”クロックタイムが用いられ、これは、ｓｎｔｐ＿ｔｉｍｅ形式を有する。それ以外の場合は、単調積算カウンタ値が用いられ、これは、符号なしの８バイトの整数である。
【００４６】
ＨａｖｅＨｉｇｈフィールドは、高信頼タイム値が有効であるかどうかを示すものである。この値が真である場合は、ＨｉｇｈＢｙＷｈｏ、ＨｉｇｈＳｅｔＴｉｍｅ、ＨｉｇｈＩｎｉｔｉａｌＴｉｍｅｒ及びＨｉｇｈＬａｇＴｉｍｅの各フィールドが意味を持つものとなる。ＴｒｕｓｔＭｏｄｅがＬｏｗならば、例えば、この値は偽でなければならない。
【００４７】
同様に、ＨａｖｅＬｏｗフィールドは、信頼タイム値が有効であるかどうかを示すものである。この値が真である場合は、ＬｏｗｂｙＷｈｏ、ＬｏｗＳｅｔＴｉｍｅ、ＬｏｗＩｎｉｔｉａｌＴｉｍｅｒ及びＬｏｗＬａｇの各フィールドが意味を持つものとなる。ＴｒｕｓｔＭｏｄｅがＨｉｇｈならば、例えば、この値は偽でなければならない。
【００４８】
ＨｉｇｈＳｅｔＴｉｍｅ及びＬｏｗＳｅｔＴｉｍｅは、ホストから受信したＨｉｇｈＴｒｕｓｔＥｘａｃｔＴｉｍｅとＬｏｗＴｒｕｓｔＥｘａｃｔＴｉｍｅに対応しており、これらは静的な時間値である。ＨｉｇｈＩｎｉｔｉａｌＴｉｍｅｒとＬｏｗＩｎｉｔｉａｌＴｉｍｅｒは、ＨｉｇｈＳｅｔＴｉｍｅとＬｏｗＳｅｔＴｉｍｅの値が設定された時点でタイマ１８０から与えられる“ｔｉｍｅｒ（）”の各値に対応している。これらの値のいずれかがホストで設定される時点で、クロックオブジェクトは、ｔｉｍｅｒ（）の静的な値を、ＨｉｇｈＩｎｉｔｉａｌＴｉｍｅｒ又はＬｏｗＩｎｉｔｉａｌＴｉｍｅｒの各フィールドに記録する。
【００４９】
ホスト遅れタイマ１７０によって計測された、高信頼クロックソースと低信頼クロックソースに関する遅れ時間は、ＨｉｇｈＬａｇ及びＬｏｗＬａｇの行に、各々、格納される。これらの遅れ時間は、一般的に、各クロックソースから各ＥｘａｃｔＴｉｍｅｓを読取ってから、対応する設定タイムをクロックテーブルに記録するまでの遅延を表している。
【００５０】
揮発性メモリ上のクロックテーブル１４０（ＲＡＭ内）のＭｏｎｏｔｏｎｉｃＢａｓｅの行に格納された値は、揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅと呼ばれるが、アプリケーション、オブジェクトあるいは他のプロセス又は装置がクロックオブジェクト１２４から時間を読取る毎に、指定された均一あるいは不均一な増分で増分する。各読取りごとに、揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅの値が、ＭｏｎｏｔｉｎｉｃＴｉｍｅとして、要求元に返される。
【００５１】
一実施例では、ＭｏｎｏｔｏｎｉｃＢａｓｅは、それが用いられる電子装置が使用される期間内に、単調進行カウントが最大カウントに到達することがないように、十分なビット数を有している。例えば、ＭｏｎｏｔｏｎｉｃＢａｓｅは、６４ビット長である。しかし、他の実施例では、このビット数よりも多いビット数や少ないビット数を用いることも可能である。
【００５２】
ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅの値は、クロックオブジェクト１２４が、そのコンテンツ、特に、揮発性ＭｏｎｏｔｉｎｉｃＢａｓｅの値を不揮発性メモリ１４６内のクロックテーブル１４４に複写あるいは保存する揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅを増分させる回数の単位で期間を、決定する。従って、ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅが揮発性ＭｏｎｏｔｉｎｉｃＢａｓｅを増分する毎に、不揮発性ＭｏｎｏｔｉｎｉｃＢａｓｅ値は更新される。これにより、カウント値の増分が行われることを確保しながら、メインメモリへの書込み回数を最小にする。クロックオブジェクトは、不揮発性メモリへ最新値を保存して、それ以降の、揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅの増分の総回数の最新値を、ＭｏｎｏｔｉｎｉｃＩｎｃｒｅｍｅｎｔと称して、それを監視する。ＭｏｎｏｔｏｎｉｃＩｎｃｒｅｍｅｎｔがＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅ値に達した時に、クロックオブジェクトは、揮発性メモリ上のＭｏｎｏｔｏｎｉｃＢａｓｅを不揮発性メモリ上のクロックテーブルに書き込む。
【００５３】
例えば、リセット又は電源が落とされることにより、揮発性メモリ上のＭｏｎｏｔｏｎｉｃＢａｓｅの前回の値は消失する。しかし、電源が入ると、クロックオブジェクトは、揮発性メモリ上のクロックテーブル１４０のＭｏｎｏｔｏｎｉｃＢａｓｅの行に、少なくとも保存された、不揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅとＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅ値の合計と等しい値を書き込む。これにより、揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅの新しい値が、少なくとも、リセットの前に保存された次回の最新値と同じ程度となることが保証される。最新の永続値が不揮発性メモリ上のクロックテーブルに保存されているため、揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅ値は、ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅを上回る値にまでは増分することはない。従って、揮発性メモリ上のＭｏｎｏｔｏｎｉｃＢａｓｅ値は、ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅ値によって値が飛ぶことがあっても、常に増加することが保証されている。その後は、クロックオブジェクトからクロックタイムを読取っても、同一のＭｏｎｏｔｏｎｉｃＴｉｍｅ値が返されることはない。
【００５４】
他の実施例では、単調進行する値は、他の方法で扱うものであってよい。例えば、不揮発性メモリへの保存の際に、保存されたＭｏｎｏｔｏｎｉｃＢａｓｅは、ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅによって事前に増加させておくことが可能である。リセット後に、この保存された値を、揮発性メモリ上のＭｏｎｏｔｏｎｉｃＢａｓｅに、直接書き込むことも可能である。単調に増加する（あるいは、場合によって減少する）カウントを確実に提供するために、他の処理を用いることも可能である。
【００５５】
このように、クロックオブジェクトは、以下の制約条件を保持している。
０  ≦  ＭｏｎｏｔｏｎｉｃＩｎｃｒｅｍｅｎｔ  ≦  ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅ，揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅ  ＝  不揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅ＋ＭｏｎｏｔｏｎｉｃＩｎｃｒｅｍｅｎｔ
ここで、ＭｏｎｏｔｏｎｉｃＩｎｃｒｅｍｅｎｔは、不揮発性メモリへの最後の保存以降の、ＭｏｎｏｔｏｎｉｃＢａｓｅを増分させる回数の合計値である。
【００５６】
４．クロックメソッド
このセクションは、ホストアプリケーション（又は他のプロセス、オブジェクト、装置）からコールされ、クロックオブジェクト上で実行あるいはクロックオブジェクトにより実行されるメソッドあるいはプロセスの例を示すものである。メソッドとは、ホストアプリケーションが実行しようとする、クロックオブジェクトなどの周辺装置のリソースや特徴を活用する行為である。
【００５７】
４．１  クロック取得（ＧｅｔＣｌｏｃｋ）メソッド
クロック取得（ＧｅｔＣｌｏｃｋ）メソッドは、現在時刻に関する情報を読取るために用いられ、以下の形式を有している。
ＴａｂｌｅＮａｍｅ．ＧｅｔＣｌｏｃｋ［］
＝＞
［Ｋｉｎｄ：ｃｌｏｃｋ＿ｋｉｎｄ，ＥｘａｃｔＴｉｍｅ：ｃｌｏｃｋ＿ｔｉｍｅ，
ＬａｇＴｉｍｅ：ｃｌｏｃｋ＿ｔｉｍｅ，ＭｏｎｏｔｏｎｉｃＴｉｍｅ：
ｃｌｏｃｋ＿ｔｉｍｅ］
【００５８】
第一の表現は、所望するクロックテーブル名称（図１のクロックテーブル１４０の名称）を表し、クロック取得（ＧｅｔＣｌｏｃｋ）メソッドを指定するものである。“＝＞”の後に続く表現は、クロックオブジェクトからホストに返される結果を表すものである。
【００５９】
結果は、４つのパラメータ、データ種類が“ｃｌｏｃｋ＿ｋｉｎｄ”である“Ｋｉｎｄ”と、データ種類が“ｃｌｏｃｋ＿ｔｉｍｅ”である“ＥｘａｃｔＴｉｍｅ”と、データ種類が“ｃｌｏｃｋ＿ｔｉｍｅ”である“ＬａｇＴｉｍｅ”と、データ種類が“ｃｌｏｃｋ＿ｔｉｍｅ”である“ＭｏｎｏｔｏｎｉｃＴｉｍｅ”である。他の実施例では、これらのパラメータのうち一つあるいはそれ以上の数のパラメータを、一つあるいはそれ以上の数の分離したメッセージに含めて返すことも可能である。
【００６０】
クロックオブジェクトが、クロック取得（ＧｅｔＣｌｏｃｋ）メソッドコールを受け取ると、クロックオブジェクトは、その揮発性メモリ上のクロックテーブルを読取る。もし、ＨａｖｅＬｏｗが真である場合は、結果は、［Ｌｏｗ，Ｌｏｗｔｉｍｅ，ＬｏｗＬａｇ，ＭｏｎｏｔｏｎｉｃＴｉｍｅ］となる。もし、ＨａｖｅＨｉｇｈが真である場合は、結果は、［Ｈｉｇｈ，ＨｉｇｈＴｉｍｅ，ＨｉｇｈＬａｇ，ＭｏｎｏｔｏｎｉｃＢａｓｅ］となる。それ以外の場合は、結果は［“ｔｉｍｅｒ”，ｔｉｍｅｒ（），０，ＭｏｎｏｔｏｎｉｃＢａｓｅ］となる。他の実施例においては、他のプライオリティで実行できる。
【００６１】
本実施例では、クロック取得（ＧｅｔＣｌｏｃｋ）メソッドコールは、クロックテーブルとＴｒｕｓｔＭｏｄｅの内容に応じて、２つの仮想変数、ＨｉｇｈＴｉｍｅかＬｏｗＴｉｍｅのいずれかを返す。クロックオブジェクトは、以下の式により、これらの変数を計算する。
ＨｉｇｈＴｉｍｅ＝ＨｉｇｈＳｅｔＴｉｍｅ＋（ｔｉｍｅｒ（）―ＨｉｇｈＩｎｉｔｉａｌＴｉｍｅ）
ＬｏｗＴｉｍｅ＝ＬｏｗＳｅｔＴｉｍｅ＋（ｔｉｍｅｒ（）―ＬｏｗＩｎｉｔｉａｌＴｉｍｅ）
【００６２】
クロックオブジェクトは、タイマ１８０とＨｉｇｈＩｎｉｔｉａｌＴｉｍｅの値を読取り、ホストにより初期設定されクロックテーブルに格納されたＨｉｇｈＳｅｔＴｉｍｅ（ＨｉｇｈＴｒｕｓｔＥｘａｃｔＴｉｍｅ）からの経過時間を決定する。これに代えて、タイマ１８０はホストがＨｉｇｈＳｅｔＴｉｍｅを設定する毎にリセットされ、ホストにより読取られる際に単純にＨｉｇｈＳｅｔＴｉｍｅに加算されてもよい。さらに他の実施例では、高信頼設定時間と低信頼設定時間のために、分離した複数のタイマを設けることも可能である。
【００６３】
種類がｃｌｏｃｋ＿ｋｉｎｄのパラメータは、結果として返されるＥｘａｃｔＴｉｍｅクロックタイムの信頼レベルを表すものとして用いられる。これに代えて、クロックオブジェクトは、ＨｉｇｈＴｉｍｅとＬｏｗＴｉｍｅとの両方を、これらのクロックタイムのどちらが有効であるかを示す有効フラグとともに返すことも可能である。有効フラグは、クロックタイムを求める基準となるクロックソースの信頼レベルを表す指標としても用いられる。
【００６４】
４．２  リセットクロック（ＲｅｓｅｔＣｌｏｃｋ）メソッド
リセットクロック（ＲｅｓｅｔＣｌｏｃｋ）メソッドは、以下の形式を有している。
ＴａｂｌｅＮａｍｅ．ＲｅｓｅｔＣｌｏｃｋ［］
＝＞
［Ｒｅｓｕｌｔ：ｂｏｏｌｅａｎ］
【００６５】
本メソッドは、クロックをリセットし、クロックオブジェクトをタイマーモードに設定するものである。本メソッドは、周辺装置がリセットされたり、ホストからコールされた時に、自動的にコールされる。
【００６６】
本メソッドがコールされると、クロックオブジェクトは、以下の属性を設定する。
ＴｒｕｓｔＭｏｄｅ＝Ｔｉｍｅｒ
ＨａｖｅＨｉｇｈ＝０（すなわち、偽）
ＨａｖｅＬｏｗ＝０（すなわち、偽）
揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅ＝不揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅ＋ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅ
【００６７】
さらに、メモリ変数ＭｏｎｏｔｏｎｉｃＩｎｃｒｅｍｅｎｔが０に設定される。このメモリ変数は、不揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅの最新値が保存された以降の揮発性ＭｏｎｏｔｏｎｉｃＢａｓｅの増分回数を表すものである。
【００６８】
この設定操作により、揮発性ＭｏｎｏｔｉｎｉｃＢａｓｅが（リセットクロック（ＲｅｓｅｔＣｌｏｃｋ）メソッドコールにより、ＭｏｎｏｔｏｎｉｃＲｅｓｅｒｖｅ値に達するまで、一気に増加することがあっても）常に増加することが保証される。
【００６９】
クロックオブジェクトによって返されるブール値の結果は、リセットクロック（ＲｅｓｅｔＣｌｏｃｋ）メソッドが実行されたかどうかを示すものである。
【００７０】
４．３  ＳｅｔＣｌｏｃｋＨｉｇｈメソッド
ＳｅｔＣｌｏｃｋＨｉｇｈメソッドは、以下の形式を有している。
ＴａｂｌｅＮａｍｅ．ＳｅｔＣｌｏｃｋＨｉｇｈ［ＥｘａｃｔＴｉｍｅ：ｓｎｔｐ＿ｔｉｍｅ，ＬａｇＴｉｍｅ：ｓｎｔｐ＿ｔｉｍｅ］
＝＞
［Ｒｅｓｕｌｔ：Ｂｏｏｌｅａｎ］
【００７１】
本メソッドは、図１のソース１６２などの高信頼ソースをもとに時間を設定するために、ホストによって用いられる。
【００７２】
図２は、ＳｅｔＣｌｏｃｋＨｉｇｈメソッドが動いている間に、ホストと周辺装置の間でやりとりされるメッセージストリームの例を示す図である。
【００７３】
ＨｉｇｈＴｒｕｓｔＥｘａｃｔＴｉｍｅを設定すると、ホストアプリケーションは、図２のステップ２００で、遅れタイマ１７０（図１）を起動し、クロックソース１６２からＥｘａｃｔＴｉｍｅを読取り、ステップ２０１で、上述した形式のパラメータとして、ＥｘａｃｔＴｉｍｅ値をクロックオブジェクト１２４に送る。この時点で、ＬａｇＴｉｍｅパラメータは、その値が未定であるため、送られるパラメータの中には含まれていないか、パラメータにヌル値に設定されている。ステップ２０２で、クロックオブジェクト１２４は、ＥｘａｃｔＴｉｍｅ値を受け取り、その値を、揮発性メモリ上のクロックテーブル１４０のＨｉｇｈＴｉｍｅの列に格納し、さらに、ステップ２０３で、クロックタイムが記録されたことをホストアプリケーションに対して通知する。ブール値の“Ｏｋａｙ”結果には、操作が成功した場合には真が設定され、操作が失敗した場合には偽が設定される。また、ステップ２０４で、クロックオブジェクトは、タイマ１８０の値を読取り、その値を、クロックテーブルのＨｉｇｈＩｎｉｔｉａｌＴｉｍｅの列に記録する。クロックオブジェクト１２４がＥｘａｃｔＴｉｍｅ値を受け取ったことを示す確認を、ホストアプリケーションが受け取ると、ステップ２０４で、ホストアプリケーションは、遅れタイマ１７０の値を読取り、ステップ２０５で、さらなるＳｅｔＣｌｏｃｋＨｉｇｈメッセージのパラメータとして、ＬａｇＴｉｍｅ値をクロックオブジェクト１２４に送る。クロックオブジェクトがこれを受け取ると、ステップ２０６で、クロックテーブルのＨｉｇｈＬａｇの列に、ＬａｇＴｉｍｅ値を格納し、ＨｉｇｈＴｉｍｅとＨｉｇｈＬａｇの値を、不揮発性メモリ上のクロックテーブル１４４に永続的に格納する。
【００７４】
本メソッドコールは、ＴｒｕｓｔＭｏｄｅがＬｏｗでない時のみ、受領される。このコールが受領されると、ＨａｖｅＨｉｇｈは真に設定され、ＨｉｇｈＢｙＷｈｏは、このメッセージングセッションに対する権限所有者に設定される。もし、新しい高信頼値が、以下に示す制約条件に従って、既存の低信頼値を制限することがない場合には、ＨａｖｅＬｏｗは偽に設定される。
【００７５】
ＴｒｕｓｔＭｏｄｅがＬｏｗｈｉｇｈであり、高信頼値と低信頼値の両方が存在する際には、低信頼値は、高信頼値に含まれていなければならない。すなわち、
ＬｏｗＴｉｍｅ  ≧  ＨｉｇｈＴｉｍｅ
ＬｏｗＴｉｍｅ＋ＬｏｗＬａｇ  ≦  ＨｉｇｈＴｉｍｅ＋ＨｉｇｈＬａｇ
【００７６】
ＬｏｗＴｉｍｅ値は、時間を遡ることは許されていないため、ＨｉｇｈＴｉｍｅよりも大きな値でなければならない。また、ＬｏｗＬａｇは、ＨｉｇｈＬａｇよりも短くなければならないため、上記の二番目の不等式が成立しなければならない。そうでない場合には、ＬｏｗＴｉｍｅ値に問題があるということになる。
【００７７】
上記の不等式のいずれか一方が真でない場合には、ＬｏｗＴｉｍｅが誤っている可能性があるため、クロックオブジェクトはそれを破棄し、ＨａｖｅＬｏｗ値を“０”（すなわち偽）に設定する。なお、これらの時間比較を行うステップを実装した場合には、ｔｉｍｅｒ（）の値は、比較式の両辺に現れて消去されるため、その値は不要となる。
【００７８】
４．４  ＳｅｔＣｌｏｃｋＬｏｗメソッド
ＳｅｔＣｌｏｃｋＬｏｗメソッドは、ＳｅｔＣｌｏｃｋＨｉｇｈメソッドと似ており、以下の形式を有している。
ＴａｂｌｅＮａｍｅ．ＳｅｔＣｌｏｃｋＬｏｗ［ＥｘａｃｔＴｉｍｅ：ｓｎｔｐ＿ｔｉｍｅ，ＬａｇＴｉｍｅ：ｓｎｔｐ＿ｔｉｍｅ］
＝＞
［Ｒｅｓｕｌｔ：ｂｏｏｌｅａｎ］
【００７９】
本メソッドは、図１のＰＣクロック１６０などの低信頼ソースをもとに時間を設定するために用いられる。
【００８０】
このメソッドのコールは、上述のＳｅｔＣｌｏｃｋＨｉｇｈと同様の方法でストリーム化されている。ホストは、遅れタイマ１７０を用いてＬｏｗＬａｇ時間を計測しながら、ＬｏｗＴｒｕｓｔＥｘａｃｔＴｉｍｅをクロックオブジェクトに送る。クロックオブジェクトは、クロックテーブルのＬｏｗＴｉｍｅの列のＬｏｗＴｒｕｓｔＥｘａｃｔＴｉｍｅを記録し、タイマ１８０を読取り、その値をクロックテーブルのＬｏｗＩｎｉｔｉａｌＴｉｍｅの列に記録する。クロックオブジェクトが、ＬｏｗＴｉｍｅを記録したことを確認すると、ホストは、クロックオブジェクトにＬｏｗＬａｇ時間値を送り、その値は、テーブルのＬｏｗＬａｇ列に格納される。ＬｏｗＴｉｍｅとＬｏｗＬａｇの両方の値は、いずれかが不揮発性メモリ中で更新される前に、受信される。
【００８１】
本メソッドのコールは、ＴｒｕｓｔＭｏｄｅがＨｉｇｈでない時にのみ受領される。もしモードがＬｏｗＨｉｇｈであり、ＨａｖｅＨｉｇｈが真である場合には、上述した不等式に従って、新しい高信頼値が既存の低信頼値を制限する場合にのみ、このコールが受領される。他の実施例では、他の比較式あるいは制約式を用いることも可能である。
【００８２】
このコールが受領されると、ＨａｖｅＬｏｗは真に設定され、ＬｏｗＢｙＷｈｏはこのセッションに対する権限所有者に設定される。
【００８３】
４．５  ＣｌｏｃｋＳｅｔＭｏｄｅメソッド
本メソッドは、クロックテーブル中のＴｒｕｓｔＭｏｄｅを設定し、以下の形式を有している。
ＴａｂｌｅＮａｍｅ．ＣｌｏｃｋＳｅｔＭｏｄｅ［Ｍｏｄｅ：Ｃｌｏｃｋ＿ｋｉｎｄ］
＝＞
［Ｒｅｓｕｌｔ：ｂｏｏｌｅａｎ］
【００８４】
ＴｒｕｓｔＭｏｄｅがＬｏｗに設定されると、ＨａｖｅＨｉｇｈは偽に設定される。ＴｒｕｓｔＭｏｄｅがＨｉｇｈに設定されると、ＨａｖｅＬｏｗは偽に設定される。ＴｒｕｓｔＭｏｄｅがＬｏｗＨｉｇｈに設定されると、ＨａｖｅＬｏｗ及びＨａｖｅＨｉｇｈは真に設定される。
【００８５】
４．６  ＲｅｎｅｗＣｏｕｎｔｅｒメソッド
ＴａｂｌｅＮａｍｅ．ＲｅｎｅｗＣｏｕｎｔｅｒ［］
＝＞
［Ｒｅｓｕｌｔ：ｂｏｏｌｅａｎ］
【００８６】
ホストは、主記憶媒体上の不揮発性メモリ上のクロックテーブルと、ＲＡＭの揮発性メモリ上のクロックテーブル内の現在値とを同期させようとする任意の時に、本メソッドをコールする。クロックオブジェクトは、現在値を不揮発性メモリに書込み、ＭｏｎｏｔｏｎｉｃＩｎｃｒｅｍｅｎｔを０に設定する。なお、本メソッドは、仮想的に変化するＭｏｎｏｔｏｎｉｃＴｉｍｅの値を不変のものにする。
５．結論
【００８７】
このように、上述したクロックオブジェクトは、一定の電力を必要とせずに、単調にイベントを確実に順序付けるために用いられる少なくとも何らかのクロック情報を有する電子装置を提供することが可能である。クロックの時間分解能や、クロック読取りの間の遅れ、あるいは電源リセットに関わらず、クロックオブジェクトは、各クロック読取りに関する、単調に増加する一意の情報を提供する。これは、発生イベントを正確に順序付けることが重要となる、データ記録アプリケーションにおいて特に有用である。例えば、クロックオブジェクトは、否認することができない一連の発生イベントを証明するフォレンジックな記録のための、タイムスタンプを生成することが可能である。
【００８８】
また、クロックオブジェクトは、クロック情報が、高信頼ソースあるいは低信頼ソースのどちらに基づいているかを表す指標を提供したり、クロックエラーやクロック情報の他の制約条件を表す指標を提供する。
【００８９】
以上の説明において、本発明の様々な実施例の多くの特徴と利点について、本発明の様々な構造と機能の詳細と合わせて説明してきたが、本開示は、例示的なものであり、詳細に、特に、特許請求の範囲を表現している用語の一般的な意味の元に示された程度であれば、本発明の原理の範囲内において、構成要素の構造と配置に関する変更を加えることが可能である。例えば、本発明の範囲と主旨を逸脱することなく同一の機能性を実質的に保持しながら、クロックオブジェクトの特定のアプリケーションに応じて、特定の要素を変化させることが可能である。さらに、上述した好適な実施例は、周辺装置のためのクロックオブジェクトに関するものであるが、本発明の教示することは、本発明の範囲と主旨を逸脱することがない限り、任意の電子装置に適用することが可能であることは、当業者にとって理解されうるものである。
【図面の簡単な説明】
【００９０】
【図１】図１は、本発明の一実施例における、ファームウェアが実装されたクロックオブジェクトをもつ周辺装置を有する複数の構成要素からなるプラットフォームのブロック図である。
【図２】図２は、ＣｌｏｃｋＳｅｔＨｉｇｈメソッドの実行中に、ホストと周辺装置との間で交換されるメッセージストリームを示す図である。
【符号の説明】
【００９１】
１０２  ホスト
１０４  周辺装置
１１６  インターフェース
１２２  アクセスコントロールオブジェクト
１２４  クロックオブジェクト
１４０，１４４  クロックテーブル
１４２  揮発性メモリ
１４６  不揮発性メモリ
１５０  プロセッサ 
１６０  ＰＣクロック
１６２  高信頼クロックソース
１８０  タイマ
１９０  リアルタイムクロック
【図１】
2007293861.tif 000004
【図２】
2007293861.tif 000005
【外国語明細書】
2007293861000001.pdf