(57)【特許請求の範囲】
【請求項１】
第１起動データを含むデータの第１セットを格納するハードディスクドライブと、
前記ハードディスクドライブの半導体メモリ、及びコンピュータシステムのホストの半導体メモリとは異なる、不揮発性半導体メモリと、
前記ホストの起動モードの間に、前記第１起動データを前記不揮発性半導体メモリに格納し、前記第１起動データを前記不揮発性半導体メモリから前記ホストのファイルシステムへと転送するターボブートドライバモジュールと
を備え、
前記ターボブートドライバモジュールは、所定の起動期間を有する起動タイマと、
前記ホストからデータアクセス要求を受信するように構成されたディスクストレージドライバと
を含み、
前記データアクセス要求は、前記ハードディスクドライブに格納された第２起動データを要求し、
ターボブートドライバモジュールは、前記第２起動データが前記データアクセス要求に対応した前記不揮発性半導体メモリに格納されているかを判定し、
前記不揮発性半導体メモリに格納されていない前記第２起動データに応じて、前記起動モードの間に、前記第２起動データが前記ハードディスクドライブから前記ファイルシステムにロードされている間、前記第２起動データを前記不揮発性半導体メモリに収集すべく学習モードで動作し、
前記起動モードの間に、前記ハードディスクドライブから収集された前記第２起動データの全て又は一部を、前記所定の起動期間が終了するまで、前記不揮発性半導体メモリに格納するよう構成されているコンピュータシステム。
【請求項２】
前記ターボブートドライバモジュールは、データの第２セットを、前記第１起動データを含む前記不揮発性半導体メモリに格納する請求項１に記載のコンピュータシステム。
【請求項３】
前記ターボブートドライバモジュールは、前記ホストの第１起動の間に、前記第１起動データを収集し、前記不揮発性半導体メモリに格納する学習モジュールを有し、
前記ターボブートドライバモジュールは、前記ホストの第２起動の間に、前記不揮発性半導体メモリに格納された前記第１起動データを、前記ファイルシステムへと転送する請求項１または２に記載のコンピュータシステム。
【請求項４】
前記ハードディスクドライブに格納されているデータにアクセスする第２データアクセス要求を生成する前記ファイルシステム及び前記ディスクストレージドライバのうちの少なくとも一つをさらに備え、
前記ターボブートドライバモジュールは、前記第２データアクセス要求を満たすべく、前記不揮発性半導体メモリに格納されているデータにアクセスする請求項１から３の何れか１項に記載のコンピュータシステム。
【請求項５】
前記ターボブートドライバモジュールは、前記第２データアクセス要求を満たすのに、前記ハードディスクドライブにアクセスしない請求項４に記載のコンピュータシステム。
【請求項６】
前記ハードディスクドライブに格納されているデータを更新する第２データアクセス要求を生成する前記ファイルシステム及び前記ディスクストレージドライバのうちの少なくとも一つをさらに備え、
前記ターボブートドライバモジュールは、前記データアクセス要求に基づいて、前記不揮発性半導体メモリに格納されているデータを更新する請求項１から３の何れか１項に記載のコンピュータシステム。
【請求項７】
前記ターボブートドライバモジュールは、前記第２データアクセス要求に基づいて、前記ハードディスクドライブに格納されている前記データを更新する請求項６に記載のコンピュータシステム。
【請求項８】
前記ターボブートドライバモジュールは、前記ハードディスクドライブから前記第１起動データにアクセスし、前記不揮発性半導体メモリから前記第２起動データにアクセスする請求項１から７の何れか１項に記載のコンピュータシステム。
【請求項９】
前記ターボブートドライバモジュールは、前記第１起動データ及び前記第２起動データに同時にアクセスし、同じ期間に、前記ハードディスクドライブと前記不揮発性半導体メモリの両方へのアクセスを制御するよう構成されたバイストレージアクセスモジュールを有する請求項８に記載のコンピュータシステム。
【請求項１０】
前記ターボブートドライバ及び／又は前記バイストレージアクセスモジュールは、負荷バランシングアルゴリズムを使用して、前記ハードディスクドライブ及び前記不揮発性半導体メモリからのデータアクセスのバランスをとる請求項９に記載のコンピュータシステム。
【請求項１１】
前記ターボブートドライバモジュールは、前記ファイルシステム及び前記ディスクストレージドライバのうちの少なくとも１つからの前記データアクセス要求に基づいて、前記第１起動データ及び前記第２起動データにアクセスする請求項８に記載のコンピュータシステム。
【請求項１２】
前記ターボブートドライバモジュールは、前記ハードディスクドライブから前記第１起動データを受信すると、前記第１起動データを収集し、前記ハードディスクドライブからの第１アドレス又は第１ロケーションＩＤを記録し、前記不揮発性半導体メモリの第２アドレス又は第２ロケーションＩＤに第１起動データを格納し、
第１アドレス又は第１ロケーションＩＤと、第２アドレス又は第２ロケーションＩＤとに基づいて、前記不揮発性半導体メモリに格納されるデータに対して前記ハードディスクドライブに格納されるデータをマップするストレージマッピングモジュールを有する請求項１から１１の何れか１項に記載のコンピュータシステム。
【請求項１３】
第２データアクセス要求に基づいて、半導体制御ドライバ及び半導体メモリインターフェースを介して、前記不揮発性半導体メモリにアクセスするよう構成された半導体メモリドライバをさらに備え、
前記第２データアクセス要求は、前記不揮発性半導体メモリ内のデータを要求し、
前記ディスクストレージドライバは、前記ファイルシステムから、ハードディスクドライブ内のデータを要求する第３データアクセス要求を受信し、
前記ターボブートドライバモジュールは、前記第３アクセス要求に基づいて、前記第２データアクセス要求を生成する請求項１から１２の何れか１項に記載のコンピュータシステム。
【請求項１４】
第２データアクセス要求に基づいて、半導体メモリインターフェースを介して、前記不揮発性半導体メモリにアクセスするよう構成されたストレージ制御モジュールをさらに備え、
前記第２データアクセス要求は、前記不揮発性半導体メモリ内のデータを要求し、
前記ディスクストレージドライバは、ハードディスクドライバ内のデータを要求する第３データアクセス要求を前記ファイルシステムから受信し、
前記ターボブートドライバモジュールは、前記第３データアクセス要求に基づいて、前記第２データアクセス要求を生成する請求項１から１２の何れか１項に記載のコンピュータシステム。
【請求項１５】
前記ターボブートドライバモジュールは、前記不揮発性半導体メモリに格納する前に、前記第１起動データを圧縮し、前記不揮発性半導体メモリからアクセスされた時に、格納された前記第１起動データを解凍する、圧縮解凍モジュールを有する請求項１から１４の何れか１項に記載のコンピュータシステム。
【請求項１６】
前記ターボブートドライバモジュールは、前記不揮発性半導体メモリに対するアクセスにおいて、キャッシュヒットに対するキャッシュミスの割合が閾値よりも大きい場合に、前記第２起動データを前記不揮発性半導体メモリに格納することを含む学習モードで動作する請求項１から１５の何れか１項に記載のコンピュータシステム。
【請求項１７】
前記ターボブートドライバモジュールは、前記不揮発性半導体メモリに対するアクセスにおいて、全キャッシュアクセスに対するキャッシュミスの割合が閾値よりも大きい場合に、前記第２起動データを前記不揮発性半導体メモリに格納することを含む学習モードで動作する請求項１から１５の何れか１項に記載のコンピュータシステム。
【請求項１８】
前記起動データは、自動スタートドライバ、オペレーションシステムデータ及びアプリケーションプログラムを含む請求項１から１７の何れか１項に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、起動システムに関する。
【０００２】
［優先権情報］本出願は、２００８年９月２４日出願の米国仮出願６１／０９９，７４３号を基礎とする２００９年９月２１日出願の米国出願１２／５６３，２３９号明細書の優先権を主張するものであり、前記出願の内容は、参照により本明細書に組み込まれる。
【背景技術】
【０００３】
本発明の理解するための背景を、一般的に説明することを目的として、背景技術を説明する。以下、背景技術の章において説明される範囲及び出願時には従来技術として認められていない側面の範囲において、本願発明者の仕事は、本開示に対して明示的に又は非明示的にも、従来技術であるとは認めていない。
【０００４】
コンピュータスイッチがＯＮ状態とされると、コンピュータは起動プロセスを実行する。起動プロセスは、ベーシックインプット／アウトプットシステム（ＢＩＯＳ）モード及びオペレーティングシステム・モードを含む。ＢＩＯＳモードの間は、プリブート又はパワーオン・セルフテスト（ＰＯＳＴ）プロセスが実行され、その後に、ブートローダプロセスが続く。ＰＯＳＴプロセスは、特定のハードウェアを初期化して、マスタブートレコードを実行して、ブートローダプロセスを実行する。ブートローダプロセスは、オペレーティングシステムカーネル、並びに、ブートディスクコントローラドライバ及びディスクドライバを含む各種デバイスドライバを読み込む。例えば、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）のブートローダは、ＮＴローダ（ＮＴＬＤＲ）である。ブートローダ又はＮＴＬＤＲは、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）ＯＳカーネル（ＮＴＯＳＫＲＮＬ）のようなオペレーティングシステム（ＯＳ）カーネルを読み込み、実行する。
【０００５】
オペレーティングシステム・モードの間に、ＯＳが設定され、自動スタートドライバが読み込まれ、初期化される。自動スタートドライバ及びその他のソフトウェアコードがＨＤＤから読み込まれ、実行される。その他のソフトウェアコードは、ＯＳの設定と関連付けられている及び／又は様々なサービス及びプログラムアプリケーションと関連付けられている。サービスには、デバイスマネージャサービス、セキュリティサービス、電子メール（ｅメール）サービス等が含まれる。プログラムアプリケーションには、例えば、ウェブブラウザ、ｅメール、ワードプロセッシング等のアプリケーションが含まれる。
【０００６】
オペレーションシステム・モードの間に、グラフィカル・ユーザー・インターフェース（ＧＵＩ）が起動され、ＯＳが設定された後に、ログオンモードが可能となる。ログオンモードは、サービスの読み込み及び実行を含む。ログオンモードは、入力されたユーザーネーム及びパスワードに基づいて、ユーザープロファイルを読み込むのに使用される。ログオンが完了した後に、プログラムアプリケーションが実行されてもよい。
【０００７】
オペレーションシステムの大きさ及び複雑性は、増加しつつある。また、起動の間のソフトウェアドライバ、サービス及びアプリケーションの数、及び関連付けられているコード及び／又はデータの量も増加している。その結果、オペレーションシステムの起動に掛かる時間が長くなっている。
【発明の概要】
【０００８】
一実施形態において、ハードディスクドライブ及び不揮発性半導体メモリを備えるコンピュータシステムが提供される。ハードディスクドライブは、起動データを含むデータの第１セットを格納する。不揮発性半導体メモリは、ハードディスクドライブの半導体メモリ、及びコンピュータシステムのホストの半導体メモリとは、別のメモリである。ターボブートドライバモジュールは、起動データを不揮発性半導体メモリに格納し、ホストの起動モードの間に、起動データを揮発性半導体メモリからホストのファイルシステムへと転送する。
【０００９】
別の特徴として、ターボブートドライバモジュールは、データの第２セットを起動データを含む不揮発性半導体メモリに格納する。
【００１０】
別の特徴として、ターボブートドライバモジュールは、ホストの第１起動の間に、起動データを収集し、不揮発性半導体メモリに格納する学習モジュールを有する。  ターボブートドライバモジュールは、ホストの第２起動の間に、不揮発性半導体メモリに格納された起動データを、ファイルシステムへと転送する。
【００１１】
別の特徴として、コンピュータシステムは、ハードディスクドライブに格納されているデータにアクセスするデータアクセス要求を生成するファイルシステム及びディスクストレージドライバのうち少なくとも一つをさらに備える。ターボブートドライバモジュールは、データアクセス要求を満たすべく、不揮発性半導体メモリに格納されているデータにアクセスする。
【００１２】
他の特徴として、コンピュータシステムは、ハードディスクドライブに格納されているデータを更新するデータアクセス要求を生成するファイルシステム及びディスクストレージドライバのうち少なくとも一つをさらに備える。ターボブートドライバモジュールは、データアクセス要求に基づいて、不揮発性半導体メモリに格納されているデータを更新する。
【００１３】
別の特徴として、ターボブートドライバモジュールは、ハードディスクドライブから起動データの第１セットにアクセスし、不揮発性半導体メモリから起動データの第２セットにアクセスする。また、別の特徴として、ターボブートドライバモジュールは、ファイルシステム及びディスクストレージドライバのうちの少なくとも１つからのデータアクセス要求に基づいて、起動データの第１セット及び起動データの第２セットにアクセスする。他の特徴として、ターボブートドライバモジュールは、不揮発性半導体メモリに格納されているデータに対してハードディスクドライブに格納されているデータをマップするストレージマッピングモジュールを有する。
【００１４】
別の特徴として、コンピュータシステムは、ファイルシステムから、ハードディスクドライブデータアクセス要求を受信するディスクストレージドライバをさらに備える。ターボブートドライバモジュールは、ハードディスクドライブデータアクセス要求に基づいて、不揮発性半導体メモリデータアクセス要求を生成する。また、不揮発性半導体メモリデータアクセス要求に基づいて、半導体制御ドライバ及び半導体メモリインターフェースを介して、不揮発性半導体メモリにアクセスする半導体メモリドライバを備える。
【００１５】
別の特徴として、コンピュータシステムは、ハードディスクドライバデータアクセス要求を前記ファイルシステムから受信するストレージドライバをさらに備える。ターボブートドライバモジュールは、ハードディスクドライバデータアクセス要求に基づいて、不揮発性半導体メモリデータアクセス要求を生成する。ストレージ制御モジュールは、不揮発性半導体メモリデータアクセス要求に基づいて、半導体メモリインターフェースを介して、不揮発性半導体メモリにアクセスする。
【００１６】
別の特徴において、ターボブートドライバモジュールは、所定の起動期間を有する起動タイマを含む。ターボブートドライバモジュールは、起動モードの間に、ハードディスクドライブから収集された起動データの全て又は一部を、所定の起動期間が終了するまで、不揮発性半導体メモリに格納する。
【００１７】
別の特徴として、ターボブートドライバモジュールは、不揮発性半導体メモリに格納する前に起動データを圧縮し、不揮発性半導体メモリからアクセスされた時に、格納された起動データを解凍する、圧縮解凍モジュールを有する。
【００１８】
また、別の特徴として、上述のシステム及び方法は、１つ以上のプロセッサによって実行されるコンピュータプログラムによって実装されてもよい。コンピュータプログラムは、これらに限定されないが、例えば、メモリ、不揮発性データストレージ、及び／又はその他の好適な有形の記憶媒体のようなコンピュータ可読媒体に存在させることができる。
【００１９】
本開示が適用可能なさらなる領域については、詳細な説明、添付の特許請求の範囲及び図面から明らかとなるであろう。詳細な説明及び特定の例は、例示することのみを意図しており、本開示の範囲を限定することを意図していない。
【００２０】
本開示は、詳細な説明及び添付の図面から、完全に理解可能となるであろう。
【図面の簡単な説明】
【００２１】
【図１】本開示の一実施形態に係る、別個に設けられたディスク及び半導体メモリ制御モジュールを組み込んだコンピュータシステムの機能ブロック図である。
【図２】本開示の一実施形態に係る、ストレージ制御モジュールを組み込んだコンピュータシステムの機能ブロック図である。
【図３】本開示の一実施形態に係る、起動データ及びソフトウェアストレージを例示したコンピュータシステムの機能ブロック図である。
【図４】本開示の一実施形態に係る、別個に設けられたディスクモジュール及び半導体メモリモジュールを使用したディスクドライバのオペレーションの後の、ターボブートドライバのオペレーションを例示したストレージシステムの機能ブロック図である。
【図５】本開示の一実施形態に係る、別個に設けられたディスクモジュール及び半導体メモリモジュールを使用したディスクドライバのオペレーションの前の、ターボブートドライバのオペレーションを例示したストレージシステムの機能ブロック図である。
【図６】本開示の一実施形態に係る、別個に設けられたディスクモジュール及び半導体メモリモジュールを使用したディスクドライバのオペレーションの後の、ターボブートドライバのオペレーションを例示したストレージシステムの機能ブロック図である。
【図７】本開示の一実施形態に係る、ストレージドライバオペレーションの前の、ターボブートドライバのオペレーションを例示したストレージシステムの機能ブロック図である。
【図８】本開示の一実施形態に係る、ターボブートドライバの機能ブロック図である。
【図９】本開示の一実施形態に係る、起動タイミング図である。
【図１０】本開示の一実施形態に係る、起動の間のデータ読み込みの方法を示した図である。
【図１１】本開示の一実施形態に係る、収集された起動データに基づいて、ストレージデバイスにデータを書き込む方法を示した図である。
【発明を実施するための形態】
【００２２】
以下の説明は、単に例示することを目的としており、本開示、本開示の提供又は利用を限定することを意図していない。説明を明確にする目的から、図面において、同様な要素には、同じ参照番号が使用されている。本明細書において使用される、少なくともＡ、Ｂ及びＣのいずれか１つという言い回しは、非排他的論理ＯＲを使用した論理（Ａ又はＢ又はＣ）であると解釈されるべきである。方法に含まれる段階は、本開示の原理を変更することなく、様々な順番で実行可能であることは明らかである。
【００２３】
本明細書で使用されている、モジュールという言葉は、以下に記載する機能を提供する１つ以上のソフトウェアプログラム、ファームウェアプログラム、組み合わせ論理回路及び／又はその他適切な要素を実行する、特定用途向け集積回路（ＡＳＩＣ）、電子回路、（共有、占有又はグループ）プロセッサ、及び／又は（共有、占有又はグループ）メモリの一部をなす又は含まれていることを指す場合がある。
【００２４】
本明細書で使用されている"ホスト"及び"コンピュータ"という言葉は、デスクトップ、ラップトップ、オールインコンピュータ、及び／又はハンドヘルドコンピュータを指す場合がある。また、"ホスト"及び"コンピュータ"という言葉は、ＰＤＡ、ポータブルコンピュータデバイス、携帯電話等を指す場合もある。
【００２５】
本明細書で使用されている"不揮発性半導体メモリ（ＮＶＳＭ）"という言葉は、フラッシュメモリ（ＮＡＮＤ及びＮＯＲフラッシュメモリを含む）、相変化メモリ、磁気ＲＡＭ及びマルチステートメモリのような半導体メモリ又は固体メモリを指す場合がある。マルチステートメモリでは、メモリセルそれぞれが、３つ以上のステートを有する。"不揮発性半導体メモリ"という言葉は、ハードディスクドライブ（ＨＤＤ）又はＨＤＤの半導体メモリを意味しない。本明細書で使用されている"ＨＤＤ"という言葉は、ＨＤＤの制御モジュール及び半導体メモリを含むプリント基板、若しくは、磁気記憶媒体又はディスク及びリード／ライトデバイスを含むＨＤＤアセンブリを含む場合がある。不揮発性半導体メモリは、ソリッドステートドライブ（ＳＳＤ）を指す場合がある。
【００２６】
図１〜３では、要素がそれぞれ、実線又は点線のボックスで示されている。実線のボックスは、データの元の格納位置を示している。一方、点線のボックスは、格納されたデータが、次の利用のために、転送及び／又はコピーされる場所を示している。
【００２７】
図１に示すように、コンピュータシステム１０は、ホスト１２、ＨＤＤ１４及びＮＶＳＭ１６を含む。ホスト１２は、ホスト１２が起動される間及び起動された後に、ＨＤＤ１４及び／又はＮＶＳＭ１６のデータにアクセスするコンピュータ及び／又はマザーボードであってもよい。ホスト１２は、ホスト制御モジュール１８及びシステムメモリ２０を含む。ホスト制御モジュール１８は、ディスク制御モジュール２２及びＨＤＤインターフェース２４を介して、ＨＤＤ１４と通信を行う。ホスト制御モジュール１８は、半導体メモリ制御モジュール２６（例えば、フラッシュメモリ制御）及び半導体メモリインターフェース２８を介して、ＮＶＳＭ１６と通信を行う。ＮＶＳＭ１６は、ホスト１４の半導体メモリとは別のメモリである（例えば、ホスト１４における半導体メモリとは区別される）。ＮＶＳＭは、ホスト１４に接続された半導体メモリインターフェース２８に接続されていてもよい。
【００２８】
起動の間、ホスト制御モジュール１８は、ＨＤＤ１４からターボブートドライバ３０を、システムメモリ２０のランダムアクセスメモリ（ＲＡＭ）３２に読み込む（ロードする）。ターボブートドライバ３０は、ＨＤＤ１４がアクセスする起動データを収集し、第１起動の期間に起動データをＮＶＳＭ１６に格納し、第１起動に続く起動の間にＮＶＳＭ１６からの起動データにアクセスするのに、使用される。このように構成することにより、起動時間を短縮することができる。第１起動とは、コンピュータが初めて起動される場合の起動のこと、又はターボブートがインストールされ利用可能とされた後の、学習モードの間に実行される起動のことを指す場合がある。
【００２９】
ホスト制御モジュール１８は、中央演算処理ユニット（ＣＰＵ）のようなプロセッサを含んでもよい。ホスト制御モジュール１８は、ターボブートドライバ３０を起動又は実行してもよい。ターボブートドライバ３０を実行している間は、ホスト制御モジュール１８は、ターボブートドライバモジュールとして動作してもよいし、学習モード、学習後モード、バイストレージアクセス（ｂｉ‐ｓｔｏｒａｇｅ  ａｃｃｅｓｓ）モード及び更新モードを含む複数のモードで動作してもよい。学習モードでは、ホスト１２の起動の間にＨＤＤ１４でアクセスされるデータが収集され、ＮＶＳＭ１６に格納される。学習後モードでは、ホスト１２の起動の間に、ＨＤＤ１４及び／又はＮＶＳＭ１６が、データにアクセスする。バイストレージアクセスモードでは、ホスト１２の起動の間に、ＨＤＤ１４及びＮＶＳＭ１６の両方からデータがアクセスする。更新モードでは、ＨＤＤ１４で更新され学習モードで収集されたデータが、ＮＶＳＭ１６でも更新される。
【００３０】
システムメモリ２０は、リードオンリーメモリ（ＲＯＭ）３４及びＲＡＭ３２を含む。ＲＯＭ３４は、パワーオン・セルフテスト（ＰＯＳＴ）データ３８を含むベーシックインプット／アウトプットシステム（ＢＩＯＳ）３６を格納するのに使用される。ＲＯＭ３４は、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）を含んでもよい。ＲＡＭ３２は、ダブルデータレート同期型ダイナミックＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）等を含んでもよい。
【００３１】
ディスク制御モジュール２２は、ソフトウェア及び／又はハードウェアを含み、ＨＤＤ１４のオペレーションを制御してもよい。半導体メモリ制御モジュール２６は、ソフトウェア及び／又はハードウェアを含み、ＮＶＳＭ１６のオペレーションを制御してもよい。図１の実施形態において、ディスク制御モジュール２２及び半導体メモリ制御モジュール２６は、別のデバイスである。
【００３２】
図２には、コンピュータシステム５０が示されている。コンピュータシステム５０は、図１のコンピュータシステム１０と同様なシステムである。コンピュータシステム５０は、ディスク制御モジュール及び半導体メモリ制御モジュールの替わりに、ストレージ制御モジュール５２を含む。例えば、ストレージ制御モジュール５２は、ノースブリッジ／サウスブリッジ構成に含まれていてもよい。ストレージ制御モジュール５２は、サウスブリッジ制御モジュールであってもよい、又はサウスブリッジ制御モジュールに含まれていてもよい。
【００３３】
コンピュータシステム５０は、ホスト１２'、ＨＤＤ１４及びＮＶＳＭ１６を含む。ホスト１２'は、ホスト制御モジュール１８'及びシステムメモリ２０を含む。ホスト制御モジュール１８'は、ＨＤＤインターフェース２４'及び半導体メモリインターフェース２８'を使用して、ストレージ制御モジュール５２を介して、ＨＤＤ１４及びＮＶＳＭ１６と通信を行う。ＨＤＤ１４は、ストレージ制御モジュール２２への及びからのデータ転送用に設定されたターボブートドライバ３０'を格納する。
【００３４】
図３には、起動データ及びソフトウェアストレージを例示したコンピュータシステム８０が示されている。コンピュータシステム８０は、ホスト制御モジュール８２、ストレージ制御モジュール８４、ＲＯＭ８６、ホストに含まれていてもよいＲＡＭ８８を含む。ホスト制御モジュール８２は、ストレージ制御モジュール８４、ＨＤＤメモリインターフェース９４、半導体メモリインターフェース９６を介して、ＨＤＤ９０及びＮＶＳＭ９２にアクセスする。ホスト制御モジュール８２は、ホストの起動の間又は後に、ストレージ制御モジュール８４のディスク制御モジュール９３及び半導体メモリ制御モジュール９５を介して、ＨＤＤ９０及び／又はＮＶＳＭ９２のデータにアクセスする。ＲＯＭ８６、ＲＡＭ８８、ＨＤＤ９０及びＮＶＳＭ９２は、コンピュータシステム８０の起動の間及び前後に、特定のデータを格納するのに使用される。
【００３５】
ＲＯＭ８６は、コンピュータシステム８０の起動の間及び前後に、ＰＯＳＴ１０２を含むＢＩＯＳ１１０の第１ＢＩＯＳ部分１００を格納する。ＲＡＭ８８は、ドライバの第１セット１０４、ドライバの第２セット１０６、ＯＳデータ１０８、ＢＩＯＳ１１０、アプリケーションプログラム１１４及び／又はその他の起動データ１１６を格納するＢＩＯＳ１１０は、第１ＢＩＯＳ部分１００及びブートローダ１２０を含む第２ＢＩＯＳ部分１１８を含んでもよい。その他の起動データ１１６は、起動設定データを含んでもよい。ＯＳデータ１０８は、ファイルシステム１２４を伴うＯＳカーネル１２２、及びその他のＯＳデータ１２６を含んでもよい。その他のＯＳデータ１２６は、ＯＳ設定データを含んでもよい。
【００３６】
ドライバの第１セット１０４は、ディスクドライバ１３０、半導体メモリドライバ１３２及びターボブートドライバ１３４を含んでもよい。ディスクドライバ１３０は、図４〜７に示すようなディスクストレージドライバ及びディスク制御ドライバを含んでもよい。ディスクストレージドライバは、ＨＤＤ９０のオペレーションを制御するのに使用される。ディスク制御ドライバは、ストレージ制御モジュール８４のディスク制御モジュール９３のオペレーションを制御するのに使用される。半導体メモリドライバ１３２は、図４〜７に示すような半導体ストレージドライバ及び半導体制御ドライバを含んでもよい。半導体ストレージドライバは、不揮発性半導体メモリ９２のオペレーションを制御する。半導体制御ドライバは、半導体メモリ制御モジュール９５のオペレーションを制御する。
【００３７】
ドライバの第２セット１０６は、システム及び自動スタートドライバ１４０を含んでもよい。例えば、システム及び自動スタートドライバ１４０は、デジタル加入者回線（ＤＳＬ）ドライバ、ケーブルドライバ、ユニバーサルシリアルバス（ＵＳＢ）ドライバ、ローカルエリアネットワーク（ＬＡＮ）ドライバ、セキュリティドライバ等を含んでもよい。
【００３８】
ドライバの第１セット１０４及び第２ＢＩＯＳ部分１１８は、起動の間に、ＨＤＤ９０からＲＡＭ８８へと読み込まれてもよい。ドライバの第２セット１０６、アプリケーションプログラム１１４、別のブートアップデータ１１６及び別のＯＳデータ１２６は、起動の間に、ＨＤＤ９０及び／又はＮＶＳＭ９２からＲＡＭ８８へと読み込まれてもよい。第１ＢＩＯＳ部分１００は、起動の間に、ＲＯＭ８６からＲＡＭ８８へと読み込まれてもよい。
【００３９】
起動の間に、ホスト制御モジュール８２は、ストレージ制御モジュール８４を使用して、ＨＤＤ９０からＲＡＭ８８へと、ターボブートドライバ１３４を読み込んでもよい。ストレージ制御モジュール８４は、ディスク制御モジュール９３及び半導体メモリ制御モジュール９５を含んでもよい。ＨＤＤ９０からＲＡＭ８８へと読み込まれたデータは、第１起動の学習モードの間に、ＮＶＳＭ９２に収集され格納される。第１起動に続く起動の間に、ＮＶＳＭ９２からＲＡＭ８８へとデータを読み込んで、起動時間を短縮させてもよい。コンピュータシステムは、第１起動及びそれに続く起動の期間に、学習モードで動作し、ＮＶＳＭ９２のコンテンツを更新する。
【００４０】
図３の実施形態では、ＨＤＤ９０は、起動データに対する元の起動ソースとして示されており、ＨＤＤ９０は、起動データの初期ソースである。ＮＶＳＭ９２は、ＨＤＤ９０に格納された特定の起動データをミラーするのに使用される。ＮＶＳＭ９２は、起動データの種類に基づいてではなく、起動時間に基づいて、起動データをミラーしてもよい。例えば、ホスト制御モジュール８２は、例えば、クロック１５０に基づく所定の期間に、アクセスされたデータをＨＤＤ９０に収集するのに、ＮＶＳＭ９２を使用してもよい。ホスト制御モジュール８２は、所定の期間が経過した場合には、ＨＤＤに９０でアクセスされたデータの種類に関わらず、データの収集を止めてもよい。
【００４１】
ＮＶＳＭ９２は、ＨＤＤ９０に関する起動データの代替、バックアップ及び／又は補足ソースとして使用されてもよい。ＨＤＤ９０は、ドライバ第１セット１０４、及びドライバの第２セット１０６、ＯＳデータ１０８、第２ＢＩＯＳ部分１１８、アプリケーションプログラム１１４及び別の起動データ１１６を最初に格納するとして記載されているが、ＮＶＳＭ９２が最初にこれらのデータ項目を格納して、第１の及び／又元の起動ソースとして使用してもよい。この場合の実施形態では、ＨＤＤ９０が、ドライバの第２セット１０６、アプリケーションプログラム１１４、別の起動データ１１６及び別のＯＳデータ１２６を格納してもよい。ＨＤＤ９０は、ドライバの第１セット１０４、第２ＢＩＯＳ部分１１８及びＯＳカーネル１２２を格納しなくてもよい。この実施形態では、第１起動の間に、ＮＶＳＭ９２から、起動データの収集を行う。収集された起動データは、ＨＤＤ９０に格納され、第１起動に続く起動の間に使用されてもよい。
【００４２】
図４には、ターボブートドライバ２０２を含むストレージシステム２００が示されている。ターボブートドライバ２０２は、ファイルシステム２０６によって最初に生成された、ＨＤＤ２０８に格納されているデータに対するデータアクセス要求に基づいて、ＮＶＳＭ２０４にアクセスする。ターボブートドライバ２０２は、ＨＤＤ２０８が要求するデータを収集し、学習モードの間に、データをＮＶＳＭ２０４に格納する。ターボブートドライバ２０２は、ＮＶＳＭ２０４に格納されたデータを、学習後モードの間に、ファイルシステム２０６に提供する。ＮＶＳＭ２０４からファイルシステム２０６へと提供されたデータは、ＨＤＤ２０８から提供されたデータにさらに加えられるものであってもよいし、それに替わるものであってもよいし、又は、同じでも異なっていてもよい。ＨＤＤ２０８及びＮＶＳＭ２０４は、同時に及び／又は同じ期間の間に、ファイルシステム２０６にデータを提供してもよい。
【００４３】
また、ストレージシステム２００は、ディスクストレージドライバ２１０、及び、ファイルシステム２０６に間接的に（すなわち、直近のモジュール又は通信デバイスを用いずに）、又は直接的に接続される半導体メモリドライバ２１２を含み、それぞれ、ＨＤＤ２０８及びＮＶＳＭ２０４のオペレーションを制御するのに使用してもよい。ターボ起動ドライバ２０２は、ディスクストレージドライバ２１０とディスク制御ドライバ２１４との間、及び半導体メモリ２１２と半導体制御ドライバ２１６との間に配置される。ディスクストレージドライバ２１０は、ファイルシステム２０６から受信したデータアクセス要求に基づいてＨＤＤデータアクセス要求を生成してもよい。ターボブートドライバ２０２は、ＨＤＤデータアクセス要求及びオペレーションモードに基づいて、ＮＶＳＭ２０４及びＨＤＤ２０８へのアクセスを制御する。
【００４４】
ターボブートドライバ２０２は、ディスク制御ドライバ２１４及び／又は半導体制御ドライバ２１６に信号を送信して、ＨＤＤ２０８及び／又はＮＶＳＭ２０４それぞれからデータを読み出す又は書き込んでもよい。信号は、ＨＤＤデータアクセス要求及びオペレーションモードに基づいたものであってもよい。制御ドライバ２１４、２１６はそれぞれ、ディスク制御モジュール２１８及び半導体メモリ制御モジュール２２０のオペレーションを制御する。制御モジュール２１８、２２０はそれぞれ、ＨＤＤインターフェース２２２及び半導体メモリインターフェース２２４を介して、ＨＤＤ２０８及びＮＶＳＭ２０４と通信を行う。ＨＤＤデータ読み出しアクセス要求は、ＮＶＳＭ２０４及び／又はＨＤＤ２０８からのデータによって満足されてもよい。ＨＤＤデータ書き込みアクセス要求は、ＮＶＳＭ２０４及び／又はＨＤＤ２０８へのデータ書き込みを含んでもよい。
【００４５】
ディスクストレージドライバ２１０は、ソフトウェアベースであり、ユーザーとインターフェース接続するのに使用され、ハードウェアに依存しない。ディスクストレージドライバ２１０は、ストレージシステム２００のディスクドライブ（例えば、ハードディスクドライブ２０８）及びディスクドライブの内容を、ディスプレイに可視的に表示するのに使用される。ディスク制御ドライバ２１４は、ソフトウェアベースであり、ディスクストレージドライバ２１０とディスク制御モジュール２１８との間のインターフェースとして使用され、ハードウェアに依存しない。ディスクストレージドライバ２１０は、ディスク制御ドライバ２１４に提供されるアクセス要求を生成してもよい。ディスク制御ドライバ２１４は、ディスクストレージドライバ２１０からのアクセス要求に基づいて、ディスク制御モジュール２１８のオペレーションを制御する。ディスク制御モジュール２１８は、ハードウェアベースである。ディスクストレージドライバ２１０は、異なるディスク制御ドライバと通信を行ってもよく、また、１つのディスクドライブに固有のものであってもよい。ディスク制御ドライバ２１４は、複数のディスクドライブを制御してもよい。ディスクストレージドライバ２１０及びディスク制御ドライバ２１４は、プロセッサによって実行されるＯＳによって実行されてもよいし、又は、例えば、図３のホスト制御モジュール８２及び／又はストレージ制御モジュール８４によって実行されてもよい。
【００４６】
半導体メモリドライバ２１２は、ソフトウェアベースであり、ユーザーとインターフェース接続するのに使用され、ハードウェアに依存しない。半導体メモリドライバ２１２は、ストレージシステム２００の不揮発性半導体メモリ（例えば、不揮発性半導体メモリ２０４）及び不揮発性半導体メモリの内容を、ディスプレイに可視的に表示するのに使用される。半導体制御ドライバ２１６は、ソフトウェアベースであり、半導体メモリドライバ２１２と半導体メモリ制御モジュール２２０との間のインターフェースとして使用され、ハードウェアに依存しない。半導体メモリ制御モジュール２２０は、ハードウェアベースである。半導体メモリドライバ２１２は、半導体制御ドライバ２１６に提供されるアクセス要求を生成してもよい。半導体制御ドライバ２１６は、半導体メモリドライバ２１２からのアクセス要求に基づいて、半導体メモリ制御モジュール２２０のオペレーションを制御する。半導体メモリドライバ２１２は、異なるディスク制御ドライバと通信を行ってもよく、また、１つのディスクドライブに固有のものであってもよい。半導体制御ドライバ２１６は、複数のディスクドライブを制御してもよい。半導体メモリドライバ２１２及びディスク制御ドライバ２１６は、プロセッサによって実行されるＯＳによって実行されてもよいし、又は、例えば、図３のホスト制御モジュール８２及び／又はストレージ制御モジュール８４によって実行されてもよい。
【００４７】
図５には、ストレージシステム２３０が示されている。ストレージシステム２３０は、図４のストレージシステム２００と同様なものである。ストレージシステム２３０は、ディスクスストレージドライバ２１０及び半導体メモリドライバ２１２とディスク制御ドライバ２１４及び半導体制御ドライバ２１６との間ではなく、ファイルシステム２０６とディスクストレージドライバ２１０'及び半導体メモリドライバ２１２'との間に、配置されたターボブートドライバ２０２'を含む。ファイルシステム２０６は、データアクセス要求を生成する。ターボブートドライバ２０２'は、ファイルシステム２０６から受信したデータアクセス要求に基づいてＨＤＤ及びＮＶＳＭデータアクセス要求を生成する。ＨＤＤ及びＮＶＳＭデータアクセス要求は、それぞれ、ディスクストレージドライバ２１０'及び半導体メモリドライバ２１２'に向けられたものである。
【００４８】
ディスクストレージドライバ２１０'及び半導体メモリドライバ２１２'はそれぞれ、ディスク制御ドライバ２１４'及び半導体制御ドライバ２１６'と通信を行う。ディスク制御ドライバ２１４'及び半導体制御ドライバ２１６'は、ディスク制御モジュール２１８及び半導体メモリ制御モジュール２２０、並びにＨＤＤインターフェース２２２及び半導体メモリインターフェース２２４を使用して、ＨＤＤ２０８及びＮＶＳＭ２０４にアクセスする。
【００４９】
図６には、ストレージシステム２５０が示されている。ストレージシステム２５０は、図４のストレージシステム２００と同様なものである。ストレージシステム２５０は、ディスクストレージドライバ２１０及び半導体メモリドライバ２１２の替わりに、ストレージドライバ２５２を含む。ストレージシステム２５０は、また、ディスク制御ドライバ２１４及び半導体制御ドライバ２１６の代わりに、ストレージ制御ドライバ２５４を含む。
【００５０】
ストレージドライバ２５２は、ファイルシステム２０６から受信したデータアクセス要求に基づいてＨＤＤ及びＮＶＳＭデータアクセス要求を生成する。ターボブートドライバ２０２"は、ＨＤＤ及びＮＶＳＭデータアクセス要求に基づいて、ストレージ制御ドライバ２５４のオペレーションを制御する。ストレージ制御ドライバ２５４は、ＨＤＤインターフェース２２２'及び半導体メモリインターフェース２２４'を通じて、ＨＤＤ２０８及びＮＶＳＭ２０４にアクセスする、ストレージ制御モジュール２５６のオペレーションを制御する。
【００５１】
図７には、ストレージシステム２７０が示されている。ストレージシステム２７０は、図５及び図６のストレージシステム２３０、２５０と同様なものである。ストレージシステム２７０は、ストレージドライバ２５２''及びストレージ制御ドライバ２５４'を含む。ファイルシステム２０６は、ＨＤＤ及びＮＶＳＭデータアクセス要求を生成する。ターボブートドライバ２０２'''は、ＨＤＤ及びＮＶＳＭデータアクセス要求に基づいて、ストレージドライバ２５２'のオペレーションを制御する。ストレージドライバ２５２'は、ＨＤＤ２０８及びＮＶＳＭ２０４のオペレーションを制御するのに使用される。ストレージ制御ドライバ２５４'は、ＨＤＤインターフェース２２２'及び半導体メモリインターフェース２２４'を通じて、ＨＤＤ２０８及びＮＶＳＭ２０４にそれぞれアクセスするストレージ制御モジュール２５６のオペレーションを制御する。
【００５２】
上述の図１〜７における、ターボブートドライバ、３０、３０'、１３４、２０２、２０２'、２０２''、２０２'''に関連付けられたドライバ、モジュール及びインターフェースは、それぞれＨＤＤ及びＮＶＳＭと通信を行うために使用される。ドライバ、モジュール及びインターフェースは、内部データバス、インターネット・スモールコンピュータシステム・インターフェース（ｉＳＣＳＩ）、周辺機器インターコネクトエクスプレス（ＰＣＩｅ）インターフェース、シリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ）インターフェース、シリアル接続ＳＣＳＩ（ＳＡＳ）インターフェース及び／又はファイバーチャンネル（ＦＣ）インターフェースを含んでもよい。例えば、ディスクストレージドライバ２１０、２１０'、ディスク制御ドライバ２１４、２１４'、半導体メモリドライバ２１２、２１２'、半導体制御ドライバ２１６、２１６'、ディスク制御モジュール２１８、半導体メモリ制御モジュール２２０、ストレージ制御モジュール２５６、ＨＤＤインターフェース２４、２４'、９４、２２２、２２２'、及び半導体メモリインターフェース ２８、２８'、９６、２２４、２２４'は、ｉＳＣＳＩ、ＰＣＩｅ、ＳＡＴＡ、シリアルＳＡＳ及び／又はＦＣベースのデバイスであってもよい。ＨＤＤ及びＮＶＳＭと通信するのに使用されるドライバ、モジュール及びインターフェースは、同種のものであってもよいし、異なるタイプのものであってもよい。例えば、ＨＤＤ及びＮＶＳＭと通信を行うのに使用されるインターフェースは、ＳＡＴＡタイプのものであってもよい。別の例では、ＨＤＤと通信を行うのに使用されるインターフェースは、ＳＡＴＡタイプのものであり、ＮＶＳＭと通信を行うのに使用されるインターフェースは、ＰＣＩｅタイプのものであってもよい。
【００５３】
図８には、ホスト制御モジュール３０２と通信を行う又はそれに含まれるターボブートドライバモジュール３００が示されている。ターボブートドライバモジュール３００は、図１〜７のホスト制御モジュールに位置していてもよい。ターボブートドライバモジュール３００は、図１〜７及び図１０〜１１の実施形態のいずれの実施形態において使用されてもよい。ターボブートドライバモジュール３００は、ターボブートドライバモジュール３００のオペレーションを制御するターボブート制御モジュール３０４を含み、図１〜７の実施形態と同様にターボドライバを実行してもよい。また、ターボブートドライバモジュール３００は、モード選択モジュール３０５、学習モジュール３０６、学習後モジュール３０８、バイストレージアクセスモジュール３１０、更新モジュール３１２、圧縮／解凍アクセラレータモジュール３１４、ストレージマッピングモジュール３１６及び起動タイマ３１８を含む。
【００５４】
モード選択モジュール３０５を使用して、オペレーションモードを選択してもよい。モード選択モジュール３０５は、選択されたオペレーションモードに基づいて、１以上のモジュール３０６〜３１８を起動してもよい。
【００５５】
学習モジュール３０６は、学習モードで動作する場合に使用されてもよい。学習モードでは、あらゆる種類の起動データが収集されて、ＮＶＳＭに格納される。学習後モジュール３０８は、学習後モードで動作する場合に使用されてもよい。学習後モジュール３０８は、起動モードの間のデータアクセス要求に基づいて、ＨＤＤ及びＮＶＳＭへのアクセスを制御する。異なる起動サイクルの間に、ターボブートドライバモジュール３００は学習モード及び学習後モードで動作する。起動サイクルとは、コンピュータの電源がＯＮとされた時に実行される起動プロセスを指す。コンピュータの電源が投入される都度、コンピュータは起動プロセスを実行する。
【００５６】
学習モジュール３０６は、いつ学習モードで動作するべきかを判断する。例えば、キャッシュヒットに対するキャッシュミスの割合、及び／又は全キャッシュアクセスに対するキャッシュミスの割合が、所定の閾値を超えた場合に、学習モードのフラグが設定されるようにしてもよい。学習モードのフラグは、次の起動又は引き続いて行われる起動について、いつコンピュータシステムが学習モードで動作すべきかを示してもよい。キャッシュミスとは、ターボブートドライバモジュール３００が、起動データへのアクセス要求を受信した時に、そのデータがＮＶＳＭに格納されていないことを指す。起動データがＨＤＤに格納又は更新されていて、ＮＶＳＭには格納又は更新されていない場合に、キャッシュミスが発生すると考えられる。キャッシュヒットとは、ターボブートドライバモジュール３００が、起動データへのアクセス要求を受信した時に、そのデータがＮＶＳＭに格納されていることを指す。キャッシュアクセスは、キャッシュミス又はキャッシュヒットを指す。
【００５７】
バイストレージアクセスモジュール３１０は、バイストレージアクセスモードで動作する場合に使用されてもよい。バイストレージアクセスモジュール３１０は、同じ期間に、ＨＤＤ及びＮＶＳＭ両方へのアクセスを制御してもよい。データの第１セットは、ＨＤＤからアクセスされると同時に、データの第２セットは、ＮＶＳＭからアクセスされてもよい。これにより、起動時間を短縮できる。
【００５８】
更新モジュール３１２は、ＨＤＤに格納されたデータが更新される時に使用されてもよい。更新モジュール３１２は、ＨＤＤのデータがいつ更新されたかを検出し、ＮＶＳＭに格納されている対応データを更新する。これにより、ＮＶＳＭに格納されている特定の起動データがミラーされる、又は、ＨＤＤに格納されている特定の起動データと同じものとすることができる。一実施形態において、ＮＶＳＭに格納されるデータは、ＨＤＤに格納されるデータと同期される。別の実施形態において、ＨＤＤは、ＮＶＳＭに格納されているデータ及び更なるデータを格納してもよい。ＮＶＳＭは、ＨＤＤに格納されているデータ及び更なるデータを格納してもよい。すなわち、ＨＤＤに格納されているデータは、ＮＶＳＭに格納されたデータの包括でなくてもよく、またその反対の関係も同様である。
【００５９】
圧縮／解凍アクセラレータモジュール３１４は、データを格納する前に圧縮し、ＮＶＳＭ及び／又はメモリ３２０からのアクセスがあった後に、データを解凍するのに使用されてもよい。例えば、収集された起動データは、圧縮された後、ＮＶＳＭに格納されてもよい。同様に、マッピングデータは、メモリ３２０に記憶される前に、圧縮されてもよい。圧縮及び解凍プロセスを使用して、ＮＶＳＭ及びメモリ３２０に関連するアクセス時間を短縮してもよい。
【００６０】
ストレージマッピングモジュール３１６を使用して、収集されＮＶＳＭに格納されたデータのマッピングを制御してもよい。ＨＤＤのストレージに基づいて、ＮＶＳＭに収集され格納された起動データは、マッピングされて、ＨＤＤ対ＮＶＳＭマップ３２２（例えば、変換テーブル）が提供される。
【００６１】
ブートタイマ３１８は、ＨＤＤからの起動データのＮＶＳＭへの収集及び記憶をいつ止めるべきかを指示する。例えば、ターボブート制御モジュール３０４及び／又は学習モジュール３０６は、ＨＤＤからのデータ収集及びＮＶＳＭへのデータ格納を停止してもよい。起動タイマ３１８の予め設定された起動期間３２４が経過した時に、停止してもよい。起動タイマ３１８は、予め設定された起動期間３２４を初期化し、システムクロック３２６からのクロック信号に基づいて、いつ起動期間３２４が経過するかを判断してもよい。
【００６２】
予め設定された起動期間３２４はメモリ３２０に記憶され、異なる起動時間を構成するために調整が行われてもよい。例えば、起動の間に実行されるタスク、システム性能等に基づいて、起動を実行する時間を変更してもよい。例えば、ホスト制御モジュール３０２は、システムユーザーからの入力３２８に基づいて、起動時間調整信号を生成してもよい。起動時間調整信号は、更新された起動期間を含んでもよく、メモリ３２０に記憶され、学習モードを無効にするのに使用される。
【００６３】
上述の図１〜８の実施形態は、それぞれ別々のものとして考えてもよいし、組み合わせることも可能である。例えば、図３のファイルシステム及びドライバは、図４〜７の構成のいずれであってもよい。以下に示す図９〜１１のタイミング図及び方法は、図１〜８の実施形態に適用してもよい。
【００６４】
図９には、起動のタイミング図が示されている。図１〜８のモジュールによって実行される起動は、ＢＩＯＳモード及びＯＳ起動オペレーションモードを含んでもよい。ＢＩＯＳモード及びＯＳ起動オペレーションモードは、モード選択モジュール３０５のようなモード選択モジュールによって選択される。ＢＩＯＳモードの間に、ＰＯＳＴモードが実行され、そしてブートローダモードが実行される。ＰＯＳＴモードの間、ホスト制御モジュールは、ＨＤＤからマスタブートレコード（ＭＢＲ）を読み込む。ＭＢＲは、ブートローダを読み込み実行するのに使用されてもよい。ブートローダモードの間、ブートローダは、ＯＳカーネル、ディスクドライバ、半導体メモリドライバ、ストレージドライバ及びターボブートドライバを読み込んでもよい。
【００６５】
ＯＳカーネルは、ブートローダモードが完了した時に実行されてもよい。ＯＳカーネルは、ディスクドライバの実行を含む初期化期間に、半導体ドライバ、ストレージドライバ及びターボブートドライバを初期化してもよい。ターボブートドライバは、実行されると、図８の実施形態を参照して上記された起動期間のような起動期間を開始してもよい。ターボブートドライバは、起動期間の間にアクティブにされ、起動期間の後もアクティブ状態のままであってもよい。起動タイマ期間の間にアクセスされる起動データは、ＨＤＤ及び／又はＮＶＳＭからアクセスされてもよい。
【００６６】
ＯＳ起動オペレーションモードは、ＯＳ設定モードを含む。ＯＳ設定モードに続いて、ログオンモードが実行されてもよい。Ｗｉｎｄｏｗｓ（登録商標）のようなコンピュータシステムのＯＳは、ＯＳ設定モードの間に設定が行われる。システム及び自動スタートドライバが、読み込まれ開始されてもよい。ログオンモードの実行中になると、ユーザーは、ユーザーネーム及びパスワードを入力してログオンしてもよい。ユーザーネーム及びパスワードが承認され、ユーザープロファイルが読み込まれた時点で、ログオンモードが完了してもよい。ログオンモードの後に、ユーザーアプリケーション及びサービスが読み込まれ実行されてもよい。Ｗｉｎｄｏｗｓ（登録商標）ベースのシステムでは、Ｗｉｎｄｏｗｓ（登録商標）デスクトップが開始する。図９では、起動タイマ期間が、起動が完了すると終了するように示されているが、起動タイマ期間は、起動完了の前後に満了してもよい。
【００６７】
図１０は、起動の間にデータを読み込む方法を示している。以下の説明では、主に図３、８及び９の実施形態について、方法の段階を説明しているが、これらの段階は、本開示のその他の実施形態にも適用可能である。方法は、４００で開始される。
【００６８】
ステップ４０２において、コンピュータシステムの電源がＯＮにされ、起動プロセスが開始される。この段階は、ＨＤＤからマスタブートレコードの読み込み及び実行を含む。マスタブートレコードは、コンピュータシステムのＲＡＭに読み込まれ、実行されてもよい。
【００６９】
ステップ４０４において、ＢＩＯＳが読み込まれ実行される。この段階では、パーソナルコンピュータ（ＰＣ）ベースのシステムについて、エクステンシブル・ファームウェア・インターフェース（ＥＦＩ）の読み込み及び実行を含む。ＥＦＩは、オペレーティングシステムとプラットフォームファームウェアとの間のソフトウェアインターフェースを規定する。
【００７０】
ステップ４０４Ａでは、マスタブートレコードを使用して、ＰＯＳＴモジュールを読み込み及び実行してもよい。ＰＯＳＴモジュールは、最初はＲＯＭに格納されており、後にＲＡＭに読み込まれ、ＲＡＭから実行されてもよい。
【００７１】
ステップ４０４Ｂでは、マスタブートレコード及び／又はＰＯＳＴモジュールを使用して、コンピュータシステムハードウェアを初期化し、ブートローダの読み込み及び実行を行ってもよい。ブートローダは、最初はＨＤＤに格納されており、後にＲＡＭに読み込まれ、ＲＡＭから実行されてもよい。ブートローダは、ＰＯＳＴモジュールの実行後に、実行されてもよい。
【００７２】
ステップ４０４Ｂ１〜４０４Ｂ４では、ブートローダは、ＯＳカーネル、ディスクドライバ、半導体メモリドライバ及びターボブートドライバをそれぞれ、読み込んでもよい。ディスクドライバは、ディスクストレージドライバ及びディスク制御ドライバを含んでもよい。半導体メモリドライバ、半導体メモリドライバ及び半導体制御ドライバを含んでもよい。
【００７３】
ステップ４０６では、ブートローダは、ＯＳカーネルを実行してもよい。ＯＳカーネルは、ＲＡＭから実行され、コンピュータシステムのＯＳの設定を行ってもよい。例えば、ＯＳカーネルは、Ｗｉｎｄｏｗｓ（登録商標）ＯＳを設定する。ＯＳカーネルの実行の間及び実行後に、サービス及びアプリケーションの読み込みを行ってもよい。ステップ４０６Ａ〜４０６Ｃでは、ＯＳカーネルは、ディスクドライバ、半導体メモリドライバ及びターボブートドライバをそれぞれ実行してもよい。
【００７４】
以下の複数の段階では、様々なタスクが、ターボブートドライバによって実行される。タスクは、ホスト制御モジュール、ターボブートドライバモジュール、及び又はターボブート制御モジュールによって実行されてもよい。
【００７５】
ステップ４０８において、ターボブートドライバは、起動タイマを始動させる。起動タイマは、カウンタを開始し、開始タイムスタンプを記録し、開始タイムスタンプからの時間の経過をモニタする。
【００７６】
ステップ４０９において、ホスト制御モジュール及び／又はファイルシステムは、ＨＤＤに格納された起動データにアクセスするデータアクセス要求を生成する。データアクセス要求は、ディスクストレージドライバ、ストレージドライバ及び／又はターボブートドライバに提供されてもよい。一実施形態において、ディスクストレージドライバ又はストレージドライバは、ターボブートドライバに提供されるデータアクセス信号を生成する。別の実施形態では、ターボブートドライバは、ホスト制御モジュール又はファイルシステムから直接、データアクセス要求を受信する。
【００７７】
ステップ４１０において、ターボブートドライバは、データアクセス要求と関連するデータが、ＮＶＳＭに格納（キャッシュ）されているか否かを判断する。すなわち、ターボブートドライバは、データアクセス要求に対してキャッシュミスが存在するかを判断する。データがＮＶＳＭに格納されている場合には、ターボブートドライバはステップ４１２に進み、そうでない場合には、制御は、ステップ４３０に進んでもよい。ターボブートドライバは、ＨＤＤ対ＮＶＳＭマップで、セクタ番号、ブロックＩＤ及び／又はＬＢＡを参照して、データがＮＶＳＭに格納されているか否かを判断してもよい。
【００７８】
ステップ４１２において、ターボブートドライバは、コンピュータシステムが、学習モードで動作しているかを判断する。ホスト制御モジュール、ターボブートドライバ、ディスクドライバ、半導体メモリドライバ及び／又はストレージドライバを含むコンピュータシステムは、学習モードで動作してもよい。コンピュータシステムが初めて起動される時、又はＮＶＳＭにおける起動データが更新される別の起動の間に、コンピュータシステムは、学習モードで動作してもよい。コンピュータシステムが学習モードで動作しない場合には、ターボブートドライバはステップ４１４に進み、そうでない場合には、制御は、ステップ４１８に進む。
【００７９】
ステップ４１４において、起動データは、ＨＤＤから読み込まれる。ステップ４１４の後、ターボブートドライバは、４１６で終了する。ステップ４１８では、ターボブートドライバ及び／又は学習モジュールは、ＨＤＤから起動データを読み込んで、ステップ４２０に進む。
【００８０】
ステップ４２０において、ターボブートドライバ及び／又は学習モジュールは、起動データを収集して、ＨＤＤからの第１アドレス又はロケーションＩＤを記録し、ＮＶＳＭの第２の対応するアドレス又はロケーションＩＤに起動データを格納する。起動データは、例えば、システム及び自動スタートドライバデータ、ＯＳデータ、ＯＳカーネルローダデータ、サービス及びアプリケーションデータ、又は別の起動データを含んでもよい。格納されるデータの長さは、記録され、格納された起動データにアクセスする際に使用されてもよい。
【００８１】
ステップ４２２において、ターボブートドライバ及び／又は学習モジュールは、ＮＶＳＭにおける対応するロケーションに対するＨＤＤに格納されてる起動データのロケーションをマップする。このマッピングは、図８の実施形態を参照して説明した態様と同様にして実行してもよい。
【００８２】
ステップ４２４において、起動期間が経過した場合には、ターボブートドライバは４２６において終了してもよい。起動期間が経過していない場合には、ターボブートドライバは、ステップ４２８に進んでもよい。ステップ４２８において、更なる起動データをＨＤＤから読み込むべき場合には、ターボブートドライバは、ステップ４２０に戻る、又は更なるデータアクセス要求が受信された場合には、ステップ４０９に戻る。
【００８３】
ステップ４３０において、ターボブートドライバは、コンピュータシステムが、バイストレージアクセスモードで動作しているかを判断する。ホスト制御モジュール、ターボブートドライバ、ディスクドライバ、ディスクドライバ及び／又は半導体メモリドライバを含むコンピュータシステムは、バイストレージアクセスモードで動作してもよい。バイストレージアクセスモードは、ＮＶＳＭ内のデータへのアクセスと同時に、ＨＤＤ内のデータへのアクセスを含んでもよい。コンピュータシステムが、バイストレージアクセスモードで動作している場合には、ターボブートドライバはステップ４３２に進み、そうでない場合には、ステップ４３４に進む。
【００８４】
ステップ４３２において、ターボブートドライバが、ＨＤＤ及びＮＶＳＭの両方から起動データを読み込んでもよい。読み込まれた起動データは、ファイルシステムへと転送される。ＮＶＳＭから読み込まれるデータは、前に学習モードで収集されたデータであってもよい。ターボブートドライバは、ＨＤＤ対ＮＶＳＭマップを使用して、データの第１セットをＨＤＤから読み込み、データの第２セットをＮＶＳＭから読み込んでもよい。データの第１セットは、データの第２セットとは区別される及び／又は独立したものである。
【００８５】
ＯＳイメージ又はその一部が、ＨＤＤ及びＮＶＳＭの両方から読み込まれてもよい。ＯＳイメージとは、ＯＳ、実行可能なプログラム及び当該実行可能なプログラムと関連付けられたデータファイルを含むファイルのことを指す。順次読み出し要求を、ターボブートドライバ及び／又はバイストレージアクセスモジュールによって生成してもよい。順次読み出しは、ＨＤＤの順次読み出し及びＮＶＳＭの順次読み出しを含んでもよい。別の例として、順次読み出しは、ＯＳ・ＳＡＴＡ・ＨＤＤ順次読み出し、及びＮＶＳＭ順次読み出しを含んでもよい。
【００８６】
ターボブートドライバ及び／又はバイストレージアクセスモジュールは、ＨＤＤ及びＮＶＳＭからのデータアクセスのバランスをとるために、負荷バランシングアルゴリズムを使用してもよい。負荷バランシングアルゴリズムは、ＨＤＤ及びＮＶＳＭのどちらからデータを読み込むかを、データトラフィック、ＨＤＤ及びＮＶＳＭのそれぞれからのデータアクセス量、ＨＤＤのスピード及び／又はＮＶＳＭのスピード、ＨＤＤ及びＮＶＳＭそれぞれから現在アクセスされているデータの量等に基づいて決定する。このようにすることにより、ＨＤＤ及びＮＶＳＭを効率的に使用することができ、起動時間を速くすることができる。
【００８７】
ステップ４３４において、ターボブートドライバは、ＨＤＤ対ＮＶＳＭマップを使用し、起動データをＨＤＤからではなく、ＮＶＳＭから読み込んでもよい。読み込まれた起動データは、ファイルシステムに転送される。ＮＶＳＭから読み込まれたデータは、学習モードで前に収集されたデータであってもよい。ステップ４３６において、起動プロセスが完了した場合には、ターボブートドライバは４３８において終了してもよく、そうでない場合には、ステップ４３０に戻り、起動データの読み込みを続ける。
【００８８】
図１１には、本開示の実施形態に係る、収集された起動データに基づいてストレージデバイスにデータを書き込む方法が示されている。方法は、ホスト制御モジュール、ターボブートドライバモジュール、及び／又はターボブート制御モジュールによって実行されてもよい。ステップ５００で、方法が開始されてもよい。コンピュータシステムが起動モードにある場合、又は起動モードが完了した後に、この方法を実行してもよい。この方法は、学習モードの間は、実行されなくてもよい。
【００８９】
ステップ５０２では、ディスクストレージドライバ、ターボブートドライバ、又はストレージドライバにより、ＨＤＤデータアクセス要求がファイルシステムから受信される。ステップ５０４では、ＨＤＤデータアクセス要求が書き込み要求である場合には、ターボブートドライバは、ステップ５０６に進んでもよく、書き込み要求でない場合には、ステップ５１４に進んでもよい。
【００９０】
ステップ５０６において、ＨＤＤデータアクセス要求がＮＶＳＭに格納された起動データに対応する場合には、ターボブートドライバはステップ５０８に進み、そうでない場合には、ステップ５１０に進む。ステップ５０８において、データはＨＤＤ及びＮＶＳＭの対応するロケーションに格納される。ＨＤＤ及びＮＶＳＭには、同一のデータが格納される。ステップ５１０において、ＨＤＤにデータが格納され、ＮＶＳＭには格納されない。ターボブートドライバは、ステップ５１２において終了してもよい。
【００９１】
ステップ５１４において、ＨＤＤデータアクセス要求に関連付けられたデータが、ＮＶＳＭに格納されている場合には、ターボブートドライバは、ステップＳ５１６に進んでもよく、そうでない場合には、ステップ５１８に進む。ステップ５１６において、ターボブートドライバは、ＮＶＳＭ内のデータを読み出す。ステップ５１８において、ターボブートドライバは、ＨＤＤ内のデータを読み出す。ターボブートドライバは、５２０で終了してもよい。
【００９２】
図１０及び図１１の上述したステップは、例示することを目的としたものであり、これらのステップを、順次に、同期して、同時に、連続的に、重複する期間において、又はアプリケーションに応じて異なる順番で実行してもよい。
【００９３】
本開示の広義の教示するところは、様々な形式で実装可能である。本開示には、特定の例が記載されているが、本開示の真の範囲は、これらに限定されず、添付の図面、明細書の記載及び添付の特許請求の範囲を熟読することにより、その他の改良例が明らかとなる。
【図１】
0005234473.tif 000002
【図２】
0005234473.tif 000003
【図３】
0005234473.tif 000004
【図４】
0005234473.tif 000005
【図５】
0005234473.tif 000006
【図６】
0005234473.tif 000007
【図７】
0005234473.tif 000008
【図８】
0005234473.tif 000009
【図９】
0005234473.tif 000010
【図１０】
0005234473.tif 000011
【図１１】
0005234473.tif 000012