(57)【要約】【課題】コンピュータのためのブート時間を改善するためにソリッドステートドライブを利用する方法および構造を提供すること。【解決手段】コンピュータは、コンピュータのオペレーティング・システムのためのブート・キャッシュを記憶するソリッドステートドライブと、オペレーティング・システムを記憶するハードディスクドライブと、プロセッサとを含む。プロセッサは、オペレーティング・システムのカーネルをロードする前に、ハードディスクドライブに向けられた入力／出力要求を遮断する割り込みハンドラをロードすることができる。割り込みハンドラは、それぞれの遮断された要求に応えてブート・キャッシュからのデータを提供できるかどうかを判定し、要求に応えてブート・キャッシュからのデータを提供できる場合は、要求をハードディスクドライブの代わりにソリッドステートドライブに転送することができる。【選択図】図１
2015062107.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータのオペレーティング・システムのためのブート・キャッシュを記憶するソリッドステートドライブ（１４０）と、
前記オペレーティング・システムを記憶するハードディスクドライブ（１３０）と、
前記オペレーティング・システムのカーネルをロードする前に、前記ハードディスクドライブに向けられた入力／出力要求を遮断する割り込みハンドラをロードするように動作可能なプロセッサ（１１０）とを備え、
前記割り込みハンドラは、それぞれの遮断された要求が前記ブート・キャッシュからのデータで提供されることができるかどうかを判定し、要求が前記ブート・キャッシュからのデータで提供されることができる場合は、前記要求を前記ハードディスクドライブの代わりに前記ソリッドステートドライブに転送するように動作可能であることを特徴とする、コンピュータ（１００）。
【請求項２】
前記割り込みハンドラが、前記コンピュータの基本入出力システムのＩＮＴ１３ｈ割り込みハンドラの代わりとなる、請求項１に記載のコンピュータ。
【請求項３】
前記割り込みハンドラは、前記コンピュータがリアル・モードで動作している間に、前記入力／出力要求を遮断するようにさらに動作可能である、請求項１に記載のコンピュータ。
【請求項４】
前記プロセッサが、ランダムアクセスメモリ（１５０）の下位１メガバイト領域に前記割り込みハンドラをロードするようにさらに動作可能である、請求項１に記載のコンピュータ。
【請求項５】
前記プロセッサが、前記コンピュータの基本入出力システムのＩＮＴ１５ｈ割り込みハンドラの代わりとなる追加の割り込みハンドラをロードするようにさらに動作可能であり、前記追加の割り込みハンドラは、前記割り込みハンドラによってランダムアクセスメモリ（１５０）内に占められた空間は上書きのためには利用できないことを示すように動作可能である、請求項１に記載のコンピュータ。
【請求項６】
オペレーティング・システムを記憶するハードディスクドライブを含むコンピュータのために、割り込みハンドラをロードするステップ（３０２）と、
前記オペレーティング・システムのカーネルをロードする前に、前記割り込みハンドラを用いて前記コンピュータの前記ハードディスクドライブに向けられた入力／出力要求を遮断するステップ（３０４）と、
前記遮断された要求が、前記コンピュータのソリッドステートドライブ上に記憶された前記オペレーティング・システムのためのブート・キャッシュからのデータで提供されることができるかどうかを判定するステップ（３０６）と、
前記要求が前記ブート・キャッシュからのデータで提供されることができる場合は、前記要求を前記ハードディスクドライブの代わりに前記ソリッドステートドライブに転送するステップ（３０８）と
を具備する、方法。
【請求項７】
前記割り込みハンドラが、前記コンピュータの基本入出力システムのＩＮＴ１３ｈ割り込みハンドラの代わりとなる、請求項６に記載の方法。
【請求項８】
前記コンピュータがリアル・モードで動作している間に、前記割り込みハンドラを用いて前記入力／出力要求を遮断することをさらに含む、請求項６に記載の方法。
【請求項９】
ランダムアクセスメモリの下位１メガバイト領域に前記割り込みハンドラをロードすることをさらに含む、請求項６に記載の方法。
【請求項１０】
前記コンピュータの基本入出力システムのＩＮＴ１５ｈ割り込みハンドラの代わりとなる追加の割り込みハンドラをロードすることをさらに含み、前記追加の割り込みハンドラは、前記割り込みハンドラによってランダムアクセスメモリ内に占められた空間は上書きのためには利用できないことを示す、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本文書は、参照により本明細書に組み込まれている「SOLID STATE DRIVES THAT CACHE BOOT DATA」という名称のインド特許出願第４３０９／ＣＨＥ／２０１３号（２０１３年９月２３日に出願）の優先権を主張するものである。
【０００２】
本発明は一般にコンピュータに関し、より詳細にはコンピュータのためのブート・プロセスに関する。
【背景技術】
【０００３】
市場では、速やかにブートするコンピュータシステムが特に望まれるようになっている。タブレットおよび携帯電話は汎用コンピュータより複雑さが大幅に低いオペレーティング・システム（ＯＳ）を用いているが、消費者は汎用コンピュータに対してもこれらのデバイスのブート速度と同様なブート速度を期待している。回転型／回転可能磁気ディスクドライブ（ハードディスクドライブまたはＨＤＤとしても知られる）は、多くの汎用コンピュータにおいて大容量記憶のために用いられるが、これらのＨＤＤはブート時間を遅らせる原因となっている。ＨＤＤは、データを取り出すときにかなりの待ち時間を有し、入力／出力（Ｉ／Ｏ）要求を処理するときのデータ転送速度が低い。ソリッドステートドライブ（ＳＳＤ）などの他のストレージ技術は、従来のＨＤＤよりアクセス速度および転送速度が大幅に速い。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−６０３１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のＨＤＤと同様の記憶容量を有するＳＳＤはしばしばかなり高価であるので、大容量記憶のためにＳＳＤを用いるのはＨＤＤに比べて極めて高コストとなる問題がある。
【課題を解決するための手段】
【０００６】
本発明に関するシステムおよび方法は、ＨＤＤを有する汎用コンピュータのブート速度を高めるためにＳＳＤを利用する。ＳＳＤは例えば、ＨＤＤにアクセスするＢＩＯＳインターフェースを用いるＯＳのために、入力されたＩ／Ｏブート要求に応えてデータを提供するようにブート・キャッシュを記憶する。該キャッシュは、さらには、コンピュータのためのＯＳカーネルが初期化される前に受け取ったＩ／Ｏ要求（Ｉ／Ｏスタックとしても知られる）に応えてデータを提供することができる。該ブートＩ／Ｏ要求は、ＨＤＤの代わりにＳＳＤを通じて処理されるので、該ブート・プロセスはＨＤＤのみが用いられる場合より大幅に速くなる。
【０００７】
１つの例示としての実施形態はコンピュータに関する。該コンピュータは、オペレーティング・システムのためのブート・キャッシュを記憶するＳＳＤと、オペレーティング・システムを記憶するハードディスクドライブと、プロセッサとを含む。該プロセッサは、オペレーティング・システムのカーネルをロードする前に、ハードディスクドライブに向けられた入力／出力要求を遮断する割り込みハンドラ（interrupt handler）をロードすることができる。該割り込みハンドラは、遮断された（intercepted）要求それぞれが該ブート・キャッシュからのデータを提供できるかどうかを判定し、該要求が該ブート・キャッシュからのデータを提供できる場合には、要求をハードディスクドライブの代わりにＳＳＤに転送することができる。
【０００８】
他の例示としての実施形態（例えば、上記の実施形態に関連する方法およびコンピュータ可読媒体）についても以下で述べられる。
【０００９】
次に本発明のいくつかの実施形態について、例としてのみ、添付の図面を参照して説明する。すべての図面上で同じ参照番号は同じ要素、または同じタイプの要素を表す。
【図面の簡単な説明】
【００１０】
【図１】ソリッドステートドライブ（ＳＳＤ）ブート・システムを利用する例示としてのコンピュータのブロック図である。
【図２】コンピュータにおける例示としてのブート・プロセスを示す略図である。
【図３】ＳＳＤブート・システムを動作させるための例示としての方法を示すフローチャートである。
【図４】ＢＩＯＳディスク割り込みハンドラのためのキャッシュの例示としてのＲＡＭレイアウトを示すブロック図である。
【図５】ＳＳＤの例示としてのブート・キャッシュを示すブロック図である。
【図６】ＳＳＤのブート・キャッシュのための例示としてのキャッシュ・メタデータ・テーブルを示すブロック図である。
【図７】例示としての実施形態において、ＳＳＤ上に記憶されたブート・キャッシュ内のデータにアクセスするために、どのようにハッシュ・バケットを用いることができるかを示すブロック図である。
【図８】例示としての実施形態において、ＳＳＤ上に記憶されたブート・キャッシュ内のデータにアクセスするために、キャッシュ・バケットを用いる方法を示すフローチャートである。
【図９】ブート・キャッシュのためのテーブルに登録する例示としての方法を示すフローチャートである。
【発明を実施するための形態】
【００１１】
図面および以下で述べられることは本発明の特定の例示としての実施形態を説明する。したがって当業者は、本明細書では明示的に述べられていないまたは示されないが、本発明の原理を具現化し本発明の範囲に含まれる様々な構成を考案できることが理解されるであろう。さらに本明細書で述べられるいずれの例も本発明の原理の理解を助けるためのものであり、このような具体的に記述された例および条件に限定するものではないと解釈されるべきである。そのため、本発明は以下に述べられる特定の実施形態または例に限定されず、特許請求の範囲およびそれらの等価なものに限定されるものである。
【００１２】
図１は、ソリッドステートドライブ（ＳＳＤ）ブート・システムを利用する例示としてのコンピュータ１００のブロック図である。コンピュータ１００は、電源がオンにされブートされたときに、ワードプロセッシング、インターネット・ブラウジング、ゲームなどの多様な汎用のコンピューティング・タスクを実行するために、ユーザがオペレーティング・システム（ＯＳ）と対話することを可能にする。この実施形態ではコンピュータ１００は、プロセッサ１１０、リードオンリメモリ（ＲＯＭ）１２０、ハードディスクドライブ（ＨＤＤ）１３０、ソリッドステートドライブ（ＳＳＤ）１４０、およびランダムアクセスメモリ（ＲＡＭ）１５０を含む。コンピュータ１００はまた、所望であれば他のデバイス、インターフェース、ディスプレイ、および構成要素を含むことができる。
【００１３】
電源がオンにされたときにはコンピュータ１００は、ブート動作のためのキャッシュとしてＳＳＤ１４０を用いる。したがって、コンピュータ１００のＯＳのカーネルがロードされる前に（before the OS kernel of computer 100 has loaded）、ＳＳＤ１４０はブート・プロセスを加速することができる。
【００１４】
プロセッサ１１０はコンピュータ１００内で、メモリ（ＨＤＤ１３０など）に記憶された論理命令に基づいてコンピューティング動作を行うように動作する。これらのコンピューティング動作は、コンピュータ１００をブートする、コンピュータ１００上で１つまたは複数のアプリケーション／サービスを実行する等のために、プロセッサ１１０によって実行される。プロセッサ１１０は、論理命令を実行することができる任意の適当なハードウェア・プロセッサを備えることができ、プロセッサ１１０は処理時にＲＡＭ１５０にデータをロードすることができる。
【００１５】
ＲＯＭ１２０は、コンピュータ１００のための基本入出力システム（ＢＩＯＳ）を記憶し、これはブート時にプロセッサ１１０によってアクセスされる。ＲＯＭ１２０は、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）および電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）などのメモリを含む、任意の適当なリードオンリメモリを備えることができる。
【００１６】
ＨＤＤ１３０は、マスタ・ブート・レコード（ＭＢＲ）などの、コンピュータ１００のためのブート・レコードを記憶する。ＨＤＤ１３０は、任意の適当な回転可能／回転型磁気ハードディスクドライブを備えることができる。プロセッサ１１０は、コンピュータ１００を初期化するためにＢＩＯＳ実行中に該ブート・レコードからのコードにアクセスする。
【００１７】
ＳＳＤ１４０は、コンピュータ１００のＢＩＯＳによって使用されるためのブート・キャッシュを記憶する。該キャッシュは、コンピュータ１００のためのＯＳカーネルがロードされる前に、ブートの「プリブート」段階（pre-boot phase）の期間に用いることができる。該キャッシュ自体は、ライト・スルー（write-through）またはライト・バック・キャッシュ（write-back cache）として実装することができる。ＳＳＤ１４０上にブート・キャッシュを実装することは、ＳＳＤ１４０がＨＤＤ１３０よりも短い待ち時間および／または大きいデータ転送速度を有するため、有利である。さらに、該ブート・キャッシュが、該ＯＳがロードする前の該プリブート段階において動作するので、コンピュータ１００はブート速度における顕著な向上を得る。ＳＳＤ１４０は、ＨＤＤ１３０のためのキャッシュを実装（implement）することができる任意の適当な固体メモリを備える。例えばＳＳＤ１４０は、フラッシュ・メモリ・デバイスを備えることができる。
【００１８】
本明細書で述べられる構成要素の具体的な配置、数、および構成は例示であり、限定するものではない。
【００１９】
図２は、Ｗｉｎｄｏｗｓ（登録商標）ＯＳを利用するコンピュータにおける例示としてのブート・プロセスを示す図２００である。図２は、プロセッサがリアル・モードで動作している間であってＯＳカーネルがロードされる前のプリブート段階時に、ＢＩＯＳがいくつかのブート動作を行うことを示す。これらの動作は、ＢＩＯＳの初期化、マスタ・ブート・レコードおよびボリューム・ブート・レコードへのアクセス、ブート・マネージャの実行などを含む。これらのプリブート・アクティビティは、大量のデータにアクセスし得る。しかし、（例えば、ディスク・クラス・キャッシュ・フィルタ・ドライバを通じて）キャッシングを管理するためにＯＳカーネルを用いるシステムにおいては、ブート・プロセスのプリブート段階を加速し、例えばプリブート段階の動作を促進するようにＳＳＤにおいてライト・バック・キャッシュをサポートする方法がない。これはプリブート段階時に、該ＳＳＤをキャッシングのために利用可能にするために利用できるドライバがないためである。
【００２０】
この問題に対処するために、図３はソ、リッドステートドライブ（ＳＳＤ）ブート・システムを動作させるための例示としての方法３００を表すフローチャートである。この実施形態の場合、ユーザがコンピュータ１００の電源をオンにし、プロセッサ１１０に動作を開始させたところであると仮定する。さらに方法３００を通して述べられるこのプリブート・プロセス時に、プロセッサ１１０はリアル・モードおよび／またはフラット・リアル・モードで動作すると仮定する。該リアル・モードではプロセッサ１１０は、ＲＡＭ１５０の限られた大きさのメモリ空間へのアクセスを有する。このメモリ空間の大きさは、ＲＡＭ１５０の「下位１ＭＢ領域」（low 1MB area）として通常知られている。該フラット・リアル・モードは、プロセッサ１１０がリアル・モードよりもＲＡＭ１５０の多くの部分にアクセスすることを可能にするが、依然としてＲＡＭ１５０の限られた部分へのアクセスを可能にするだけである。
【００２１】
プロセッサ１１０は、ＲＯＭ１２０からＲＡＭ１５０にＢＩＯＳ命令をロードすることによってＢＩＯＳを初期化する。ステップ３０２で、プロセッサ１１０は、割り込みハンドラ（interrupt handler）をロードする。該割り込みハンドラは、そうでない場合にＢＩＯＳによってロードされることになるハンドラの代わりとなることができる。
【００２２】
ステップ３０４で、該割り込みハンドラは、ＨＤＤ１３０に向けられた入力／出力（Ｉ／Ｏ）要求を遮断（intercept）する。この遮断プロセスは、ＯＳのカーネルをロードする前の、ブートのプリブート段階時に生じる。したがって、該ＯＳのディスクドライバは、まだロードされておらず、該ＯＳは、この時点ではブート・プロセスに関与しない。ステップ３０６で、該割り込みハンドラは、遮断されたＩ／Ｏ要求がＳＳＤ１４０のブート・キャッシュからのデータで提供（サービス）されることができるかどうかを判定する（whether the intercepted I/O request can be serviced with data from the boot cache of SSD140）。該Ｉ／Ｏ要求がＳＳＤ１４０からデータで提供（サービス）されることができる場合は、ステップ３０８で、該割り込みハンドラは、（以前にはＨＤＤ１３０をターゲットとしていた）該要求を、ＳＳＤ１４０上のブート・キャッシュに転送する。しかし、該Ｉ／Ｏ要求が、ＳＳＤ１４０上にキャッシュされていないデータに向けられている場合は、ステップ３１０で、該割り込みハンドラは、該要求をＨＤＤ１３０に向ける（すなわち該割り込みハンドラは、該要求を該ＳＳＤに転送しない）。
【００２３】
この実施形態の場合にプリブートが完了した後に、該プロセッサは仮想モードに永続的に切り換わり、該ＯＳカーネルはＲＡＭ１５０にロードされると仮定する。次いで該ＯＳはそれ自体のディスクドライバをロードし、コンピュータ１００を完全に作動状態にするために様々なＯＳブート・プロセスを実行する。
【００２４】
方法３００を用いて、ＨＤＤ上にＯＳを記憶したコンピュータのプリブート速度を向上するために、コンピュータのＯＳが作動状態となる前であっても、ＳＳＤブート・キャッシュを利用することができる。例えば、方法３００は、ブート・キャッシュのためのライト・バック・キャッシュ・ポリシー（write back cache policy）をサポートするキャッシュを動作させるために用いることができる。
【００２５】
方法３００の各ステップについて図１のコンピュータ１００を参照して述べたが、方法３００は他のシステムにおいても行うことができる。本明細書で述べられるフローチャートのステップは、すべてを含むものではなく、図に示されない他のステップを含むことができる。本明細書で述べられるステップはまた、別の順序で実行することもできる。
【００２６】
図４は、ＢＩＯＳディスク割り込みハンドラのためのキャッシュの例示としてのＲＡＭレイアウトを示すブロック図である。このＲＡＭレイアウトは、例えば方法３００を実行する間に用いることができる。図４によると、ステップ３０２で割り込みハンドラをロードするために用いられるプリブート・ドライバ・コードは、ＲＡＭ１５０の下位１ＭＢ領域内に保持される。キャッシュ・テーブルもＲＡＭ１５０に記憶され、ＳＳＤ１４０上のキャッシュにインデックスを付けるために該割り込みハンドラによって用いられる。この実施形態ではキャッシュ・テーブルは、フラット・リアル・モードにおいてアクセスできるＲＡＭ１５０の一部分に保持される。
【実施例】
【００２７】
以下の実施例では、さらなるプロセス、システム、および方法について、ラップトップ・コンピュータとの関連において述べる。ラップトップ・コンピュータは、ブート・キャッシュを記憶するために用いられるＳＳＤを含む。この実施例ではＳＳＤは、１６ギガバイト（ＧＢ）のｍＳＡＴＡ（mini Serial Advanced Technology Attachment）フラッシュドライブである。現在、ブート・キャッシュはデータで満たされるのを待っている。
【００２８】
＜セットアップ＞
この実施例ではラップトップがブート時にキャッシュを使用できるようにするために、ラップトップの初期ブートの前にいくつかのアクティビティが実行されている。具体的にはＳＳＤは、ラップトップのためのＢＩＯＳが活動化されたときにロードされることになるプリブート・ドライバを用いてプログラムされている。さらに、ラップトップのＨＤＤ上のマスタ・ブート・レコード（ＭＢＲ）は、ＳＳＤ上に記憶されたプリブート・ドライバを指し示すように、そのもとのバージョンから変更されている。したがって、ＢＩＯＳが最初にＭＢＲにアクセスしたときは、それはプリブート・ドライバをＲＡＭにロードし、このことはプリブート・ドライバが様々なプリブート・アクティビティを制御することを可能にする。
【００２９】
プリブート・ドライバは、ＢＩＯＳによって通常用いられる割り込みハンドラを、ＳＳＤキャッシュにアクセスできる新しい割り込みハンドラに置き換える。したがってラップトップがブートするときにプリブート・ドライバは、完全にＢＩＯＳをカスタム・コードで置き換える必要なしに、ＢＩＯＳのディスク・アクセス機能をシームレスに引き継ぐことができる。しかしラップトップが最初にプリブート・ドライバを用いてブートするときには、何のデータをＳＳＤ上にキャッシュするべきかが分からない。したがってラップトップが最初にオンにされたときには、プリブート・ドライバは学習モードにおいて動作する。学習モードについては、ラップトップのための初期ブート動作について述べた後に、以下でさらに詳しく述べる。
【００３０】
＜初期ブート動作＞
ブート動作をトリガするために、ユーザは電源ボタンを押すことによってラップトップをオンにし、ラップトップはブートのパワーオン・セルフ・テスト（ＰＯＳＴ）ＢＩＯＳ段階を活動化する。ＰＯＳＴ  ＢＩＯＳ段階が完了した後に、ＢＩＯＳは、ＩＮＴ１９ｈ割り込みハンドラ・ルーチンを呼び出し、これはプロセッサに、ＨＤＤ上に記憶されたＭＢＲの最初のセクタをロードさせる割り込みハンドラである。このＭＢＲセクタは、ラップトップのＳＳＤ上に記憶されたプリブート・ドライバを指し示すように変更されている。
【００３１】
プロセッサはＭＢＲ内の命令に従い、プリブート・ドライバをＲＡＭにロードする。プリブート・ドライバは、ラップトップのためのＯＳカーネル・イメージが初期化される前に、ラップトップのためのリアル・モードにおいてロードされる。プリブート・ドライバはリアル・モードにおいて、ＯＳカーネルがロードされる前にロードされるので、ラップトップ上のＲＡＭの１ＭＢだけがシステムによる使用のために利用可能であり、そのわずかな部分がプリブート・ドライバによって用いられる。ＲＡＭのこのセクションは、ＲＡＭの「下位１ＭＢ領域」と呼ばれる。
【００３２】
プリブート・ドライバが存在するＲＡＭの下位１ＭＢ領域内のわずかな利用可能な空間があるだけなので、プリブート・ドライバはブート時にそれ自体が上書きされないように処置をとる。この目的のためにプリブート・ドライバは、ＩＮＴ１２ｈ割り込みハンドラの特殊化されたバージョンをＳＳＤからＲＡＭにロードする。標準のＩＮＴ１２ｈハンドラは、ＲＡＭの下位１ＭＢ領域内の空間の全体の大きさを報告する。しかし、ＩＮＴ１２ｈハンドラの特殊化されたバージョンは、ドライバがＢＩＯＳによってアクセスされないように、プリブート・ドライバによって用いられるメモリを実効的に隠すために、ＲＡＭ内の空間の大きさを意図的に誤って報告する。このことは、ブート時にプリブート・ドライバが偶然に上書きされないことを確実にする。
【００３３】
＜学習モード＞
プリブート・ドライバは、ＲＡＭ内のそれ自体のメモリ空間を保護した後に、ＳＳＤ上に記憶されたキャッシュの管理を開始する。この実施例ではプリブート・ドライバが、ＳＳＤキャッシュが空であることを検出した場合は、プリブート・ドライバは「学習モード」にて動作する（他のトリガ・イベントによりプリブート・ドライバを学習モードに入らせるようにしてもよい）。該学習モードでは、ブート時にラップトップのどの論理ブロックアドレス（ＬＢＡ）がアクセスされ（例えば、どのＬＢＡがＩＮＴ１３ｈ割り込みによって呼び出されたのか）且つまだキャッシュに記憶されていないかを判断するために、プリブート・ドライバによってキャッシュ・ミス（例えば、空のキャッシュに対して）が追跡される。キャッシュが初めから空である場合は、ブート時にアクセスされる各ＬＢＡはキャッシュ・ミスを引き起こすことになる。プリブート・ドライバは、キャッシュ・ミス・テーブル（ＲＡＭ内の予約された部分にある）内のミスを生じたＬＢＡを識別し、ブート時にＯＳカーネルＩ／Ｏスタックが初期化された後に、ＯＳのディスク・クラス・キャッシュ・フィルタ・ドライバは、キャッシュ・ミス・テーブルを読み出し、ＳＳＤキャッシュにこれらのＬＢＡを追加する。これは次のブート・サイクルにおいて（または現在のブート・サイクルの後）、ＳＳＤからＬＢＡに対するデータが取り出されることを可能にする。一旦キャッシュに追加されると（例えば、後続のブートで、または最初のブート時の後半で）、ＳＳＤキャッシュは、ブート・プロセスの速度を実質的に向上するために用いることができる。
【００３４】
＜Ｉ／Ｏ遮断および処理＞
キャッシュを操作するために、プリブート・ドライバは、ＳＳＤからロードされたＩＮＴ１３ｈハンドラの特殊化されたバージョンを用いるが、これはＢＩＯＳによって通常用いられるであろうＩＮＴ１３ｈハンドラの代わりとなる。特殊化されたＩＮＴ１３ｈハンドラは、必要に応じてＩ／Ｏ要求をキャッシュに方向付けるために用いられる。
【００３５】
具体的には、特殊化されたＩＮＴ１３ｈハンドラは、ＨＤＤ上のＬＢＡに向けられたＩ／Ｏ要求を受け取り、ＲＡＭに記憶された１つまたは複数のキャッシュ・テーブルにアクセスして、それぞれの要求されたＬＢＡがすでにＳＳＤ内にキャッシュされているかどうかを判定することができる。ＬＢＡがすでにキャッシュされている場合は、特殊化されたＩＮＴ１３ｈハンドラは、該要求をＨＤＤに向ける（direct）代わりに、該要求をＳＳＤ上のキャッシュに向ける。
【００３６】
ＩＮＴ１３ｈハンドラの動作を容易にするために、プリブート・ドライバはＳＳＤからキャッシュ・メタデータ・テーブルをロードし、キャッシュ・メタデータ・テーブルに記憶された情報を用いてルックアップ・テーブル（例えば、ハッシュおよびネクスト・ウィンドウ・テーブル）を構築する。さらにプリブート・ドライバは、特殊化されたＩＮＴ１３ｈハンドラが、要求されたデータがＳＳＤ上にキャッシュされているかどうかを速やかに判定するように、ルックアップ・テーブルをＲＡＭに記憶する。Ｉ／Ｏ要求に対するキャッシュ・ルックアップの実行において、修正されたＩＮＴ１３ｈハンドラは、ルックアップ・テーブルを読み出すために、リアル・モードからフラット・リアル・モードに切り換わることができる。例えば、ルックアップ・テーブルがＲＡＭの下位１ＭＢ領域の外側に記憶されている場合は、修正されたＩＮＴ１３ｈハンドラは、テーブルにアクセスするためにフラット・リアル・モードに切り換わることができ、次いで次の要求を処理／遮断する前に、もとのリアル・モードに切り換わることができる。
【００３７】
ＲＡＭ内に予約されたプリブート・ドライバ（ならびに対応するドライバおよびテーブル）を上書きされずに保持するために、プリブート・ドライバまた、ＩＮＴ１５ｈハンドラの修正されたバージョンをロードするが、これはＢＩＯＳによって通常用いられることになるＩＮＴ１５ｈハンドラの代わりとなる。ＩＮＴ１５ｈハンドラは通常はＢＩＯＳによって、ラップトップのＲＡＭ内に残された自由な空間の大きさを報告するために用いられる。修正されたＩＮＴ１５ｈハンドラは、ＢＩＯＳのみによって使用されていない自由な空間の大きさの報告を返す代わりに、ＢＩＯＳ、プリブート・ドライバの両方、特殊化された割り込みハンドラ、および様々なプリブート・ドライバ・テーブル（例えば、キャッシュ・メタデータ・テーブル、ルックアップ・テーブルなど）によって使用されていない残された利用可能な自由な空間の大きさの報告を返す。この時点ではまだＯＳカーネルはラップトップにロードされていない。
【００３８】
プリブート動作が完了した後にキャッシュを維持し更新するために、ＯＳのディスク・クラス・キャッシュ・フィルタ・ドライバは、各キャッシュ項目がどのくらいの頻度でアクセスされたか、ならびに特定のＬＢＡ範囲に対してどのくらいの頻度でキャッシュ・ミスが発生したかを表す、キャッシュのためのテーブルを維持する。あるＬＢＡ範囲に対するキャッシュ項目／ウィンドウに対して行われたアクセスの回数（例えば、ブート当たり、単位時間当たりなどの）が閾値を超えず、別のキャッシュされていないＬＢＡが多数のキャッシュ・ミスを受けた場合は、フィルタ・ドライバは、キャッシュ項目をキャッシュされていないＬＢＡからのデータで満たすことができる。例えば、キャッシュされていないＬＢＡに対するキャッシュ・ミスの数が、キャッシュされたＬＢＡに対するアクセスの総数より大きい場合は、フィルタ・ドライバは、キャッシュ項目内のキャッシュされたＬＢＡデータをキャッシュされていないＬＢＡデータで置き換えることができる。
【００３９】
＜ＳＳＤキャッシュ構造＞
図５は、ＳＳＤのための例示としてのブート・キャッシュ５２０を示すブロック図５００である。この実施例ではブート・キャッシュ５２０は、ＨＤＤ５１０からのデータを記憶する。ＨＤＤ５１０は複数の「ＨＤＤウィンドウ」に分割される。ＨＤＤウィンドウは、ＨＤＤ５１０上のＬＢＡの隣接した範囲である。この実施例では所与のＨＤＤウィンドウは常に、同じＬＢＡの範囲を表す。個々のキャッシュ・ウィンドウ（例えば、ウィンドウ５１２、５１４、および５１６）は、個々のＨＤＤウィンドウのためのデータを記憶する。この実施例ではウィンドウ５１２、５１４、および５１６はそれぞれ、異なるＨＤＤウィンドウのためのデータを記憶する。この実施例では各キャッシュ・ウィンドウ（１ＭＢ）は１６個のキャッシュ・ライン（６４ＫＢ）に細分され、単一のＨＤＤウィンドウ（１ＭＢ）のためのデータを記憶する。
【００４０】
キャッシュの管理の一部として（例えば、ブート・プロセスが完了した後に）フィルタ・ドライバは、キャッシュ・ウィンドウが異なるＨＤＤウィンドウを表すように、キャッシュ・ウィンドウ内のデータを置き換えることができる。例えば、あるキャッシュ・ウィンドウが、データが追加されていないＬＢＡの範囲に対するデータを記憶している場合は、そのキャッシュ・ウィンドウ内のデータを消去し、ＬＢＡの異なる範囲に対するデータで置き換えることができる。一実施形態では、キャッシュ内に追加されたＯＳブート・データ（例えば、キャッシュ・ミス・テーブルに基づいて）は、キャッシュ内に固定され、リード・オンリにされる。これによりＯＳブート・データは消去／置き換えできないことが確実になり、これはブート・データが常にキャッシュ内に存在するようになってブート・サイクルを加速することを意味する。キャッシュ５２０はまた、以下で図６〜７に関連して述べるメタデータ領域を含む。
【００４１】
図６は、ＳＳＤのブート・キャッシュのための例示としてのキャッシュ・メタデータ・テーブルを示すブロック図である。図６によると、プリブート・ドライバは様々なテーブル（例えば、キャッシュ・メタデータ・テーブル、ハッシュ・テーブルなど）を予約するためにＲＡＭの一部分をＯＳから隠すので、これらのプリブート・テーブルのそれぞれのメモリ占有領域が確実にかなり小さいことが望ましい。これはＲＡＭの使用可能／可視部分が実質的に減少されないことを確実にする。
【００４２】
メタデータ・テーブル６１０を保持するための１つの方式は、個々のキャッシュ・ウィンドウを指し示すためのポインタを有するリンク・リストを用いないことによるものである。代わりに各メタデータ・テーブル６１０のインデックス／項目は、そのインデックス番号によって特定のキャッシュ・ウィンドウに結び付けられる。メタデータ・テーブル６１０の各項目はまた、現在インデックスが付けられたキャッシュ・ウィンドウに記憶されたＨＤＤウィンドウを記述する表示を含む。キャッシュ・ウィンドウのどのラインが、キャッシュにおいて不正および／または有効であるかを示すために、不正なビット・マップおよび有効なビット・マップが用いられる。
【００４３】
メタデータ・テーブル６１０は、所与のキャッシュ・ウィンドウ内にどのＨＤＤウィンドウが記憶されているか、ならびにキャッシュ・ウィンドウ内のどのキャッシュ・ラインが有効および／または不正であるかを速やかに判断するために用いることができる。
【００４４】
＜キャッシュ・ウィンドウにアクセスするためのハッシュ・バケット＞
図７は例示としての実施形態において、ＳＳＤ上に記憶されたブート・キャッシュ内のデータにアクセスするために、どのようにハッシュ・バケットを用いることができるかを示すブロック図である。ハッシュ・バケットは、分かっているＨＤＤウィンドウに基づいて、ＨＤＤウィンドウのためのデータを記憶したキャッシュ・ウィンドウが存在するかどうかを速やかに判定するために用いることができる。この実施例では各ハッシュ・バケットは、８個のＨＤＤウィンドウの隣接した範囲を静的に表す。ハッシュ・バケットはハッシュ・テーブル７２０を用いて識別することができる。ハッシュ・テーブル７２０は、各ハッシュ・バケットにおけるＨＤＤウィンドウのいずれかのためのデータを記憶した、メタデータ・テーブル６１０内の第１のキャッシュ・ウィンドウを指し示す。ネクスト・ウィンドウ・テーブル７３０は、キャッシュ・ウィンドウ番号によってインデックス付けされたときは、やはり同じハッシュ・バケットのためのデータを記憶した一連の他のキャッシュ・ウィンドウを示すために用いることができる。
【００４５】
この実施例の場合に、到来するＩ／Ｏ要求がＨＤＤウィンドウ２のＬＢＡに向けられていると仮定する。したがってプリブート・ドライバは、このＩ／Ｏ要求がハッシュ・バケットＡに向けられていると判断する。次いで該プリブート・ドライバは、キャッシュ・ウィンドウ１であるハッシュ・バケットＡに対するハッシュ・テーブルにリストされた第１のキャッシュ・ウィンドウを精査する。次いで該プリブート・ドライバはメタデータ・テーブル６１０にアクセスし、キャッシュ・ウィンドウ１がＨＤＤウィンドウ２でなく、ＨＤＤウィンドウ１のためのデータを記憶していると判断する。したがって該プリブート・ドライバは、ネクスト・ウィンドウ・テーブル７３０にアクセスする。ネクスト・ウィンドウ・テーブル７３０は、キャッシュ・ウィンドウ１の後にキャッシュ・ウィンドウ２がアクセスされるべきであることを示す。再びキャッシュ・ウィンドウ２についてチェックするためにメタデータ・テーブル６１０を調べるとすぐにプリブート・ドライバは、キャッシュ・ウィンドウ２も正しいＨＤＤウィンドウに対するデータを記憶していないと判断する。したがって処理は続行し、ネクスト・ウィンドウ・テーブル７３０は、キャッシュ・ウィンドウ４が次にアクセスされるべきであることを示す。キャッシュ・ウィンドウ４は、要求されたＨＤＤウィンドウのためのデータを記憶しており、したがって該Ｉ／Ｏ要求を提供（service）するためにアクセスされる。
【００４６】
プロセッサは、適切なキャッシュ・ウィンドウが見付かるまで、またはハッシュ・バケットに対するいずれのキャッシュ・ウィンドウも現在、要求されたＨＤＤウィンドウを記憶していないと判断するまで、ネクスト・ウィンドウ・テーブル７３０を用いてキャッシュ・ウィンドウのチェックを続けることができる。現在、いずれのキャッシュ・ウィンドウも要求されたＨＤＤウィンドウを記憶していない場合は、キャッシュ・ミスが発生する。
【００４７】
ポインタの代わりにキャッシュ・バケットの方式（システム）を用いることで、ラップトップのプロセッサがリアル・モードで動作しながら、キャッシュ・ルックアップ・テーブルを用いることが可能になる。具体的にはバケット方式は、リアル・モードにおいて動的なメモリ割り当て、および３２ビット・ポインタの使用を回避する。またキャッシュ・バケット技法は、ＲＡＭ内のかなりの空間を占有するメモリ量の多いポインタまたはリンク・リストを利用しない。
【００４８】
図８は例示としての実施形態において、ＳＳＤ上に記憶されたブート・キャッシュ内のデータにアクセスするためにキャッシュ・バケットを用いる方法を示すフローチャートである。図８によると、入力された要求は最初にステップ８０２で、特殊化されたＩＮＴ１３ｈハンドラによって遮断される。ステップ８０４で、割り込みハンドラは該要求によって示されるＨＤＤウィンドウを識別し、ステップ８０６で、該割り込みハンドラは、どのハッシュ・バケット内にＨＤＤウィンドウがあるかを判断する。ステップ８０８で、該割り込みハンドラは、ハッシュ・テーブルを調べて、いずれかのキャッシュ・ウィンドウがハッシュ・バケットのためのデータを記憶しているかどうかを判定する。記憶していない場合には、ステップ８１０でキャッシュ・ミスが発生し、ステップ８１２でキャッシュ・ミス・テーブルが更新される。
【００４９】
あるいは、該ハッシュ・テーブルが、識別されたハッシュ・バケットのためのデータを記憶したキャッシュ・ウィンドウを示す場合は、処理はステップ８１４に続く。ステップ８１４で、該割り込みハンドラは、メタデータ・テーブル内でキャッシュ・ウィンドウを探索し、示されたキャッシュ・ウィンドウ（またはネクスト・ウィンドウ・テーブル内の該示されたキャッシュ・ウィンドウにリンクされたキャッシュ・ウィンドウ）が、要求されたＨＤＤウィンドウのためのデータを記憶しているかどうかを判定する。記憶している場合には、ステップ８１６で、該要求は、キャッシュ・ウィンドウからのデータを用いて提供（サービス）される。記憶していない場合には、該割り込みハンドラは、ネクスト・ウィンドウ・テーブルから次のキャッシュ・ウィンドウを決定し、メタデータ・テーブルを用いて次のキャッシュ・ウィンドウをチェックするなどとなる。ＨＤＤウィンドウを指し示すキャッシュ・ウィンドウが見付からなかった場合は、ステップ８１０でキャッシュ・ミスが発生する。
【００５０】
＜ハッシュ・テーブルへの登録＞
図９は、ブート・キャッシュのためのハッシュ・テーブルに登録する（populating a Hash Table）例示としての方法９００を示すフローチャートである。図９によるとステップ９０２で、プリブート・ドライバは、メタデータ・テーブルからキャッシュ・ウィンドウを選択することによって初期化する。次いでステップ９０４で、プリブート・ドライバは、キャッシュ・ウィンドウがそのためのデータを記憶しているハッシュ・バケットを識別する。ステップ９０６で、プリブート・ドライバは、ハッシュ・テーブル内の項目がすでに現在のキャッシュ・ウィンドウを指し示しているかどうかを判定する。ハッシュ・テーブル内の項目がすでに現在のキャッシュ・ウィンドウを指し示している場合には、キャッシュ・ウィンドウは、すでに正しく参照されており、他のキャッシュ・ウィンドウを選択することができる。
【００５１】
しかし、キャッシュ・ウィンドウがハッシュ・テーブル項目によって指し示されていない場合は、処理はステップ９０８に続き、プリブート・ドライバは、前の項目（この場合は、ハッシュ・テーブル項目）によって指し示される、ネクスト・ウィンドウ・テーブル内の項目を探索する。ステップ９１０でネクスト・ウィンドウ・テーブル内の項目が空である場合は、ステップ９１２で、プリブート・ドライバは、空の項目をキャッシュ・ウィンドウのインデックスで満たす。しかし項目が空でない場合は、ステップ９１４で、プリブート・ドライバは、項目が現在のキャッシュ・ウィンドウを指し示すかどうかを判定する。そうであれば、現在のキャッシュ・ウィンドウは正しく参照されており、他のキャッシュ・ウィンドウを選択することができる。しかし、項目が異なるキャッシュ・ウィンドウを指し示している場合は、ステップ９０８で、プリブート・ドライバは、ネクスト・ウィンドウ・テーブル内でキャッシュ・ウィンドウを探索して現在のキャッシュ・ウィンドウがその場所において参照されているかどうかを精査する。このプロセスは、キャッシュ・メタデータ・テーブルの全体が精査されるまで続けることができる。
【図１】
2015062107.tif 000003
【図２】
2015062107.tif 000004
【図３】
2015062107.tif 000005
【図４】
2015062107.tif 000006
【図５】
2015062107.tif 000007
【図６】
2015062107.tif 000008
【図７】
2015062107.tif 000009
【図８】
2015062107.tif 000010
【図９】
2015062107.tif 000011