(58)【調査した分野】(Int.Cl.,DB名)
前記記述子テーブルへのアクセス要求に応答して、前記記述子テーブルへアクセスするステップをさらに備え、前記記述子テーブルは前記第1の権限レベルに関連付けられている、請求項1に記載のコンピュータ実施方法。
前記以下の動作は、前記記述子テーブルへのアクセス要求に応答して、前記記述子テーブルへアクセスするステップをさらに備え、前記記述子テーブルは前記第1の権限レベルに関連付けられている、請求項4に記載のコンピューティングシステム。
コンピュータプログラムで符号化されたコンピュータ記録媒体であって、前記コンピュータプログラムは、コンピューティングシステムによって実行されると、前記コンピューティングシステムに以下の動作を実行させる命令を備えており、前記以下の動作は
記述子テーブルを初期化するステップを備え、前記記述子テーブルは、オペレーティングシステムカーネルによって初期化されるとともに、ハードウェアプロセッサに関連付けられており、
前記記述子テーブルに関連付けられている権限レベルを第1の権限レベルへ変更するステップと、
更新要求に応答して、
(A)前記記述子テーブルに関連付けられている権限レベルを第2の権限レベルへ変更し、前記第2の権限レベルは前記第1の権限レベルより高く、
(B)前記記述子テーブルが前記第2の権限レベルに関連付けられた状態で、前記記述子テーブルを更新し、
前記記述子テーブルの更新後、(C)前記記述子テーブルに関連付けられている権限レベルを前記第1の権限レベルへ変更する、ステップを備え、
(A)の変更、(B)の更新、および、(C)の変更は、前記記述子テーブルに制限される、コンピュータ記録媒体。
前記記述子テーブルへのアクセス要求に応答して、前記記述子テーブルへアクセスするステップをさらに備え、前記記述子テーブルは前記第1の権限レベルに関連付けられている、請求項7に記載のコンピュータ記録媒体。
【発明を実施するための形態】
【0009】
様々な図面中の同様の参照番号および名称は、同様の要素を示す。
【0010】
図1は、コンピュータセキュリティを改善するための例示的なシステム100を示す。シス
テム100は、CPU102、記述子テーブルレジスタ104、記述子テーブル106、記述子テーブル
の第1のマッピング107、エイリアス記述子テーブル108、メモリマップ110、オペレーティ
ングシステムカーネル112、およびソフトウェアプロセス114を含む。CPU102は、様々なタ
イプのコンピュータプロセッサであってよい。例えば、CPU102は、x86プロセッサ、x86互
換プロセッサ、またはx86プロセッサの64ビット系列(64 bit descendant) (例えば、I
ntel Core2またはAMD Opteron)であってよい。他のCPUが使用されてもよい。
【0011】
CPU102は、関連する記述子テーブル106のメモリアドレスを格納する記述子テーブルレ
ジスタ104(「DTレジスタ」)を含むことができる。例えば、CPU102は、割り込み記述子テ
ーブルのメモリアドレスを格納する割り込み記述子テーブルレジスタを含むことができる
。
図1は、単一のDTレジスタ104を示しているが、CPU102は、様々な記述子テーブル106に
対応する複数のDTレジスタ104を含むことができる。例えば、割り込み記述子テーブルレ
ジスタに加えて、CPU102は、グローバル記述子テーブルに関連付けられたメモリアドレス
を格納するグローバル記述子テーブルレジスタを含むことができる。DTレジスタ104は、
物理メモリアドレスまたは仮想メモリアドレスを格納することができる。
【0012】
DTレジスタ104に格納される値は、オペレーティングシステムカーネル112によってプロ
グラムされ得る。例えば、システム100の初期化中(例えば、ブート時)、オペレーティン
グシステムカーネル112は、エイリアス記述子テーブル108に関連付けられたメモリアドレ
ス(例えば、仮想メモリアドレス)を格納することができる。いくつかの実施形態では、DT
レジスタ104に格納される値は、初期化以外のときにプログラムされてよい。
【0013】
メモリマップ110は、どのようにメモリが編成されるかを記述する、CPU102に関連付け
られたメモリ管理モジュール(例えば、仮想メモリマップ)であってよい。例えば、メモリ
マップ110は、メモリサイズ、オペレーティングシステムの使用のために予約されたメモ
リの領域、および/または、ソフトウェアプロセス114によって使用またはアクセスされ得
るメモリの領域を記述する情報を含むことができる。加えて、メモリマップ110は、メモ
リアドレスが、読み取り専用権限または読み書き権限のどちらに関連付けられているのか
を指定するために使用されてよい。例えば、オペレーティングシステムカーネル112は、
記述子テーブル106またはエイリアス記述子テーブル108に関連付けられた権限を変更する
ために、メモリマップ110を変更することができる。加えて、メモリマップ110は、論理/
仮想メモリアドレスを物理メモリアドレスに翻訳するために、CPU102、またはCPU102に関
連付けられたメモリマネージャによって使用されてよい。
【0014】
記述子テーブル106は、例えば、様々なソフトウェアルーチンまたはデータ構造に関連
付けられたメモリアドレス、メモリセグメント記述子、CPUに関連付けられた特権レベル(
例えば、「コールゲート」)を変更するためのメカニズム、および他のデータを含むこと
ができる。例えば、記述子テーブル106は、割り込みベクタテーブルを実装するために使
用され得る割り込み記述子テーブルであってよい。いくつかの実施形態では、割り込み記
述子テーブルは、割り込みハンドラに関連付けられたメモリアドレスを含み、割り込みハ
ンドラは、割り込み(例えば、ハードウェア割り込み、ソフトウェア割り込み、および/ま
たはプロセッサ例外(まとめて「割り込み」と呼ばれる))を、それらがトリガされるとき
に処理するソフトウェアプロセスまたはルーチンであってよい。例えば、割り込み記述子
テーブルは、タイマ割り込みに対応するテーブル内の位置に、割り込みハンドラ(T0_Int_
Handler)に関連付けられたメモリアドレスを格納することができる。タイマ割り込みがト
リガされると、オペレーティングシステムは、割り込み記述子テーブルにアクセスするこ
とができ、T0_Int_Handlerがタイマ割り込みに応答して実行されるべきであることを決定
する。
【0015】
メモリマップ110を使用して、記述子テーブル106は、様々な権限レベルに関連付けられ
得る。例えば、記述子テーブル106は、読み取り専用権限を有することができ、読み取り
専用権限は、記述子テーブル106および記述子テーブル106に格納された値が変更されるの
を防止する。加えて、記述子テーブル106は、読み書き権限を有することができ、読み書
き権限は、記述子テーブル106および記述子テーブル106に格納された値が変更されること
を許可する。記述子テーブル106に関連付けられた権限レベルは、オペレーティングシス
テムカーネル112によって変更され得る。例えば、オペレーティングシステムカーネル112
は、記述子テーブル106の権限を読み書きから読み取り専用に変更するために、メモリマ
ップ110を使用することができる。
【0016】
記述子テーブル106は、様々な物理メモリアドレスに配置されてよい。例えば、記述子
テーブル106は、オペレーティングシステムカーネル112またはCPU102によって、ランダム
なメモリアドレスに作成されてよい。加えて、記述子テーブル106は、固定されたメモリ
アドレスに作成されてよい。加えて、記述子テーブル106は、メモリマップ110によって、
物理メモリ位置から仮想メモリ位置にマッピングされてよい(例えば、マップ記述子テー
ブル107)。マップ記述子テーブル107は、記述子テーブル106に戻って指すことができ、マ
ップ記述子テーブル107に含まれる値は、記述子テーブル106に含まれる値を反映すること
ができる。例えば、記述子テーブル106に含まれる値が変更された場合、マップ記述子テ
ーブル107も、変更された値を反映するように更新される。
【0017】
記述子テーブル106は、メモリマップ110を使用して、第2のアドレスにマッピングされ
てよい(例えば、エイリアス記述子テーブル108)。例えば、記述子テーブル106は、記述子
テーブル106に関連付けられた物理メモリアドレスを指す第2の仮想アドレスにマッピング
されてよい。マップ記述子テーブル107と同様に、エイリアス記述子テーブル108に含まれ
る値は、記述子テーブル106(および、マップ記述子テーブル107)に含まれる値を反映する
ことができる。
【0018】
記述子テーブル106、マップ記述子テーブル107、およびエイリアス記述子テーブル108
は、異なる権限に関連付けられてよい。例えば、記述子テーブル106およびマップ記述子
テーブル107は、読み書き権限に関連付けられてよく、エイリアス記述子テーブル108は、
読み取り専用権限に関連付けられてよい。加えて、記述子テーブル106、マップ記述子テ
ーブル107、およびエイリアス記述子テーブル108に関連付けられた権限レベルは、オペレ
ーティングシステムカーネル112によって変更されてよい。例えば、オペレーティングシ
ステムカーネル112は、エイリアス記述子テーブル108に関連付けられた権限レベルを読み
取り専用であるように設定することができ、記述子テーブル106に関連付けられた権限レ
ベルを読み書きであるように設定することができる。エイリアス記述子テーブル108は、C
PUおよび/またはオペレーティングシステムカーネル112によってアクセスされ得る。いく
つかの実施では、システム100は、マップ記述子テーブル107および/またはエイリアス記
述子テーブル108を含まない。
【0019】
CPU102は、記述子テーブル106のメモリアドレスを提供させる命令を含むことができる
。例えば、CPU102は、DTレジスタ104に格納された値を返させる命令(例えば、SDT命令)を
含むことができる。いくつかの実施形態では、SDT命令は、割り込み記述子テーブルに関
連付けられたメモリアドレスを返す割り込み記述子テーブル格納命令(Store Interrupt
Descriptor Table instruction)(SIDT)、または、グローバル記述子テーブルに関連
付けられたメモリアドレスを返すグローバル記述子テーブル格納命令(Store Global De
scriptor Table instruction)(SGDT)であってよい。命令は、オペレーティングシステ
ムカーネル112によって使用されてよい。ソフトウェアアプリケーションまたはプロセス1
14は、オペレーティングシステム内の欠陥または脆弱性を悪用する可能性があり、オペレ
ーティングシステムカーネル112にSDT命令を発行させる可能性がある。
【0020】
オペレーティングシステムカーネル112は、任意の適切なタイプのオペレーティングシ
ステムカーネルであってよい。オペレーティングシステムカーネル112は、CPUのリソース
、および/または、システム100に関連する他のハードウェアリソースを管理することがで
きる。オペレーティングシステムカーネル112は、システム100上で実行されるソフトウェ
アプロセス114と相互作用することができる。例えば、オペレーティングシステムカーネ
ル112は、ソフトウェアプロセス112から命令を受信することができ、ソフトウェアプロセ
ス114の代わりに、CPU102、および/または、システム100に関連するハードウェアリソー
スと相互作用することができる(例えば、データポートまたは周辺デバイスとデータを交
換することができる)。
【0021】
ソフトウェアプロセス114は、オペレーティングシステムカーネル112と相互作用する1
つまたは複数のソフトウェアアプリケーションまたはプロセスであってよい。いくつかの
実施形態では、ソフトウェアプロセス114は、CPU102に、記述子テーブル106に関連付けら
れたメモリアドレスを提供させることができる。例えば、ソフトウェアプロセス114は、C
PU102に、割り込み記述子テーブルに関連付けられたDTレジスタ104に格納された値を返さ
せるために、SIDT命令を使用する。
【0022】
図2は、コンピュータセキュリティを改善するための例示的なプロセス200のフローチャ
ートである。プロセス200は、(202で)記述子テーブルを生成し、初期化することによって
開始する。例えば、CPU102が(例えば、ブート時に)初期化されると、オペレーティングシ
ステムカーネル112、または、オペレーティングシステムカーネル112に関連するファーム
ウェアは、記述子テーブル106を作成し、初期化することができる。ファームウェアまた
はオペレーティングシステムカーネル112は、割り込みがトリガされると実行されるソフ
トウェアルーチン(例えば、「割り込みハンドラ」)に関連付けられたメモリ位置を含める
ために、記述子テーブル106の値を更新する。オペレーティングシステムカーネル112は、
記述子テーブル106を、第1の仮想メモリアドレス(例えば、マップ記述子テーブル107)に
マッピングすることができる。オペレーティングシステムカーネル112は、初期化された
記述子テーブル116の第2のマッピング(例えば、エイリアス記述子テーブル108)を作成す
ることができる。オペレーティングシステムカーネル112は、マップ記述子テーブル107お
よびエイリアス記述子テーブル108を、異なる仮想メモリアドレスに配置することができ
る。例えば、オペレーティングシステムカーネルは、マップ記述子テーブル107を第1の仮
想メモリアドレスに配置するようメモリマップ110を使用することができ、エイリアス記
述子テーブル108を、第1の仮想メモリアドレスとは異なる第2の仮想メモリアドレスにマ
ッピングするようメモリマップ110を使用することができる。いくつかの実施形態では、
オペレーティングシステムカーネル112は、マップ記述子テーブル107およびエイリアス記
述子テーブル108を、ランダムなメモリ位置に作成する。いくつかの実施形態では、マッ
プ記述子テーブル107は、含まれず、使用されない。
【0023】
記述子テーブルに関連付けられた権限レベルは、(203で)更新される。例えば、オペレ
ーティングシステムカーネル112は、エイリアス記述子テーブル108に関連付けられた権限
レベルを、読み取り専用であるように設定することができ、記述子テーブル106およびマ
ップ記述子テーブル107に関連付けられた権限レベルを、読み書きであるように設定する
ことができる。いくつかの実施形態では、オペレーティングシステムカーネル112は、記
述子テーブル106、マップ記述子テーブル107、およびエイリアス記述子テーブル108に関
連付けられた権限レベルを、メモリマップ110を使用して設定する。
【0024】
オペレーティングシステムカーネルは、(204で)DTレジスタを更新する。例えば、オペ
レーティングシステムカーネル112は、エイリアス記述子テーブル108に関連付けられたメ
モリアドレス(例えば、エイリアス記述子テーブル108に関連付けられた仮想メモリアドレ
ス)を格納するために、DTレジスタ104を更新することができる。
【0025】
プロセス200は、(206で)記述子テーブルに関連付けられたメモリアドレスを返すための
命令を受信することによって継続することができる。例えば、CPU102は、オペレーティン
グシステムカーネル112またはソフトウェアアプリケーション114から、SDT命令を受信す
ることができる。いくつかの実施形態では、SDT命令は、SIDT命令またはSGDT命令である
。
【0026】
命令に応答して、CPUは、(208で)DTレジスタに格納されたメモリアドレスを返す。例え
ば、SDT命令に応答して、CPU102は、204でDTレジスタ104に格納されたエイリアス記述子
テーブル108に関連付けられたメモリアドレスを供給することができる。エイリアス記述
子テーブル108のメモリアドレスは、CPU102によって返されるが、敵対的なソフトウェア
アプリケーション114は、エイリアス記述子テーブル108が読み取り専用権限に関連付けら
れているため、この情報を悪用することができない。敵対的なソフトウェアアプリケーシ
ョン114が、記述子テーブル106にデータを書き込むために、208で返されたエイリアス記
述子テーブル108のメモリアドレスを使用することを試みる場合、オペレーティングシス
テムカーネル112またはメモリマップ110は、エラー(例えば、権限違反)を生成し、敵対的
なソフトウェアアプリケーションがデータを記述子テーブル106に書き込むのを防止する
。したがって、敵対的なソフトウェアアプリケーションは、記述子テーブル106の値また
は内容を変更することができない。
【0027】
代わりに、プロセス200は、(210で)記述子テーブルに格納されたデータを更新するため
の命令を受信することができる。例えば、オペレーティングシステムカーネル112は、記
述子テーブル106が更新されるべきであるという命令を受信することができる。いくつか
の実施形態では、オペレーティングシステムカーネル112は、オペレーティングシステム
機能(例えば、ハードウェアマネージャ)から、記述子テーブルを更新するための命令を受
信することができる。
【0028】
命令に応答して、オペレーティングシステムカーネルは、(212で)記述子テーブルを更
新することができる。例えば、オペレーティングシステムカーネル112は、読み書き権限
に関連付けられたマップ記述子テーブル107にアクセスすることができ、マップ記述子テ
ーブル107内の特定のエントリに関連付けられた値を更新することができる。マップ記述
子テーブル107は、記述子テーブル106のマッピングであるため、記述子テーブル106およ
びエイリアス記述子テーブル108に含まれた値は、更新される。いくつかの実施形態では
、オペレーティングシステムカーネル112は、記述子テーブル106にアクセスし、記述子テ
ーブル106内の値を更新する。
【0029】
図3は、コンピュータセキュリティを改善するための例示的なプロセス300のフローチャ
ートである。プロセス300は、(302で)記述子テーブルを初期化することによって開始する
。例えば、オペレーティングシステムカーネル112は、記述子テーブル106(例えば、割り
込み記述子テーブルまたはグローバル記述子テーブル)を作成することができ、適切なデ
ータ値(例えば、割り込みハンドラに関連付けられたメモリアドレス、または、様々なメ
モリセグメントに関連付けられた特性)を含めるために、記述子テーブル106を初期化する
ことができる。いくつかの実施形態では、オペレーティングシステムカーネル112は、ブ
ート時に記述子テーブル106を初期化する。オペレーティングシステムカーネル112は、記
述子テーブル106に関連付けられた権限を、読み取り専用であるように変更することがで
きる。
【0030】
オペレーティングシステムカーネル112は、(303で)DTレジスタを更新することができる
。例えば、オペレーティングシステムカーネル112は、記述子テーブル106に関連付けられ
たメモリアドレスを、DTレジスタ104内に格納することができる。
【0031】
プロセス300は、(304で)記述子テーブルに関連付けられたメモリアドレスを提供するた
めの命令を受信することによって継続することができる。例えば、CPU102は、オペレーテ
ィングシステムカーネル112またはソフトウェアアプリケーション114からSDT命令を受信
することができる。いくつかの実施形態では、SDT命令は、SIDT命令またはSGDT命令であ
る。命令に応答して、CPUは、(306で)DTレジスタに格納されたメモリアドレス(例えば、
記述子テーブル106のメモリアドレス)を返す。記述子テーブル106のメモリアドレスは、C
PU102によって返されるが、敵対的なソフトウェアアプリケーション114は、記述子テーブ
ル106が読み取り専用権限に関連付けられているため、この情報を悪用することができな
い。敵対的なソフトウェアアプリケーション114が、記述子テーブル106にデータを書き込
むことを試みる場合、オペレーティングシステムカーネル112またはメモリマップ110は、
権限違反を生成する。したがって、敵対的なソフトウェアアプリケーションは、記述子テ
ーブル106の値または内容を変更することができない。
【0032】
代わりに、プロセス300は、(308で)記述子テーブルに格納されたデータを更新するため
の命令を受信することができる。例えば、オペレーティングシステムカーネル112は、記
述子テーブル106が更新されるべきであるという命令を受信することができる。いくつか
の実施形態では、オペレーティングシステムカーネル112は、オペレーティングシステム
機能(例えば、ハードウェアマネージャ)から命令を受信することができる。
【0033】
命令に応答して、オペレーティングシステムカーネルは、(310で)記述子テーブルに関
連付けられた権限レベルを変更することができる。例えば、オペレーティングシステムカ
ーネル112は、記述子テーブル106に関連付けられた権限レベルを、読み取り専用から読み
書きに変更することができる。
【0034】
記述子テーブルに関連付けられた権限レベルが更新された後、記述子テーブルは、(312
で)更新されてよい。例えば、オペレーティングシステムカーネル112は、記述子テーブル
106内の特定のエントリに関連付けられた値を更新することができる。記述子テーブルが
更新された後、記述子テーブルに関連付けられた権限レベルは、(314で)変更されてよい
。例えば、記述子テーブル106が、新しい値を含むように更新された後、オペレーティン
グシステムカーネルは、記述子テーブルに関連付けられた権限レベルを、読み取り専用で
あるように変更することができる。
【0035】
本明細書に記載の主題および動作の実施形態は、本明細書で開示される構造およびそれ
らの構造的等価物を含む、デジタル回路網で、もしくは、コンピュータソフトウェア、フ
ァームウェア、もしくはハードウェアで、または、それらの1つもしくは複数の組み合わ
せで実現されてよい。本明細書に記載の主題の実施形態は、1つまたは複数のコンピュー
タプログラムとして、すなわち、データ処理装置によって実行するための、または、デー
タ処理装置の動作を制御するための、コンピュータ記憶媒体上に符号化されたコンピュー
タプログラム命令の1つまたは複数のモジュールとして実施されてよい。代わりに、また
は加えて、プログラム命令は、データ処理装置によって実行するための適切な受信装置に
伝送するための情報を符号化するために生成された、人工的に生成された伝播信号、例え
ば、機械生成された電気、光、または電磁信号上に符号化されてよい。コンピュータ記憶
媒体は、コンピュータ可読記憶媒体、コンピュータ可読記憶基板、ランダムまたはシリア
ルアクセスメモリアレイもしくはデバイス、または、それらの1つもしくは複数の組み合
わせであってよく、または、それらに含まれてよい。さらに、コンピュータ記憶媒体は、
伝播信号ではないが、コンピュータ記憶媒体は、人工的に生成された伝播信号内に符号化
されたコンピュータプログラム命令の発信元または宛先であってよい。コンピュータ記憶
媒体は、また、1つまたは複数の別個の物理的構成要素または媒体(例えば、複数のCD、デ
ィスク、または他の記憶デバイス)であってよく、またはそれらに含まれてよい。
【0036】
本明細書に記載の動作は、1つもしくは複数のコンピュータ可読記憶デバイスに格納さ
れた、または、他の発信元から受信したデータに対してデータ処理装置によって実行され
る動作として実施されてよい。
【0037】
「データ処理装置」という用語は、例として、プログラム可能プロセッサ、コンピュー
タ、システムオンチップ、または、上記の複数もしくは組み合わせを含む、データを処理
するためのすべての種類の装置、デバイス、および機械を包含する。装置は、特定目的の
論理回路網、例えば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用
途向け集積回路)を含むことができる。装置は、ハードウェアに加えて、問題のコンピュ
ータプログラムのための実行環境を作成するコード、例えば、プロセッサファームウェア
、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロス
プラットフォーム実行時環境、仮想マシン、または、それらの1つもしくは複数の組み合
わせを構成するコードを含むこともできる。装置および実行環境は、ウェブサービス、分
散コンピューティングおよびグリッドコンピューティングインフラストラクチャのような
、様々な異なるコンピューティングモデルインフラストラクチャを実現することができる
。
【0038】
(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコ
ードとしても知られる)コンピュータプログラムは、コンパイルされたまたは翻訳された
言語、宣言型または手続き型言語を含む、任意の形式のプログラミング言語で書かれてよ
く、スタンドアロンプログラムとして、または、モジュール、構成要素、サブルーチン、
オブジェクト、もしくは、コンピューティング環境で使用するのに適した他のユニットと
して、を含む、任意の形態で展開されてよい。コンピュータプログラムは、ファイルシス
テム内のファイルに対応してもよいが、対応する必要はない。プログラムは、他のプログ
ラムまたはデータを保持するファイルの一部(例えばマークアップ言語文書に格納された1
つまたは複数のスクリプト)内に、問題のプログラム専用の単一のファイル内に、または
、複数の連携ファイル(例えば、1つもしくは複数のモジュール、サブプログラム、もしく
はコードの一部を格納するファイル)内に格納されてよい。コンピュータプログラムは、1
つのコンピュータ上で、または、1つのサイトに配置される、もしくは、複数のサイトに
わたって分散され、通信ネットワークによって相互接続される複数のコンピュータ上で実
行されるように展開されてよい。
【0039】
本明細書に記載のプロセスおよび論理フローは、入力データに対して動作し、出力を生
成することによってアクションを実行するために、1つまたは複数のコンピュータプログ
ラムを実行する1つまたは複数のプログラム可能プロセッサによって実行されてよい。プ
ロセスおよび論理フローは、特定目的の論理回路網、例えば、FPGA(フィールドプログラ
マブルゲートアレイ)またはASIC(特定用途向け集積回路)によって実行されてもよく、装
置は、このような特定目的の論理回路網として実施されてよもよい。
【0040】
コンピュータプログラムの実行に適したプロセッサは、例として、汎用および専用マイ
クロプロセッサの両方、ならびに、任意の種類のデジタルコンピュータの任意の1つまた
は複数のプロセッサを含む。一般に、プロセッサは、読み取り専用メモリもしくはランダ
ムアクセスメモリ、またはその両方から、命令およびデータを受信することになる。コン
ピュータの必須要素は、命令にしたがってアクションを実行するためのプロセッサ、なら
びに、命令およびデータを格納するための1つまたは複数のメモリデバイスである。一般
に、コンピュータは、また、データを格納するための1つまたは複数の大容量記憶デバイ
ス、例えば、磁気、光磁気ディスク、または光ディスクを、これらからデータを受信する
、もしくはこれらにデータを転送する、またはその両方を行うために、含むことになり、
または、これらに作動的に結合されることになる。しかしながら、コンピュータは、この
ようなデバイスを有する必要はない。さらに、コンピュータは、別のデバイス、例えば、
数例を挙げると、携帯電話、パーソナルデジタルアシスタント(PDA)、携帯オーディオも
しくはビデオプレイヤ、ゲームコンソール、全地球測位システム(GPS)受信機、または、
携帯用記憶デバイス(例えば、ユニバーサルシリアルバス(USB)フラッシュドライブ)内に
埋め込まれてよい。コンピュータプログラム命令およびデータを格納するのに適したデバ
イスは、例として、半導体メモリデバイス、例えば、EPROM、EEPROM、およびフラッシュ
メモリデバイス、磁気ディスク、例えば、内蔵ハードディスクまたはリムーバブルディス
ク、光磁気ディスク、ならびに、CD-ROMおよびDVD-ROMディスクを含む、すべての形態の
不揮発性メモリ、媒体、およびメモリデバイスを含む。プロセッサおよびメモリは、特定
目的の論理回路網によって補足されてよく、または、特定目的の論理回路網に組み込まれ
てよい。
【0041】
ユーザとの対話を提供するために、本明細書に記載の主題の実施形態は、ユーザに対し
て情報を表示するためのディスプレイデバイス、例えば、CRT(陰極線管)またはLCD(液晶
ディスプレイ)モニタ、ならびに、それによってユーザがコンピュータに入力を提供する
ことができるキーボードおよびポインティングデバイス、例えば、マウスまたはトラック
ボールを有するコンピュータ上で実施されてよい。同様にユーザとの対話を提供するため
に、他の種類のデバイスが使用されてよく、例えば、ユーザに提供されるフィードバック
は、任意の形態の感覚フィードバック、例えば、視覚フィードバック、聴覚フィードバッ
ク、または触覚フィードバックであってよく、ユーザからの入力は、音響、音声、または
触覚入力を含む、任意の形態で受信されてよい。加えて、コンピュータは、ユーザによっ
て使用されるデバイスに文書を送信し、デバイスから文書を受信することによって、例え
ば、ウェブブラウザから受信した要求に応答して、ユーザのクライアントデバイス上のウ
ェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
【0042】
本明細書に記載の主題の実施形態は、例えば、データサーバとしてバックエンド構成要
素を含む、もしくは、例えば、アプリケーションサーバとしてミドルウェア構成要素を含
む、または、例えば、クライアントコンピュータとしてフロントエンド構成要素を含む、
もしくは、1つもしくは複数のこのようなバックエンド、ミドルウェア、もしくはフロン
トエンド構成要素の任意の組み合わせを含むコンピューティングシステム内で実施されて
よく、クライアントコンピュータは、グラフィカルユーザインタフェースまたはウェブブ
ラウザを有し、グラフィカルユーザインタフェースまたはウェブブラウザを介して、ユー
ザは、本明細書に記載の主題の実施形態と相互作用することができる。システムの構成要
素は、任意の形式または媒体のデジタルデータ通信、例えば、通信ネットワークによって
相互接続されてよい。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)
およびワイドエリアネットワーク(「WAN」)、インターネットワーク(例えば、インターネ
ット)、ならびに、ピアツーピアネットワーク(例えば、アドホックピアツーピアネットワ
ーク)を含む。
【0043】
1つまたは複数のコンピュータのシステムは、動作時にアクションを実行させる、また
はシステムにアクションを実行させる、システム上にインストールされたソフトウェア、
ファームウェア、ハードウェア、またはそれらの組み合わせを有することによって、特定
の動作またはアクションを実行するように構成されてよい。1つまたは複数のコンピュー
タプログラムは、データ処理装置によって実行されると、装置にアクションを実行させる
命令を含むことによって、特定の動作またはアクションを実行するように構成されてよい
。
【0044】
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クラ
イアントおよびサーバは、一般に、互いに離れており、典型的には、通信ネットワークを
介して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で
実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生
じる。いくつかの実施形態では、サーバは、(例えば、データを表示させ、クライアント
デバイスと対話するユーザからユーザ入力を受信する目的で)データ(例えば、HTMLページ
)をクライアントデバイスに送信する。クライアントデバイスで生成されるデータ(例えば
、ユーザとの対話の結果)は、サーバでクライアントから受信されてよい。
【0045】
本明細書は、多くの特定の実施の詳細を含むが、これらは、任意の発明の、または特許
請求され得るものの範囲に対する制限として解釈されるべきではなく、特定の発明の特定
の実施形態に固有の特徴の記述として解釈されるべきである。別々の実施形態の文脈で本
明細書に記載される特定の特徴は、単一の実施形態で組み合わせて実施されてもよい。逆
に、単一の実施形態の文脈で記載される様々な特徴は、複数の実施形態で別々に、または
、任意の適切な部分的組み合わせで実施されてもよい。さらに、特徴は、特定の組み合わ
せで作用するように上述され、そのように当初は特許請求されている場合があるが、特許
請求された組み合わせからの1つまたは複数の特徴は、いくつかの場合、組み合わせから
削除されてよく、特許請求された組み合わせは、部分的組み合わせ、または部分的組み合
わせの変形を対象としてよい。
【0046】
同様に、動作は、図面中で特定の順序で示されているが、これは、このような動作が図
示された特定の順序もしくはシーケンシャルな順序で実行されること、または、所望の結
果を達成するために図示されたすべての動作が実行されることを必要とするとして理解さ
れるべきではない。特定の状況では、マルチタスクおよび並列処理が有利であり得る。さ
らに、上述した実施形態の様々なシステム構成要素の分離は、すべての実施形態でこのよ
うな分離を必要とするとして理解されるべきではなく、記載のプログラム構成要素および
システムは、一般に、単一のソフトウェア製品に一緒に統合されてよく、または、複数の
ソフトウェア製品にパッケージ化されてよいことが理解されるべきである。
【0047】
したがって、主題の特定の実施形態を説明してきた。他の実施形態は、以下の特許請求
の範囲内である。いくつかの場合、特許請求の範囲に記載のアクションは、異なる順序で
実行されてよく、所望の結果を依然として達成することができる。加えて、添付の図面に
示されるプロセスは、所望の結果を達成するために、示された特定の順序、またはシーケ
ンシャルな順序を必ずしも必要としない。特定の実施形態では、マルチタスクおよび並列
処理が有利であり得る。