(58)【調査した分野】(Int.Cl.,DB名)
前記マッピング論理はデフォルトマッピングおよび調整的マッピングを含み、前記デフォルトマッピングは前記1つ以上の列のうちのある特定の列を前記1つ以上のストライピングされた部分のうちの第1のストライピングされた部分にマッピングし、前記1つ以上のメモリチップの第1のメモリチップは前記第1のストライピングされた部分を記憶し、前記メモリコントローラは、さらに、
前記調整的マッピングから、前記1つ以上の列は前記1つ以上のストライピングされた部分の第2のストライピングされた部分上にオーバフローすると判断すること、および
前記第2のストライピングされた部分を、前記第2のストライピングされた部分を記憶する第2のメモリチップから検索することを実行するよう構成され、
前記データブロックの前記1つ以上の他のストライピングされた部分は、前記第1のストライピングされた部分および前記第2のストライピングされた部分の両方以外のストライピングされた部分であり、前記1つ以上の他のメモリチップは、前記第1のメモリチップおよび前記第2のメモリチップの両方以外のメモリチップであり、前記1つ以上の他の列は前記ある特定の列以外の列である、請求項1に記載のメモリ装置。
前記1つ以上のストライピングされた部分の各ストライピングされた部分は、前記複数のメモリチップの前記1つ以上のメモリチップ上におけるある論理的な記憶の単位に記憶され、各論理的な記憶の単位は、前記複数のメモリチップと前記メモリコントローラとの間における最小転送単位(MTU)に基づくサイズのものである、請求項1に記載のメモリ装置。
前記マッピング論理は、前記メモリコントローラにおいて、前記1つ以上の列のうちのある特定の列を前記1つ以上のストライピングされた部分のうちのある特定のストライピングされた部分にマッピングするデフォルトマッピングを含む、請求項1に記載のメモリ装置。
前記マッピング論理は、前記メモリコントローラにおいて、前記1つ以上の列のうちのある特定の列を前記1つ以上のストライピングされた部分のうちのある特定のストライピングされた部分にマッピングするデフォルトマッピングを含み、前記メモリコントローラは、さらに、ブロックヘッダを、前記ブロックヘッダを記憶する第1のメモリチップから検索することを実行するよう構成され、前記マッピング論理は、さらに、前記ブロックヘッダにおいて、前記1つ以上の列が前記特定のストライピングされた部分に含まれていることを示す調整的マッピングを含む、請求項1に記載のメモリ装置。
前記ストライピングされた部分の各々は、前記複数のメモリチップのうちのあるメモリチップにおいてある論理的な記憶の単位に記憶され、各論理的な記憶の単位は、前記複数のメモリチップと前記メモリコントローラとの間における最小転送単位(MTU)に基づくサイズのものである、請求項6に記載のメモリ装置。
前記検索されたストライピングされた部分のうちのある特定のストライピングされた部分はブロックヘッダを含み、前記マッピング論理は、前記ブロックヘッダに記憶されるマッピングを含む、請求項6に記載のメモリ装置。
メモリコントローラが、計算装置から、複数のメモリ装置にわたってストライピングされる1つ以上のデータブロックに記憶されるデータに対する要求を受取るステップと、
前記要求は行の集合における1つ以上の列に記憶される列状データに対するものであると判断するステップとを含み、
前記1つ以上のデータブロックの各データブロック毎に、
前記各データブロック毎に、前記1つ以上の列の各列を、データブロックの、1つ以上のストライピングされた部分にマッピングするマッピング論理を用いるステップと、
前記マッピング論理に基づいて、前記複数のメモリ装置のうち、前記1つ以上の列がマッピングされる前記1つ以上のストライピングされた部分を記憶する1つ以上のメモリ装置を選択するステップと、
前記1つ以上のストライピングされた部分を、前記1つ以上のメモリ装置から、前記データブロックの、1つ以上の他のストライピングされた部分を、前記複数のメモリ装置のうちの1つ以上の他のメモリ装置から検索することなく、検索するステップとを含み、前記データブロックの前記1つ以上の他のストライピングされた部分は1つ以上の他の列によってマッピングされ、さらに
前記計算装置に対して、前記列状データを、前記データブロックの前記1つ以上のストライピングされた部分から返すステップを含む、方法。
前記マッピング論理はデフォルトマッピングおよび調整的マッピングを含み、前記デフォルトマッピングは前記1つ以上の列のうちのある特定の列を前記1つ以上のストライピングされた部分のうちの第1のストライピングされた部分にマッピングし、前記1つ以上のメモリ装置の第1のメモリ装置は前記第1のストライピングされた部分を記憶し、さらに、
前記調整的マッピングから、前記1つ以上の列は前記1つ以上のストライピングされた部分の第2のストライピングされた部分上にオーバフローすると判断するステップ、および
前記第2のストライピングされた部分を、前記第2のストライピングされた部分を記憶する第2のメモリ装置から検索するステップを含み、
前記データブロックの前記1つ以上の他のストライピングされた部分は、前記第1のストライピングされた部分および前記第2のストライピングされた部分の両方以外のストライピングされた部分であり、前記1つ以上の他のメモリ装置は、前記第1のメモリ装置および前記第2のメモリ装置の両方以外のメモリ装置であり、前記1つ以上の他の列は前記ある特定の列以外の列である、請求項9に記載の方法。
前記1つ以上のストライピングされた部分の各ストライピングされた部分は、前記複数のメモリ装置の前記1つ以上のメモリ装置上におけるある論理的な記憶の単位に記憶され、各論理的な記憶の単位は、前記1つ以上のメモリ装置と前記メモリコントローラとの間における最小転送単位(MTU)に基づくサイズのものである、請求項9に記載の方法。
前記マッピング論理はデフォルトマッピングおよび調整的マッピングを含み、さらに、前記調整的マッピングを、ブロックヘッダを記憶するある特定のメモリ装置から検索するステップを含む、請求項9に記載の方法。
前記マッピング論理は、前記メモリコントローラにおいて、前記1つ以上の列のうちのある特定の列を前記1つ以上のストライピングされた部分のうちのある特定のストライピングされた部分にマッピングするデフォルトマッピングを含み、さらに、ブロックヘッダを、前記ブロックヘッダを記憶する第1のメモリチップから検索するステップを含み、前記マッピング論理は、さらに、前記ブロックヘッダにおいて、前記1つ以上の列が前記特定のストライピングされた部分に含まれていることを示す調整的マッピングを含む、請求項9に記載の方法。
メモリコントローラが、計算装置から、複数のメモリ装置にわたってストライピングされる1つ以上のデータブロックに記憶されるデータに対する要求を受取るステップと、
前記要求は行の集合における1つ以上の列に記憶される列状データに対するものであると判断するステップとを含み、
前記1つ以上のデータブロックの各データブロック毎に、
前記複数のメモリ装置の各々から、前記データブロックのストライピングされた部分を検索するステップと、
前記データブロックに対して、前記1つ以上の列の各列を、前記データブロックの、1つ以上のストライピングされた部分にマッピングするマッピング論理を用いるステップと、
前記マッピング論理に基づいて、前記1つ以上のストライピングされた部分を、前記データブロックの前記検索されたストライピングされた部分から抽出するステップと、
前記計算装置に対して、前記列状データを、前記データブロックの前記1つ以上のストライピングされた部分から、前記データブロックの前記検索されたストライピングされた部分のうちの1つ以上の他のストライピングされた部分を返すことなく、返すステップとを含む、方法。
前記ストライピングされた部分の各ストライピングされた部分は、前記複数のメモリ装置においてある論理的な記憶の単位に記憶され、各論理的な記憶の単位は、前記複数のメモリ装置と前記メモリコントローラとの間における最小転送単位(MTU)に基づくサイズのものである、請求項14に記載の方法。
前記検索されたストライピングされた部分のうちのある特定のストライピングされた部分はブロックヘッダを含み、前記マッピング論理は、前記ブロックヘッダに記憶されるマッピングを含む、請求項14に記載の方法。
【発明を実施するための形態】
【0010】
詳細な説明
この発明を、同様の参照番号は同様の要素を示す添付の図面の図において、限定的にはでなく、例示的に説明する。
【0011】
以下の記載においては、説明のため、多数の具体的な詳細を、この発明の十分な理解を与えるために述べる。しかしながら、この発明はこれらの具体的な詳細なしに実施されてもよいことは明らかである。他の例では、周知の構造および装置が、ブロック図において、この発明を不要に不明瞭にすることを回避するために、示される。
【0012】
概要
列状スライスに対する親和性を伴って論理的な記憶の単位(ここにおいては「LUN」とも称される)にわたって行優先データをストライピングするための方法および記憶装置が提供される。代替的に、行スライスに対する親和性を伴って論理的な記憶の単位にわたって列優先データをストライピングするための方法および記憶装置が提供される。列状スライスのデータがホスト装置によって記憶装置に対して要求されると、記憶装置におけるメモリコントローラは、マッピング論理を用いて、どの論理単位がその列状スライスを記憶していそうであるかを判断する。メモリコントローラと記憶チップとの間のデータI/O(「入力および/または出力」)を低減する一実施例では、その列状スライスを記憶していると予測される論理単位からデータが検索される。メモリコントローラとホスト装置との間のI/Oを低減する別の実施例では、いくつかの論理単位からデータを検索し、その列状スライスにはないデータは、その検索されたデータから除去される。
【0013】
マッピング論理は、コントローラによって、データを記憶および検索するよう用いられてもよく、マッピング論理は、列状スライスを論理単位にマッピングする任意のハードウェアまたはプログラミングされたソフトウェアマッピングを含んでもよい。一実施例では、マッピング論理はデータブロックに特化されている。換言すれば、異なるデータブロックに対して異なるマッピングが提供されてもよい。一例においては、マッピングは、ブロックに対するブロックヘッダを記憶する論理単位に記憶され、メモリコントローラはそのマッピングをその論理単位から検索する。一実施例においては、メモリコントローラは、メモリにおいて、またはメモリコントローラ上のハードウェアにおいて実現される、列状スライスの、論理単位へのデフォルトマッピングを用いる。メモリコントローラは、デフォルトマッピングを用いて、データを、デフォルトで列状スライスを記憶する論理単位およびデフォルトでブロックヘッダを記憶する論理単位から、並列して検索すべきであると判断する。この実施例においては、このブロックヘッダは、要求される列状スライスのさまざまな部分が他の論理単位に記憶されているかどうかを判断するのに用いられる、列状スライスの相対的サイズなどのような、追加的な調整的マッピング情報を与える。デフォルト論理単位が列状スライス全体を含む場合には、その要求を満たすさらなるデータ検索は行なわれない。
【0014】
フラッシュ記憶装置
一例では、フラッシュの複数NVメモリチップなどのような、不揮発性(NV)記憶ドライブシステムがデータを記憶する。一例として、
図1は例示的フラッシュドライブの概略図を示す。このフラッシュドライブは、フラッシュメモリコントローラ101と、複数のフラッシュメモリチップ102とを含む。複数のフラッシュメモリチップ102は、ドライブ毎により高い記憶容量を達成するよう用いられ得る。
【0015】
図1の例においては、フラッシュメモリコントローラ101はHOSTシステムアダプタ104にバス103を介して接続される。このバスは、たとえば、SASまたはSATAなどのような差動インターフェイスを伴う高速シリアルバスであるかもしれない。高速シリアルケーブル敷設は、記憶ボックス配線を単純化し、より細い配線のため、記憶部封入体内においてよりよい空気の流れを与え、よりコンパクトなPCBフットプリントを有し、並列配線間のクロストークを回避し得る。HOSTシステムは、フラッシュメモリコントローラ101および記憶チップ102を含むフラッシュメモリ装置におけるデータの記憶および検索のためにフラッシュメモリコントローラ101に命令を送るようHOSTシステムアダプタ104を用いるよう構成されるPC(「パーソナルコンピュータ」)などのような計算装置である。
【0016】
論理的な記憶の単位
一実施例においては、内部のフラッシュチップ階層(たとえば
図3参照)によって、フラッシュチップを、可変数の完全に並列なLUN(論理単位番号)301に区分する。すべてのLUNは、フラッシュチップをフラッシュコントローラに接続する1つのバスを共有する。別の実施例では、各論理的記憶単位は、フラッシュチップなどのような異なる物理的記憶単位に対応する。一実施例では、各LUNは、これも並列動作可能な(しかしながらある制限があり、たとえば、ONFi2.0は現在のところはインタリーブされる読出を規定していない)可変数の「インタリーブ」303にさらに細分される。内部のフラッシュチップ階層におけるこの柔軟性は、フラッシュ特性における可変性をさらに増す。
【0017】
図3はターゲットメモリ編成の一例を示す。この場合においては、2つの論理単位があり、そこにおいては、各論理単位は2方向のインタリーブされるアドレスをサポートする。装置は1つ以上のターゲットを含む。ターゲットは1つのCE♯信号によって制御される。ターゲットは1つ以上の論理単位(LUN)内に編成される。論理単位(LUN)は、独立してコマンドを実行しステータスを報告することができる最小単位である。具体的には、別々のLUNが、任意のコマンドシーケンスにおいて、並列して動作してもよい。たとえば、ページプログラム動作をLUN0上において開始し、次いで、その動作の完了前に、読出コマンドをLUN1上において開始することが許可可能である。一実施例においては、LUNは少なくとも1つのページレジスタとフラッシュアレイとを含む。一実施例では、ページレジスタの数は、そのLUNに関してサポートされる、インタリーブされる動作の数に依存する。一実施例では、フラッシュアレイは、ある数のブロックを含む。
【0018】
フラッシュドライブのためのパラレルインターフェイス
フラッシュドライブのための数多くのパラレルインターフェイスは、高速シリアルインターフェイスを超える大きな性能利点を提供しはしない。たとえば、ONFi(オープンNANDフラッシュインターフェイスグループ)は、フラッシュシステムのための新しいパラレルコネクタを規定しているが、それは、現世代3GbpsSATAを超える大きな利点を有さず、それどころか、次世代6GbpsSATAよりも低速である。レガシーONFiインターフェイスは40MB/sに定格化され、第1世代は約133MB/sに定格化され、第2世代は約266MB/sに定格化され、第3世代は約400MB/sに定格化される。新しいパラレルONFiコネクタ規格を有することに対する第1の目的は、したがって、大量消費者(ノートブックまたはデスクトップ)PCに対する規格化であるように思われ、新たなまたはより高速な記憶システムインターフェイスに対してではないように思われる。
【0019】
例示的ONFiコネクタを
図2Aおよび
図2Bに示す。このONFiコネクタは、既存のメモリコネクタを活用し、大きなツール化コストを回避し、電気的検証を再使用し、低コストおよび高速TTM(「時間対市場」)を確実にする。ONFiコネクタおよびモジュールは、PCプラットフォームにおけるNANDの広く行き渡った使用のための、鍵となる構築ブロックである。ONFi2.0ソース同期データインターフェイスは、スケーラブルな、上位互換性があり、NANDデバイスにDLLを有さない。
【0020】
パラレルインターフェイスが、(フラッシュドライブ対HOSTアダプタバスにおけるすべての帯域幅ボトルネックが除去される点まで)高速シリアルインターフェイスの性能を有意に凌がない限り、シリアルインターフェイスとパラレルインターフェイスとの間の差異は、この開示の目的に対しては関係がない。ある例示的な記憶インターフェイスはこの世代の3Gbpsまたは次世代6GbpsSATA/SASに匹敵する。
【0021】
データストライピング
ディスクとHOSTシステムとの間において高い帯域幅を達成するために、記憶アレイは従来よりストライピング技術を用い、そこにおいては、論理的に隣接するデータのチャンクを複数のディスクにわたって分割する。十分に大きな単位においてデータを読出すホストアプリケーションに対しては、組合されたディスク帯域幅が利用可能である。しかしながら、組合されたディスク帯域幅は、記憶パイプ(「記憶バス」)、ホストコントローラ論理、ホストメモリバスなどにおけるボトルネックによって制限されるかもしれない。
【0022】
記憶アレイと同様に、複数のメモリチップを伴うフラッシュドライブシステムは、データストライピングを用いて、論理的に隣接するアプリケーションデータのチャンクを複数のメモリチップにわたって分割し、増大されたHOST対フラッシュメモリ帯域幅を、HOSTシステム上で動作するアプリケーションに対して提供してもよい。
【0023】
異なるデータストライピングのアプローチは、メモリチップ、内部のオン・ザ・ドライブ・バスおよび外部の記憶バスの数ならびにタイプが固定される、所与のHWフラッシュドライブ構成(つまりハードウェアに基づく暗号化を伴うフラッシュドライブ)に対して、劇的に異なる性能特性をもたらす結果となり得る。
【0024】
フラッシュデバイス上におけるストライピング
同じデータストライピングのアプローチは、異なるHWフラッシュドライブシステムにおいて劇的に異なる性能特性をもたらす結果となり得る。したがって、フラッシュドライブにおけるデータストライピングは、典型的には、フラッシュ技術/ベンダ依存型である。
【0025】
たとえば、NANDメモリチップに対するローインターフェイス、外部のチップパッケージングおよび内部のフラッシュチップ階層に対するONFi2.0規格においては、5つの異なるフラッシュチップパッケージが規定され、(TSOP−48、WSOP−48、LGA−52、BGA−63およびBGA−100)、ピンアウトは、チップベンダにわたる相互運用性のために固定される。データバス幅は8ビットと16ビットとの間で柔軟性がある。20Mhzから66Mhzの範囲の、6つの非同期タイミングモードおよび4つのソース同期タイミングモードがある。ならびに、1つの16ビットバスをデュアルの8つのバスに分割すること、およびソース同期動作におけるDDR(ダブルデータレート)モードに対する規定がある。これらのバスパラメータのみで、>6X可変性を、チップ対コントローラ帯域幅等式に導入し得る。
【0026】
ONFiとは対照的に、SD(セキュアデジタル)カード規格は、6ワイヤ外部カードバス(クロック、コマンドおよび1−4ワイヤデータバス)までを、50Mhzまでの可変タイミングとともに、およびさまざまな動作に対する最大(つまりタイムアウト)値を、規定する。このSD規格はONFiよりも概してより単純ではあるが、SDカード性能特性は典型的にはより制御可能ではなく、挙動はONFi準拠フラッシュチップの挙動より予測不可能である。
【0027】
最小転送単位
数多くのフラッシュチップ標準規格またはトレンドが共有しているように思われる1つの特色は、読出転送が最小転送単位(MTU、セクタ、ブロックまたはページとも称される)の倍数で行なわれるということである。一例では、最小転送単位長は512バイトである。他の実施例では、MTU長はそれよりも大きいかまたは小さくてもよい。最小転送単位は、要求−応答バスプロトコルの「おしゃべりであること」を隠すことができ、HOSTアプリケーション、またはHOSTシステム上において動作するアプリケーションが、データアクセスにおけるリファレンスの局所性を利用することを可能にする。同じことが、実際に、DRAM対CPUメモリインターフェイスに対してさえも当てはまる。CPUは、典型的には、キャッシュラインサイズ転送、たとえば1転送に付き64〜128バイト、で動作する。
【0028】
MTUアクセスのレイテンシ(読出要求コマンドの終わりとデータバス上に現われるMTUの最初のビットとの間におけるクロックサイクル数として規定される)は、デバイス、技術およびパッケージに特定的である。読出コマンドをフラッシュチップに送るのに必要なクロックサイクル数は、さらに、たとえば、コマンドバスが相対的に細く、読出要求が相対的に長い場合に、カウントされてもよい。いくつかの例では、コマンドは十分に短く、バスは、読出コマンド長が全体のMTUアクセスレイテンシにおいて些細であるよう、十分に幅広い。最初のMTUアクセスレイテンシの後、MTUは、フルデータバス速度で転送される。
【0029】
記憶および検索におけるボトルネック
別の共通の特色は、外部フラッシュチップインターフェイス規格(たとえばフォームファクタ、バスコマンドおよびバスタイミング)は頻繁には変更されないということであるように思われる。それらの規格は、しかしながら、増大しつつあるチップ密度ならびに並列性(LUN)および「インタリーブ」の度合いにおける可変性に対する明示的な規定を含む傾向がある。フラッシュドライブキャパシティ増大に対する利用者の要求は、したがって、オン・ザ・ドライブ・バスおよび/またはドライブ対HOSTバスにおけるボトルネックに至る結果となることが予期され得、なぜならば、たとえば、限られた数の、所与のフォームファクタのチップのみが、典型的な3.5″ディスク封入体にフィットし得るからである。ドライブ単位のチップ数に対する制限は、チップ対フラッシュコントローラバスの数および組合されたチップ対フラッシュコントローラ帯域幅における制限に変換される。
【0030】
データベース管理システムにおいては、データはテーブルに記憶され、テーブルは
図3のブロック302のようなデータブロックに記憶される。フルテーブルスキャン動作によって、テーブルブロックが、一度に、N個の隣接するデータブロックからなる集合で読出される(たとえば32Kのデータブロックサイズ、および1つの集合においてN=32個のブロックは、1MBのシーケンスでの読出となる結果となる)。
【0031】
複数チップ(およびチップ内における複数の並列LUNなど)を利用するために、1MBの(アプリケーションの観点から)隣接するデータを、フラッシュドライブにおいて多数の並列単位にわたってストライピングしてもよい。
【0032】
データフォーマットを意識しない(つまり物理的な)データストライピング技術が多くある。たとえば、64個の並列フラッシュ単位を与えられるとして、データは、ビット(たとえば、第1のビットは第1のチップに行き、第2のビットは第2のチップに行き、…64番目のビットは64番目のチップに行き、次いでそのパターンが繰返す)、バイト、ワードなど、16k単位まで(1MB読出においては、64チップ構成)でストライピングされ得、または全くストライピングされなくてもよい。
【0033】
ある十分な物理的データストライピング技術は、フラッシュドライブ内において利用可能な並列性を利用するが、フラッシュチップからホストシステムに転送される必要があるデータの量を低減しはしない。バスのうち、フラッシュチップとHOST CPUとの間において横切らなければならない任意のバスがボトルネックである場合、増大した並列性は性能改善をもたらす結果とはならず(または考えられ得る性能の恩恵はほんの部分的にのみ実現化される)、ストライピングは効果的ではない(かまたは部分的な効果のみを有する)。
【0034】
データのスライスに対する親和性を伴ってデータをストライピングする
データ管理システムにおいては、フルテーブルスキャンは、典型的には、データベース列の部分集合を(選択されたすべての列が1つの考えられ得る部分集合である状態で)選択する。C列を有するテーブルの場合、フルテーブルスキャンにおける考えられ得る部分集合の数は2
∧Cであり、それらのわずか1つが、「すべての列が選択された」ケースである。テーブル列のある部分集合を選択するテーブルスキャンの場合には、テーブルデータからなるある部分集合をフラッシュチップからHOST CPUに転送する必要がある。
【0035】
一実施例においては、行優先フォーマットに記憶されるデータベースブロックは、さまざまなブロックヘッダ、テーブル行および行列を行内に含む。行優先フォーマットは、リファレンスアクセスプロパティの十分な局所性を与え、効率的なテーブルインデックス付けを可能にし、列優先フォーマットは、行優先フォーマットとは異なる、それら自体のトレードオフの集合を有する。たとえば、列優先フォーマットは、いくつかの特別化されたリサーチおよび商業製品、たとえばオラクル(登録商標)・エクスプレスおよび他のオラクル(登録商標)製品において用いられる。いずれのフォーマットも、ここに開示される技術に従って用いられてもよい。それらの技術の明確かつ簡潔な説明を与えるため、列に対する親和性を伴ってデータをストライピングすることにより行優先フォーマットにデータを記憶することを参照して、ある例を示す。ここで用いられるとおりでは、「行」という語は、「列」に対して垂直な任意のデータのスライスを含み、「列」という語は、「行」に対して垂直な任意のデータのスライスを含む。換言すれば、「行」および「列」が垂直なデータのスライスを記載する限りにおいて、「行」は「列」と置き換えられてもよく、およびその逆であってもよい。したがって、記載される例を用いて、行に対する親和性を持ってデータをストライピングすることによって列優先フォーマットにデータを記憶してもよく、または列に対する親和性を持ってデータをストライピングすることにより行優先フォーマットにデータを記憶してもよい。
【0036】
ある行優先フォーマットにおいては、テーブルデータを記憶するデータブロックは、所与のフルテーブルスキャンが必要とする列、およびその所与のフルテーブルスキャンに対して必要とされない列の両方を含む。同様に、ある列優先フォーマットにおいては、テーブルデータを記憶するデータブロックは、所与のフルテーブルスキャンが必要とする行、およびその所与のフルテーブルスキャンに対して必要とされない行の両方を含む。
【0037】
技術独立型ストライピング
我々のアプローチの技術は、行記憶におけるデータブロックのある特別な表現を導入し、そこにおいては、列は、フラッシュMTU(最小転送単位)サイズの単位に和合される。さまざまな実施例において、それらの技術は以下を与える:
a)フラッシュコントローラにおけるSMARTスキャン投影の、非常に単純な、フラッシュ技術/ベンダ独立型実現例。フラッシュコントローラにおいて行なわれるスマートスキャン投影は、フラッシュコントローラからHOST CPUに転送される必要があるMTUの数を低減し、フラッシュコントローラより上方向のすべてのバスに対する要件を低減する;および/または
b)多数のフラッシュ技術/ベンダ依存型SMARTスキャン最適化であり、そこにおいては、MTUのある部分集合のみがフラッシュチップからフラッシュコントローラに転送され、フラッシュチップをフラッシュコントローラに接続するローカルバス、フラッシュチップおよびフラッシュコントローラそれ自体に対する要件を低減する。
【0038】
フルテーブルスキャン動作がこれらの資源のうちの任意のものにおいて妨害される場合には、ここに論じられるさまざまなアプローチを実施することが、性能改善をもたらす結果となり得る。
【0039】
データが行優先フォーマットに記憶される一実施例においては、ブロックは、「ブロックフレーム」および「列データ」に論理的に分割される。列データは、さらに、列毎に1個のスライスで、複数の列状スライスに分割される。ブロックフレームはさまざまなブロックヘッダ(キャッシュヘッダ、トランザクションヘッダなど)を含む。一実施例においては、ブロックフレームに記憶されるあるブロックヘッダは、列を論理的な記憶の単位にマッピングするマッピング情報を含む。列状スライスは「垂直」列状スライス(たとえば<長さ,値>の対からなるシーケンス)を含む。
【0040】
論理的な列状スライスはMTUの集合にマッピングされる。
一実施例においては、上記のa)を達成するために、マッピングはフラッシュ/ベンダ技術独立型である。たとえば、MTUサイズのみを考慮してマッピングを実施してもよい。
【0041】
一実施例においては、上記のb)を達成するために、マッピングはフラッシュ/ベンダ技術依存型である。たとえば、MTUサイズおよび複数のフラッシュチップにわたる物理的なデータのストライピングの両方を考慮してもよい。
【0042】
1つのブロックをある既知の数の固定長MTUにマッピングすることは、各々512バイトの64個のストライプにわたる63列テーブルストライピングに対する32Kテーブルブロックの非限定的な例によって説明されてもよい。
【0043】
この例においては、ストライピング処理は、組合されたブロックフレームスペース要件および集合体列スライス要件をすべての63個の列に対して計算することによって始まる。これは、64個の負でない数からなる集合であり、それらの和は、32768(32K)未満かそれに等しい。この例では、その和は、通常は32Kよりも小さく、なぜならば、ブロックは、典型的には、それらにおいていくらかの量の空きスペースを有するからである。
【0044】
この例においては、64個の数は、ブロックフレームスライスに記憶される。選択肢として、これらの64個の2バイト整数を記憶するための128バイトが、そのブロックにおいて、データ挿入時間に予約された。別の実施例では、余剰のスペースはそのブロックにおいて利用可能であり、なぜならば、0個の空きバイトを伴う十分にロードされたブロックは稀であるためである。たとえば、128バイトは32Kブロックの0.4%であり、これは、どちらにせよ、有意な記憶オーバヘッドを課しはしない。
【0045】
この例で続けると、すべての64個のスライスは、次いで、シーケンスで、ブロックフレームで始まって、1つのものが別のものに続き、シーケンス状の64個の512バイトストライプに、次のスライスをその一次ストライプにおいて開始することが32Kをオーバフローしない場合には次のスライスはその一次ストライプと整列される(パディングされる)ように構成される親和性/パディング規則で、書込まれる。他の態様では、次のスライスをその一次ストライプにパディングする代わりに、次のスライスは前のスライスに続いてもよい。たとえば、次のスライスは次のストライプにおいて前のスライスにすぐ続いてもよい。
【0046】
このマッピングは、その単純さのため選択された、以下の図によって説明される。任意の他の「回復可能な」和合化されたマッピングを代わりに用いることもできる。
【0048】
この図においては、ブロックフレーム(Fで示される)は、第1のMTUサイズ化された単位を部分的に満たす。第1のスライス(「x」で示される)はパディングされる。第1の列状スライス(「1」で示される)は、その一次マッピング位置で開始し、次の2つのストライプにオーバフローする。列2および列3(「2」および「3」で示される)に対する列状スライスはそれらの一次位置(既に列1に取られている)においては開始することができず、したがって、それらはシーケンスで続く。列3と列61との間におけるどこか(「A」で示される)において、パディングおよび一次マッピングは再び可能となり、最後の3つの列(61、62、63)は、それらの対応の一次ストライプにマッピングし、それら一次ストライプに完全に当てはまる。
【0049】
このようにスライスをMTUサイズ化されたストライプにマッピングすることは、フラッシュコントローラにおける非常に単純な投影実現例を可能にする。ブロックフレームにおける64個の数を見ることによって、フラッシュコントローラは、MTUサイズ化されたスライスのうちどれが所与のSMARTスキャンによって必要とされないかを判断し、これらの不必要なストライプをHOSTに送ることを回避することができる。
【0050】
この特別なブロック表現は、ブロックデータをレイアウトする、ある十分に等価な態様である。1つの実施例では、2つの表現間における高速変換が常に可能であるのは、64個の2バイト数を保持するよう、あるブロックにおいてスペースがある場合である。先に言及されたように、このスペースは、挿入時間に予約することができるか、またはまさに偶然にそのブロックに存在してもよい。存在するブロックが、(たとえばデータベースシステムの前のバージョンによってフォーマット化/挿入される)128の空きバイトを有さないような珍しい場合においては、その例外ブロックをそれの元の形式において記憶することができ、例外があるという事実は、ブロックフレームヘッダにおけるある特別なビットによって示すことができる。一実施例では、スペアのビットが、例外を示すよう、ある32Kのブロックにおいて常に存在する。
【0051】
一実施例では、メモリコントローラは、複数のメモリチップにわたってストライピングされる行データのブロックから列データに対する要求を受取る。メモリコントローラは、メモリチップから、データの最小転送単位などのような情報を検索する。メモリコントローラは、検索された情報のブロックヘッダに記憶されるマッピングにアクセスして、データのうちの1つ以上の部分が要求された1つ以上の列を記憶すると判断する。1つの例では、データのうちの1つ以上の部分が、1つ以上のメモリチップから受取られたが、1つ以上の他のメモリチップからは受取られず、データのうちの1つ以上の他の部分が、1つ以上の他のメモリチップから受取られた。マッピングに基づいて、メモリコントローラは、データのうちの1つ以上の他の部分をフィルタ処理して出し、ホスト装置に対し、要求された1つ以上の列がマッピングされるデータの部分のみを返す。
【0052】
技術依存型ストライピング
技術依存型マッピングは、上で説明されたマッピングに対する向上である。さまざまな実施例において、これらの技術は以下を含む:
1) SMARTスキャンに対して、フラッシュドライブシステムにおいて、すべてのチップから並列性を達成する;および/または
2) フラッシュチップとフラッシュコントローラとの間において移動されなければならないMTUの数を低減する。
【0053】
一実施例では、あるフラッシュドライブは、フラッシュチップにわたる物理データストライピングの何らかの形式を用いる。一例においては、「ストライピングなし」は、ストライピングの別の特別な形式として考慮される。一実施例では、ストライプの数、それらのサイズ、およびフラッシュチップ/LUN/インタリーブに対するストライプの具体的な割当ては、フラッシュ/ベンダ技術依存型である。ストライプの数は、データアクセスタイプの混合に対するフラッシュドライブの最適な全体性能に基づいて選択されてもよい。
【0054】
一実施例では、デフォルトマッピング論理がメモリコントローラ上にある。このデフォルトマッピング論理は、1つ以上の列を、当該1つ以上の列のためにデータを記憶すると予測される論理単位にマッピングする。デフォルトマッピング論理は、ブロックヘッダを記憶するメモリチップから検索される調整的マッピングによって補われてもよい。たとえば、デフォルトマッピングは、要求された列を記憶するかもしれない1つ以上の論理単位を予測したかもしれず、ブロックヘッダは、列が、実際に、予測された1つ以上の論理単位に記憶されるかどうかを示してもよい。一例では、ブロックヘッダは、列サイズを記憶して、列データが1つの論理単位から他の論理単位にオーバフローするかどうかを示す。
【0055】
一実施例では、ストライピングは物理論理的であり、そこにおいては、データの物理的ストライピングは変更されない。換言すると、物理的ストライピングが32Kのブロックデータをある数のチップにわたって分散させる場合、ある位置においては、一実施例においては、物理論理的ストライピングの結果、同じストライプが同じフラッシュチップの集合において用いられる。一実施例では、物理的ストライピングアプローチとは異なって、ストライプの内容を再配置して、さまざまな読出時間SMRTスキャン最適化を可能にする。
【0056】
一実施例では、物理論理的ストライピングは、物理的データストライピングを変更するというより積極的なアプローチよりも単純性の点である利点を有し、なぜならば、物理論理的ストライピングは、概して、物理的のみのストライピング法より悪くなることは決してないからである。一実施例では、ある物理的ストライピングが最適に選択される。この実施例に従うと、最悪の場合には、全く同じストライプの集合が、物理論理的ストライピングがないのと全く同じ順序で読出されて、劣化が全くないことを保証することができる(が、この場合においては恩恵も全くない)。すべてのデータベースアクセスが、論理的ストライピングから理論的に恩恵を受け得るスマートスキャンであるわけではない。したがって、さまざまな実施例は、非スマートスキャン動作を劣化させはしない。物理的ストライプ配置に従うことは、これを達成する1つの単純な態様である。
【0057】
物理論理的ストライピングを、上記と同様に、63列テーブルにアクセスする、SMARTスキャンの一例によって示す。一実施例では、所与のフラッシュ/ベンダ技術に対して選択される物理的ストライピングは、32Kのシーケンス状のデータを、フラッシュドライブにおいてフラッシュチップにおいて64個の並列単位にわたって、チップ毎に1つのMTUで分散させる。
【0058】
この例においては、1つの32Kのデータブロック内において、マッピングは同じままであり、−−フレーム、続いてC1、C2...、C63である。連続する32Kのデータベースブロックの場合、列状スライスをMTUにマッピングすることは、以下の図にあるように、誘導された「位相シフト」でなされる。
【0060】
示されるように、「F」はブロックフレームスライスマッピングを示し、数字1、2、3、4および5は列状スライス1、2、3などの一次マッピングを示し、文字A、BおよびCは対応するように列状スライス61、62および63の一次マッピングを示す。一実施例においては、テーブルの列は64個のフラッシュチップに対応し、ある列内のMTUはあるチップ内にシーケンスである。
【0061】
この例においては、次の集合の32個のブロックに対して、誘導されたシフトパターンが、32個の32Kブロックからなる最初の集合と同様に繰返す。誘導された位相シフト値は、すべての一次列MTUをすべての並列チップ(LUN)にわたって分散させるよう用いられる。この物理論理的ストライピング例は、技術依存型のさまざまな読出時間最適化を斟酌する。
【0062】
列♯1にアクセスする例示的SMARTスキャン、1MBのシーケンスのデータブロック(32個の32Kブロック)の処理は以下の態様で進行する。アルゴリズムの第1のステップにおいては、一次の32のブロックフレームストライプが32個の異なるフラッシュチップから並列に転送される(位相シフトされたストライピングは、ブロックフレームが異なるチップにマッピングされることを保証する)。同時に、他の32個のチップは、一次MTUを、必要とされる列1のために転送している。
【0063】
一実施例では、列1が、ブロックフレームスライスにおける組合された列長さを見ることによって判断され得るように、完全に一次スライス上にある場合には、読出されたアルゴリズムは第1のステップの後に終結する。この例においては、列状ストライピング技術は、フラッシュチップとフラッシュコントローラとの間において移動されるデータの量を32X分低減する。
【0064】
一実施例においては、列が二次オーバフロースライスにオーバフローする場合には、読出は、すべてのオーバフロースライスが検索されるまで、継続する。検索されたデータはホストに送られる。このオーバフローの例では、フラッシュチップとフラッシュコントローラとの間において移動されるデータの量における低減は32X未満であるが、依然として容易に当該の桁数にあり得る。たとえば、オーバフローが、単一のオーバフローのみである場合には、16X低減が、フラッシュチップとフラッシュコントローラとの間において転送されるデータの量において、他の例における32Xの代わりに達成されてもよい。
【0065】
この例においては、どのようなストライプが検索される必要があるか、およびどのようにして要求された列がそれらの一次ストライプにマッピングするかによって、列状ストライピング技術は、フラッシュチップとフラッシュコントローラとの間におけるローカルバスがボトルネックである場合には、1.0(改善なし)から32Xの間の性能改善比をもたらす結果となってもよい。
【0066】
一実施例においては、上記のSMARTスキャン読出最適化が(たとえばレイテンシが大き過ぎるため)所与のフラッシュ技術に適用可能でない場合には、MAX列サイズに基づく異なる最適化が用いられる。時として、列サイズは、まさに、たとえばオラクル(登録商標)DATE、ネイティブフロート/ダブルおよび固定された文字(たとえば文字(3))列での場合にあるように公知である。その場合、たとえば、63列テーブルにおいて列1〜10にアクセスするSMARTスキャンでは、最初の10列において組合されたMAX長を知っていることは、そのスキャンによって必要とされるMTUの部分集合を制限することを許してもよい。異なる位相シフト戦略をこの例において用いることができ、その技術に対するチップにわたるMTUレイアウトを、MAX列サイズに基づくMTU制限を伴うプレフィックスSMARTスキャンに対して最適化する。
【0067】
64並列チップ/512バイトストライピング例においては、16個のMTUの位相シフトを、示されるように、毎4ブロック後に行なってもよい。
【0069】
この位相シフト例はすべてのフラッシュチップからのシーケンスでの転送長を増大させ、この場合においてはMTUアクセスレイテンシを低減する。一実施例においては、位相シフト例は、フラッシュチップ並列性の恩恵を得る。
【0070】
MTUの部分集合をフラッシュコントローラからHOSTに返すことは、データベースシステムはMTUの部分集合によって形成される「部分的」ブロックを取扱わなければならないことを意味する。これはいくつかの選択肢を残す。1つの選択肢においては、MTUの部分集合は、部分的な行優先ブロックに再度組合せられ、その後、そのブロックは、さらなる処理のために、リレーショナルデータベース管理システムに与えられる。他の選択肢においては、リレーショナルデータベース管理システムは、ベクトル化された列状処理技術を選択肢的に利用して、列状MTUを直接取扱う。
【0071】
前者のMTU再組合せの場合においては、1つの実施例では、フラッシュコントローラそれ自体がプログラミングされるかまたは他の態様で論理的に構成されてMTU再組合せを実行する。MTU再組合せは、さらに、HOST CPUにおいてなされてもよく、またはフラッシュコントローラとHOST CPUとの間において最も適切なように分割されてもよい。
【0072】
一実施例においては、行記憶フォーマットから和合された − 列状MTUへのブロック変換は、大抵、フラッシュコントローラが、MTUサイズおよびフラッシュチップにわたる物理的ストライピングなどのような、必要な情報だけをHOSTに晒してそれを行なうよう、HOST CPUにおいて行なわれる。別の実施例では、行記憶フォーマットから和合された − 列状MTUへのブロック変換は、全体的にフラッシュコントローラにおいて行なわれるか、またはHOST CPUとフラッシュコントローラとの間において適切に分割される。
【0073】
フラッシュコントローラとHOST CPUとの間における作業区分選択肢にはさまざまな賛否がある。より多くの作業をHOST CPUにおいて行なうことは、ホスト上の可視のCPUオーバヘッドに変換し得る。他方、フラッシュコントローラは、HOSTよりもプログラミングおよびアップグレードがより困難であり得る。
【0074】
一実施例においては、フラッシュコントローラにおいてSMARTスキャンをサポートすることは、記憶バスコマンド拡張の使用を巻込む。大抵の記憶コマンドシステムは、ベンダ/アプリケーション特化コマンドを実現するよう何らかの機構を確保している。
【0075】
ベンダ特化コマンドを実現するひとつのスキームは、ベンダ/アプリケーション特化通信に対して、たとえばドライブキャパシティを超えるハイアドレスなど、ブロックアドレスの範囲を確保することである。一実施例においては、このスキームはすべての記憶プロトコルに対してあまねく適用可能である。HOSTによる特別なブロックアドレスに対する書込は、フラッシュコントローラによってベンダ特化コマンドとして解釈され得、HOSTによるこれらのアドレスからの読出は、フラッシュコントローラによってスマートスキャン読出要求として解釈され得る。
【0076】
データに対する要求に応答する
一実施例においては、メモリコントローラは、複数のメモリチップにわたってストライピングされる行データのブロックから列データに対する要求を受取る。たとえば、その要求は、行データのデータブロックから1つ以上のデータの列を選択するコマンドを含んでもよい。他の例では、その要求は、要求される列を特定するメタデータを、それら列において実行されるべき動作を特定することなく含む。メモリコントローラは、あるマッピングにアクセスして、メモリチップそれら自体またはメモリチップの論理単位の点で識別されてもよい1つ以上のメモリ装置が要求された列データを記憶すると判断する。
【0077】
一実施例においては、メモリコントローラは、ブロックヘッダに決定論的にマッピングされるあるメモリ装置、および要求された列データを保持すると予測される1つ以上のメモリ装置から、並列に、データのMTUにアクセスする。ブロックヘッダを読出して、要求される列データの全体が、要求される列データを保持すると予測されるメモリ装置から検索される情報に記憶されるかどうかを判断する。要求される列データの全体が、要求される列データを保持すると予測されるメモリ装置から検索される情報に記憶される場合には、メモリコントローラは、その要求される列データを、ホスト装置に対し、他のメモリ装置から他のデータを検索したり返したりすることなく、返す。
【0078】
ブロックヘッダが、要求される列データは1つ以上の他のメモリ装置にオーバフローする旨を示す場合には、メモリコントローラは、要求される列データの残りを、1つ以上の他のメモリ装置から検索する。一実施例においては、メモリコントローラは要求される列データを複数のメモリ装置から組立て、その要求される列データを、ホスト装置に対し、要求されるデータの列を記憶すると予測されるかまたは知られているメモリ装置以外の他のメモリ装置から他のデータを検索したり返したりすることなく、戻す。
【0079】
ハードウェア概要
ある実施例に従うと、ここに記載される技術は1つ以上の特殊用途計算装置によって、またはそれに関連して実現される。一例においては、あるフラッシュメモリモジュールは、HOST計算装置に対してデータを送り、HOST計算装置からデータおよびコマンドを受取る記憶装置である。このHOST計算装置は、データ記憶コマンドおよびデータ検索コマンドをフラッシュメモリモジュールに送るよう構成される。それら特殊用途計算装置は、それらの技術を実行するようハードワイヤードであってもよく、またはそれらの技術を実行するよう永続的にプログラミングおよび/またはオンザフライで再プログラミングされてもよい1つ以上のアプリケーション特化集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)などのようなデジタル電子装置を含んでもよく、またはファームウェア、メモリ、他のストレージもしくは組合せにおけるプログラム命令に従ってそれらの技術を実行するようプログラミングされる1つ以上の汎用ハードウェアプロセッサを含んでもよい。そのような特殊用途計算装置は、さらに、それらの技術を達成するようカスタムプログラミングを伴う、カスタムハードワイヤード論理、ASICまたはFPGAを組合わせてもよい。特殊用途計算装置は、デスクトップコンピュータシステム、ポータブルコンピュータシステム、携帯型装置、ネットワーク化装置、またはそれらの技術を実現または利用するようハードワイヤードおよび/またはプログラム論理を組込む任意の他の装置であってもよい。
【0080】
たとえば、
図4は、コンピュータシステム400を例示するブロック図である。コンピュータシステム400は、情報をやりとりするためのバス402または他の通信機構と、バス402に結合され、情報を処理するためのハードウェアプロセッサ404とを含む。ハードウェアプロセッサ404はたとえば汎用マイクロプロセッサであってもよい。
【0081】
コンピュータシステム400は、バス402に結合され、プロセッサ404によって実行されるべき命令および情報を記憶するための、ランダムアクセスメモリ(RAM)または他のダイナミック記憶装置などの主メモリ406も含む。主メモリ406は、プロセッサ404によって実行されるべき命令の実行中に一時的変数または他の中間情報を記憶するためにも使用されてよい。そのような命令は、プロセッサ404にとってアクセス可能な非一時的記憶媒体に記憶されると、コンピュータシステム400を、それらの命令に指定される演算を実行するようカスタマイズされる特殊用途マシンにする。
【0082】
コンピュータシステム400は、さらに、バス402に結合され、プロセッサ404のために静的情報および命令を記憶するためのリードオンリメモリ(ROM)408または他の静的記憶装置を含む。磁気ディスクまたは光ディスクなどの記憶装置410が、情報および命令を記憶するために設けられバス402に結合される。
【0083】
コンピュータシステム400は、コンピュータユーザに情報を表示するための、陰極線管(CRT)などのディスプレイ412にバス402を介して結合されてもよい。アルファベット数字および他のキーを含む入力装置414が、プロセッサ404に情報およびコマンド選択を通信するためにバス402に結合される。他のタイプのユーザ入力装置は、マウス、トラックボールまたはカーソル方向キーなどのカーソル制御416であり、プロセッサ404に方向情報およびコマンド選択を通信し、かつディスプレイ412上でカーソル移動を制御する。この入力装置は、典型的には、装置が平面における位置を特定することを可能にする、第1の軸(たとえばx)および第2の軸(たとえばy)の2つの軸において2つの自由度を有する。
【0084】
コンピュータシステム400は、コンピュータシステムとの組合せでコンピュータシステム400を特殊用途マシンにするかまたはプログラムする、カスタマイズされたハードワイヤード論理、1つ以上のASICもしくはFPGA、ファームウェア、および/またはプログラム論理を用いて、ここに記載される技術を実現してもよい。ある実施例に従うと、ここに記載される技術は、コンピュータシステム400にコマンドをフラッシュメモリモジュールに送らせるよう、プロセッサ404が主メモリ406に含まれる1つ以上の命令の1つ以上のシーケンスを実行すること応答して、コンピュータシステム400により用いられる。そのような命令は、記憶装置410などの別の記憶媒体から主メモリ406に読込まれてもよい。主メモリ406に含まれる命令のシーケンスの実行により、プロセッサ404は、ここに記載された処理ステップを行なう。代替的実施例では、ソフトウェア命令の代わりに、またはこれと組合わせて、ハードワイヤード回路系が用いられてもよい。
【0085】
ここで用いられる「記憶媒体」という用語は、マシンをある特定の態様で動作させるデータおよび/または命令を記憶する任意の非一時的媒体のことを指す。そのような記憶媒体は、不揮発性媒体および/または揮発性媒体を含み得る。不揮発性媒体は、たとえば、記憶装置410などの光ディスク、磁気ディスク、またはフラッシュメモリモジュールを含む。揮発性媒体は、主メモリ406などのダイナミックメモリを含む。記憶媒体の一般的な形態は、たとえば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または任意の他の磁気データ記憶媒体、CD−ROM、任意の他の光学データ記憶媒体、孔のパターンを備える任意の物理的媒体、RAM、PROM、およびEPROM、FLASH−EPROM、NVRAM、任意の他のメモリチップまたはカートリッジを含む。
【0086】
記憶媒体は、伝送媒体とは区別されるが、それとの関連で用いられてもよい。伝送媒体は、情報を記憶媒体間で転送することに加わる。たとえば、伝送媒体は、バス402を含むワイヤを含む、同軸ケーブル、銅線および光ファイバを含む。伝送媒体は、無線通信および赤外線データ通信の際生成されるものなど、音波または光波の形もとり得る。
【0087】
さまざまな形態の媒体が、1つ以上の命令の1つ以上のシーケンスをプロセッサ404に搬送し実行するのに関係し得る。たとえば、命令は、最初に遠隔コンピュータの磁気ディスクまたはソリッドステートドライブ上に担持され得る。遠隔コンピュータは、命令をそのダイナミックメモリにロードし、モデムを用いて電話線を介して命令を送信することができる。コンピュータシステム400に局在するモデムは、電話線でデータを受取り、赤外線送信機を用いてデータを赤外線信号に変換することができる。赤外線検出器が、赤外線信号で搬送されるデータを受信することができ、適切な回路系が、データをバス402に与えることができる。バス402は、データを主メモリ406に搬送し、プロセッサ404は命令をそこから検索し実行する。主メモリ406によって受取られた命令は、任意で、プロセッサ404によって実行される前または後のいずれかに記憶装置410上に記憶されてもよい。
【0088】
コンピュータシステム400は、バス402に結合される通信インターフェイス418も含む。通信インターフェイス418は、ローカルネットワーク422に接続されるネットワークリンク420に結合する双方向のデータ通信を提供する。たとえば、通信インターフェイス418は、データ通信接続を対応するタイプの電話線に与えるよう、統合サービスデジタル網(ISDN)カード、ケーブルモデム、衛星モデムまたはあるモデムであってもよい。別の例として、通信インターフェイス418は、データ通信接続を互換可能なローカルエリアネットワーク(LAN)に与えるよう、LANカードであってもよい。ワイヤレスリンクが実現されてもよい。任意のそのような実現化例において、通信インターフェイス418は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号または光信号を送信および受信する。
【0089】
ネットワークリンク420は、典型的には、1つ以上のネットワークを介してデータ通信を他のデータ装置に与える。たとえば、ネットワークリンク420は、ローカルネットワーク422を介してホストコンピュータ424またはインターネットサービスプロバイダ(ISP)426によって操作されるデータ機器への接続を与えてもよい。ISP426は、次いで、現在通常「インターネット」428と呼ばれているワールドワイドパケットデータ通信ネットワークを介してデータ通信サービスを提供する。ローカルネットワーク422およびインターネット428はどちらも、デジタルデータストリームを搬送する電気信号、電磁信号または光信号を使用する。さまざまなネットワークを介する信号と、コンピュータシステム400へおよびこれからデジタルデータを搬送する、ネットワークリンク420上および通信インターフェイス418を介する信号とは、伝送媒体の例示の形である。
【0090】
コンピュータシステム400は、ネットワーク、ネットワークリンク420および通信インターフェイス418を介して、プログラムコードを含む、メッセージを送信しかつデータを受信することができる。インターネットの例では、サーバ430は、インターネット428、ISP426、ローカルネットワーク422および通信インターフェイス418を介してアプリケーションプログラムのための要求されたコードを送信するかもしれない。
【0091】
受取られたコードは、受取られたときにプロセッサ404によって実行されてもよく、および/または後の実行のために記憶装置410もしくは他の不揮発性記憶部に記憶されてもよい。
【0092】
前述の明細書において、この発明の実施例を、実現例ごとに異なってもよい数多くの具体的な詳細を参照して記載した。したがって、この発明が何であるか、および何が出願人によってこの発明であるよう意図されるかを唯一かつ排他的に示すものは、この出願から、具体的な形で出る、任意の後の訂正を含む請求項の組である。そのような請求項に含まれる文言に対してここに明示的に述べられるすべての定義は、請求項において用いられるそのような文言の意味を支配することになる。したがって、請求項に明示的に記載されない限定、要素、特性、特徴、利点および属性は、その請求項の範囲をいかようにも限定すべきではない。明細書および図面は、したがって、限定の意味ではなく例示的な意味にみなされるべきものである。