(57)【要約】  本明細書において開示される例は、ファームウェアインタフェース（ＦＩ）変数リポジトリに書き込まれるデータを示すようにコミットリストを更新することに関する。これらの例は、所与のＳＭＭイベントの間に、コンピューティングデバイスのシステム管理メモリの変数リポジトリキャッシュにターゲットデータを記憶することと、上記所与のＳＭＭイベントの間に、ターゲットデータがＦＩ変数リポジトリに書き込まれることを示すようにコミットリストを更新することと、ターゲットデータの少なくとも或る部分が所与のＳＭＭイベントの間にＦＩ変数リポジトリに書き込まれることなく、所与のＳＭＭイベントを終了することとを含む。【選択図】図１
2016509305.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスの処理リソースによって実行可能な命令を用いてコード化された非一時的マシン可読記憶媒体であって、
システム管理モード（ＳＭＭ）を介してターゲットデータをファームウェアインタフェース（ＦＩ）変数リポジトリに書き込む要求に応答して、所与のＳＭＭイベントの間に、前記コンピューティングデバイスのシステム管理メモリの変数リポジトリキャッシュに前記ターゲットデータを記憶する命令と、
前記所与のＳＭＭイベントの間に、前記ターゲットデータが、前記コンピューティングデバイスの不揮発性メモリに実装された前記ＦＩ変数リポジトリに書き込まれることを示すようにコミットリストを更新する命令であって、該コミットリストは、前記システム管理メモリに記憶されている命令と、
前記コミットリストが更新された後に、前記ターゲットデータの少なくとも或る部分が前記所与のＳＭＭイベントの間に前記ＦＩ変数リポジトリに書き込まれることなく、前記ＳＭＭを抜けることによって前記所与のＳＭＭイベントを終了する命令と
を用いてコード化された非一時的マシン可読記憶媒体。
【請求項２】
前記所与のＳＭＭイベントの間に、補助ＳＭＭイベントをスケジュールする命令と、
前記補助ＳＭＭイベントの間に、前記コミットリストに示された前記ターゲットデータの少なくとも一部分を前記ＦＩ変数リポジトリに書き込む命令と
を更に含む、請求項１に記載の記憶媒体。
【請求項３】
前記補助ＳＭＭイベントの間にＳＭＭ制限時間に達したと判断する命令を更に含み、
前記ＳＭＭイベントを終了する前記命令は、任意のデータが前記ＦＩ変数リポジトリに書き込まれずに残っているものとして前記コミットリストに示されているか否かにかかわらず、前記判断に応答して前記補助ＳＭＭイベントを終了する命令を更に含む、請求項２に記載の記憶媒体。
【請求項４】
複数の補助ＳＭＭイベントのそれぞれの補助ＳＭＭイベントの間に、前記コミットリストに示された前記ターゲットデータのそれぞれの部分を前記ＦＩ変数リポジトリに書き込む命令を更に含む、請求項１に記載の記憶媒体。
【請求項５】
前記コミットリストを更新する前記命令は、前記ターゲットデータを前記コミットリストに書き込む命令を含む、請求項１に記載の記憶媒体。
【請求項６】
前記コミットリストを更新する前記命令は、前記ターゲットデータへの参照子を前記コミットリストに書き込む命令を含み、前記参照子は、少なくとも、前記ターゲットデータが前記変数リポジトリキャッシュに記憶されるロケーションを含んでいる、請求項１に記載の記憶媒体。
【請求項７】
システム管理モード（ＳＭＭ）を介してターゲットデータをファームウェアインタフェース（ＦＩ）変数リポジトリに書き込む要求に応答して、所与のＳＭＭイベントの間に、コンピューティングデバイスのシステム管理メモリの変数リポジトリキャッシュに前記ターゲットデータを記憶するキャッシュエンジンと、
前記ターゲットデータが、前記コンピューティングデバイスの不揮発性メモリに実装された前記ＦＩ変数リポジトリに書き込まれることを示すように、前記所与のＳＭＭイベントの間にコミットリストを更新する更新エンジンであって、該コミットリストは前記システム管理メモリに記憶されている更新エンジンと、
前記コミットリストが更新された後に、前記ターゲットデータの少なくとも或る部分が前記所与のＳＭＭイベントの間に前記ＦＩ変数リポジトリに書き込まれることなく、前記ＳＭＭを抜けることによって前記所与のＳＭＭイベントを終了するイグジットエンジンと、
限られた継続時間の少なくとも１つの補助ＳＭＭイベントのそれぞれの間に、前記コミットリストに示された任意のデータのそれぞれの部分を前記ＦＩ変数リポジトリに書き込む書き込みエンジンと
を備えるシステム。
【請求項８】
前記所与のＳＭＭイベントの間に、前記少なくとも１つの補助ＳＭＭイベントのうちの１つをスケジュールするスケジュールエンジンを更に備えている、請求項７に記載のシステム。
【請求項９】
前記コミットリストが、空の状態から、前記ＦＩ変数リポジトリに書き込まれるデータを示すように更新されることに応答して、前記少なくとも１つの補助ＳＭＭイベントのそれぞれを定期的にトリガするように前記コンピューティングデバイスを構成するスケジュールエンジンを更に備え、
前記スケジュールエンジンは、前記コミットリストが前記ＦＩ変数リポジトリに書き込まれずに残っているデータを示していないとの判断に応答して、前記補助ＳＭＭイベントの前記定期的なトリガを中止するように前記コンピューティングデバイスを更に構成し、
前記少なくとも１つの補助ＳＭＭイベントのそれぞれについて、前記イグジットエンジンは、前記補助ＳＭＭイベントの間にＳＭＭ制限時間に達したことに応答して前記補助ＳＭＭイベントを終了する、請求項７に記載のシステム。
【請求項１０】
前記更新エンジンは、前記コミットリストに示された任意のデータが前記ＦＩ変数リポジトリに書き込まれるように要求された順序を前記コミットリストに指定し、
前記書き込みエンジンは、前記コミットリストに示された任意のデータを前記コミットリストに指定された前記順序で前記ＦＩ変数リポジトリに書き込む、請求項７に記載のシステム。
【請求項１１】
前記コンピューティングデバイスの障害状態に応答して、前記書き込みエンジンをトリガして、前記コミットリストに示された任意のデータを前記ＦＩ変数リポジトリに書き込ませる障害エンジンを更に備える、請求項１０に記載のシステム。
【請求項１２】
前記コンピューティングデバイスの障害状態に応答して行われる前記コンピューティングデバイスのブートプロセスの間に、前記書き込みエンジンに、前記コミットリストに示された任意のデータを前記ＦＩ変数リポジトリに書き込ませる障害エンジンを更に備える、請求項１０に記載のシステム。
【請求項１３】
システム管理モード（ＳＭＭ）を介してターゲットデータをファームウェアインタフェース（ＦＩ）変数リポジトリに書き込む要求に応答して、所与のＳＭＭイベントの間に、コンピューティングデバイスのシステム管理メモリの変数リポジトリキャッシュに前記ターゲットデータを記憶するステップと、
前記所与のＳＭＭイベントの間に、前記ターゲットデータが、前記コンピューティングデバイスの不揮発性メモリに実装された前記ＦＩ変数リポジトリに書き込まれることを示すようにコミットリストを更新するステップであって、該コミットリストは、前記システム管理メモリに記憶されているステップと、
前記所与のＳＭＭイベントの間に補助ＳＭＭイベントをスケジュールするステップと、
前記コミットリストが更新された後に、前記ターゲットデータが前記所与のＳＭＭイベントの間に前記ＦＩ変数リポジトリに書き込まれることなく、前記所与のＳＭＭイベントを終了するステップと
を含む方法。
【請求項１４】
前記補助ＳＭＭイベントの間に、前記コミットリストに示された任意のデータの少なくとも一部分を前記ＦＩ変数リポジトリに書き込むステップと、
前記補助ＳＭＭイベントの間にＳＭＭ制限時間に達したとの判断に応答して、前記補助ＳＭＭイベントの前に前記コミットリストに示されたデータであって、前記補助ＳＭＭイベントの後に前記ＦＩ変数リポジトリに書き込まれずに残っている任意のデータを示すように前記コミットリストを更新するステップと、
データが前記補助ＳＭＭイベントの後に前記ＦＩ変数リポジトリに書き込まれずに残っていることを前記コミットリストが示しているとの判断に応答して、別の補助ＳＭＭイベントをスケジュールするステップとを更に含む、請求項１３に記載の方法。
【請求項１５】
前記スケジュールするステップは、後続のＳＭＭイベントを定期的にトリガするように前記コンピューティングデバイスを構成するステップを含み、前記後続のＳＭＭイベントのうちの１つは、前記補助ＳＭＭイベントである、請求項１３に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピューティングデバイスは、コンピューティングデバイスのシステム管理モード（ＳＭＭ）においてアクセス可能なメモリの一部分に情報を記憶することによって改ざんからその情報を保護することができる。例えば、コンピューティングデバイスは、メモリのそのような部分にファームウェアインタフェース（ＦＩ）変数リポジトリを実装して、そのリポジトリを改ざんから保護することができる。そのような例では、データをＦＩ変数リポジトリに記憶することは、システム管理割り込み（ＳＭＩ）をトリガしてコンピューティングデバイスをＳＭＭに入らせることを含むことができる。ＳＭＭでは、データをリポジトリに書き込むことができる。
【０００２】
以下の詳細な説明は、図面を参照する。
【図面の簡単な説明】
【０００３】
【図１】データがファームウェアインタフェース（ＦＩ）変数リポジトリに書き込まれることを示すようにコミットリストを更新する一例示のコンピューティングデバイスのブロック図である。
【図２】コミットリストに示されたデータをＦＩ変数リポジトリに書き込む一例示のコンピューティングデバイスのブロック図である。
【図３】少なくとも１つの補助システム管理モード（ＳＭＭ）イベントの間に、コミットリストに示されたデータをＦＩ変数リポジトリに書き込むシステムを備える一例示のコンピューティングデバイスのブロック図である。
【図４】データがＦＩ変数リポジトリに書き込まれることを示すようにコミットリストを更新するための一例示の方法のフローチャートである。
【図５】コミットリストに示されたデータを補助ＳＭＭイベントの間にＦＩ変数リポジトリに書き込むための一例示の方法のフローチャートである。
【発明を実施するための形態】
【０００４】
上で述べたように、コンピューティングデバイスは、コンピューティングデバイスのシステム管理モード（ＳＭＭ）においてアクセス可能なメモリの一部分にファームウェアインタフェース（ＦＩ）変数リポジトリを実装することができる。そのような例では、コンピューティングデバイスは、ＳＭＭイベントの間にＦＩ変数リポジトリにアクセスすることができる。コンピューティングデバイスの「ＳＭＭイベント」は、本明細書において用いられるとき、コンピューティングデバイスがＳＭＭにある期間である。そのような例では、ＦＩ変数リポジトリに書き込むために、コンピューティングデバイスは、システム管理割り込み（ＳＭＩ）を発行することによってＳＭＭイベントをトリガして、コンピューティングデバイスをＳＭＭに入らせることができる。ＳＭＭイベントの間、コンピューティングデバイスは、ＦＩ変数リポジトリにデータを書き込むことができる。このＦＩ変数リポジトリは、コンピューティングデバイスの不揮発性メモリデバイスに実装する（例えば、記憶する）ことができる。
【０００５】
しかしながら、ＳＭＭイベントの間に不揮発性メモリデバイスにデータを書き込むことは、許容できないほど長い時間の間、コンピューティングデバイスをＳＭＭに留まらせる場合がある。例えば、不揮発性メモリデバイスが比較的低速である場合、不揮発性メモリデバイスへのコンピューティングデバイスのアクセスが比較的低速である場合、記憶されるデータの量が比較的多い場合、又はそれらが組み合わされた場合、ＳＭＭで費やされる時間は過度に長くなる場合がある。ＳＭＭに過度に長く留まることは、コンピューティングデバイスの動作に悪影響を与える場合があり、例えば、コンピューティングデバイスのオペレーティングシステム（ＯＳ）を誤作動させる場合もあるし、ＯＳをクラッシュさせる場合さえある。
【０００６】
これらの問題に対処するために、本明細書において説明する例は、ターゲットデータをＳＭＭを介してファームウェアインタフェース（ＦＩ）変数リポジトリに書き込む要求に応答して、所与のＳＭＭイベントの間にそのターゲットデータをコンピューティングデバイスのシステム管理メモリの変数リポジトリキャッシュに記憶し、そのターゲットデータがＦＩ変数リポジトリに書き込まれることを示すようにシステム管理メモリのコミットリストを所与のＳＭＭイベントの間に更新し、コミットリストが更新された後に、ターゲットデータの少なくとも或る部分が所与のＳＭＭイベントの間にＦＩ変数リポジトリに書き込まれることなく、所与のＳＭＭイベントを終了することができる。本明細書において説明する例では、コミットリストに示されたデータは、コミットリストが更新された上記所与のＳＭＭイベントの後の補助ＳＭＭイベント（複数の場合もある）の間にＦＩ変数リポジトリに書き込むことができる。
【０００７】
このように、本明細書において説明する例は、ターゲットデータの全てがコンピューティングデバイスの不揮発性メモリに実装されたＦＩ変数リポジトリに書き込まれるのを待つことなくＳＭＭを抜けることができる。したがって、本明細書において説明する例は、データをＦＩ変数リポジトリに書き込む要求に応答してＳＭＭで費やされる時間を制限することができる。幾つかの例では、システム管理メモリアクセス時間は、コンピューティングデバイスのメインメモリのアクセス時間と同様とすることができ、したがって、コンピューティングデバイスの不揮発性メモリに実装されたＦＩ変数リポジトリへのアクセス時間よりもはるかに高速にすることができる。その上、本明細書において説明する幾つかの例では、各補助ＳＭＭイベントの長さは、コンピューティングデバイスがそのようなＳＭＭイベント中に過度に長い間ＳＭＭに留まることを防止するように制限することができる。
【０００８】
次に図面を参照する。図１は、データがファームウェアインタフェース（ＦＩ）変数リポジトリに書き込まれることを示すようにコミットリストを更新する一例示のコンピューティングデバイス１００のブロック図である。「コンピューティングデバイス」は、本明細書において用いられるとき、サーバ（例えば、ラックマウントサーバ、スタンドアローンサーバ、少なくとも１つのブレードサーバ、少なくとも１つのブレードサーバを備えるブレードエンクロージャ、ブレードエンクロージャの、少なくとも１つのブレードサーバを備えるパーティション等）、ワークステーション、デスクトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、モバイルフォン、スマートデバイス、又は他の任意の処理デバイス若しくは処理機器とすることができる。図１の例では、コンピューティングデバイス１００は、処理リソース１１０と、命令１２４、１２６、及び１２８を用いてコード化されたマシン可読記憶媒体１２０とを備える。幾つかの例では、記憶媒体１２０は、追加の命令を含むことができる。幾つかの例では、命令１２４、１２６、１２８、及び記憶媒体１２０に関して本明細書において説明する他の任意の命令は、コンピューティングデバイス１００及び処理リソース１１０からリモートにあるが、コンピューティングデバイス１００及び処理リソース１１０からアクセス可能であるマシン可読記憶媒体上に記憶することができる。
【０００９】
本明細書において説明する例では、処理リソースは、例えば、１つのプロセッサを含むこともできるし、単一のコンピューティングデバイスに含まれるか又は複数のコンピューティングデバイスにわたって分散された複数のプロセッサを含むこともできる。「プロセッサ」は、本明細書において用いられるとき、中央処理装置（ＣＰＵ）、半導体ベースのマイクロプロセッサ、グラフィックス処理ユニット（ＧＰＵ）、命令を取り出して実行するように構成されたフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、マシン可読記憶媒体上に記憶された命令の取り出し及び実行に適した他の電子回路部、又はそれらの組み合わせのうちの少なくとも１つとすることができる。処理リソース１１０は、記憶媒体１２０上に記憶された命令をフェッチ、デコード、及び実行して、以下で説明する機能を実施することができる。他の例では、記憶媒体１２０の命令のうちの任意のものの機能は、電子回路部の形態、マシン可読記憶媒体上にコード化された実行可能命令の形態、又はそれらの組み合わせで実施することができる。
【００１０】
「マシン可読記憶媒体」は、本明細書において用いられるとき、実行可能命令、データ等の情報を収容又は記憶する任意の電子記憶装置、磁気記憶装置、光記憶装置、又は他の物理記憶装置とすることができる。例えば、本明細書において説明する任意のマシン可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、揮発性メモリ、不揮発性メモリ、フラッシュメモリ、記憶ドライブ（例えば、ハードディスク）、任意のタイプの記憶ディスク（例えば、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、他の任意のタイプのコンパクトディスク、ＤＶＤ等）等、又はそれらの組み合わせのうちの任意のものとすることができる。さらに、本明細書において説明する任意のマシン可読記憶媒体は、非一時的とすることができる。
【００１１】
コンピューティングデバイス１００は、システム管理メモリ１４０も備える。幾つかの例では、システム管理メモリ１４０は、システム管理ＲＡＭ（ＳＭＲＡＭ）等のＲＡＭとすることができる。幾つかの例では、システム管理メモリ１４０は、コンピューティングデバイス１００のメインメモリの一部分とすることができる。そのような例では、システム管理メモリ１４０を形成するメインメモリのこの部分は、ＳＭＭにおいてコンピューティングデバイス１００からアクセス可能にすることができるとともに、コンピューティングデバイス１００のいかなるＯＳからもアクセス不能にすることができる。幾つかの例では、メインメモリは、コンピューティングデバイス１００の少なくとも１つのメモリデバイスによって実施することができる。他の例では、システム管理メモリ１４０は、任意のマシン可読記憶媒体とすることができる。
【００１２】
図１の例では、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリに書き込む要求に応答して、命令１２４は、所与のＳＭＭイベントの間に、ターゲットデータ１４８を変数リポジトリキャッシュ１４２に記憶することができる。変数リポジトリキャッシュ１４２は、システム管理メモリ１４０に記憶することができる。本明細書において説明する例では、システム管理モード（ＳＭＭ）は、コンピューティングデバイスの任意のＯＳがサスペンドされている間にコンピューティングデバイスが動作することができるモードとすることができるとともに、ＯＳからアクセス不能なコンピューティングデバイスのリソース（又はこのリソースの一部分）がこのコンピューティングデバイスからアクセス可能であるモードとすることができる。例えば、リソースの特定の部分（例えば、メモリデバイスの特定の部分）は、コンピューティングデバイスのＯＳからアクセス不能にすることができるが、このコンピューティングデバイスがＳＭＭにあるときにこのコンピューティングデバイスのファームウェアを実行している、このコンピューティングデバイスの構成要素からアクセス可能にすることができる。本明細書において説明する例では、コンピューティングデバイスのリソースは、このコンピューティングデバイスの任意の構成要素（例えば、メモリデバイス、マシン可読記憶媒体、処理リソース等）又は機能とすることができる。幾つかの例では、システム管理メモリ１４０（例えば、ＳＭＲＡＭ）は、コンピューティングデバイス１００のＯＳからアクセス不能にすることができるが、ＳＭＭにあるコンピューティングデバイス１００からアクセス可能にすることができる。本明細書において説明する例では、ＳＭＭにおいてアクセス可能であるが、ＯＳから「アクセス不能」であるコンピューティングデバイスのリソース（又はこのリソースの一部分）は、ＳＭＭとは無関係にＯＳからアクセス可能でないリソース又はリソースの一部分とすることができる。また、本明細書において説明する幾つかの例では、ＯＳからアクセス不能であり、ＳＭＭの間コンピューティングデバイスからアクセス可能であるコンピューティングデバイスのリソース（又はその一部分）は、制御がＯＳに渡される前にコンピューティングデバイスのＯＳをブートするブートプロセスの間もコンピューティングデバイスからアクセス可能にすることができる。
【００１３】
幾つかの例では、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリに書き込む要求は、ＳＭＭを呼び出してデータをＦＩ変数リポジトリに書き込むことができるサービスへの、コンピューティングデバイス１００のＯＳ又はファームウェアによるコールとすることができる。そのような例では、このコールに（直接又は間接のいずれかで）応答して、命令１２４は、所与のＳＭＭイベントの間に、ターゲットデータ１４８を変数リポジトリキャッシュ１４２に記憶することができる。幾つかの例では、このサービスは、例えば、コンピューティングデバイス１００のＯＳ及びファームウェアのうちの少なくとも一方に利用可能な「ＳｅｔＶａｒｉａｂｌｅ」サービスとすることができる。幾つかの例では、このサービスへのコールに応答して、コンピューティングデバイス１００は、ＳＭＩをトリガすることができ、ＳＭＩは、コンピューティングデバイス１００をＳＭＭに入らせ、それによって、命令１２４がターゲットデータ１４８を変数リポジトリキャッシュ１４２に記憶することができる所与のＳＭＭイベントを開始することができる。本明細書において説明する例では、「ファームウェア」は、少なくとも１つのマシン可読記憶媒体上に記憶されるとともにコンピューティングデバイスの処理リソースによって実行可能な命令とすることができる。
【００１４】
図１の例では、変数リポジトリキャッシュ１４２は、システム管理メモリ１４０に記憶することができ、ＦＩ変数リポジトリのシステム管理メモリ１４０のコピーとして保持することができる。幾つかの例では、ＦＩ変数リポジトリは、コンピューティングデバイス１００の不揮発性メモリに実装することができる。そのような例では、ＦＩ変数リポジトリは、システム管理メモリ１４０を含むメモリデバイスとは別個のコンピューティングデバイス１００の不揮発性メモリデバイスに実装することができる。幾つかの例では、データは、ＦＩ変数リポジトリに書き込まれる前に変数リポジトリキャッシュ１４２に書き込むことができる。
【００１５】
本明細書において説明する例では、ＦＩ変数リポジトリは、コンピューティングデバイスのファームウェアインタフェースの変数リポジトリとすることができる。本明細書において説明する例では、コンピューティングデバイスのファームウェアインタフェースは、コンピューティングデバイスのファームウェアとコンピューティングデバイスのＯＳとの間のインタフェースを提供する実行可能命令のセットを含むことができる。幾つかの例では、このファームウェアインタフェースは、統一拡張ファームウェアインタフェース（ＵＥＦＩ）仕様に従ったインタフェース、拡張ファームウェアインタフェース（ＥＦＩ）仕様に従ったインタフェース、基本入／出力システム（ＢＩＯＳ）等、又はそれらの組み合わせを含むことができる。
【００１６】
本明細書において説明する例では、ＦＩ変数リポジトリは、コンピューティングデバイスのＯＳ及びファームウェアのためのデータを記憶するリポジトリとすることができる。そのような例では、ＯＳ又はファームウェアは、上記で説明したように、ＳｅｔＶａｒｉａｂｌｅサービス等のサービスをコールすることによって、ＳＭＭを介してＦＩ変数リポジトリに書き込みを行うことができる。そのような例では、ＯＳ又はファームウェアのいずれかは、ＳｅｔＶａｒｉａｂｌｅサービスを用いて、ＳＭＭを介して後に、又はコンピューティングデバイスのブート時間の間にリードバックされる変数をＦＩ変数リポジトリに書き込むことができる。例えば、システムがＯＳを次にブートするときにデータがコンピューティングデバイスに利用可能になり、それによって、コンピューティングデバイスの挙動に何らかの方法で影響を与えるように、ＯＳは、ＳｅｔＶａｒｉａｂｌｅサービスを用いて、そのデータをＦＩ変数リポジトリに書き込むことができる。
【００１７】
図１の例では、コミットリスト１５０は、システム管理メモリ１４０に記憶することができる。コミットリスト１５０は、ＦＩ変数リポジトリに書き込まれるデータのリストとすることができる。幾つかの例では、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリに書き込む要求に応答して、命令１２６は、所与のＳＭＭイベントの間に、ターゲットデータ１４８がＦＩ変数リポジトリに書き込まれることを示すようにコミットリスト１５０を更新することができる。例えば、命令１２６は、ターゲットデータ１４８がＦＩ変数リポジトリに書き込まれることの表示１５２をコミットリスト１５０に書き込むことによってコミットリスト１５０を更新することができる。例えば、命令１２６は、ターゲットデータ１４８を表示１５２としてコミットリスト１５０に書き込むことができる。他の例では、命令１２６は、ターゲットデータ１４８への参照子を表示１５２としてコミットリスト１５０に書き込むことができる。そのような例では、この参照子は、少なくとも、ターゲットデータ１４８が変数リポジトリキャッシュ１４２に記憶されるロケーションと、ターゲットデータ１４８のサイズとを含むことができる。
【００１８】
幾つかの例では、命令１２８は、コミットリスト１５０が命令１２６によって更新された後に、ターゲットデータ１４８の少なくとも或る部分が所与のＳＭＭイベントの間にＦＩ変数リポジトリに書き込まれることなくＳＭＭを抜けることによって、所与のＳＭＭイベントを終了することができる。例えば、命令１２８は、ターゲットデータ１４８のうちのいずれもが所与のＳＭＭイベントの間にＦＩ変数リポジトリに書き込まれることなくＳＭＭを抜けることができ、それによって、所与のＳＭＭイベントを終了することができる。そのような例では、命令１２８は、ターゲットデータ１４８がＦＩ変数リポジトリに書き込まれることを示すように命令１２６がコミットリスト１５０を更新した後であり、かつターゲットデータ１４８のうちのいずれかがＦＩ変数リポジトリに書き込まれる前に所与のＳＭＭイベントを終了することができる。他の例では、命令１２８は、ターゲットデータ１４８の第１の部分が所与のＳＭＭイベントの間にＦＩ変数リポジトリに書き込まれた後であり、かつターゲットデータ１４８の第２の部分がＦＩ変数リポジトリに書き込まれる前に所与のＳＭＭイベントを終了することができる。そのような例では、命令１２８は、ターゲットデータ１４８の全てがＦＩ変数リポジトリに書き込まれる前に所与のＳＭＭイベントを終了することができる。本明細書において説明する例では、ＳＭＭイベントを終了することは、ＳＭＭを抜けることを含む。幾つかの例では、所与のＳＭＭイベントを終了した後にコミットリスト１５０に示されたデータは、コミットリスト１５０が更新された所与のＳＭＭイベントの後の補助ＳＭＭイベント（複数の場合もある）の間にＦＩ変数リポジトリに書き込むことができる。本明細書において説明する例では、補助ＳＭＭイベントは、コミットリストがＦＩ変数リポジトリに書き込まれるデータを示すように更新される所与のＳＭＭイベントの後に生起するＳＭＭイベントとすることができる。
【００１９】
幾つかの例では、命令１２４、１２６、及び１２８は、インストールされるときに、処理リソース１１０によって実行されて、命令１２４、１２６、及び１２８に関して本明細書において説明した機能を実施することができるインストールパッケージの一部とすることができる。そのような例では、記憶媒体１２０は、ＣＤ、ＤＶＤ、若しくはフラッシュドライブ等のポータブル媒体、又はインストールパッケージをダウンロードしてインストールすることができるサーバによって保持されるメモリとすることができる。他の例では、命令１２４、１２６、及び１２８は、処理リソース１１０を備えるコンピューティングデバイス１００上に既にインストールされた単数若しくは複数のアプリケーション、又は構成要素の一部とすることができる。そのような例では、記憶媒体１２０は、ハードドライブ、ソリッドステートドライブ等のメモリを含むことができる。幾つかの例では、図１に関して本明細書において説明した機能は、図２〜図５のうちのいずれかに関して本明細書において説明する機能と組み合わせて提供することができる。
【００２０】
図２は、コミットリスト１５０に示されたデータをＦＩ変数リポジトリに書き込む一例示のコンピューティングデバイス２００のブロック図である。図２の例では、コンピューティングデバイス２００は、図１に関して上記で説明したような処理リソース１１０と、図１に関して上記で説明したような命令１２４、１２６、及び１２８を含む記憶媒体１２０とを備える。図２の例では、記憶媒体１２０は、命令２３０、２３２、及び２３４も含むことができる。幾つかの例では、記憶媒体１２０は、追加の命令を含むことができる。他の例では、命令１２４、１２６、１２８、２３０、２３２、２３４、及び記憶媒体１２０に関して本明細書において説明する他の任意の命令は、コンピューティングデバイス２００及び処理リソース１１０からリモートにあるが、コンピューティングデバイス２００及び処理リソース１１０からアクセス可能であるマシン可読記憶媒体上に記憶することができる。コンピューティングデバイス２００は、図１に関して上記で説明したような、システム管理メモリ１４０に記憶された変数リポジトリキャッシュ１４２及びコミットリスト１５０も備える。図２の例では、コンピューティングデバイス２００は、このコンピューティングデバイス２００の不揮発性メモリ２６０に実装された（例えば、記憶された）ＦＩ変数リポジトリ２６２も備える。
【００２１】
図２の例では、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリに書き込む要求に応答して、命令１２４は、図１に関して上記で説明したように、所与のＳＭＭイベントの間に、ターゲットデータ１４８をシステム管理メモリ１４０の変数リポジトリキャッシュ１４２に記憶することができる。また、この要求に応答して、命令１２６は、図１に関して上記で説明したように、所与のＳＭＭイベントの間に、ターゲットデータ１４８がＦＩ変数リポジトリに書き込まれることを示すようにコミットリスト１５０を更新することができる。例えば、命令１２６は、上記で説明したように、表示１５２をコミットリスト１５０に書き込むことができる。
【００２２】
幾つかの例では、命令２３０は、所与のＳＭＭイベントの間に、少なくとも１つの補助ＳＭＭイベントをスケジュールすることができる。例えば、命令２３０は、補助ＳＭＭイベントを、所与のＳＭＭイベントが終了し、コンピューティングデバイス２００のＯＳがこのコンピューティングデバイス２００の制御を取り戻した後の或る時点において生起するようにスケジュールすることができる。他の例では、命令２３０は、定期的な補助ＳＭＭイベントのトリガを開始するようにコンピューティングデバイス２００を構成することができる。幾つかの例では、命令２３０は、適切な物理レジスタ（複数の場合もある）に書き込みを行い、コンピューティングデバイス２００の実行可能命令によって利用されるメモリに適切な設定を構成することによって、又は他の任意の適した方法で、個々のＳＭＭイベント又は定期的なＳＭＭイベントをスケジュールすることができる。
【００２３】
命令１２８は、コミットリスト１５０が命令１２６によって更新された後に、ターゲットデータ１４８の少なくとも或る部分が所与のＳＭＭイベントの間にＦＩ変数リポジトリに書き込まれることなくＳＭＭを抜けることによって、所与のＳＭＭイベントを終了することができる。幾つかの例では、命令２３０が、少なくとも１つの補助ＳＭＭイベントをスケジュールした後に、命令１２８は、所与のＳＭＭイベントを終了することができる。幾つかの例では、補助ＳＭＭイベント（複数の場合もある）のそれぞれの間に、命令２３２は、コミットリスト１５０に示された任意のデータのそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。他の例では、命令２３２は、補助ＳＭＭイベント（複数の場合もある）のうちの少なくとも幾つかのもののそれぞれの間に、コミットリスト１５０に示された任意のデータのそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。そのような例では、命令２３２は、補助ＳＭＭイベント（複数の場合もある）のうちの幾つかのものの間に、コミットリスト１５０に示されたデータのうちのいずれもＦＩ変数リポジトリ２６２に書き込まない場合がある。本明細書において説明する例では、命令２３２が、データをＦＩ変数リポジトリ２６２に書き込むこともできるし、コンピューティングデバイス２００の他の構成要素（複数の場合もある）、コンピューティングデバイス２００の他の実行可能命令（複数の場合もある）（例えば、ドライバ）等にデータをＦＩ変数リポジトリ２６２に書き込ませることもできる。
【００２４】
幾つかの例では、所与のＳＭＭイベントの後の少なくとも１つの補助ＳＭＭイベントのそれぞれの間に、命令２３２は、ＦＩ変数リポジトリに書き込まれるデータの表示（複数の場合もある）についてコミットリスト１５０を調べることができる。例えば、所与のＳＭＭイベントの後の補助ＳＭＭイベントの間に、命令２３２は、コミットリスト１５０を調べて、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれずに残っていることの表示１５２を特定することができる。そのような例では、命令２３２は、その補助ＳＭＭイベントの間に、コミットリスト１５０に示されたターゲットデータ１４８の少なくとも一部分をＦＩ変数リポジトリ２６２に書き込むことができる。他の例では、命令２３２は、複数の補助ＳＭＭイベントのうちのそれぞれの補助ＳＭＭイベントの間に、コミットリスト１５０に示されたターゲットデータのそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。そのような例では、データがＦＩ変数リポジトリ２６２に書き込まれる複数の補助ＳＭＭイベントは、連続した補助ＳＭＭイベントでない場合がある。例えば、データがＦＩ変数リポジトリ２６２に書き込まれない補助ＳＭＭイベント（複数の場合もある）は、データがＦＩ変数リポジトリ２６２に書き込まれる複数の補助ＳＭＭイベントのうちの幾つかの補助ＳＭＭイベントの間で生起する場合もあるし、データが書き込まれる複数の補助ＳＭＭイベントの前で生起する場合もあるし、それらの組み合わせにおいて生起する場合もある。
【００２５】
幾つかの例では、補助ＳＭＭイベント（複数の場合もある）のそれぞれのものの継続時間は制限される。そのような例では、補助ＳＭＭイベント（複数の場合もある）のそれぞれの間に、命令２３４は、補助ＳＭＭイベントの間にＳＭＭ制限時間に達したか否かを判断することができる。本明細書において説明する例では、ＳＭＭ制限時間の値は、構成可能とすることができる。幾つかの例では、ＳＭＭ制限時間の長さは、ほぼ１００ｍｓ又は他の任意の適した時間とすることができる。
【００２６】
上で述べたように、幾つかの例では、命令２３２は、補助ＳＭＭイベントの間に、コミットリスト１５０に示されたターゲットデータ１４８の少なくとも一部分をＦＩ変数リポジトリ２６２に書き込むことができる。幾つかの例では、書き込まれずに残っているものとしてコミットリスト１５０に示されたターゲットデータ１４８（又はその一部分）のサイズが過度に大きく、補助ＳＭＭイベントにおいてＦＩ変数リポジトリ２６２に書き込むことができない。そのような例では、補助ＳＭＭイベントの間に、命令２３４は、示されたターゲットデータ１４８の全てがＦＩ変数リポジトリ２６２に書き込まれる前において補助ＳＭＭイベント中にＳＭＭ制限時間に達したと判断することができる。この判断に応答して、命令１２８は、その補助ＳＭＭイベントを終了することができる。そのような例では、いずれかのデータがＦＩ変数リポジトリに書き込まれずに残っているものとしてコミットリスト１５０に示されているか否かにかかわらず、命令１２８は、その補助ＳＭＭイベントを終了することができる。
【００２７】
そのような例では、ＳＭＭ制限時間に達したと判断した後であり、かつ命令１２８が補助ＳＭＭイベントを終了する前に、命令１２６は、その補助ＳＭＭイベントの開始時にコミットリスト１５０に示されたデータのどの部分がその補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っているのかを示すようにコミットリスト１５０を更新することができる。そのような例では、補助ＳＭＭイベントが終了するとき、コミットリスト１５０は、その補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っているデータを示すことができる。
【００２８】
幾つかの例では、コミットリスト１５０が、データが補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っていることを示すとともに、コンピューティングデバイス２００が、現在、定期的なＳＭＭイベントをトリガするように構成されていない場合、命令２３０は、命令１２８がその補助ＳＭＭイベントを終了する前に、別の補助ＳＭＭイベントをスケジュールすることができる。そのような例では、この追加のＳＭＭイベントは、ＦＩ変数リポジトリ２６２へのデータの書き込みを継続するのに用いることができる。コンピューティングデバイス２００が、現在、補助ＳＭＭイベントを定期的にトリガするように構成されている場合、ＦＩ変数リポジトリ２６２への書き込みを継続する追加のＳＭＭイベント（複数の場合もある）は、更にスケジュールすることなくトリガされることになる。他の例では、補助ＳＭＭイベントの後に、ＦＩ変数リポジトリ２６２に書き込まれずに残っているデータがなく、命令２３０が、補助ＳＭＭイベントを定期的にトリガするようにコンピューティングデバイス２００を事前に構成していた場合、現在の補助ＳＭＭイベントを終了する前に、命令２３０は、補助ＳＭＭイベントの定期的なトリガを中止するようにコンピューティングデバイス２００を構成することができる。
【００２９】
幾つかの例では、各補助ＳＭＭイベントの間に、命令２３４がＳＭＭ制限時間に達したことを検出する前に、命令２３２は、コミットリスト１５０に示された、いかなる量の任意のデータをも書き込むことができる。そのような例では、命令２３２は、コミットリスト１５０に指定された順序で、先行のＳＭＭイベント（存在する場合）の書き込み動作が中断したデータのポイントから開始して、コミットリスト１５０に示されたデータをＦＩ変数リポジトリ２６２に書き込むことができる。そのような例では、ターゲットデータ１４８の第１の部分が、ＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込まれる場合、命令２３２は、補助ＳＭＭイベントの間にターゲットデータ１４８の残り（又は次の部分）をＦＩ変数リポジトリ２６２に書き込むことができる。
【００３０】
幾つかの例では、命令１２４、１２６、１２８、２３０、２３２、２３４、及び記憶媒体１２０の他の任意の命令は、インストールされるときに、処理リソース１１０によって実行されて、命令１２４、１２６、１２８、２３０、２３２、及び２３４に関して本明細書において説明した機能を実施することができるインストールパッケージの一部とすることができる。そのような例では、記憶媒体１２０は、ＣＤ、ＤＶＤ、若しくはフラッシュドライブ等のポータブル媒体、又はインストールパッケージをダウンロードしてインストールすることができるサーバによって保持されるメモリとすることができる。他の例では、命令１２４、１２６、１２８、２３０、２３２、及び２３４は、処理リソース１１０を備えるコンピューティングデバイス１００上に既にインストールされた単数若しくは複数のアプリケーション、又は構成要素の一部とすることができる。そのような例では、記憶媒体１２０は、ハードドライブ、ソリッドステートドライブ等のメモリを含むことができる。幾つかの例では、図２に関して本明細書において説明した機能は、図１及び図３〜図５のうちのいずれかに関して本明細書において説明する機能と組み合わせて提供することができる。
【００３１】
図３は、少なくとも１つの補助ＳＭＭイベントの間に、コミットリストに示されたデータをＦＩ変数リポジトリに書き込むシステム３２０を備える一例示のコンピューティングデバイス３００のブロック図である。図３の例では、コンピューティングデバイス３００は、図１に関して上記で説明したようなシステム管理メモリ１４０を備える。コンピューティングデバイス３００は、システム管理メモリ１４０にそれぞれ記憶された、図１に関して上記で説明したような変数リポジトリキャッシュ１４２及びコミットリスト１５０も備える。コンピューティングデバイス３００は、図２に関して上記で説明したような不揮発性メモリ２６０に実装されたＦＩ変数リポジトリ２６２も備える。
【００３２】
図３の例では、システム３２０は、エンジン３２４、３２６、３２７、３２８、３３０、及び３３２を備える。幾つかの例では、システム３２０は、追加のエンジンを備えることができる。エンジン３２４、３２６、３２７、３２８、３３０、３３２、及びシステム３２０の他の任意のエンジンのそれぞれは、このそれぞれのエンジンの機能を実施するハードウェア及びプログラミングの任意の組み合わせとすることができる。ハードウェア及びプログラミングのそのような組み合わせは、複数の異なる方法で実施することができる。例えば、このプログラミングは、非一時的マシン可読記憶媒体上に記憶されたプロセッサ実行可能命令とすることができ、このハードウェアは、それらの命令を実行する処理リソースを含むことができる。そのような例では、マシン可読記憶媒体は、処理リソースによって実行されると、システム３２０を実施する命令を記憶することができる。これらの命令を記憶するマシン可読記憶媒体は、当該命令を実行する処理リソースと同じコンピューティングデバイスに統合することもできるし、このマシン可読記憶媒体は、別個のものであるが、コンピューティングデバイス及び処理リソースからアクセス可能にすることもできる。処理リソースは、１つのプロセッサとすることもできるし、単一のコンピューティングデバイスに含まれるか又は複数のコンピューティングデバイスにわたって分散された複数のプロセッサとすることもできる。
【００３３】
幾つかの例では、上記命令は、インストールされるときに、処理リソースによって実行されて、システム３２０を実施することができるインストールパッケージの一部とすることができる。そのような例では、上記マシン可読記憶媒体は、ＣＤ、ＤＶＤ、若しくはフラッシュドライブ等のポータブル媒体、又はインストールパッケージをダウンロードしてインストールすることができるサーバによって保持されるメモリとすることができる。他の例では、上記命令は、処理リソースを備えるコンピューティングデバイス上に既にインストールされた単数若しくは複数のアプリケーション、又は構成要素の一部とすることができる。そのような例では、上記マシン可読記憶媒体は、ハードドライブ、ソリッドステートドライブ等のメモリを含むことができる。
【００３４】
図３の例では、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリ２６２に書き込む要求に応答して、キャッシュエンジン３２４は、図１の命令１２４に関して上記で説明したように、所与のＳＭＭイベントの間に、コンピューティングデバイス３００のシステム管理メモリ１４０の変数リポジトリキャッシュ１４２にターゲットデータ１４８を記憶することができる。幾つかの例では、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリに書き込む要求は、図１に関して上記で説明したように、ＳＭＭを呼び出してデータをＦＩ変数リポジトリに書き込むことができるサービスへの、コンピューティングデバイス３００のＯＳ又はファームウェアによるコールとすることができる。そのような例では、サービスへのコールに応答して、コンピューティングデバイス３００は、図１の命令１２４に関して上記で説明したように、ＳＭＩをトリガすることができ、ＳＭＩは、コンピューティングデバイス３００をＳＭＭに入らせ、それによって、エンジン３２４がターゲットデータ１４８を変数リポジトリキャッシュ１４２に記憶することができる所与のＳＭＭイベントを開始することができる。
【００３５】
図３に示す例では、ターゲットデータ１４８をＦＩ変数リポジトリ２６２に記憶する要求は、変数データ１４４及び１４６をＦＩ変数リポジトリ２６２にそれぞれ記憶する事前の要求に従うことができる。そのような例では、これらの事前の要求に応答して、キャッシュエンジン３２４は、ターゲットデータ１４８に関して上記で説明したように、それぞれのＳＭＭイベントの間に、変数データ１４４及び１４６を変数リポジトリキャッシュ１４２に記憶することができる。そのような例では、図３に示すように、キャッシュエンジン３２４が、所与のＳＭＭイベントの間にターゲットデータ１４８を変数リポジトリキャッシュ１４２に記憶するとき、変数データ１４４及び１４６は、変数リポジトリキャッシュ１４２に既に記憶されている場合がある。
【００３６】
また、所与のＳＭＭイベントの間にターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリに書き込む要求に応答して、更新エンジン３２６は、図１に関して上記で説明したように、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すようにコミットリスト１５０を更新することができる。上で述べたように、コミットリスト１５０は、ＦＩ変数リポジトリ２６２に書き込まれるデータのリストとすることができる。図３の例では、変数データ１４４及び１４６を記憶する事前の要求に応答して、更新エンジン３２６は、それぞれのＳＭＭイベントの間に、変数データ１４４及び１４６のそれぞれがＦＩ変数リポジトリ２６２に書き込まれることを示すようにコミットリスト１５０を更新することができる。例えば、変数データ１４４及び１４６は、コミットリスト１５０にそれぞれ書き込むことができる。
【００３７】
図３の例では、変数データ１４４がＦＩ変数リポジトリ２６２に書き込まれ、変数データ１４４がＦＩ変数リポジトリ２６２に書き込まれずに残っていることの表示を削除するようにコミットリスト１５０が更新された後に、所与のＳＭＭイベントが生起する場合がある。そのような例では、図３に示すように、更新エンジン３２６が、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すようにコミットリスト１５０を更新するとき、コミットリスト１５０は、変数データ１４６がＦＩ変数リポジトリ２６２に書き込まれることをまだ示すことができる。
【００３８】
幾つかの例では、更新エンジン３２６は、データがＦＩ変数リポジトリ２６２に書き込まれるように要求された順序をコミットリスト１５０に指定する。そのような例では、コミットリスト１５０に指定された順序は、データがＦＩ変数リポジトリ２６２に書き込まれる順序とすることもできる。このように、本明細書において説明する例は、データがＦＩ変数リポジトリ２６２に書き込まれるように要求された順序でデータをＦＩ変数リポジトリ２６２に書き込むことができる。更新エンジン３２６は、順序をコミットリストに任意の適した方法で指定することができる。例えば、データ又はデータへの参照子を、そのデータがＦＩ変数リポジトリ２６２に書き込まれるように要求された順序でコミットリスト１５０に記憶することができる。
【００３９】
図３の例では、スケジュールエンジン３２７は、所与のＳＭＭイベントの間に、少なくとも１つの補助ＳＭＭイベントをスケジュールすることができる。そのような例では、補助ＳＭＭイベント（複数の場合もある）をスケジュールすることによって、コンピューティングデバイス３００は、所与のＳＭＭイベントの後にＳＭＭに再度入ることができる。幾つかの例では、所与のＳＭＭイベントの間に、エンジン３２７は、１つの補助ＳＭＭイベントをスケジュールすることができる。そのような例では、エンジン３２７は、所与のＳＭＭイベントが終了し、コンピューティングデバイス３００のＯＳが動作を再開した後に、ＳＭＭに１回入るようにコンピューティングデバイス３００を構成することができる。そのような例では、各補助ＳＭＭイベントの間に、データが、その補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っている場合、エンジン３２７は、書き込みエンジン３３０がＦＩ変数リポジトリ２６２への書き込みを継続することができる別の補助ＳＭＭイベントをスケジュールすることができる。他の例では、所与のＳＭＭイベントの間に、エンジン３２７は、定期的にＳＭＭに入るようにコンピューティングデバイス３００を構成することによって、少なくとも１つの補助ＳＭＭイベントをスケジュールすることができる。
【００４０】
幾つかの例では、エンジン３２７は、図１に関して上記で説明したように、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すようにコミットリスト１５０を更新することに応答して、補助ＳＭＭイベント（複数の場合もある）をスケジュールすることができる。例えば、エンジン３２７は、コンピューティングデバイス３００のＳＭＭイベントスケジューリングストレージ３５５に適切な構成データを書き込むことによって、補助ＳＭＭイベント（複数の場合もある）をスケジュールすることができる。幾つかの例では、ストレージ３５５は、コンピューティングデバイス３００の物理レジスタ（複数の場合もある）、コンピューティングデバイス３００の実行可能命令によって利用されるメモリの領域（複数の場合もある）等とすることができる。他の例では、エンジン３２７は、他の任意の適した方法で補助ＳＭＭイベント（複数の場合もある）をスケジュールすることができる。
【００４１】
幾つかの例では、コミットリスト１５０が、空の状態から、ＦＩ変数リポジトリ２６２に書き込まれるデータを示すように更新されることに応答して、エンジン３２７は、（例えば、ＳＭＩを定期的にトリガしてＳＭＭに入ることによって）補助ＳＭＭイベントを定期的にトリガするようにコンピューティングデバイス３００を構成することができる。本明細書において説明する例では、コミットリスト１５０の空の状態は、コミットリストがＦＩ変数リポジトリ２６２に書き込まれるデータを示していない状態とすることができる。一例として、コミットリスト１５０が、所与のＳＭＭイベントの前に空であるとともに、この所与のＳＭＭイベントの間において、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すようにエンジン３２６がコミットリスト１５０を更新する場合、これに応答して、エンジン３２７は、補助ＳＭＭイベント（複数の場合もある）を定期的にトリガするようにコンピューティングデバイス３００を構成することができる。
【００４２】
そのような例では、スケジュールエンジン３２７は、コミットリスト１５０がＦＩ変数リポジトリに書き込まれずに残っているデータを示していないとの判断に応答して、補助ＳＭＭイベント（複数の場合もある）の定期的なトリガを中止するようにコンピューティングデバイス３００を更に構成することができる。例えば、コミットリスト１５０に示されたターゲットデータ１４８の書き込みが、補助ＳＭＭイベント（複数の場合もある）のうちの１つの間に完了した場合、書き込みエンジンは、コミットリスト１５０が、ＦＩ変数リポジトリ２６２に書き込まれる更なるデータを示していないと判断することができる。これに応答して、スケジュールエンジン３２７は、補助ＳＭＭイベント（複数の場合もある）の定期的なトリガを中止するようにコンピューティングデバイス３００を構成することができる。
【００４３】
図３の例では、イグジット（exit）エンジン３２８は、図１の命令１２８に関して上記で説明したように、コミットリスト１５０が更新された後、ターゲットデータ１４８の少なくとも或る部分が所与のＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込まれることなくＳＭＭを抜けることによって所与のＳＭＭイベントを終了することができる。また、幾つかの例では、スケジュールエンジン３２７は、エンジン３２８が所与のＳＭＭイベントを終了する前に、少なくとも１つの補助ＳＭＭイベントをスケジュールすることができる。
【００４４】
幾つかの例では、補助ＳＭＭイベントのそれぞれは、限られた継続時間を有することができる。そのような例では、補助ＳＭＭイベント（複数の場合もある）のそれぞれについて、イグジットエンジン３２８は、その補助ＳＭＭイベントの間にＳＭＭ制限時間に達したことに応答してその補助ＳＭＭイベントを終了することができる。例えば、補助ＳＭＭイベント（複数の場合もある）のそれぞれの間に、書き込みエンジン３３０は、ＳＭＭ制限に達したか否かを判断することができる。ＳＭＭ制限時間に達したことに応答して、エンジン３２８は、いずれかのデータがＦＩ変数リポジトリ２６２に書き込まれずに残っているものとしてコミットリスト１５０に示されているか否かにかかわらず、補助ＳＭＭイベントを終了することができる。そのような例では、ＳＭＭ制限時間に達したと判断した後であり、かつエンジン３２８が補助ＳＭＭイベントを終了する前に、エンジン３２６は、補助ＳＭＭイベントの開始時にコミットリスト１５０に示されたデータのどの部分が補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っているのかを示すようにコミットリスト１５０を更新することができる。
【００４５】
図３の例では、書き込みエンジン３３０は、限られた継続時間の少なくとも１つの補助ＳＭＭイベントのそれぞれの間に、コミットリスト１５０に示された任意のデータのそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。本明細書において説明する例では、限られた継続時間の補助ＳＭＭイベントは、上記で説明したように、その継続時間がＳＭＭ制限時間及びイグジットエンジン３２８によって制限された補助ＳＭＭイベントとすることができる。そのような例では、補助ＳＭＭイベント（複数の場合もある）のそれぞれの間に、書き込みエンジン３３０は、コミットリスト１５０に示された任意のデータの少なくとも一部分をＦＩ変数リポジトリ２６２に書き込むことができる。エンジン３３０がＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込むデータの量は、ＳＭＭ制限時間の長さに依存することができる。例えば、補助ＳＭＭイベントの間に、エンジン３３０は、コミットリスト１５０に示されたデータを、ＳＭＭ制限時間に達する前に書き込むことができる量だけ書き込むことができる。他の例では、エンジン３３０は、補助ＳＭＭイベント（複数の場合もある）のうちの少なくとも幾つかのもののそれぞれの間に、コミットリスト１５０に示された任意のデータのそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。そのような例では、エンジン３３０は、補助ＳＭＭイベント（複数の場合もある）のうちの幾つかのものの間に、コミットリスト１５０に示されたデータのうちのいずれもＦＩ変数リポジトリ２６２に書き込まない場合がある。本明細書において説明する例では、書き込みエンジン３３０が、データをＦＩ変数リポジトリ２６２に書き込むこともできるし、コンピューティングデバイス３００の他の構成要素（複数の場合もある）、コンピューティングデバイス３００の他の実行可能命令（複数の場合もある）（例えば、ドライバ）等にデータをＦＩ変数リポジトリ２６２に書き込ませることもできる。
【００４６】
各補助ＳＭＭイベントは、継続時間が限られているので、単一の補助ＳＭＭイベントは、コミットリスト１５０に示されたデータの全てをＦＩ変数リポジトリ２６２に書き込むほど十分長くない場合がある。そのような例では、書き込みエンジン３３０は、複数の補助ＳＭＭイベントにわたって、コミットリスト１５０に示されたデータをＦＩ変数リポジトリ２６２に書き込むことができる。そのような例では、書き込みエンジン３３０は、補助ＳＭＭイベントのうちの少なくとも幾つかのもののそれぞれの間に、コミットリスト１５０に示されたデータのそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。幾つかの例では、書き込みエンジン３３０は、補助ＳＭＭイベントのうちの少なくとも１つの間に、示されたデータのうちのいずれもＦＩ変数リポジトリ２６２に書き込まない場合がある。
【００４７】
幾つかの例では、書き込みエンジン３３０は、コミットリスト１５０に示されたデータをコミットリスト１５０に指定された順序でＦＩ変数リポジトリ２６２に書き込む。そのような例では、それぞれの補助ＳＭＭイベント（複数の場合もある）の間に、書き込みエンジン３３０は、コミットリスト１５０に示されたデータがコミットリスト１５０に指定された順序で書き込まれるように、示されたデータのそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。図３に示す例では、例えば、エンジン３２６が、所与のＳＭＭイベントの間に、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すようにコミットリスト１５０を更新した後、コミットリスト１５０は、変数データ１４６及びターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すことができ、変数データ１４６がターゲットデータ１４８の前に書き込まれるように要求されたことを指定することができる。
【００４８】
そのような例では、書き込みエンジン３３０は、限られた継続時間のそれぞれの補助ＳＭＭイベント（複数の場合もある）の間に、コミットリスト１５０に示されたデータ１４６及び１４８のそれぞれの部分をＦＩ変数リポジトリ２６２に書き込むことができる。例えば、書き込みエンジン３３０は、１つの補助ＳＭＭイベント間に、又は複数の補助ＳＭＭイベントにわたって、変数データ１４６及びターゲットデータ１４８をコミットリスト１５０に指定された順序でＦＩ変数リポジトリ２６２に書き込むことができる。
【００４９】
図３の例では、システム３２０は、障害エンジン３３２を更に備える。幾つかの例では、コンピューティングデバイス３００の障害状態の検出に応答して、障害エンジン３３２は、書き込みエンジン３３０をトリガして、コミットリスト１５０に示された任意のデータをＦＩ変数リポジトリ２６２に書き込ませることができる。幾つかの例では、この障害状態は、コンピューティングデバイス３００又はその或る部分（例えば、コンピューティングデバイス３００のＯＳ）の障害を示す任意の状態とすることができる。幾つかの例では、障害状態は、システム例外（例えば、或るタイプの割り込み）、マシンチェック等によって示すことができる。図３の例では、データ１４６及び１４８をＦＩ変数リポジトリ２６２に書き込む前の障害状態の検出に応答して、エンジン３３２は、コンピューティングデバイス３００の任意のリセットの前に、書き込みエンジン３３０に、データ１４６及び１４８をＦＩ変数リポジトリ２６２に書き込ませることができる。このように、本明細書において説明する例は、コンピューティングデバイス３００が、このコンピューティングデバイス３００の障害状態が発生したときにＦＩ変数リポジトリ２６２にまだ書き込まれていない、コミットリスト１５０に示されたデータを失うことを防止することができる。
【００５０】
他の例では、障害エンジン３３２は、コンピューティングデバイス３００の障害状態に応答して行われるコンピューティングデバイス３００のブートプロセスの間に、書き込みエンジン３３０に、コミットリスト１５０に示された任意のデータをＦＩ変数リポジトリ２６２に書き込ませることができる。例えば、コンピューティングデバイス３００の障害状態に応答して、コンピューティングデバイス３００を手動でリセットすることもできるし、障害状態の検出によってリセットをトリガすることもできる。リセットの後、コンピューティングデバイス３００は、ブートプロセスを開始して、コンピューティングデバイス３００のＯＳをブートすることができる。そのような例では、ブートプロセスの間に、障害エンジン３３２は、コミットリスト１５０がＦＩ変数リポジトリ２６２に書き込まれるデータを示していることを検出することができる。コミットリスト１５０に示されたデータを検出したことに応答して、エンジン３３２は、ブートプロセスの間に、書き込みエンジン３３０に、コミットリスト１５０に示されたデータをＦＩ変数リポジトリ２６２に書き込ませることができる。そのような例では、コミットリスト１５０は、コンピューティングデバイス３００のリセットが発生したときにデータが失われないメモリのエリアに記憶される。幾つかの例では、変数リポジトリキャッシュ１４２も、コンピューティングデバイス３００のリセットが発生したときにデータが失われないメモリのエリアに記憶することができる。また、そのような例では、ＦＩ変数リポジトリ２６２及びシステム管理メモリ１４０（変数リポジトリキャッシュ１４２を含む）は、ブートプロセスの間に、コンピューティングデバイス３００の構成要素からアクセス可能にすることができる。
【００５１】
図３の例では、データ１４４、１４６、及び１４８は、それぞれの要求に応答して、変数リポジトリキャッシュ１４２及びＦＩ変数リポジトリ２６２に書き込まれるが、他の例では、データは、ＦＩ変数リポジトリ２６２に書き込む任意の数の要求に応答して、キャッシュ１４２及び変数リポジトリ２６２に書き込むことができる。幾つかの例では、図３に関して本明細書において説明した機能は、図１及び図２並びに図４及び図５のうちのいずれかに関して本明細書において説明する機能と組み合わせて提供することができる。
【００５２】
図４は、データがＦＩ変数リポジトリに書き込まれることを示すようにコミットリストを更新するための一例示の方法４００のフローチャートである。方法４００の実行は、図３のコンピューティングデバイス３００を参照して以下で説明されるが、方法４００の実行に適した他のコンピューティングデバイス（例えば、コンピューティングデバイス１００又は２００）も利用することができる。加えて、方法４００の実施は、そのような例に限定されるものではない。
【００５３】
方法４００の４０５において、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリ２６２に書き込む要求に応答して、エンジン３２４は、所与のＳＭＭイベントの間に、コンピューティングデバイス３００のシステム管理メモリ１４０の変数リポジトリキャッシュ１４２にターゲットデータ１４８を記憶することができる。４１０において、更新エンジン３２６は、所与のＳＭＭイベントの間に、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すようにコミットリスト１５０を更新することができる。上記で説明したように、ＦＩ変数リポジトリ２６２は、コンピューティングデバイス３００の不揮発性メモリに実装することができ、コミットリスト１５０は、システム管理メモリ１４０に記憶することができる。
【００５４】
４１５において、スケジュールエンジン３２７は、上記で説明したように、所与のＳＭＭイベントの間に補助ＳＭＭイベントをスケジュールすることができる。スケジュールエンジン３２７は、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリ２６２に書き込む要求に応答して、補助ＳＭＭイベントをスケジュールすることができる。幾つかの例では、スケジュールエンジン３２７は、後続のＳＭＭイベント（複数の場合もある）を定期的にトリガするようにコンピューティングデバイス３００を構成することによって、補助ＳＭＭイベントをスケジュールすることができる。この後続のＳＭＭイベント（複数の場合もある）のうちの１つは、補助ＳＭＭイベントである。他の例では、エンジン３２７は、１つの補助ＳＭＭイベントをスケジュールすることができる。
【００５５】
４２０において、イグジットエンジン３２８は、コミットリスト１５０が更新された後に、ターゲットデータ１４８が所与のＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込まれることなく、所与のＳＭＭイベントを終了することができる。そのような例では、イグジットエンジン３２８は、ターゲットデータ１４８のうちのいずれかがＦＩ変数リポジトリ２６２に書き込まれる前に、所与のＳＭＭイベントを終了することができ、少なくとも１つの補助ＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込まれるターゲットデータ１４８が残される。
【００５６】
図４のフローチャートは、或る特定の機能の特定の実行順序を示しているが、方法４００は、その順序に限定されるものではない。例えば、このフローチャートに連続して示された機能は、異なる順序で実行することもできるし、同時に又は部分的に同時に実行することもできるし、それらの組み合わせで実行することもできる。幾つかの例では、図４に関して本明細書において説明した機能は、図１〜図３及び図５のうちのいずれかに関して本明細書において説明する機能と組み合わせて提供することができる。
【００５７】
図５は、補助ＳＭＭイベントの間に、コミットリストに示されたデータをＦＩ変数リポジトリに書き込むための一例示の方法５００のフローチャートである。方法５００の実行は、図３のコンピューティングデバイス３００を参照して以下で説明されるが、方法５００の実行に適した他のシステム（例えば、コンピューティングデバイス１００又は２００）を利用することができる。加えて、方法５００の実施は、そのような例に限定されるものではない。
【００５８】
方法５００の５０５において、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリ２６２に書き込む要求に応答して、エンジン３２４は、所与のＳＭＭイベントの間に、コンピューティングデバイス３００のシステム管理メモリ１４０の変数リポジトリキャッシュ１４２にターゲットデータ１４８を記憶することができる。５１０において、更新エンジン３２６は、所与のＳＭＭイベントの間に、ターゲットデータ１４８がＦＩ変数リポジトリ２６２に書き込まれることを示すようにコミットリスト１５０を更新することができる。上記で説明したように、ＦＩ変数リポジトリ２６２は、コンピューティングデバイス３００の不揮発性メモリに実装することができ、コミットリスト１５０は、システム管理メモリ１４０に記憶することができる。
【００５９】
５１５において、スケジュールエンジン３２７は、上記で説明したように、所与のＳＭＭイベントの間に補助ＳＭＭイベントをスケジュールすることができる。スケジュールエンジン３２７は、ターゲットデータ１４８をＳＭＭを介してＦＩ変数リポジトリ２６２に書き込む要求に応答して、補助ＳＭＭイベントをスケジュールすることができる。５２０において、イグジットエンジン３２８は、コミットリスト１５０が更新された後に、ターゲットデータ１４８が所与のＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込まれることなく、所与のＳＭＭイベントを終了することができる。そのような例では、イグジットエンジン３２８は、ターゲットデータ１４８のうちのいずれかがＦＩ変数リポジトリ２６２に書き込まれる前に、所与のＳＭＭイベントを終了することができ、少なくとも１つの補助ＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込まれるターゲットデータ１４８が残される。
【００６０】
所与のＳＭＭイベントが終了した後、コンピューティングデバイス３００は、５２５において、スケジュールされた補助ＳＭＭイベントをトリガすることができる。幾つかの例では、コンピューティングデバイス３００は、５２５において、ＳＭＩをトリガして、コンピューティングデバイス３００をＳＭＭに入らせ、それによって、補助ＳＭＭイベントを開始することができる。
【００６１】
５３０において、書き込みエンジン３３０は、補助ＳＭＭイベントの間に、コミットリスト１５０に示された任意のデータの少なくとも一部分をＦＩ変数リポジトリ２６２に書き込むことができる。例えば、変数データ１４６の一部分及びターゲットデータ１４８の全てがＦＩ変数リポジトリ２６２に書き込まれることをコミットリスト１５０が示している場合、書き込みエンジン３３０は、補助ＳＭＭイベントの間に、変数データ１４６の示された部分をＦＩ変数リポジトリ２６２に書き込むことができる。幾つかの例では、データは、上記で説明したように、或る補助ＳＭＭイベント（複数の場合もある）の間に、ＦＩ変数リポジトリ２６２に書き込まれない場合がある。
【００６２】
５３５において、書き込みエンジン３３０は、補助ＳＭＭイベントの間にＳＭＭ制限時間に達したか否かを判断することができる。達していない場合、書き込みエンジン３３０は、５３０に戻って、コミットリスト１５０に示されたデータをＦＩ変数リポジトリ２６２に書き込むことを継続することができる。５３５において、補助ＳＭＭイベントの間にＳＭＭ制限時間に達していないと判断された場合、方法５００は、５４０に進むことができる。
【００６３】
５４０において、補助ＳＭＭイベントの間にＳＭＭ制限時間に達したとの判断に応答して、更新エンジン３２６は、補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っている、補助ＳＭＭイベントの前にコミットリスト１５０に示されたいずれのデータも示すようにコミットリスト１５０を更新することができる。例えば、書き込みエンジン３３０が、ＳＭＭ制限時間に達する前に、コミットリスト１５０に示された変数データ１４６の一部分をＦＩ変数リポジトリ２６２に書き込んだ場合、５４０において、更新エンジン３２６は、ターゲットデータ１４８が補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っていることを示すようにコミットリスト１５０を更新することができる。例えば、更新エンジン３２６は、変数データ１４６の一部分の表示をコミットリスト１５０から削除することができる。
【００６４】
５４５において、スケジュールエンジン３２７は、データが補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っていることをコミットリスト１５０が示しているか否かを判断することができる。示していない場合、方法５００は、５５５に進むことができ、５５５において、方法５００は終了することができる。エンジン３２７は、５４５において、データが補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っていることをコミットリスト１５０が示していると判断した場合、方法５００は、５５０に進むことができる。
【００６５】
５５０において、データが補助ＳＭＭイベントの後にＦＩ変数リポジトリ２６２に書き込まれずに残っていることをコミットリスト１５０が示しているとの判断に応答して、エンジン３２７は、その補助ＳＭＭイベントの間に、別の補助ＳＭＭイベントをスケジュールすることができる。そのような例では、ターゲットデータ１４８の少なくとも一部分は、この追加の補助ＳＭＭイベントの間にＦＩ変数リポジトリ２６２に書き込むことができる。別の補助ＳＭＭイベントをスケジュールした後、方法５００は５２５に戻ることができる。
【００６６】
図５のフローチャートは、或る特定の機能の特定の実行順序を示しているが、方法５００は、その順序に限定されるものではない。例えば、このフローチャートに連続して示された機能は、異なる順序で実行することもできるし、同時に又は部分的に同時に実行することもできるし、それらの組み合わせで実行することもできる。幾つかの例では、図５に関して本明細書において説明した機能は、図１〜図４のうちのいずれかに関して本明細書において説明した機能と組み合わせて提供することができる。
【図１】
2016509305.tif 000003
【図２】
2016509305.tif 000004
【図３】
2016509305.tif 000005
【図４】
2016509305.tif 000006
【図５】
2016509305.tif 000007
【国際調査報告】
2016509305.tif 000008
2016509305.tif 000009