(57)【要約】【課題】例えばデータの流出を防止すべく補助記憶装置のデータ管理を適切に実行する情報処理装置を提供する。【解決手段】実施形態によれば、情報処理装置は、第１の記憶装置と、第２の記憶装置と、キャッシング手段と、を具備する。キャッシング手段は、前記第２の記憶装置への書き込みデータを前記第１の記憶装置上に確保したキャッシュ領域に格納する。キャッシング手段は、書き込みデータ無効化手段を具備する。書き込みデータ無効化手段は、第１の事象が発生した場合、前記書き込みデータが格納されている前記キャッシュ領域のアドレスと前記書き込みデータが格納されるべき前記第２の記憶装置のアドレスとを対応づける管理情報を初期化して、データの書き込みが行われる前の状態に前記第２の記憶装置を復元する。【選択図】図１
2013250657.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶装置と、
第２の記憶装置と、
前記第２の記憶装置への書き込みデータを前記第１の記憶装置上に確保したキャッシュ領域に格納するキャッシング手段と、
を具備し、
前記キャッシング手段は、第１の事象が発生した場合、前記書き込みデータが格納されている前記キャッシュ領域のアドレスと前記書き込みデータが格納されるべき前記第２の記憶装置のアドレスとを対応づける管理情報を初期化して、データの書き込みが行われる前の状態に前記第２の記憶装置を復元する書き込みデータ無効化手段を具備する、
情報処理装置。
【請求項２】
前記第１の事象は、前記第２の記憶装置の取り外し要求である請求項１に記載の情報処理装置。
【請求項３】
前記キャッシング手段は、第２の事象が発生した場合、前記管理情報に基づき、前記キャッシュ領域に格納されている前記書き込みデータを前記第２の記憶装置に書き出して、前記第２の記憶装置を最新の状態に更新する書き込みデータ反映手段を具備する請求項１に記載の情報処理装置。
【請求項４】
前記第１の記憶装置は、不揮発性の記憶装置であり、
前記キャッシュ手段は、前記管理情報を前記第１の記憶装置上で管理し、
前記第２の事象が発生することなく再起動された場合であっても、前回の稼働時に書き込まれたデータが有効な状態で前記第２の記憶装置を利用することが可能である、
請求項３に記載の情報処理装置。
【請求項５】
前記第１の記憶装置は、揮発性の記憶装置であり、
前記キャッシュ手段は、前記管理情報を前記第１の記憶装置上で管理し、
前記第２の事象が発生することなく再起動された場合、前記管理情報が初期化され、データの書き込みが行われる前の状態に前記第２の記憶装置が復元される、
請求項３に記載の情報処理装置。
【請求項６】
前記キャッシング手段は、前記キャッシュ領域中の前記書き込みデータが格納されていない領域の容量が閾値として定められた容量を下回った場合、前記第２の記憶装置の空き容量不足を警告する警告手段を具備する請求項１に記載の情報処理装置。
【請求項７】
前記キャッシング手段は、前記キャッシュ領域中の前記書き込みデータが格納されていない領域の容量が無くなった場合、前記第２の記憶装置へのデータの書き込みをエラー終了させる請求項１に記載の情報処理装置。
【請求項８】
第１の記憶媒体と、
第２の記憶媒体と、
前記第１の記憶媒体を前記第２の記憶媒体のキャッシュとして用いて前記第２の記憶媒体へのデータの書き込みおよび前記第２の記憶媒体からのデータの読み出しを実行するメディアコントローラと、
前記メディアコントローラを駆動制御する制御手段と、
を具備し、
前記制御手段は、
第１の信号および第２の信号を入力する入力手段と、
前記第１の信号が入力された場合、前記第１の記憶媒体にキャッシングされたデータを破棄するように前記メディアコントローラに指示する第１の駆動制御手段と、
前記第２の信号が入力された場合、前記第１の記憶媒体にキャッシングされた書き込みデータを前記第２の記憶媒体に書き出すように前記メディアコントローラに指示する第２の駆動制御手段と、
を具備する記憶装置。
【請求項９】
前記第１の記憶媒体は、不揮発性の記憶媒体であり、
前記第２の信号が入力されることなく再起動された場合であっても、前回の稼働時に前記第１の記憶媒体にキャッシングされた書き込みデータを利用することが可能である、
請求項８に記載の記憶装置。
【請求項１０】
前記第１の記憶媒体は、揮発性の記憶媒体であり、
前記第２の信号を入力することなく再起動された場合、データの書き込みが行われる前の状態に復元される、
請求項８に記載の記憶装置。
【請求項１１】
前記制御手段は、前記第１の記憶媒体上に確保される前記第２の記憶媒体のためのキャッシュ領域中の前記書き込みデータが格納されていない領域の容量が閾値として定められた容量を下回った場合、空き容量不足を警告する警告手段を具備する請求項８に記載の記憶装置。
【請求項１２】
前記メディアコントローラは、前記第１の記憶媒体上に確保される前記第２の記憶媒体のためのキャッシュ領域中の前記書き込みデータが格納されていない領域の容量が無くなった場合、データの書き込みをエラー終了させる請求項８に記載の記憶装置。
【請求項１３】
第１の記憶装置と第２の記憶装置とを具備する情報処理装置におけるデータ管理方法であって、
前記第２の記憶装置への書き込みデータを前記第１の記憶装置上に確保したキャッシュ領域に格納し、
第１の事象が発生した場合、前記書き込みデータが格納されている前記キャッシュ領域のアドレスと前記書き込みデータが格納されるべき前記第２の記憶装置のアドレスとを対応づける管理情報を初期化して、データの書き込みが行われる前の状態に前記第２の記憶装置を復元する、
データ管理方法。
【請求項１４】
第２の事象が発生した場合、前記管理情報に基づき、前記キャッシュ領域に格納されている前記書き込みデータを前記第２の記憶装置に書き出して、前記第２の記憶装置を最新の状態に更新する請求項１３に記載のデータ管理方法。
【請求項１５】
前記キャッシュ領域中の前記書き込みデータが格納されていない領域の容量が閾値として定められた容量を下回った場合、前記第２の記憶装置の空き容量不足を警告する請求項１３に記載のデータ管理方法。
【請求項１６】
前記キャッシュ領域中の前記書き込みデータが格納されていない領域の容量が無くなった場合、前記第２の記憶装置へのデータの書き込みをエラー終了させる請求項１３に記載のデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、例えばＰＣ（Personal computer）に適用されるＨＤＤ（Hard disk drive）やＵＳＢ（Universal serial bus）メモリ等に好適なデータ管理技術に関する。
【背景技術】
【０００２】
近年、ビジネスユースおよびパーソナルユースの双方において、ＰＣが広く普及している。ＰＣには、ＲＡＭ、ＨＤＤ、ＵＳＢメモリ等、データの書き込み／読み出しが可能な様々な記憶装置が用いられる。そして、この種の記憶装置に関するデータの管理手法については、これまでも種々の提案がなされている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２７６６４６号公報
【特許文献２】特開２００９−１８７０６２号公報
【特許文献３】特開平９−２９７７１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば企業などでは、ｎ台のＰＣをｍ（ｎ＜ｍ）人の社員で利用すること、即ち、ＰＣを共用化することも良く行われている。
【０００５】
共用のＰＣの場合には、セキュリティやプライバシー保護の観点から、ユーザのデータがＰＣ内に残存したり、ＰＣ内のデータをユーザが持ち出し可能であったりすることは好ましくない。また、ＰＣのシステム状態に関わるデータの更新が随意に行われ得ることも好ましくない。
【０００６】
本発明は、例えばデータの流出を防止すべく補助記憶装置のデータ管理を適切に実行する情報処理装置、記憶装置およびデータ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態によれば、情報処理装置は、第１の記憶装置と、第２の記憶装置と、キャッシング手段と、を具備する。キャッシング手段は、前記第２の記憶装置への書き込みデータを前記第１の記憶装置上に確保したキャッシュ領域に格納する。キャッシング手段は、書き込みデータ無効化手段を具備する。書き込みデータ無効化手段は、第１の事象が発生した場合、前記書き込みデータが格納されている前記キャッシュ領域のアドレスと前記書き込みデータが格納されるべき前記第２の記憶装置のアドレスとを対応づける管理情報を初期化して、データの書き込みが行われる前の状態に前記第２の記憶装置を復元する。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態の情報処理装置のシステム構成を示す図。
【図２】第１実施形態の情報処理装置の階層化されたソフトウェア群を示す図。
【図３Ａ】第１実施形態の情報処理装置で使用されるメモリテーブルの第１の例を示す図。
【図３Ｂ】第１実施形態の情報処理装置で使用されるメモリテーブルの第２の例を示す図。
【図４Ａ】第１実施形態の情報処理装置で使用されるデバイステーブルの第１の例を示す図。
【図４Ｂ】第１実施形態の情報処理装置で使用されるデバイステーブルの第２の例を示す図。
【図５】第１実施形態の情報処理装置が保持するメモリのブロック状態を示す図。
【図６】第１実施形態の情報処理装置が保持するキャッシュの動作モードを示す図。
【図７】第１実施形態の情報処理装置の起動時の動作手順を示すフローチャート。
【図８】第１実施形態の情報処理装置のシャットダウン時の動作手順を示すフローチャート。
【図９】第１実施形態の情報処理装置のリード要求時の動作手順を示すフローチャート。
【図１０】第１実施形態の情報処理装置のライト要求時の動作手順を示すフローチャート。
【図１１】第１実施形態の情報処理装置のフラッシュ要求時の動作手順を示すフローチャート。
【図１２】第１実施形態の情報処理装置のトリガ１発生時の動作手順を示すフローチャート。
【図１３】第１実施形態の情報処理装置の（補助記憶装置の）イジェクト時の動作手順を示すフローチャート。
【図１４】第１実施形態の情報処理装置のトリガ２発生時の動作手順を示すフローチャート。
【図１５】第１実施形態の情報処理装置のトリガ３発生時の動作手順を示すフローチャート。
【図１６】第２実施形態の記憶装置を適用する計算機システムのシステム構成を示す図。
【発明を実施するための形態】
【０００９】
以下、実施の形態について図面を参照して説明する。
【００１０】
（第１実施形態）
まず、第１の実施形態について説明する。
【００１１】
図１は、本実施形態の情報処理装置のシステム構成を示す図である。
【００１２】
図１に示すように、本情報処理装置１００は、中央処理装置（ＣＰＵ）１、主記憶装置（メモリ）２、Ｉ／Ｏコントローラ３、補助記憶装置（システムＨＤＤ）４等によって構成される。なお、ここでは、通常、Ｉ／Ｏコントローラ３に接続されるキーボード／マウス／モニタといった入出力装置は省略している。また、システム起動に必要な最小限の機能を持ったファームウェアなどが保存されるＲＯＭやフラッショメモリについても省略している。これらはシステム構成に依存しており、一般的には、ＣＰＵ１に直接またはＩ／Ｏコントローラ３を介して接続される。Ｉ／Ｏコントローラ３は、例えばＶＧＡ、ＳＡＴＡ、ＵＳＢコントローラ等、いくつかのコントローラを内蔵している。
【００１３】
オペレーティングシステム（ＯＳ）１０などの基本ソフトウェアは、システムＨＤＤ４に保存されており、ファームウェアがＣＰＵ１上で動き、システムＨＤＤ４上に格納された実行プログラムや構成情報をメモリ２へ展開し、ＣＰＵ１とメモリ２だけで、ひとまずシステムが起動する。その後、メモリ２上に展開された実行プログラムを使用して、Ｉ／Ｏコントローラ３や、その先に接続された入出力装置、補助記憶装置をＯＳ１０が使用するための再初期化が行われる。このとき、例えば図２に示すように階層化されたソフトウェア群が、最下位の段から順次、初期化、構築される。この再初期化は、ＯＳ１０が持つドライバ１５とよばれる実行プログラムにて実装される。Ｉ／Ｏコントローラ３の先に接続されたデバイスは、クラスドライバ１３と呼ばれる共通ドライバで初期化される。再初期化後は、クラスドライバ１３とドライバ１５とが、各コントローラと各デバイスとをコントロールすることで、各種要求を実行する。システムＨＤＤ４やＵＳＢメモリ５などの補助記憶装置は、通常、ＦＡＴ３２やＵＤＦなどに代表される、何らかファイルシステムで初期化／構築されており、それを使用するためのファイルシステムドライバ１２が、システムＨＤＤ４やＵＳＢメモリ５内のデータを管理している。このファイルシステムドライバ１２が初期化され、ＯＳ１０の基幹サービス部分の初期化／起動完了をもって、システムが起動したと通常言われる。
【００１４】
アプリケーション１６は、ファイルシステムを使用することによって、システムＨＤＤ４やＵＳＢメモリ５の物理的な構成や特性、Ｉ／Ｏコントローラ３内のコントローラを意識することなく、データを操作することが可能となっている。
【００１５】
図１に示したような構成の計算機では、システムＨＤＤ４、メモリ２、ＣＰＵ１内のレジスタや演算器の速度差が大きく、最も遅い記憶装置の速度がそのままシステムの応答速度へ還元されてしまう。それを回避するため、キャッシュと呼ばれる技術が、さまざまな場所に階層化されて実装されており、例として、図１では、ＣＰＵ１とメモリ２との間に示している。このキャッシュの方式には、実装形態として、ダイレクトマップ式、完全連想式、n-Way Set連想式がある。また、分類として、リードキャッシュとライトキャッシュとがあり、管理方式として、ＬＲＵ、ＭＲＵ、ＬＦＵがある。リードキャッシュとは、頻繁に使用するプログラムコード／データを、より速い記憶装置に準備して使用することであり、遅い記憶装置へのアクセス頻度を下げることを目的とする。一方、ライトキャッシュとは、書き出すデータを最終段の記憶装置より速い記憶装置へ一旦保存するだけで、書き出しが完了したことにしておいて、実行中のプログラムを継続し、後でより遅い最終段の記憶装置へまとめて書きだすことで、見かけ上の応答速度を向上させることを目的とする。
【００１６】
図１では、ＣＰＵ１とメモリ２との間だけにキャッシュを示したが、キャッシュを管理する階層が異なる程度で、システムＨＤＤ４のキャッシュとして、メモリ２の一部（データバッファ２Ａ）が使用されることも一般的である。また、システムＨＤＤ４内部にキャッシュが実装されることも一般的である。なお、キャッシュの実装形態は、前述の他に様々なものがあるが、ここでは、その詳細は省略する。
【００１７】
図１に示した（NAND Flashなどで構成される）ＵＳＢメモリ５は、リードは高速だがライトがとても遅いという特性を持つ。このようなデバイスには、ライトキャッシュはとても有効である。ところで、近年の企業の内部統制により、このＵＳＢメモリ５のように容易に取り外せるデバイスへの情報の書きだしを制御することが求められている。
【００１８】
また、シンクライアント端末等で計算機を複数のユーザで共有する場合、直前のユーザの情報がシステム内、特にシステムＨＤＤ４に残っていることは、情報セキュリティの観点からあまり好ましくない。これを回避するために、直前のユーザが書き出した情報を確実に消し去る技術が求められている。
【００１９】
本情報処理装置１００は、これらの要求に応えるための仕組みを備えたものであり、以下、この点について詳述する。
【００２０】
まず、その実現方法の概略を説明すると、通常のライトキャッシュは、ライト要求を完了通知した後で、フラッシュという動作を実行する。例えば、ＣＰＵ１、メモリ２、システムＨＤＤ４またはＵＳＢメモリ５のアイドル状態を検出し、他のプログラム実行を妨げない程度の負荷で、システムＨＤＤ４等に、書き換えられたデータを書き戻す。この書き戻す動作がフラッシュ処理と呼ばれる。
【００２１】
これに対して、本情報処理装置１００は、各デバイスへ書き出すデータはすべてライトキャッシュに載せてしまい、許可されて始めてフラッシュを行なう。書き出しが許可されない限りデバイスへは全く書き出さない。ここで言う許可とは、サーバへの認証であったり、ユーザ操作であったりするが、特にこれと定めるものではない。単にデバイスへの書き換えデータの書き捨てや、書き換え禁止と異なり、ライトキャッシュに載せることで、該当データの読み出しも可能である。
【００２２】
（システム構成）
本情報処理装置１００では、メモリ２内に専用のLevel 1 Buffer（データバッファ）２Ａと構成管理情報格納領域２Ｂとを確保する。ここでは、ＵＳＢメモリ５がキャッシュでの高速化の対象であり、書き出しをコントロールするデバイスである。システムＨＤＤ４はシステム起動補助記憶装置である。Level 1 Buffer２Ａ用として充分に大きな容量をメモリ２上に確保できる場合、図１に示した構成管理情報（Shadow）格納領域４ＡやLevel 2 Buffer（データバッファ）４Ｂを使用しない構成も可能である。
【００２３】
しかし、現実的にはメモリ２は限りある資源であるため、Level 1 Buffer２Ａを充分に大きく確保することは不可能である。そのため、ＵＳＢメモリ５へ書き出されるデータがLevel 1 Buffer２Ａと比較して充分に大きいことが想定される場合、Level 1 Buffer２Ａの容量が不足した際に使用するLevel 2 Buffer４Ｂを割り当てる。この場合の構成では、構成管理情報（Shadow）格納領域２３は使用しない。なお、情報セキュリティの観点からは、Level 2 Buffer４Ｂが割り当てられたシステムＨＤＤ４は安易に取り外せないことが求められるが、必ずしもその必要は無い。
【００２４】
（コード構成）
図１に示すシステム構成では、補助記憶装置であるシステムＨＤＤ４とＵＳＢメモリ５へのリクエストをすべて監視する必要があるため、図２に示す位置にフィルタドライバ１４を挿入する。この位置は、クラスドライバ１３が発行するすべてのリクエストを監視可能である。また、フィルタドライバ１４をコントロールするサービス／ユーザアプリケーション１１が実装される。サービス／ユーザアプリケーション１１が、ユーザインタフェースやサーバへの問い合わせなどを実現し、フィルタドライバ１４が、リクエストの監視とキャッシュ動作とを実現している。
【００２５】
（データ構成）
本実施形態では、実際にキャッシュの動作を行うのは、フィルタドライバ１４である。フィルタドライバ１４がキャッシュ動作を行なうために必要なデータ構成の例を挙げる。
【００２６】
図３Ａおよび図３Ｂに、Level 1 Buffer２Ａのみの場合のデータ構成の例を示し、図４Ａおよび図４Ｂに、Level 2 Buffer４Ｂも使用したデータ構成の例を示す。
【００２７】
メモリテーブルは、キャッシュの方式により様々な形態があるが、一例として完全連想式を記載している。メモリテーブルは、図３Ａの形態では、Level 1 Buffer２Ａの容量と、管理単位の大きさ（＝ブロックサイズ）とにより行が増加する。さらに、図４Ａの形態では、Level 2 Buffer４Ｂの容量も加味される。メモリテーブル各行のブロック状態は、図５に示すブロック状態のような情報を保持しており、該当行のキャッシュ状態を表している。その他に、キャッシュの動作状態を表す図６に示す動作モードも別途保持している。
【００２８】
メモリテーブルの左側の元のアドレスは、デバイステーブルに記述されたデバイス番号と、デバイス内のアドレスを管理単位で分割したアドレスとを組み合わせ、１ブロックとして管理する。該当ブロックに割り当てたLevel 1 Buffer２ＡやLevel 2 Buffer４Ｂの状態やアドレスを表の右側で管理する。図３Ａの１行目を例に説明すると、デバイス番号001のディスクアドレス0x56789a*ブロックサイズに対して、Level 1 Buffer２Ａが0x12345678を割り当ててあり、Level 2 Buffer４Ｂは未割り当て示す値Invalid（例えば0や-1，NULLなど）を格納している。この行のブロック状態は、リードキャッシュとして使用していれば、Valid Bitmapが全アドレス分立っており、ライトキャッシュとして使用していれば、Dirtyが立っている。
【００２９】
図３Ｂおよび図４Ｂに示すデバイステーブルは、デバイス番号と、デバイスの識別子、対象となるデバイス内のアドレス、対象アドレスを何に使用するかの用途が入っている。デバイスの識別子は、デバイス毎のユニークな識別子を使用し、この例で使用している安易な識別子が使われることは無い。
【００３０】
図３Ｂに示すデバイステーブルは、デバイス番号000はシステムデバイスであり、デバイス内アドレス0x0-0x4000000がキャッシュによる高速化対象であることを示す。デバイス番号001が取り外し可能なデバイスであり，デバイス内アドレス0x0-0x1000000が高速化対象であることを示している。一方、図４Ｂに示すデバイステーブルは、デバイス番号000はシステムデバイスであり、デバイス内アドレス0x200000-0x2000800がLevel 2 Buffer４Ｂとして割り当ててあることを示す。このときの同デバイスの他のアドレスは、キャッシュによる高速化の対象ではない。デバイス番号001については、図３Ｂに示すデバイステーブルと同様である。
【００３１】
図示していない例として、用途やデバイス内アドレスが空欄のものが存在し得る。これは、キャッシュによる高速化の対象でもないし，Level 2 Buffer４Ｂを確保したデバイスでもないことを示す。また、図４Ｂでは、Level 2 Buffer４Ｂはシステムデバイスに確保した例を挙げているが、他のデバイスを接続し、使用しても良い。この場合は、システムデバイスのデバイス内アドレスの設定は図３Ｂのようになり、高速化の対象となる。
【００３２】
Level 2 Buffer４Ｂを使用した構成の場合は、フィルタドライバ１４以外からの書き換えを禁止するため、クラスドライバ１３が発行した要求を監視し、Level 2 Buffer４Ｂへの書き換え要求を失敗させる。
【００３３】
（構築／起動手順）
本実施形態の場合、構成管理情報は、動作モードとデバイステーブルのみが、システムデバイス内にドライバ１５の初期化オプションとして保管される。起動時にドライバ１５がそれらのオプションを受け取り、図１、図３Ａおよび図４Ａ／図３Ｂおよび図４Ｂの構成を構築する。本実施形態では、構成管理情報（Shadow）格納領域４Ａを確保していないため、前回の稼動時の学習状況（＝メモリテーブル）は、初期化した状態から動作を開始する。つまり、この実装例の場合、動作モードLevel 2 VolatileはYesである。
【００３４】
図７は、本情報処理装置１００の起動時の動作手順を示すフローチャートである。
【００３５】
フィルタドライバ１４は、起動すると、構成管理情報用のメモリ（構成管理情報格納領域２Ｂ）を割り当てる（ブロックＡ１）。フィルタドライバ１４は、初期化オプションを参照し、本実施形態では確保されていないが構成管理情報（Shadow）格納領域４Ａが確保されていればそれを読み出し、追加の構成管理情報を得る（ブロックＡ２）。
【００３６】
フィルタドライバ１４は、初期化オプションを参照し、Level 1 Buffer２Ａを確保する（ブロックＡ３）。フィルタドライバ１４は、初期化オプションまたは構成管理情報を参照し、Level 2 Buffer４Ｂを構成する（ブロックＡ４）。これらの情報から、フィルタドライバ１４は、メモリテーブル、デバイステーブル、動作モードなどを決定し、キャッシュ動作を開始する。
【００３７】
（シャットダウン手順）
本実施形態の場合、構成管理情報（Shadow）格納領域４Ａが確保されていないため、学習状況（＝メモリテーブル）は保存する必要が無い。
【００３８】
図８は、本情報処理装置１００のシャットダウン時の動作手順を示すフローチャートである。
【００３９】
シャットダウンが通知されると、フィルタドライバ１４は、動作モードのLevel 2 Volatileをチェックする（ブロックＢ１）。構成管理情報（Shadow）格納領域４Ａが確保されていない場合、またはLevel 2 Buffer４Ｂが起動毎に初期化されるように構成された場合、Level 2 VolatileはYesが設定されている。この場合、シャットダウン通知に際してフィルタドライバ１４が行なうことはない。
【００４０】
一方、構成管理情報（Shadow）格納領域４Ａが確保されている場合、Level 2 VolatileはNoが設定されている。この場合、フィルタドライバ１４は、高速化対象デバイスすべてに対して、フィルタドライバ１４は、自ら後述のフラッシュ要求を発行し、完了を待つ（ブロックＢ２）。フラッシュ要求が完了したら、フィルタドライバ１４は、構成管理情報（Shadow）格納領域４Ａに構成管理情報格納領域２Ｂの内容を書き出し（ブロックＢ３）、構成管理情報（Shadow）格納領域４ＡやLevel 2 Buffer４Ｂを持つシステムＨＤＤ４に対し、本来のフラッシュ処理を要求する（ブロックＢ４）。
【００４１】
（リクエストごとの処理）
（リード要求）
図９は、本情報処理装置１００のリード要求時の動作手順を示すフローチャートである。
【００４２】
フィルタドライバ１４は、リードの要求を受け付けると、最初に、受け付けた要求のデバイス、アドレスが高速化対象であるか判別する（ブロックＣ１）。対象でない場合、フィルタドライバ１４は、通常のリード処理を実行し（ブロックＣ２）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。対象であった場合、フィルタドライバ１４は、要求のアドレスをメモリテーブルから検索し（ブロックＣ４）、Level 1 ヒット、Level 2 ヒット、ミスの判定を行う。
【００４３】
Level 1 Bufferヒットの場合、フィルタドライバ１４は、Level 1 Buffer２ＡからユーザBufferへデータをコピーし（ブロックＣ５）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。
【００４４】
Level 2 Bufferヒットの場合、フィルタドライバ１４は、Level 1 Buffer２ＡでDirtyを含まない空きブロックを検索する（ブロックＣ６）。見つからなかった場合、フィルタドライバ１４は、Level 2 Buffer４ＢからユーザBufferへデータを読み出し（ブロックＣ７）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。見つかった場合、Level 1 Buffer２Ａをリード要求デバイス、アドレスに対して割り当て、メモリテーブルをアップデートする（ブロックＣ８）。フィルタドライバ１４は、割り当てたLevel 1 Buffer２Ａに対して、Level 2 Buffer４Ｂからデータを読み出し（ブロックＣ９）、Level 1 Buffer２ＡからユーザBufferへデータをコピーし（ブロックＣ５）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。
【００４５】
ミスした場合、フィルタドライバ１４は、動作モードを参照し、リードキャッシュ動作しているか判別する（ブロックＣ１０）。リードキャッシュ動作していない場合、フィルタドライバ１４は、通常のリード処理を実行し（ブロックＣ１１）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。リードキャッシュ動作していても、Level 1 Buffer２ＡでDirtyを含まない空きブロックを検索し（ブロックＣ１２）、見つからなかった場合も同様の動作を行なう。Dirtyを含まない空きブロックが見つかった場合、フィルタドライバ１４は、Level 1 Buffer２Ａをリード要求デバイス、アドレスに対して割り当て、メモリテーブルをアップデートする（ブロックＣ１３）。フィルタドライバ１４は、この割り当てたLevel 1 Buffer２Ａに対して、対象のアドレスを含むブロックを読み出し（ブロックＣ１４）、Level 1 Buffer２ＡからユーザBufferへデータをコピーし（ブロックＣ１５）、ＯＳ１０に対して処理終了を通知する（ブロックＣ１６）。フィルタドライバ１４は、要求アドレスに対してLevel 2 Buffer４Ｂが割り当て済みか判別し（ブロック）、割り当て済みであれば、Level 1 Buffer２Ａの内容をLevel 2 Buffer４Ｂへ書き出す（ブロックＡ１８）。Level 2 Buffer４Ｂが未割り当てのとき、フィルタドライバ１４は、Level 2 Buffer４Ｂが確保されていない場合またはDirtyを含まないLevel 2 Buffer４Ｂを検索して見つからなかった場合に該当するか判別する（ブロックＣ１９），該当する場合、フィルタドライバ１４は、そのまま処理を終了する。一方、該当しない場合、フィルタドライバ１４は、要求アドレスに対してLevel 2 Buffer４Ｂを割り当て、メモリテーブルをアップデートし（ブロックＣ２０）、Level 1 Buffer２Ａの内容をLevel 2 Buffer４Ｂへ書き出す（ブロックＣ１８）。
【００４６】
（ライト要求）
図１０は、本情報処理装置１００のライト要求時の動作手順を示すフローチャートである。
【００４７】
ライトの要求を受け付けると、フィルタドライバ１４は、最初に、受け付けた要求のデバイス，アドレスが高速化対象であるか判別する（ブロックＤ１）。対象でない場合、フィルタドライバ１４は、通常のライト処理を実行し（ブロックＤ２）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。対象であった場合、フィルタドライバ１４は、要求のアドレスをメモリテーブルから検索し、Level 1 ヒット、Level 2 ヒット、ミスの判定を行う（ブロックＤ４）。
【００４８】
Level 1 BufferヒットかつLevel 2 Bufferミスの場合、フィルタドライバ１４は、既に割り当ててあるLevel 1 Buffer２Ａに、ライトするユーザBufferのデータをコピーし（ブロックＤ５）、Level 1 Buffer２Ａの該当ブロックにDirtyをマークするだけで（ブロックＤ６）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。
【００４９】
Level 2 Bufferヒットの場合、フィルタドライバ１４は、ライトするユーザBufferのデータをLevel 2 Buffer４Ｂへ書き出し（ブロックＤ７）、Level 2 Buffer４Ｂの該当ブロックのDirtyをマークする（ブロックＤ８）。フィルタドライバ１４は、Level 1 Buffer２Ａにもヒットしているか判別し（ブロックＤ９）、ヒットしていた場合、既に割り当ててあるLevel 1 Buffer２Ａに、ライトするユーザBufferのデータをコピーし（ブロックＤ５）、Level 1 Buffer２Ａの該当ブロックのDirtyをマークして（ブロックＤ６）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。Level 1 Buffer２Ａにはミスしている場合、フィルタドライバ１４は、そのまま、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。
【００５０】
ミスした場合、フィルタドライバ１４は、ライトキャッシュが動作中かチェックを行う（ブロックＤ１０）。停止中の場合、フィルタドライバ１４は、通常のライト処理を実行し（ブロックＤ１１）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。ライトキャッシュ動作中の場合、フィルタドライバ１４は、Level 1 Buffer２ＡでDirtyを含まない空きブロックを検索する（ブロックＤ１２）。空きが見つからなかった場合、フィルタドライバ１４は、ＯＳ１０に対してエラー終了を通知する（ブロックＤ１３）。空きが見つかった場合、フィルタドライバ１４は、要求アドレスに対してLevel 1 Buffer２Ａを割り当て、メモリテーブルをアップデートし（ブロックＤ１４）、その割り当てたLevel 1 Buffer２Ａに、ライトするユーザBufferのデータをコピーし（ブロックＤ５）、Level 1 Buffer２Ａの該当ブロックのDirtyをマークして（ブロックＤ６）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。
【００５１】
（フラッシュ要求）
図１１は、本情報処理装置１００のフラッシュ要求時の動作手順を示すフローチャートである。
【００５２】
フラッシュの要求を受け付けると、フィルタドライバ１４は、最初に、受け付けた要求のデバイスが高速化対象であるか判別する（ブロックＥ１）。対象でない場合、フィルタドライバ１４は、通常のフラッシュ処理を実行し（ブロックＥ２）、ＯＳ１０に対して処理終了を通知する（ブロックＥ３）。対象であった場合、フィルタドライバ１４は、Level 2 Buffer４Ｂを確保しているか判別する（ブロックＥ４）。確保していなければ、フィルタドライバ１４は、何もせずそのままＯＳ１０に対して処理終了を通知する（ブロックＥ３）。
【００５３】
Level 2 Buffer４Ｂが確保されていた場合、フィルタドライバ１４は、メモリテーブルからDirtyがマークされたLevel 1 Buffer２Ａを検索する（ブロックＥ５）。Dirtyが見つからなかった場合、構成管理情報（Shadow）格納領域４Ａが確保されていれば、フィルタドライバ１４は、ここにメモリテーブルなどの構成管理情報を書き出し（ブロックＥ６）、Level 2 Buffer４Ｂに対しフラッシュ処理を実行し（ブロックＥ７）、ＯＳ１０に対して処理終了を通知する（ブロックＥ３）。本実施形態では、構成管理情報（Shadow）格納領域４Ａは確保しないので、ブロックＥ６の構成管理情報の書き出しは実行されない。
【００５４】
Level 1 Buffer２ＡにDirtyが見つかった場合、フィルタドライバ１４は、同ブロックにLevel 2 Buffer４Ｂは割り当て済みかチェックする（ブロックＥ８）。未割り当ての場合、フィルタドライバ１４は、Level 2 Buffer４Ｂを割り当て、メモリテーブルを更新する（ブロックＥ９）。フィルタドライバ１４は、Level 1 Buffer２ＡのデータをLevel 2 Buffer４Ｂへ書き出し（ブロックＥ１０）、Level 1 Buffer２ＡのDirtyのマークを消去して（ブロックＥ１１）、Level 2 Buffer４ＢのDirtyをマークする（ブロックＥ１２）。このブロックＥ５〜ブロックＥ１２の処理は、Level 1 Buffer２ＡからDirtyが無くなるまで繰り返される。Level 1 Buffer２ＡからDirtyが無くなると、ブロックＥ５からブロックＥ６へ流れ、ループを脱出する。
【００５５】
ここでのポイントは、データをLevel 2 Buffer４Ｂに書き出すだけで終了し、まだ高速化対象のデバイスであるＵＳＢメモリ５へ書き出していないことである。
【００５６】
（初期化）
キャッシュの初期化条件は、様々なものが想定されるが、安易な例として、ユーザ操作によるものを例に挙げる。サービス／ユーザアプリケーション１１は、ユーザインタフェースを持っており、そこに対象デバイス毎にキャッシュの内容を消去するボタンのようなものが配置されている。このボタン押下が、トリガ１となる。
【００５７】
図１２は、本情報処理装置１００のトリガ１発生時の動作手順を示すフローチャートである。
【００５８】
トリガ１を発生させる場合、サービス／ユーザアプリケーション１１は、フィルタドライバ１４に対して「特殊な要求１」を発行する。フィルタドライバ１４は、トリガ１が発生すると、メモリテーブルを検索し、該当デバイスに割り当てたLevel 1 Buffer２Ａを切り離し、同時に、割り当てられていたLevel 1 Buffer２Ａの各ブロックのValid/Dirtyのマークを消去する（ブロックＦ１）。続いて、フィルタドライバ１４は、メモリテーブルを検索し、該当デバイスに割り当てたLevel 2 Buffer４Ｂを切り離し、同時に、割り当てられていたLevel 2 Buffer４Ｂの各ブロックのValid/Dirtyのマークを消去する（ブロックＦ２）。最後に、フィルタドライバ１４は、有効なブロック（＝他の高速化対象デバイスの情報）を残してメモリテーブルの再初期化を行う（ブロックＦ３）。
【００５９】
これらはすべて主記憶内で実行されるため、瞬時に元の内容を読み出し可能となる。
【００６０】
（イジェクト）
本実施形態では、高速化対象デバイスがＵＳＢメモリ５なので、容易に取り外しが可能である。この取り外しには、ＯＳ１０から予告して取り外す方法と、物理的に抜出する方法とがある。本実施形態では、どちらもサービス／ユーザアプリケーション１１の支援無く、フィルタドライバ１４自身が検出し、トリガ１が発生した場合と同等の動作を行う。
【００６１】
図１３は、本情報処理装置１００の（補助記憶装置の）イジェクト時の動作手順を示すフローチャートである。
【００６２】
イジェクトを検出すると、フィルタドライバ１４は、まず、高速化対象デバイスであるか判別する（ブロックＧ１）。対象外ならば、フィルタドライバ１４は、何もしない。もし対象ならば、フィルタドライバ１４は、メモリテーブルから該当デバイスのデータを含むブロックを検索する（ブロックＧ２）。見つからなかった場合、フィルタドライバ１４は、ループを終了する。
【００６３】
該当デバイスのデータを含むブロックを見つけた場合、フィルタドライバ１４は、該当するLevel 1 Buffer２Ａを切り離し、DirtyとValidのマークを消去する（ブロックＧ３）。続いて、フィルタドライバ１４は、該当するLevel 2 Buffer４Ｂを切り離し、DirtyとValidのマークを消去する（ブロックＧ４）。フィルタドライバ１４は、ブロックＧ２〜ブロックＧ４の処理を、メモリテーブルから該当デバイスのデータを含むブロックが無くなるまで繰り返す。
【００６４】
これにより、ＵＳＢメモリ５へ書き出したデータが瞬時に消え去ることで、データが流出することを未然に防ぐことが可能となる。
【００６５】
（Dirtyフラッシュ）
キャッシュのデバイスへの書き出し条件は、様々なものが想定されるが、安易な例として，ユーザ操作によるものを例に挙げる。サービス／ユーザアプリケーション１１は、ユーザインタフェースを持っており、そこに対象デバイス毎にキャッシュの内容をデバイスへ書き出すことを許可するボタンのようなものが配置されている。このボタン押下が、トリガ２となる。
【００６６】
図１４は、本情報処理装置１００のトリガ２発生時の動作手順を示すフローチャートである。
【００６７】
トリガ２を発生させる場合、サービス／ユーザアプリケーション１１は、フィルタドライバ１４に対して「特殊な要求２」を発行する。フィルタドライバ１４は、トリガ２が発生すると、自ら、書き出しが許可された高速化対象デバイスに対して前述のフラッシュ要求を発行する（ブロックＨ１）。フィルタドライバ１４は、この処理によって、Level 1 Buffer２ＡのDirtyを減らし、Level 2 Buffer４Ｂから対象デバイスへのコピーを行う際の中間バッファとして利用できるようにする。Level 2 Buffer４Ｂが確保されていなければ、何もせずに完了が通知される。この場合、DirtyはLevel 1 Buffer２Ａのみに存在するため、特に問題は発生しない。
【００６８】
フラッシュ要求の完了が通知されると、フィルタドライバ１４は、Level 2 Buffer４Ｂが確保されているかチェックを行う（ブロックＨ２）。Level 2 Buffer４Ｂが確保されていれば、フィルタドライバ１４は、書き出しが許可された対象デバイスのLevel 2 Buffer４ＢのDirtyなブロックをメモリテーブルから検索する（ブロックＨ３）。書き出しが許可された対象デバイスのLevel 2 Buffer４ＢのDirtyなブロックを発見したら、フィルタドライバ１４は、Level 2 Buffer４ＢをマージBufferへ読み出す（ブロックＨ４）。マージBufferは、Level 1 Buffer２Ａとは別に確保した専用の中間バッファであったり、DirtyでないLevel 1 Buffer２Ａを奪って使用したりする。フィルタドライバ１４は、Level 1 Buffer２Ａの同ブロックがValidかつDirtyかを判別し（ブロックＨ５）、ValidかつDirtyだった場合、マージBufferとLevel 1 Buffer２Ａ上の有効なデータを適切に結合して、マージBuffer上に再構築し（ブロックＨ６）、Level 1 Buffer２ＡのDirtyマークを消去する（ブロックＨ７）。Level 1 Buffer２Ａの同ブロックがDirtyでなかった場合や、未割り当ての場合、またはマージ完了後、フィルタドライバ１４は、マージBufferのデータを書き出しが許可された対象デバイスの該当ブロックに書き出し（ブロックＨ８）、Level 2 Buffer４ＢのDirtyマークを消去する（ブロックＨ９）。このブロックＨ３〜ブロックＨ９の処理は、書き出しが許可された対象デバイスのLevel 2 Buffer４ＢのDirtyなブロックが無くなるまで続けられる。
【００６９】
Level 2 Buffer４Ｂが確保されていない場合、および、書き出しが許可された対象デバイスのLevel 2 Buffer４ＢのDirtyなブロックが無くなった場合、フィルタドライバ１４は、書き出しが許可された対象デバイスのLevel 1 Buffer２ＡのDirtyなブロックをメモリテーブルから検索する（ブロックＨ１０）。書き出しが許可された対象デバイスのLevel 1 Buffer２ＡのDirtyなブロックを発見したら、フィルタドライバ１４は、Level 1 Buffer２ＡのDirtyなブロックのデータを、書き出しが許可された対象デバイスの該当ブロックに書き出し（ブロックＨ１１）、Level 1 Buffer２ＡのDirtyマークを消去する（ブロックＨ１２）。このブロックＨ１０〜ブロックＨ１２の処理は、書き出しが許可された対象デバイスのLevel 1 Buffer２ＡのDirtyなブロックが無くなるまで続けられる。
【００７０】
書き出しが許可された対象デバイスのDirtyなブロックが、Level 1 Buffer２Ａ／Level 2 Buffer４Ｂ内に共に無くなったら、フィルタドライバ１４は、動作モードをチェックする（ブロックＨ１３）。ライトキャッシュがまだ停止していなければ、一連の処理中に新たにDirtyなブロックが発生した可能性があるため、フィルタドライバ１４は、動作モードのライトキャッシュを停止し（ブロックＨ１４）、ブロックＨ２からの処理を繰り返す。ライトキャッシュが停止していれば、一連の書き出し処理が完了となる。
【００７１】
この時点で、初めて、書き換えたデータがＵＳＢメモリ５上へすべて書き出される。この状態のとき、ライトキャッシュは停止したままなので、このタイミングでのみ最新のデータを維持したままイジェクトが可能である。イジェクトせずに放置したり、ユーザ操作により書き換えが禁止されたりすると、サービス／ユーザアプリケーション１１は、フィルタドライバ１４に対して「特殊な要求３」を発行する。これがトリガ３となり、フィルタドライバ１４は、ライトキャッシュを再開させる（図１５のブロックＩ１）。
【００７２】
（その他）
サービス／ユーザアプリケーション１１は、フィルタドライバ１４が報告する構成管理情報のサマリを定期的に監視し、Level 2 Buffer４Ｂが未割り当ての時には、Level 1 Buffer２ＡのDirtyなブロックの占有率が予め設定された一定値を超えた際に、ユーザへ警告通知を行ない、キャッシュの初期化／Dirtyフラッシュを促す。Level 2 Buffer４Ｂが割り当て済みの場合には、サービス／ユーザアプリケーション１１は、Level 2 Buffer４ＢのDirtyなブロックの占有率が予め設定された一定値を超えた際に、ユーザへ警告通知を行ない、キャッシュの初期化／Dirtyフラッシュを促す。
【００７３】
以上のように、本情報処理装置においては、ライトバックキャッシュ動作中、メディアへのデータの書き出しをコントロールし、メディアの更新を妨げることで、データの流出リスクの低減およびシステム状態の維持（無認可ソフトウェアのインストールなどを後からキャンセルする）などが実現される。
【００７４】
（第２実施形態）
次に、第２の実施形態について説明する。
【００７５】
（システム構成）
図１６は、本実施形態の記憶装置（ＨＤＤ２００）を適用する計算機システムのシステム構成を示す図であり、ＨＤＤ２００／ＨＤＤ３００は補助記憶装置単体である。これらは、本体装置であるＨＯＳＴ１１０とはＳＡＴＡ／ＳＡＳ／ＵＳＢなどのインタフェースにより接続される。ＨＯＳＴ１１０のＩ／Ｏコントローラ３は、ＰＨＹ２０１を介してＨＤＤ２００のメインコントローラ（ＭＰＵ）２０２に接続される。ＭＰＵ２０２は、ＨＯＳＴ１１０から要求される各種要求を解釈し、適切にメモリ２０３／メディアコントローラ２０４を制御する役割を担う。ＭＰＵ２０２やメディアコントローラ２０４では、ＦＷ２０５に格納された制御プログラム（＝ファームウェア）が実行されている。メディアコントローラ２０４は、ＭＰＵ２０２の要求に従い、モータ／ヘッド２０６の位置制御、タイミングの生成、メディア２０７の読み出し、書き込みデータの変調、エラー訂正などを担う。メディア２０７には、ＨＯＳＴ１１０に直接使用させることができるユーザデータエリア２０７Ａの他、ＨＯＳＴ１１０から隠している“ユーザデータエリア２０７Ａ内の不良領域の代替エリア”、不良領域の代替アドレス情報、ＭＰＵ２０２が使用する構成情報などが代替アドレス情報として代替アドレス情報格納領域２０７Ｂに格納されている。一般的なローテーションメディアを持つ補助記憶装置では、メディア２０７やモータ／ヘッド２０６で発生する機械的な移動時間を隠蔽するために、メモリ２０３を使用した先読みキャッシュやライトキャッシュをＭＰＵ２０２にて実現している。本実施形態では、このライトキャッシュに対して追加のロジックを加える。
【００７６】
より具体的には、メモリ２０３内に専用のLevel 1 Buffer（データバッファ）２０３Ｂと構成管理情報格納領域２０３Ａを確保する。メディア２０７のユーザデータエリア２０７Ａがキャッシュでの高速化の対象である。ＨＯＳＴ１１０から直接使用できないエリアに、構成管理情報のコピーを格納する構成管理情報（Shadow）格納領域２０７ＣとLevel 2 Buffer（データバッファ）２０７Ｄとを準備する。
【００７７】
Ｉ／Ｏパネル２００Ａは、本実施形態固有の接続である。通常の補助記憶装置では、アクセスＬＥＤ点灯専用の接続であることが多いが、本実施形態では、入力スイッチも備えており、ＭＰＵ２０２へ指示を与えることが可能である。このＩ／Ｏパネル２００Ａからの指示は、ＨＯＳＴ１１０からの特殊な要求で代替することも可能である。ここでは、Ｉ／Ｏパネル２００Ａに２つのボタンを図示している。一方は初期化ボタンであり、他方はフラッシュボタンである。また、２つのＬＥＤを図示しているが、一方はアクセスランプであり、他方はDirty増加警告ランプである。
【００７８】
なお、以後、ＨＤＤ３００について触れないが、ＨＤＤ３００もＨＤＤ２００と同様の動作をしても良い。この場合、必要であれば、ＨＤＤ３００にも、別途専用のＩ／Ｏパネル２００Ａを接続可能である。
【００７９】
本実施形態が前述した第１実施形態と異なる点は、シャットダウンを挟んでも書き込みデータが維持され、かつ、瞬時に元のデータを読み出し可能となる点にある。
【００８０】
（コード構成）
図１６に示した構成では、ＨＤＤ２００が受け付けるすべての要求をＭＰＵ２０２で監視できるため、ライトキャッシュのロジックをＭＰＵ２０２が実行するファームウェアとしてＦＷ２０５に格納する。
【００８１】
Ｉ／Ｏパネル２００Ａが接続されている場合、これだけで充分であるが、ＨＯＳＴ１１０内で稼働するサービス／ユーザアプリケーション１１のような管理アプリケーションがいても良い。Ｉ／Ｏパネル２００Ａが接続されていない場合でも、ＨＯＳＴ１１０内で稼働するサービス／ユーザアプリケーション１１に相当する管理アプリケーションがいたほうが良い。なお、サービス／ユーザアプリケーション１１のようなアプリケーションがいなくても本実施形態の目的は実現できる。
【００８２】
（データ構成）
本実施形態では、実際にキャッシュの動作を行うのは、ＭＰＵ２０２である。ＭＰＵ２０２を動かすファームウェアはＦＷ２０５に格納されている。キャッシュ動作を行うために必要なデータ構成の例を挙げる。
【００８３】
本実施形態では、図４Ａおよび図４Ｂのような形態となる。図１６ではLevel 2 Buffer２０７Ｄを使用したデータ構成の例を示す。メモリテーブル／デバイステーブルは、図４Ａおよび図４Ｂのデバイス番号の列を含まない点を除いて第１実施形態と同等であるので説明を省略する。動作モードについても第１実施形態と同等であるので説明を省略する。なお、本実施形態では、デバイステーブルは、ユーザデータエリア（=Target）２０７ＡとLevel 2 Buffer２０７Ｄを示す２行のみとなる。ＭＰＵ２０２が参照／編集するメモリテーブルは構成管理情報格納領域２０３Ａに含まれる。
【００８４】
通常、メモリ２０３は、電源を遮断すると内容を消失する。そのため、構成管理情報（Shadow）格納領域２０７Ｃは、構成管理情報格納領域２０３Ａの内容を保持するための領域として使用する。第１実施形態における構成管理情報（Shadow）格納領域４Ａに相当する。
【００８５】
（Power On／構築手順）
本実施形態の場合、電源が投入されると、ＭＰＵ２０２は、ＦＷ２０５を使用して周辺のコントローラの初期化を行なう。このとき、メディアコントローラ２０４やメディア２０７、モータ／ヘッド２０６もＭＰＵ２０２からアクセス可能なように初期化される。
【００８６】
初期化後、ＭＰＵ２０２からメディア２０７へアクセス可能となった時点で、ＭＰＵ２０２は、不良領域の代替アドレス情報などを代替アドレス情報格納領域２０７Ｂから読み出し、メモリ２０３内へ置いておく。
【００８７】
ＦＷ２０５には、構成管理情報（Shadow）格納領域２０７Ｃのアドレスやサイズ、Level 1 Buffer２０３Ｂのサイズ、キャッシュの動作モードのデフォルト設定などが保管されており、ＭＰＵ２０２は、それらを参照して、メモリ２０３内に構成管理情報格納領域２０３Ａを確保し（図７のブロックＡ１に相当）、代替アドレス情報格納領域２０７Ｂと同様に、構成管理情報（Shadow）格納領域２０７Ｃの内容を構成管理情報格納領域２０３Ａへ読み出す（図７のブロックＡ２に相当）。ＭＰＵ２０２は、ＦＷ２０５に保管されているLevel 1 Buffer２０３Ｂのサイズ分をメモリ２０３内に確保し（図７のブロックＡ３に相当）、構成管理情報格納領域２０３Ａを参照して、Level 2 Buffer２０７Ｄを再構成する（図７のブロックＡ４に相当）。ＭＰＵ２０２は、これらの情報から、メモリテーブル、デバイステーブル、動作モードなどを決定し、キャッシュ動作を開始する。これらの処理が完了次第、ＨＤＤ２００は、ＨＯＳＴ１１０からの要求を受付可能になる。
【００８８】
ここでのポイントは、メモリテーブルを構成管理情報（Shadow）格納領域２０７Ｃから読み出したことで、前回の稼動時のキャッシュの学習状況を再現できることである。この実装例の場合、動作モードLevel 2 VolatileはNoである。
【００８９】
（シャットダウン手順）
本実施形態の場合、構成管理情報（Shadow）格納領域２０７Ｃが確保されているため、学習状況（＝メモリテーブル）を保存する必要がある。
【００９０】
シャットダウンの検出は、ATAコマンドならばStandby Immediateコマンド、SCSIコマンドならSTOP_UNITコマンドなどでシャットダウンの代替検出を行なう。これらの要求がＭＰＵ２０２に通知された場合、ＭＰＵ２０２は、動作モードのLevel 2 Volatileをチェックし（図８のブロックＢ１に相当；本実施形態では必ずNoである）、フラッシュ要求を受け付けた時と同様の処理を行ない、完了を待つ（図８のブロックＢ２に相当）。
【００９１】
フラッシュ要求が完了したら、ＭＰＵ２０２は、構成管理情報（Shadow）格納領域２０７Ｃに構成管理情報格納領域２０３Ａの内容を書き出し（図８のブロックＢ３に相当）、メディアコントローラ２０４を介して、メディア２０７に対し、フラッシュ処理と、本来の受け付けたコマンドに相当する処理を要求する。
【００９２】
（リクエストごとの処理）
（リード要求）および（ライト要求）
第１実施形態の同様なので、説明は省略する。
【００９３】
（フラッシュ要求）
第１実施形態とほぼ同様であるが、違いは、第１実施形態の構成管理情報（Shadow）格納領域２３が本実施形態では構成管理情報（Shadow）格納領域２０７Ｃとして確保されているため、図１１のブロックＥ６に相当する処理が必ず実行され、構成管理情報格納領域２０３Ａに格納されたメモリテーブル等の構成管理情報が構成管理情報（Shadow）格納領域２０７Ｃへ書き出される点である。
【００９４】
（初期化）
第１実施形態と同様に、キャッシュの初期化条件は、様々なものが想定される。この実施形態で最も安易な例として、Ｉ／Ｏパネル２００Ａの物理ボタンを使用した例を挙げる。ＨＤＤ２００が稼働中の状態で、Ｉ／Ｏパネル２００Ａの初期化ボタンが押下されたことをＭＰＵ２０２が検出すると、トリガ１が発生する。ＭＰＵ２０２は、メモリテーブルを検索し、Level 1 Buffer２０３Ｂを切り離し、同時に、割り当てられていたLevel 1 Buffer２０３Ｂの各ブロックのValid/Dirtyのマークを消去する（図１２のブロックＦ１に相当）。続いて、ＭＰＵ２０２は、メモリテーブルを検索し、Level 2 Buffer２０７Ｄを切り離し、同時に、割り当てられていたLevel 2 Buffer２０７Ｄの各ブロックのValid/Dirtyのマークを消去する（図１２のブロックＦ２に相当）。最後に、ＭＰＵ２０２は、メモリテーブルの再初期化を行う（図１２のブロックＦ３に相当）。
【００９５】
これらはすべて、ＭＰＵ２０２とメモリ２０３で実行されるため、瞬時に元の内容を読み出し可能となる。構成管理情報（Shadow）格納領域２０７Ｃの更新は、フラッシュ要求やシャットダウン要求の検出時に行う。
【００９６】
この操作は、ＯＳ等のセットアップが完了し、後述のDirtyフラッシュした後の通常の運用中に、ＨＤＤ２００が接続された計算機（ＨＯＳＴ１１０）のユーザが変わるタイミングで実施する。すると、新しいユーザは、直前のユーザが変更した内容を読み出すことができず、漏洩事故を防止することができる。
【００９７】
厳密にこの目的で本実施形態を実現する場合、Ｉ／Ｏパネル２００Ａの物理ボタンではなく、計算機起動時の認証を元に、特殊な要求を発行する方法のほうが有効である。
【００９８】
（Dirtyフラッシュ）
本実施形態の初期化と同様に、物理ボタンを使用した例を挙げる。ＨＤＤ２００が稼働中の状態で、Ｉ／Ｏパネル２００Ａのフラッシュボタンが押下されたことをＭＰＵ２０２が検出すると、トリガ２が発生する。
【００９９】
ＭＰＵ２０２は、トリガ２が発生すると、フラッシュ要求を受け付けたのと同様の処理を実行する（図１４のブロックＨ１に相当）。この処理によってLevel 1 Buffer２０３ＢのDirtyを減らし、Level 2 Buffer２０７Ｄからユーザデータエリア２０７Ａへのコピーを行う際の中間バッファとして利用できるようにする。
【０１００】
フラッシュ要求と同等の処理が完了すると、ＭＰＵ２０２は、Level 2 Buffer２０７ＤのDirtyなブロックをメモリテーブルから検索する（図１４のブロックＨ３に相当）。Dirtyなブロックを発見したら、ＭＰＵ２０２は、Level 2 Buffer２０７ＤをマージBufferへ読み出す（図１４のブロックＨ４に相当）。マージBufferは、Level 1 Buffer２０３Ｂとは別に確保した専用の中間バッファであったり、DirtyでないLevel 1 Buffer２０３Ｂを奪って使用したりする。Level 1 Buffer２０３Ｂの同ブロックがValidかつDirtyだった場合、ＭＰＵ２０２は、マージBufferとLevel 1 Buffer２０３Ｂ上の有効なデータを適切に結合して、マージBuffer上に再構築し（図１４のブロックＨ６に相当）、Level 1 Buffer２０３ＢのDirtyマークを消去する（図１４のブロックＨ７に相当）。Level 1 Buffer２０３Ｂの同ブロックがDirtyでなかった場合や、未割り当ての場合、またはマージ完了後、ＭＰＵ２０２は、マージBufferのデータをユーザデータエリア２０７Ａの該当ブロックに書き出し（図１４のブロックＨ８に相当）、Level 2 Buffer２０７ＤのDirtyマークを消去する（図１４のブロックＨ９に相当）。以上の処理（図１４のブロックＨ３〜ブロックＨ９に相当）は、Level 2 Buffer２０７ＤのDirtyなブロックが無くなるまで続けられる。
【０１０１】
Level 2 Buffer２０７ＤのDirtyなブロックが無くなった場合、ＭＰＵ２０２は、Level 1 Buffer２０３ＢのDirtyなブロックをメモリテーブルから検索する（図１４のブロックＨ１０に相当）。Level 1 Buffer２０３ＢのDirtyなブロックを発見したら、ＭＰＵ２０２は、Level 1 Buffer２０３ＢのDirtyなブロックのデータを、ユーザデータエリア２０７Ａの該当ブロックに書き出し（図１４のブロックＨ１１に相当）、Level 1 Buffer２１のDirtyマークを消去する（図１４のブロックＨ１２に相当）。以上の処理（図１４のブロックＨ１０〜ブロックＨ１２に相当）は、Level 1 Buffer２０３ＢのDirtyなブロックが無くなるまで続けられる。
【０１０２】
Dirtyなブロックが、Level 1 Buffer２０３Ｂ／Level 2 Buffer２０７Ｄ内に共に無くなったら、ＭＰＵ２０２は、動作モードをチェックする（図１４のブロックＨ１３に相当）。ライトキャッシュがまだ停止していなければ、一連の処理中に新たにDirtyなブロックが発生した可能性があるため、ＭＰＵ２０２は、動作モードのライトキャッシュを停止し（図１４のブロックＨ１４に相当）、Level 2 Buffer２０７ＤのDirtyなブロックのメモリテーブルからの検索（図１４のブロックＨ３に相当）から処理を繰り返す。ライトキャッシュが停止していれば、一連の書き出し処理が完了となる。
【０１０３】
この時点で，初めて、書き換えたデータがユーザデータエリア２０７Ａに書き出される。この状態のとき、ライトキャッシュは停止したままなので、このタイミングでＯＳのアップデート等のシステム更新処理を実施する。更新処理等が完了したら、再度、Ｉ／Ｏパネル２００Ａのフラッシュボタンを押下する。すると、トリガ３が発生し、ＭＰＵ２０２は、ライトキャッシュを再開させる（図１５のブロックＩ１に相当）。このフラッシュボタンは、計算機（ＨＯＳＴ１１０）の管理者以外はアクセスできないことが望ましい。
【０１０４】
（その他）
ＭＰＵ２０２は、構成管理情報を定期的に監視し、Level 2 Buffer２０７ＤのDirtyなブロックの占有率が予め設定された一定値を超えた際に、Ｉ／Ｏパネル２００ＡのＬＥＤにて警告通知を行ない、キャッシュの初期化／Dirtyフラッシュを促す。この監視は、サービス／ユーザアプリケーション１１のような監視アプリケーションでも代替可能である。
【０１０５】
以上のように、第１実施形態の情報処理装置と同様、本記憶装置においても、ライトバックキャッシュ動作中、メディアへのデータの書き出しをコントロールし、メディアの更新を妨げることで、データの流出リスクの低減およびシステム状態の維持（無認可ソフトウェアのインストールなどを後からキャンセルする）などが実現される。
【０１０６】
各実施形態の動作制御処理は、ソフトウェア（プログラム）によって実現することができるので、このソフトウェアを格納したコンピュータ読み取り可能な記憶媒体を通じてこのソフトウェアを通常のコンピュータにインストールして実行することにより、各実施形態と同様の効果を容易に実現することができる。
【０１０７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０８】
１…ＣＰＵ、２…メモリ、２Ａ…Level 1 Buffer、２Ｂ…構成管理情報格納領域、３…Ｉ／Ｏコントローラ、４…システムＨＤＤ、４Ａ…構成管理情報（Shadow）格納領域、４Ｂ…Level 2 Buffer、５…ＵＳＢメモリ、１０…ＯＳ、１１…サービス／ユーザアプリケーション、１２…ファイルシステムドライバ、１３…クラスドライバ、１４…フィルタドライバ、１５…ドライバ、１００…情報処理装置、１１０…ＨＯＳＴ、２００…ＨＤＤ、２００Ａ…Ｉ／Ｏパネル、２０１…ＰＨＹ、２０２…ＭＰＵ、２０３…メモリ、２０３Ａ…構成管理情報格納領域、２０４…メディアコントローラ、２０５…ＦＷ、２０６…モータ／ヘッド、２０７…メディア、２０７Ａ…ユーザデータエリア、２０７Ｂ…代替アドレス情報格納領域、２０７Ｃ…構成管理情報格納領域、３００…ＨＤＤ。
【図１】
2013250657.tif 000003
【図２】
2013250657.tif 000004
【図３Ａ】
2013250657.tif 000005
【図３Ｂ】
2013250657.tif 000006
【図４Ａ】
2013250657.tif 000007
【図４Ｂ】
2013250657.tif 000008
【図５】
2013250657.tif 000009
【図６】
2013250657.tif 000010
【図７】
2013250657.tif 000011
【図８】
2013250657.tif 000012
【図９】
2013250657.tif 000013
【図１０】
2013250657.tif 000014
【図１１】
2013250657.tif 000015
【図１２】
2013250657.tif 000016
【図１３】
2013250657.tif 000017
【図１４】
2013250657.tif 000018
【図１５】
2013250657.tif 000019
【図１６】
2013250657.tif 000020
【手続補正書】
【提出日】平成25年7月18日(2013.7.18)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、例えばＰＣ（Personal computer）に適用されるＨＤＤ（Hard disk drive）やＵＳＢ（Universal serial bus）メモリ等に好適なデータ管理技術に関する。
【背景技術】
【０００２】
近年、ビジネスユースおよびパーソナルユースの双方において、ＰＣが広く普及している。ＰＣには、ＲＡＭ、ＨＤＤ、ＵＳＢメモリ等、データの書き込み／読み出しが可能な様々な記憶装置が用いられる。そして、この種の記憶装置に関するデータの管理手法については、これまでも種々の提案がなされている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２７６６４６号公報
【特許文献２】特開２００９−１８７０６２号公報
【特許文献３】特開平９−２９７７１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば企業などでは、ｎ台のＰＣをｍ（ｎ＜ｍ）人の社員で利用すること、即ち、ＰＣを共用化することも良く行われている。
【０００５】
共用のＰＣの場合には、セキュリティやプライバシー保護の観点から、ユーザのデータがＰＣ内に残存したり、ＰＣ内のデータをユーザが持ち出し可能であったりすることは好ましくない。また、ＰＣのシステム状態に関わるデータの更新が随意に行われ得ることも好ましくない。
【０００６】
本発明は、例えばデータの流出を防止すべく補助記憶装置のデータ管理を適切に実行する情報処理装置、記憶装置およびデータ管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態によれば、情報処理装置は、第１の記憶装置と、第２の記憶装置と、キャッシング手段と、を具備する。キャッシング手段は、前記第２の記憶装置への書き込みデータを前記第１の記憶装置上に確保したキャッシュ領域に格納する。キャッシング手段は、書き込みデータ無効化手段を具備する。書き込みデータ無効化手段は、第１の事象が発生した場合、前記書き込みデータが格納されている前記キャッシュ領域のアドレスと前記書き込みデータが格納されるべき前記第２の記憶装置のアドレスとを対応づける管理情報を初期化して、データの書き込みが行われる前の状態に前記第２の記憶装置を復元する。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態の情報処理装置のシステム構成を示す図である。
【図２】第１実施形態の情報処理装置の階層化されたソフトウェア群を示す図である。
【図３Ａ】第１実施形態の情報処理装置で使用されるメモリテーブルの第１の例を示す図である。
【図３Ｂ】第１実施形態の情報処理装置で使用されるメモリテーブルの第２の例を示す図である。
【図４Ａ】第１実施形態の情報処理装置で使用されるデバイステーブルの第１の例を示す図である。
【図４Ｂ】第１実施形態の情報処理装置で使用されるデバイステーブルの第２の例を示す図である。
【図５】第１実施形態の情報処理装置が保持するメモリのブロック状態を示す図。
【図６】第１実施形態の情報処理装置が保持するキャッシュの動作モードのデータを示す図である。
【図７】第１実施形態の情報処理装置の起動時の動作手順を示すフローチャートである。
【図８】第１実施形態の情報処理装置のシャットダウン時の動作手順を示すフローチャートである。
【図９】第１実施形態の情報処理装置のリード要求時の動作手順を示すフローチャートである。
【図１０】第１実施形態の情報処理装置のライト要求時の動作手順を示すフローチャートである。
【図１１】第１実施形態の情報処理装置のフラッシュ要求時の動作手順を示すフローチャートである。
【図１２】第１実施形態の情報処理装置のトリガ１発生時の動作手順を示すフローチャートである。
【図１３】第１実施形態の情報処理装置の（補助記憶装置の）イジェクト時の動作手順を示すフローチャートである。
【図１４】第１実施形態の情報処理装置のトリガ２発生時の動作手順を示すフローチャートである。
【図１５】第１実施形態の情報処理装置のトリガ３発生時の動作手順を示すフローチャートである。
【図１６】第２実施形態の記憶装置を適用する計算機システムのシステム構成を示す図である。
【発明を実施するための形態】
【０００９】
データの流出を防止すべく補助記憶装置のデータ管理を適切に実行する情報処理装置を提供する。実施形態の情報処理装置は、第１の記憶装置と、第２の記憶装置と、キャッシング手段と、を具備する。キャッシング手段は、前記第２の記憶装置への書き込みデータを前記第１の記憶装置上に確保したキャッシュ領域に格納する。キャッシング手段は更に、第１の事象が発生した場合、前記書き込みデータが格納されている前記キャッシュ領域のアドレスと前記書き込みデータが格納されるべき前記第２の記憶装置のアドレスとを対応づける管理情報テーブルを初期化して、前記第２の記憶装置をデータの書き込みが行われる前の状態に復元する。
【００１０】
以下、実施の形態について図面を参照して説明する。
【００１１】
（第１実施形態）
まず、第１実施形態について説明する。
【００１２】
図１は、第１実施形態の情報処理装置のシステム構成を示す図である。
【００１３】
図１に示すように、情報処理装置１００は、中央処理装置（ＣＰＵ）１、主記憶装置（以下、メモリと称する）２、Ｉ／Ｏコントローラ３、補助記憶装置（以下、システムＨＤＤと称する）４等によって構成される。なお、ここでは、通常、Ｉ／Ｏコントローラ３に接続されるキーボード／マウス／モニタといった入出力装置は省略している。また、システム起動に必要な機能を持ったファームウェアなどが保存されるＲＯＭやフラッショメモリについても省略している。これらはシステム構成に依存しており、ＲＯＭやフラッショメモリは、ＣＰＵ１に直接またはＩ／Ｏコントローラ３を介して接続される。Ｉ／Ｏコントローラ３は、例えばＶＧＡコントローラ、ＳＡＴＡコントローラ、ＵＳＢコントローラ等、いくつかのコントローラを内蔵している。
【００１４】
オペレーティングシステム（ＯＳ）１０などの基本ソフトウェアは、システムＨＤＤ４に保存されている。ＣＰＵ１でファームウェアが動作し、システムＨＤＤ４に格納されている実行プログラムや構成情報をメモリ２に取り込むと、ＣＰＵ１とメモリ２だけでシステムが起動する。その後、メモリ２上に取り込まれた実行プログラムによって、Ｉ／Ｏコントローラ３、Ｉ／Ｏコントローラ３に接続された入出力デバイス、補助記憶装置の再初期化が行われる。
【００１５】
このとき、例えば図２に示すように階層化されたソフトウェア群が、最下位の段から上の段に向かい順次、初期化される。この再初期化は、ＯＳ１０が持つ各種のコントロールドライバからなるドライバ１５と呼ばれる実行プログラムによって実装される。Ｉ／Ｏコントローラ３に接続された各種入出力デバイス（例えばＨＤＤ、ＣＤ−ＲＯＭ）は、クラスドライバ１３と呼ばれるディスクドライバおよびＣＤＲＯＭドライバで初期化される。再初期化後は、クラスドライバ１３とドライバ１５とが、各コントローラ（ＳＡＴＡ，ＳＣＳＩ，ＲＡＩＤ，ＵＳＢ）と各種デバイスとをコントロールすることで、各種要求を実行する。システムＨＤＤ４やＵＳＢメモリ５などの補助記憶装置は、通常、ＦＡＴ３２やＵＤＦなどのファイルシステムで初期化される。ファイルシステムドライバ１２は、システムＨＤＤ４やＵＳＢメモリ５内のデータを管理している。このファイルシステムドライバ１２が初期化され、ＯＳ１０の基幹サービス部分の初期化／起動完了をもって、システムが起動したと通常言われる。
【００１６】
各種アプリケーション１６は、対応するファイルシステムドライバ１２を使用することによって、システムＨＤＤ４やＵＳＢメモリ５の物理的な構成や特性、Ｉ／Ｏコントローラ３内のコントローラを意識することなく、データを操作することが可能となっている。
【００１７】
図１に示した情報処理装置では、システムＨＤＤ４、メモリ２、ＣＰＵ１内のレジスタや演算器の速度差が大きく、最も遅い記憶装置の速度がそのままシステムの応答速度へ還元されてしまう。それを回避するため、キャッシュと呼ばれる技術が、さまざまな場所に階層化されて実装されている。例として、図１では、ＣＰＵ１とメモリ２との間にキャッシュメモリが設けられる構成を示している。このキャッシュの方式には、ダイレクトマップ式、完全連想式、n-Way Set連想式等がある。また、分類として、リードキャッシュとライトキャッシュとがある。管理方式として、ＬＲＵ、ＭＲＵ、ＬＦＵ等がある。
【００１８】
リードキャッシュは、頻繁に使用するプログラムコードおよびデータを、アクセス速度がより速い記憶装置（キャッシュメモリ）に記憶して、高速に読み出すものである。これにより、アクセス速度が遅い記憶装置へのアクセス頻度を下げることができる。一方、ライトキャッシュは、書き出すデータを最終段の記憶装置よりアクセス速度が速い記憶装置（キャッシュメモリ）へ一旦保存するだけで、書き出しが完了したことにする。実行中のプログラムは動作を継続し、その後、アクセス速度が速い記憶装置に保存したデータを最終段の記憶装置へまとめて書き出すことで、見かけ上の応答速度を向上させる。
【００１９】
図１では、ＣＰＵ１とメモリ２との間にキャッシュメモリを設ける構成を示したが、システムＨＤＤ４に対するキャッシュメモリとして、メモリ２の一部（例えば、データバッファ２Ａ）を使用することも一般的である。また、システムＨＤＤ４内部にキャッシュメモリが実装されることも一般的である。なお、キャッシュの実装形態は、前述の他に様々なものがあるが、ここでは、その詳細は省略する。
【００２０】
図１に示したNAND Flash Memory などで構成されるＵＳＢメモリ５は、リードは高速だがライトが遅いという特性を持つ。このようなＵＳＢメモリ５に対しては、ライトキャッシュを用いることはとても有効である。ところで、近年の企業の内部統制により、このＵＳＢメモリ５のように情報処理装置から容易に取り外せるデバイスへの情報の書き出しの許可を制御することが求められている。なお、ＳＡＴＡ，ＳＣＳＩ，ＲＡＩＤなども取り外しが可能なデバイスに設定できるが、以下の説明ではＵＳＢメモリ５を例にして説明する。また、接続インタフェースはＵＳＢに限らず、ＳＡＳ／ＳＡＴＡ／IEEE1394／Thunderboltインタフェース等であってもよい。
【００２１】
また、シンクライアント端末等で計算機を複数のユーザで共有する場合、直前のユーザが書き出した情報がシステムＨＤＤ４に残っていることは、情報セキュリティの観点から好ましくない。これを回避するために、直前のユーザが書き出した情報を確実に消し去る技術が求められている。
【００２２】
情報処理装置１００は、これらの要求に応えるための仕組みを備えたものであり、以下、この点について詳述する。
【００２３】
まず、その実現方法の概略を説明すると、通常のライトキャッシュは、ライト要求を完了通知した後で、フラッシュ処理を実行する。例えば、ＣＰＵ１、メモリ２、システムＨＤＤ４またはＵＳＢメモリ５のアイドル状態を検出し、他のプログラム実行を妨げない程度の負荷のタイミングで、キャッシュメモリ上で書き換えられたデータをシステムＨＤＤ４等に書き戻す。この書き戻す動作がフラッシュ処理である。
【００２４】
これに対して、実施形態の情報処理装置１００は、各デバイス（例えば、システムＨＤＤ４）へ書き出すデータは、一旦すべてライトキャッシュメモリに記憶させる。そして、書き出しが許可されたならば初めてフラッシュ処理を行なう。書き出しが許可されない限りデバイスへは全く書き出すことができない。ここで言う許可とは、サーバへの認証であったり、ユーザ操作であったりするが、特にこれと定めるものではない。このように、書き出すデータを一旦ライトキャッシュメモリに記憶せることで、該当データの読み出しも可能である。
【００２５】
（システム構成）
情報処理装置１００では、メモリ２内に専用のLevel 1 Buffer（データバッファ）２Ａと構成管理領域２Ｂとを確保する。構成管理領域２Ｂは、構成管理情報を記憶する領域である。ここでは、ＵＳＢメモリ５がキャッシュ動作時の高速化対象メモリである。また、システムＨＤＤ４はシステム起動時などで動作する補助記憶装置である。このシステムＨＤＤ４をキャッシュメモリとして使用する場合、システムＨＤＤ４に構成管理領域２Ｂの複製である構成管理領域（Shadow）４ＡとLevel 2 Buffer４Ｂ（データバッファ）とを確保する。Level 1 Buffer２Ａとして充分に大きな容量をメモリ２上に確保できる場合、図１に示した構成管理領域（Shadow）４ＡやLevel 2 Buffer４Ｂを使用しない構成も可能である。
【００２６】
しかし、現実的にはメモリ２は限られた容量であるため、Level 1 Buffer２Ａの領域を充分に大きく確保することは不可能である。そのため、ＵＳＢメモリ５へ書き出されるデータがLevel 1 Buffer２Ａの容量と比較して大きいことが想定される場合、Level 1 Buffer２Ａの容量不足に対処するため、システムＨＤＤ４内のLevel 2 Buffer４Ｂを割り当てる。この場合の構成では、構成管理領域（Shadow）４Ａは使用しない。なお、情報セキュリティの観点からは、Level 2 Buffer４Ｂが割り当てられたシステムＨＤＤ４は安易に取り外せないことが求められるが、必ずしもその必要は無い。
【００２７】
（コード構成）
図１に示す情報処理装置１００では、補助記憶装置であるシステムＨＤＤ４とＵＳＢメモリ５へのリクエストを全て監視する必要がある。このため、図２に示すドライバ１５とクラスドライバ１３との間の位置にフィルタドライバ１４を設ける構成とする。フィルタドライバ１４は、ＣＰＵ１が実行するＯＳのキャッシュ機能を実現している。フィルタドライバ１４は、クラスドライバ１３が発行する全てのリクエストを監視する。また、フィルタドライバ１４をコントロールするサービス／ユーザアプリケーション１１が情報処理装置１００に実装(install)される。サービス／ユーザアプリケーション１１は、ユーザインタフェースやサーバへの問い合わせなどを実行する。そして、フィルタドライバ１４は、クラスドライバ１３によるリクエストの監視とキャッシュ動作とを実行する。
【００２８】
（データ構成）
本実施形態では、キャッシュ動作を行うのは、フィルタドライバ１４である。フィルタドライバ１４がキャッシュ動作を行なうために必要なデータ構成の例を挙げる。
【００２９】
図３および図４は、キャッシュ動作時に構成管理領域２Ｂに記憶されるメモリテーブルおよびデバイステーブルの一例を示す。図３Ａおよび図３Ｂには、Level 1 Buffer２Ａのみをキャッシュメモリとして使用してキャッシュ動作を行なう場合のデータ構成の例を示す。また、図４Ａおよび図４Ｂには、Level 1 Buffer２ＡとLevel 2 Buffer４Ｂをキャッシュメモリとして使用してキャッシュ動作を行なう場合のデータ構成の例を示す。
【００３０】
図３には、一例として完全連想式のキャッシュメモリを使用した場合のメモリテーブルを図示している。図３Ａのメモリテーブルの形態では、Level 1 Buffer２Ａの容量と、管理単位であるブロックの大きさ（＝ブロックサイズ）とにより行（以下、この行をエントリーと呼ぶ）が増加する。さらに、図４Ａのメモリテーブルの形態では、Level 2 Buffer４Ｂの容量も加味される。メモリテーブルのブロック状態のカラムには、図５に示すようなブロック状態を表すデータが保存されている。キャッシュメモリの動作モードを示すデータを図６に示した。この動作モードを示すデータはメモリテーブルに対応付けられて構成管理領域２Ｂに記憶される。
【００３１】
図３Ａおよび図４Ａに示すメモリテーブルの「元のアドレス」のカラムには、「デバイス番号」と「Ｄｉｓｋアドレス／ブロックサイズ」のカラムが設けられている。「デバイス番号」のカラムには、キャッシュの対象とするデバイス、つまり高速化対象とするデバイスを図３Ｂ又は図４Ｂに示したデバイステーブルに設けたデバイス番号で示す。「Ｄｉｓｋアドレス／ブロックサイズ」のカラムには、「Ｄｉｓｋアドレス」÷「ブロックサイズ」で計算されたアドレスが示されている。このアドレスはキャッシュの対象とするデバイスにおける管理単位であるブロックのアドレスを示す。図３Ａおよび図４Ａに示すメモリテーブルの「割り当てアドレス」のカラムには、「Ｌｅｖｅｌ１アドレス」と「Ｌｅｖｅｌ２アドレス」が設けられている。「Ｌｅｖｅｌ１アドレス」には、キャッシュメモリとしてLevel 1 Buffer２Ａのブロックが割り当てられている場合の当該ブロックアのドレスを示す。「Ｌｅｖｅｌ２アドレス」には、キャッシュメモリとしてLevel 2 Buffer４Ｂのブロックが割り当てられている場合の当該ブロックのアドレスを示す。Level 1 Buffer２Ａ又はLevel 2 Buffer４Ｂがキャッシュメモリとして割り当てられていない場合には、「Ｌｅｖｅｌ１アドレス」のカラム又は「Ｌｅｖｅｌ２アドレス」のカラムに「Invalid」と示されている。ブロック状態のカラムには、図５に示すようなブロック状態を表すデータが保存されている。このブロック状態はキャッシュメモリとして割り当てられているLevel 1 Buffer２Ａ又はLevel 2 Buffer４Ｂのブロックの状態を示すデータである。
【００３２】
メモリテーブルについて図３Ａの最も上のエントリーを例に説明する。デバイス番号「001」が示すＵＳＢメモリ５において元のアドレス「0x56789a」が示すブロックがキャッシュの対象となるブロックである。このキャッシュ対象のブロックに対して、Level 1 Buffer２Ａのアドレス「0x12345678」で示すブロックがキャッシュメモリとして割り当てられている。Level 2 Buffer４Ｂはキャッシュメモリとして割り当てられていない。このため、「Ｌｅｖｅｌ２アドレス」のカラムに「Invalid」と設定されている。キャッシュメモリとして割り当てられたブロックがリードキャッシュとして使用されている場合には、「ブロック状態」における「Valid Bitmap」のすべてのビットがValidに設定される。つまり、当該ブロックのすべてのアドレスに対応する「Valid Bitmap」のビットがValidに設定される。一方、キャッシュメモリとして割り当てられたブロックがライトキャッシュとして使用されている場合には、データが書き込まれたアドレスに「Dirty」が設定される。
【００３３】
図３Ｂおよび図４Ｂに示すデバイステーブルには、「デバイス番号」と、「デバイスの識別子」、高速化対象となる「デバイス内のアドレス」、高速化対象アドレスを何に使用するかの「用途」が設定される。「デバイスの識別子」は、デバイス毎のユニークな識別子を使用するが、ここでは簡単な識別子で例示している。
【００３４】
図３Ｂに示すデバイステーブルの最も上のエントリーでは、デバイス番号「000」はシステムデバイス（ここでは、システムＨＤＤ４）であり、デバイス内アドレス「0x0-0x4000000」がキャッシュによる高速化対象のアドレスであることを示す。また、デバイステーブルの上から２番目のエントリーでは、デバイス番号「001」が取り外し可能なデバイス（ここでは、ＵＳＢメモリ５）であり，デバイス内アドレス「0x0-0x1000000」がキャッシュによる高速化対象のアドレスであることを示している。図３Ｂでは、取り外し可能なデバイスが高速化対象デバイス(Target)に設定されている。
一方、図４Ｂに示すデバイステーブルの最も上のエントリーでは、デバイス番号「000」はシステムデバイス（ここでは、システムＨＤＤ４）であり、デバイス内アドレス「0x200000-0x2000800」はLevel 2 Buffer４Ｂに割り当ててあることを示す。このときの同デバイスの他のアドレスは、キャッシュによる高速化の対象ではない。デバイス番号「001」については、図３Ｂに示すデバイステーブルと同様である。
【００３５】
図示していない例として、用途やデバイス内アドレスが空欄のものが存在し得る。これは、キャッシュによる高速化の対象でもないし，Level 2 Buffer４Ｂを確保したデバイスでもないことを示す。また、図４Ｂでは、Level 2 Buffer４Ｂはシステムデバイス（システムＨＤＤ４）に確保した例を挙げているが、他のデバイスを接続し、使用しても良い。この場合は、システムデバイスのデバイス内アドレスの設定は図３Ｂのようになり、高速化の対象となる。
【００３６】
なお、Level 2 Buffer４Ｂを使用した場合は、フィルタドライバ１４以外からの書き換えを禁止する必要がある。このため、クラスドライバ１３が発行した要求を監視し、Level 2 Buffer４Ｂへの書き換え要求を失敗させる。
【００３７】
（構築／起動手順）
本実施形態の場合、構成管理情報は、動作モードを示すデータとデバイステーブルのみが、システムデバイス（ここでは、システムＨＤＤ４）内にドライバ１５の初期化オプションとして保管されている。起動時にドライバ１５がそれらのオプション情報を受け取ると、メモリ２の構成管理領域２Ｂに、図３Ａおよび図４Ａ、図３Ｂおよび図４Ｂに示した各テーブルを構築する。本実施形態では、構成管理領域（Shadow）４Ａを確保していないため、前回の稼動時の学習状況（＝メモリテーブル）は、初期化した状態から動作を開始する。つまり、この実施形態の場合、動作モードを示すデータのLevel 2 VolatileはYesである。
【００３８】
図７は、情報処理装置１００の起動時の動作手順を示すフローチャートである。
【００３９】
フィルタドライバ１４は、起動すると、構成管理情報を格納するためにメモリ２に構成管理領域２Ｂを割り当てる（ブロックＡ１）。フィルタドライバ１４は、初期化オプションを参照し、構成管理領域（Shadow）４Ａが確保されていればそれを読み出し、追加の構成管理情報を得る（ブロックＡ２）。この実施形態では、構成管理領域（Shadow）４Ａは確保しない。
【００４０】
フィルタドライバ１４は、初期化オプションを参照し、メモリ２にLevel 1 Buffer２Ａを確保する（ブロックＡ３）。フィルタドライバ１４は、初期化オプションまたは構成管理領域２Ｂの構成管理情報を参照し、システムＨＤＤ４にLevel 2 Buffer４Ｂを確保する（ブロックＡ４）。これらの情報から、フィルタドライバ１４は、メモリテーブル、デバイステーブル、動作モードのデータなどを決定し、キャッシュ動作を開始する。
【００４１】
（シャットダウン手順）
本実施形態の場合、システムＨＤＤ４に構成管理領域（Shadow）４Ａが確保されていないため、学習状況（＝メモリテーブル）は保存する必要が無い。
【００４２】
図８は、情報処理装置１００のシャットダウン時の動作手順を示すフローチャートである。
【００４３】
サービス／ユーザアプリケーション１１からシャットダウンが通知されると、フィルタドライバ１４は、構成管理領域２Ｂの動作モードのデータのLevel 2 Volatileをチェックする（ブロックＢ１）。例えば、システムＨＤＤ４に構成管理領域（Shadow）４Ａが確保されていない場合、またはLevel 2 Buffer４Ｂがシステム起動毎に初期化するように設定されている場合、動作モードのデータのLevel 2 Volatileには“Yes”が設定されている。この場合、シャットダウン通知に際してフィルタドライバ１４が行なうことはない。
【００４４】
一方、システムＨＤＤ４に構成管理領域（Shadow）４Ａが確保されている場合、動作モードのデータのLevel 2 Volatileには“No”が設定されている。この場合、フィルタドライバ１４は、全ての高速化対象デバイスに対して、後述するフラッシュ要求を発行し、その動作の完了を待つ（ブロックＢ２）。フィルタドライバ１４は、フラッシュ要求が完了したら、構成管理領域２Ｂの内容を構成管理領域（Shadow）４Ａに書き出す（ブロックＢ３）。そして、フィルタドライバ１４は、構成管理領域（Shadow）４ＡやLevel 2 Buffer４Ｂを持つシステムＨＤＤ４に対し、本来のフラッシュ処理を要求する（ブロックＢ４）。
【００４５】
（リクエストごとの処理）
（リード要求）
図９は、情報処理装置１００のリード要求時の動作手順を示すフローチャートである。
【００４６】
フィルタドライバ１４は、アプリケーション１６からリードの要求を受け付けると、受け付けたリード要求のデバイス番号、およびリードアドレスが高速化対象であるか否かを判別する（ブロックＣ１）。高速化対象でない場合、フィルタドライバ１４は、通常のリード処理を実行し（ブロックＣ２）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。高速化対象であった場合、フィルタドライバ１４は、要求のリードアドレスがキャッシュされているかをメモリテーブルから検索し（ブロックＣ４）、Level 1 buffer２Ａでヒット、又はLevel 2 buffer４Ｂでヒット、又は両方でヒットしないミスのキャッシュ判定を行う。
【００４７】
Level 1 Buffer２Ａでヒットする場合、フィルタドライバ１４は、Level 1 Buffer２ＡからユーザBuffer２Ｃへヒットしたデータをコピーし（ブロックＣ５）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。ユーザBuffer２Ｃは、リード要求およびライト要求に含まれるコピーポイントで示したメモリ２の作業領域である。
【００４８】
また、Level 2 Buffer４Ｂでヒットの場合、フィルタドライバ１４は、Level 1 Buffer２Ａの中でDirtyを含まない空きブロックを検索する（ブロックＣ６）。空きブロックが見つからなかった場合、フィルタドライバ１４は、Level 2 Buffer４ＢからユーザBuffer２Ｃへデータを読み出し（ブロックＣ７）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。一方、空きブロックが見つかった場合、フィルタドライバ１４は、Level 1 Buffer２Ａの当該空きブロックをリード要求のデバイス、およびアドレスとして割り当てると共に、それに従いメモリテーブルをアップデートする（ブロックＣ８）。フィルタドライバ１４は、割り当てたLevel 1 Buffer２ＡにLevel 2 Buffer４Ｂからのデータを読み出す（ブロックＣ９）。更に、フィルタドライバ１４は、Level 1 Buffer２ＡからユーザBuffer２Ｃへデータをコピーし（ブロックＣ５）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。
【００４９】
両buffer２Ａ、４Ｂでミスした場合、フィルタドライバ１４は、動作モードのデータを参照し、リードキャッシュ動作をしているか否かを判別する（ブロックＣ１０）。リードキャッシュ動作をしていない場合、フィルタドライバ１４は、通常のリード処理を実行し（ブロックＣ１１）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。
【００５０】
リードキャッシュ動作をしていても、Level 1 Buffer２Ａの中でDirtyを含まない空きブロックを検索する（図９のブロックＣ１２）。空きブロックが見つからなかった場合も同様に通常のリード動作を実行し（ブロックＣ１１）、ＯＳ１０に対して処理終了を通知する（ブロックＣ３）。
【００５１】
ブロックＣ１２で、Dirtyを含まない空きブロックが見つかった場合、フィルタドライバ１４は、Level 1 Buffer２Ａの当該空きブロックをリード要求のデバイス、およびアドレスとして割り当てると共に、それに従ってメモリテーブルをアップデートする（ブロックＣ１３）。そして、フィルタドライバ１４は、高速化対象デバイス（ここでは、ＵＳＢメモリ４）から読み出したデータをこの割り当てたLevel 1 Buffer２Ａに読み出す（ブロックＣ１４）。更にフィルタドライバ１４は、そのLevel 1 Buffer２ＡからユーザBuffer２Ｃへデータをコピーし（ブロックＣ１５）、ＯＳ１０に対して処理終了を通知する（ブロックＣ１６）。
【００５２】
次にフィルタドライバ１４は、リード要求のアドレスに対してLevel 2 Buffer４Ｂが割り当て済みか否かを判別する（ブロックＣ１７）。割り当て済みであれば、フィルタドライバ１４は、Level 1 Buffer２Ａの内容をLevel 2 Buffer４Ｂへ書き出し（ブロックＣ１８）、終了する。ブロックＣ１７で、Level 2 Buffer４Ｂが未割り当てのとき、フィルタドライバ１４は、Level 2 Buffer４Ｂが確保されていない場合又はDirtyを含まないLevel 2 Buffer４Ｂを検索して見つからなかった場合のどちらに該当するか否かを判別する（ブロックＣ１９）。Level 2 Buffer４Ｂが確保されていない場合又はDirtyを含まないLevel 2 Buffer４Ｂが見つからなかった場合、フィルタドライバ１４は、そのまま処理を終了する。一方、Level 2 Buffer４Ｂが確保されており、かつ、Dirtyを含まないLevel 2 Buffer４Ｂが見つかった場合、フィルタドライバ１４は、リード要求のアドレスに対してLevel 2 Buffer４Ｂを割り当て、それに従いメモリテーブルをアップデートする（ブロックＣ２０）。そしてフィルタドライバ１４は、Level 1 Buffer２Ａの内容をLevel 2 Buffer４Ｂへ書き出し（ブロックＣ１８）、終了する。
【００５３】
（ライト要求）
図１０は、情報処理装置１００のライト要求時の動作手順を示すフローチャートである。
【００５４】
アプリケーション１６からライトの要求を受け付けると、フィルタドライバ１４は、受け付けたライト要求のデバイス番号，およびライトアドレスが高速化対象であるか否かを判別する（ブロックＤ１）。高速化対象でない場合、フィルタドライバ１４は、通常のライト処理を実行し（ブロックＤ２）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。高速化対象であった場合、フィルタドライバ１４は、要求のライトアドレスがキャッシュされているかをメモリテーブルから検索し、Level 1 Buffer２Ａでヒット、又はLevel 2 Buffer４Ｂでヒット、又は両方でミスのキャッシュ判定を行う（ブロックＤ４）。
【００５５】
Level 1 Buffer２ＡでヒットかつLevel 2 Buffer４Ｂでミスの場合、フィルタドライバ１４は、ユーザBuffer２Ｃに記憶されているライトしたいデータを既に割り当ててあるLevel 1 Buffer２Ａにコピーする（ブロックＤ５）。そして、フィルタドライバ１４は、Level 1 Buffer２ＡのデータをコピーしたブロックにDirtyを設定し（ブロックＤ６）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。
【００５６】
また、Level 2 Buffer４Ｂでヒットの場合、フィルタドライバ１４は、ユーザBuffer２Ｃに記憶されたライトしたいデータをLevel 2 Buffer４Ｂへコピーし（ブロックＤ７）、このデータがコピーされたLevel 2 Buffer４Ｂの該当ブロックにDirtyを設定する（ブロックＤ８）。次にフィルタドライバ１４は、Level 1 Buffer２Ａもヒットしているか否かを判別する（ブロックＤ９）。そして、Level 1 Buffer２Ａもヒットしていた場合、ユーザBuffer２Ｃに記憶されたライトしたいデータを既に割り当ててあるLevel 1 Buffer２Ａにコピーする（ブロックＤ５）。更にフィルタドライバ１４は、このデータがコピーされたLevel 1 Buffer２Ａの該当ブロックにDirtyを設定して（ブロックＤ６）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。ブロックＤ９でLevel 1 Buffer２Ａにミスである場合、フィルタドライバ１４は、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。
【００５７】
両Buffer２Ａ，４Ｂでミスした場合、フィルタドライバ１４は、ライトキャッシュが動作中か否かのチェックを行う（ブロックＤ１０）。ライトキャッシュ動作が停止中の場合、フィルタドライバ１４は、通常のライト処理を実行し（ブロックＤ１１）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。
【００５８】
ブロックＤ１０でライトキャッシュが動作中と判定された場合、フィルタドライバ１４は、Level 1 Buffer２ＡのDirtyを含まない空きブロックを検索する（ブロックＤ１２）。空きブロックが見つからなかった場合、フィルタドライバ１４は、ＯＳ１０に対してエラー終了を通知する（ブロックＤ１３）。ブロックＤ１２で空きブロックが見つかった場合、フィルタドライバ１４は、ライト要求のアドレスに対してLevel 1 Buffer２Ａの当該空きブロックを割り当てると共に、それに従いメモリテーブルをアップデートする（ブロックＤ１４）。フィルタドライバ１４は、ユーザBuffer２Ｃに記憶されたライトしたいデータをその割り当てたLevel 1 Buffer２Ａの空きブロックにコピーする（ブロックＤ５）。そしてフィルタドライバ１４は、このデータがコピーされたLevel 1 Buffer２Ａの該当ブロックにDirtyを設定して（ブロックＤ６）、ＯＳ１０に対して処理終了を通知する（ブロックＤ３）。
【００５９】
（フラッシュ要求）
図１１は、情報処理装置１００のフラッシュ要求時の動作手順を示すフローチャートである。このフラッシュ要求の動作は、後述する図１４のブロックＨ１において実行される。
【００６０】
サービス／ユーザアプリケーション１１からフラッシュの要求を受け付けると、フィルタドライバ１４は、受け付けたフラッシュ要求のデバイス、およびアドレスが高速化対象であるか否かを判別する（ブロックＥ１）。高速化対象でない場合、フィルタドライバ１４は、通常のフラッシュ処理を実行し（ブロックＥ２）、ＯＳ１０に対して処理終了を通知する（ブロックＥ３）。ブロックＥ１でフラッシュ要求されたデバイス、およびアドレスが高速化対象であると判別された場合、フィルタドライバ１４は、Level 2 Buffer４Ｂを確保しているか否かを判別する（ブロックＥ４）。Level 2 Buffer４Ｂを確保していなければ、フィルタドライバ１４は、何もせずそのままＯＳ１０に対して処理終了を通知する（ブロックＥ３）。
【００６１】
ブロックＥ４でLevel 2 Buffer４Ｂが確保されていると判別された場合、フィルタドライバ１４は、Dirtyが設定されたブロックがLevel 1 Buffer２Ａにあるか否かをメモリテーブルから検索する（ブロックＥ５）。Dirtyなブロックが見つからなかった場合、構成管理領域（Shadow）４Ａが確保されていれば、フィルタドライバ１４は、構成管理領域（Shadow）４Ａに構成管理領域２Ｂの構成管理情報を書き出す（ブロックＥ６）。そしてフィルタドライバ１４は、Level 2 Buffer４Ｂに対しフラッシュ処理を実行し（ブロックＥ７）、ＯＳ１０に対して処理終了を通知する（ブロックＥ３）。なお、実施形態では、構成管理領域（Shadow）４Ａは確保していないので、ブロックＥ６は実行されないで、ブロックＥ７に移行する。
【００６２】
ブロックＥ５でLevel 1 Buffer２ＡにDirtyが設定されたブロックが見つかった場合、フィルタドライバ１４は、この見つけたLevel 1 Buffer２ＡにおけるDirtyが設定されたブロックが割り当てられていることを示すメモリテーブルのエントリーのLevel 2 アドレスのカラムを参照することで、Level 2 Buffer４Ｂが割り当てされているかをチェックする（ブロックＥ８）。未割り当ての場合、フィルタドライバ１４は、Level 2 Buffer４Ｂを割り当てると共に、それに従いメモリテーブルを更新する（ブロックＥ９）。そしてフィルタドライバ１４は、Level 1 Buffer２ＡのDirtyが設定されたブロックのデータをLevel 2 Buffer４Ｂへ書き出す（ブロックＥ１０）。次にフィルタドライバ１４は、Level 1 Buffer２ＡのDirtyの設定を消去して（ブロックＥ１１）、Level 2 Buffer４Ｂの割り当てたブロックにDirtyを設定する（ブロックＥ１２）。このブロックＥ５〜ブロックＥ１２の処理は、Level 1 Buffer２ＡからDirtyの設定が無くなるまで繰り返される。Level 1 Buffer２ＡからDirtyの設定が無くなると、ブロックＥ５からブロックＥ６、Ｅ７，Ｅ３の処理を実行して終了する。
【００６３】
ここでのポイントは、データをLevel 2 Buffer４Ｂに書き出すだけで終了し、まだ高速化対象デバイスであるＵＳＢメモリ５へ書き出していないことである。
【００６４】
（初期化）
キャッシュの初期化条件は、様々なものが想定されるが、代表的な例として、ユーザ操作によるものを例に挙げる。サービス／ユーザアプリケーション１１は、ユーザインタフェースに接続されている。情報処理装置１００のユーザインタフェースとして、対象デバイス毎にキャッシュの内容を消去するスイッチ又はボタンが配置されている。このボタン押下が、トリガ１となる。
【００６５】
図１２は、情報処理装置１００のトリガ１発生時の動作手順を示すフローチャートである。
【００６６】
トリガ１を発生させる場合、サービス／ユーザアプリケーション１１は、フィルタドライバ１４に対して「特殊な要求１」を発行する。フィルタドライバ１４は、トリガ１が発生すると、メモリテーブルを検索し、高速化対象デバイス（ここでは、ＵＳＢメモリ５）のキャッシュ動作に割り当てたLevel 1 Buffer２Ａに“Invalid”を設定して切り離すと同時に、Level 1 Buffer２Ａの各ブロックのValid/Dirtyの設定を消去する（ブロックＦ１）。続いて、フィルタドライバ１４は、メモリテーブルを検索し、高速化対象デバイスのキャッシュ動作に割り当てたLevel 2 Buffer４Ｂに“Invalid”を設定して切り離すと同時に、Level 2 Buffer４Ｂの各ブロックのValid/Dirtyの設定を消去する（ブロックＦ２）。このブロックＦ１、Ｆ２の実行により、キャッシュ動作に割り当てたLevel 1 Buffer２ＡおよびLevel 2 Buffer４Ｂの内容が消去（無効化）される。最後に、フィルタドライバ１４は、別なデバイス用の有効なブロック（＝他の高速化対象デバイスの情報）を残してメモリテーブルの再初期化を行う（ブロックＦ３）。
【００６７】
これらはすべてメモリ２内で実行されるため、瞬時に元の内容を読み出し可能となる。
【００６８】
（イジェクト）
本実施形態では、高速化対象デバイスがＵＳＢメモリ５なので、情報処理装置１００から容易に取り外しが可能である。この取り外しには、ＯＳ１０から予告して取り外す方法と、予告なしに取り外す方法とがある。本実施形態では、どちらも方法であっても、フィルタドライバ１４自身が取り外しの現象を検出し、トリガ１が発生した場合と同等の動作を行う。
【００６９】
図１３は、情報処理装置１００のイジェクト時の動作手順を示すフローチャートである。
【００７０】
イジェクトを検出すると、フィルタドライバ１４は、まず取り外されたのは高速化対象デバイス（以下では、ＵＳＢメモリ５を例に説明する）であるか否かを判別する（ブロックＧ１）。ＵＳＢメモリ５でなければ、フィルタドライバ１４は、何もしない。もしＵＳＢメモリ５であるならば、フィルタドライバ１４は、ＵＳＢメモリ５のデータを含むブロックをメモリテーブルから検索する（ブロックＧ２）。データが見つからなかった場合、フィルタドライバ１４は、何もしない。
【００７１】
ブロックＧ２で、ＵＳＢメモリ５のデータを含むブロックを見つけた場合、フィルタドライバ１４は、メモリテーブルを検索して、ＵＳＢメモリ５のキャッシュ動作に割り当てたLevel 1 Buffer２Ａに“Invalid”を設定して切り離すと共に、Level 1 Buffer２Ａの各ブロックのDirty／Validの設定を消去する（ブロックＧ３）。同様にして、フィルタドライバ１４は、ＵＳＢメモリ５のキャッシュ動作に割り当てたLevel 2 Buffer４Ｂに“Invalid”を設定して切り離すと共に、Level 2 Buffer４Ｂの各ブロックのDirty／Validの設定を消去する（ブロックＧ４）。フィルタドライバ１４は、ブロックＧ２〜ブロックＧ４の処理を、メモリテーブルからＵＳＢメモリ５のデータを含むブロックが無くなるまで繰り返す。このブロックＧ３、Ｇ４の実行により、キャッシュ動作に割り当てたLevel 1 Buffer２ＡおよびLevel 2 Buffer４Ｂの内容が消去（無効化）される。
【００７２】
これにより、ＵＳＢメモリ５へ書き出したデータが瞬時に消え去ることで、データが流出することを未然に防ぐことが可能となる。
【００７３】
（Dirtyなブロックのフラッシュ）
キャッシュメモリに記憶したデータのデバイスへの書き出し条件は、様々なものが想定されるが、代表的な例として，ユーザ操作によるものを例に挙げる。サービス／ユーザアプリケーション１１は、ユーザインタフェースと接続されている。情報処理装置１００のユーザインタフェースとして、キャッシュメモリに記憶したデータをデバイスに書き出すことを許可するスイッチ又はボタンが配置されている。このボタン押下が、トリガ２となる。
【００７４】
図１４は、情報処理装置１００のトリガ２発生時の動作手順を示すフローチャートである。
【００７５】
トリガ２を発生させる場合、サービス／ユーザアプリケーション１１は、フィルタドライバ１４に対して「特殊な要求２」を発行する。フィルタドライバ１４は、トリガ２が発生すると、書き出しが許可された高速化対象デバイス（以下、ＵＳＢメモリ５を例に説明する）に対して図１１に示したフラッシュ要求を発行する（ブロックＨ１）。フィルタドライバ１４は、この処理によって、Level 1 Buffer２ＡのDirtyなブロックを減らし、Level 1 Buffer２Ａの一部をマージバッファ２Ｄとして利用できるようにする。マージバッファ２Ｄは、Level 2 Buffer４Ｂに記憶されているデータをＵＳＢメモリ５へコピーする際に使用する。Level 2 Buffer４Ｂが確保されていなければ、何もせずに完了が通知される。この場合、DirtyなブロックはLevel 1 Buffer２Ａのみに存在するため、特に問題は発生しない。
【００７６】
図１１の処理によりフラッシュ要求の完了が通知されると、フィルタドライバ１４は、メモリテーブルを参照してLevel 2 Buffer４Ｂが確保されているか否かをチェックする（ブロックＨ２）。Level 2 Buffer４Ｂが確保されていれば、フィルタドライバ１４は、メモリテーブルを参照してLevel 2 Buffer４ＢにおいてDirtyと設定されたブロックを検索する（ブロックＨ３）。Level 2 Buffer４ＢにDirtyなブロックを発見したら、フィルタドライバ１４は、Level 2 Buffer４Ｂの当該ブロックのデータをマージBuffer２Ｄへ読み出す（ブロックＨ４）。ここでは、マージBuffer２ＤをLevel 1 Buffer２Ａ内に設けたが、Level 1 Buffer２Ａとは別に確保した専用の中間バッファであってもよい。
【００７７】
フィルタドライバ１４は、ブロックＨ３にてLevel 2 Buffer４ＢのDirtyなブロックが割り当てられていることを見つけたメモリテーブルのエントリーにおけるLevel 1アドレスのカラムを参照してLevel 1 Buffer２Ａのブロックがキャッシュメモリとして割り当てられているかをチェックする。Level 1 Buffer２Ａのブロックがキャッシュメモリとして割り当てられている場合には、更に上記エントリーにおけるブロック状態のカラムを参照して、Level 1 Buffer２Ａのブロックの状態がValidでかつDirtyかを判別する（ブロックＨ５）。ブロックの状態がValidでかつDirtyであった場合、フィルタドライバ１４は、マージBuffer２ＤとLevel 1 Buffer２Ａ上の有効なデータを適切に結合して、マージBuffer２Ｄ上にデータを再構築する（ブロックＨ６）。そしてフィルタドライバ１４は、Level 1 Buffer２ＡのValidとDirtyの設定を消去する（ブロックＨ７）。
【００７８】
ブロックＨ５で、Level 1 Buffer２Ａのブロックがキャッシュメモリとして割り当てられていないと判定された場合又はキャッシュメモリとして割り当てられたLevel 1 Buffer２Ａのブロックの状態がValidでかつDirtyでない場合、及びブロックＨ７の処理が完了後、フィルタドライバ１４は、マージBuffer２ＤのデータをＵＳＢメモリ５に書き出す（ブロックＨ８）。次に、フィルタドライバ１４は、Level 2 Buffer４ＢのDirtyとの設定を消去する（ブロックＨ９）。このブロックＨ３〜ブロックＨ９の処理は、Level 2 Buffer４ＢにDirtyなブロックが無くなるまで続けられる。
【００７９】
ブロックＨ２でLevel 2 Buffer４Ｂが確保されていない場合、および、ブロックＨ３でLevel 2 Buffer４ＢにDirtyなブロックが無くなった場合、フィルタドライバ１４は、Level 1 Buffer２ＡにおいてDirtyなブロックをメモリテーブルから検索する（ブロックＨ１０）。Level 1 Buffer２ＡにDirtyなブロックを発見したら、フィルタドライバ１４は、Level 1 Buffer２ＡのDirtyなブロックのデータをＵＳＢメモリ５に書き出し（ブロックＨ１１）、Level 1 Buffer２ＡのDirtyマークを消去する（ブロックＨ１２）。このブロックＨ１０〜ブロックＨ１２の処理は、Level 1 Buffer２ＡにDirtyなブロックが無くなるまで続けられる。
【００８０】
ブロックＨ１０でLevel 1 Buffer２Ａ及びLevel 2 Buffer４Ｂ内にDirtyなブロックが共に無くなったら、フィルタドライバ１４は、動作モードのデータをチェックする（ブロックＨ１３）。そのチェック結果で、動作モードのデータの変数名 Write Cache Enable/DisableがDisableに設定された状態であれば、一連の書き出し処理が完了となる。一方、変数名 Write Cache Enable/DisableがEnableに設定された状態であれば、一連の処理中に新たにDirtyなブロックが発生する可能性があるため、フィルタドライバ１４は、動作モードのデータの変数名 Write Cache Enable/DisableをDisableに設定し（ブロックＨ１４）、ブロックＨ２からの処理を繰り返す。
【００８１】
この処理で、書き換えたデータがＵＳＢメモリ５（書き出しが許可された高速化対象デバイス）上へ全て書き出されたことになる。この状態のとき、ライトキャッシュは停止しているので、このタイミングでのみ最新のデータを維持したままＵＳＢメモリ５のイジェクトが可能である。ＵＳＢメモリ５をイジェクトせずに放置したり、ユーザ操作により書き換えが禁止されたりすると、サービス／ユーザアプリケーション１１は、フィルタドライバ１４に対して「特殊な要求３」を発行する。これがトリガ３となり、フィルタドライバ１４は、ライトキャッシュを再稼動させる（図１５のブロックＩ１）。
【００８２】
（その他）
サービス／ユーザアプリケーション１１は、フィルタドライバ１４が出力する構成管理情報のサマリを定期的に監視する。そして、サービス／ユーザアプリケーション１１はLevel 2 Buffer４Ｂが未割り当ての時には、Level 1 Buffer２ＡのDirtyなブロックの占有率が予め設定された一定値を超えた際に、ユーザへ警告通知を行ない、キャッシュの初期化／Dirtyフラッシュを促す。Level 2 Buffer４Ｂが割り当て済みの場合には、サービス／ユーザアプリケーション１１は、Level 2 Buffer４ＢのDirtyなブロックの占有率が予め設定された一定値を超えた際に、ユーザへ警告通知を行ない、キャッシュの初期化／Dirtyフラッシュを促す。
【００８３】
以上のように、実施形態の情報処理装置によれば、ライトキャッシュ動作中、ＵＳＢメモリ５へのデータの書き出しをコントロール（データ更新を妨げる）することで、データの流出リスクを低減できる。
【００８４】
（第２実施形態）
次に、第２実施形態について説明する。
【００８５】
（システム構成）
図１６は、第２実施形態の計算機システムを示す図である。ＨＤＤ２００／ＨＤＤ３００は補助記憶装置である。ＨＤＤ２００／ＨＤＤ３００は、ＨＯＳＴ１１０とＳＡＴＡ／ＳＡＳ／ＵＳＢなどのインタフェースにより接続される。ＨＯＳＴ１１０のＩ／Ｏコントローラ３は、ＰＨＹ２０１を介してＨＤＤ２００のメインコントローラ（以下、ＭＰＵと称する）２０２に接続される。
【００８６】
ＭＰＵ２０２は、ＨＯＳＴ１１０からの各種要求を解釈し、適切にメモリ２０３およびメディアコントローラ２０４を制御する。ＭＰＵ２０２及びメディアコントローラ２０４では、ＦＷ（ファームウェア）２０５に格納された制御プログラムが実行されている。また、メディアコントローラ２０４は、ＭＰＵ２０２の要求に従い、モータ／ヘッド２０６の位置制御、タイミング信号の生成、メディア２０７に対する読み出し制御、書き込みデータの変調制御、及びエラー訂正制御などを行う。
【００８７】
メディア２０７には、ＨＯＳＴ１１０が直接アクセスすることができる領域としてユーザデータエリア２０７Ａが設けられている。また、ＨＯＳＴ１１０から隠れた領域には、不良領域の代替アドレス情報やＭＰＵ２０２が使用する構成管理情報の代替アドレス情報が格納される代替アドレス領域２０７Ｂ、および上述した構成管理領域２０７Ｃ、Level 2 Buffer２０７Ｄが設けられている。一般的なローテーションメディアを持つ補助記憶装置では、メディア２０７やモータ／ヘッド２０６で発生する機械的な移動時間を隠蔽するために、メモリ２０３を使用した先読みキャッシュやライトキャッシュをＭＰＵ２０２にて実現している。第２の実施形態では、このライトキャッシュに対して追加のロジックを加えている。
【００８８】
より具体的には、ＨＤＤ２００のメモリ２０３内に専用のLevel 1 Buffer（データバッファ）２０３Ｂと、構成管理情報を格納する構成管理領域２０３Ａを確保する。ここでは、メディア２０７のユーザデータエリア２０７Ａがキャッシュ動作での高速化対象デバイスである。そして、ＨＯＳＴ１１０から直接使用できないメディア２０７のエリアに、構成管理情報のコピーを格納する構成管理領域（Shadow）２０７ＣとLevel 2 Buffer（データバッファ）２０７Ｄとを準備する。
【００８９】
Ｉ／Ｏパネル２００Ａは、第２実施形態に固有のユーザインタフェースである。第２の実施形態では、アクセス中のＬＥＤが点灯するパネルに入力スイッチも備えており、ＭＰＵ２０２へ指示を与えることが可能である。このＩ／Ｏパネル２００Ａからの指示は、ＨＯＳＴ１１０からの特殊な要求で代替することも可能である。ここでは、Ｉ／Ｏパネル２００Ａに２つのボタンを図示している。２つのボタンの一方は初期化ボタンＢ１であり、他方はフラッシュボタンＢ２である。また、２つのＬＥＤを図示しているが、一方はアクセスランプＬ１であり、他方はDirty増加警告ランプＬ２である。
【００９０】
なお、ＨＤＤ３００もＨＤＤ２００と同様の動作をしても良い。この場合、必要であれば、ＨＤＤ３００にも専用のＩ／Ｏパネル２００Ａを接続してもよい。
【００９１】
第２実施形態が第１実施形態と異なる点は、シャットダウンが行われても書き込みデータが維持され、かつ、瞬時に元のデータを読み出し可能となる点にある。
【００９２】
（コード構成）
図１６に示した構成では、ＨＤＤ２００に対する全ての要求をＭＰＵ２０２で監視するとしている。このため、第１実施形態と同様のライトキャッシュのロジックをＭＰＵ２０２が実行するファームウェア（ＦＷ２０５）に格納する。
【００９３】
ここでは、ＨＤＤ２００にＩ／Ｏパネル２００Ａが接続されているとしたが、ＨＯＳＴ１１０内で稼働するサービス／ユーザアプリケーション１１のような管理アプリケーションによって代替しても良い。Ｉ／Ｏパネル２００Ａが接続されていない場合でも、ＨＯＳＴ１１０内で稼働するサービス／ユーザアプリケーション１１に相当する管理アプリケーションを設けたほうが良い。なお、サービス／ユーザアプリケーション１１のようなアプリケーションが無くても、実施形態の目的の動作は実現できる。
【００９４】
（データ構成）
第２実施形態では、キャッシュ動作を行うのは、ＭＰＵ２０２である。ＭＰＵ２０２を動かすファームウェアはＦＷ２０５に格納されている。キャッシュ動作を行うために必要なデータ構成の例を挙げる。
【００９５】
第２実施形態では、構成管理領域（Shadow）２０７Ｃに予め構成管理情報が記憶されている。図１６ではLevel 2 Buffer２０７Ｄを使用したデータ構成の例を示す。構成管理情報であるメモリテーブル及びデバイステーブルは、図４Ａおよび図４Ｂのデバイス番号の列を持たない点を除いて、第１実施形態と同等であるので説明を省略する。動作モードテーブルについても第１実施形態と同等であるので説明を省略する。なお、第２実施形態では、デバイステーブルは、ユーザデータエリア（=Target）２０７ＡとLevel 2 Buffer２０７Ｄを示す２行のみとなる。ＭＰＵ２０２が参照／編集するメモリテーブルは構成管理領域２０３Ａに含まれる。
【００９６】
通常、揮発性のメモリ２０３は、電源を遮断すると内容を消失する。そのため、メディア２０７の構成管理領域（Shadow）２０７Ｃは、構成管理情報を保持するための領域として使用する。これは、第１実施形態における構成管理領域（Shadow）４Ａに相当する。
【００９７】
（Power On／構築手順）
第２実施形態の場合、補助記憶装置を含むシステム全体の電源が投入されると、ＨＤＤ２００のＭＰＵ２０２は、ＦＷ２０５を使用して周辺のコントローラの初期化を行なう。このとき、メディアコントローラ２０４、メディア２０７、及びモータ／ヘッド２０６もＭＰＵ２０２からアクセス可能なように初期化される。
【００９８】
初期化後、ＭＰＵ２０２からメディア２０７へアクセス可能となった時点で、ＭＰＵ２０２は、不良領域の代替アドレス情報などを代替アドレス領域２０７Ｂから読み出し、メモリ２０３に記憶する。
【００９９】
ＦＷ２０５には、構成管理領域（Shadow）２０７Ｃのアドレスやサイズ、Level 1 Buffer２０３Ｂのサイズ、および動作モードのデータのデフォルト内容などが保管されている。ＭＰＵ２０２は、ＦＷ２０５を参照して、メモリ２０３内に構成管理領域２０３Ａを確保する（図７のブロックＡ１に相当）。またＭＰＵ２０２は、代替アドレス領域２０７Ｂと同様に、構成管理領域（Shadow）２０７Ｃの内容をメモリ２０３の構成管理領域２０３Ａへ読み出す（図７のブロックＡ２に相当）。またＭＰＵ２０２は、ＦＷ２０５を参照して、メモリ２０３内にLevel 1 Buffer２０３Ｂを確保する（図７のブロックＡ３に相当）。またＭＰＵ２０２は、構成管理領域２０３Ａを参照して、Level 2 Buffer２０７Ｄを再構成する（図７のブロックＡ４に相当）。ＭＰＵ２０２は、構築したこれらの情報から、メモリテーブル、デバイステーブル、および動作モードのデータなどを決定し、キャッシュ動作を開始する。これらの処理が完了次第、ＨＤＤ２００は、ＨＯＳＴ１１０からの要求を受付可能になる。
【０１００】
ここでのポイントは、メモリテーブルを構成管理領域（Shadow）２０７Ｃから読み出したことで、前回の稼動時のキャッシュの学習状況を再現できることである。この実装例の場合、動作モードのデータの変数Level 2 Volatile/Nonvolatile
の設定はNonvolatileである。
【０１０１】
（シャットダウン手順）
第２実施形態の場合、構成管理領域（Shadow）２０７Ｃが確保されているため、メモリテーブルの内容を保存する必要がある。
【０１０２】
シャットダウンの検出は、ATAコマンドならばStandby Immediateコマンド、SCSIコマンドならSTOP_UNITコマンドなどでシャットダウンの代替検出を行なう。これらのコマンドがＭＰＵ２０２に通知された場合、ＭＰＵ２０２は、動作モードのデータの変数Level 2 Volatile/Nonvolatileをチェック（結果はNonvolatile）し（図８のブロックＢ１に相当）、フラッシュ要求を受け付けた時と同様の処理を行ない、完了を待つ（図８のブロックＢ２に相当）。
【０１０３】
一方、フラッシュ要求が完了したら、ＭＰＵ２０２は、構成管理領域（Shadow）２０７Ｃに構成管理領域２０３Ａの内容を書き出す（図８のブロックＢ３に相当）。そしてＭＰＵ２０２は、メディアコントローラ２０４を介して、メディア２０７に対し、フラッシュ処理と、本来の受け付けたコマンドに相当する処理を要求する。
【０１０４】
（リクエストごとの処理）
リード要求およびライト要求は、第１実施形態の同様なので、説明は省略する。
【０１０５】
（フラッシュ要求）
第１実施形態とほぼ同様であるが、違いは、第２実施形態ではメディア２０７に構成管理領域（Shadow）２０７Ｃが確保されているため、図１１のブロックＥ６に相当する処理を必ず実行する点である。即ち、構成管理領域２０３Ａに格納されたメモリテーブル等の構成管理情報が構成管理領域（Shadow）２０７Ｃへ書き出す処理が必ず実行される。
【０１０６】
（初期化）
第１実施形態と同様に、キャッシュの初期化条件は、様々なものが想定される。この実施形態で最も代表的な例として、Ｉ／Ｏパネル２００Ａの物理ボタンを使用した例を挙げる。ＨＤＤ２００が稼働中の状態で、Ｉ／Ｏパネル２００Ａの初期化ボタンＢ１が押下されたことをＭＰＵ２０２が検出すると、トリガ１が発生する。ＭＰＵ２０２は、構成管理領域２０３Ａのメモリテーブルを検索し、高速化対象デバイスのキャッシュ動作に割り当てたLevel 1 Buffer２０３Ｂの各ブロックに“Invalid”を設定して切り離すと同時に、Level 1 Buffer２０３Ｂの各ブロックのValid/Dirtyの設定を消去する（図１２のブロックＦ１に相当）。続いて、ＭＰＵ２０２は、同様にメモリテーブルを検索し、高速化対象デバイスであるLevel 2 Buffer２０７Ｄの各ブロックに“Invalid”を設定して切り離すと同時に、Level 2 Buffer２０７Ｄの各ブロックのValid/Dirtyの設定を消去する（図１２のブロックＦ２に相当）。この処理により、Level 1 Buffer２０３ＢとLevel 2 Buffer２０７Ｄの内容が消去（無効化）される。最後に、ＭＰＵ２０２は、メモリテーブルの再初期化を行う（図１２のブロックＦ３に相当）。
【０１０７】
これらはすべて、ＭＰＵ２０２とメモリ２０３で実行されるため、瞬時に元の内容を読み出し可能となる。構成管理領域（Shadow）２０７Ｃの更新は、フラッシュ要求やシャットダウン要求の検出時に行う。
【０１０８】
この構成管理領域（Shadow）２０７Ｃの更新操作は、ＯＳ等のセットアップが完了し、後述のDirtyなブロックのフラッシュした後の通常の運用中に、ＨＤＤ２００が接続された計算機（ＨＯＳＴ１１０）のユーザが変わるタイミングで実施する。すると、新しいユーザは、直前のユーザが変更した内容を読み出すことができず、漏洩事故を防止することができる。
【０１０９】
厳密には、この目的で第２実施形態を実現する場合、Ｉ／Ｏパネル２００Ａの物理ボタンではなく、計算機起動時の認証を元に、特殊な要求を発行する方法のほうが有効である。
【０１１０】
（Dirtyなブロックのフラッシュ）
上述した初期化と同様に、物理ボタンを使用した例を挙げる。ＨＤＤ２００が稼働中の状態で、Ｉ／Ｏパネル２００ＡのフラッシュボタンＢ２が押下されたことをＭＰＵ２０２が検出すると、トリガ２が発生する。
【０１１１】
ＭＰＵ２０２は、トリガ２が発生すると、フラッシュ要求を受け付けたのと同様の処理を実行する（図１４のブロックＨ１に相当）。この処理によってLevel 1 Buffer２０３ＢのDirtyなブロックを減らし、Level 2 Buffer２０７Ｄからユーザデータエリア２０７Ａへデータをコピーする際の中間バッファ２０３ＣとしてLevel 1 Buffer２０３Ｂの一部を利用できるようにする。
【０１１２】
第１実施形態の図１１で説明したフラッシュ要求と同等の処理が完了すると、ＭＰＵ２０２は、Level 2 Buffer２０７ＤにおいてDirtyと設定されたブロックをメモリテーブルから検索する（図１４のブロックＨ３に相当）。Level 2 Buffer２０７ＤにDirtyなブロックを発見したら、ＭＰＵ２０２は、Level 2 Buffer２０７Ｄの当該ブロックのデータをマージBuffer２０３Ｄへ読み出す（図１４のブロックＨ４に相当）。ここでもマージBuffer２０３ＤをLevel 1 Buffer２０３Ｂ内に設けたが、Level 1 Buffer２０３Ｂとは別に確保した専用の中間バッファであってもよい。
【０１１３】
ＭＰＵ２０２は、Level 2 Buffer２０７ＤのDirtyなブロックが割り当てられていることを見つけたメモリテーブルのエントリーにおけるLevel 1アドレスのカラムを参照してLevel 1 Buffer２０３Ｂのブロックがキャッシュメモリとして割り当てられているかをチェックする。Level 1 Buffer２０３Ｂのブロックがキャッシュメモリとして割り当てられている場合には、更に上記エントリーにおけるブロック状態のカラムを参照して、Level 1 Buffer２０３Ｂのブロックの状態がValidでかつDirtyかを判別する（図１４のブロックＨ５に相当）。ブロックの状態がValidでかつDirtyであった場合、ＭＰＵ２０２は、マージBuffer２０３ＤとLevel 1 Buffer２０３Ｂ上の有効なデータを適切に結合して、マージBuffer２０３Ｄにデータを再構築する（図１４のブロックＨ６に相当）。そしてＭＰＵ２０２は、Level 1 Buffer２０３ＢのDirtyの設定を消去する（図１４のブロックＨ７に相当）。
【０１１４】
Level 1 Buffer２０３Ｂのブロックがキャッシュメモリとして割り当てられていないと判定された場合又はキャッシュメモリとして割り当てられたLevel 1 Buffer２０３Ｂのブロックの状態がValidでかつDirtyでない場合、及び上記図１４のブロックＨ７に相当の処理が完了後、ＭＰＵ２０２はマージBuffer２０３Ｄのデータをユーザデータエリア２０７Ａに書き出す（図１４のブロックＨ８に相当）。次に、ＭＰＵ２０２はLevel 2 Buffer２０７ＤのDirtyとの設定を消去する（図１４のブロックＨ９に相当）。以上の処理（図１４のブロックＨ３〜ブロックＨ９に相当）は、Level 2 Buffer２０７ＤにDirtyなブロックが無くなるまで続けられる。
【０１１５】
Level 2 Buffer２０７ＤにDirtyなブロックが無くなった場合、ＭＰＵ２０２は、Level 1 Buffer２０３ＢにDirtyと設定されたブロックをメモリテーブルから検索する（図１４のブロックＨ１０に相当）。Level 1 Buffer２０３ＢにDirtyなブロックを発見したら、ＭＰＵ２０２は、Level 1 Buffer２０３ＢのDirtyなブロックのデータを、ユーザデータエリア２０７Ａに書き出す（図１４のブロックＨ１１に相当）。そしてＭＰＵ２０２は、Level 1 Buffer２１のDirtyな設定を消去する（図１４のブロックＨ１２に相当）。以上の処理（図１４のブロックＨ１０〜ブロックＨ１２に相当）は、Level 1 Buffer２０３ＢのDirtyなブロックが無くなるまで続けられる。
【０１１６】
次に、Level 1 Buffer２０３ＢおよびLevel 2 Buffer２０７Ｄ内にDirtyなブロックが共に無くなったら、ＭＰＵ２０２は、動作モードのデータをチェックする。このチェックの結果として、変数 Write Cache Enable/Disable が Disableに設定されている場合には、一連の書き出し処理が完了となる（図１４のブロックＨ１３で判定がＹｅｓ相当）。一方、変数 Write Cache Enable/Disable が、まだ Enable であれば、一連の処理中に新たにDirtyなブロックが発生する可能性があるため、ＭＰＵ２０２は動作モードのデータの変数 Write Cache Enable/Disable を Disable に設定する（図１４のブロックＨ１４に相当）。その後、ＭＰＵ２０２は、Level 2 Buffer２０７ＤにおいてDirtyと設定されたブロックをメモリテーブルから検索する処理（図１４のブロックＨ３に相当）に戻り、以後の処理を繰り返す。
【０１１７】
この処理で、書き換えたデータがユーザデータエリア２０７Ａに全て書き出されたことになる。この状態のとき、ライトキャッシュは停止しているので、このタイミングでＯＳのアップデート等のシステム更新処理を実施する。更新処理等が完了したら、再度、Ｉ／Ｏパネル２００ＡのフラッシュボタンＢ２を押下する。すると、トリガ３が発生し、ＭＰＵ２０２は、ライトキャッシュを再開させる（図１５のブロックＩ１に相当）。このフラッシュボタンＢ２は、計算機（ＨＯＳＴ１１０）の管理者以外はアクセスできないことが望ましい。
【０１１８】
（その他）
ＭＰＵ２０２は、構成管理情報を定期的に監視する。そして、Level 2 Buffer２０７ＤのDirtyなブロックの占有率が予め設定された一定値を超えた際に、ＭＰＵ２０２はＩ／Ｏパネル２００ＡのＬＥＤにて警告通知を行ない、キャッシュの初期化／Dirtyなブロックのフラッシュを促す。この監視は、サービス／ユーザアプリケーション１１のような監視アプリケーションでも代替可能である。
【０１１９】
以上のように、第１実施形態の情報処理装置と同様、第２実施形態の記憶装置においても、ライトキャッシュ動作中、メディアへのデータの書き出しをコントロール（メディアの更新を妨げる）することで、データの流出リスクの低減でき、またシステム状態の維持できる。これにより、例えば無認可ソフトウェアのインストールなどを後からキャンセルすることができる。
【０１２０】
各実施形態の動作制御処理は、ソフトウェア（プログラム）によって実現することができるので、このソフトウェアを格納したコンピュータ読み取り可能な記憶媒体を通じてこのソフトウェアを通常のコンピュータにインストールして実行することにより、各実施形態と同様の効果を容易に実現することができる。
【０１２１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２２】
１…ＣＰＵ、２…メモリ、２Ａ…Level 1 Buffer、２Ｂ…構成管理情報格納領域、３…Ｉ／Ｏコントローラ、４…システムＨＤＤ、４Ａ…構成管理情報（Shadow）格納領域、４Ｂ…Level 2 Buffer、５…ＵＳＢメモリ、１０…ＯＳ、１１…サービス／ユーザアプリケーション、１２…ファイルシステムドライバ、１３…クラスドライバ、１４…フィルタドライバ、１５…ドライバ、１００…情報処理装置、１１０…ＨＯＳＴ、２００…ＨＤＤ、２００Ａ…Ｉ／Ｏパネル、２０１…ＰＨＹ、２０２…ＭＰＵ、２０３…メモリ、２０３Ａ…構成管理情報格納領域、２０４…メディアコントローラ、２０５…ＦＷ、２０６…モータ／ヘッド、２０７…メディア、２０７Ａ…ユーザデータエリア、２０７Ｂ…代替アドレス情報格納領域、２０７Ｃ…構成管理情報格納領域、３００…ＨＤＤ。