(57)【特許請求の範囲】
【請求項１】
制御部と、第１の不揮発性記憶部と前記第１の不揮発性記憶部よりアクセス速度が速い第２の不揮発性記憶部とを有する記憶装置と、
揮発性メモリと、
前記第２の不揮発性記憶部の少なくとも一部の領域を前記第１の不揮発性記憶部のキャッシュとして用いるキャッシュドライバと、
前記揮発性メモリにロードされた、オペレーティングシステムと前記キャッシュドライバとを実行するプロセッサと、
を具備し、
前記キャッシュドライバは、
前記第２の不揮発性記憶部に格納されたキャッシュデータを管理するための第１のキャッシュ管理情報を前記揮発性メモリに格納し、
シャットダウン時に、前記キャッシュドライバは、前記揮発性メモリに格納された前記第１のキャッシュ管理情報を第２のキャッシュ管理情報として前記第１の不揮発性記憶部または前記第２の不揮発性記憶部に格納し、
起動時、前記制御部は、前記第２のキャッシュ管理情報に基づいて前記第２の不揮発性記憶部の少なくとも一部の領域を第１の不揮発性記憶部のリードキャッシュデバイスとして用いるリードキャッシュ制御処理と、キャッシュ管理情報管理処理とを実行する
情報処理装置。
【請求項２】
前記キャッシュドライバは、前記揮発性メモリにキャッシュドライバにロードされた後に動作開始通知を前記制御部に発行し、
前記制御部は、前記動作開始通知に応じて前記リードキャッシュ制御処理およびキャッシュ管理情報管理処理の実行を停止する、
請求項１に記載の情報処理装置。
【請求項３】
前記情報処理装置の起動時、前記制御部は、リードアクセス要求されたデータを識別するデータを前記第２のキャッシュ管理情報内に書き込む、
請求項１に記載の情報処理装置。
【請求項４】
前記キャッシュドライバは、前記起動時にリードアクセス要求されたデータが格納されている領域に対してライトアクセス要求が発行された場合、前記起動時にリードアクセス要求されたデータを識別するデータを起動時にリードアクセス要求されていない状態に書き替える、
請求項３に記載の情報処理装置。
【請求項５】
前記情報処理装置に第２の記憶装置が接続されている場合、前記キャッシュドライバは前記第２の不揮発性記憶部の少なくとも一部の領域を前記第１の不揮発性記憶部および前記第２の記憶装置のキャッシュとして用いる、
請求項１に記載の情報処理装置。
【請求項６】
前記第１の不揮発性記憶部はハードディスクドライブを有し、
前記第２の不揮発性記憶部はフラッシュメモリを有する、
請求項１に記載の情報処理装置。
【請求項７】
制御部と、第１の不揮発性記憶部と前記第１の不揮発性記憶部よりアクセス速度が速い第２の不揮発性記憶部とを有する記憶装置を具備する情報処理装置のキャッシュ制御方法であって、
前記第２の不揮発性記憶部の少なくとも一部の領域を第１の不揮発性記憶部のキャッシュとして用いるキャッシュドライバは、前記第２の不揮発性記憶部に格納されたキャッシュデータを管理するための第１のキャッシュ管理情報を前記揮発性メモリに格納し、
シャットダウン時に、前記キャッシュドライバは、前記揮発性メモリに格納された前記第１のキャッシュ管理情報を第２のキャッシュ管理情報として前記第１の不揮発性記憶部または前記第２の不揮発性記憶部に格納し、
オペレーティングシステムを実行するプロセッサによって、前記キャッシュドライバを実行し、
起動時、前記制御部は、前記第２のキャッシュ管理情報に基づいて前記第２の不揮発性記憶部の少なくとも一部の領域を第１の不揮発性記憶部のリードキャッシュデバイスとして用いるリードキャッシュ制御処理と、キャッシュ管理情報管理処理とを実行する、
キャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、キャッシュデバイスとして用いる情報処理装置およびキャッシュ制御方法に関する。
【背景技術】
【０００２】
ハードディスクドライブとフラッシュメモリとを備え、フラッシュメモリをハードディスクドライブのキャッシュデバイスとして用いるハイブリッドハードディスクドライブが発売されている。ハイブリッドハードディスクドライブでは、キャッシュ制御を行うために演算速度が速い制御部を備える必要がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２５７４８１号公報
【特許文献２】特開平１０−１５４１０１号公報
【特許文献３】特表２００８−５３８４３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
演算速度が遅い制御部を用いて、キャッシュ制御を行いたいという要望があるが、演算速度が遅い制御部を用いると、アクセス速度が遅くなってしまう恐れがある。
【０００５】
本発明の目的は、演算速度が遅い制御部を用いても、アクセス速度の低下を抑制することが可能な情報処理装置のキャッシュ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
実施形態によれば、情報処理装置は、記憶装置と、揮発性メモリと、キャッシュドライバと、プロセッサとを具備する。記憶装置は、制御部と、第１の不揮発性記憶部と前記第１の不揮発性記憶部よりアクセス速度が速い第２の不揮発性記憶部とを有する。キャッシュドライバは、前記第２の不揮発性記憶部の少なくとも一部の領域を前記第１の不揮発性記憶部のキャッシュとして用いる。プロセッサは、前記揮発性メモリにロードされた、オペレーティングシステムと前記キャッシュドライバとを実行する。前記キャッシュドライバは、前記第２の不揮発性記憶部に格納されたキャッシュデータを管理するための第１のキャッシュ管理情報を前記揮発性メモリに格納し、シャットダウン時に、前記キャッシュドライバは、前記揮発性メモリに格納された前記第１のキャッシュ管理情報を第２のキャッシュ管理情報として前記第１の不揮発性記憶部または前記第２の不揮発性記憶部に格納し、起動時、前記制御部は、前記第２のキャッシュ管理情報に基づいて前記第２の不揮発性記憶部の少なくとも一部の領域を第１の不揮発性記憶部のリードキャッシュデバイスとして用いるリードキャッシュ制御処理と、キャッシュ管理情報管理処理とを実行する。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態の情報処理装置の構成の一例を示すブロック図。
【図２】第１の実施形態の情報処理装置の主要部を示すブロック図。
【図３】第２の実施形態の情報処理装置の主要部を示すブロック図。
【図４】第２の実施形態の、電源が投入されてからの制御部およびＨ−ＨＤＤドライバの処理の手順を示すフローチャート。
【図５】第２の実施形態の、シャットダウン時のＨ−ＨＤＤドライバおよび制御部によって行われる処理の手順を示すフローチャート。
【図６】第２の実施形態の、Ｈ−ＨＤＤの制御部によってキャッシュデータの管理が行われている状態で、リードアクセスがあった場合の制御部の処理の手順を示すフローチャート。
【図７】第２の実施形態の、Ｈ−ＨＤＤの制御部によってキャッシュデータの管理が行われている状態で、ライトアクセスがあった場合の制御部の処理の手順を示すフローチャート。
【図８】第３の実施形態の情報処理装置の主要部の構成を示すブロック図。
【図９】第３の実施形態の、起動時のＨ−ＨＤＤドライバおよび制御部の処理の手順を示すフローチャート。
【図１０】第３の実施形態の、起動時のＨ−ＨＤＤドライバおよび制御部の処理の手順を示すフローチャート。
【図１１】第３の実施形態の、正常なシャットダウン時のＨ−ＨＤＤドライバおよび制御部の処理の手順を示すフローチャート。
【図１２】第４の実施形態の情報処理装置の主要部を示すブロック図。
【図１３】第４の実施形態の情報処理装置のＨ−ＨＤＤドライバによって生成されたキャッシュ管理情報の一例を示す図。
【図１４】キャッシュ管理情報内のキャッシュディレクトリの一例を示す図。
【図１５】キャッシュディレクトリ内のタグデータの一例を示す図。
【図１６】第４の実施形態の、Ｈ−ＨＤＤの制御部によってキャッシュデータの管理が行われている状態で、リードアクセスがあった場合の制御部の処理の手順を示す図。
【図１７】第５の実施形態の情報処理装置の主要部を示すブロック図。
【図１８】第５の実施形態の情報処理装置のＨ−ＨＤＤドライバによって生成されたキャッシュ管理情報の一例を示す図。
【図１９】第５の実施形態のタグデータの一例を示す図。
【図２０】第５の実施形態のＨ−ＨＤＤドライバによるキャッシュの管理手法の一例を示すフローチャート。
【図２１】第７の実施形態の情報処理装置の主要部の一例を示すブロック図。
【図２２】第７の実施形態の、Ｈ−ＨＤＤドライバによって管理されるキャッシュ管理情報内のタグデータの一例を示す図。
【図２３】第８の実施形態の情報処理装置の構成の一例を示すブロック図。
【図２４】第８の実施形態の情報処理装置の主要部の一例を示すブロック図。
【図２５】第８の実施形態の、電源が投入されてからのコントローラおよびＵＳＢ−ＨＤＤドライバの処理の手順の一例を示すフローチャート。
【図２６】第９の実施形態の情報処理装置の主要部の一例を示すブロック図。
【図２７】第９の実施形態のトレース管理情報の一例を示す図。
【図２８】第９の実施形態のコントローラによって実行される処理の手順をの一例を示すフローチャート。
【図２９】第９の実施形態のキャッシュドライバによって実行される処理の手順をの一例を示すフローチャート。
【図３０】第９の実施形態の変形例の情報処理装置の主要部の一例を示すブロック図。
【図３１】第１０の実施形態の情報処理装置の主要部の一例を示すブロック図。
【図３２】第１０の実施形態のトレース管理情報の一例を示す図。
【図３３】第１０の実施形態のコントローラによって実行される処理の手順をの一例を示すフローチャート。
【図３４】第１０の実施形態のキャッシュドライバによって実行される処理の手順をの一例を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施の形態について図面を参照して説明する。
【０００９】
図１は、実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータとして実現されている。
【００１０】
図１に示すように、本情報処理装置は、ＣＰＵ（Central processing unit）１１、ＭＣＨ（Memory controller hub）１２、メインメモリ（揮発性メモリ）１３、ＩＣＨ（I/o controller hub）１４、ＧＰＵ（Graphics processing unit）１５、ビデオメモリ（ＶＲＡＭ）１５Ａ、サウンドコントローラ１６、ＢＩＯＳ−ＲＯＭ（Read only memory）１７、Ｈ−ＨＤＤ（Hybrid Hard disk drive）（記憶装置）１８、ＯＤＤ（Optical disc drive）２０、各種周辺機器２１、ＥＥＰＲＯＭ（Electrically erasable programmable ROM）２２、ＥＣ／ＫＢＣ（Embedded controller/keyboard controller）２３等を備えている。
【００１１】
ＣＰＵ１１は、本情報処理装置の動作を制御するプロセッサであり、Ｈ−ＨＤＤ１８やＯＤＤ２０からメインメモリ１３にロードされる各種プログラムを実行する。このＣＰＵ１１によって実行される各種プログラムの中には、リソース管理を司るＯＳ１１０や、当該ＯＳ１１０の配下で動作する、Ｈ−ＨＤＤドライバ（キャッシュドライバ）１２０および各種アプリケーションプログラム１３０等が存在する。Ｈ−ＨＤＤドライバ１２０は、Ｈ−ＨＤＤ１８を制御するプログラムである。本情報処理装置は、Ｈ−ＨＤＤ１８内のＨＤＤ１８Ｂ（第１の不揮発性記憶部）よりアクセス速度が速いＳＳＤ（Solid State Drive）（第２の不揮発性記憶部）１８ＣをＨＤＤ１８Ｂのキャッシュとして利用することで、ＨＤＤ１８Ｂに対するアクセスの高速化を図る。ＳＳＤ１８Ｃは、フラッシュメモリを有する。
【００１２】
また、ＣＰＵ１１は、ＢＩＯＳ−ＲＯＭ１７に格納されたＢＩＯＳも実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。以下では、ＢＩＯＳ−ＲＯＭ１７の格納物であるＢＩＯＳ自体についてもＢＩＯＳ１７と表記することがある。
【００１３】
ＭＣＨ１２は、ＣＰＵ１１とＩＣＨ１４との間を接続するブリッジとして動作すると共に、メインメモリ１３をアクセス制御するメモリコントローラとして動作する。また、ＭＣＨ１２は、ＧＰＵ１５との通信を実行する機能を有している。
【００１４】
ＧＰＵ１５は、本情報処理装置に組み込まれ、または、外部接続される表示装置を制御する表示コントローラである。ＧＰＵ１５は、ＶＲＡＭ１５Ａを有し、また、各種プログラムが表示しようとする画像をＣＰＵ１１に代わって描画するアクセラレータを搭載している。
【００１５】
ＩＣＨ１４は、Ｈ−ＨＤＤ１８およびＯＤＤ１９を制御するためのＡＴＡ（AT Attachment）コントローラを内蔵する。ＩＣＨ１４は、ＰＣＩ（Peripheral component interconnect）バスに接続された各種周辺機器２１の制御も行う。また、ＩＣＨ１４は、サウンドコントローラ１６との通信機能も有している。
【００１６】
Ｈ−ＨＤＤ１８は、制御部１８Ａ、ＨＤＤ１８Ｂ、ＳＳＤ１８Ｃを有する。制御部は、ＡＴＡコントローラからの命令に応じてＨＤＤ１８Ｂ、ＳＳＤ１８Ｃにアクセスする。
【００１７】
サウンドコントローラ１６は音源デバイスであり、各種プログラムが再生対象とするオーディオデータを、本情報処理装置に組み込まれ、または、外部接続されるスピーカ等に出力する。
【００１８】
ＥＥＰＲＯＭ２２は、例えば本情報処理装置の個体情報や環境設定情報などを格納するためのメモリデバイスである。そして、ＥＣ／ＫＢＣ２３は、電力管理を行うためのエンベデッドコントローラと、キーボードやポインティングデバイス等の操作によるデータ入力を制御するためのキーボードコントローラとが集積された１チップＭＰＵ（Micro processing unit）である。
【００１９】
次に、Ｈ−ＨＤＤ１８およびＨ−ＨＤＤドライバ１２０の機能について図２を参照して説明する。図２は、図１に示す情報処理装置の主要部を示すブロック図である。  
情報処理装置１０はオペレーティングシステム（ＯＳ）が制御し、オペレーティングシステム１１０からＨ−ＨＤＤ１８へのアクセスはすべてＨ−ＨＤＤドライバ１２０を介して行われる。Ｈ−ＨＤＤドライバ１２０はＡＴＡコントローラ１４Ａを直接的または間接的に制御する。ＡＴＡコントローラ１４Ａを介してＨ−ＨＤＤ１８が接続されている。また、Ｈ−ＨＤＤドライバ１２０は、メモリコントローラ１２Ａを介して、主メモリ１３へのデータのアクセスを行う。
【００２０】
Ｈ−ＨＤＤドライバ１２０はシステムの起動時に主メモリ１３にロードされる。Ｈ−ＨＤＤドライバ１２０は、キャッシュ管理情報２０１を格納するための領域を主メモリ１３内に確保して初期化し、キャッシュデータ２１２には何も記録されていない状態にした後、キャッシュ制御処理を開始する。キャッシュ管理情報２０１は、キャッシュディレクトリなどのキャッシュデータを管理するためのデータを有する。Ｈ−ＨＤＤドライバ１２０の動作時、Ｈ−ＨＤＤドライバ１２０は、主メモリ１３内のキャッシュ管理情報２０１にライトキャッシュおよびリードキャッシュの学習データを管理するためのデータを記録する。シャットダウン時、Ｈ−ＨＤＤドライバ１２０は、主メモリ１３内のキャッシュ管理情報２０１を破棄する。
【００２１】
なお、Ｈ−ＨＤＤドライバ１２０が動作を開始するまでは、ＢＩＯＳプログラムがＨ−ＨＤＤ１８を制御する。制御部１８Ａは、ホストからライトアクセス要求またはリードアクセス要求があった場合、ハードディスクドライブ１８Ｂにアクセスする。
【００２２】
Ｈ−ＨＤＤ１８は、オペレーティングシステム１１０からは単一の記憶装置（ＨＤＤ１８Ｂ）として認識される。ＳＳＤ１８Ｃの一部または全部の領域がＨＤＤ１８Ｂのキャッシュとして使用される。オペレーティングシステム１１０は、キャッシュデータの格納領域として使用されるＳＳＤ１８Ｃのキャッシュデータ領域２１２に直接アクセスすることができない。
【００２３】
本実施形態によれば、ＣＰＵ１１によって実行されるドライバ１２０を用いてキャッシュ制御を行うことによって、Ｈ−ＨＤＤ１８に演算速度が遅い制御部１８Ａを用いても、アクセス速度の低下を抑制することが可能になる。
【００２４】
（第２の実施形態：ＳＳＤの寿命低下抑制）
第１の実施形態では、起動の度にキャッシュ管理情報２０１を破棄しているので、起動の度にキャッシュデータ領域２１２内にキャッシュデータを書き込むことになるので、ＳＳＤの寿命が短くなる。また、起動時にキャッシュデータ２１２がＨＤＤ１８Ｂのデータと一致していることが保証できれば、キャッシュ管理情報２０１を不揮発性記憶領域に保存し、起動時にロードすることによってキャッシュデータ２１２を破棄せずに使用することができ、Ｈ−ＨＤＤ１８の性能向上も図れる。この実施形態では、ＳＳＤの寿命が短くなることを抑制し、Ｈ−ＨＤＤの性能を向上させることが可能な手法について説明する。
【００２５】
本実施形態のＨ−ＨＤＤ１８およびＨ−ＨＤＤドライバの機能について図３のブロック図を参照して説明する。第２の実施形態の情報処理装置の主要部を示すブロック図である。  
Ｈ−ＨＤＤドライバ３２０はシステムの起動時に主メモリ１３にロードされ、ＳＳＤ１８Ｃ内に格納されているキャッシュ管理情報２１１をキャッシュ管理情報２０１として主メモリ１３内に格納した後、動作を開始する。キャッシュ管理情報２１１は、キャッシュディレクトリなどのキャッシュデータを管理するためのデータを有する。Ｈ−ＨＤＤドライバ３２０の動作時、Ｈ−ＨＤＤドライバ３２０は、主メモリ１３内のキャッシュ管理情報２０１にライトキャッシュおよびリードキャッシュの学習データを記録する。シャットダウン時、Ｈ−ＨＤＤドライバ３２０は、ＳＳＤ１８Ｃ内に主メモリ１３内のキャッシュ管理情報２０１をキャッシュ管理情報２１１として格納する。
【００２６】
なお、Ｈ−ＨＤＤドライバ３２０が動作を開始するまでは、ＢＩＯＳプログラムがＨ−ＨＤＤ１８を制御する。制御部１８Ａは、ホストからアクセスがあった場合、キャッシュ管理情報２１１を参照して、データが学習されているかを判定する。Ｈ−ＨＤＤドライバ３２０の動作開始時にはＨ−ＨＤＤ１８に対してドライバ動作開始通知を発行する。
【００２７】
Ｈ−ＨＤＤ１８は、オペレーティングシステム１１０からは単一の記憶装置（ＨＤＤ１８Ｂ）として認識される。ＳＳＤ１８Ｃの一部または全部の領域がＨＤＤ１８Ｂのキャッシュとして使用される。オペレーティングシステム１１０は、キャッシュデータの格納領域として使用されるＳＳＤ１８Ｃのキャッシュデータ領域３１２に直接アクセスすることができない。
【００２８】
Ｈ−ＨＤＤ１８内の制御部１８Ａは、ＳＳＤ１８Ｃにキャッシュデータを蓄える学習機能は有しないが、ＳＳＤ１８Ｃに蓄えられたキャッシュデータの管理機能、すなわち、ホストからのアクセス要求がキャッシュデータにヒットしているかを判別する判別機能、キャッシュデータにヒットしていた場合にキャッシュデータからデータを読み出す機能、キャッシュデータ内の特定のデータを無効化する機能、およびキャッシュの管理データを更新する機能を有する。
【００２９】
Ｈ−ＨＤＤ１８の制御部１８Ａは電源投入後、ドライバ動作開始通知までの間、ＳＳＤ１８Ｃ内のキャッシュデータを管理する。制御部１８Ａがキャッシュデータを管理する期間において、ホスト側でキャッシュに関与しないＢＩＯＳが動作している。ホストからのリードアクセス要求がＳＳＤ１８Ｃ内のキャッシュデータにヒットしていれば、制御部１８Ａは、ＳＳＤ１８Ｃ内からデータをリードし、キャッシュデータにミスすればＨＤＤ１８Ｂからデータをリードする。制御部１８Ａは、ライト要求がキャッシュデータにヒットしていればキャッシュデータの当該データを無効化し、キャッシュのヒット・ミスに関わらずＨＤＤ１８Ｂにデータをライトする。ホストからドライバ動作開始通知を受け取ると、キャッシュの管理を放棄する。
【００３０】
ドライバの動作開始後は、Ｈ−ＨＤＤドライバ３２０がＳＳＤ１８Ｃ内のキャッシュデータの制御および管理を行う。Ｈ−ＨＤＤドライバ３２０は、必要に応じてキャッシュへのデータの蓄積、入れ替え、管理データの更新を行う。
【００３１】
電源が投入されてからの制御部１８ＡおよびＨ−ＨＤＤドライバ３２０の動作を図４のフローチャートを参照して説明する。  
電源が投入されると、制御部１８ＡがＳＳＤ１８Ｃ内のキャッシュデータの管理を開始する（ステップ４０１）。Ｈ−ＨＤＤドライバ３２０が主メモリ１３にロードされ、Ｈ−ＨＤＤドライバ３２０が処理を実行できるようになると、Ｈ−ＨＤＤドライバ３２０は、制御部１８Ａに対してドライバ動作開始通知を発行する（ステップ４０２）。制御部１８Ａは、ドライバ動作開始通知を受信すると、キャッシュデータの管理を停止する（ステップ４０３）。制御部１８Ａは、Ｈ−ＨＤＤドライバ３２０に対して管理動作停止通知を発行する（ステップ４０４）。管理動作停止通知を受信すると、Ｈ−ＨＤＤドライバ３２０は、制御部１８Ａにキャッシュ管理情報２１１のリードアクセス要求を発行する（ステップ４０５）。制御部１８Ａは、要求に応じてキャッシュ管理情報２１１をＨ−ＨＤＤドライバ３２０に転送する（ステップ４０６）。Ｈ−ＨＤＤドライバ３２０は、転送されたキャッシュ管理情報２１１をキャッシュ管理情報２０１として主メモリ１３内に格納する（ステップ４０７）。キャッシュ管理情報２０１の格納後、Ｈ−ＨＤＤドライバ３２０は、ハードディスクドライブ１８Ｂのキャッシュデータの管理を開始する（ステップ４０８）。
【００３２】
次に、シャットダウン時のＨ−ＨＤＤドライバ３２０および制御部１８Ａによって行われる処理を図５のフローチャートを参照して説明する。
【００３３】
オペレーティングシステム１１０からシャットダウンが通知されると、Ｈ−ＨＤＤドライバ３２０は、制御部１８Ａにキャッシュ管理情報２０１のＳＳＤ１８Ｃへのライトアクセスを要求する（ステップ５０１）。制御部１８Ａは、キャッシュ管理情報２０１をキャッシュ管理情報２１１としてＳＳＤ１８Ｃに書き込む（ステップ５０２）。書き込み終了後、制御部１８Ａは、キャッシュ管理情報２１１の書き込み終了をＨ−ＨＤＤドライバ３２０に通知する（ステップ５０３）。Ｈ−ＨＤＤドライバ３２０は、オペレーティングシステム１１０にシャットダウンの準備が完了した旨を通知する（ステップ５０４）。
【００３４】
次に、Ｈ−ＨＤＤ１８の制御部１８Ａによってキャッシュデータの管理が行われている状態で、リードアクセスがあった場合の制御部１８Ａの動作について図６のフローチャートを参照して説明する。
【００３５】
ホストからリードアクセスがあると、制御部１８Ａは、キャッシュデータ内にアクセスされたデータが学習されているかを判定する（ステップ６０１）。学習されている（ヒット）と判定した場合（ステップ６０１のＹｅｓ）、制御部１８Ａは、ＳＳＤ１８Ｃから学習されているデータを読み出し（ステップ６０２）、読み出したデータをホストに転送する（ステップ６０４）。学習されていない（ミス）と判定した場合（ステップ６０１のＮｏ）、制御部１８Ａは、ＨＤＤ１８Ｂからリードアクセスされたデータを読み出し（ステップ６０３）、読み出したデータをホストに転送する（ステップ６０４）。
【００３６】
次に、Ｈ−ＨＤＤ１８の制御部１８Ａによってキャッシュデータの管理が行われている状態で、ライトアクセスがあった場合の制御部１８Ａの動作について図７のフローチャートを参照して説明する。
【００３７】
ホストからライトアクセスがあると、制御部１８Ａは、キャッシュデータ内にアクセスされたデータが学習されているかを判定する（ステップ７０１）。学習されている（ヒット）と判定した場合（ステップ７０１のＹｅｓ）、制御部１８Ａは、ＳＳＤ１８Ｃ内のキャッシュデータからアクセスされたデータを無効化し（ステップ７０２）、データをＨＤＤ１８Ｂに書き込む（ステップ７０３）。学習されていない（ミス）と判定した場合（ステップ７０１のＮｏ）、制御部１８Ａは、ＨＤＤ１８Ｂにデータを書き込む（ステップ７０３）。
【００３８】
Ｈ−ＨＤＤ１８でのキャッシュ制御を、電源投入後からＨ−ＨＤＤドライバ３２０動作開始まで（ＢＩＯＳ制御期間）に限定し、機能も限定(学習機能なし)することにより、Ｈ−ＨＤＤ１８側のキャッシュ制御の負担を軽減している。また、ＯＳ稼動開始後はＨ−ＨＤＤドライバ３２０がキャッシュの全制御を行うので、処理能力の高いホストのＣＰＵ１１と、メインメモリ１３内に中間的なバッファメモリを確保することにより、性能向上とコストアップの抑制を図ることが可能になる。
【００３９】
（第３の実施形態：電源断を伴わないリブート対応）
電源断を伴わないリブートの場合、Ｈ−ＨＤＤ１８の制御部１８Ａは、ホストがリブートしたことを認識することができないので、リブートが行われてもＨ−ＨＤＤ１８の制御部１８Ａはキャッシュデータの管理を行うことができない。本実施形態では、Ｈ−ＨＤＤ１８の制御部１８Ａが正常な電源断を伴わないリブートを認識し、リブート後に制御部１８Ａがキャッシュデータを管理することが可能にする手法について説明する。
【００４０】
図８は、第３の実施形態の情報処理装置の主要部の構成を示すブロック図である。  
Ｈ−ＨＤＤドライバ１２０は、Ｈ−ＨＤＤ１８の不揮発性メモリ、例えばＳＳＤ１８Ｃ内に２値でキャッシュの管理主体を表す管理主体フラグ８１３を書き込む領域を確保する。管理主体フラグ８１３には、管理主体が制御部１８Ａであることを示す“ＨＨＤＤ”に対応する値、管理主体が制Ｈ−ＨＤＤドライバ１２０であることを示す“ＤＲＶＲ”に対応する値の値が書き込まれる。Ｈ−ＨＤＤドライバ１２０および制御部１８は、管理主体フラグ８１３の値の参照および変更を行うことが可能である。なお、管理主体フラグ８１３の初期値は、“ＤＲＶＲ“である。
【００４１】
Ｈ−ＨＤＤ１８の制御部１８Ａは、電源投入時およびリセット時に管理主体フラグ８１３の値を参照する。値が“ＨＨＤＤ”の場合、制御部１８Ａは、ドライバ動作開始通知を受信するまで第１の実施形態で説明したキャッシュデータの管理を行う。値が“ＤＲＶＲ”のときはキャッシュの管理を行わない。なお、リセットの通知は少なくともリブート時にはホストからＨ−ＨＤＤ１８に発行されるものとする(ホスト稼働中にも発生することがある)。
【００４２】
また、フラグの値が“ＤＲＶＲ”の場合に制御部１８Ａがキャッシュの管理を行わないのは、正常稼働中のリセット以外の、強制リブートやオペレーティングシステム１１０のクラッシュ後のリブートといったオペレーティングシステム１１０の正常なシャットダウンを経ないリブート時には、ＳＳＤ１８Ｃ内のキャッシュデータ領域２１２内のキャッシュデータとキャッシュディレクトリなどを有するキャッシュ管理情報２１１との間に不整合が発生している可能性があるためである。
【００４３】
なお、Ｈ−ＨＤＤ１８の制御部１８Ａがドライバ動作開始通知を受領すると、管理主体フラグ８１３の値を“ＤＲＶＲ”に書き替えた後に、キャッシュの管理を放棄する。また、Ｈ−ＨＤＤドライバ１２０は動作開始時に管理主体フラグ８１３の値を参照し、値が“ＨＨＤＤ”のときはキャッシュデータ領域２１２内のデータを有効としてＳＳＤ１８Ｃ内のキャッシュ管理情報２１１を主メモリ１３のキャッシュ管理情報２０１の領域に読み出し、値が“ＤＲＶＲ”の場合は主メモリ１３のキャッシュ管理情報２０１を初期化し、キャッシュ管理データ領域２１２には何も記録されていない状態にする。ここで、Ｈ−ＨＤＤドライバ１２０が管理主体フラグ８１３の値が“ＤＲＶＲ”の場合にキャッシュデータ領域２１２内のデータを無効化するのは、強制リブートやオペレーティングシステム１１０のクラッシュ後のリブートといったオペレーティングシステム１１０の正常なシャットダウンを経ないリブートが発生したことを表し、キャッシュデータ領域２１２内のデータとキャッシュディレクトリなどのキャッシュ管理情報２１１との間に不整合が発生しているためである。
【００４４】
また、Ｈ−ＨＤＤドライバ１２０は、正常なシャットダウン処理時に、管理主体フラグ８１３の値を“ＨＨＤＤ”に変更する。
【００４５】
図９および図１０のフローチャートを参照して起動時のＨ−ＨＤＤドライバ１２０および制御部１８の処理の手順を説明する。  
起動後、制御部１８Ａは、管理主体フラグ８１３の値を参照する（ステップ９０１Ａ）。制御部１８Ａは、管理主体フラグ８１３の値が“ＨＨＤＤ”であるかを判定する（ステップ９０２Ａ）。“ＨＨＤＤ”であると判定した場合（ステップ９０２ＡのＹｅｓ）、制御部１８ＡがＳＳＤ１８Ｃ内のキャッシュデータの管理を開始する（ステップ９０３）。
【００４６】
Ｈ−ＨＤＤドライバ１２０が主メモリ１３にロードされ、Ｈ−ＨＤＤドライバ１２０が処理を実行できるようになると、Ｈ−ＨＤＤドライバ１２０は、管理主体フラグ８１３の値を参照する（ステップ９０１Ｂ）。“ＨＨＤＤ”であると判定した場合（ステップ９０２ＢのＹｅｓ）、Ｈ−ＨＤＤドライバ１２０は、制御部１８Ａに対してドライバ動作開始通知を発行する（ステップ９０４）。
【００４７】
制御部１８Ａは、ドライバ動作開始通知を受信すると、キャッシュデータの管理を停止する（ステップ９０５）。制御部１８Ａは、管理主体フラグ８１３の値を“ＤＲＶＲ”に書き替える（ステップ９０６）。制御部１８Ａは、Ｈ−ＨＤＤドライバ１２０に対して管理動作停止通知を発行する（ステップ９０７）。管理動作停止通知を受信すると、Ｈ−ＨＤＤドライバ１２０は、制御部１８Ａにキャッシュ管理情報２１１のリードアクセス要求を発行する（ステップ９０８）。制御部１８Ａは、要求に応じてキャッシュ管理情報２１１を主メモリ１３のキャッシュ管理情報２０１領域に転送する（ステップ９０９）。キャッシュ管理情報２０１読み出し後、Ｈ−ＨＤＤドライバ１２０は、ハードディスクドライブ１８Ｂのキャッシュデータの管理を開始する（ステップ９１１）。
【００４８】
ステップ９０２Ａおよび９０２Ｂにおいて“ＨＨＤＤ”ではないと判定した場合（ステップ９０２Ａ，９０２ＢのＮｏ）、Ｈ−ＨＤＤドライバ１２０は、主メモリ１３内のキャッシュ管理情報２０１を初期化する（ステップ９２４）。
【００４９】
次に、正常なシャットダウン時のＨ−ＨＤＤドライバ１２０および制御部１８の処理の手順を図１１を参照して説明する。  
オペレーティングシステム１１０からシャットダウンが通知されると、Ｈ−ＨＤＤドライバ１２０は、キャッシュ制御処理を停止する（ステップ１１０１）。Ｈ−ＨＤＤドライバ１２０は、制御部１８Ａにキャッシュ管理情報２０１のＳＳＤ１８Ｃへのライトアクセスを要求する（ステップ１１０２）。制御部１８Ａは、キャッシュ管理情報２０１をキャッシュ管理情報２１１としてＳＳＤ１８Ｃに書き込む（ステップ１１０３）。書き込み終了後、制御部１８Ａは、キャッシュ管理情報２１１の書き込み終了をＨ−ＨＤＤドライバ１２０に通知する（ステップ１１０４）。
【００５０】
Ｈ−ＨＤＤドライバ１２０は、管理主体フラグ８１２の値を“ＨＨＤＤ”に書き替えるように制御部１８Ａに命令する（ステップ１１０５）。制御部１８Ａは、管理主体フラグ８１２の値を“ＨＨＤＤ”に書き替える（ステップ１１０６）。書き換え後、制御部１８Ａは、書き換えが完了した旨を通知する（ステップ１１０７）。通知の受領後、Ｈ−ＨＤＤドライバ１２０は、オペレーティングシステム１１０にシャットダウンの準備が完了した旨を通知する（ステップ１１０９）。
【００５１】
本実施形態では、不正に装置が終了した場合、キャッシュ管理情報２１１を破棄し、初期化したキャッシュ管理情報２０１に基づいてキャッシュの管理を行うことで、正常な電源断を伴わないリブートに対応することが可能になる。
【００５２】
（第４の実施形態：起動高速化）
本実施形態では、起動を高速化する手法について説明する。  
図１２のブロック図を参照して第４の実施形態のＨ−ＨＤＤ１８およびＨ−ＨＤＤドライバの機能を説明する。図１２は、第４の実施形態の情報処理装置の主要部を示すブロック図である。  
本実施形態のＨ−ＨＤＤドライバ１２２０によって生成されたキャッシュ管理情報１２０１（１２１１）は、図１３に示すように、管理データ１３０１およびキャッシュディレクトリ１３０２を有する。管理データ１３０１内には、後述するトレース領域１３０１Ａが確保されている。
【００５３】
本実施形態のＨ−ＨＤＤドライバ１２２０は、キャッシュ方式の実施例として１６−ｗａｙセットアソシアティブ方式を用いる。キャッシュ管理情報１２０１（１２１１）内のキャッシュディレクトリ１３０２は、例えば図１４に示すように、５１２Ｋインデックス×１６ウェイのテーブルである。キャッシュディレクトリ１３０２によって管理されるタグデータは、図１５に示すように、タグ（Ｔａｇ）１５０１とその他の管理データ１５０２から構成される。なお、ＨＤＤ１８ＢのＬＢＡをIｎｄｅｘ数で割った場合の商がＴａｇであり、余りがＩｎｄｅｘである。
【００５４】
Ｈ−ＨＤＤドライバ１２２０は、キャッシュディレクトリによって管理される各タグデータ１５００の管理データ１５０２内に起動フラグ１５０１Ａを設ける。起動フラグの値は、“０”または“１”である。起動フラグ１５０１Ａの値が“１”の場合に起動時に使用されたキャッシュデータに対応するタグデータ１５００であることを示し、起動フラグ１５０１Ａの値が“０”の場合に起動時に使用されていないタグデータ１５００であることを示す。
【００５５】
また、Ｈ−ＨＤＤドライバ１２２０は、キャッシュ管理情報１２０１（１２１１）内の管理データ１３０１内にトレース領域１３０１Ａを確保する。Ｈ−ＨＤＤ１８の制御部１８ＡおよびＨ−ＨＤＤドライバ１２２０は、トレース領域１３０１Ａの参照および変更を行うことが可能である。さらにオペレーティングシステム１１０の起動が完了したときに動作する図示されていないプログラムから、Ｈ−ＨＤＤドライバ１２２０に対して起動完了通知を発行する。
【００５６】
Ｈ−ＨＤＤ１８の制御部１８Ａがキャッシュデータを管理している状態において、制御部１８Ａは、リードアクセス要求に対してキャッシュデータがヒットしたときは、キャッシュディレクトリ内のヒットしたキャッシュデータに対応するタグデータの起動フラグ１５０１Ａの値を“１”に書き替える。リードアクセス要求に対してキャッシュデータがミスしたときは、制御部１８Ａは、キャッシュ管理情報１２１１内のトレース領域１３０１Ａにリードアクセス要求のパラメータ（ＬＢＡ，セクタ数）を蓄積する。
【００５７】
Ｈ−ＨＤＤドライバ１２２０は、動作開始後、キャッシュ管理情報１２１１内のトレース領域１３０１Ａを参照し、ドライバ１２２０の動作開始前にＢＩＯＳによってリードされたデータをキャッシュデータとしてＳＳＤ１８Ｃに蓄積し、当該キャッシュディレクトリ内のキャッシュされたデータに対応するタグデータの起動フラグの値を“１”にする。
【００５８】
Ｈ−ＨＤＤドライバ１２２０は、キャッシュディレクトリ内の起動フラグが“１”のタグデータに対応するキャッシュをキャッシュデータ領域２１２から追い出さないように制御する。
【００５９】
Ｈ−ＨＤＤドライバ１２２０は、シャットダウン時に主メモリ１３内のキャッシュディレクトリを含むキャッシュ管理情報１２０１をＳＳＤ１８Ｃにキャッシュ管理情報１２１１として保存する際、キャッシュディレクトリの全起動フラグの値を“０”にする。
【００６０】
次に、Ｈ−ＨＤＤ１８の制御部１８Ａによってキャッシュデータの管理が行われている状態で、リードアクセスがあった場合の制御部１２１８Ａの動作について図１６のフローチャートを参照して説明する。
【００６１】
ホストからリードアクセスがあると、制御部１２１８Ａは、キャッシュデータ内にアクセスされたデータが学習されているかを判定する（ステップ１６０１）。学習されている（ヒット）と判定した場合（ステップ１６０１のＹｅｓ）、制御部１２１８Ａは、キャッシュディレクトリ内のヒットしたキャッシュデータに対応するタグデータの起動フラグ１５０１Ａの値を“１”に書き替える（ステップ１６０２）。制御部１２１８Ａは、ＳＳＤ１８Ｃから学習されているキャッシュデータを読み出し（ステップ１６０３）、読み出したキャッシュデータをホストに転送する（ステップ１６０４）。
【００６２】
学習されていない（ミス）と判定した場合（ステップ１６０１のＮｏ）、制御部１２１８Ａは、キャッシュ管理情報１２１１内のトレース領域１３０１Ａにリードアクセス要求のパラメータ（ＬＢＡ，セクタ数）を書き込む（ステップ１６０５）。制御部１２１８Ａは、リードアクセスされたデータをハードディスクドライブ１８Ｂから読み出し（ステップ１６０６）、読み出したデータをホストに転送する（ステップ１６０４）。
【００６３】
本実施形態は、システム本体の起動高速化に寄与する。起動は毎回同じデータをリードすることが多いが、起動ごとにリードするデータ(場所)が変わることもある。本実施形態では、起動に使用するデータを起動のたびに毎回学習することにより、起動時にリードするデータが変わっても対応できる効果がある。
【００６４】
また、Ｈ−ＨＤＤ１８の制御部１２１８Ａは、リード要求がキャッシュにミスしたときはトレース領域１３０１Ａにリードアクセス要求のコマンドを記録するだけの簡単な処理にとどめることにより、制御部１２１８Ａの負担を軽減している。
【００６５】
（第５の実施形態：起動時の学習データ制限）
上記実施形態では、起動時に学習されたデータが削除されないため、起動時の学習されたデータが多いと、キャッシュデータ領域２１２のうち稼働中に使用可能な領域が少なくなり、十分なキャッシュの効果を発揮できなくなってしまう。本実施形態では、起動に学習するデータの量を制限する手法について説明する。
【００６６】
図１７は、第５の実施形態のＨ−ＨＤＤ１８およびＨ−ＨＤＤドライバの機能を説明するためのブロック図である。図１７は、第５の実施形態の情報処理装置の主要部を示すブロック図である。  
本実施形態のＨ−ＨＤＤドライバ１７２０によって生成されたキャッシュ管理情報１７０１（１７１１）は、図１８に示すように、管理データ１８０１およびキャッシュディレクトリ１３０２を有する。キャッシュ管理情報１７０１（１７１１）内には、第４の実施形態と同様にトレース領域１８０１Ａが確保されている。キャッシュディレクトリ１３０２によって管理される各タグデータ１９００の管理データ１９０２内に起動フラグ１９０２ＡとＬＲＵカウンタ１９０２Ｂを設ける。ＬＲＵカウンタ１９０２Ｂは、同一Ｉｎｄｅｘ内でアクセスされた順番を記録するフィールドで、例えば１６ウェイのとき、ＬＲＵカウンタ１９０２Ｂが０のデータは最も最近アクセスされたことを表し、ＬＲＵカウンタ１９０２Ｂが１５のときは最も昔にアクセスされたことを表す。制御部１７１８Ａがキャッシュデータを管理している状態において、制御部１７１８Ａは、リードアクセス要求に対してキャッシュデータがヒットしたときは、キャッシュディレクトリ１７０１内の起動フラグ１９０２Ａの値を“１”に書き換え、同一ＩｎｄｅｘのＬＲＵカウンタ１９０２Ｂを更新する。リードアクセス要求に対してキャッシュデータがミスしたときは、制御部１７１８Ａは、トレース領域１８０１Ａにリードアクセス要求のパラメータ（ＬＢＡ，セクタ数）１８０１Ｂをリードされた順番に記録する。
【００６７】
Ｈ−ＨＤＤドライバ１７２０は、起動フラグの値が“１”のタグデータの量をあらかじめ定められた量、例えば１６Ｗａｙの場合には１６Ｗａｙの１／４の４Ｗａｙ分に制限する。Ｈ−ＨＤＤドライバ１７２０は、ＬＲＵカウンタ１９０２Ｂに基づいて、アクセス日時が古いデータがキャッシュデータ領域２１２内に残るように制御する。
【００６８】
次に、Ｈ−ＨＤＤドライバ１２２０によるキャッシュの管理手法について図２０のフローチャートを参照して説明する。  
Ｈ−ＨＤＤドライバ１７２０は、キャッシュディレクトリ内のＩｎｄｅｘごとに起動フラグ１９０２Ａの値が“１”のタグデータ数を算出する（ステップ２００１）。Ｈ−ＨＤＤドライバ１７２０は、Ｉｎｄｅｘごとに起動フラグ１９０２Ａの値が“１”のタグデータ数が設定数より多いかを判定する（ステップ２００２）。設定数より多いと判定した場合（ステップ２００２のＹｅｓ）、Ｈ−ＨＤＤドライバ１７２０は、ＬＲＵカウンタ１９０２Ｂを参照して同一Ｉｎｄｅｘのキャッシュディレクトリの起動フラグ１９０２Ａの値が“１”のタグデータのうちアクセス日時が最も新しいタグデータの起動フラグ１９０２Ａの値を“０”にする（ステップ２００９）。Ｈ−ＨＤＤドライバ１７２０は、ステップ２００１からの処理を実行する。
【００６９】
設定数より大きくないと判定した場合（ステップ２００２のＮｏ）、トレース領域１８０１Ａのトレースを先頭から逐次処理する。Ｈ−ＨＤＤドライバ１７２０は、トレース領域１８０１Ａ内にパラメータ１８０１Ｂがあるかを判定する（ステップ２００３）。パラメータ１８０１Ｂがあると判定した場合（ステップ２００３のＹｅｓ）、Ｈ−ＨＤＤドライバ１７２０は、トレース領域内のパラメータからＩｎｄｅｘを算出し、キャッシュディレクトリ内の該当するＩｎｄｅｘの起動フラグの値が“１”のタグデータ数を算出する（ステップ２００４）。Ｈ−ＨＤＤドライバ１７２０は、タグデータ数が設定数と等しいかを判定する（ステップ２００５）。設定数と等しくないと判定した場合（ステップ２００５のＹｅｓ）、Ｈ−ＨＤＤドライバ１７２０は、トレース領域１８０１Ａ内のパラメータ１８０１Ｂを破棄する（ステップ２０１０）。
【００７０】
設定数と等しいと判定した場合（ステップ２００５のＹｅｓ）、Ｈ−ＨＤＤドライバ１７２０は、処理中のパラメータに対応するデータをＨＤＤから読み出す（ステップ２００６）。Ｈ−ＨＤＤドライバ１７２０は、同一Ｉｎｄｅｘ内のＬＲＵカウンタを参照し、起動フラグの値が“０”のうちもっとも古いキャッシュデータをＨＤＤから読み出したデータに置き換える（ステップ２００７）。、Ｈ−ＨＤＤドライバ１７２０は、置き換えたデータに対応するタグデータを起動フラグの値を“１”にしてキャッシュディレクトリに追加する（ステップ２００８）。ステップ２００８の実行後、Ｈ−ＨＤＤドライバ１７２０は、ステップ２００３以降の処理を実行する。パラメータ１８０１Ｂがないと判定した場合（ステップ２００３のＮｏ）、Ｈ−ＨＤＤドライバ１７２０は、処理を終了する。
【００７１】
Ｈ−ＨＤＤドライバ１７２０は、トレースデータの処理完了後、ドライバへの起動完了通知を受領するまで、オペレーティングシステムからのリード要求がキャッシュにヒットし、同一Ｉｎｄｅｘの起動フラグの値が“１”であるタグデータの数が設定数と同じ場合は起動フラグの値を変更せず、同一Ｉｎｄｅｘの起動フラグの値が“１”であるタグデータの数が設定数と異なる（小さい）場合は起動フラグの値を”1”に変更する。Ｈ−ＨＤＤドライバ１７２０は、オペレーティングシステムからのリード要求がキャッシュにミスしＨＤＤからリードしたデータをキャッシュに登録する際、同一Ｉｎｄｅｘの起動フラグの値が“１”であるタグデータの数が設定数と同じ場合は起動フラグの値を“０”にし、同一Ｉｎｄｅｘの起動フラグの値が“１”であるタグデータの数が設定数と異なる（小さい）場合は起動フラグの値を”1”にする。
【００７２】
本実施形態では、ドライバへの起動完了通知が何らかの原因により発行されなかった場合や、想定以上にリードの量が多かったときに、通常稼動時にもキャッシュデータを一定量以上確保できることを保証する。
【００７３】
（第６の実施形態：ブート時のライトデータをキャッシュデータから削除）
本実施形態では、次回起動時にリードされる可能性の低いデータを極力残さないようにする手法について説明する。  
本実施形態のＨ−ＨＤＤドライバおよび制御部の構成は、第４の実施形態と同様なので図示を省略する。  
Ｈ−ＨＤＤドライバ１２２０は、起動フラグの値が“１”であるタグデータに対応するキャッシュデータにライトアクセス要求があったときは、起動フラグの値を“０”にする。  起動時にリードアクセスされ、その後ライトアクセスが発生したキャッシュデータは次の起動時にリードされない可能性が高い。起動フラグの値が“０”のタグデータに対応するキャッシュデータは削除されても、ブート時間が長くなることがない。
【００７４】
なお、起動時に、Ｈ−ＨＤＤ１８の制御部１２１８Ａは、ライトアクセス要求がトレース領域内のパラメータに対応するデータに対応したときは、当該パラメータを削除しても良い。
【００７５】
本実施形態によれば、リードアクセスされたキャッシュデータを削除することでキャッシュデータを整理しつつ、ブート時間が長くなることを抑制する。
【００７６】
（第７の実施形態：他のＨＤＤをキャッシュ対象にする）
図２１は、第７の実施形態の情報処理装置の主要部を示すブロック図である。  
本実施形態のＨ−ＨＤＤドライバは、ＳＳＤ１８Ｃの少なくとも一部の領域をＨＤＤ１８ＢおよびＨＤＤ２１３０のキャッシュとして用いる。  
Ｈ−ＨＤＤドライバ２１２０によって管理されるキャッシュ管理情報２０１１（２１１１）内のタグデータを図２２を参照して説明する。タグデータ２２００内の管理データ２２０２内には学習対象のＨＤＤを識別するためのＨＤＤ＿ＩＤ２２０２Ａが記録されている。ＨＤＤ＿ＩＤ２２０２Ａのビット数は、キャッシュ管理情報２１０１を作成時に設定される。
【００７７】
本実施形態では、Ｈ−ＨＤＤ１８のＨＤＤ１８Ｂ部だけでなく、Ｈ−ＨＤＤ１８が接続されている情報処理装置に接続されているその他のＨＤＤ２１３０の性能も向上する。たとえば、本願のＨ−ＨＤＤを使用したＵＳＢ−ＨＤＤを情報処理装置に接続すると、情報処理装置に内蔵されているＨＤＤも高速になる。
【００７８】
（第８の実施形態：ＨＤＤとＳＳＤとを独立に見せる）  
本実施形態は、磁気ディスクのように比較的大容量、安価、低速、高消費電力の第１の記憶装置（ＨＤＤ）と、半導体不揮発性メモリのように、比較的小容量、高価、高速、低消費電力の第２の記憶装置（ＳＳＤ）を、外部記憶装置が接続される計算機システム（ＰＣ）上で動作する外部記憶装置制御手段（ＨＤＤドライバ）がＳＳＤをＨＤＤのキャッシュとして使用することにより、比較的大容量、安価、高速、低消費電力のストレージシステムを提供する。
【００７９】
第７の実施形態まではホストに対して、ＨＤＤとＳＳＤから構成されるＨ−ＨＤＤを単一の記憶装置として見せていた。本実施形態ではホストに対してＨＤＤとＳＳＤとをそれぞれ独立の記憶装置として見せる。本実施形態では、同じデバイスに対しては同時に１つのコマンドしか発行できないようなＯＳであっても、ＨＤＤとＳＳＤの両方にコマンドを同時に発行できる。
【００８０】
図２３は、第８の実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータとして実現されている。
【００８１】
図２３に示すように、本情報処理装置は、ＣＰＵ１１、ＭＣＨ１２、メインメモリ１３、ＩＣＨ１４、ＧＰＵ１５、ＶＲＡＭ１５Ａ、サウンドコントローラ１６、ＢＩＯＳ−ＲＯＭ１７、ＨＤＤ２３１８、ＯＤＤ２０、各種周辺機器２１、ＥＥＰＲＯＭ２２、ＥＣ／ＫＢＣ２３等を備えている。
【００８２】
ＣＰＵ１１は、本情報処理装置の動作を制御するプロセッサであり、メインメモリ１３にロードされたキャッシュドライバ２３２０を実行する。キャッシュドライバ２３２０は、ＨＤＤ２３１８と外部記憶装置で有るＵＳＢ−ＨＤＤ２３４０を制御するプログラムである。また、ＩＣＨ１４は、ＵＳＢ−ＨＤＤ２３４０等のＵＳＢデバイスを制御するためのＵＳＢコントローラを内蔵する。
【００８３】
次に、ＵＳＢ−ＨＤＤ２０４０およびＵＳＢ−ＨＤＤ２０４０を制御する情報処理装置の構成について図２４を参照して説明する。図２４は、第８の実施形態の情報処理装置の主要部を示すブロック図である。  
図２４に示すように、ＵＳＢ−ＨＤＤ２０４０は、コントローラ２３４１、ＨＤＤ２３４２、およびＳＳＤ２３４３等を備えている。
【００８４】
ＨＤＤ２３４２およびＳＳＤ２３４３はＡＴＡ規格に対応するストレージである。コントローラ２３４１は、ＵＳＢ規格のコマンドとＡＴＡ規格のコマンドとを変換するブリッジデバイスである。ＵＳＢ／ＡＴＡブリッジコントローラ２３４１は、ＵＳＢコントローラ１４Ｂから発行されたＵＳＢ規格のコマンドをＡＴＡ規格のコマンドに変換し、変換されたコマンドをＨＤＤ２３４２またはＳＳＤ２３４３に発行する。コントローラ２３４１は、ＨＤＤ２３４２またはＳＳＤ２３４３にから発行されたＡＴＡ規格のコマンドをＵＳＢ規格のコマンドに変換し、変換されたコマンドをＵＳＢコントローラ１４Ｂに発行する。
【００８５】
ＳＳＤ２３４３の少なくとも一部の領域は、ＨＤＤ２３４０のキャッシュデバイスとして用いられる。キャッシュドライバ２３２０は、キャッシュ管理情報２４０１を格納するための領域を主メモリ１３内に確保した後、キャッシュ制御処理を開始する。キャッシュ管理情報２４０１は、キャッシュディレクトリなどのキャッシュデータを管理するためのデータを有する。キャッシュドライバ２３２０は、主メモリ１３内のキャッシュ管理情報２４０１にライトキャッシュおよびリードキャッシュの学習データを管理するためのデータを記録する。シャットダウン時、キャッシュドライバ２３２０は、主メモリ１３内のキャッシュ管理情報２４０１をＳＳＤ２３４３内にキャッシュ管理情報２４１１として記録する。起動時に、キャッシュドライバによってキャッシュ管理情報２４１１はキャッシュ管理情報２４０１として主メモリ１３にロードされる。
【００８６】
なお、このＵＳＢ−ＨＤＤ２３４０はドライバ２３２０がインストールされたコンピュータ２３００だけでなく、データ交換のためにドライバがインストールされていないコンピュータに接続されることがある。ＳＳＤ２３４３の全領域をＨＤＤ２３４２のキャッシュとして使用する場合、キャッシュドライバがインストールされていないコンピュータではＳＳＤ２３４３をドライバがインストールされていないコンピュータのＯＳに対して見せる必要がない。ＳＳＤ２３４３をドライバがインストールされていないコンピュータのＯＳに見せると、ＳＳＤ２３４３を動作させるための機構が動作することによる内部資源の消費や、使用できなデバイスが見えることによるユーザへの不要な困惑を煽ることになる。本実施形態では、必要なときだけＳＳＤをＯＳに見せる。
【００８７】
キャッシュドライバ２３２０は、主メモリ１３内にロードされて動作可能になると、「キャッシュドライバ動作開始通知」をＵＳＢ−ＨＤＤ２３４０に発行する。コントローラ２３４１は、電源投入後はＨＤＤ２３４２のみをＯＳ１１０に見せる。キャッシュドライバ２３２０から発行された「キャッシュドライバ動作開始通知」を受領すると、コントローラ２３４１はＳＳＤ２３４３をＯＳ１１０に見せる。
【００８８】
電源が投入されてからのコントローラ２３４１およびキャッシュドライバ２３２０の動作を図２５のフローチャートを参照して説明する。  
電源が投入されると、コントローラ２３４１は、ＨＤＤ２３４２をコンピュータ（ＰＣ）２３００に対して見せる（ステップ２５０１）。キャッシュドライバ２３２０が主メモリ１３にロードされ、キャッシュドライバ２３２０が処理を実行できるようになると、キャッシュドライバ２３２０は、コントローラ２３４１に対してドライバ動作開始通知を発行する（ステップ２５０２）。コントローラ２３４１は、ドライバ動作開始通知を受信すると、ＳＳＤ２３４３をコンピュータ２３００に見せる（ステップ２５０３）。キャッシュドライバ２３２０は、コントローラ２３４１にキャッシュ管理情報２４１１のリードアクセス要求を発行する（ステップ４０５）。コントローラ２３４１は、要求に応じてキャッシュ管理情報２４１１をキャッシュドライバ２３２０に転送する（ステップ４０６）。キャッシュドライバ２３２０は、転送されたキャッシュ管理情報２４１１をキャッシュ管理情報２４０１として主メモリ１３内に格納する（ステップ４０７）。キャッシュ管理情報２４０１の格納後、キャッシュドライバ２３２０は、ハードディスクドライブ２３４２のキャッシュデータの管理を開始する（ステップ４０８）。
【００８９】
本実施形態によれば、ＨＤＤ２３４２とＳＳＤ２３４３とをそれぞれコンピュータ２３００に見せることで、同じデバイスに対しては同時に１つのコマンドしか発行できないようなＯＳであっても、ＨＤＤとＳＳＤの両方にコマンドを同時に発行できる。
【００９０】
（第９の実施形態：ライトトレース）
ＵＳＢ−ＨＤＤ２０４０およびＵＳＢ−ＨＤＤ２０４０を制御する情報処理装置の構成について図２６を参照して説明する。図２６は、第９の実施形態の情報処理装置の主要部を示すブロック図である。  
キャッシュドライバ２３２０は、コンピュータが起動するときに主メモリ１３にロードされ動作を開始する。ＯＳ１１０からシャットダウンの通知を受け取ると、キャッシュドライバ２３２０はキャッシュディレクトリなどのキャッシュ管理情報２４０１をＳＳＤ２３４３の管理データ領域内にキャッシュ管理情報２４１１として格納する。
【００９１】
コンピュータが再起動されると、キャッシュドライバ２３２０は再び主メモリ１３にロードされ動作を開始する。ＢＩＯＳのようなキャッシュドライバが動作する前にＨＤＤを制御するモジュールにキャッシュを管理する機能がない場合、このモジュールを介してライトされたデータがキャッシュにヒットしていた場合、キャッシュドライバはＨＤＤのデータが書き換えられたことを知らないので、ＨＤＤとキャッシュにデータの不整合が発生してしまう。
【００９２】
また、ＵＳＢ−ＨＤＤ２３４０が別のコンピュータで使用された場合、ＨＤＤ２３４２のデータが書き換えられたことを知らないので、ＨＤＤ２３４２とＳＳＤ２３４３内のキャッシュデータとの間にデータの不整合が発生している可能性があるため、すべてのキャッシュデータを無効化する必要がある。
【００９３】
本実施形態では、このようなケースでもデータ不整合を発生させずに、再起動前に学習したデータを使用できるようにするものである。
【００９４】
ＵＳＢ−ＨＤＤ２３４０のコントローラ２６４１は、ホストから発行されたライトコマンドをトレースする機能と、トレース有効フラグとを管理する機能を有する。
【００９５】
コントローラ２６４１は、例えばトレースデータとトレース有効フラグとをＨＤＤ２３４２内に設けられたトレース管理情報２６１３内に記録する。トレース管理情報２６１３は、図２７に示すように、トレース有効フラグ２７０１とトレース領域２７０２とを有する。トレース管理情報２６１３は、コントローラ２６４１とキャッシュドライバ２３２０との双方から参照と変更が可能である。トレース結果とトレース有効フラグは、不揮発性の記憶装置に記録されるのであれば、ＳＳＤ２３４３内に記録しなくても良い。
【００９６】
トレース有効フラグ２７０１の初期値は“ＯＦＦ”である。コントローラ２６４１は、トレース有効フラグの値が“ＯＮ”の場合、ライトコマンドの対象アドレスをトレース領域２７０２に記録する。トレース領域が満杯になった場合、コントローラ２６４１は、トレース有効フラグの値を“ＯＦＦ”にする。
【００９７】
キャッシュドライバ２３２０は、動作開始時にトレース有効フラグ２７０１の値を参照する。値が“ＯＦＦ”の場合、キャッシュドライバ２３２０は、キャッシュの整合性を保証できないと判断し、主メモリ１３内のキャッシュ管理情報２４０１を初期化してキャッシュデータ２４１２になにも記録されていない状態にする。値が“ＯＮ”の場合、キャッシュドライバ２３２０は、トレース領域２７０２内のトレースデータを参照し、キャッシュドライバ動作していない期間にライトされたアドレスがキャッシュにヒットしている場合は、そのキャッシュデータを無効化する。すべてのトレースデータに対して処理が完了したら、キャッシュドライバ２３２０は、トレース有効フラグの値を“ＯＦＦ”にする。キャッシュドライバ２３２０がＯＳ１１０からシャットダウン通知を受領し、シャットダウン処理が完了した場合、およびＵＳＢ−ＨＤＤ２３４０の安全な取り外しに伴う処理が完了した場合、キャッシュドライバ２３２０は、トレース有効フラグを”ＯＮ”にする。
【００９８】
コントローラによって実行される処理の手順を図２８のフローチャートを参照して説明する。  
コントローラ２６４１は、動作開始時にトレース有効フラグ２７０１の値を参照し、値が“ＯＮ”であるかを判定する（ステップ２８０１）。“ＯＮ”であると判定した場合（ステップ２８０１のＹｅｓ）、コントローラ２６４１は、アクセスがあったらライトアクセスであるかを判定する（ステップ２８０２）。ライトアクセスであると判定した場合（ステップ２８０２のＮｏ）、コントローラ２６４１は、トレース領域２７０２内にトレースデータを記録することが可能であるかを判定する（ステップ２８０３）。記録可能であると判定した場合（ステップ２８０３のＹｅｓ）、コントローラ２６４１は、トレース領域２７０２にトレースデータを記録する（ステップ２８０３）。記録可能ではないと判定した場合（ステップ２８０３のＮｏ）、コントローラ２６４１は、トレース有効フラグ２７０１の値を“ＯＦＦ”に書き替える（ステップ２８０５）。
【００９９】
次に、キャッシュドライバ２３２０によって実行される処理の手順を図２９のフローチャートを参照して説明する。  
キャッシュドライバ２３２０は、動作開始時にトレース有効フラグ２７０１の値を参照し、値が“ＯＮ”であるかを判定する（ステップ２９０１）。“ＯＮ”ではないと判定した場合（ステップ２９０１のＮｏ）、キャッシュドライバ２３２０は、主メモリ１３内のキャッシュ管理情報２４０１を初期化してキャッシュデータ２４１２になにも記録されていない状態にする（ステップ２９０８）。“ＯＮ”であると判定した場合（ステップ２９０１のＹｅｓ）、キャッシュドライバ２３２０は、ＳＳＤ２３４３内のキャッシュ管理情報２４１１を主メモリ１３のキャッシュ管理情報２４０１領域に読み出し、トレースデータを処理する。キャッシュドライバ２３２０は、トレース領域２７０２内に読み出されていないトレースデータがあるかを判定する（ステップ２９０２）。トレースデータがあると判定した場合（ステップ２９０２のＹｅｓ）、トレース領域２７０２内から一つのトレースデータを読み出す（ステップ２９０３）。キャッシュドライバ２３２０は、キャッシュ管理情報２４０１に基づいてトレースデータに記録されているアドレス対応するデータがキャッシュデータにヒットするかを判定する（ステップ２９０４）。ヒットしたと判定した場合（ステップ２９０４のＹｅｓ）、キャッシュドライバ２３２０は、トレースデータに対応するタグデータを破棄する（ステップ２９０５）。ヒットしないと判定した場合（ステップ２９０４のＮｏ）、またはステップ２９０５の後、キャッシュドライバ２３２０は、キャッシュドライバ２３２０は、ステップ２９０２からの処理を順次実行する。トレースデータがないと判定した場合（ステップ２９０２のＮｏ）、キャッシュドライバ２３２０は、トレース有効フラグ２７０１の値を“ＯＦＦ”に書き替える（ステップ２９０６）。ステップ２９０６の後、シャットダウン処理が完了した場合、またはＵＳＢ−ＨＤＤ２３４０の安全な取り外しに伴う処理が完了した場合、キャッシュドライバ２３２０は、トレース有効フラグ２７０１の値を“ＯＮ”に書き替える（ステップ２９０７）。
【０１００】
本実施形態は、ハイブリッドＨＤＤだけでなく、図３０に示すような独立のＨＤＤ２３４２とＳＳＤ２３４３とでキャッシュの動作をさせるときにも使用できる。この場合、ＨＤＤ２３４２内にホストから発行されたライトコマンドをトレースする機能と、不揮発性のトレース有効フラグとを管理する機能を有するコントローラ３００１を設ける。
【０１０１】
本実施形態の場合、ＨＤＤに対するライトコマンドをトレースすることにより、キャッシュドライバ２３２０が動作しない環境で、このＨＤＤが使用され、一部のデータが書き換えられた場合でも、キャッシュ全体を無効化せずに、書き換えられたデータのみを無効化し、他のデータは有効にすることが可能になる。
【０１０２】
（第１０の実施形態：ライトトレース＋識別子）
本実施形態では、ＨＤＤ制御部に機能を追加することにより、計算機システムの再起動後にも、再起動前に学習したデータを使用できるようにし、同じキャッシュドライバを有する他の計算機システムでＨＤＤが書き換えられてもデータの整合性を保証するものである。
【０１０３】
次に、ＵＳＢ−ＨＤＤ２０４０およびＵＳＢ−ＨＤＤ２０４０を制御する情報処理装置の構成について図３１を参照して説明する。図３１は、第１０の実施形態の情報処理装置の主要部を示すブロック図である。  
ＵＳＢ−ＨＤＤ２３４０のコントローラ３１４１は、ホストから発行されたライトコマンドをトレースする機能と、キャッシュドライバ識別子を管理する機能を有する。
【０１０４】
コントローラ３１４１は、例えばトレースデータとキャッシュドライバ識別子とをＨＤＤ２３４２内に設けられたトレース管理情報３１０１内に記録する。トレース管理情報３１１３は、図３２に示すように、キャッシュドライバ識別子格納領域３２０１とトレース領域２７０２とを有する。キャッシュドライバ識別子格納領域３２０１がクリアされている状態は、キャッシュドライバ識別子が格納されていないことを表す。キャッシュドライバ識別子格納領域３２０１の初期値はクリア状態である。トレース管理情報３１０１は、コントローラ３１４１とキャッシュドライバ３１２０との双方から参照と変更が可能である。トレース結果とトレース有効フラグは、不揮発性の記憶装置に記録されるのであれば、ハードディスクドライブ２３４２内に記録しなくても良い。
【０１０５】
コントローラ３１４１は、キャッシュドライバ識別子格納領域３２０１がクリア状態でない場合、ライトコマンドの対象アドレスをトレース領域２７０２に記録する。トレース領域２７０２が満杯になった場合、キャッシュドライバ識別子格納領域３２０１をクリアする。
【０１０６】
キャッシュドライバ３１２０は自身を識別するためのユニークな識別子３１２０Ａを生成する。同じキャッシュドライバであっても、異なるコンピュータで動作するキャッシュドライバは異なる識別子を有する。例えば、キャッシュドライバ３１２０は、キャッシュドライバ３１２０のインストール時間に基づいて識別子３１２０Ａを生成する。また、キャッシュドライバ３１２０は、オペレーティングシステムがインストールされているＨＤＤのＩＤに基づいて識別子３１２０Ａを生成する。また、キャッシュドライバ３１２０は、コンピュータのＩＤに基づいて識別子３１２０Ａを生成する。また、キャッシュドライバ３１２０のオペレーティングシステムのＩＤに基づいて識別子３１２０Ａを生成する。また、キャッシュドライバ３１２０のオペレーティングシステムがユーザの指紋を示す指紋データに基づいて識別子３１２０Ａを生成する。
【０１０７】
キャッシュドライバ３１２０は、動作開始するときにキャッシュドライバ識別子格納領域３２０１内のキャッシュドライバ識別子およびドライバ３１２０内のキャッシュドライバ識別子３１２０Ａを参照し、二つの識別子が一致するかを判定する。二つの識別子が一致しない場合に、キャッシュドライバ３１２０は、キャッシュの整合性を保証できないと判断し、キャッシュの全内容を破棄する。
【０１０８】
二つの識別子が一致する場合、キャッシュドライバ３１２０は、トレース領域２７０２内のトレースデータを参照し、キャッシュドライバ動作していない期間にライトされたアドレスがキャッシュにヒットしている場合は、そのキャッシュデータを無効化する。すべてのトレースデータに対する処理が完了したら、キャッシュドライバ識別子格納領域３２０１をクリアする。キャッシュドライバ３１２０がＯＳ１１０からシャットダウン通知を受領し、シャットダウン処理が完了したとき、および、このＨＤＤ２３４０の安全な取り外しに伴う処理が完了したとき、キャッシュドライバ識別子格納領域３２０１に自身の識別子３１２０Ａを書き込む。
【０１０９】
コントローラ３１４１によって実行される処理の手順を図３３のフローチャートを参照して説明する。  
コントローラ３１４１は、動作開始時に識別子がクリア状態であるかを判定する（ステップ３３０１）。クリア状態でないと判定した場合（ステップ３３０１のＮｏ）、コントローラ３１４１は、アクセスがあったらライトアクセスであるかを判定する（ステップ３３０２）。ライトアクセスであると判定した場合（ステップ３３０２のＮｏ）、コントローラ３１４１は、トレース領域２７０２内にトレースデータを記録することが可能であるかを判定する（ステップ３３０３）。記録可能であると判定した場合（ステップ３３０３のＹｅｓ）、コントローラ３１４１は、トレース領域２７０２にトレースデータを記録する（ステップ３３０３）。記録可能ではないと判定した場合（ステップ３３０３のＮｏ）、コントローラ３１４１は、キャッシュドライバ識別子格納領域３２０１の値をクリアする（ステップ３３０５）。
【０１１０】
次に、キャッシュドライバ３１２０によって実行される処理の手順を図３４のフローチャートを参照して説明する。  
キャッシュドライバ３１２０は、動作開始時に識別子３１２０Ａの値とキャッシュドライバ識別子格納領域３２０１に格納されている値とが一致するかを判定する（ステップ３４０１）。一致していないと判定した場合（ステップ３４０１のＮｏ）、キャッシュドライバ３１２０は、主メモリ１３内のキャッシュ管理情報２４０１を初期化し、キャッシュデータ２４１２に何も記録されていない状態にする（ステップ３４０８）。一致すると判定した場合（ステップ３４０１のＹｅｓ）、キャッシュドライバ３１２０は、ＳＳＤ２３４３内のキャッシュ管理情報を主メモリ１３内のキャッシュ管理情報２４０１領域に読み出し、トレースデータを処理する。キャッシュドライバ３１２０は、トレース領域２７０２内にトレースデータがあるかを判定する（ステップ３４０２）。トレースデータがあると判定した場合（ステップ３４０２のＹｅｓ）、トレース領域２７０２内から一つのトレースデータを読み出す（ステップ３４０３）。キャッシュドライバ３１２０は、キャッシュ管理情報２４０１に基づいてトレースデータに記録されているアドレス対応するデータがキャッシュデータにヒットするかを判定する（ステップ３４０４）。ヒットしたと判定した場合（ステップ３４０４のＹｅｓ）、キャッシュドライバ３１２０は、トレースデータに対応するタグデータを破棄する（ステップ３４０５）。ヒットしないと判定した場合（ステップ３４０４のＮｏ）、またはステップ３４０５の後、キャッシュドライバ３１２０は、ステップ３４０２からの処理を順次実行する。トレースデータがないと判定した場合（ステップ３４０２のＮｏ）、キャッシュドライバ３１２０は、キャッシュドライバ識別子格納領域３２０１内のデータをクリアする（ステップ３４０６）。ステップ３４０６の後、ステップ３４０８の後、シャットダウン処理が完了した場合、またはＵＳＢ−ＨＤＤ２３４０の安全な取り外しに伴う処理が完了した場合、キャッシュドライバ３１２０は、キャッシュドライバ識別子格納領域３２０１に識別子３１２０Ａの値を書き込む（ステップ３４０７）。
【０１１１】
第９の実施形態では、ＨＤＤがキャッシュドライバが動作しているコンピュータと、キャッシュドライバが動作していない別のコンピュータで交互に使用する場合には有効であるが、同じキャッシュドライバを有する複数のコンピュータが存在し、そのコンピュータ間でこのＨＤＤを交互に使用する場合に、データの整合性を保証できなかった。たとえば、コンピュータ−ＡにＨＤＤを接続し、ＨＤＤを安全な取り外すとフラグはＯＮになるが、このＨＤＤをコンピュータ−Ｂに接続するとキャッシュドライバが動作を開始するときにフラグをＯＦＦにするのでライトアクセスはトレースされない。コンピュータ−ＢからこのＨＤＤを安全に取り外し、コンピュータ−Ａに接続すると、コンピュータ−Ｂでデータをライトしたにも関わらずフラグがＯＮでトレースデータが存在しない状態となってしまう。
【０１１２】
本実施形態では、フラグの代わりにドライバによって生成されたユニークな識別子によって管理することで、キャッシュドライバを有する複数のコンピュータの間でＨＤＤを移動させても、キャッシュの整合性を保つことが可能になる。
【０１１３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１４】
１１…ＣＰＵ，１３…主メモリ，１８…Ｈ−ＨＤＤ，１８Ａ…制御部，１８Ｂ…ＨＤＤ，１８Ｃ…ＳＳＤ，１１０…オペレーティングシステム，Ｈ−ＨＤＤドライバ（キャッシュドライバ）１２０。
【図１】
0005175953.tif 000002
【図２】
0005175953.tif 000003
【図３】
0005175953.tif 000004
【図４】
0005175953.tif 000005
【図５】
0005175953.tif 000006
【図６】
0005175953.tif 000007
【図７】
0005175953.tif 000008
【図８】
0005175953.tif 000009
【図９】
0005175953.tif 000010
【図１０】
0005175953.tif 000011
【図１１】
0005175953.tif 000012
【図１２】
0005175953.tif 000013
【図１３】
0005175953.tif 000014
【図１４】
0005175953.tif 000015
【図１５】
0005175953.tif 000016
【図１６】
0005175953.tif 000017
【図１７】
0005175953.tif 000018
【図１８】
0005175953.tif 000019
【図１９】
0005175953.tif 000020
【図２０】
0005175953.tif 000021
【図２１】
0005175953.tif 000022
【図２２】
0005175953.tif 000023
【図２３】
0005175953.tif 000024
【図２４】
0005175953.tif 000025
【図２５】
0005175953.tif 000026
【図２６】
0005175953.tif 000027
【図２７】
0005175953.tif 000028
【図２８】
0005175953.tif 000029
【図２９】
0005175953.tif 000030
【図３０】
0005175953.tif 000031
【図３１】
0005175953.tif 000032
【図３２】
0005175953.tif 000033
【図３３】
0005175953.tif 000034
【図３４】
0005175953.tif 000035