(57)【要約】      （修正有）【課題】書き込み制限を有する電子計算機の補助記憶装置への書き込みする回数を低減し、補助記憶装置の延命を実現する。【解決手段】共通インターフェース手段５０によって、補助記憶手段２５へ書き込みする書き込み命令及び書き込みデータを取得し、書き込みデータを前記電子計算機１の主記憶手段のキャッシュ領域７１に、キャッシュデータとして書き込みする。キャッシュ領域がキャッシュフル時等の特定条件のとき、キャッシュデータをまとめて前記補助記憶手段２５の記録領域に書き込みする。よって、電子計算機の補助記憶装置への書き込み回数を低減することができ、書き込み回数制限がある補助記憶装置の延命が実現できる。【選択図】図１
2010198368.tif 000002
【特許請求の範囲】
【請求項１】
入力デバイス（１６，１７）及び／又は出力デバイス、主記憶手段、並びに、補助記憶手段（２５）を備え、オペレーティングシステム（１１）によって制御されている電子計算機（１）において、前記補助記憶手段（２５）へデータを書き込みする回数を減らすためのドライバ制御手段であって、
Ａ）前記補助記憶手段（２５）へ前記データを書き込みする書き込みデータを取得する取得手段、
Ｂ）前記書き込みデータを、前記電子計算機（１）の主記憶手段のキャッシュ領域（７１）に、キャッシュデータとして書き込む書き込み手段、及び、
Ｃ）前記キャッシュデータをまとめて前記補助記憶手段（２５）の記録領域に書き込むフラッシュ手段
からなることを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項２】
請求項１に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記オペレーティングシステム（１１）は、デバイス（２２−２７）を制御するためのデバイスドライバ（３２−３８）を備え、
前記電子計算機（１）は、複数の前記デバイス（２２−２７）それぞれを制御するための前記デバイスドライバ（３２−３８）からなるデバイスドライバ層（３０）と、前記オペレーティングシステム（１１）がカーネルモードで提供する基本プログラム（６３）との間に位置するフィルタドライバ手段（５０）を有し、
前記フィルタドライバ手段（５０）は、前記オペレーティングシステム（１１）の全ての命令を実行できる動作モードであるカーネルモードで動作し、かつ、
(i)前記デバイスドライバ（３２−３８）の共通の窓口となるとともに、前記基本プログラム（６３）を通して行われる、前記デバイスドライバ（３２−３８）とアプリケーションプログラム（１０）とのやり取りをまとめて行ない、
(ii)前記アプリケーションプログラム（１０）から要求されたときに、前記複数のデバイス（２２−２７）の間、又は、前記アプリケーションプログラム（１０）と前記デバイス（２２−２７）の間のデータの送受信を行ない、
(iii)前記アプリケーションプログラム（１０）から前記電子計算機（１）の前記補助記憶装置（２５）に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム（１０）が標準で備えているインターフェースを通して、前記アプリケーションプログラム（１０）から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置（２５）とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機（１）を機能させるプログラムであり、
前記フィルタドライバ手段（５０）は、前記書き込みデータを取得し、前記キャッシュ領域（７１）に前記キャッシュデータとして書き込みし、及び、前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込みする
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項３】
請求項２に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記フィルタドライバ手段（５０）は、
前記書き込みデータを分析して、前記書き込みが集中する前記記録領域の集中記録領域を、特定し、
前記集中記録領域に書き込みされる前記書き込みデータを、前記キャッシュ領域（７１）に、前記キャッシュデータとして書き込みし、及び、
前記集中記録領域以外の前記記録領域に書き込みされる前記書き込みデータを、直接、前記記録領域書き込みする
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項４】
請求項２又は３に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記オペレーティングシステム（１１）は、前記補助記憶手段（２５）に格納されているファイルの読み出し又は書き出しを管理するファイルシステムを備え、
前記オペレーティングシステム（１１）は、前記ファイルシステムを制御するためのファイルシステムドライバ（３４）を備え、
前記フィルタドライバ手段（５０）は、
前記アプリケーションプログラム又は前記基本プログラムから、前記ファイルシステムドライバへのアクセス要求を受信するインターフェース手段（５１、５１ａ）と、
アクセス要求が前記書き込みデータを前記補助記憶手段（２５）に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域（７１）に前記キャッシュデータとして書き込みする書き込み処理手段（５７ａ）と、
アクセス要求が前記補助記憶手段（２５）からデータ読み込みする読み込み要求のとき、前記読み込みデータを前記キャッシュ領域（７１）及び／又は前記補助記憶手段（２５）から取得する読み込み処理手段（５６ａ）と、
前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込むフラッシュ処理手段（５５ａ）と、
前記アクセス要求を前記インターフェース手段（５１、５１ａ）から受信し、前記アクセス要求を分析して、前記アクセスが書き込み要求か読み込み要求かを判定し、書き込み処理手段（５７ａ）、読み込み処理手段（５６ａ）、及び、フラッシュ処理手段（５５ａ）の内１以上を実行させる制御手段（５２、５２ａ）と、
下位のデバイスドライバとのインターフェースを提供するデバイスドライバ制御部（４０、４０ａ）と
からなることを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項５】
請求項４に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記フィルタドライバ手段（５０）は、
前記補助記憶手段（２５）からデータを読み込みするための、又は、前記補助記憶手段（２５）にデータを書き込みするためのＩＲＰを作成し、前記デバイスドライバ制御部（４０、４０ａ）を介して、前記下位デバイスドライバ（３７）へ送信するＩＲＰ作成手段からなる
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項６】
請求項１乃至３の中から選択される１項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、
（Ｉ）前記キャッシュ領域がフルになったときに、
（II）定期的に、
（III）前記電子計算機がシャットダウンするとき、
（IV）前記オペレーティングシステムにログオンした利用者がログオフするとき、
（Ｖ）前記オペレーティングシステムがサスペンドになるとき、
（VI）前記オペレーティングシステムが休止になるとき、及び、
（VII）強制フラッシュコマンドのとき
の中から選択される１条件である
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項７】
請求項１乃至３の中から選択される１項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域である
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項８】
請求項１乃至３の中から選択される１項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータである
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項９】
請求項１乃至３の中から選択される１項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
フィルタドライバ手段（５０）は、前記補助記憶装置（２５）へ前記データを書き込みする書き込み回数、及び／又は、前記補助記憶装置（２５）の稼動時間に関する統計情報を取得し、前記補助記憶装置（２５）の推定稼動時間残量を計算し、前記アプリケーションプログラム（１０）又は、前記オペレーティングシステム（１１）に報告する報告手段を有する
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項１０】
請求項１乃至３の中から選択される１項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記補助記憶手段（２５）は、不揮発性メモリである
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項１１】
請求項１０に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記不揮発性メモリは、フラッシュメモリである
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項１２】
入力デバイス（１６，１７）及び／又は出力デバイス、主記憶手段、並びに、補助記憶手段（２５）を備え、オペレーティングシステム（１１）によって制御されている電子計算機（１）において、前記補助記憶手段（２５）へデータを書き込みする回数を減らすためのドライバ制御手段として、前記電子計算機を機能させるドライバ制御プログラムであって、
前記補助記憶手段（２５）へ書き込みする前記書き込みデータを取得するステップ、
前記書き込みデータを、前記電子計算機（１）の主記憶手段のキャッシュ領域（７１）に、キャッシュデータとして書き込むステップ、及び、
前記キャッシュデータをまとめて前記補助記憶手段（２５）の記録領域に書き込みするステップ
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項１３】
請求項１２に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記オペレーティングシステム（１１）は、デバイス（２２−２７）を制御するためのデバイスドライバ（３２−３８）を備え、
前記電子計算機（１）は、複数の前記デバイス（２２−２７）それぞれを制御するための前記デバイスドライバ（３２−３８）からなるデバイスドライバ層（３０）と、前記オペレーティングシステム（１１）がカーネルモードで提供する基本プログラム（６３）との間に位置するフィルタドライバプログラム（５０）を有し、
前記フィルタドライバプログラム（５０）は、前記オペレーティングシステム（１１）の全ての命令が実行できる動作モードであるカーネルモードで動作し、かつ、
（Ｉ）前記デバイスドライバ（３２−３８）の共通の窓口となるとともに、前記基本プログラム（６３）を通して行われる、前記デバイスドライバ（３２−３８）とアプリケーションプログラム（１０）とのやり取りをまとめて行ない、（II）前記アプリケーションプログラム（１０）から要求されたときに、前記複数のデバイス（２２−２７）の間、又は、前記アプリケーションプログラム（１０）と前記デバイス（２２−２７）の間のデータの送受信を行ない、（III）前記アプリケーションプログラム（１０）から前記電子計算機（１）の前記補助記憶装置（２５）に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム（１０）が標準で備えているインターフェースを通して、前記アプリケーションプログラム（１０）から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置（２５）とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機（１）を機能させるプログラムであり、
前記フィルタドライバプログラム（５０）は、
Ａ）前記補助記憶手段（２５）へ書き込みする書き込みデータを取得するインターフェースステップ（５１、５１ａ）、
Ｂ）前記書き込みデータを、前記電子計算機（１）の主記憶手段のキャッシュ領域（７１）に、キャッシュデータとして書き込む書き込みステップ（５７ａ）、及び、
Ｃ）前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込みするフラッシュステップ（５５ａ）
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項１４】
請求項１３に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム（５０）は、
前記アプリケーションプログラム又は前記基本プログラムから、前記ディスクへのアクセス要求を受信する前記インターフェースステップと、
前記アクセス要求が前記書き込みデータを前記補助記憶手段（２５）に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域（７１）に前記キャッシュデータとして書き込みする書き込みステップ（５７ａ）と、
前記アクセス要求が前記補助記憶手段（２５）から前記データを読み込みする読み込み要求のとき、前記データを前記キャッシュ領域（７１）及び／又は前記補助記憶手段（２５）から取得する読み込みステップ（５６ａ）と、
前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込むフラッシュステップ（５５ａ）と、及び、
（Ａ）前記アクセス要求を前記インターフェース手段（５１、５１ａ）から受信し、前記アクセス要求を分析して、前記アクセス要求が書き込み要求か読み込み要求かを判定し、（Ｂ）前記アクセス要求が書き込み要求のとき、前記書き込ステップ（５７ａ）を実行し、（Ｃ）前記アクセス要求が読み込み要求のとき、前記読み込みステップ（５６ａ）を実行し、及び、（Ｄ）前記フラッシュステップ（５５ａ）を実行する制御ステップ（５２、５２ａ）と、及び、
下位のデバイスドライバ（３７）とのインターフェースを提供するデバイスドライバ制御ステップ（４０、４０ａ）と
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項１５】
請求項１４に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム（５０）は、
前記補助記憶手段（２５）からデータを読み込みするための、又は、前記補助記憶手段（２５）にデータを書き込みするためのＩＲＰを作成し、前記デバイスドライバ制御ステップ（４０、４０ａ）を介して、前記下位デバイスドライバ（３７）へ送信するＩＲＰ作成ステップ（５８ａ）からなる
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項１６】
請求項１２乃至１４から選択される１項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域である
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項１７】
請求項１２乃至１４から選択される１項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータである
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項１８】
請求項１２乃至１４から選択される１項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、
（Ｉ）前記キャッシュ領域がフルになったときに、
（II）定期的に、
（III）前記電子計算機がシャットダウンするとき、
（IV）前記オペレーティングシステムにログオンした利用者がログオフするとき、
（Ｖ）前記オペレーティングシステムがサスペンドになるとき、
（VI）前記オペレーティングシステムが休止になるとき、及び、
（VII）強制フラッシュコマンドのとき
の中から選択される１条件である
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項１９】
請求項１２乃至１４から選択される１項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム（５０）は、
前記補助記憶装置（２５）へ前記データを書き込みする書き込み回数を取得するステップ、
前記補助記憶装置（２５）の稼動時間に関する統計情報を取得するステップ、
前記補助記憶装置（２５）の推定稼動時間残量を計算するステップ、及び、
前記アプリケーションプログラム（１０）又は、前記オペレーティングシステム（１１）に、前記フィルタドライバプログラム（５０）の状態を報告する報告ステップ
の内１以上のステップを有する
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項２０】
請求項１５に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記書き込むフラッシュステップ（５５ａ）は、
下位のデバイスドライバへ指示であるＩＲＰを作成するために前記ＩＲＰ作成ステップを実行するステップと、
前記キャッシュバッファ内の全データから前記補助記憶装置へ書き込むデータを計算するステップと、
前記キャッシュバッファのデータを管理するバッファ管理テーブル（７３）から、前記書き込みデータの補助記憶装置上の位置を取得するステップと、
前記位置に、前記書き込みデータを書き込む命令を前記ＩＲＰに入れて、前記下位デバイスドライバへ送信するステップと、
前記書き込みテータを前記補助記憶装置に書き込みした後、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ（７２）の中の前記位置に該当する値をリセットするステップと、
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項２１】
請求項１４に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記書き込みステップ（５７ａ）は、
前記書き込み要求から、オフセット、バッファデータ、データサイズを取得するステップと、
前記データサイズからキャッシュするセルのサイズを計算するステップと、
前記オフセットから、インディクスを計算するステップと、
前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ（７２）の中から、前記インディクスに該当するデータがあるかを検索するステップと、
前記検索で、前記インディクスが見つからないとき、前記キャッシュバッファ（７１）の空き領域に前記書き込みデータを書き込みし、前記書き込み後、前記補助記憶装置の前記データがキャッシュされているか否かを管理するデータであるマップ（７２）の中の前記位置に該当する値をセットするステップと、及び、
前記検索で、前記インディクスが見つかったとき、前記キャッシュバッファ（７１）の中から前記インディクスに該当するセルに、前記書き込みデータを上書きするステップと
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項２２】
請求項１４に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記読み込みステップ（５６ａ）は、
前記読み込み要求に指定されたデータを前記補助記憶装置（２５）から読み込み、前記読み込み要求に指定されたバッファに格納するステップと、
前記読み込み要求に指定されたデータが格納されている前記補助記憶装置（２５）のオフセットを、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ（７２）及び／又は、前記キャッシュバッファのデータを管理するバッファ管理テーブル（７３）の中のから検索するステップと、
前記検索で、前記オフセットが見つかったとき、前記キャッシュバッファ（７１）の前記オフセットに該当するキャッシュデータを読み出すステップと、及び、
前記読み出したデータを、前記バッファの前記オフセットに対応するデータに上書きするステップと
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項２３】
請求項１２乃至１４のなから選択される１項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム（５０）は、
（Ａ）前記フィルタドライバプログラム（５０）の動作、及び、又は前記オペレーティングシステム（１１）の動作を記録するログ取得ステップ、（Ｂ）前記フィルタドライバプログラム（５０）を初期値を設定する初期化ステップ、（Ｃ）前記電子計算機（１）の電源管理ハンドラからデータを取得する電源管理ステップ、及び、（Ｄ）前記電子計算機（１）に内蔵又は接続されている物理デバイスの確認、その初期化を行うハードウェア制御ステップの中から選択される１以上を有する
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項２４】
請求項１２乃至２３の中から選択される１項に記載の補助記憶装置用フィルタドライバプログラムを記録した補助記憶装置用フィルタドライバプログラムの記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体に関し、特に、書き込み制限を有する補助記憶装置の寿命を延命する技術に関する。詳しくは、本発明は、補助記憶装置へデータを書き込みする回数を低減するための補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体に関する。
【背景技術】
【０００２】
電子計算機は、データ、プログラム等いろいろ問題記憶するために各種の記憶装置を備えている。代表的な読み書き可能な記憶装置としては、メインメモリともいう随時書き込み可能な記憶装置（以下、ＲＡＭという。）、補助記憶装置のハードディスク等がある。また、不揮発性メモリは、電源を供給しなくても記憶を保持するメモリの総称であり、フラッシュメモリがその代表的なものである。フラッシュメモリは、不揮発性の半導体メモリであり、場合によって、フラッシュEEPROMまたはフラッシュROMと呼ばれることがある。
【０００３】
フラッシュメモリは、記憶セルを接続する構造により、NAND型フラッシュメモリとNOR型フラッシュメモリの２種に分けられる。この中でNAND型のフラッシュメモリは、高集積化ができ、かつ書き込みを高速にできる利点がある。このためにNAND型のフラッシュメモリを、電子計算機のハードディスクに替って利用する用途が考えられる。NAND型のフラッシュメモリは、高集積化し、大容量化が進み、価格も劇的に低下している。このために、ハードディスクに比べて低価格のフラッシュメモリを、オペレーティングシステムがメインに利用する補助記憶装置として、利用したという要望がある。
【０００４】
フラッシュメモリは、基本的に、消去・書き込みを行うとき、電子が酸化膜を貫通し、それを劣化させる。よって、フラッシュメモリの寿命は、一か所数千回以下のものが少なくない。しかし、フラッシュメモリ内に、コントローラチップを集積して、消去・書き込みが特定ブロックに集中しないように改良されたものが多数提案され、かつ販売もされているが、それでも数万回から数百万回が限度であるといわれている。
【０００５】
オペレーティングシステムは、基本的に、ハードディスクを補助記憶装置として利用することを前提に作られている。つまり、オペレーティングシステムは、頻繁に、ハードディスクにアクセスし、データの読み書きを行う。しかしながら、フラッシュメモリは、消去・書き込み可能回数が限られており、消去・書き込み可能回数はハードディスクに比べずっと少ない。言い換えると、フラッシュメモリをハードディスクの代わりに利用すると、オペレーティングシステムは、データをフラッシュメモリに頻繁に書き込みするので、フラッシュメモリの消去・書き込み可能回数に早期に達する。
【０００６】
フラッシュメモリの消去・書き込み可能回数は、一部では、寿命と表現されている。フラッシュメモリは、基本的に、消去・書き込みを行うとき、電子が酸化膜を貫通し、それを劣化させる。フラッシュメモリの消去・書き込み寿命は、一か所数千回以下のものが少なくない。このために、フラッシュメモリは、書き換え頻度の高いデータベースや動作履歴等の保存の用途、オペレーティングシステムの用途には適しないものとされている。
【０００７】
このためにフラッシュメモリは、書き換えるメモリ領域が集中しないようにする工夫を実施し、長寿命化を図っているが、モバイルパソコンのような分野では簡素化、低コスト化のためにハードディスクの機能をフラッシュメモリに置き換えることがとても待望されており、Flash SSDを、ハードディスク変わりに利用した、ノート型パソコンも登場している。その中で、フラッシュメモリの寿命を延ばす試みは多数ある。フラッシュメモリの寿命を延ばすものとしては、次のようなアイディアが提案されている。
【０００８】
特許文献１に記載の発明は、リードオンリーファイルに対して、フラッシュメモリの書換回数の平準化を行うことにより、フラッシュメモリの製品寿命を延長する技術を開示している。具体的には、フラッシュメモリ群中の一部の未使用領域を利用し、該未使用領域に「再書き込み処理」をプログラム記述しておくことで、ブートする際にこの処理が実施されることにより、リードオンリーファイルに対してもフラッシュメモリの書き換え回数の平準化を行う。また、平準化処理をＯＳがブートする以前に実行することにより、ＯＳやアプリケーションソフトウェアに拘束されることなく円滑な処理を可能とする。
【０００９】
特許文献２に記載の不揮発性記憶装置は、不揮発性メモリの故障を防ぎ、これを用いる不揮発性記憶装置の寿命を伸ばしている。この装置のコントローラは、不揮発性メモリから物理ブロックを第１の予約ブロックとして複数選択し、入力された論理アドレスと不揮発性メモリの物理アドレスとの対応関係を示す第１のテーブルを前記第１の予約ブロックのうちのいずれか１つに格納させ、前記複数の第１の予約ブロックの物理アドレスを示す第２のテーブルを前記不揮発性メモリに格納させ、かつ、不揮発性メモリに書き込みを行う場合には、第１のテーブルを書き換え、第１の予約ブロックのうち、書き換え前の第１のテーブルが格納されていたものとは異なるものに、書き換え後の第１のテーブルを格納させる。
【００１０】
特許文献３には、従来よりも長寿命かつ処理速度の速い不揮発性記憶装置、不揮発性記憶システムを開示している。書き換え回数計数部が、各物理ブロックの書き換え回数を管理し、最多及び最小書き換え回数の物理ブロックを判別する。初期化処理に未使用ブロック検出部が検出した未使用ブロック数が閾値以下になった場合、データ移動処理部は、最多書き換え回数ブロックと最少書き換え回数ブロック間でデータ移動する。こうすれば書き換え頻度の高いデータを特定の物理ブロックばかりにアロケートさせないようにできるので、結果として不揮発性記憶装置１２０の長寿命化を図ることができる。
【００１１】
特許文献４には、寿命延命を図る情報記録読出装置を開示している。フラッシュメモリのデータ記録領域に、データを未記録、記録中、又は記録済かを示すデータを記録したブロック状態管理領域を設けて、この記録されているデータが信頼できるかどうかを容易に判断でき、かつデータ記録の精度を向上させる。更に、フラッシュメモリを形成するセクタを複数のブロックに分割することにより、セクタ当たりのデータ書換回数は従来に比しＮ倍に増へ、消去回数は１／Ｎとなり、フラッシュメモリの寿命を延ばす。
【００１２】
一方、本発明の発明者等は、特許文献５に記載の発明を提案した。具体的には、不揮発性メモリに格納されたクライアントのユーザデータを、それを処理している電子計算機から、目的以外に利用できないようにし、外部へ持ち出さないようにしているデータ管理用のシステム及びそのためのプログラムである。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００８−１７１２４６号公報
【特許文献２】特開２００４−２３４４７３号公報
【特許文献３】特開２００８−９７１３２号公報
【特許文献４】特開２００６−８５５９６号公報
【特許文献５】ＷＯ２００７／０４９６２５「電子計算機のデータ管理方法、プログラム、及び記録媒体」
【発明の概要】
【発明が解決しようとする課題】
【００１４】
上述したように、フラッシュメモリへのデータ書き込み回数に制限があることは周知の事実である。Windows等のオペレーティングシステムは、ハードディスクを前提として設計されているため、頻繁に書き込み命令が発生する。また、オペレーティングシステムは、ファイルシステムという概念でデータをファイルとして管理している。そのために、ファイルを管理するための管理テーブルを使用しており、ファイルの作成、参照、更新、削除のタイミングで、管理テーブルに書き込みが発生する。管理テーブルへの書き込みは、メモリ上の同一アドレスへ頻繁に書き込みするため、ハードディスクの代わりにフラッシュメモリを使用するとフラッシュメモリの寿命を縮める要因となる。
【００１５】
本発明は上述のような技術背景のもとになされたものであり、下記の目的を達成する。
本発明の目的は、書き込み制限を有する電子計算機の補助記憶装置の長寿命化を図ることである。
本発明の目的は、書き込み制限を有する電子計算機の補助記憶装置の同一アドレスへ、書き込みデータを書き込みする回数を低減し、補助記憶装置の延命を実現することである。
【課題を解決するための手段】
【００１６】
本発明は、目的を達成するため、次の手段を採る。
本発明の発明１の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、入力デバイス（１６，１７）及び／又は出力デバイス、主記憶手段、並びに、補助記憶手段（２５）を備え、オペレーティングシステム（１１）によって制御されている電子計算機（１）において、前記補助記憶手段（２５）へデータを書き込みする回数を減らすためのドライバ制御手段であって、Ａ）前記補助記憶手段（２５）へ前記データを書き込みする書き込みデータを取得する取得手段、B）前記書き込みデータを、前記電子計算機（１）の主記憶手段のキャッシュ領域（７１）に、キャッシュデータとして書き込む書き込み手段、及び、C）前記キャッシュデータをまとめて前記補助記憶手段（２５）の記録領域に書き込むフラッシュ手段からなることを特徴とする
【００１７】
本発明の発明２の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明１の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記オペレーティングシステム（１１）は、デバイス（２２−２７）を制御するためのデバイスドライバ（３２−３８）を備え、前記電子計算機（１）は、複数の前記デバイス（２２−２７）それぞれを制御するための前記デバイスドライバ（３２−３８）からなるデバイスドライバ層（３０）と、前記オペレーティングシステム（１１）がカーネルモードで提供する基本プログラム（６３）との間に位置するフィルタドライバ手段（５０）を有し、前記フィルタドライバ手段（５０）は、前記オペレーティングシステム（１１）の全ての命令を実行できる動作モードであるカーネルモードで動作し、かつ、
(i)前記デバイスドライバ（３２−３８）の共通の窓口となるとともに、前記基本プログラム（６３）を通して行われる、前記デバイスドライバ（３２−３８）とアプリケーションプログラム（１０）とのやり取りをまとめて行ない、
(ii)前記アプリケーションプログラム（１０）から要求されたときに、前記複数のデバイス（２２−２７）の間、又は、前記アプリケーションプログラム（１０）と前記デバイス（２２−２７）の間のデータの送受信を行ない、
(iii)前記アプリケーションプログラム（１０）から前記電子計算機（１）の前記補助記憶装置（２５）に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム（１０）が標準で備えているインターフェースを通して、前記アプリケーションプログラム（１０）から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置（２５）とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機（１）を機能させるプログラムであり、
前記フィルタドライバ手段（５０）は、前記書き込みデータを取得し、前記キャッシュ領域（７１）に前記キャッシュデータとして書き込みし、及び、前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込みすることを特徴とする。
【００１８】
本発明の発明３の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明２の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記フィルタドライバ手段（５０）は、前記書き込みデータを分析して、前記書き込みが集中する前記記録領域の集中記録領域を、特定し、前記集中記録領域に書き込みされる前記書き込みデータを、前記キャッシュ領域（７１）に、前記キャッシュデータとして書き込みし、及び、前記集中記録領域以外の前記記録領域に書き込みされる前記書き込みデータを、直接、前記記録領域書き込みすることを特徴とする。
【００１９】
本発明の発明４の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明２又は３の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記オペレーティングシステム（１１）は、前記補助記憶手段（２５）に格納されているファイルの読み出し又は書き出しを管理するファイルシステムを備え、前記オペレーティングシステム（１１）は、前記ファイルシステムを制御するためのファイルシステムドライバ（３４）を備え、前記フィルタドライバ手段（５０）は、前記アプリケーションプログラム又は前記基本プログラムから、前記ファイルシステムドライバへのアクセス要求を受信するインターフェース手段（５１、５１ａ）と、アクセス要求が前記書き込みデータを前記補助記憶手段（２５）に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域（７１）に前記キャッシュデータとして書き込みする書き込み処理手段（５７ａ）と、アクセス要求が前記補助記憶手段（２５）からデータ読み込みする読み込み要求のとき、前記読み込みデータを前記キャッシュ領域（７１）及び／又は前記補助記憶手段（２５）から取得する読み込み処理手段（５６ａ）と、前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込むフラッシュ処理手段（５５ａ）と、前記アクセス要求を前記インターフェース手段（５１、５１ａ）から受信し、前記アクセス要求を分析して、前記アクセスが書き込み要求か読み込み要求かを判定し、書き込み処理手段（５７ａ）、読み込み処理手段（５６ａ）、及び、フラッシュ処理手段（５５ａ）の内１以上を実行させる制御手段（５２、５２ａ）と、下位のデバイスドライバとのインターフェースを提供するデバイスドライバ制御部（４０、４０ａ）とからなることを特徴とする。
【００２０】
本発明の発明５の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明４の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記フィルタドライバ手段（５０）は、前記補助記憶手段（２５）からデータを読み込みするための、又は、前記補助記憶手段（２５）にデータを書き込みするためのＩＲＰを作成し、前記デバイスドライバ制御部（４０、４０ａ）を介して、前記下位デバイスドライバ（３７）へ送信するＩＲＰ作成手段からなることを特徴とする。
【００２１】
本発明の発明６の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明１乃至３の中から選択される１発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、（Ｉ）前記キャッシュ領域がフルになったときに、（II）定期的に、（III）前記電子計算機がシャットダウンするとき、（IV）前記オペレーティングシステムにログオンした利用者がログオフするとき、（Ｖ）前記オペレーティングシステムがサスペンドになるとき、（VI）前記オペレーティングシステムが休止になるとき、及び、（VII）強制フラッシュコマンドのときの中から選択される１条件であることを特徴とする。
【００２２】
本発明の発明７の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明１乃至３の中から選択される１発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域であることを特徴とする。
【００２３】
本発明の発明８の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明１乃至３の中から選択される１発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータであることを特徴とする。
【００２４】
本発明の発明９の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明１乃至３の中から選択される１発明に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、フィルタドライバ手段（５０）は、前記補助記憶装置（２５）へ前記データを書き込みする書き込み回数、及び／又は、前記補助記憶装置（２５）の稼動時間に関する統計情報を取得し、前記補助記憶装置（２５）の推定稼動時間残量を計算し、前記アプリケーションプログラム（１０）又は、前記オペレーティングシステム（１１）に報告する報告手段を有することを特徴とする。
【００２５】
本発明の発明１０の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明１乃至３の中から選択される１発明に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記補助記憶手段（２５）は、不揮発性メモリであることを特徴とする。
【００２６】
本発明の発明１１の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明１０に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記不揮発性メモリは、フラッシュメモリであることを特徴とする。
【００２７】
本発明の発明１２の補助記憶装置用フィルタドライバプログラムは、入力デバイス（１６，１７）及び／又は出力デバイス、主記憶手段、並びに、補助記憶手段（２５）を備え、オペレーティングシステム（１１）によって制御されている電子計算機（１）において、前記補助記憶手段（２５）へ前記データを書き込みする回数を減らすためのドライバ制御手段として、前記電子計算機を機能させるドライバ制御プログラムであって、前記補助記憶手段（２５）へ書き込みする書き込みデータを取得するステップ、前記書き込みデータを、前記電子計算機（１）の主記憶手段のキャッシュ領域（７１）に、キャッシュデータとして書き込むステップ、及び、前記キャッシュデータをまとめて前記補助記憶手段（２５）の記録領域に書き込みするステップからなることを特徴とする。
【００２８】
本発明の発明１３の補助記憶装置用フィルタドライバプログラムは、発明１２の補助記憶装置用フィルタドライバプログラムにおいて、前記オペレーティングシステム（１１）は、デバイス（２２−２７）を制御するためのデバイスドライバ（３２−３８）を備え、前記電子計算機（１）は、複数の前記デバイス（２２−２７）それぞれを制御するための前記デバイスドライバ（３２−３８）からなるデバイスドライバ層（３０）と、前記オペレーティングシステム（１１）がカーネルモードで提供する基本プログラム（６３）との間に位置するフィルタドライバプログラム（５０）を有し、前記フィルタドライバプログラム（５０）は、前記オペレーティングシステム（１１）の全ての命令が実行できる動作モードであるカーネルモードで動作し、かつ、（Ｉ）前記デバイスドライバ（３２−３８）の共通の窓口となるとともに、前記基本プログラム（６３）を通して行われる、前記デバイスドライバ（３２−３８）とアプリケーションプログラム（１０）とのやり取りをまとめて行ない、（II）前記アプリケーションプログラム（１０）から要求されたときに、前記複数のデバイス（２２−２７）の間、又は、前記アプリケーションプログラム（１０）と前記デバイス（２２−２７）の間のデータの送受信を行ない、（III）前記アプリケーションプログラム（１０）から前記電子計算機（１）の前記補助記憶装置（２５）に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム（１０）が標準で備えているインターフェースを通して、前記アプリケーションプログラム（１０）から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置（２５）とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機（１）を機能させるプログラムであり、前記フィルタドライバプログラム（５０）は、Ａ）前記補助記憶手段（２５）へ書き込みする書き込みデータを取得するインターフェースステップ（５１、５１ａ）、Ｂ）前記書き込みデータを、前記電子計算機（１）の主記憶手段のキャッシュ領域（７１）に、キャッシュデータとして書き込む書き込みステップ（５７ａ）、及び、Ｃ）前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込みするフラッシュステップ（５５ａ）からなることを特徴とする。
【００２９】
本発明の発明１４の補助記憶装置用フィルタドライバプログラムは、発明１３に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム（５０）は、前記アプリケーションプログラム又は前記基本プログラムから、前記ディスクへのアクセス要求を受信する前記インターフェースステップと、前記アクセス要求が前記書き込みデータを前記補助記憶手段（２５）に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域（７１）に前記キャッシュデータとして書き込みする書き込みステップ（５７ａ）と、前記アクセス要求が前記補助記憶手段（２５）から前記データを読み込みする読み込み要求のとき、前記データを前記キャッシュ領域（７１）及び／又は前記補助記憶手段（２５）から取得する読み込みステップ（５６ａ）と、前記キャッシュデータをまとめて前記補助記憶手段（２５）の前記記録領域に書き込むフラッシュステップ（５５ａ）と、及び、（Ａ）前記アクセス要求を前記インターフェース手段（５１、５１ａ）から受信し、前記アクセス要求を分析して、前記アクセス要求が書き込み要求か読み込み要求かを判定し、（Ｂ）前記アクセス要求が書き込み要求のとき、前記書き込ステップ（５７ａ）を実行し、（Ｃ）前記アクセス要求が読み込み要求のとき、前記読み込みステップ（５６ａ）を実行し、及び、（Ｄ）前記フラッシュステップ（５５ａ）を実行する制御ステップ（５２、５２ａ）と、及び、下位のデバイスドライバ（３７）とのインターフェースを提供するデバイスドライバ制御ステップ（４０、４０ａ）とからなることを特徴とする。
【００３０】
本発明の発明１５の補助記憶装置用フィルタドライバプログラムは、発明１４に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム（５０）は、前記補助記憶手段（２５）からデータを読み込みするための、又は、前記補助記憶手段（２５）にデータを書き込みするためのＩＲＰを作成し、前記デバイスドライバ制御ステップ（４０、４０ａ）を介して、前記下位デバイスドライバ（３７）へ送信するＩＲＰ作成ステップ（５８ａ）からなることを特徴とする。
本発明の発明１６の補助記憶装置用フィルタドライバプログラムは、発明１２乃至１４から選択される１発明の補助記憶装置用フィルタドライバプログラムにおいて、前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域であることを特徴とする。
【００３１】
本発明の発明１７の補助記憶装置用フィルタドライバプログラムは、発明１２乃至１４から選択される１発明に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータであることを特徴とする。
【００３２】
本発明の発明１８の補助記憶装置用フィルタドライバプログラムは、発明１２乃至１４から選択される１発明の補助記憶装置用フィルタドライバプログラムにおいて、前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、
（Ｉ）前記キャッシュ領域がフルになったときに、
（II）定期的に、
（III）前記電子計算機がシャットダウンするとき、
（IV）前記オペレーティングシステムにログオンした利用者がログオフするとき、
（Ｖ）前記オペレーティングシステムがサスペンドになるとき、
（VI）前記オペレーティングシステムが休止になるとき、及び、
（VII）強制フラッシュコマンドのとき
の中から選択される１条件であることを特徴とする。
【００３３】
本発明の発明１９の補助記憶装置用フィルタドライバプログラムは、発明１２乃至１４から選択される１発明の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム（５０）は、前記補助記憶装置（２５）へ前記データを書き込みする書き込み回数を取得するステップ、前記補助記憶装置（２５）の稼動時間に関する統計情報を取得するステップ、前記補助記憶装置（２５）の推定稼動時間残量を計算するステップ、及び、前記アプリケーションプログラム（１０）又は、前記オペレーティングシステム（１１）に、前記フィルタドライバプログラム（５０）の状態を報告する報告ステップの内１以上のステップを有することを特徴とする。
【００３４】
本発明の発明２０の補助記憶装置用フィルタドライバプログラムは、発明１５に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記書き込むフラッシュステップ（５５ａ）は、下位のデバイスドライバへ指示であるＩＲＰを作成するために前記ＩＲＰ作成ステップを実行するステップと、前記キャッシュバッファ内の全データから前記補助記憶装置へ書き込むデータを計算するステップと、前記キャッシュバッファのデータを管理するバッファ管理テーブル（７３）から、前記書き込みデータの補助記憶装置上の位置を取得するステップと、前記位置に、前記書き込みデータを書き込む命令を前記ＩＲＰに入れて、前記下位デバイスドライバへ送信するステップと、前記書き込みテータを前記補助記憶装置に書き込みした後、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ（７２）の中の前記位置に該当する値をリセットするステップと、からなることを特徴とする。
【００３５】
本発明の発明２１の補助記憶装置用フィルタドライバプログラムは、発明１４に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記書き込みステップ（５７ａ）は、前記書き込み要求から、オフセット、バッファデータ、データサイズを取得するステップと、前記データサイズからキャッシュするセルのサイズを計算するステップと、前記オフセットから、インディクスを計算するステップと、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ（７２）の中から、前記インディクスに該当するデータがあるかを検索するステップと、前記検索で、前記インディクスが見つからないとき、前記キャッシュバッファ（７１）の空き領域に前記書き込みデータを書き込みし、前記書き込み後、前記補助記憶装置の前記データがキャッシュされているか否かを管理するデータであるマップ（７２）の中の前記位置に該当する値をセットするステップと、及び、前記検索で、前記インディクスが見つかったとき、前記キャッシュバッファ（７１）の中から前記インディクスに該当するセルに、前記書き込みデータを上書きするステップとからなることを特徴とする。
【００３６】
本発明の発明２２の補助記憶装置用フィルタドライバプログラムは、発明１４に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記読み込みステップ（５６ａ）は、前記読み込み要求に指定されたデータを前記補助記憶装置（２５）から読み込み、前記読み込み要求に指定されたバッファに格納するステップと、前記読み込み要求に指定されたデータが格納されている前記補助記憶装置（２５）のオフセットを、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ（７２）及び／又は、前記キャッシュバッファのデータを管理するバッファ管理テーブル（７３）の中のから検索するステップと、前記検索で、前記オフセットが見つかったとき、前記キャッシュバッファ（７１）の前記オフセットに該当するキャッシュデータを読み出すステップと、及び、前記読み出したデータを、前記バッファの前記オフセットに対応するデータに上書きするステップとからなることを特徴とする。
【００３７】
本発明の発明２３の補助記憶装置用フィルタドライバプログラムは、発明１２乃至１４のなから選択される１発明の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム（５０）は、（Ａ）前記フィルタドライバプログラム（５０）の動作、及び、又は前記オペレーティングシステム（１１）の動作を記録するログ取得ステップ、（Ｂ）前記フィルタドライバプログラム（５０）を初期値を設定する初期化ステップ、（Ｃ）前記電子計算機（１）の電源管理ハンドラからデータを取得する電源管理ステップ、及び、（Ｄ）前記電子計算機（１）に内蔵又は接続されている物理デバイスの確認、その初期化を行うハードウェア制御ステップの中から選択される１以上を有することを特徴とする。
【００３８】
本発明の発明２４の補助記憶装置用フィルタドライバプログラムは、発明１１乃至２３の中から選択される１発明の補助記憶装置用フィルタドライバプログラムを記録した補助記憶装置用フィルタドライバプログラムの記録媒体。
【発明の効果】
【００３９】
本発明によると、次の効果が奏される。
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、電子計算機の補助記憶装置の長寿命化を図ることができた。
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、電子計算機の補助記憶装置への書き込み命令をフィルタリングして、同一アドレスへの書き込みデータをキャッシュし、キャッシュフル時等にまとめて電子計算機の補助記憶装置に実際に書き込むようにすることで、書き込み回数を低減することができ、その結果電子計算機の補助記憶装置の延命が実現できた。
【００４０】
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体は、不揮発性メモリ等の書き込み制限を有する補助記憶装置を採用している電子計算機、特にノート型電子計算機、の製品寿命を延ばすことが可能となった。
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体は、フィルタドライバ手段で書き込み回数及び稼動時間の統計情報をとることで、電子計算機の補助記憶装置の推定稼動時間残量を使用者に知らせることが可能となった。
【図面の簡単な説明】
【００４１】
【図１】図１は、本発明の補助記憶装置用フィルタドライバ手段の実施の形態のシステムの概要を示す概要図である。
【図２】図２は、電子計算機のオペレーティングシステムの構成例を示すブロック図である。
【図３】図３は、オペレーティングシステムの概要を示す概念図である。
【図４】図４は、SCSIリクエストを処理する動作を説明するための図である。
【図５】図５は、ＩＲＰの概要を示すブロック図である。
【図６】図６は、キャッシュするデータを管理するためのマップ、バッファ管理テーブルの概要を図示したブロック図である。
【図７】図７は、キャッシュバッファの例を示す図である。
【図８】図８は、マップの例を示す図である。
【図９】図９は、バッファ管理テーブルの例を示す図である。
【図１０】図１０は、データを書き込み、読み込み、フラッシュする手順を説明するブロック図である。
【図１１】図１１は、フィルタドライバのない部構成の例を示したブロック図である。
【図１２】図１２は、SCSIリクエストを処理する手順を示すフローチャートである。フラッシュ処理を示すフローチャートである。
【図１３】図１３は、キャッシュ処理モジュールの動作概要を示すフローチャートである。
【図１４】図１４は、読み込み処理モジュールの動作概要を示すフローチャートである。
【図１５】図１５は、フラッシュ処理モジュールの動作概要を示すフローチャートである。
【図１６】図１６は、ユーティリティプログラムの構成例を示すブロック図である。
【図１７】図１７は、ＩＲＰ作成モジュールの動作例の概要を示すフローチャートである。
【図１８】図１８は、ユーティリティプログラムの画面例１を図示した図面である。
【図１９】図１９は、ユーティリティプログラムの画面例２を図示した図面である。
【発明を実施するための形態】
【００４２】
〔単語の定義〕
当業者にとって、基本的で自明なことではあるが、誤解、誤解釈を招かないために、本明細書に用いる技術用語について簡単に定義する。「電子計算機」とは、入力装置、出力装置、主記憶装置、補助記憶装置、中央処理装置を備えたものをいう。「オペレーティングシステム」とは、電子計算機を制御し、動作させるための基本プログラムをいう。オペレーティングシステムのコンパイルされたソースコードは、基本的に、補助記憶装置に格納されていて、電子計算機に電源が投入されたとき、補助記憶装置から呼び出されて実行され、電子計算機を制御する。
【００４３】
「アプリケーションプログラム」とは、オペレーティングシステムが提供する機能を利用して、電子計算機上に動作し、特定の機能を実現するプログラムをいう。「デバイスドライバ」とは、電子計算機が内蔵する入力装置、出力装置、補助記憶装置等の内蔵デバイス、又は、電子計算機に接続された外部デバイスを直接制御するためのプログラムをいう。これらのデバイスドライバは、オペレーティングシステムが標準で備えている。また、デバイスドライバは、周辺機器、内蔵機器を製造するメーカーが作成するデバイスドライバ、いわゆる、デバイスを提供したベンダーが提供するものもある。
【００４４】
更に、デバイスドライバは、デバイスドライバの開発を専門にする技術者又は会社が開発したデバイスドライバもある。このように数多くの種類のデバイスドライバがある。この状況の中で、本実施の形態においては、全てのデバイスドライバは、オペレーティングシステムに属するものとする。「主記憶装置」とは、オペレーティングシステム、アプリケーションプログラムの実行中のデータ等が格納されるメモリであり、電源が切断されると格納データを保持しないものである。以下、主記憶装置は、ＲＡＭという。
【００４５】
「ディスク」とは、電子計算機の補助記憶装置である。従来は、電子計算機の補助記憶装置は、ハードディスクドライブで実現されていた。ハードディスクドライブは、データを同じ記憶領域に書き換えできる回数は、非常に多く、通常の使用では実質的に無制限と考えても良いであろう。よって、一般のオペレーティングシステム、データベースは、ハードディスクの使用を前提に設計されているので、データの書き換え回数が多い。
【００４６】
〔カーネルモードとユーザモード〕
オペレーティングシステムには、カーネルモードとユーザモードがある。カーネルモードは、電子計算機がエグゼクティブで動作するときの動作状態である。カーネルモードでは、オペレーティングシステムを操作するためのすべての命令が実行可能であり、仮に間違った命令を実行するとシステム全体に悪影響を及ぼしかねない。また、ユーザモードは、オペレーティングシステムの機能の内、アプリケーションプログラム等のユーザに対して完全に開放されているモードである。
【００４７】
このユーザモードでは、システムに悪影響を与えないように、オペレーティングシステムを操作する命令を制限している。電子計算機がこのユーザモードで動作するとき、電子計算機の動作に悪影響を与えるような命令を、オペレーティングシステムが自動的に制限してくれるため、ユーザにとっては使い易い環境になっている。しかし、このような制限を設けることはオペレーティングシステムの機能の制限と同じことなので、ユーザモードで動作するアプリケーションプログラムは、ハードウェアに関わる部分には直接アクセスできなくなり、カーネルモードを経由しなければならない。
【００４８】
カーネルモードは、オペレーティングシステムの機能をフルに使うことが可能であり、各入出力装置へも完全にアクセスできる。また、カーネルモードで動作するプログラムは、ユーザモードのプログラムより優先的に処理され、高いパフォーマンスを得ることができる。デバイスドライバは、オペレーティングシステムに属し、電子計算機の外部ハードウェアを管理するためのソフトウェアであり、カーネルモードで動作する。通常、デバイスドライバ一つに対して同じ属性を持つデバイスが一つだけ存在する。ユーザモードで動作するアプリケーションプログラムは、各デバイスにアクセスするためにデバイスドライバを経由しなければならない。
【００４９】
〔本発明の実施の形態〕
図１は、本発明の補助記憶装置用フィルタドライバを備えた電子計算機１の実施の形態の概要を示す概要図である。図中には、電子計算機１上で動作するアプリケーションプログラム１０、及び、ファイルシステムドライバ３４、ディスクドライバ３８、ミニポートドライバ３７、キャッシュバッファ７１、及び、電子計算機１の補助記憶装置であるディスク２５を図示している。また、本発明のフィルタドライバ５０、及びそのユーザインターフェースのためのユーティリティプログラム５９を図示している。
【００５０】
電子計算機１、アプリケーションプログラム１０、ファイルシステムドライバ３４、ディスクドライバ３８、及び、ミニポートドライバ３７の各詳細な機能については、後述する。ファイルシステムドライバ３４は、ディスク２５に格納されているファイル、フォルダに関する情報を管理するもので、これらファイルやフォルダへのアクセスを、その下位のデバイスドライバであるディスクドライバ３８、ミニポートドライバ３７を経由して、提供するためのプログラムである。
【００５１】
アプリケーションプログラム１０は、ディスク２５にアクセスするとき、「アクセス要求」命令を発する。このアクセス要求は、ファイルシステムドライバ３４、ディスクドライバ３８、及び、ミニポートドライバ３７で順番に処理される。ミニポートドライバ３７が、最終的に、ディスク２５にアクセスし、アクセス要求で指定された処理が行われる。そして、この一連のアクセス処理の結果は、逆の順番を辿ってアプリケーションプログラム１０に渡される。本発明の、フィルタドライバ５０は、ディスクドライバ３８とミニポートドライバ３７との間で送受信されているデータを制御することで、ディスク２５へのアクセス処理を制御する。
【００５２】
本発明は、電子計算機１のディスク２５に、ハードディスクドライブに替って、書き換え回数に制限がある記録媒体を利用することを可能にする技術を提供する。具体的には、フィルタドライバ５０を利用して、電子計算機１からディスク２５へ電子データを書き込みする数を低減する。ディスク２５には、不揮発性メモリ等を利用できる。特に、近年コストが低減しているフラッシュメモリを利用することが好ましい。フラッシュメモリは、ＮＡＮＤ型でもＮＯＲ型の何れでも利用できる。キャッシュバッファ７１は、本例では電子計算機１のメインメモリであるＲＡＭ上の領域である。
【００５３】
フィルタドライバ５０は、オペレーティングシステム１１（図２及び図３を参照。）のカーネルモードで動作する。フィルタドライバ５０は、ＲＡＭ上に、ディスク２５用のキャッシュバッファ７１を確保し、ディスク２５に書き込みする書き込みデータをキャッシュバッファ７１に一時格納する。フィルタドライバ５０は、このキャッシュバッファ７１のデータを、ディスク２５にまとめて書き込みする。これにより、オペレーティングシステム１１又はアプリケーションプログラム１０から、ディスク２５に随時書き込みする回数を減らすことができる。
【００５４】
また、フィルタドライバ５０は、アプリケーションプログラム１０又はオペレーティングシステム１１から、ディスク２５へアクセスするアクセス命令を取得し、このアクセス命令を分析する機能を有する。分析機能としては、アクセス命令の種類の特定、アクセス命令の内部データの特定等である。フィルタドライバ５０は、キャッシュバッファ７１に格納されているデータを、所定の条件で、ディスク２５の該当する領域に書き込みする。オペレーティングシステム１１又はアプリケーションプログラム１０から出力されたアクセス命令は、基本的には、ディスク２５からデータを読み込みする読み込み命令、又は、ディスク２５にデータを書き込みする書き込み命令である。
【００５５】
アクセス命令が読み込み命令であるとき、フィルタドライバ５０は、読み込み対象データを取得して、オペレーティングシステム１１又はアプリケーションプログラム１０に渡す。読み込み対象データは、キャッシュバッファ７１又はディスク２５に格納されている。フィルタドライバ５０は、先ず、キャッシュバッファ７１内のデータを検索して、読み込み対象データを検索できたら、オペレーティングシステム１１又はアプリケーションプログラム１０に渡す。読み込み対象データがキャッシュバッファ７１になければ、ディスク２５内から取得して、オペレーティングシステム１１又はアプリケーションプログラム１０に渡す。
【００５６】
フィルタドライバ５０は、ディスク２５と、キャッシュバッファ７１の対応関係を示す管理データを参照して、上述のデータ検索を行う。この管理データは、マップ７２（図６を参照。）、バッファ管理テーブル７３（図６を参照。）等で例示されている。フィルタドライバ５０がディスク２５へデータを書き込みするタイミングは、キャッシュバッファ７１がフルになったとき、定期的に、オペレーティングシステム１１又はアプリケーションプログラム１０が終了するとき等のときである。このように、フィルタドライバ５０によって、ディスク２５へのデータを書き込みする回数を低減する。
【００５７】
〔キャッシュ機能及びキャッシュバッファ〕
本実施の形態おいて、フィルタドライバ５０がキャッシュバッファ７１にデータを書き込みできるようになった状態を、キャッシュ機能が有効になったという。また、キャッシュバッファ７１にデータを書き込みするフィルタドライバ５０の機能を止めた状態を、キャッシュ機能が無効、又は、キャッシュ機能が停止した状態と言う。キャッシュバッファ７１の容量、言い換えると、キャッシュバッファ７１に保存できるデータの最大サイズを、キャッシュバッファ７１のキャッシュサイズである。
【００５８】
キャッシュバッファ７１のキャッシュサイズは、オペレーティングシステム１１のレジストリに登録される。オペレーティングシステム１１の起動時に、レジストリに登録されたキャッシュサイズの領域を、ＲＡＭ上で確保し、キャッシュバッファ７１が用意される。ユーザは、キャッシュバッファ７１のキャッシュサイズを変更することができる。キャッシュサイズの変更は、ユーティリティプログラム５９（図１及び図１６を参照。）から行われる。キャッシュバッファ７１のキャッシュサイズは、基本的に、任意に設定できるが、メガバイト単位であることが好ましい。
【００５９】
また、初期設定で、キャッシュサイズは、ＲＡＭの物理メモリの半分、２５６メガバイト等のように、必要な特定の値に、設定できる。ただし、キャッシュサイズは、ＲＡＭのサイズ以下の値でなければいけないが、足りないときはＲＡＭの容量を増設することで対応すると良い。よって、オペレーティングシステム１１が消費するメモリ、その他のアプリケーションプログラム１０が消費するメモリ等を考慮すると、キャッシュバッファ７１のキャッシュサイズは、現在市販されているオペレーティングシステムを前提としたときには、実用的には、３２メガバイト以上であることが好ましい。
【００６０】
そして、このキャッシュサイズの上限は、６４メガバイト以下であることが好ましい。キャッシュバッファ７１のキャッシュサイズが小さいと、頻繁にキャッシュフルになり、ディスク２５への書き込み回数が増加する。キャッシュサイズの変更後は、オペレーティングシステム１１の再起動が好ましい。
本発明のフィルタドライバ５０は、任意のオペレーティングシステム１１で動作可能であるが、マイクロソフト社が提供するオペレーティングシステムでWindows XP（登録商標）以後のオペレーティングシステムであることが好ましい。
【００６１】
具体的には、例えば、Windows XP、Windows Vista（登録商標）、Windows XP Embedded（登録商標）である。以後、本実施の形態において、オペレーティングシステムは、Windows XPを例にとって説明する。フィルタドライバ５０は、Windows XP上のNTFS/FAT32用ファイルシステムドライバを機能拡張するものである。
本発明の実施の形態を理解しやすくするためには、まず、電子計算機１の構成例、オペレーティングシステム１１、及び、フィルタドライバ５０の概要をそれぞれ説明する。
【００６２】
〔電子計算機の構成例〕
図２は、本発明の実施の形態の電子計算機１の構成例を示すブロック図である。図２には、電子計算機１を構成するハードウェア、及び、電子計算機１上で動作するソフトウェアの概要を図示している。本実施の形態のオペレーティングシステム１１は、マイクロソフト社のWindows XP（登録商標）である。しかし、このオペレーティングシステム１１を制限するものではなく、同様な機能を実現できれば、オペレーティングシステムの種類は問わない。
【００６３】
本発明の発明時点では、Windows Vista（登録商標）が最新のオペレーティングシステムである。アプリケーションプログラム１０は、オペレーティングシステム１１の上で動作する。アプリケーションプラットフォームプログラム５８は、オペレーティングシステム１１のユーザモードで動作するアプリケーションソフトウェアであり、フィルタドライバ５０のユーザインターフェースを提供する。フィルタドライバ５０は、オペレーティングシステム１１のカーネルモードで動作するプログラムである。
【００６４】
アプリケーションプラットフォームプログラム５８とフィルタドライバ５０の動作と機能については、後述する。電子計算機１は、図示しないが、中央処理装置（ＣＰＵ）、ＲＡＭ、ＲＯＭを備えた一般の電子計算機である。更に、電子計算機１は、図２に図示したように、例えばディスプレイ（図示せず。）、キーボード１６、マウス17等の入出力装置、例えば、ディスク２５等の補助記憶装置、例えば、コネクタ２２、ネットワークカード２３、ＵＳＢポート２４等の通信用の各種ポートを備えている。
【００６５】
電子計算機１は、ディスプレイ等の出力装置、ＲＡＭ（図１のキャッシュバッファ７１を参照。）等のメモリを備えている。電子計算機１は、外付けハードディスク、スキャナ、プリンタ等の周辺機器を有している。これらの周辺機器は、図示していないが、以下、外部デバイスという。外部デバイスは、コネクタ２２又はＵＳＢポート２４に接続される。電子計算機１は、ネットワーク１３に接続するためのネットワークカード２３を備えている。更に、電子計算機１は、ＵＳＢメモリ１４等のＵＳＢ規格準拠の機器を接続するためのＵＳＢポート２４を備えている。
【００６６】
これらのコネクタ２２、ネットワークカード２３を直接制御し、通信を行うためのプログラムは、それぞれのデバイスドライバであるインターフェースドライバ３２、ネットワークドライバ３３である。コネクタ２２は、ＲＳ-２３２Ｃ、ＩｒＤＡ、ＵＳＢ、ＩＥＥＥ１３９４等のシリアルポート、ＩＥＥＥ１２８４、ＳＣＳＩ、ＩＤＥ等のパラレルポートであることが好ましい。このシリアル転送方式は、１本の信号線で１ビットずつデータを伝送するデータ伝送の方式である。パラレル転送方式は、複数の信号線で同時に複数のビットを転送するデータ伝送の方式である。
【００６７】
このデータ伝送は、電子計算機１に内蔵されたデバイス、電子計算機１とその周辺機器間のデータ伝送に用途ごとに最適なインターフェースを使用している。ここで、その代表的なものから例示する。記憶装置の場合は、パラレル転送方式が高速であり、この伝送方式を採用することが多いが、ＵＳＢ規格の普及により、近年ＵＳＢポートを利用することが多くなっている。外部デバイスは、ネットワーク１３に接続され、電子計算機１のネットワークカード２３によって、データ通信可能な場所に設置される。電子計算機１は、停電、瞬停によるデータロストを防ぐために、バッテリバックアップの装備をしているものが特に好ましい。
【００６８】
電子計算機１は、オペレーティングシステム１１によって制御されて動作する。電子計算機１上で動作するアプリケーションプログラム１０は、オペレーティングシステム１１が提供する機能を利用して動作する。アプリケーションプログラム１０は、オペレーティングシステム１１のカーネルモード、又はユーザモードで動作する実行可能なファイル若しくはソフトウェアである。例えば、アプリケーションプログラム１０は、ワードプロセッシングソフトウェア、テキストエディタ等の文書を作成、編集するためのソフトウェア、又は、アプリケーションプログラム１０は、映像、静止画等を閲覧、編集するための画像処理ソフトウェアである。
【００６９】
更に、アプリケーションプログラム１０は、ＰＤＦ形式のファイル等のような特定の形式のファイルを閲覧、作成、編集するためのソフトウェアである。更に、アプリケーションプログラム１０は、販売店の料金管理用のアプリケーションプログラム等を意味する。ここで記述した例で理解されるように、アプリケーションプログラム１０の種類を限定するものではない。
【００７０】
図２に図示した例では、アプリケーションプログラム１０は、オペレーティングシステム１１のユーザモードで動作するアプリケーションソフトウェアである。ただし、このアプリケーションプログラム１０は、カーネルモードのモジュールを含むものであっても良い。オペレーティングシステム１１は、入力装置からの入力機能、出力装置への出力機能、外部記憶装置やメモリの管理等の基本的な機能を提供し、電子計算機１の全体を制御して動作させ、管理するためのソフトウェアである。オペレーティングシステム１１は、その提供する機能を実現するために多数の実行可能なプログラムから構成されるものである。
【００７１】
また、本発明を理解し再現する上では、オペレーティングシステム１１、及び、そのデバイスドライバについて開示している技術情報が必要である。この技術情報には、オペレーティングシステム１１を開発し、提供しているベンダーが情報開示しているインターネット上のデータ、これらのベンダーから開発者向けに提供された情報が含まれる。例えば、オペレーティングシステム１１、特に本実施の形態に用いているWindows系のオペレーティングシステムについては、一般に広く公開されている多数の書籍があり、その一部から紹介する。本発明を再現するためには、これらの書籍に記述されている技術知識、特に、デバイスドライバ開発に関する知識が重要である。
【００７２】
Windows系のオペレーティングシステムの内部構成、その動作についての書籍一覧：
−  Inside Windows NT by Helen Custer (Microsoft Press, 1992)
−  Inside the Windows NT File System by Helen Custer (Microsoft Press, 1994)
−  Inside Microsoft Windows 2000, Third Edition by David A. Solomon, Mark E. Russinovich (Microsoft Press, 2000)。
デバイスドライバの基礎知識からその開発に関する知識ついての書籍一覧：
−  Programming the Microsoft Windows Driver Model by Walter Oney (Microsoft Press, 1999)
−  Programming the Microsoft Windows Driver Model, Second Edition by Walter Oney (Microsoft Press, 2002)。
−  Microsoft Windows Internals, Fourth Edition: Microsoft Windows Server 2003, Windows XP, and Windows 2000 by Mark E. Russinovich, David A. Solomon (Microsoft Press, 2005, ISBN 0-7356-1917-4)
−  Developing Drivers With the Windows Driver Foundation (Pro Developer)
by Penny Orwick, Guy Smith (Microsoft Press, 2007, ISBN-13 978-0-7356-2374-3)
【００７３】
〔オペレーティングシステムの概要〕
図３は、オペレーティングシステム１１の構成要素の内の代表的なものを図示したものであり、オペレーティングシステム１１と、本発明のフィルタドライバ５０との関係を図示している。オペレーティングシステム１１は、サブシステム６１、エグゼクティブ６３、マイクロカーネル６２、デバイスドライバ３０、ハードウェア抽象化層（ＨＡＬ）６４から構成される。サブシステム６１は、オペレーティングシステム１１のユーザモードで提供されるサービスである。
【００７４】
エグゼクティブ６３は、メモリの管理、プログラム実行のプロセスとスレッドの管理、セキュリティ、Ｉ／Ｏ、ネットワーク、及びプロセス間通信等のオペレーティングシステム１１の基本的なサービスを提供するものである。エグゼクティブ６３は、マイクロカーネル６２と連動して動作し、オペレーティングシステム１１の基本機能を提供する基本プログラムとして、位置づけることができる。図３には、代表的なエグゼクティブ６３を図示している。このエグゼクティブ６３は、例えば、オブジェクトマネージャ６５、プロセスマネージャ６６、キャッシュマネージャ６７、メモリマネージャ６８、Ｉ／Ｏマネージャ６９等がある。
【００７５】
マイクロカーネル６２は、スレッドスケジューリング、割り込み、例外通知、マルチプロセッサの同期等の低レベルの関数を提供する。また、マイクロカーネル６２は、エグゼクティブ６３の内部で使用するルーチンセットと基本オブジェクトを提供する。デバイスドライバ３０は、図２において、インターフェースドライバ３２、ネットワークドライバ３３、ファイルシステムドライバ３４、キーボードドライバ３５、マウスドライバ３６として図示されている。デバイスドライバ３０は、通常は、電子計算機１に接続されたハードウェアごとにプログラムされ、ＨＡＬ６４を介して、そのハードウェア６０を直接制御するものである。
【００７６】
デバイスドライバ３０は、アプリケーションプログラム１０やオペレーティングシステム１１からの入出力機能の要求（Ｉ／Ｏ呼び出し要求）を、特定のハードウェアデバイスに対する入出力機能の要
求（Ｉ／Ｏ要求）に変換するサービスと、ファイルシステムやネットワークドライバ等のシステムサービスを提供する。ＨＡＬ６４は、マイクロカーネル６２、デバイスドライバ３０、及びエグゼクティブ６３をプラットフォーム固有のハードウェア機能から分離し抽象化するためのコード層である。
【００７７】
即ち、ＨＡＬ６０は、電子計算機１の内蔵デバイス２２〜２７や、電子計算機１に接続されている外部デバイス等のハードウェアの種類による違いを吸収し、オペレーティングシステム１１の各サービスに対して抽象化したサービスを提供する。ＨＡＬ６０によって、オペレーティングシステム１１を構成する各種のサービスは、ハードウェアの種類による違いを意識することなくハードウェアにアクセスすることが可能になる。
【００７８】
〔フィルタドライバ５０〕
フィルタドライバ５０は、デバイスドライバ３０内の各インターフェースドライバ３２〜３６間のデータの送受信をカーネルモードで実現する。フィルタドライバ５０は、アプリケーションプログラム１０からデバイスドライバ３０へアクセスするとき、また、デバイスドライバ３０からアプリケーションプログラム１０へデータを送信するときに、共通のインターフェースを提供する。フィルタドライバ５０は、オペレーティングシステム１１のカーネルモードで動作する。
【００７９】
フィルタドライバ５０は、デバイスドライバ３０間の共通のデータの送受信を提供し、仲介する機能を有する。また、フィルタドライバ５０は、オペレーティングシステム１１と複数のデバイスドライバ３０との共通のデータの送受信を提供し、仲介する機能を有する。フィルタドライバ５０の例としては、「電子計算機のインターフェースドライバプログラム」として、WO02/091195号公報、及び、「電子計算機のファイルシステムドライバの制御方法、そのプログラム及びプログラムの記録媒体」として、WO2003/073289号公報等に開示されて公知であり、その詳細な説明の一部を省略する。
【００８０】
フィルタドライバ５０は、アプリケーションプログラム１０からの命令やデータ等を受信し、アプリケーションプログラム１０へのデータを送信するためのインターフェース部５１を有する。フィルタドライバ５０は、図２に図示したように、フィルタドライバ５０の全体の動作を制御するための制御部５２を有する。また、フィルタドライバ５０の動作の履歴を取得するためのログ取得部５３も有する。更に、フィルタドライバ５０は、デバイスドライバ３０を制御するために、デバイスドライバ制御部４０を有する。
【００８１】
制御部５２は、デバイスドライバ制御部４０、インターフェース部５１、ログ取得部５３等のフィルタドライバ５０を構成している各部を制御し、監視するためのもので、必要であれば、各部を呼び出して実行させるもので、フィルタドライバ５０の中核部である。アプリケーションプラットフォームプログラム５８は、アプリケーションプログラム１０と、オペレーティングシステム１１との間に位置し、これらの間に命令やデータの送受信を仲介し制御するためのアプリケーションプログラムである。アプリケーションプラットフォームプログラム５８は、オペレーティングシステム１１のユーザモードで動作する。
【００８２】
アプリケーションプラットフォームプログラム５８は、オペレーティングシステム１１のファイルシステムにアクセスするためのユーザインターフェースを提供するためのアプリケーションプログラムである。アプリケーションプラットフォームプログラム５８は、アプリケーションプログラム１０の起動、これに伴うプロセスの起動を監視し、これらの属性情報を取得する機能を有する。アプリケーションプラットフォームプログラム５８は、Windowsエクスプローラと互換性があるアプリケーションプログラムであるものが好ましい。
【００８３】
インターフェースドライバ３２は、コネクタ２２を制御するためのデバイスドライバである。ネットワークドライバ３３は、ネットワークカード２３を制御するためのデバイスドライバである。ファイルシステムドライバ３４は、ディスク２５、ＵＳＢポートに接続された記憶装置等の補助記憶装置に保存されているファイル、フォルダに関する情報を管理するもの、これらファイルやフォルダへのアクセスを提供するためのプログラムである。アプリケーションプログラム１０は、ディスク２５に対してアクセス要求を出し、ディスク２５に格納されているデータを読み込んだり、ディスク２５にデータを書き込んだりするためのプログラムである。
【００８４】
フィルタドライバ５０は、アプリケーションプログラム１０からデバイスドライバ３０へアクセスするとき、また、デバイスドライバ３０からアプリケーションプログラム１０へデータを送信するときに、共通のインターフェースの機能、役割を果たす。図２に図示したように、フィルタドライバ５０は、インターフェースドライバ３２を制御するためのインターフェース制御部４２を有する。デバイスドライバ制御部４０は、ネットワークドライバ３３を制御するためのネットワーク制御部４３を有する。デバイスドライバ制御部４０は、ファイルシステムドライバ３４を制御するためのファイルシステム制御部４４を有する。
【００８５】
制御部５２は、デバイスドライバ制御部４０、インターフェース制御部４２、ネットワーク制御部４３、ファイルシステム制御部４４等のフィルタドライバ５０の他の部を制御し、監視するためのものである。制御部５２は、フィルタドライバ５０の中核部である。フィルタドライバ５０のインターフェース制御部４２、ネットワーク制御部４３、ファイルシステム制御部４４等は、デバイスドライバ３０を制御することで、最終的には、電子計算機１に、接続又は内蔵されているデバイスを制御するものと理解することができる。図１に示したように、ファイルシステムドライバ３４及びディスクドライバ３８は、フィルタドライバ５０とアプリケーションプログラム１０との間に位置している。
【００８６】
これは、アプリケーションプログラム１０から出されたデータが流れる順番に従って表現したものであり、フィルタドライバ５０の基本的な考え方に反しない。つまり、フィルタドライバ５０は、デバイスドライバ３０と、エグゼクティブ６３の間に位置し、エグゼクティブ６３とデバイスドライバ３０とのデータ送受信を制御する。更に、このフィルタドライバ５０は、デバイスドライバ３０間のデータ通信を制御するものである。よって、エグゼクティブ６３から１つのデバイスドライバ３０へデータを送信し、このデバイスドライバ３０から別のデバイスドライバへのデータ通信を、フィルタドライバ５０が制御することができる。
【００８７】
〔SCSIリクエストの処理フローチャート〕
本発明の実施の形態においては、フィルタドライバ５０が、ディスクドライバ３８とミニポートドライバ３７との間のデータ通信の制御を行う。このデータ通信の制御の例は、SCSIリクエストの処理によって、説明する。図４は、SCSIリクエストを処理する動作を説明するための図である。Ｉ／Ｏマネージャ６９は、フィルタドライバ５０を介してデバイスドライバ３０との通信を行うとき、「Ｉ／Ｏ Request Packet（以下、ＩＲＰという。詳しくは、後述説明する。）」と呼ばれる構造体を用いて行う。
【００８８】
このデータ通信を図４にまとめている。図中には、ＩＲＰが送信された方向を矢印で示している。SCSIリクエストは、IO_CTLという形式で発行される。まず、アプリケーションプログラム１０からデバイスへアクセス要求を出す。本例のデバイスは、ディスク２５である。Ｉ／Ｏマネージャ６９は、このアクセス要求を受け取り、このアクセス要求の内容をまとめてＩＲＰを作成し、ファイルシステムドライバ３４に送信する。ファイルシステムドライバ３４は、このＩＲＰを受け取る。ファイルシステムドライバ３４は、ディスクドライバ３８にしてもらう継続処理のための情報で、既存又は新規に作成した情報をＩＲＰに追加し、Ｉ／Ｏマネージャ６９に返す。
【００８９】
ここで追加された情報は、図中には、ＩＲＰの後ろに追加され、「１」で示されている。次に、Ｉ／Ｏマネージャ６９は、ファイルシステムドライバ３４からＩＲＰを受け取り、ディスクドライバ３８へこのＩＲＰを渡す。同様に、ディスクドライバ３８は、情報をＩＲＰに追加し、ＩＲＰをＩ／Ｏマネージャ６９へ返す。ディスクドライバ３８によって、ＩＲＰに追加された情報は、図中に「２」で図示されている。Ｉ／Ｏマネージャ６９は、ディスクドライバ３８からＩＲＰを受け取り、これを、フィルタドライバ５０へＩＲＰを渡す。フィルタドライバ５０は、このＩＲＰを受け取り、その内容を分析する。
【００９０】
従来は、Ｉ／Ｏマネージャ６９は、ディスクドライバ３８からＩＲＰを受け取り、これを、ミニポートドライバ３７へ渡していた。フィルタドライバ５０は、このＩＲＰの内容を分析して、読み込み処理、書き込み処理、フラッシュ処理等の処理を行う。フィルタドライバ５０内でこの処理が完了する場合は、完了報告をＩＲＰに追加して、Ｉ／Ｏマネージャ６９に返す。フィルタドライバ５０内で、フラッシュ処理又は読み込み処理が、必要な場合は、Ｉ／Ｏマネージャ６９に完了報告をしない。このとき、フィルタドライバ５０は、独自にＩＲＰを作成する。この新しく作成されたＩＲＰは、図４中に、ＩＲＰnewとして図示されている。
【００９１】
そして、フィルタドライバ５０は、IoCallDriver関数を用いてミニポートドライバ３７を呼び、このＩＲＰnewを、ミニポートドライバ３７に渡す。フィルタドライバ５０から、ミニポートドライバ３７へＩＲＰnewを渡すとき、Ｉ／Ｏマネージャ６９を仲介する。ミニポートドライバ３７は、フィルタドライバ５０から受けとったＩＲＰnewに記述された処理を、ディスク２５に対して行う。そして、ミニポートドライバ３７は、この処理の結果を、ＩＲＰnewに追加して、Ｉ／Ｏマネージャ６９を介してフィルタドライバ５０に返す。ミニポートドライバ３７によって、ＩＲＰnewに追加されたデータは、図４中に「４」で図示されている。
【００９２】
フィルタドライバ５０は、ミニポートドライバ３７からＩＲＰnewを受信し、完了報告を作成する。この完了報告は、フィルタドライバ５０から、ディスクドライバ３８、ファイルシステムドライバ３４、を介して、アプリケーションプログラム１０に報告される。この完了報告は、アプリケーションプログラム１０から出されたアクセス要求をフィルタドライバ５０が受け取った手順と、逆の手順をたどって、アクセス要求の発行元に報告される。図４の中の、各ドライバによって、添付された１，２，３，及び４は、それぞれIO_STACK_LOCATION構造体（詳しくは、後述する。）で表現される。よって、複数のIO_STACK_LOCATION構造体が連続して４つ並んでいることになる。
【００９３】
〔ＩＲＰについて〕
ここまでに、データのやりとりがＩＲＰを用いて行われていることを説明したが、ここで、ＩＲＰについて少し説明する。ＩＲＰの概念は、当業者にとっては、自明なことであるが、その概要を説明する。ＩＲＰは、アプリケーションプログラム１０からアクセス要求（例えば、Ｉ／Ｏ要求。）が発生した際に、Ｉ／Ｏマネージャ６９が作成する構造体である。ＩＲＰは、オブジェクトではなく、データのパケットで、その構造体は非常に複雑な形をとっている。
【００９４】
図５（ａ）には、ＩＲＰのデータの構成例を示している。図５（ｂ）には、ＩＲＰの具体的な例を示している。ＩＲＰを参照番号５００で図示している。ＩＲＰ５００は、Ｉ／Ｏマネージャ６９から、適当なドライバのディスパッチルーチンを呼び出す時に、引数として渡される。ディスパッチルーチンは、アプリケーションプログラム１０、又は上位のデバイスドライバからデバイスに対する要求を処理するプログラムである。ＩＲＰ５００の構造体は、ヘッダー５０１とスタックロケーション５０２の二つの部分からなる。スタックロケーション５０２の数は、Ｉ／Ｏ要求に関わるドライバの階層と関係している。
【００９５】
例えば、上位、中間、物理の3つのドライバを介して一つのアクセス要求を処理する場合、３つのスタックロケーションが存在する。ヘッダー５０１の値と大きさは、ドライバの階層に関係なく固定させている。次のコード１は、ＩＲＰの構造体の簡略した例である。
［コード１］
2010198368.tif 000003
【００９６】
図５とコード１の中の関数の意味は、次の通りである。
MdlAddress:  ドライバがダイレクトＩ／Ｏを使用する際に要求元のバッファを表すMDLを指す。
Flags:  このフィールドは、一般にファイルシステムにのみ関係し、フラグを示す。
AssociatedIrp.MasterIrp:  アソシエイトＩＲＰに関連付けられたマスターＩＲＰへのポインタである。このフィールドは、ファイルシステムのような最上階層のドライバにのみ関連する。
AssociatedIrp.SystemBuffer:  ドライバがバッファードＩ／Ｏを使用する際に非ページプールメモリにある中間バッファへのポインタを示す。
【００９７】
IoStatus:  Ｉ／Ｏステータスブロックである。ＩＲＰが完了するとその完了状態がIoStatus.Statusに設定される。またIoStatus.Informationに読み書きされたバイト長が保持される。
RequestorMode:  Ｉ／Ｏ要求元の実行モード（ユーザーモードかカーネルモード）を示す。
Cancel,CancelIrql,CancelRoutine:  実行中のＩＲＰ処理を取り消す際に使用する。
UserBuffer:  ドライバがニーザーＩ／Ｏを使用する際にデータバッファの仮想アドレスを入れる。
Tail.Overlay.DeviceQueueEntry:  システムキューを使うドライバのＩＲＰキュー処理のために使用する。
【００９８】
Tail.Overlay.Thread:  要求元のスレッド制御ブロックへのポインタである。
Tail.Overlay.ListEntry:  ドライバがＩＲＰを所有している間、このフィールドは次のＩＲＰへのリンクに使う。
スタックロケーション５０２は、階層ドライバのそれぞれのドライバに対応している。スタックロケーション５０２は、IO_STACK_LOCATION構造体により次のコードのように定義される。次のコード２は、スタックロケーション５０２の構造体の例である。
【００９９】
［コード２］
2010198368.tif 000004
【０１００】
ここで、
MajorFunction:  Ｉ／Ｏ要求に関連したIRP_MJ_READ, IRP_MJ_WRITE等のメジャーＩ／Ｏ機能コードを示す。
MinorFunction:  Ｉ／Ｏ要求に関連したマイナーＩ／Ｏ機能コードを示す。Window 2000/XPドライバのPnP機能と電源管理によく使用される関数である。
Flags:  Ｉ／Ｏ操作に特有の実行フラグを示し、このフラグは主にファイルシステムと関係する。
【０１０１】
Control:  Ｉ／Ｏマネージャによって設定、参照されるフラグ群を表し、特定のＩＲＰをどのように処理する必要があるか示している。
Parameters:  このフィールドはメジャーＩ／Ｏコードによって定義されている共用体である。
DeviceObject:  Ｉ／Ｏ要求の対象となるデバイスオブジェクトへのポインタである。
FileObject:Ｉ／Ｏ要求に関連するファイルオブジェクトへのポインタである。
【０１０２】
〔マップ７２及びバッファ管理テーブル７３について〕
図６は、マップ７２とバッファ管理テーブル７３の例を図示したものである。マップ７２とバッファ管理テーブル７３は、ディスク２５と、キャッシュバッファ７１に格納されているデータの関連付けを示すデータである。マップ７２とバッファ管理テーブル７３は、テーブル式のデータである。マップ７２は、ディスク２５の全体の記憶領域に関するもので、ディスク２５のどの領域のデータが、キャッシュバッファ７１に格納されているかを示すものである。
【０１０３】
バッファ管理テーブル７３は、キャッシュバッファ７１に格納されているデータの場所を示すデータである。記録媒体に電子データを記録するとき、物理的な最小単位は、ビットである。８ビットは、１バイトである。本実施の形態においては、ディスク２５へデータを書き込むとき、複数のバイトをまとめて書き込みする。１回の動作で書き込みするデータの最小単位を、アクセス最小単位ｎａとする。ディスク２５全体の容量をＮバイトとする。Ｎを、ｎａで割った値を、ｎmaxとする。このｎmaxは、ディスク２５をアクセス最小単位ｎａに区切ったときにできる領域の数である。ディスク２５は、ｎmaxの領域からなり、それを先頭から「０」、「１」、…、「ｎｉ」、…「ｎmax-1」と番号付けて管理する。以下は、この領域に付けた固有番号を、インデックスiという。iは、最小値「０」から、最大値「ｎmax-1」の整数番号である。
【０１０４】
図６のマップ７２は、ディスク２５の全体を、アクセス最小単位na毎に、１対１で管理する表である。マップ７２のインデックス欄７４は、インデックスiになる。値欄７５は、そのインデックスに対応するデータが、キャッシュバッファ７１にあるかないかを示す値である。よって、値欄７５は、キャッシュバッファ７１にデータがある場合を示す「１（ＴＲＵＥ）」と、キャッシュバッファ７１にデータがない場合を示す「０（ＦＡＬＳＥ）」からなり、１ビットである。
【０１０５】
例えば、アクセス最小単位ｎａが512バイト、ディスク容量Nが4GBを、考える。このとき、インデスクの数ｎmaxは、800万個（＝4GB／512B）になる。ディスク２５のオフセットは、バイト単位の値であり、ディスク２５上に書き込む位置を示す値である。キャッシュするオフセットと、そのサイズを管理する際に、メモリを節約するためにオフセットを最小単位で割ったインデックスで管理している。バッファ管理テーブル７３は、インデックス欄７６と、ポインタ欄７７からなっている。インデックス欄７６のデータは、マップ７２のインデックス欄７4の中の値が「１（ＴＲＵＥ）」のインデックスである。
【０１０６】
ポインタ欄７７は、キャッシュバッファ７１内の位置を表すポインタである。言換えると、バッファ管理テーブル７３は、データをディスク２５への書き込みする位置を表すインデックスｎiからなるインデックス欄７６と、そのデータのキャッシュバッファ７１内の位置を表すポインタからなるポインタ欄７７からなる。図６の例では、例えば、アクセス最小単位ｎａが512バイトの場合、インデックス「0」は、ディスク２５の先頭から0〜511バイトを指す。インデックス「１」は、ディスク２５の先頭から512〜1023バイトを指す。
【０１０７】
マップ７２を参照することにより、キャッシュバッファ７１内に、要求されたデータがあるかを確認することができる。また、マップ７２を参照した結果キャッシュバッファ７１内に要求されたデータがあった場合、バッファ管理テーブル７３を参照して、そのデータが、キャッシュバッファ７１内に格納されている場所を特定することができる。
図７は、キャッシュバッファ７１の構造例を示す図である。図８は、マップ７２の構造例を示す図である。図９は、バッファ管理テーブル７３の構造例を示す図である。
【０１０８】
〔書き込み処理及びフラッシュ処理〕
フラッシュ処理とは、本実施の形態では、キャッシュバッファ７１にキャッシュされているデータをディスク２５へ書き込む処理を言う。フラッシュ処理は、本実施の形態においては、次の表に示す条件で行われる。この表１の第１欄はフラッシュ処理の条件を示す、第２欄はフラッシュ処理の条件の説明である。
【０１０９】
【表１】
2010198368.tif 000005
【０１１０】
書き込み処理とは、本実施の形態では、データをディスク２５へ書き込みする書き込み要求を処理する手順を言う。書き込み要求の書き込みデータは、まず、キャッシュバッファ７１にキャッシュされる。そして、キャッシュバッファ７１のデータは、上述のフラッシュ処理にて、実際に、ディスク２５へ書き込まれる。書き込み処理は、キャッシュバッファ７１へのキャッシュ処理ともいうことができる。書き込み処理は、アプリケーションプログラム１０又はオペレーションシステム１１等のアクセス要求を発した側からみた場合の言い方で、キャッシュ処理はフィルタドライバ５０から見た言い方である。
【０１１１】
図１０は、書き込みデータの流れを図示したブロック図である。フィルタドライバ５０は、ディスクドライバ３８から、ディスク２５への書き込みデータ１００を受け取る。フィルタドライバ５０は、書き込みデータ１００を、セル１０１に分割する。セル１０１の大きさは、上述のアクセス最小単位ｎａである。そして、フィルタドライバ５０は、分割されたセル１０１ｓの先頭のセル１０１から、キャッシュバッファ７１に書き込む。フィルタドライバ５０は、キャッシュバッファ７１の先頭から順番に、セル１０１を書き込む。
【０１１２】
キャッシュバッファ７１にすでにデータが格納されている場合、フィルタドライバ５０は、キャッシュバッファ７１の空き領域の先頭から、セル１０１を書き込む。ディスク２５へ書き込む位置が同じセル１０１は、キャッシュバッファ７１内には、同一場所に上書きされる。例えば、セル１０１と、キャッシュバッファ７１内のセル１０２は、ディスク２５の同じ位置に書き込まれるセルである場合は、セル１０１がセル１０２に上書きされる。書き込みデータ１００のサイズに対して、キャッシュバッファ７１の空き領域が足りない場合は、まず、書き込みデータ１００を保留する。このとき、書き込みデータ１００は、セルごとに分割されて保留される。
【０１１３】
この保留されたデータは、図中に、書き込みデータ１００ｐと書かれており、ＲＡＭ上で、保留される。このとき、キャッシュバッファ７１は、キャッシュフルとみなされ、書き込みデータ１００ｐ用の空き領域ができるまでに、フラッシュ処理が行われる。そして、フラッシュ処理が行われ、キャッシュバッファ７１には、書き込みデータ１００ｐを書き込むのに必要な領域以上の領域ができると、書き込みデータ１００ｐがキャッシュバッファ７１にキャッシュされる。
【０１１４】
フラッシュ処理は、書き込み（キャッシュ）処理又は読み込み処理とは別に行う。フラッシュ処理は、キャッシュバッファ７１の先頭からアクセス最小単位ずつ行う。図１０に図示したように、フィルタドライバ５０は、キャッシュバッファ７１からセル１０３を取り出し、ミニポートドライバ３７を介して、ディスク２５に書き込む。バッファ管理テーブル７３には、セル１０３のポインタと、インデックス７６が入っており、このインデックスを基にディスク２５上の位置を計算して、ディスク２５に書き込む。
【０１１５】
〔読み込み処理〕
フィルタドライバ５０は、ディスクドライバ３８から、読み込み要求を受け取る場合の手順をここで説明する。フィルタドライバ５０は、読み込み要求を受け取ると、要求された要求データが、どこにあるかを探す。要求データは、保留中の書き込みデータ１００ｐ、キャッシュバッファ７１、又は、ディスク２５に格納されている可能性がある。保留中のデータは、ＩＲＰキューによって管理される。ＩＲＰキューは、オペレーティングシステム１１で用意されたＩＲＰをシリアライズするために使用できる、ポインタのチェイン可を実現するための機構である。
【０１１６】
このため、フィルタドライバ５０は、要求データが、書き込みデータ１００ｐにあるかを確認する。ここに要求データがある場合は、フィルタドライバ５０は、要求データを取得して、ディスクドライバ３８へ渡す。フィルタドライバ５０は、要求データが、書き込みデータ１００ｐにない場合は、キャッシュバッファ７１の中に確認する。ここに要求データがある場合は、フィルタドライバ５０は、要求データを、キャッシュバッファ７１から読み込み、ディスクドライバ３８へ渡す。要求データが、キャッシュバッファ７１にない場合は、フィルタドライバ５０は、ディスク２５から要求データを読み込み、ディスクドライバ３８へ渡す。
【０１１７】
フィルタドライバ５０は、読み込み要求を受け取ったとき、読み込み処理中に排他を掛ける。つまり、フィルタドライバ５０は、ディスクドライバ３８へ要求データを渡して読み込み処理が終わるまでに、他の処理を止める。保留するデータが、複数ある場合は、すべてをＲＡＭ上に保留し、書き込み要求が出された順番に、最初から処理する。つまり、先入れ先出し方式で、保留データを処理する。保留データがキャッシュバッファ７１にキャッシュされ、IoCompleteRequest関数にて完了処理が行われてから、ＲＡＭ上に保留データを開放する。
【０１１８】
図１１には、本発明の実施の形態のフィルタドライバ５０の詳細な機能を図示したものである。フィルタドライバ５０は、インターフェース部５１ａ、制御モジュール５２ａ、フラッシュ処理モジュール５５ａ、読み込み処理モジュール５６ａ、書き込み処理モジュール５７ａ、デバイスドライバ制御部４０ａ、ＩＲＰ作成モジュール５８ａ等からなる。
以下、各モジュールの詳細な動作例をフローチャートで示し、説明する。
【０１１９】
〔制御モジュール〕
図１２は、制御モジュール５２ａの動作概要を示すフローチャートである。まず、制御モジュール５２ａは、発行されたアクセス要求を受信する。制御モジュール５２ａは、ディスクドライバ３８から、インターフェース部５１ａを介して、アクセス要求を受信する。制御モジュール５２ａは、フィルタドライバ５０のキャッシュ機能が停止しているかを確認する（ステップ１００）。フィルタドライバ５０のキャッシュ機能が停止していると、読み込み要求又は書き込み要求のためのＩＲＰは、フィルタドライバ５０を通過して、下位のデバイスドライバ（例えば、ミニポートドライバ３７。）へ送信される（ステップ１０８）。
【０１２０】
ステップ１００の判定は、フィルタドライバ５０が正常に動作し、キャッシュバッファ７１に、書き込みデータをキャッシュする動作が有効であるかを確認するものである。よって、ステップ１００において、キャッシュ機能が有効又は無効によって、キャッシュ処理するか否かの判定をする。キャッシュ機能が停止している場合は、アクセス要求が格納されているＩＲＰを、下位のデバイスドライバへ渡す（ステップ１０８）。例えば、ＩＲＰは、下位のデバイスドライバのミニポートドライバ３７へ渡す。ステップ１００において、キャッシュ機能が有効な場合は、アクセス要求が、読み込み処理、又は、書き込み処理の何れかであるか、それ以外の処理であるかを確認する（ステップ１０１）。
【０１２１】
アクセス要求が、読み込み処理、又は書き込み処理以外の処理である場合は、アクセス要求が格納されているＩＲＰを、下位のデバイスドライバへ渡す（ステップ１０８）。アクセス要求が、読み込み処理又は書き込み処理である場合は、制御モジュール５２ａは、アクセス要求が書き込み処理であるか否かを確認する（ステップ１０２）。ステップ１０２の判定で、書き込み処理ではない場合は、制御モジュール５２ａは、読み込み処理モジュール５６ａを呼び出し、読み込み処理を行う（ステップ１０７）。読み込み処理モジュール５６ａの動作例は、図１４のフローチャートである。
【０１２２】
ステップ１０２の判定で書き込み処理である場合は、制御モジュール５２ａは、フラッシュ処理が実行されているかを確認する（ステップ１０３）。フラッシュ処理が実行されている場合は、ステップ１１０へ進む。フラッシュ処理が実行されていない場合は、バッファ管理テーブル７３（図６参照）に空き領域があるか否かを確認する（ステップ１０４）。ここで、バッファ管理テーブル７３に空き領域がない場合は、ステップ１１０へ進む。バッファ管理テーブル７３に空き領域がある場合は、アクセス要求が、書き込み処理で、かつ、キャッシュバッファ７１（図１０参照）には書き込みデータを格納できる空き領域があるかを、確認する（ステップ１０５）。
【０１２３】
このとき、キャッシュバッファ７１の空き領域が足りない場合、制御モジュール５２ａは、フラッシュ処理モジュール５５ａを呼び出し、フラッシュ処理を行う（ステップ１０９）。フラッシュ処理モジュール５５ａの動作例は、図１５のフローチャートに示す。フラッシュ処理が実行された後、ステップ１１０へ進む（ステップ１０９）。アクセス要求が書き込み処理で、かつ、キャッシュバッファ７１には書き込みデータを格納できる空き領域がある場合は、制御モジュール５２ａは、書き込み処理モジュール５７ａを呼び出し、書き込み処理を行う（ステップ１０６）。
【０１２４】
この書き込み処理は、ディスク２５への書き込みデータを、キャッシュバッファ７１にキャッシュする処理である。書き込み処理モジュール５７ａの動作例は、図１３のフローチャートである。ステップ１１０においては、制御モジュール５２ａは、ＩＲＰキューを排他取得する。そして、このＩＲＰキューの末尾に、現在のアクセス要求のＩＲＰが追加される（ステップ１１０）。最後に、制御モジュール５２ａは、ＩＲＰキューの排他を解除する（ステップ１１２）。
【０１２５】
〔書き込み（キャッシュ）処理モジュール〕
図１３は、書き込み処理モジュール５７ａの動作例の概要を示すフローチャートである。書き込み処理モジュール５７ａは、アクセス要求のＩＲＰ(図５（ｂ）のParameters_xxxという部分)から、ディスク２５のオフセット、バッファデータ、及び、データサイズを参照する（ステップ２０１）。このParameters_xxxメンバは共用体になっており、IRP_MJ_SCSIリクエストの場合は、そのリクエスト固有のパラメータが指定される。
【０１２６】
このオフセットは、読み込み処理又は書き込み処理を行う位置を、ディスク２５の先頭から計算した値である。このバッファデータは、書き込みされるデータで、図１０の書き込みデータ１００に該当する。このデータサイズは、書き込みデータ１００のデータのサイズである。そして、書き込み処理モジュール５７ａは、オフセットとデータサイズから、キャッシュするセル数ｎcell（データサイズをアクセス最小値ｎａで割った値）を計算する（ステップ２０２）。セル数は、図１０のセル１０１の数になる。
【０１２７】
ディスク２５にデータを書き込みする先頭インデックスＨ（＝オフセット／ｎａ）を計算する（ステップ２０３）。カレントインデックス「ｉ」は、上位のデバイスドライバから発行された読み込み又は書き込み要求のオフセットより、Ｈの式で計算された値になる。カレントセルｎは、書き込みされるセルの番号である（ステップ２０４）。
ｎcell＝データサイズ／ｎａ
ｉ＝Ｈ
ｎ＝０
【０１２８】
マップ７２のiビット目の値を参照する（ステップ２０５）。参照が失敗すると、キャッシュバッファ７１を参照し、空領域のポインタを取得する（ステップ２０６）。この参照が失敗するとは、図６のマップ７２上のアクセス要求のオフセット（ディスク２５上の位置）に該当するデータが存在しない、つまり、キャッシュバッファ７１にキャッシュされていないことを意味する。取得したポインタ（MdlAddressから得られるバッファのポインタ）が指すキャッシュバッファ７１の位置に、ＩＲＰの該当データをコピーする（ステップ２０７）。この該当データは、ＩＲＰのMdlAddressで指し示されるバッファに格納されている。
【０１２９】
このバッファは、直接参照はできないため、オペレーティングシステムが提供するＡＰＩ(MmGetSystemAddressForMdlSafe)を使用し、単純なメモリポインタに変換をしてから参照を行う。このコピーによって、書き込み処理が行われたことになる。マップ７２のｉビット目をオンにする（ステップ２０８）。逆に、参照が成功するとは、図６のマップ７２上のアクセス要求のオフセットに該当するデータがある、つまり、キャッシュバッファ７１にキャッシュされていることを意味する。ステップ２０５で、iビット目を参照し、成功すると、バッファ管理テーブル７３から一致するオフセットを検索する（ステップ２０９）。
【０１３０】
このオフセットが見つかった場合は、ステップ２１４へ進む（ステップ２１０）。このオフセットが見つからない場合は、エラーを出力する（ステップ２１３）。ステップ２１４では、該当セルを、キャッシュバッファ７１に、ＩＲＰからコピーする。具体的には、上述のMdlAddressから得られるバッファのポインタからメモリコピーをする。マップ７２上のi番目のビットが立っていた場合（i番目のビットの値が１の場合。）、バッファ管理テーブル７３には、関連するオフセットとバッファのポインタに関する記述は、必ず存在する前提に担っており、これが矛盾するとエラーとなる（ステップ２１３）。
【０１３１】
ステップ２１４で、コピー先に、データがあると、上書きする（ステップ２１４）。そして、iとn値を１つずつ増加する（ステップ２１５）。ｎの値が増加され、書き込みされる次のセルになる。ｎがｎcellに達したときは、ＩＲＰ完了処理を実行する（ステップ２１６、及び、ステップ２１７）。ｎがｎcellに達しないときは、ステップ２０５からの処理を繰り返す（ステップ２１６、及び、ステップ２０５）。ＩＲＰ完了処理は、アプリケーションプログラム１０又はオペレーティングシステム１１から発行された読み込み要求又は書き込み要求を完了し、発行元の処理を、継続して実行可能にする処理である。
【０１３２】
〔読み込み処理モジュール〕
図１４は、読み込み処理モジュール５６ａの動作例を示すフローチャートである。ＩＲＰに指定されたオフセット、データサイズのデータをディスク２５から読み込む（ステップ３００）。この読み込まれたデータは、ＲＡＭ上に、ＩＲＰに指定されたバッファに格納される。これは、読み込み要求に付随されている読み込み用バッファがそのままの形式ではアクセスできないため、これをアクセスしやすくするために、メモリにマップする処理である。
【０１３３】
要求された読み込みデータは、キャッシュバッファ７１に入っている可能性があるので、次の手順で、キャッシュバッファ７１内に該当するデータがあるかを探す。キャッシュバッファ７１内に該当するデータがある場合は、ＩＲＰに指定されたバッファのデータを、キャッシュバッファ７１のデータで書き換える。読み込まれたデータサイズから、セル数ｎcellを計算する。そして、オフセットの値から、先頭インデックスHを計算する（ステップ３０２）。カレントセルｎを初期化する（ステップ３０２）。
ｎcell＝データサイズ／ｎａ
Ｈ＝オフセット／ｎａ
ｎ＝０
【０１３４】
マップ７２のiビット目を参照する（ステップ３０３）。参照が失敗すると、ステップ３１２へ進む。ステップ３０３で、iビット目を参照し、成功すると、キャッシュバッファ７１から一致するセルを検索する（ステップ３０６）。このセルが見つからない場合は、エラーを出力する（ステップ３１０）。ステップ３０７で、一致するセルが見つると、ステップ３１１へ進む。ステップ３１１では、WDF_ReadCacheを実行する（ステップ３１１）。WDF_ReadCacheは、上位のデバイスドライバから発行された読み込み要求と、オフセットが一致しているキャッシュ済みデータを、ＩＲＰのバッファにメモリコピーする処理である。
【０１３５】
ステップ３１２では、iとn値を１つずつ増加する。ｎがｎcellに達したときは、ＩＲＰ完了処理を実行する（ステップ３１３、及び、ステップ３１４）。ＩＲＰ完了処理は、図１３の書き込み処理モジュールの中のＩＲＰ完了処理と同様なものである。ｎがｎcellに達しないときは、ステップ３０３からの処理を繰り返す（ステップ３１３、及び、ステップ３０３）。
【０１３６】
〔フラッシュ処理モジュール〕
図１５は、フラッシュ処理モジュール５５ａの動作例の概要を示すフローチャートである。フラッシュ処理モジュール５５ａが実行されると、ＩＲＰ作成モジュール５９ａを呼び出して実行する（４００）。、ＩＲＰ作成モジュール５９ａの例は、図１７のフローチャートに図示している。その後、フラッシュ処理モジュール５５ａは、まず、フラッシュフラグをオンにする（ステップ４０１）。フラッシュフラグは、ディスクドライブ毎に存在するフィルタドライバ５０のデバイスオブジェクトのデバイスエクステンション構造体に格納されており、ドライバ作成者が自由に設定できる構造体である。
【０１３７】
このフラッシュフラグは、フィルタドライバ５０内のどのモジュールからもアクセス可能である。フラッシュフラグのオンは、ゼロ以外（TRUE）の値になっている。逆に、フラッシュフラグのオフは、ゼロ「０」（FALSE）の値になっている。フラッシュフラグをオンにしたあとは、フラッシュ処理モジュール５５ａは、フラッシュ回数ｎcellを計算する（ステップ４０２）。
ｎcell=UnitBufferPoint
フラッシュ回数ncellは、バッファ管理テーブル７３内に格納されているキャッシュデータのセル数になる。フラッシュ処理は、セルごとに行われるので、フラッシュ回数は、フラッシュ処理される回数である。
【０１３８】
そして、フラッシュ個数の初期値（n=0）を設定する（ステップ４０３）。フラッシュ個数は、現在フラッシュ処理全体にて実際に書き込まれたキャッシュバッファ内のセル数になる。これの初期値は、通常は、「０」になっている。バッファ管理テーブル７３（図６及び８を参照。）から、オフセット、バッファポインタを参照する（ステップ４０４）。このオフセットは、ディスク２５上の書き込みオフセットに相当する。バッファポインタは、データが入っているメモリ場所のポインタである。
【０１３９】
該当キャッシュバッファ７１をディスク２５に書き込む（ステップ４０５）。マップ７２（図６及び図８を参照。）の該当位置にビットをリセットする（ステップ４０６）。ＩＲＰキューを排他取得する（ステップ４０７）。ＩＲＰキューの先頭を参照する（ステップ４０８）。書き込み要求（SCSIWrite）かを確認する（ステップ４０９）。書き込み要求ではない場合は、ＩＲＰキューから、ＩＲＰを取り出す（ステップ４１０）。そして、ＩＲＰキューを排他取得する（ステップ４１１）。排他取得は、ＩＲＰキューに格納される読み込み要求又は書き込み要求の順番が異なったり、リンクの不正が発生しないように、するために必要な処理である。
【０１４０】
読み込み（SCSIRead）処理のために、読み込み処理モジュール５６ａを呼び出して実行する（ステップ４１２）。この読み込み処理モジュール５６ａの例は、図１４のフローチャートである。その後、そして、ステップ４１９へ進む。ステップ４０９の書き込み要求（SCSIWrite）の確認で、書き込み要求の場合は、キャッシュバッファ７１の空き領域を確認する（ステップ４１３）。空き領域がない場合は、ＩＲＰキューを排他取得する（ステップ４１４、及び、ステップ４１５）。そして、ステップ４１９へ進む。ステップ４１３の確認で、キャッシュバッファ７１の空き領域がある場合は、ＩＲＰキューから、ＩＲＰを取り出す（ステップ４１６）。そして、ＩＲＰキューを排他取得する（ステップ４１７）。
【０１４１】
書き込み処理（SCSIWrite）を実行する（ステップ４１８）。書き込み処理の例は、図１３のフローチャートである。その後、ステップ４１９へ進む。ステップ４１９では、n値を１つ増加する（ステップ４１９）。ｎがｎmaxに達したときは、フラッシュフラグをリセットする（ステップ４２０、及び、ステップ４２１）。このリセットでは、フラッシュフラグは、「ゼロ（FALSE）」値になる。ｎがｎmaxに達しないときは、ステップ４０４からの処理を繰り返す（ステップ４２０、及び、ステップ４０４）。
【０１４２】
〔ＩＲＰ作成モジュール〕
図１７には、ＩＲＰ作成モジュール５８ａの動作概要を示すフローチャートである。ＩＲＰ作成モジュール５８ａは、フィルタドライバ５０のフラッシュ処理モジュール５５ａの処理開始時にから呼び出されて動作する。ＩＲＰ作成モジュール５８ａは、動作を開始すると、IoGetNextIrpStackLocation関数で、下位のデバイスドライバ（例えば、ミニポートドライバ３７。）のスタックロケーションを取得する（ステップ５０１）。
【０１４３】
続けて、ＩＲＰ作成モジュール５８ａは、DeviceExtensionからワーク用ＩＲＰであるＩＲＰnewを取得する（ステップ５０２）。ＩＲＰnewは、フィルタドライバ５０が、事前に作成したＩＲＰである。ＩＲＰ作成モジュール５８ａは、ExAllocatePoolWithTag関数にて、NewSRBを割り当てる（ステップ５０３）。そして、新規に作成中のＩＲＰnewの各メンバーに必要な値を代入する（ステップ５０５）。例えば、SCSIコマンド及び書き込み用バッファを代入する。そして、ＩＲＰ作成モジュール５８ａは、ＩＲＰnewのMajorFunctionに、RP_MJ_INTERNAL_DEVICE_CONTROLをセットし（ステップ５０６）、NewSRBのDataBufferに読み込むデータの格納先ポインタをセットする（ステップ５０７）。
【０１４４】
その後、ＩＲＰ作成モジュール５８ａは、ＮｅｗSRBのDataTransferLengthに、読み込むデータのサイズをセットする（ステップ５０８）。ＩＲＰ作成モジュール５８aは、上位のデバイスドライバから発行されたＩＲＰに指定されたオフセットを論理ブロックアドレスに変換し、そのサイズを論理ブロックバイトに変換する（ステップ５０９）。ＩＲＰ作成モジュール５８ａは、ＮｅｗSRBのCDBにオフセットをセットする（ステップ５１０）。そして、ＮｅｗSRBのCDBにサイズをセットする（ステップ５１１）。最後は、ＩＲＰ作成モジュール５８ａは、IoAllocateMdl関数で、MemoryDescriptorListを割り当てる（ステップ５０）。
【０１４５】
〔ディスクドライバとミニポートドライバとのインターフェース〕
本実施の形態のオペレーティングシステム１１の標準設計では、ディスクドライバ３８とミニポートドライバ３７の間のインターフェースが、SCSIリクエストで行われている。本発明のフィルタドライバ５０は、図１０に示すように、ディスクドライバ３８から発行されたアクセス要求（例えば、ＳＣＳＩリクエスト。）を、インターフェース部５１ａによって、受けとり、処理する。そして、フィルタドライバ５０とミニポートドライバ３７とのデータ送受信は、フィルタドライバ５０が、ミニポートドライバ３７向けのアクセス要求（例えば、SCSIリクエスト。）を発行し、デバイスドライバ制御部４０ａから、ミニポートドライバ３７へ送信して行われる。
【０１４６】
ミニポートドライバ３７は、フィルタドライバ５０が発行したアクセス要求を受け取り、処理して、これに応答する。このように、フィルタドライバ５０とミニポートドライバ３７と間にデータのやり取りが行われる。フィルタドライバ５０がディスクドライバ３８とミニポートドライバ３７とのインターフェースに用いる代表的な関数を次の表２に示す。これらの関数は、WINDOWS標準のものである。
【０１４７】
【表２】
2010198368.tif 000006
【０１４８】
インターフェース部５１ａは、ディスクドライバ３８からのアクセス要求を受け取り、このアクセス要求を、制御モジュール５２ａに渡す。インターフェース部５１ａは、ディスクドライバ３８から発行される全ての種別のＩＲＰを受け取る。ＩＲＰを受け取った際、ＩＲＰキューに未完了のＩＲＰが存在しなければ、制御モジュール５２ａにこのＩＲＰを渡す。ＩＲＰキューに未完了のＩＲＰが存在した場合、ＩＲＰキューにこのＩＲＰを追加する。アクセス要求が書き込み処理の場合、書き込み処理（キャッシュ処理）後に、インターフェース部５１ａは、ディスクドライバ３８への書き込み要求に対するResponseを返す。
【０１４９】
そのために、以下の処理をする。まず、インターフェース部５１ａは、ＩＲＰのIoStatus.STATUSにSTATUS_SUCCESSを代入する。そして、IoCompleteRequestを呼び出す。最後に、returnでIoSTATUSを返す。これにより、ＩＲＰは、Ｉ／Ｏマネージャ６９へ返され、結果的に、ディスクドライバ３８へ送信される。アクセス要求が読み込み処理の場合、ディスク２５から該当するオフセットとサイズのデータを一度読み取り、読み込み（キャッシュ）処理の後に、インターフェース部５１ａは、ディスクドライバ３８への読み込み要求に対するResponseを返す。
【０１５０】
図１１に図示されたデバイスドライバ制御部４０ａは、書き込み及び読み込みリクエストの場合、制御モジュール５２ａの処理のステータスをＩＲＰのIoStatus.Statusに代入し、IoCompleteRequestを呼び出してＩＲＰを完了する。IoStatus.Statusの値は、異常時を除いて、STATUS_SUCCESSである。これにより、ＩＲＰはＩ／Ｏマネージャ６９によって完了され、結果的に、ディスクドライバ３８にその完了が通知される。それ以外の種別のリクエストでは、ディスクドライバ３８から発行されたＩＲＰを、IoCallDriverでミニポートドライバ３７に発行し、特に処理を行わない。
【０１５１】
〔ユーティリティプログラムの構成〕
図１６は、ユーティリティプログラム５９の構成例を示すブロック図である。ユーティリティプログラム５９は、ＧＵＩ部５９ａ及び、定期フラッシュ部５９ｂから構成される。ＧＵＩ部５９ａは、ユーザインターフェースのためのものである。定期フラッシュ部５９ｂは、フィルタドライバ５０を制御するためのものである。フィルタドライバ５０とユーティリティプログラム５９と間のインターフェースには、次の表３のＡＰＩ関数を用いる。
【０１５２】
ユーティリティプログラム５９とのインターフェースは、フィルタドライバ５０のオープン・クローズを除いては、新たに、DeviceIoControlコードを定義し、このコードでコマンドを発行する。
【０１５３】
【表３】
2010198368.tif 000007
【０１５４】
〔DeviceIoControlについて〕
本発明は、フィルタドライバ５０を制御するDeviceIoControlを提供する。前述のとおり、フィルタドライバ５０のステータス取得、その制御は、ユーティリティプログラム５９からDeviceIoControl関数を呼び出すことにより行う。DeviceIoControl関数は、ユーザモードのアプリケーションプログラムがデバイスを制御するために使うWinAPI関数である。DeviceIoControl関数は、比較的にデバイスを自由に取り扱う事ができる。
【０１５５】
次の表４には、DeviceIoControl関数の代表機能の一覧を示している。
【０１５６】
【表４】
2010198368.tif 000008
【０１５７】
DeviceIoControlのインターフェースの例を、次のコード３に示す。
［コード３］
2010198368.tif 000009
【０１５８】
アプリケーションプログラム１０から発行されたDeviceIoControl要求は、Ｉ／Ｏマネージャ６９を経由して、フィルタドライバ５０に渡される。Ｉ／Ｏコントロールコードは、Microsoft Windows Driver Kit (WDK) で提供されているマクロであるCTL_CODEと呼ばれるカスタムコントロールコードによって作成され、CTL_CODEは次のような形になっている。CTL_CODEマクロにパラメータを与えると、IO_CTLコード（図４を参照。）が戻り値で得られます。
【０１５９】
Ｉ／Ｏコントロールコードは、次の表５に示すように、DeviceIoControlの引数に指定したものが、ドライバのIRP_MJ_DEVICE_CONTROLのハンドラに渡されるものである。
【０１６０】
【表５】
2010198368.tif 000010
【０１６１】
〔画面例〕
図１８は、ユーティリティプログラム５９の画面例である画面６００を示す図である。画面６００は、次の複数の領域からなる。領域６０１は、物理デバイスの選択を行うための領域で、ここで物理デバイスを選択する。図中には、物理デバイスが選択された例として「Disk01」になっている。ここで選択された物理デバイスは、本願発明の制御対象のディスク２５になる。電子計算機１には、複数の補助記憶装置が内蔵又は、接続されているとき、そのどれか一つを選択する。
【０１６２】
領域６０２は、キャッシュ制御（フィルタドライバ５０のキャッシュ機能）の状態を表示するための領域であり、この例では、「ON」になっており、キャッシュ制御（フィルタドライバ５０のキャッシュ機能）が有効であることを示している。キャッシュ制御が無効の場合は、「OFF」として表示される。領域６０３は、キャッシュバッファ７１の状態を示している。バー６０４は、キャッシュバッファ７１の全体容量の内、どのぐらいの領域にデータが格納知れているかを示し、この例では、１２％になっている。ボックス６０６には、キャッシュバッファ７１の全体容量を示し、この例では、６４MBになっている。ボックス６０５は、キャッシュバッファ７１の使用容量を示し、この例では、８．１３９MBになっている。
【０１６３】
ボックス６０７は、キャッシュバッファ７１が過去においては、使用された最大の容量を示し、この例では、16.375MBになっている。この過去は、電子計算機１に電源が投入されたから数えたものでもよい。また、電子計算機１に電源が投入されたから、最近、所定日、所定時間、又は、所定分の内の最大使用容量でも良い。例えば、最近、１日の最大使用量でも良い。また、電子計算機１のログを取り、電源の投入・切断に関係なく、過去一定期間に通しての値でも良い。これは、システム管理者にとっては、キャッシュバッファ７１の容量をどのぐらいに設定するか決める重要な参考になる。
【０１６４】
領域６０８は、フラッシュ処理の制御に関するデータを示す領域である。この中で、領域６０９は、定期的な処理回数を示し、領域６１０はキャッシュフル時の処理回数を示す。領域６１１は、フラッシュ処理を最後に行った日時を示す。この例では、２００９年２月３日、１７時４７分２３秒にフラッシュ処理を起こったことを示している。この日時の表示のフォーマットは、電子計算機１の使用環境に応じて変更可能である。さらに、表示されるデータの一部を省略することもできる。領域６１２は、キャッシュバッファ７１の統計情報を表示するための領域である。
【０１６５】
領域６１３は、キャッシュバッファ７１に書き込み処理（キャッシュ）が行われた回数を表示している。回数は、この例では、上位のディスクドライバから発行された書き込みリクエストの回数である。領域６１４は、書き込み要求の総数を示している。領域６１５は、書き込み要求に対する書き込み処理の割合示すデータであり、ヒット率として表示されている。領域６１６は、本発明のフィルタドライバ５０のプログラムのバージョン情報を示す領域である。ボタン６１７は、設定の変更を行うための画面に遷移するためのボタンである。ボタン６１７を押すと、図１９の画面に遷移する。ボタン６１８は、画面６００を閉じるためのボタンである。
【０１６６】
図１９は、ユーティリティプログラム５９の画面例２を示す図である。７０１は、キャッシュ処理の状態を変更するための領域で、ユーザは、この領域の「ON」又は「OFF」ボタンを押して、キャッシュ処理を有効又は無効にする。領域７０２は、フラッシュ処理が行われるスケジュールを指定するための領域であり、フラッシュ処理が定期的に行われる間隔を指定する。図の例では、分と秒単位で、フラッシュ処理を定期的に実行する間隔を指定する。領域７０３は、キャッシュバッファ７１のサイズを指定する領域である。図の例では、選択方式になっており、６４MBが選択されている。
【０１６７】
ここで、選択された領域は、図１８の領域６０６に表示される。ボタン７０４は、フラッシュ処理を強制的に手動で実行するためのボタンである。このボタン７０４を押すと、フラッシュ処理が強制的に行われる。この強制的なフラッシュは、次の場面で使うと有効である。電子計算機１の管理者は、電子計算機１に新規のソフトウェアをインストールする等の作業を行うとき、ボタン７０４を押してフラッシュ処理が強制的に行うと、キャッシュバッファ７１内のデータを保存する。ボタン７０５は、画面７００の設定を反映させて、図１８の画面６００に遷移するためのボタンである。ボタン７０６は、画面７００の設定を反映させないで、図１８の画面６００に遷移するためのボタンである。また、ボタン７０５とボタン７０６は、画面７００の設定を反映させて、又は反映させない終了さえても良い。
【０１６８】
〔ボリュームについて〕
本発明のフィルタドライバ５０は、ディスク５０を物理デバイス毎、言い換えるとボリュームごとに、に制御する。ディスク２５は、分割され、複数のパーティションになっていることがよくある。この場合は、パーティション毎に制御を行わない。
【０１６９】
〔その他〕
フィルタドライバ５０は、図示しないが、初期化モジュール、ハードウェア制御モジュール、電源管理ハンドラな等のモジュールを備える。初期化モジュール（ＤｒｉｖｅｒＥｎｔｒｙ）は、フィルタドライバ５０の起動後、一番最初に、呼び出されて動作するルーチンである。初期化モジュールは、フィルタドライバ５０用のパラーメータの初期化、オペレーティングシステムのレジストリの読み込み等を行う。
【０１７０】
ハードウェア制御モジュール（WFDAddDevice）は、電子計算機１に接続又は内蔵されている物理デバイスの確認、デバイスオブジェクトの作成、デバイスのシンボリックリンク、デバイスリソースの割り当て、割り込みとの接続とDpcForIsrの登録、アダプタオブジェクトの取得、デバイスの初期化等を行うものである。ハードウェア制御モジュールは、初期化モジュール（DriverEntry）の実行後に呼び出されて動作する。電源管理ハンドラは、オペレーティングシステム１１がシャットダウンするとき、呼び出され、フィルタドライバ５０内で自動的にフラッシュ処理モジュール５５ａを呼び出して、フラッシュ処理を行うものである。
【０１７１】
書き込み処理、フラッシュ処理、読み込み処理を実行しているとき、エラーが発生したら、フィルタドライバ５０は、そのエラーについての情報を、オペレーティングシステム１１のイベントログに出力する。フィルタドライバ５０は、オペレーティングシステムのレジストリに登録されて動作する。この登録は、フィルタドライバ５０のソフトウェアを電子計算機にインストールするとき、又は、手動で登録できる。登録後は、オペレーティングシステムを再起動させることが好ましい。
レジストリ登録の例：
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Driverware\Parameter\<デバイス固有キー>
次の表６は、レジストリに登録される値の例を示している。
【０１７２】
【表６】
2010198368.tif 000011
【０１７３】
上述のように、本発明のフィルタドライバ５０を用いて、ディスク２５に書き込むデータを、ＲＡＭ上のキャッシュバッファ７１に一時的にキャッシュしてから、まとめて、ディスク２５に書き込んでいる。これは、オペレーティングシステム１１又はアプリケーションプログラム１０からみると、ディスク２５へデータを書き込む動作には、何らかの影響はなく、従来の通りの動作をすることができる。ディスク２５へデータを書き込む動作は、従来より、劇的に低減できる。これは、実施の形態においては、ディスク２５を例に説明した。図２に図示したＵＳＢメモリ１４にも、応用できる。
【０１７４】
さらに、ディスク２５へデータを書き込む動作が低減されることによって、いままでに、オペレーティングシステムに想定されなかった、書き換え制限が記憶媒体を利用することができるようになった。特に、フラッシュメモリ等の不揮発性メモリを、ディスク２５として利用でき、電子計算機の低価格化にも貢献できる。しかし、不揮発性メモリの書き換え回数を計算することが可能です。例えば、フラッシュ時に、バッファ管理テーブル７３のデータをバックアップして、そのインデックス欄７３を、インデックス毎に書き込みした数を集計して、不揮発性メモリの書き換え回数を取得することができる。
【０１７５】
これは、図１０に図示した、セル１０３全体での書き換え回数になるが、不揮発性メモリの寿命を予期する上では、非常に役立つ。そして、ユーザに対しては、次の通知データを、通知する機能を、ユーティリティプログラム５９に備えることができる。例えば、通知データとしては、一番たくさん書き換えされた領域、領域のうち一番多く書き換えされた回数、その領域の残り寿命（推定残り日数、推定残り書き換え回数等）を例示できる。これらの通知データは、電子計算機のディスプレイに、ユーザの視覚認識可能な状態で、通知されることが好ましい。
【０１７６】
例えば、グラフィックデータとして表示する。また、オペレーティングシステムの起動時に、画面上に表示することもできる。また、不揮発性メモリの新品時に保証される書き込み回数をあらかじめWindowsの提供するレジストリ等に記憶し、実際に書き込みが行われる回数を記録し続けることで、不揮発性メモリの寿命予測を行うことが可能である。
【０１７７】
〔書き込みが集中〕
フィルタドライバ５０は、アクセス命令を分析して、ディスク２５への書き込みが集中する領域を抽出する機能を有する。この分析により、アクセス命令が、ディスク２５の同一の領域（同一アドレス）に繰り返し頻繁に書き込みする命令である場合は、この領域に書き込みする書き込みデータを取得し、上述のキャッシュバッファ７１に書き込む。このとき、書き込みが集中しない書き込みは、キャッシュバッファ７１にキャッシュしないで、ディスク２５へ直接書き込む。
【０１７８】
ディスク２５へ書き込みアクセスが多いのは、基本的に、ファイルシステム用の管理領域である。ディスク２５のファイルシステム用の管理領域だけを、キャッシュバッファ７１にキャッシングするだけで、ディスク２５への書き込み回数を大幅に減らすことができる。ディスク２５には、データの更新が頻繁に行われるデータベースがあるときは、データベース内のデータが頻繁に更新される領域だけを、キャッシングするだけ、ディスク２５への書き込み回数を大幅に減らすこともできる。
【０１７９】
〔ソフトウェア及び記録媒体〕
本発明の補助記憶装置用のフィルタドライバ５０は、単独で、又は、ユーティリティプログラム５９と一緒に、ソフトウェアとして販売されることができる。更に、本発明の補助記憶装置用のフィルタドライバ５０は、単独で、又は、ユーティリティプログラム５９と一緒に、記録媒体に記録されて、販売されることができる。
【産業上の利用可能性】
【０１８０】
本発明は、フラッシュメモリを利用する分野に利用するとよい。
【符号の説明】
【０１８１】
１…電子計算機
１０…アプリケーションプログラム
１１…オペレーティングシステム
１３…ネットワーク
１４…USBメモリ
１６…キーボード
１７…マウス
２２…コネクタ
２３…ネットワークカード
２４…ＵＳＢポート
２５…ディスク
２７…マウス
３０…デバイスドライバ
３２…インターフェースドライバ
３３…ネットワークドライバ
３４…ファイルシステムドライバ
３５…キーボードドライバ
３６…マウスドライバ
３７…ミニポートドライバ
３８…ディスクドライバ
４０…
４０…ａデバイスドライバ制御部
４２…インターフェース制御部
４３…ネットワーク制御部
４４…ファイルシステム制御部
４５…入力装置制御部
５０…フィルタドライバ
５１…アプリケーションプログラムインターフェース部
５１ａ…インターフェース部
５２…制御部
５２ａ…制御モジュール
５３…ログ取得部
５５ａ…フラッシュ処理モジュール
５６ａ…読み込み処理モジュール
５７ａ…書き込み処理モジュール
５８…アプリケーションプラットフォームプログラム
５９…ユーティリティプログラム
５９ａ…ＧＵＩ部
５９ｂ…定期フラッシュ部
６０…ハードウェア
６１…サブシステム
６２…マイクロカーネル
６３…エグゼクティブ
６４…ＨＡＬ
６５…オブジェクトマネージャ
６６…プロセスマネージャ
６７…キャッシュマネージャ
６８…メモリマネージャ
６９…Ｉ／Ｏマネージャ
７１…キャッシュバッファ
７２…マップ
７３…バッファ管理テーブル
１００、１００ｐ…書き込みデータ
１０１、１０２、１０３…セル
５００…ＩＲＰ
５０１…ヘッダー
５０２…スタックロケーション
【図１】
2010198368.tif 000012
【図２】
2010198368.tif 000013
【図３】
2010198368.tif 000014
【図４】
2010198368.tif 000015
【図５】
2010198368.tif 000016
【図６】
2010198368.tif 000017
【図７】
2010198368.tif 000018
【図８】
2010198368.tif 000019
【図９】
2010198368.tif 000020
【図１０】
2010198368.tif 000021
【図１１】
2010198368.tif 000022
【図１２】
2010198368.tif 000023
【図１３】
2010198368.tif 000024
【図１４】
2010198368.tif 000025
【図１５】
2010198368.tif 000026
【図１６】
2010198368.tif 000027
【図１７】
2010198368.tif 000028
【図１８】
2010198368.tif 000029
【図１９】
2010198368.tif 000030