(57)【特許請求の範囲】
【請求項１】
コンピュータにより実施される方法であって、
複数のオプコードを含む命令を受信する受信ステップであって、各オプコードは、１バイト又は１バイトより長いバイトのデータを含む、受信ステップと、
前記命令を逆アセンブルするステップと、
前記逆アセンブルに基づいて、各オプコード間の境界を識別するテーブルを作成するステップと、
メモリの標準ブロックを作成するために、デバッグ・ブレークポイント・オプコードをオプコードに付加するステップと、
メモリの標準ブロックをアトミックに書き込むことにより、各オプコードをオプコードごとにメモリに書き込むステップと、
を含む、コンピュータにより実施される方法。
【請求項２】
前記メモリを初期化するために、デバッグ・ブレークポイント・オプコードを全てのメモリ位置に書き込むステップ
をさらに含む、請求項１記載のコンピュータにより実施される方法。
【請求項３】
メモリの前記標準ブロックは、３２ビット長又は６４ビット長である、請求項１記載のコンピュータにより実施される方法。
【請求項４】
長いオプコードがメモリの２以上の標準ブロックをまたがる場合を識別するステップと、
前記長いオプコードの第２の部分を第２のメモリ・ブロックに書き込むステップと、
前記長いオプコードの第１の部分を第１のメモリ・ブロックに書き込むステップと、
をさらに含む、請求項１記載のコンピュータにより実施される方法。
【請求項５】
メモリの標準ブロックを作成するために、デバッグ・ブレークポイント・オプコードを前記長いオプコードの前記第２の部分に付加するステップ
をさらに含む、請求項４記載のコンピュータにより実施される方法。
【請求項６】
前のオプコード、及び前記長いオプコードの前記第１の部分を前記第１のメモリ・ブロックに書き込むステップ
をさらに含む、請求項５記載のコンピュータにより実施される方法。
【請求項７】
コンピュータ・システムであって、
プロセッサと、
システム・メモリと、
コンピュータ実行可能命令を記憶した１以上のコンピュータ読み取り可能記憶媒体であって、前記コンピュータ実行可能命令が前記プロセッサにより実行されたとき、前記コンピュータ実行可能命令は、前記プロセッサに、実行可能コードのストリーミングのための方法を実行させ、前記プロセッサは、
複数のオプコードを含む命令を受信する受信ステップであって、各オプコードは、１バイト又は１バイトより長いバイトのデータを含む、受信ステップと、
前記命令を逆アセンブルするステップと、
前記逆アセンブルに基づいて、各オプコード間の境界を識別するテーブルを作成するステップと、
メモリの標準ブロックを作成するために、デバッグ・ブレークポイント・オプコードをオプコードに付加するステップと、
メモリの標準ブロックをアトミックに書き込むことにより、各オプコードをオプコードごとにメモリに書き込むステップと、
を実行するよう動作する、１以上のコンピュータ読み取り可能記憶媒体と、
を備えた、コンピュータ・システム。
【請求項８】
前記プロセッサは、
前記メモリを初期化するために、デバッグ・ブレークポイント・オプコードを全てのメモリ位置に書き込むステップ
をさらに実行するよう動作する、請求項７記載のコンピュータ・システム。
【請求項９】
前記プロセッサは、
長いオプコードがメモリの２以上の標準ブロックをまたがる場合を識別するステップと、
前記長いオプコードの第２の部分を第２のメモリ・ブロックに書き込むステップと、
前記長いオプコードの第１の部分を第１のメモリ・ブロックに書き込むステップと、
をさらに実行するよう動作する、請求項７記載のコンピュータ・システム。
【請求項１０】
実行可能コードデータをストリーミングするための方法をプロセッサに実行させるコンピュータ・プログラムであって、前記方法は、
データ・ページが利用可能でないことを示すフォールトを受信するステップと、
前記データ・ページを含む命令をリクエストするステップと、
リモート・ソースから前記命令を受信する受信ステップであって、前記命令は、複数のオプコードを含み、各オプコードは、１バイト又は１バイトより長いバイトのデータを含む、受信ステップと、
前記命令を逆アセンブルするステップと、
前記逆アセンブルに基づいて、各オプコード間の境界を識別するテーブルを作成するステップと、
長いオプコードがメモリの２以上の標準ブロックをまたがる場合を識別するステップと、
メモリの標準ブロックをアトミックに書き込むことにより、各オプコードをオプコードごとにメモリに書き込むステップと、
前記長いオプコードの第２の部分を第２のメモリ・ブロックに書き込むステップと、
前記長いオプコードの第１の部分を第１のメモリ・ブロックに書き込むステップと、
を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
データの読み込みコマンド及び書き込みコマンドが同時に受信されたとき、レース状態（race  condition）が生じる。これはまた、例えば、書き込みスレッドがデータをメモリに供給すると同時に、あるスレッドがメモリから実行可能データのパケットを実行しているときに起こり得る。結果、コンピュータ・クラッシュ、プログラム・シャットダウン、読み込み／書き込みエラー、又は他の問題が生じ得る。１つのソリューションにおいて、書き込みスレッドがデータを供給するのを待つ間、実行中のスレッドを中断させることができる。しかしながら、スレッドを中断させることは、関連プロセスのパフォーマンス問題を引き起こし得る。例えば、１つのスレッド又は少しのスレッドだけがデータにアクセスするプロセスに関して、数十のスレッド又は数百のスレッドが実行され得るが、ストリーム・フォールト（stream  fault）が発生するたびに、データ供給を待つために全てのスレッドが中断されなければならない場合がある。
【発明の概要】
【０００２】
この概要は、発明を実施するための形態において以下でさらに説明されるコンセプトのうち選択したものを簡略化した形で紹介するために提供される。この概要は、特許請求される主題の主要な特徴又は必要不可欠な特徴を特定することを意図するものではないし、特許請求される主題の範囲を限定するために使用されることを意図するものでもない。
【０００３】
実施形態によって、実行可能コードを逆アセンブルし、メモリ・ページへのライト（write）を順序付けることにより、実行可能コードをロック・フリー形式で供給することが可能となる。これにより、ストリーミング・データの供給を通じて、実行可能コードは、一貫性のある状態を保つことが可能となる。メモリは一貫性のある状態にあるので、バイト・コードがメモリに書き込まれる間、他のスレッドは実行を続けることができる。これにより、より優れたスケーラビリティ及びパフォーマンスが可能となる。
【０００４】
さらなる実施形態は、全プロセスを中断させることなく、又はカーネル・モード・コンポーネントを使用することなく、ユーザ・モードでの実行可能コード・データのストリーミングを可能にする。
【図面の簡単な説明】
【０００５】
本発明の実施形態の上記の利点及び他の利点、並びに特徴をさらに明確にするために、添付の図面を参照することにより、本発明の実施形態のより詳細な説明が提供される。これらの図面は、本発明の代表的な実施形態を示すに過ぎず、したがって、その範囲を限定するものと考えられるべきではないことを理解されたい。添付の図面を使用することにより、本発明がさらに具体的且つ詳細に記載され説明される。
【図１Ａ】一実施形態に従った、時間変化に伴うメモリ・ライトの順序付けを示す図。
【図１Ｂ】一実施形態に従った、時間変化に伴うメモリ・ライトの順序付けを示す図。
【図１Ｃ】一実施形態に従った、時間変化に伴うメモリ・ライトの順序付けを示す図。
【図１Ｄ】一実施形態に従った、時間変化に伴うメモリ・ライトの順序付けを示す図。
【図２】一実施形態に従った、ロック・フリー実行可能コード・データをストリーミングするためのシステムを示す図。
【図３】一実施形態に従った、実行可能コード・データをストリーミングするためのプロセス又は方法のフローチャート。
【図４】実行可能コード・データのロック・フリー・ストリーミングを提供する適切なコンピューティング・ネットワーキング環境の例を示す図。
【発明を実施するための形態】
【０００６】
本明細書で説明するロック・フリー・ソリューションは、最新のプロセッサの２つの特徴を利用する。第１に、プロセッサは、アトミック・３２ビット又は６４ビット・メモリ・アクセス・ライトを提供する。これは、プロセッサが、メモリ内の全ての３２ビット又は６４ビットを確認することを確実にする。第２に、プロセッサは、１バイトのデバッグ・ブレーク・エクセプション・オペレーション・コード（オプコード）を有する。このデバッグ・ブレーク・オプコードにより、プロセッサは、呼び出しスレッドを失敗させることなく、メモリからオプコードを読み込むのをリトライし、オプコードを実行するのをリトライすることが可能となる。
【０００７】
一実施形態において、命令がプロセッサに利用可能になる前に、コードがメモリ内で逆アセンブルされる。この逆アセンブリにより、複数の異なる３２ビット又は６４ビット・ライトを構成するメモリ・ライトの順序付けられたリスト（ordered  list）の作成が可能となる。この逆アセンブリ及び解析は、クライアント上又はサーバ上で実行することができる。クライアント上でのこのオペレーションの実行は、増大したプロセッサ・サイクルを犠牲にして、ネットワーク伝送を節約するのに対し、サーバ上でのこのオペレーションの実行は、より大きなネットワーク伝送を意味するが、クライアント・ノードにおけるより少ないプロセッサ・オペレーションしか要さない。
【０００８】
メモリ・ページが割り当てられるとき、全ページが、１バイトのエクセプション・コードをもって書き込まれる。ストリーム・フォールト・ハンドラ（stream  fault  handler）は、書き込まれた、又は無効であるページ及び位置のリストを保つ。
【０００９】
ページの終わりにおいて始まる逆アセンブルされた３２ビット又は６４ビット・ブロックを用いて、オプコードがメモリに書き込まれる。交互に、アセンブリ・ツリーを解析して、リーフ・オプコード（leaf  opcode）を識別することができる。リーフ・オプコードは、他のオプコードにより呼び出されるオプコードである。リーフ・オプコードは、オプコード実行呼び出しグラフ（opcode  execution  call  graph）の走査（traversal）により識別することができる。こうしたリーフ・オプコードは、最初にメモリに書き込まれ得る。
【００１０】
３２ビット以下であるオプコード（又は、他の実施形態では、６４ビット以下であるオプコード）に対して、プロセッサが命令を無事実行するように、全オプコードがメモリに書き込まれる。オプコードが、３２ビット（又は、他の実施形態では、６４ビット）よりも大きい場合、オプコードの「終わり」が最初に書き込まれる。オプコードの終わりを最初に書き込むことにより、オプコードがまだ書き込まれている間にプロセッサが命令を実行する場合、プロセッサは、デバッグ・ブレーク・オプコードを最初に実行する。これにより、ストリーム・フォールト・ハンドラは、オプコードを書き込むのを終了することが可能となり、プロセッサは、オプコードをリトライすることができる。３２ビット・ライト（又は６４ビット・ライト）が２以上のオプコードをまたぐ場合、リトライを可能にするよう、デバッグ・ブレーク・オプコードが書き込まれる。３２ビット・ライト（又は６４ビット・ライト）がすでに書き込まれている場合、オプコードが有効なままであるケースでは、以前の値が書き込まれる。
【００１１】
デバッグ・ブレークにより間隔のあけられた逆アセンブルされたオプコードを書き込むことにより、プロセッサは、無効なデバッグ・ブレークポイント又は有効な実行可能コードに遭遇する。アプリケーションが無効なデバッグ・ブレークポイントを実行する場合、エクセプションがアプリケーションに提供される前に、本明細書で説明するストリーム・フォールト・インタセプタ（stream  fault  interceptor）が、エクセプションをインタセプトする。ストリーム・フォールト・インタセプタは、メモリが有効になるまで待機し、その後、オプコードをリトライする。ストリーム・フォールト・インタセプタは、ストリーム・フォールトする一部として生じるブレークポイント間を差別化するために、ページ及び書き込まれたオプコードのテーブルを使用することができる。オプコードは、リトライされなければならないか、又は、デバッガ又はアプリケーションにより使用されなければならない。オプコードは、再度アプリケーションに渡されなければならない。有効な実行可能コードの場合、アプリケーションは、無事コードを実行する。結果として、ストリーム・フォールト・ハンドラは、ストリーム・フォールトの結果を供給するとき、プロセスにおけるスレッドの全てを中断させる必要がない。
【００１２】
図１Ａ〜図１Ｄは、一実施形態に従った、時間変化に伴うメモリ・ライトの順序付け（ordering）を示している。この例において使用されるプログラム・コードは、命令：０ｘＡＢ  ０ｘＥ９  ０ｘ００  ０ｘＦＥ  ０ｘ７０  ０ｘ０８．．．を含む。逆アセンブラは、このコードを次のオプコードに分割する：
（１）：０ｘＡＢ
（２）：０ｘＥ９  ０ｘ００  ０ｘＦＥ  ０ｘ７０  ０ｘ０８
（３）：．．．
最初のオプコードは１バイト長であり、２番目のオプコードは５バイト長である。様々な長さの追加のオプコードが同様に識別される。
【００１３】
メモリ１０１は、複数の３２ビット・ブロック１０２〜１０４を含む。他の実施形態では、メモリ・ブロックは、６４ビット又は何らかの他のサイズであってもよい。図１Ａは、メモリ１０１の全てが１バイトのデバッグ・ブレークポイント・オプコード０ｘＣＣで埋められている最初の状態を示している。スレッドが、この時点でメモリ１０１から命令を読み込む場合、デバッグ・ブレークポイント・オプコードは、ストリーム・ハンドラにコードをメモリ１０１にロードするよう試みさせ、その後、スレッドは、コードを読み取るのをリトライする。
【００１４】
図１Ｂにおいて、最初のオプコード０ｘＡＢが、３２ビット・ブロック１０２ｂに書き込まれている。まず、１バイトのオプコード０ｘＡＢが、最初の０ｘＣＣを置換するアトミック・ライト（atomic  write）により、メモリ１０１に書き込まれる。書き込みオペレーションは、３２ビットのデータを書き込む必要がある。命令が、メモリに書き込む前に逆アセンブルされているので、書き込みオペレーションは、何バイト書き込まれているかをトラッキングし、全３２ビット・ブロックを埋めるためにブロック１０２ｂの残りの２４ビットを０ｘＣＣで埋めることを認識している。プロセッサが最初の命令０ｘＡＢを実行する場合、最初の命令は成功する。しかしながら、プロセッサが、この時点で２番目の命令を実行しようと試みる場合、デバッグ・ブレークポイント０ｘＣＣが読み込まれ、ストリーム・フォールト・リトライ・メカニズム（stream  fault  retry  mechanism）が引き継ぐ。
【００１５】
ストリーム・フォールト・ハンドラは、次に、２番目のオプコード（すなわち、０ｘＥ９  ０ｘ００  ０ｘＦＥ  ０ｘ７０  ０ｘ０８）を書き込む必要がある。ストリーム・フォールト・ハンドラは、前の命令（０ｘＡＢ）が書き込まれたことを認識しており、ブロック１０２ｂ〜１０４ｂがどのように書き込まれたかを認識している。ストリーム・フォールト・ハンドラはまた、次のオプコードがどれくらいの長さであり、メモリ１０１にどのように書き込まれる必要があるかを認識している。詳細には、ストリーム・フォールト・ハンドラは、２番目の５バイトのオプコードが、オプコード０ｘＡＢの後にブロック１０２ｂ及びブロック１０３ｂに書き込まれることを認識している。ストリーム・フォールト・ハンドラは、２番目のオプコードが、１つの３２ビット・ブロック１０２ｂ内の残りのスペースに収まらないと判定する。したがって、２番目のオプコードは、メモリ・ブロック１０２ｂと１０３ｂとの間で分割されなければならない。
【００１６】
図１Ｃに示されるように、オプコードの第１の部分が書き込まれる前に、オプコードの第２の部分（すなわち、０ｘ７０  ０ｘ０８）が、ブロック１０３ｃに書き込まれる（３２ビットを埋めるために、デバッグ・ブレークポイント０ｘＣＣでパディングされる）。オプコードの第２の部分を最初に書き込むことにより、プロセッサが、０ｘＡＢブロックの後のオプコードを実行する場合、プロセッサは、デバッグ・フォールトを発生させ（incur）、ガーベッジ（garbage）を実行しようとはしない。
【００１７】
オプコードの第２の部分がブロック１０３ｃに書き込まれた後、第１の部分（すなわち、０ｘＥ９  ０ｘ００  ０ｘＦＥ）が、メモリ１０１に書き込まれ得る。図１Ｄに示されるように、この第１の部分は、最初のオプコード０ｘＡＢがブロック１０２ｄに前に割り当てられた位置に続いて書き込まれる。この時点で、プロセッサは、両方の命令を無事実行することができるようになる。全ページがレジデントになるまで、命令をメモリ１０１に書き込むこのプロセスが、オプコードごとに適用され得る。
【００１８】
図２は、実施形態に従った、ロック・フリー実行可能コード・データをストリーミングするためのシステムを示している。オペレーティング・システム２０１上で実行されるアプリケーションは、メモリからデータ・ページ２０２を読み込もうと試みる。実行可能メモリの非レジデント・ページ（non-resident  page）が呼び出されると、これは、オペレーティング・システム・エクセプション２０３をトリガし、オペレーティング・システム２０１に、この呼び出しが失敗したことを通知する。アプリケーションがこのフォールトを確認する前に、オペレーティング・システム２０１は、読み込み失敗リターン・コードをストリーム・フォールト・インタセプタ２０４に送信する。ストリーム・フォールト・インタセプタ２０４は、そのデータベース内でページを調べ、ページを取り出す必要があると判定する。ストリーム・フォールト・インタセプタ２０４は、例えば、ネットワーク・サーバ２０５からページを取得するためにネットワーク呼び出しを行い、データ・ページ２０２にデータを書き込むことができるように、ページのメモリ・アクセスを変更する。
【００１９】
既存のシステムにおいて、ストリーム・フォールト・インタセプタ２０４は、データをリクエストしたプロセスを中断させる必要があるであろう。プロセスが中断されない場合、データがメモリに書き込まれているとき、別のスレッドがページ２０２上のデータを実行し得、プロセスが部分データを実行しようと試みるとき、プロセスはクラッシュするであろう。ページ２０２がメモリに書き込まれた後、ストリーム・フォールト・インタセプタがオペレーティング・システム・エクセプションを「成功」に変え、アプリケーションが実行を続けるとともに、プロセスを再開させることができるであろう。
【００２０】
既存のシステムにおいて、全プロセスを中断させるこのステップは必要である。というのは、データ・ページ２０２へのアクセスを変更することと、データ・ページ２０２にデータを書き込むこととは、単一のステップで実現することができないからである。これは、ストリーム・フォールトをサービスしているとき、プロセスにおける２つのスレッドを実行することができないことを意味する。
【００２１】
逆アセンブラ２０６及びリトゥン／アンリトゥン・ページ・トラッカ（written/unwritten  page  tracker）２０７を追加することにより、既存のシステムが、本明細書において改良されている。逆アセンブラ２０６は、返されたバイト・コードを受け取り逆アセンブルする役割を担う。逆アセンブラ２０６は、各オプコードの境界（boundary）を含むオフセットのリストを返す。図１の例に示されるように、各オプコードは、１バイト長又はそれより長いバイトであり得る。リトゥン／アンリトゥン・ページ・トラッカ２０７は、逆アセンブラ２０６により生成されたオフセットのリストに加えて、コミットされたオフセットのリストを含む。
【００２２】
逆アセンブラ２０６及びリトゥン／アンリトゥン・ページ・トラッカ２０７を使用する場合、プロセスは中断される必要がない。代わりに、リクエストされたコードが、サーバ２０５からストリーム・フォールト・インタセプタ２０４に返された後、オフセット・マップ（offset  map）を生成するために、逆アセンブラが呼び出される。次いで、オフセット・マップが、ストリーム・フォールト・インタセプタ２０４により記憶される。ストリーム・フォールト・インタセプタ２０４は、上述したように、オプコードごとに、オプコードをデータ・ページ２０２に書き込むのを開始する。ストリーム・フォールト・インタセプタ２０４は、各オプコードの境界を判定するために、このオフセット・マップを調べる。ストリーム・フォールト・インタセプタ２０４は、オプコードのリストの始め又は終わりで始まる任意の適切な順序で、オプコードをデータ・ページ２０２に書き込むことができる。
【００２３】
プロセッサが部分的に満たされた命令（partially  filled  instruction）を実行する場合等のコンテンションが生じる場合、オペレーティング・システム・フォールト・メカニズム（operating  system  fault  mechanism）２０３がトリガされる。これは、オペレーティング・システム２０１によりストリーム・フォールト・インタセプタ２０４を起動させる。ストリーム・フォールト・インタセプタ２０４は、リトゥン／アンリトゥン・ページ・トラッカ２０７を参照し（consult）、オプコード自体をデータ・ページ２０２に書き込むか、あるいは、別のスレッドがデータを書き込むのを終了するまで待機する。次いで、ストリーム・フォールト・インタセプタ２０４は、エクセプションをリトライする。
【００２４】
図３は、一実施形態に従った、実行可能コード・データをストリーミングするためのプロセス又は方法のフローチャートである。ステップ３０１において、プロセッサは、複数のオプコードを含む命令を受信する。オプコードの各々は、１バイト以上のデータを含み得る。ステップ３０２において、命令を別々のオプコードに逆アセンブルするために、逆アセンブラが使用される。ステップ３０３において、各オプコード間の境界を識別するテーブルが作成される。テーブルは、例えば、リトゥン／アンリトゥン・ページ・トラッカ内に記憶され得る。ステップ３０４において、メモリの標準ブロックをアトミックに書き込むことにより、各オプコードがオプコードごとの形式でメモリに書き込まれる。オプコードは、例えば、ストリーム・フォールト・インタセプタにより、メモリに書き込まれ得る。
【００２５】
いくつかの実施形態において、メモリを初期化するために、デバッグ・ブレークポイント・オプコードが、全てのメモリ位置に書き込まれ得る。オプコードがメモリに書き込まれるとき、メモリの完全な標準ブロックを作成するために、デバッグ・ブレークポイント・オプコードが、オプコードに付加され得る。メモリの標準ブロックは、例えば、３２ビット長又は６４ビット長であり得る。
【００２６】
長いオプコードがメモリの２以上の標準ブロックにまたがる場合、長いオプコードが、２つの部分に分割され得る。長いオプコードの第２の部分が第２のメモリ・ブロックに書き込まれ、次いで、長いオプコードの第１の部分が第１のメモリ・ブロックに書き込まれる。長いオプコードをこのように書き込むことで、全オプコードが書き込まれる前にメモリ位置が読み込まれる場合、デバッグ・ブレークポイントに遭遇することが確実になる。メモリの完全な標準ブロックを作成するために、デバッグ・ブレークポイント・オプコードが、長いオプコードの第２の部分に付加され得る。前のオプコードとともに長いオプコードの第１の部分が、第１のメモリ・ブロックに書き込まれ得る。
【００２７】
図３に示されるプロセスのステップ３０１〜３０５は、同時に実行されてもよいし、且つ／又は、順番に実行されてもよいことが理解されよう。各ステップは、任意の順番で実行されてよく、１回限り又は反復的に実行されてよいことがさらに理解されよう。
【００２８】
図４は、実行可能コード・データのロック・フリー・ストリーミングを提供するために図１〜図３の例を実装することができる適切なコンピューティング・ネットワーキング環境４００の例を示している。コンピューティング・システム環境４００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用又は機能の範囲に関して、限定を示唆するよう意図するものではない。本発明は、多数の他の汎用コンピューティング・システム又は専用コンピューティング・システム、環境、又は構成とともに動作可能である。本発明とともに使用するのに適し得る周知のコンピューティング・システム、環境、及び／又は構成の例は、パーソナル・コンピュータ、サーバ・コンピュータ、ハンドヘルド・デバイス又はラップトップ・デバイス、タブレット・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラム可能な消費家電デバイス、ネットワークＰＣ、ミニコンピュータ、メインフレーム・コンピュータ、前述のシステム又はデバイスのいずれかを含む分散コンピューティング環境等を含むが、これらに限定されるものではない。
【００２９】
本発明は、コンピュータにより実行されるプログラム・モジュール等のコンピュータ実行可能命令の一般的コンテキストにおいて説明することができる。一般に、プログラム・モジュールは、特定のタスクを実行するか、あるいは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。本発明はまた、通信ネットワークを介してリンクされたリモート処理デバイスによりタスクが実行される分散コンピューティング環境において実行することもできる。分散コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカル・コンピュータ記憶媒体及び／又はリモート・コンピュータ記憶媒体に配置させることができる。
【００３０】
図４を参照すると、本発明の様々な態様を実装するための例示的なシステムは、コンピュータ４００の形態の汎用コンピューティング・デバイスを含み得る。コンポーネントは、処理ユニット４０１、システム・メモリ等のデータ・ストレージ４０２、及び、データ・ストレージ４０２を含む様々なシステム・コンポーネントを処理ユニット４０１に接続するシステム・バス４０３等の様々なハードウェア・コンポーネントを含み得るが、これらに限定されるものではない。システム・バス４０３は、メモリ・バス又はメモリ・コントローラ、周辺バス、及び多様なバス・アーキテクチャのいずれかを用いるローカル・バスを含む複数の種類のバス構造のいずれかとすることができる。例えば、そのようなアーキテクチャは、ＩＳＡ（industry  standard  architecture）バス、ＭＣＡ（micro  channel  architecture）バス、ＥＩＳＡ（enhanced  ISA）バス、ＶＥＳＡ（video  electronics  standards  association）ローカル・バス、及びメザニン・バスとしても知られるＰＣＩ（peripheral  component  interconnect）バスを含むが、これらに限定されるものではない。
【００３１】
コンピュータ４００は、通常、多様なコンピュータ読み取り可能媒体４０４を含む。コンピュータ読み取り可能媒体４０４は、コンピュータ４００によりアクセスされ得る任意の利用可能な媒体とすることができ、揮発性媒体及び不揮発性媒体、並びに取り外し可能な媒体及び取り外し不可能な媒体を含むが、伝搬信号は含まない。例えば、コンピュータ読み取り可能媒体４０４は、コンピュータ記憶媒体及び通信媒体を含み得るが、これらに限定されるものではない。コンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、又の他のデータ等の情報を記憶するために任意の方法又は技術により実装された揮発性媒体及び不揮発性媒体、並びに取り外し可能な媒体及び取り外し不可能な媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ、若しくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、若しくは他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージ、若しくは他の磁気ストレージ・デバイス、又は、所望の情報を記憶するために使用することができ、コンピュータ４００によりアクセスされ得る任意の他の媒体を含むが、これらに限定されるものではない。通信媒体は、通常、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、又は他のデータを、搬送波又は他の伝搬機構等の変調されたデータ信号内に具現化するものであって、任意の情報伝達媒体を含む。「変調されたデータ信号」という語は、信号内の情報を符号化するような方式で設定又は変更された特性の１以上を有する信号を意味する。例えば、通信媒体は、有線ネットワーク又は直接配線接続等の有線媒体と、音響、ＲＦ、赤外線、及び他の無線媒体等の無線媒体とを含むが、これらに限定されるものではない。上記の任意の組合せもまた、コンピュータ読み取り可能媒体の範囲内に含まれ得る。コンピュータ読み取り可能媒体は、コンピュータ記憶媒体上に記憶されたソフトウェア等のコンピュータ・プログラム製品として具現化され得る。
【００３２】
データ・ストレージ又はシステム・メモリ４０２は、読み取り専用メモリ（ＲＯＭ）及びランダム・アクセス・メモリ（ＲＡＭ）等の揮発性メモリ及び／又は不揮発性メモリの形態のコンピュータ記憶媒体を含む。メモリ４０２又はコンピュータ読み取り可能媒体４０４は、データ・ページ、オプコード境界リスト、オプコード等を記憶するために使用することができる。例えば起動中にコンピュータ４００内の要素間で情報を伝送するのを助ける基本ルーチンを含むＢＩＯＳ（basic  input/output  system）は、通常、ＲＯＭに記憶されている。ＲＡＭは、通常、処理ユニット４０１が直ちにアクセス可能であり、且つ／又は処理ユニット４０１により現在操作されているデータ及び／又はプログラム・モジュールを含む。例えば、データ・ストレージ４０２は、オペレーティング・システム、アプリケーション・プログラム、並びに、他のプログラム・モジュール及びプログラム・データを保持するが、これらに限定されるものではない。処理ユニット４０１上で実行されるオペレーティング・システムは、オペレーティング・システム・エクセプション２０３、ストリーム・フォールト・インタセプタ２０４、逆アセンブラ２０６、及び／又はリトゥン／アンリトゥン・ページ・トラッカ２０７（図２）等の機能をサポートすることができる。
【００３３】
データ・ストレージ４０２はまた、他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ記憶媒体を含み得る。例えば、データ・ストレージ４０２は、取り外し不可能な不揮発性磁気媒体に対して読み書きするハード・ディスク・ドライブ、取り外し可能な不揮発性磁気ディスクに対して読み書きする磁気ディスク・ドライブ、及び、ＣＤ  ＲＯＭ又は他の光媒体等の取り外し可能な不揮発性光ディスクに対して読み書きする光ディスク・ドライブとすることができる。例示的な動作環境において使用することができる他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ記憶媒体は、磁気テープ・カセット、フラッシュ・メモリ・カード、デジタル多用途ディスク、デジタル・ビデオ・テープ、ソリッド・ステートＲＡＭ、ソリッド・ステートＲＯＭ等を含むが、これらに限定されるものではない。上記において説明し図４に示されるドライブ及び関連するコンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、及び他のデータのストレージをコンピュータ４００に提供する。
【００３４】
ユーザは、ユーザ・インタフェース４０５又は他の入力デバイスを介して、コマンド及び情報を入力することができる。他の入力デバイスとして、タブレット、電子デジタイザ、マイクロフォン、キーボード、及び／又は、一般的にマウス、トラックボール、若しくはタッチ・パッドと呼ばれるポインティング・デバイスがある。他の入力デバイスは、ジョイスティック、ゲーム・パッド、サテライト・ディッシュ、スキャナ等を含み得る。さらに、音声入力、手又は指を用いたジェスチャ入力、又は他のナチュラル・ユーザ・インタフェース（ＮＵＩ）が、マイクロフォン、カメラ、タブレット、タッチ・パッド、グローブ、又は他のセンサ等の適切な入力デバイスとともに使用され得る。これらの入力デバイス及び他の入力デバイスは、しばしば、システム・バス４０３に接続されるユーザ入力インタフェース４０５を介して処理ユニット４０１に接続されるが、パラレル・ポート、ゲーム・ポート、又はＵＳＢ（universal  serial  bus）等の他のインタフェース及びバス構造を介して接続されてもよい。モニタ４０６又は他の種類のディスプレイ・デバイスもまた、ビデオ・インタフェース等のインタフェースを介してシステム・バス４０３に接続される。モニタ４０６はまた、タッチ・スクリーン・パネル等と一体化されてもよい。モニタ及び／又はタッチ・スクリーン・パネルは、コンピューティング・デバイス４００が組み込まれる例えばタブレット型パーソナル・コンピュータのハウジングに物理的に接続され得ることに留意されたい。さらに、コンピューティング・デバイス４００等のコンピュータはまた、スピーカ及びプリンタ等の他の周辺出力デバイスを含み得る。こうした他の周辺出力デバイスは、出力周辺インタフェース等を介して接続され得る。
【００３５】
コンピュータ４００は、論理接続４０７を用いてリモート・コンピュータ等の１以上のリモート・デバイスに接続するネットワーク環境又はクラウド・コンピューティング環境において動作することができる。リモート・コンピュータは、パーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア・デバイス、又は他の共通ネットワーク・ノードであってよく、通常、コンピュータ４００に関して上述した要素の多く又は全てを含む。図４に示される論理接続は、１以上のローカル・エリア・ネットワーク（ＬＡＮ）及び１以上のワイド・エリア・ネットワーク（ＷＡＮ）を含むが、他のネットワークを含んでもよい。そのようなネットワーキング環境は、オフィス、エンタプライズ・ワイド・コンピュータ・ネットワーク（enterprise-wide  computer  network）、イントラネット、及びインタネットにおいて一般的である。
【００３６】
ネットワーク環境又はクラウド・コンピューティング環境において使用されるとき、コンピュータ４００は、ネットワーク・インタフェース又はネットワーク・アダプタ４０７を介して、パブリック・ネットワーク又はプライベート・ネットワークに接続され得る。ネットワーク・インタフェース４０７は、ネットワーク・サーバ２０５（図２）等のリモート・デバイスへの接続を提供することができる。いくつかの実施形態において、ネットワークを介した通信を確立するためのモデム又は他の手段が使用される。内蔵型であっても外付け型であってもよいモデムは、ネットワーク・インタフェース４０７又は他の適切な機構を介してシステム・バス４０３に接続され得る。インタフェース及びアンテナを含む等の無線ネットワーキング・コンポーネントは、アクセス・ポイント又はピア・コンピュータ等の適切なデバイスを介して、ネットワークに接続され得る。ネットワーク環境において、コンピュータ４００に関して示されたプログラム・モジュール又はその一部は、リモート・メモリ・ストレージ・デバイスに記憶され得る。図示されるネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを確立する他の手段が使用されてもよいことが理解されよう。
【００３７】
主題が、構造的特徴及び／又は方法論的動作に特有の言葉で説明されたが、添付の特許請求の範囲において定められる主題は、上述した特定の特徴又は動作に必ずしも限定される必要がないことを理解すべきである。むしろ、上述した特定の特徴及び動作は、請求項を実施するための例示的な形態として開示されたものである。
【図１Ａ】
0006328632.tif 000002
【図１Ｂ】
0006328632.tif 000003
【図１Ｃ】
0006328632.tif 000004
【図１Ｄ】
0006328632.tif 000005
【図２】
0006328632.tif 000006
【図３】
0006328632.tif 000007
【図４】
0006328632.tif 000008