【課題を解決するための手段】
【0004】
本明細書において使用されるような原子的メモリ操作(AMO)は、共有データに対するリード−モディファイ−ライト(read-modify-write)操作を指す。AMOは、あるスレッドのリード−モディファイ−ライト操作が別のスレッドによる干渉なしで実施されるという意味で、原子的である。言い換えれば、スレッドまたはプロセッサが共有データにアクセスする(例えば同時にアクセスする)場合、各リードまたはライトまたはAMOアクセスは、別のアクセスからの干渉なしで、原子的に実施される。
【0005】
一態様では、本発明は、メモリ・ストレージとコントローラとを備えるメモリ・システムのキャッシュ線中でビット配列を実装するための方法に関する。
【0006】
方法は、キャッシュ線中でビット配列を構成するステップを含み、ビット配列はビットの配列を含み、構成するステップはさらに、ビット配列中の各ビットの値を定義するステップを含む。方法はまた、コントローラによってビット配列に対する操作の要求を受け取るステップを含み、要求は、メモリ・ストレージ中におけるキャッシュ線の場所と、要求を指定する情報とを示す。方法はまた、コントローラ(206)によって、この情報を使用して、ビット配列に対する1つまたは複数のアクションを操作について識別するステップを含み、1つまたは複数のアクションは、コントローラ中でエンコードされる。方法はまた、要求を受け取るのに応答して、1つまたは複数のエンコードされたアクションを実行することによって要求を実施するステップを含む。
【0007】
ビット配列は、個々のビットを記憶するデータ構造である。すなわち、各配列要素は、単一のビットに対応する。ビット配列の各要素は、2つの値0と1のうちの一方を記憶する。ビット配列の各要素は、固有のインデックスによって識別される。通常、E個の要素を含むビット配列には、インデックス値0〜(E−1)が使用される。
【0008】
ビット配列を実装することは、ビット配列の個々のビットならびに一群のビットに対してビット単位の論理演算を実施するために、キャッシュ線の少なくとも一部にアクセスするのを可能にすることができる。例えば、ビット配列の各ビットは、メモリ・システムを備えるコンピュータ・システムのリソースのインスタンスを表すことができる。このビット配列に対する操作は、例えば、ユーザ(例えばスレッド)が、対応する1つまたは複数のビットの値を1にセットすることによって原子的にこの1つまたは複数のリソース・インスタンスの「所有者」になるのを可能にすることができる。
【0009】
例えば、ビット配列の各ビットは、複数のスレッドによって共有されるロックのセット中のロックを表すことができる。このビット配列に対する操作は、例えば、スレッドが、高性能に、かつ低プログラミング労力で、複数のロックを原子的に獲得するのを可能にすることができる。
【0010】
例えば、ビット配列の各ビットの1または0の値は、優先キュー中の特定の要素の有無を表すことができる。このような優先キューは、E個までの固有の要素を有し、各要素は、ビット配列の各インデックスに対応するように、0〜E−1の番号が付いた固有の優先順位を有する。
【0011】
これらの特徴は、同時スレッドの場合には特に、従来の方法と比較して、ビット配列に対するより高いレートの操作を可能にできるので有利であろう。これは、ビット配列に対する操作が、他のデータ構造に対する従来の操作よりも速い単純な操作となり得るという事実によるものであろう。
【0012】
これらの特徴は、ビット配列を、複数のスレッドによって同時データ構造として使用するのを可能にすることができる。例えば、要求された操作は、AMOとすることができる。受け取られた要求は、ビット配列に対する操作を求める、複数のスレッドからコントローラによって受け取られた複数の同時要求のうちの1つとすることができる。受け取られた同時要求は、順次実施されるものとすることができる。コントローラは、このような複数の同時スレッドを実施および管理するように適合されたものとすることができる。コントローラは、メモリ・アクセス要求を受け入れる受信機と、返答を返す送信機とを備えることができ、それぞれは、複数の同時スレッドのメモリ・アクセスに応じるために、先入れ先出しバッファ(FIFO)を備えることができる。
【0013】
これらの特徴は、例えば、この要求など、ビット配列にアクセスする要求を複数のスレッドが同時に発行するマルチスレッド化されたアプリケーションで、複数のユーザまたはスレッドがビット配列を利用するための単一のインタフェースを提供することができる。
【0014】
別の利点は、メモリ・システムが、従来の原子的メモリ操作を超えた新しい原子的メモリ操作を実装してビット配列を使用できることであろう。例えば、AMOは、プロセッサ・ストアまたはロード命令の変形とすることができる。
【0015】
要求される操作は、キャッシュ線のアドレスのみを必要とすればよく、ビット配列の要素のアドレスを必要としない。
【0016】
一実施形態によれば、要求は、「最初の0−ビットをフェッチしてセットする」要求を含む。要求を実施するステップは、ビット配列の各ビットをインデックス0から順次読み取るアクションと、値0を有する最初のビットが見つかった場合に、見つかった最初のビットのインデックスを返して、見つかった最初のビットの値を1にセットし、そうでない場合に、事前定義済みの失敗値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。
【0017】
0−ビットという用語は、値0を有するビットを指す。1−ビットという用語は、値1を有するビットを指す。
【0018】
E個の要素を含むビット配列の場合、「最初の0−ビットをフェッチしてセットする」要求は、0〜E−1のうちのインデックス値を返す。ビット配列中に0−ビットが存在しない場合は、事前定義済みの失敗値は、有効なインデックスに対応しないものとすることができる。例えば、失敗値は、E、すなわちビット配列のビット数であってよい。
【0019】
他のビット単位AMOによってキャッシュ線にアクセスすることもできる。例えば、storeAND()のようなビット単位AMOが、128バイト・キャッシュ線内の8バイト・ワードをアドレス指定して修正する。例えば、スレッドが、「最初の0−ビットをフェッチしてセットする」要求を発行して、値0を有する最初のビットのインデックスに対応するリソースを得る。スレッドは、リソースを使用した後、キャッシュ線中の適切なワードに対してstoreAND()操作を発行して、このビットを値0にセットし、したがってリソースを再び利用可能にする。このように、ビット配列を、メモリ・ページ、inode、ディスク・セクタなどの割振りに使用することができる。
【0020】
一実施形態によれば、要求は、「最後の0−ビットをフェッチしてセットする」要求を含み、ビット配列はE個の要素を含む。要求を実施するステップは、ビット配列の各ビットをインデックスE−1から順次読み取るアクションと、ビット配列の、値0を有する最後のビットが見つかった場合に、最後のビットのインデックスを返して、この最後のビットの値を1にセットし、そうでない場合に、事前定義済みの失敗値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。
【0021】
一実施形態によれば、要求は、「1−ビットをカウントする」要求を含む。要求を実施するステップは、ビット配列の各ビットを読み取るアクションと、値1を有するビットの数をカウントするアクションと、カウントの結果を返すアクションと、のうちの1つまたは複数を実施するステップを含む。例えば、このような要求は、ポピュレーション・カウント要求としても知られる。
【0022】
一実施形態によれば、要求は、「孤立した0−ビットをフェッチしてセットする」要求を含む。要求を実施するステップは、ビット配列を読み取って、0値を有するビットの、0個以上の連続的なシーケンスを決定するアクションと、見つかったシーケンスが0個の場合に、事前定義済みの失敗値を返し、そうでない場合に、1つまたは複数の連続的なシーケンスをそれらのビット数に基づいてランク付けし、1つまたは複数の連続的なシーケンスのうちで最小数のビットを有する連続的なシーケンスのビットを選択し、選択されたビットのインデックスを返し、選択されたビットの値を1にセットするアクションと、のうちの1つまたは複数を実施するステップを含む。
【0023】
これは、他の同時操作によって使用されるかもしれない可能な最長の0の連続を保存することができるので、有利であろう。これは、ビット配列が、メモリ・ページやディスク・ブロックなど、何らかのリソースの連続的なインスタンスを表すときに、有利であろう。この場合、0の連続を保存することで、何らかの将来のリソース獲得のために連続的な利用可能なリソースが保存される。このような将来の獲得では、「N個の連続的な0−ビットをフェッチしてセットする」要求をビット配列に対して使用することができる。
【0024】
一実施形態によれば、要求は、「最初の1−ビットをフェッチする」要求を含む。要求を実施するステップは、ビット配列の各ビットをインデックス0から順次読み取るアクションと、値1を有する最初のビットが見つかった場合に、見つかった最初のビットのインデックスを返し、そうでない場合に、事前定義済みの失敗値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。例えば、「最初の1−ビットをフェッチする」要求を使用して、ビット配列に基づく優先キュー中で優先順位の最も高い要素を識別することができる。
【0025】
一実施形態によれば、要求は、「最初の1−ビットをフェッチしてクリアする」要求を含む。要求を実施するステップは、ビット配列の各ビットをインデックス0から順次読み取るアクションと、値1を有する最初のビットが見つかった場合に、見つかった最初のビットのインデックスを返して、見つかった最初のビットの値を0にセットし、そうでない場合に、事前定義済みの失敗値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。例えば、「最初の1−ビットをフェッチしてクリアする」要求を使用して、ビット配列に基づく優先キュー中で優先順位の最も高い要素を識別して除去することができる。
【0026】
一実施形態によれば、要求は、「最後の1−ビットをフェッチしてクリアする」要求を含み、ビット配列はE個の要素を含む。要求を実施するステップは、ビット配列の各ビットをインデックスE−1から順次読み取るアクションと、ビット配列の、値1を有する最後のビットが見つかった場合に、最後のビットのインデックスを返して、最後のビットの値を0にセットし、そうでない場合に、事前定義済みの失敗値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。例えば、「最後の1−ビットをフェッチしてクリアする」要求を使用して、ビット配列に基づく優先キュー中で優先順位の最も低い要素を識別して除去することができる。
【0027】
一実施形態によれば、要求は、「N番目の1−ビットをフェッチする」要求を含み、要求は、Nの値を提供する。要求を実施するステップは、ビット配列の各ビットをインデックス0から順次読み取るアクションと、値1を有するビットのN番目の発生が見つかった場合に、見つかったN番目の1−ビットのインデックスを返し、そうでない場合に、事前定義済みの失敗値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。例えば、要求がNに対して値1を提供する場合は、要求は、「最初の1−ビットをフェッチする」要求と等価である。例えば、4つのスレッドがあるシナリオでは、「N番目の1−ビットをフェッチする」要求により、各スレッドが、優先キュー中の4つの上位要素の1つを識別することができる。
【0028】
一実施形態によれば、要求は、「N番目の1−ビットをフェッチしてクリアする」要求を含み、要求は、Nの値を提供する。要求を実施するステップは、ビット配列の各ビットをインデックス0から順次読み取るアクションと、値1を有するビットのN番目の発生が見つかった場合に、見つかったN番目の1−ビットのインデックスを返して、見つかったビットの値を0にセットし、そうでない場合に、事前定義済みの失敗値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。例えば、性能の異なる2つのスレッドが優先キュー中の要素を処理する場合、速いスレッドおよび遅いスレッドが、Nに対して値1および2をそれぞれ提供すれば、アプリケーション性能目標が最もよく満たされるであろう。
【0029】
一実施形態によれば、要求は、「孤立した1−ビットをフェッチしてクリアする」要求を含む。要求を実施するステップは、ビット配列を読み取って、1の値を有するビットの、0個以上の連続的なシーケンス決定するアクションと、見つかったシーケンスが0個の場合に、事前定義済みの失敗値を返し、そうでない場合に、1つまたは複数の連続的なシーケンスをそれらのビット数に基づいてランク付けし、最小数のビットを有する連続的なシーケンスのビットを選択し、選択されたビットのインデックスを返し、選択されたビットの値を0にセットするアクションと、のうちの1つまたは複数を実施するステップを含む。
【0030】
一実施形態によれば、要求は、「N個の連続的な0−ビットをフェッチしてセットする」要求を含む。要求を実施するステップは、ビット配列を読み取って、0の値を有するN個のビットの、0個以上の連続的なシーケンスを決定するアクションと、見つかったシーケンスが0個の場合に、事前定義済みの失敗値を返し、そうでない場合に、1つまたは複数の連続的なシーケンスのうちで事前定義済みの条件を満たすシーケンスを選択し、選択されたシーケンスの最初のビットのインデックスを返し、選択されたN個のビットを値1にセットするアクションと、のうちの1つまたは複数を実施するステップを含む。
【0031】
これは、例えば、スレッドがN個のリソースのシーケンスの所有権を原子的に獲得するのを可能にすることができる。ビット配列中にN個の連続的な0−ビットが存在しない場合は、事前定義済みの失敗値が返されてよい。このようなリソース・シーケンスは、メモリ・ページ、inode、ディスク・セクタなどの割振りの際に使用することができる。
【0032】
一実施形態によれば、事前定義済みの条件は、シーケンスがビット配列の最初のN個の連続的なビットを含むこと、を含む。一実施形態によれば、ビット配列を循環バッファとして扱うことができ、したがって、N個のビットの連続的なシーケンスは、ビット配列の始めの連続的なシーケンスと、ビット配列の終わりの連続的なシーケンスとからなるものとすることができる。
【0033】
一実施形態によれば、要求は、「N個の指定された0−ビットをフェッチしてセットする」要求を含む。要求を実施するステップは、ビット配列を読み取って、指定されたインデックスにある指定されたビットを突き止めるアクションと、指定されたビットの少なくとも1つのビットが値1を有する場合に、事前定義済みの失敗値を返すアクションと、指定されたビットの各々が値0を有する場合に、指定された各ビットを値1にセットして、事前定義済みの成功値を返すアクションと、のうちの1つまたは複数を実施するステップを含む。これは、スレッドが複数のロックを原子的に得るのを可能にすることができる。
【0034】
「N個の指定された0−ビットをフェッチしてセットする」要求では、要求の中の1つまたは複数の値が、要求される0−ビットのインデックスを効率的に指定することができる。例えば、256個までの要素を含むビット配列の場合、要求は8バイト値を提供することができ、8バイトの各々はビット・インデックスを指定する。8ビット未満を指定するには、バイトのいくつかは同じインデックスを指定する。言い換えれば、S個の0−ビットを指定するには、8バイトは、S個の固有のインデックスを指定する。例えば、1024個までの要素を有するビット配列の場合、要求は64ビット値を提供することができ、最下位の60ビットは、それぞれ10ビットの6つのフィールドとして扱われ、6つのフィールドの各々はビット・インデックスを指定する。
【0035】
本発明の「指定されたN個の0−ビットをフェッチしてセットする」要求は、各プロセスまたはスレッドがロックの共有セットからの複数のロックを保持しなければならない場合の、細分性ロッキング(granular locking)の問題に対処する。この場合、セット中のロックの数は、ビット配列中のビットの数Eまでであり、セット中の各ロックには、0〜E−1の番号が付いているものとすることができる。本発明がなければ、細分性ロッキングは、微妙なロック依存性を生み出す可能性がある。この微妙さは、プログラマが知らずにデッドロックを導入することになる機会を増大させる可能性がある。したがって、本発明がなければ、ロックは、比較的入念な(オーバヘッド)ソフトウェア・サポートと、アプリケーション・プログラミングが厳格な約定を完全に厳守することとによってのみ、構成可能である(例えば、原子的にアイテムXをテーブルAから削除してXをテーブルBに挿入するために、複数の同時ロックを管理する)。
【0036】
それぞれロックされるべき、セットのオブジェクトの数がEよりも多い場合は、各オブジェクトを0とE−1との間の数にハッシュして、より粗いロック細分性の性能コストでビット配列の使用を可能にすることができる。
【0037】
例えば、ビット配列は、メモリ・システムの2つ以上のキャッシュ線中で実装されてよく、2つ以上のキャッシュ線は、隣接するキャッシュ線である。ビット配列に対する操作の要求は、2つ以上の隣接するキャッシュ線と、メモリ・システム中における2つ以上のキャッシュ線のうちの第1のキャッシュ線の場所とを示すことができる。
【0038】
別の態様では、本発明は、前述の実施形態のうちのいずれか1つの方法の方法ステップを実施するためのコンピュータ実行可能命令を含むコンピュータ・プログラム製品に関する。
【0039】
別の態様では、本発明は、キャッシュ線中でビット配列を実装するためのシステムに関し、このシステムは、メモリ・ストレージおよびコントローラを備える。このシステムは、キャッシュ線中でビット配列を構成するように構成され、ビット配列はビットの配列を含み、構成することはさらに、ビット配列中の各ビットの値を定義することを含む。このシステムはまた、コントローラによってビット配列に対する操作の要求を受け取るように構成され、要求は、メモリ・ストレージ中におけるキャッシュ線の場所と、要求を指定する情報とを示す。このシステムはまた、この情報を使用して、ビット配列に対する1つまたは複数のアクションを操作について識別するように構成され、1つまたは複数のアクションは、コントローラ中でエンコードされる。このシステムはまた、要求を受け取るのに応答して、1つまたは複数のエンコードされたアクションを実行することによって要求を実施するように構成される。
【0040】
メモリ・システムは、キャッシュ階層中のレベルであってよく、したがって、コントローラが要求を実施すると、その結果、キャッシュ階層中のより低いレベルへのメモリ・システム・アクセスとなり、それによりメタデータおよび要素がメモリ・キャッシュ中で確立されるものとすることができる。メモリ・システムは2つ以上の部分に分離していてよく、ある部分におけるコントローラが、その部分におけるメモリを使用して動的配列データ構造を操作することができる。キャッシュ・レベルは2つ以上のユニットとして複製されてよく、コントローラは、キャッシュ・ユニット内の、基礎をなすキャッシュまたはメモリ・レベルの任意の部分にアクセスすることができる。
【0041】
本明細書において使用されるように、「コンピュータ可読ストレージ媒体」は、コンピューティング・デバイスのプロセッサによって実行可能な命令を記憶できる任意の有形ストレージ媒体を包含する。コンピュータ可読ストレージ媒体は、コンピュータ可読の非一時的なストレージ媒体と呼ばれる場合がある。コンピュータ可読ストレージ媒体はまた、有形のコンピュータ可読媒体と呼ばれる場合もある。いくつかの実施形態では、コンピュータ可読ストレージ媒体はまた、コンピューティング・デバイスのプロセッサによってアクセス可能なデータを記憶することが可能であってよい。コンピュータ可読ストレージ媒体の例は、以下のものに限定されないが、フロッピー(R)・ディスク、磁気ハード・ディスク・ドライブ、固体ハード・ディスク、フラッシュ・メモリ、USBサム・ドライブ、ランダム・アクセス・メモリ(RAM)、読取専用メモリ(ROM)、光ディスク、光磁気ディスク、および、プロセッサのレジスタ・ファイルを含む。光ディスクの例は、コンパクト・ディスク(CD)およびディジタル多用途ディスク(DVD)、例えば、CD−ROM、CD−RW、CD−R、DVD−ROM、DVD−RW、またはDVD−Rディスクを含む。コンピュータ可読ストレージ媒体という用語はまた、ネットワークまたは通信リンクを介してコンピュータによってアクセス可能な様々なタイプの記録媒体を指す。例えば、モデム、インターネット、またはローカル・エリア・ネットワークを介して、データを取り出すことができる。コンピュータ可読媒体に組み入れられたコンピュータ実行可能コードは、以下のものに限定されないが、ワイヤレス、ワイヤ線、光ファイバ・ケーブル、RFなど、またはこれらの任意の適切な組合せを含めた、任意の適切な媒体を使用して送信することができる。
【0042】
コンピュータ可読信号媒体は、例えばベースバンド中でまたは搬送波の一部として、コンピュータ実行可能コードが組み入れられた、伝搬データ信号を含むことができる。このような伝搬信号は、以下のものに限定されないが、電磁、光学、またはこれらの任意の適切な組合せを含めた、様々な形のいずれかをとることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体でない任意のコンピュータ可読媒体であって、命令実行システム、装置、またはデバイスによって使用されるプログラムまたはそれらに関連して使用されるプログラムを通信、伝搬、または搬送できる任意のコンピュータ可読媒体とすることができる。
【0043】
「コンピュータ・メモリ」または「メモリ」は、コンピュータ可読ストレージ媒体の例である。コンピュータ・メモリは、プロセッサから直接にアクセス可能な任意のメモリである。「コンピュータ・ストレージ」または「ストレージ」は、コンピュータ可読ストレージ媒体のさらに他の例である。コンピュータ・ストレージは、任意の不揮発性コンピュータ可読ストレージ媒体である。いくつかの実施形態では、コンピュータ・ストレージはコンピュータ・メモリでもある場合があり、またはその逆の場合もある。
【0044】
本明細書において、「プロセッサ」は、プログラムまたは機械実行可能命令またはコンピュータ実行可能コードを実行できる、電子コンポーネントを包含する。「プロセッサ」を備えるコンピューティング・デバイスに言及する場合、これは、複数のプロセッサまたは処理コアを備える可能性があると解釈されるべきである。プロセッサは、例えば、マルチコア・プロセッサとすることができる。プロセッサはまた、単一のコンピュータ・システム内にあるかまたは複数のコンピュータ・システム間で分散された、プロセッサの集合を指す場合がある。コンピューティング・デバイスという用語もまた、1つまたは複数のプロセッサをそれぞれが備える複数のコンピューティング・デバイスの集合またはネットワークを指す可能性があると解釈されるべきである。コンピュータ実行可能コードは、同じコンピューティング・デバイス内にある場合のある、さらには複数のコンピューティング・デバイスにわたって分散されている場合のある、複数のプロセッサによって実行されることがある。
【0045】
コンピュータ実行可能コードは、本発明の一態様をプロセッサに実施させる機械実行可能命令またはプログラムを含むことができる。本発明の態様に関する動作を行うためのコンピュータ実行可能コードは、Java(R)、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および、「C」プログラミング言語や類似のプログラミング言語などの従来の手続き型プログラミング言語を含めた、1つまたは複数のプログラミング言語の任意の組合せで書かれて、機械実行可能命令にコンパイルされてよい。いくつかの事例では、コンピュータ実行可能コードは、高水準言語の形であるかまたは事前コンパイルされた形であるものとすることができ、機械実行可能命令をオンザフライで生成するインタープリタと共に使用されてよい。
【0046】
コンピュータ実行可能コードは、完全にユーザのコンピュータ上で実行されるか、スタンドアロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で実行されるか、部分的にユーザのコンピュータ上で実行され部分的にリモート・コンピュータ上で実行されるか、または完全にリモート・コンピュータもしくはサーバ上で実行される場合がある。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含めた任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または、接続は、外部コンピュータに対して(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)行われてもよい。
【0047】
本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の、フローチャート、説明、またはブロック図、あるいはそれらの全てに関して、本発明の態様を述べる。適切なときは、フローチャート、説明、またはブロック図、あるいはそれらの全ての、各ブロック、またはブロックの一部を、コンピュータ実行可能コードの形のコンピュータ・プログラム命令によって実装できることは理解されるであろう。さらに、相互排他的でないときは、異なるフローチャート、説明、またはブロック図、あるいはそれらの全ての中のブロックを組み合わせてもよいことも理解されたい。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロック中で指定される機能/行為を実装するための手段をもたらすように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されて、マシンを生み出すことができる。
【0048】
これらのコンピュータ・プログラム命令はまた、コンピュータ可読媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロック中で指定される機能/行為を実装する命令を含む製造品を生み出すように、コンピュータ可読媒体に記憶され、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに、特定の方式で機能するよう指示することができる。
【0049】
コンピュータ・プログラム命令はまた、コンピュータまたは他のプログラム可能装置上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロック中で指定される機能/行為を実装するためのプロセスを提供するように、コンピュータ実装プロセスを生み出すべく、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実施させることができる。
【0050】
当業者には理解されるであろうが、本発明の態様は、装置、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または、ソフトウェアとハードウェアの態様を組み合わせた実施形態の形をとることができ、これらは全て、本明細書では「回路」、「モジュール」、または「システム」と一般に呼ばれる場合がある。さらに、本発明の態様は、コンピュータ実行可能コードを組み入れた1つまたは複数のコンピュータ可読媒体において具現化されるコンピュータ・プログラム製品の形をとることもできる。
【0051】
前述の実施形態の1つまたは複数は、組み合わせられた実施形態が相互排他的でない限り、組み合わせることができることを理解されたい。
【0052】
以下、図面を参照しながら、本発明の好ましい実施形態について、単なる例としてより詳細に述べる。