(57)【要約】BIOS初期化コードが記憶デバイスを２以上の部分に分割する方法、装置、機械読み取り可能媒体を説明する。さらに、BIOSデバイスハンドラーがその分割された記憶デバイスの部分を用いてRAIDレベルの属性を提供する記憶アレイを実施してもよい。
2006507603.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスであって、
プロセッサと、
前記プロセッサと少なくとも１つの記憶デバイス間でデータを転送するコントローラと、
前記コントローラとは離れたファームウェアとを有し、前記ファームウェアは、前記プロセッサにより実行されたとき、前記プロセッサに
前記少なくとも１つの記憶デバイスを複数の部分に分割させ、
前記少なくとも１つの記憶デバイスの複数の部分から記憶アレイを生成させる
命令を有することを特徴とするコンピューティングデバイス。
【請求項２】
請求項１に記載のコンピューティングデバイスであって、
実行されたとき、前記プロセッサに、前記ファームウェアの記憶デバイスハンドラを介して前記少なくとも１つの記憶デバイスを評価させるオペレーティングシステムをさらに有することを特徴とするコンピューティングデバイス。
【請求項３】
請求項２に記載のコンピューティングデバイスであって、
前記オペレーティングシステムは、前記プロセッサに前記記憶デバイスハンドラを実行させる割り込みを生成させることを特徴とするコンピューティングデバイス。
【請求項４】
請求項１に記載のコンピューティングデバイスであって、
前記少なくとも１つの記憶デバイスは、第１の記憶デバイスと第２の記憶デバイスを有し、
前記ファームウェアは、実行されたとき、前記プロセッサに前記第１の記憶デバイスを第１部分と第２部分に分割させ、前記第２の記憶デバイスを第１部分と第２部分に分割させる命令を有することを特徴とするコンピューティングデバイス。
【請求項５】
請求項４に記載のコンピューティングデバイスであって、
前記ファームウェアは、実行されたとき、前記プロセッサに、前記第１の記憶デバイスの前記第１部分と前記第２の記憶デバイスの前記第１部分にわたってデータをストライピングさせる命令を有することを特徴とするコンピューティングデバイス。
【請求項６】
請求項４に記載のコンピューティングデバイスであって、
前記ファームウェアは、実行されたとき、前記プロセッサに、前記第１の記憶デバイスの前記第１部分のデータを前記第２のデバイスの前記第２部分にミラーさせ、前記第２の記憶デバイスの前記第１部分のデータを前記第１の記憶デバイスの前記第２部分にミラーさせる命令を有することを特徴とするコンピューティングデバイス。
【請求項７】
１以上の記憶デバイスを有するコンピューティングデバイスのためのファームウェアであって、前記ファームウェアは、実行されたとき、前記コンピューティングデバイスに、
第１の記憶デバイスの記憶容量がその全記憶容量の実質的に半分であることを報告することにより、前記第１の記憶デバイスの第１部分と第２部分とを決定させ、
前記第１の記憶デバイスの前記第１部分と前記第２部分を有する記憶アレイを生成させる複数の命令を有することを特徴とするファームウェア。
【請求項８】
請求項７に記載のファームウェアであって、前記コンピューティングデバイスに、
前記第１の記憶デバイスの前記第１部分にデータを書き込ませ、
前記第１の記憶デバイスの前記第２部分にデータをミラーさせる命令をさらに有することを特徴とするファームウェア。
【請求項９】
請求項７に記載のファームウェアであって、前記コンピューティングデバイスに、
第２の記憶デバイスの記憶容量がその全記憶容量の実質的に半分であることを報告することにより前記第２の記憶デバイスの第１部分と第２部分とを決定させ、
前記第２の記憶デバイスの前記第１部分と前記第２部分をさらに有する前記記憶アレイを生成させる命令をさらに有することを特徴とするファームウェア。
【請求項１０】
請求項９に記載のファームウェアであって、前記コンピューティングデバイスに、
前記第１の記憶デバイスの前記第１部分と前記第２の記憶デバイスの前記第１部分とにわたりデータをストライピングさせる命令をさらに含むことを特徴とするファームウェア。
【請求項１１】
請求項９に記載のファームウェアであって、前記コンピューティングデバイスに、
前記第１の記憶デバイスの前記第１部分と前記第２の記憶デバイスの前記第１部分に書き込まれたデータを、前記第１の記憶デバイスの前記第２部分と前記第２の記憶デバイスの前記第２部分にミラーさせる命令をさらに有することを特徴とするファームウェア。
【請求項１２】
請求項９に記載のファームウェアであって、前記コンピューティングデバイスに、
前記第１の記憶デバイスの前記第１部分に書き込まれたデータを、前記第２の記憶デバイスの前記第２部分にミラーさせ、
前記第２の記憶デバイスの前記第１部分に書き込まれたデータを、前記第１の記憶デバイスの前記第２部分にミラーさせる命令をさらに有することを特徴とするファームウェア。
【請求項１３】
請求項１２に記載のファームウェアであって、前記コンピューティングデバイスに、
前記第１の記憶デバイスと前記第２の記憶デバイスの前記第１部分にわたってデータをストライピングさせる命令をさらに有することを特徴とするファームウェア。
【請求項１４】
第１の記憶デバイスを第１の複数の部分に分割するステップと、
前記第１の記憶デバイスが前記第１の複数の部分の最小部分に等しい記憶容量を有することを報告するステップと、
前記第１の複数の部分に、またはその部分から、データを転送する命令を前記第１の記憶デバイスに発効するステップとを有することを特徴とする方法。
【請求項１５】
請求項１４に記載の方法であって、前記第１の記憶デバイスが前記コマンドを実行するのに応じて、
前記第１の記憶デバイスの第１部分にデータを転送するステップと、
前記第１の記憶デバイスの第２部分に前記データをミラーするステップとを有することを特徴とする方法。
【請求項１６】
請求項１４に記載の方法であって、
第２の記憶デバイスを第２の複数の部分に分割するステップと、
前記第２の記憶デバイスが前記第２の複数の部分の最小部分に等しい記憶容量を有することを報告するステップと、
前記第２の複数の部分に、またはその部分からデータを転送する命令を前記第２の記憶デバイスに発効するステップとを有することを特徴とする方法。
【請求項１７】
請求項１６に記載の方法であって、
前記第１の記憶デバイスと前記第２の記憶デバイスが前記それぞれのコマンドを処理するのに応じて、前記第１の記憶デバイスの第１部分と前記第２の記憶デバイスの第１部分にわたってデータをストライピングするステップをさらに有することを特徴とする方法。
【請求項１８】
請求項１６に記載の方法であって、前記第１の記憶デバイスと前記第２の記憶デバイスが前記それぞれのコマンドを処理するのに応じて、
前記第１の記憶デバイスの第１部分と前記第２の記憶デバイスの第１部分にデータをストライピングするステップと、
前記第１の記憶デバイスの第２部分と前記第２の記憶デバイスの第２部分に前記データをミラーするステップとをさらに有することを特徴とする方法。
【請求項１９】
請求項１６に記載の方法であって、前記第１の記憶デバイスと前記第２の記憶デバイスが前記それぞれのコマンドを処理するのに応じて、
前記第１の記憶デバイスの第１部分と前記第２の記憶デバイスの第２部分からデータをストライピングするステップをさらに有することを特徴とする方法。
【請求項２０】
請求項１６に記載の方法であって、
前記第１の記憶デバイスを分割するステップは、前記第１の記憶デバイスの第１部分と第２部分を決定するため、前記第１の記憶デバイスの最大アクセス可能セクターを設定するステップを有し、
前記第２の記憶デバイスを分割するステップは、前記第２の記憶デバイスの第１部分と第２部分を決定するため、前記第２の記憶デバイスの最大アクセス可能セクターを設定するステップを有することを特徴とする方法。
【発明の詳細な説明】
【背景技術】
【０００１】
記憶アレイはデータアクセス性能を高め、耐障害性を高める役に立つ。記憶アレイは一般に、１以上のRAID（redundant  arrays  of  inexpensive  disks）レベルを実施するとして説明される。例えば、RAIDレベル０あるいはRAID０は、一般に、２以上の記憶デバイスよりなる記憶アレイであってそのアレイの記憶デバイスにわたってデータ読み出しとデータ書き込みがストライプされる記憶アレイを指す。アレイの記憶デバイスにわたるデータ読み出しと書き込みをストライプすると、読み出しと書き込みの性能が向上する。アレイの記憶デバイスは、読み出しまたは書き込み要求を満たすために、基本的に、並列にアクセスされるからである。しかし、RAID０アレイは冗長性は提供せず、アレイの耐障害性も向上させない。その結果、RAID０アレイの記憶デバイスのいずれかが故障すると、アレイのすべてのデータが失われる。故障した記憶デバイスに関連したデータはアレイ中に散在しているからである。
【０００２】
RAIDレベル１またはRAID１は、一般に、２以上の記憶デバイスよりなる記憶アレイであって、データ書き込みがアレイの各記憶デバイスにミラーされる記憶アレイを指す。データ書き込みをアレイの各記憶デバイスにミラーすると、そのアレイの耐障害性が向上する。そのアレイの記憶デバイスのいずれかが故障したとき、そのアレイの他の記憶デバイスからデータを読み出してもよいからである。しかし、データ書き込みをミラーすると、データ書き込み性能が下がる傾向がある。そのデータをアレイの他の記憶デバイスにミラーするため、追加的データ書き込みが必要だからである。読み出しがそのアレイの記憶デバイスにわたってバランス／ストライプしている場合、データをミラーすると、読み出し性能は高くなる。しかし、多くの実施例では、読み出し要求はすべてアレイの単一の記憶デバイスに対してなされ、故障の時だけそのアレイの他の記憶デバイスから読み出す。
【０００３】
最後に、RAIDレベル０＋１またはRAID０＋１は、一般に、４以上の記憶デバイスよりなる記憶アレイであって、データ書き込みがストライプされたアレイにミラーされる記憶アレイを指す。例えば、RAID０＋１アレイは、第１のRAID０アレイと第２のRAID０アレイよりなる。データは、第１のRAID０に書き込まれ、RAID１に従って第２のRAID０にミラーされる。繰り返すが、データ書き込みをミラーすると、アレイの耐障害性は高くなるが、追加的書き込みが生じるため、書き込み性能は低くなる。しかし、書き込み性能の低下の一部は、第１と第２のRAID０アレイがデータをそれぞれのアレイの記憶デバイスにわたってストライプすることにより相殺される。
【詳細な説明】
【０００４】
以下の詳細な説明において、本発明を十分理解できるように細部を多数説明した。しかし、本発明はこれらの細部なしでも実施できる。他の実施例では、本発明をわかりにくくしないように、周知の方法、手続き、コンポーネント、および回路を詳細には説明しない。さらに、例としてサイズ、モデル、値、範囲を記載したが、だからといって一部の実施形態はこれらの例には限定されない。
【０００５】
本明細書において「一実施形態」、「実施形態の一実施例」とは、説明した実施形態が特定のフィーチャ、構造、または特徴を含んでいてもよいことを表すが、すべての実施形態がその特定のフィーチャ、構造、または特徴を必ずしも含んでいるわけではない。さらにまた、上記のフレーズは必ずしも同じ実施形態を指すものではない。さらに、特定のフィーチャ、構造、または特徴を一実施形態に関して説明するとき、明示的に説明しようがしまいが、他の実施形態に関して、そのような特定のフィーチャ、構造、または特徴を作用させることを当業者は知っていることを表明するものである。
【０００６】
さらに、「第１の」、「第２の」、「第３の」等の用語は、同様に命名されたコンポーネントおよび／または動作を区別するラベルとして用いる。とくに、上記の用語はコンポーネントおよび／または動作の順番を表すものではない。さらに、上記の用語はあるコンポーネントおよび／または動作が他のコンポーネントおよび／または動作より重要であることを表すものではない。
【０００７】
コンピューティングデバイス１００の実施形態の実施例を図１に示した。コンピューティングデバイス１００は１以上のプロセッサ１０２1、．．．、１０２Pを有する。そのプロセッサ１０２1、．．．、１０２Pは、プロセッサバスを介してチップセット１０４と結合している。チップセット１０４は、１以上のプロセッサ１０２1、．．．、１０２Pをメモリ１０６、ファームウェア１０８、記憶デバイス（SD）コントローラ１１０、１以上の記憶デバイス１１２1、．．．、１１２D、およびその他のデバイス１１４（例えば、マウス、キーボード、ビデオコントローラ、フロッピー（登録商標）ディスク、ネットワークインターフェイスコントローラ、モデム等）と相互接続する。その相互接続は、チップセット１０４を有する１以上の集積回路デバイスまたはチップを介して行われる。特に、その他のデバイス１１４は多様なブリッジとバスを介してチップセット１０４と結合している。例えば、PCI（peripheral  component  interconnect）バス、AGP（accelerated  graphics  port）バス、USB（universal  serial  bus）バス、LPC（low  pin  count）バス、その他I/Oバス、および／または関連するブリッジ等である。
【０００８】
SDコントローラ１１０は、一般に、１以上のバスを介してSDコントローラ１１０に結合した記憶デバイス１１２1、．．．、１１２Dからデータを読み出したり書き込んだりするインターフェイスを提供する。一実施形態において、SDコントローラ１１０はチップセット１０４に組み込まれている。しかし、他の実施形態において、SDコントローラ１１０はチップセット１０４とは別体であり、コンピューティングデバイス１００のスロットに挿入されたアドインカードにより提供されてもよい。例えば、PCI（Peripheral  Component  Interconnect）スロット、PCIエクスプレススロット、ISA（Industry  Standard  Architecture）スロット、および／または他種の周辺相互接続である。さらに、SDコントローラ１１０は、記憶デバイス１１２1、．．．、１１２Dとそれがサポートしている記憶インターフェイスプロトコルを介してインターフェイスしている。例えば、SDコントローラ１１０と記憶デバイス１１２1、．．．、１１２Dは、以下の１以上のインターフェイスプロトコルをサポートしている：IDE（Integrated  Drive  Electronics）、ATA（Advanced  Technology  Attachment）、シリアルATA、SCSI（Small  Computer  System  Interface）、および／またはシリアルSCSI。
【０００９】
ファームウェア１０８はBIOS（Basic  Input/Output  System）コード１１６を有する。BIOS１１６は、１以上のプロセッサ１０２1、．．．、１０２Pがコンピューティングデバイス１００のコンポーネントにアクセスし初期化するために実行する命令およびルーチンを有する。一実施形態において、BIOS１１６は、１以上のプロセッサ１０２1、．．．、１０２Pが１以上の記憶デバイス１１２1、．．．、１１２Dを初期化するために実行するSD初期化コード１１８を有する。さらに、BIOS１１６は、１以上の記憶デバイス１１２1、．．．、１１２Dからデータを読み出したり、書き込んだりするSDハンドラー１２０を有する。一実施形態において、SD初期化コード１１８は、例えばSDハンドラ１２０の割り込みベクトル１３H等の割り込みベクトルに関連する。従って、１以上のプロセッサ１０２1、．．．、１０２Pは、例えば、ソフトウェア割り込み１３H等のソフトウェア割り込みに応じて、SDハンドラー１２０を実行する。従来、そのソフトウェア割り込みは、ｘ８６パーソナルコンピュータのIDEハードディスクにアクセスするためのBIOSコードに関連している。
【００１０】
メモリ１０６は、プロセッサ１０２1、．．．、１０２Pがデータを読み出したり書き込んだりするアドレス可能格納先を提供する１以上のメモリデバイスを有する。特に、一実施形態において、メモリ１０６はBIOSデータエリア１２２とオペレーティングシステム１２４を有する。１以上のプロセッサ１０２1、．．．、１０２Pは、オペレーティングシステム１２４を実行して、コンピューティングデバイス１００のコンポーネントにアクセスおよび制御をし、ユーザにコンピューティングデバイス１００と相互に作用し合う動作環境を提供する。さらに、メモリ１０６は、１以上のメモリ技術を用いて実施されてもよい。例えば、DRAM（dynamic  random  access  memory）デバイス、SDRAM（synchronous  dynamic  random  access  memory）デバイス、DDR（double  data  rate）SDRAMデバイス、QDR（quad  data  rate）SDRAMデバイス、その他の揮発または不揮発メモリデバイスなどである。
【００１１】
便宜上、BIOS１１６、SD初期化コード１１８、SDハンドラ１２０、オペレーティングシステム１２４、ブートローダ、および／またはソフトウェア／ファームウェアは、１以上の動作を実行するとして説明する。しかし、コンピューティングデバイス１００のハードウェア、例えばプロセッサ１０２1、．．．、１０２P等が、そのBIOS１１６、SD初期化コード１１８、SDハンドラ１２０、オペレーティングシステム１２４、ブートローダ、および／またはソフトウェア／ファームウェアの実行命令に応じて上記の動作を実行してもよい。
【００１２】
図２を参照して、実施例として、RAID０＋１を実施する記憶アレイ２００が示されている。従来のRAID０＋１アレイは少なくとも４つの記憶デバイスを必要とするが、記憶アレイ２００は２つの記憶デバイス１１２1、１１２2を有する。図示したように、記憶デバイス１１２1は第１部分２０２1と第２部分２０２2を有し、第２の記憶デバイス１１２2は第１部分２０４1と第２部分２０４2を有する。一般に、第１の記憶デバイス１１２1の第１部分２０２1と第２の記憶デバイス１１２2の第１部分２０４1は結合され、第１のRAID０アレイ２０６1を形成する。このRAID０アレイ２０６1においてデータは第１部分２０２1、２０４1にわたりストライプされる。同様に、第２の記憶デバイス１１２2の第２部分２０４2と第１の記憶デバイス１１２1の第２部分２０２2は結合され、第２のRAID０アレイ２０６2を形成する。このRAID０アレイ２０６2においてデータは第２部分２０４2、２０２2にわたりストライプされる。さらに、第１のRAID０アレイ２０６１と第２のRAID０アレイ２０６２は結合し、RAID１アレイを形成する。このRAID１アレイにおいて、第１のRAID０アレイ２０６１のデータは第２のRAID０アレイ２０６２をミラーする。
【００１３】
例えば、図２に示したように、データはチャンクA、．．．、Hに分けられ、記憶アレイ２００に書き込まれる。チャンクA、．．．、Hを記憶アレイ２００に書き込む結果、チャンクA、．．．、Hは第１のRAID０アレイ２０６１に書き込まれ、第２のRAID０アレイ２０６２にミラーされる。さらに、第１のRAID０アレイ２０６１に書き込まれたチャンクA、．．．、Hは記憶デバイス１１２1、１１２2の第１部分２０２1、２０４1にわたってストライプされる。とくに、チャンクA、C、E、Gは第１の記憶デバイス１１２1の第１の部分２０２1に書き込まれ、チャンクB、D、F、Hは第２の記憶デバイス１１２2の第１部分２０４1に書き込まれる。同様に、第２のRAID０アレイ２０６２に書き込まれたチャンクA、．．．、Hは記憶デバイス１１２1、１１２2の第２部分２０２2、２０４2にわたってストライプされる。特に、チャンクA、C、E、Gは第２の記憶デバイス１１２2の第２部分２０４2に書き込まれ、チャンクB、D、F、Hは第１記憶デバイス１１２1の第２部分２０２2に書き込まれる。
【００１４】
一実施形態において、第１の記憶デバイス１１２1はマスターデバイスとして第１のIDEバスまたはチャネルに結合され、第２の記憶デバイス１１２2はマスターデバイスとして第２のIDEバスまたはチャネルに結合される。２つの記憶デバイス１１２1、１１２2を別々のバスに結合することにより、SDハンドラー１２０は、SDコントローラ１１０に並行して、または実質的に並行して記憶デバイス１１２1、１１２2にアクセスするように要求する。データミラーリングは、非ミラーリング記憶デバイスシステムと比較して、記憶デバイス１１２1、１１２2に書き込まれるバイト数を倍増させ、それゆえバスを介して転送されるバイト数を倍増させる。しかし、２つの記憶デバイス１１２1、１１２2と関連するバス２０８1、２０８2にわたりデータをストライプすると、一般的に、単一のバスと単一の記憶デバイスを有する記憶デバイスシステムの２倍の帯域幅が提供される。従って、図２のアレイは、データのミラーリングではない単一の記憶デバイスと同等のデータ性能を達成する。さらに、図２のRAID０＋１アレイは、単一記憶デバイスシステムの２倍の読み出し性能に近づくデータ読み出し性能を達成する。読み出し要求は記憶デバイス１１２1、１１２2にわたりストライプされ、並行してサービスされるからである。さらにまた、図２のアレイは、第１の記憶デバイス１１２1または第２の記憶デバイス１１２2の故障を許容する。記憶デバイスのデータはすべて他の記憶デバイスにミラーされているからである。
【００１５】
図３には、図２のアレイを生成する方法の実施例を示した。一実施形態において、コンピューティングデバイス１００は、多様なイベント、例えばシステムパワーアップイベントやシステムリセットイベント等に応じて、図３の方法を実行する。さらに、一実施形態において、コンピューティングデバイス１００は、オペレーティングシステム１２４やそれの実行を引き起こすブートローダの起動の前に、図３の方法を実行する。
【００１６】
ブロック３００において、SD初期化コード１１８はSDハンドラー１２０をインストールする。一実施形態において、SD初期化コードはSDハンドラー１２０をファームウェア１０８からメモリ１０６にコピーし、メモリ１０６に格納されたSDハンドラー１２０のエントリーポイントを指し示す割り込み１３Hに関連する割り込みベクトルを更新する。さらに、SD初期化コード１１８はその他の割り込み、例えば、BIOS１１６の従来のSDハンドラー（図示せず）のエントリーポイントを指し示す割り込み４０H等に関連する割り込みベクトルを更新してもよい。この従来のSDハンドラーは以前、割り込み１３Hに関連していたものである。したがって、一実施形態において、プロセッサ１０２1、．．．、１０２Pは、割り込み１３Hに応じてSDハンドラー１２０を実行し、割り込み４０Hに応じて従来のSDハンドラーを実行してもよい。しかし、与えられたコンピュータアーキテクチャについて、SD初期化コード１１８は、SDハンドラー１２０を特定の割り込みと関連させるため、追加的および／または相違する動作を実行する必要があるかも知れない。さらに、SD初期化コード１１８は自分自身を異なる割り込みや複数の割り込みと関連させてもよい。
【００１７】
ブロック３０２において、SD初期化コード１１８は、SDコントローラ１１０に接続された利用可能記憶デバイス１１２1、．．．、１１２Dが少なくとも２つあるかどうかを判断する。このために、SD初期化コード１１８は多様なテストおよび／または診断を実行してもよい。例えば、SD初期化コード１１８は、SDコントローラ１１０の各チャネルが１以上の記憶デバイス１１２1、．．．、１１２Dに結合されているかどうかを判断する。さらに、SD初期化コード１１８は、SDコントローラ１１０に結合されている各記憶デバイス１１２1、．．．、１１２Dがうまく機能しているかどうかを確認する１以上の診断を実行し、うまく機能していないSDコントローラ１１０および／または記憶デバイス１１２1、．．．、１１２Dのチャネルをディスエーブルしてもよい。当然のことながら、上記のテストと診断は、一般に、SDコントローラ１１０と記憶デバイス１１２1、．．．、１１２Dにより使用される記憶技術に依存する。結果として、SD初期化コード１１８はある記憶技術しかサポートしておらず、多様なテストと診断を用いて実施される。多様なテストと診断とは、例えば、記憶デバイスの状態レジスタの読み出し、および／またはデータを記憶デバイスに書き込んだり読み出したりするかどうかの判断である。
【００１８】
利用可能な記憶デバイスが少なくとも２つ無いと判断すると、ブロック３０４において、SD初期化コード１１８はＲＡＩＤサポートをディスエーブルし、終了する。そうでなければ、ブロック３０６において、SD初期化コード１１８は、SDコントローラ１１０に結合された記憶デバイスおよびアレイの数をオペレーティングシステムに報告するため、BIOSデータエリア１２２を更新する。
【００１９】
一実施形態において、SD初期化コード１１８は、各RAID０＋１アレイを、２つの記憶デバイス１１２1、．．．、１１２Dを有するものとしてではなく、単一の記憶デバイスとして報告する。従って、上記実施形態におけるSD初期化コード１１８は、ブロック３０２において、取得した利用可能記憶デバイス１１２1、．．．、１１２Dの数を２で割ることにより、記憶デバイス１１２1、．．．１１２Dの有効数を取得する。従って、SD初期化コード１１８が２つの記憶デバイス１１２1、１１２2を検知したとき、SD初期化コード１１８は、オペレーティングシステム１２４に単一の記憶デバイスを報告するため、BIOSデータエリア１２２を更新する。
【００２０】
SD初期化コード１１８は、ブロック３０８において、記憶デバイス１１２1、．．．、１１２Dのパラメータを取得する。一実施形態において、SD初期化コード１１８は、５１２バイトのデバイス識別データを取得するため、各ATA記憶デバイス１１２1、．．．、１１２DにIDENTIFY  DEVICEコマンドを発行する。一実施形態において、デバイス識別データは、論理シリンダー数、論理ヘッド数、論理トラックごとの論理セクター数を有する。これらは一体として記憶デバイス１１２のサポートされた構造を決定する。さらに、デバイス識別データは、論理シリンダーの現在数、論理ヘッドの現在数、トラックごとの論理セクターの現在数を有する。これらは一体として記憶デバイス１１２の現在の構造を決定する。識別データは、セクター中の現在記憶容量と、ユーザアドレス可能セクターの全数とを有してもよい。これらのうちいずれかを記憶デバイスの現在の記憶容量を決定するために用いてもよい。さらにまた、デバイス識別データは、例えば、DMA転送、コマンドセット、PIOモード、パワーマネージメント等の動作パラメータに関する情報を有してもよい。
【００２１】
ブロック３１０において、SD初期化コード１１８は、第１の記憶デバイス１１２1を２つの実質的に等しい部分２０２1、２０２2に分割してもよく、第２の記憶デバイス１１２2を２つの実質的に等しい部分２０４1、２０４2に分割してもよい。一実施形態において、SD初期化コード１１８は、第１の記憶デバイス１１２1にSET  MAXコマンドを発行することにより、第１の記憶デバイス１１２1を第１部分２０２1と第２部分２０２2に分割する。このSET  MAXコマンドは、第１の記憶デバイス１１２1の最大アクセス可能セクターを第１の記憶デバイス１１２1の最小部分２０２1、２０２2のセクター数に設定する。同様に、SD初期化コード１１８は、第２の記憶デバイス１１２2にSET  MAXコマンドを発行することにより、第２の記憶デバイス１１２2を第１部分２０４1と第２部分２０４2に分割する。このSET  MAXコマンドは、第２の記憶デバイス１１２2の最大アクセス可能セクターを第２の記憶デバイス１１２2の最小部分２０４1、２０４2のセクター数に設定する。
【００２２】
SD初期化コード１１８は、ブロック３１２において、デバイス識別データに基づき、性能をよくするため、記憶デバイス１１２1、１１２2およびSDコントローラ１１０を初期化する。特に、SD初期化コード１１８は、記憶デバイス１１２1、１１２2とSDコントローラ１１０をプログラムして、記憶デバイス１１２1、１１２2およびSDコントローラ１１０によりサポートされた最高性能の設定とする。例えば、SD初期化コード１１８は、最高速サポートPIO、マルチワードDMA、ウルトラDMAモードのために、記憶デバイス１１２1、１１２2およびSDコントローラをプログラムする。
【００２３】
SD初期化コード１１８は、ブロック３１４において、第１の記憶デバイス１１２1の容量が最小部分２０２1、２０２2の容量と等しいことをオペレーティングシステム１２４に報告するため、BIOSデータエリア１２２を更新する。さらに、SD初期化コード１１８は、第２の記憶デバイス１１２2の容量が最小部分２０４1、２０４2の容量と等しいことをオペレーティングシステムに報告するため、BIOSデータエリア１２２を更新する。従って、SD初期化コード１１８は、RAIDレベルおよびデータ冗長性を実施するために用いる記憶デバイス１１２1、１１２2の記憶容量の半分を実質的に確保する。
【００２４】
図４において、図２の記憶アレイ２００にアクセスする方法の実施例を示した。ブロック４００において、SDハンドラー１２０は、記憶アレイ２００からデータを読み出したり書き込んだりする要求を受信する。一実施形態において、SDハンドラー１２０は、多様なイベントに応じて上記の要求を受信する。例えば、アプリケーションやペレーティングシステム１２４が記憶アレイ２００からデータ読み出しや書き込みを要求するときである。特に、アプリケーションおよびオペレーティングシステム１２４は、割り込み１３Hを生成してもよい。この割り込み１３Hにより、それに関連したSDハンドラー１２０に要求パラメータが提供される。
【００２５】
SDハンドラー１２０は、ブロック４０２において、その要求が有効であるかどうか判断する。一実施形態において、SDハンドラー１２０は、要求されたセクターが記憶アレイ２００の第１部分２０２1、２０４1のアクセス可能セクターに対応するかどうかを判断してもよい。例えば、その要求は、セクターカウントと、LBA（論理ブロックアドレッシング）アドレスまたはCHS（シリンダー／ヘッド／セクター）アドレスを特定する開始セクターとを提供してもよい。SDハンドラー１２０は、この開始セクターおよびセクターカウントから終了セクターを決定する。さらに、SDハンドラー１２０は、BIOSデータエリア１２２により特定された最大アクセス可能セクターに基づき、この開始セクターと終了セクターが第１部分２０２1、２０４1のアクセス可能セクター範囲内にあるかどうかを判断する。要求が無効であるとの判断に応じて、SDハンドラー１２０は、要求を終了し、その要求をしたアプリケーションおよび／またはオペレーティングシステム１２４に、エラー発生を示す終了メッセージまたはエグジットコードを提供する（ブロック４０４）。
【００２６】
ブロック４０６において、SDハンドラー１２０は、要求された転送を実施する一連のコマンドを記憶アレイ２００の記憶デバイス１１２1、１１２2に発行する。例えば、記憶アレイ２００からデータのストライプを読み出す要求に応じて、SDハンドラー１２０は記憶デバイス１１２1、１１２2に一連の読み出しコマンドを発行する。このコマンドにより、記憶デバイス１１２1、１１２2は、第１部分２０２1、２０２2から要求されたデータを返す。当然のことながら、生成された読み出しコマンドの数は要求されたデータ量と各チャンクのサイズに依存する。例えば、３２キロバイトチャンクを用いた記憶アレイ２００からの６４キロバイトデータの要求に応じて、SDハンドラー１２０は、第１の３２キロバイトチャンクを取得するために、第１の記憶デバイス１１２1に第１の読み出しコマンドを発行し、第２の３２キロバイトチャンクを取得するために第２の記憶デバイス１１２2に第２の読み出しコマンドを発行する。さらに、読み出しエラーが発生したときには、SDハンドラー１２０は、第２部分２０２2、２０４2から第１の３２キロバイトチャンクと第２の３２キロバイトチャンクのミラーされたコピーを取得するため、記憶デバイス１１２1、１１２2に第３の読み出しコマンドと第４の読み出しコマンドを発行する。
【００２７】
同様に、記憶アレイ２００にデータのストライプを書き込む要求に応じて、SDハンドラー１２０は、記憶デバイス１１２1、１１２2に一連の書き込みコマンドを発行する。この書き込みコマンドにより、記憶デバイス１１２1、１１２2は、第１部分２０２1、２０２2に要求のデータを書き込み、そのデータを第２部分２０２2、２０４2にミラーする。例えば、３２キロバイトチャンクを用いて記憶アレイ２００に６４キロバイトデータを書き込む要求に応じて、SDハンドラー１２０は、第１の記憶デバイス１１２1に第１の書き込みコマンドを発行する。これにより、第１の３２キロバイトチャンクが第１部分２０２1に格納される。また、第２の記憶デバイス１１２2に第２の書き込みコマンドを発行する。これにより、第２の３２キロバイトチャンクが第１部分２０４1に書き込まれる。さらに、SDハンドラー１２０は、第２の記憶デバイス１１２2に第３の書き込みコマンドを発行してもよい。これにより、第１の３２キロバイトチャンクが第２部分２０４2にミラーされる。また第１の記憶デバイス１１２1に第４の書き込みコマンドを発行してもよい。これにより、第２の３２キロバイトチャンクが第２部分２０２2にミラーされる。
【００２８】
SDハンドラー１２０は、ブロック４０８において、要求された転送が成功裏に完了したかどうかを判断する。要求が成功裏に完了したとの判断に応じて、SDハンドラー１２０は、ブロック４１０において、プロセスを終了し、要求が成功裏に完了したことを示すエグジットコードをアプリケーションおよび／またはオペレーティングシステム１２４に提供する。さらに、要求が読み出し要求であった場合、SDハンドラー１２０は、アプリケーションおよび／またはオペレーティングシステム１２４に、要求されたデータまたはその要求されたデータへのポインターを提供する。または、アプリケーションおよび／またはオペレーティングシステム１２４により要求された場所にその要求されたデータを格納する。要求が成功裏には完了しなかったという判断に応じて、SDハンドラー１２０は、ブロック４０４において、プロセスを終了し、要求が失敗したことを示すエグジットコードをアプリケーションおよびオペレーティングシステム１２４に提供する。
【００２９】
図５を参照して、他の記憶アレイ５００を示した。従来の記憶アレイ、例えば、RAID０およびRAID１アレイは記憶デバイスを少なくとも２つ必要とするが、記憶アレイ５００は、単一の記憶デバイス１１２1を有している。記憶デバイス１１２1は、第１部分２０２1および第２部分２０２2を有する。一般に、第１部分２０２1と第２部分２０２2は結合し、RAID１アレイを形成する。そのRAID１アレイにおいて、第１部分２０２1のデータは第２部分２０２2にミラーされる。例えば、図５に示したように、データはチャンクA、．．．、Dに分割され、そのチャンクA、．．．、Dは、記憶デバイス１１２1の第１部分２０２1に書き込まれ、第２部分にミラーされる。
【００３０】
データのミラーリングは、一般に、非ミラーリング記憶デバイスと比較して、記憶デバイス１１２1に書き込まれるバイト数が２倍になる。従って、記憶アレイ５００は、非ミラーリング記憶デバイスの半分のデータ書き込み性能を達成する。しかし、記憶アレイ５００は、非ミラーリング記憶デバイスの読み出し性能に近いデータ読み出し性能を達成する。読み出し要求は記憶デバイス１１２1の一部分によりサービスされるからである。さらにまた、記憶アレイ５００は、記憶デバイス１１２1の第２部分２０２2に再度要求をすることにより、第１部分２０２1からデータを読み出す時の失敗を許容する。このように、記憶アレイ５００は、断続的な格納またはデバイスエラーを許容し、故障した記憶デバイスに起因するデータロスからのプロテクションを与える。
【００３１】
図６において、図５の記憶アレイ５００を生成する方法の実施形態を示した。一実施形態において、コンピューティングデバイス１００は、多様なイベント、例えばシステムパワーアップイベントやシステムリセットイベント等に応じて、図６の方法を実行する。さらに、一実施形態において、コンピューティングデバイス１００は、オペレーティングシステム１２４やそれの実行を引き起こすブートローダの起動の前に、図５の方法を実行する。ブロック６００において、SD初期化コード１１８はSDハンドラー１２０をインストールする。一実施形態において、SD初期化コードはSDハンドラー１２０を図３のブロック３００と同様にインストールする。
【００３２】
ブロック６０２において、SD初期化コード１１８は、SDコントローラ１１０に接続された利用可能記憶デバイス１１２1、．．．、１１２Dが少なくとも１つあるかどうかを判断する。このために、SD初期化コード１１８は、図３のブロック３０２と同様に、多様なテストおよび／または診断を実行してもよい。利用可能な記憶デバイスが少なくとも１つ無いと判断すると、ブロック６０４において、SD初期化コード１１８はRAIDサポートをディスエーブルし、終了する。そうでなければ、ブロック６０６において、SD初期化コード１１８は、SDコントローラ１１０に結合された記憶デバイスおよびアレイの数をオペレーティングシステムに報告するため、BIOSデータエリア１２２を更新する。SD初期化コード１１８は、ブロック６０８において、利用可能記憶デバイス１１２1、．．．、１１２Dのパラメータを取得する。再度、SD初期化コード１１８は、図３のブロック３０８と同様に、利用可能記憶デバイスのパラメータを取得する。
【００３３】
ブロック６１０において、SD初期化コード１１８は、第１の記憶デバイス１１２1を２つの実質的に等しい部分２０２1、２０２2に分割する。一実施形態において、SD初期化コード１１８は、第１の記憶デバイス１１２1にSET  MAXコマンドを発行することにより、第１の記憶デバイス１１２1を第１部分２０２1と第２部分２０２2に分割する。このSET  MAXコマンドは、第１の記憶デバイス１１２1の最大アクセス可能セクターを第１の記憶デバイス１１２1の最小部分２０２1、２０２2のセクター数に設定する。
【００３４】
SD初期化コード１１８は、ブロック６１２において、デバイス識別データに基づき、性能をよくするため、記憶デバイス１１２1、１１２2およびSDコントローラ１１０を初期化する。特に、SD初期化コード１１８は、記憶デバイス１１２1、１１２2とSDコントローラ１１０をプログラムして、記憶デバイス１１２1、１１２2およびSDコントローラ１１０によりサポートされた最高性能の設定とする。例えば、SD初期化コード１１８は、最高速サポートPIO、マルチワードDMA、ウルトラDMAモードのために、記憶デバイス１１２1、１１２2およびSDコントローラをプログラムする。
【００３５】
SD初期化コード１１８は、ブロック６１４において、第１の記憶デバイス１１２1の容量が最小部分２０２1、２０２2の容量と等しいことをオペレーティングシステム１２４に報告するため、BIOSデータエリア１２２を更新する。従って、SD初期化コード１１８は、RAIDレベルおよびデータ冗長性を実施するために用いる記憶デバイス１１２1の記憶容量の半分を実質的に確保する。
【００３６】
図７において、図５の記憶アレイ５００にアクセスする方法の実施例を示した。ブロック７００において、SDハンドラー１２０は、記憶アレイ５００からデータを読み出したり書き込んだりする要求を受信する。一実施形態において、SDハンドラー１２０は、多様なイベントに応じて上記の要求を受信する。例えば、アプリケーションやオペレーティングシステム１２４が記憶アレイ５００からデータ読み出しや書き込みを要求するときである。特に、アプリケーションおよびオペレーティングシステム１２４は、割り込み１３Hを生成してもよい。この割り込み１３Hにより、それに関連したSDハンドラー１２０に要求パラメータが提供される。
【００３７】
SDハンドラー１２０は、ブロック７０２において、その要求が有効であるかどうか判断する。一実施形態において、SDハンドラー１２０は、要求されたセクターが記憶アレイ５００の第１部分２０２1のアクセス可能セクターに対応するかどうかを判断してもよい。要求が無効であるとの判断に応じて、SDハンドラー１２０は、要求を終了し、その要求をしたアプリケーションおよび／またはオペレーティングシステム１２４に、エラー発生を示す終了メッセージまたはエグジットコードを提供する（ブロック７０４）。
【００３８】
ブロック７０６において、SDハンドラー１２０は、要求された転送を実施する一連のコマンドを記憶アレイ５００の記憶デバイス１１２1に発行する。例えば、３２キロバイトチャンクを用いた記憶アレイ５００からの６４キロバイトデータの要求に応じて、SDハンドラー１２０は、第１と第２の３２キロバイトチャンクを取得するために、第１の記憶デバイス１１２1に第１の読み出しコマンドを発行する。さらに、読み出しエラーが発生したときには、SDハンドラー１２０は、第２部分２０２2から第１と第２の３２キロバイトチャンクのミラーされたコピーを取得するため、記憶デバイス１１２1に第２の読み出しコマンドを発行する。
【００３９】
ブロック４０６において、SDハンドラー１２０は、要求された転送を実施する一連のコマンドを記憶アレイ２００の記憶デバイス１１２1、１１２2に発行する。例えば、記憶アレイ２００からデータのストライプを読み出す要求に応じて、SDハンドラー１２０は記憶デバイス１１２1、１１２2に一連の読み出しコマンドを発行する。このコマンドにより、記憶デバイス１１２1、１１２2は、第１部分２０２1、２０２2から要求されたデータを返す。当然のことながら、生成された読み出しコマンドの数は要求されたデータ量と各チャンクのサイズに依存する。例えば、３２キロバイトチャンクを用いた記憶アレイ２００からの６４キロバイトデータの要求に応じて、SDハンドラー１２０は、第１の３２キロバイトチャンクを取得するために、第１の記憶デバイス１１２1に第１の読み出しコマンドを発行し、第２の３２キロバイトチャンクを取得するために第２の記憶デバイス１１２2に第２の読み出しコマンドを発行する。さらに、読み出しエラーが発生したときには、SDハンドラー１２０は、第２部分２０２2、２０４2から第１の３２キロバイトチャンクと第２の３２キロバイトチャンクのミラーされたコピーを取得するため、記憶デバイス１１２1、１１２2に第３の読み出しコマンドと第４の読み出しコマンドを発行する。
【００４０】
同様に、記憶アレイ５００にデータのストライプを書き込む要求に応じて、SDハンドラー１２０は、記憶デバイス１１２1に一連の書き込みコマンドを発行する。この書き込みコマンドにより、記憶デバイス１１２1は、第１部分２０２1に要求のデータを書き込み、そのデータを第２部分２０２2にミラーする。例えば、３２キロバイトチャンクを用いて記憶アレイ５００に６４キロバイトデータを書き込む要求に応じて、SDハンドラー１２０は、第１の記憶デバイス１１２1に第１の書き込みコマンドを発行する。これにより、第１および第２の３２キロバイトチャンクが第１部分２０２1に格納される。さらに、SDハンドラー１２０は、記憶デバイス１１２1に第２の書き込みコマンドを発行してもよい。これにより、第１と第２の３２キロバイトチャンクが第２部分２０２2にミラーされる。
【００４１】
SDハンドラー１２０は、ブロック７０８において、要求された転送が成功裏に完了したかどうかを判断する。要求が成功裏に完了したとの判断に応じて、SDハンドラー１２０は、ブロック７１０において、プロセスを終了し、要求が成功裏に完了したことを示すエグジットコードをアプリケーションおよび／またはオペレーティングシステム１２４に提供する。さらに、要求が読み出し要求であった場合、SDハンドラー１２０は、アプリケーションおよび／またはオペレーティングシステム１２４に、要求されたデータまたはその要求されたデータへのポインターをさらに提供する。または、アプリケーションおよび／またはオペレーティングシステム１２４により要求された場所にその要求されたデータを格納する。要求が成功裏には完了しなかったという判断に応じて、SDハンドラー１２０は、ブロック７０４において、プロセスを終了し、要求が失敗したことを示すエグジットコードをアプリケーションおよびオペレーティングシステム１２４に提供する。
【００４２】
コンピューティングデバイス１００は、機械読み出し可能媒体の実行命令に応じて、図３、４、６、７に示された動作のすべてまたはその一部を実行する。ここで、機械読み出し可能媒体は、例えば、ROM（リードオンリーメモリ）、RAM（ランダムアクセスメモリ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、および／または電気的、光学的、音響的その他の形式の伝搬信号である。例えば、搬送波、赤外線信号、デジタル信号、アナログ信号等である。さらにまた、図３、４、６、７は動作シーケンスを示すが、一部の実施形態においては、コンピューティングデバイス１００は、例示した様々な動作を並行して、または異なる順番で実行してもよい。
【００４３】
本発明のフィーチャを実施例を参照して説明したが、この記載は本発明の範囲を限定するものではない。本発明の他の実施形態だけではなく、これらの実施例を修正したものは、当業者には明らかであれば、本発明の精神と範囲に含まれる。
【図面の簡単な説明】
【００４４】
本発明を添付した図面に示したが、これは本発明を例示するものであり、限定するものではない。図示を容易かつ明らかにするため、図面に示したエレメントは必ずしも一定の縮尺ではない。例えば、エレメントの一部は、明確にするため他のエレメントと比較して誇張されている。さらに、適当と思われる場合には、複数の図面で同一または類似のエレメントを示すために同じ参照符号を用いた。
【図１】少なくとも１の記憶デバイスを有するコンピューティングデバイスの実施例を示す図である。
【図２】図１のコンピューティングデバイスの記憶アレイの実施例を示す図である。
【図３】図２のアレイの初期化方法の実施例を示す図である。
【図４】図２のアレイからの読み出しおよび書き込み方法の実施例を示す図である。
【図５】図１のコンピューティングデバイス記憶アレイの他の実施例を示す図である。
【図６】図５のアレイの初期化方法の実施例を示す図である。
【図７】図５のアレイからの読み出しおよび書き込み方法の実施例を示す図である。
【図１】
2006507603.tif 000003
【図２】
2006507603.tif 000004
【図３】
2006507603.tif 000005
【図４】
2006507603.tif 000006
【図５】
2006507603.tif 000007
【図６】
2006507603.tif 000008
【図７】
2006507603.tif 000009
【国際調査報告】
2006507603.tif 000010
2006507603.tif 000011
2006507603.tif 000012
2006507603.tif 000013
2006507603.tif 000014