説明

補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体

【課題】書き込み制限を有する電子計算機の補助記憶装置への書き込みする回数を低減し、補助記憶装置の延命を実現する。
【解決手段】共通インターフェース手段50によって、補助記憶手段25へ書き込みする書き込み命令及び書き込みデータを取得し、書き込みデータを前記電子計算機1の主記憶手段のキャッシュ領域71に、キャッシュデータとして書き込みする。キャッシュ領域がキャッシュフル時等の特定条件のとき、キャッシュデータをまとめて前記補助記憶手段25の記録領域に書き込みする。よって、電子計算機の補助記憶装置への書き込み回数を低減することができ、書き込み回数制限がある補助記憶装置の延命が実現できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体に関し、特に、書き込み制限を有する補助記憶装置の寿命を延命する技術に関する。詳しくは、本発明は、補助記憶装置へデータを書き込みする回数を低減するための補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体に関する。
【背景技術】
【0002】
電子計算機は、データ、プログラム等いろいろ問題記憶するために各種の記憶装置を備えている。代表的な読み書き可能な記憶装置としては、メインメモリともいう随時書き込み可能な記憶装置(以下、RAMという。)、補助記憶装置のハードディスク等がある。また、不揮発性メモリは、電源を供給しなくても記憶を保持するメモリの総称であり、フラッシュメモリがその代表的なものである。フラッシュメモリは、不揮発性の半導体メモリであり、場合によって、フラッシュEEPROMまたはフラッシュROMと呼ばれることがある。
【0003】
フラッシュメモリは、記憶セルを接続する構造により、NAND型フラッシュメモリとNOR型フラッシュメモリの2種に分けられる。この中でNAND型のフラッシュメモリは、高集積化ができ、かつ書き込みを高速にできる利点がある。このためにNAND型のフラッシュメモリを、電子計算機のハードディスクに替って利用する用途が考えられる。NAND型のフラッシュメモリは、高集積化し、大容量化が進み、価格も劇的に低下している。このために、ハードディスクに比べて低価格のフラッシュメモリを、オペレーティングシステムがメインに利用する補助記憶装置として、利用したという要望がある。
【0004】
フラッシュメモリは、基本的に、消去・書き込みを行うとき、電子が酸化膜を貫通し、それを劣化させる。よって、フラッシュメモリの寿命は、一か所数千回以下のものが少なくない。しかし、フラッシュメモリ内に、コントローラチップを集積して、消去・書き込みが特定ブロックに集中しないように改良されたものが多数提案され、かつ販売もされているが、それでも数万回から数百万回が限度であるといわれている。
【0005】
オペレーティングシステムは、基本的に、ハードディスクを補助記憶装置として利用することを前提に作られている。つまり、オペレーティングシステムは、頻繁に、ハードディスクにアクセスし、データの読み書きを行う。しかしながら、フラッシュメモリは、消去・書き込み可能回数が限られており、消去・書き込み可能回数はハードディスクに比べずっと少ない。言い換えると、フラッシュメモリをハードディスクの代わりに利用すると、オペレーティングシステムは、データをフラッシュメモリに頻繁に書き込みするので、フラッシュメモリの消去・書き込み可能回数に早期に達する。
【0006】
フラッシュメモリの消去・書き込み可能回数は、一部では、寿命と表現されている。フラッシュメモリは、基本的に、消去・書き込みを行うとき、電子が酸化膜を貫通し、それを劣化させる。フラッシュメモリの消去・書き込み寿命は、一か所数千回以下のものが少なくない。このために、フラッシュメモリは、書き換え頻度の高いデータベースや動作履歴等の保存の用途、オペレーティングシステムの用途には適しないものとされている。
【0007】
このためにフラッシュメモリは、書き換えるメモリ領域が集中しないようにする工夫を実施し、長寿命化を図っているが、モバイルパソコンのような分野では簡素化、低コスト化のためにハードディスクの機能をフラッシュメモリに置き換えることがとても待望されており、Flash SSDを、ハードディスク変わりに利用した、ノート型パソコンも登場している。その中で、フラッシュメモリの寿命を延ばす試みは多数ある。フラッシュメモリの寿命を延ばすものとしては、次のようなアイディアが提案されている。
【0008】
特許文献1に記載の発明は、リードオンリーファイルに対して、フラッシュメモリの書換回数の平準化を行うことにより、フラッシュメモリの製品寿命を延長する技術を開示している。具体的には、フラッシュメモリ群中の一部の未使用領域を利用し、該未使用領域に「再書き込み処理」をプログラム記述しておくことで、ブートする際にこの処理が実施されることにより、リードオンリーファイルに対してもフラッシュメモリの書き換え回数の平準化を行う。また、平準化処理をOSがブートする以前に実行することにより、OSやアプリケーションソフトウェアに拘束されることなく円滑な処理を可能とする。
【0009】
特許文献2に記載の不揮発性記憶装置は、不揮発性メモリの故障を防ぎ、これを用いる不揮発性記憶装置の寿命を伸ばしている。この装置のコントローラは、不揮発性メモリから物理ブロックを第1の予約ブロックとして複数選択し、入力された論理アドレスと不揮発性メモリの物理アドレスとの対応関係を示す第1のテーブルを前記第1の予約ブロックのうちのいずれか1つに格納させ、前記複数の第1の予約ブロックの物理アドレスを示す第2のテーブルを前記不揮発性メモリに格納させ、かつ、不揮発性メモリに書き込みを行う場合には、第1のテーブルを書き換え、第1の予約ブロックのうち、書き換え前の第1のテーブルが格納されていたものとは異なるものに、書き換え後の第1のテーブルを格納させる。
【0010】
特許文献3には、従来よりも長寿命かつ処理速度の速い不揮発性記憶装置、不揮発性記憶システムを開示している。書き換え回数計数部が、各物理ブロックの書き換え回数を管理し、最多及び最小書き換え回数の物理ブロックを判別する。初期化処理に未使用ブロック検出部が検出した未使用ブロック数が閾値以下になった場合、データ移動処理部は、最多書き換え回数ブロックと最少書き換え回数ブロック間でデータ移動する。こうすれば書き換え頻度の高いデータを特定の物理ブロックばかりにアロケートさせないようにできるので、結果として不揮発性記憶装置120の長寿命化を図ることができる。
【0011】
特許文献4には、寿命延命を図る情報記録読出装置を開示している。フラッシュメモリのデータ記録領域に、データを未記録、記録中、又は記録済かを示すデータを記録したブロック状態管理領域を設けて、この記録されているデータが信頼できるかどうかを容易に判断でき、かつデータ記録の精度を向上させる。更に、フラッシュメモリを形成するセクタを複数のブロックに分割することにより、セクタ当たりのデータ書換回数は従来に比しN倍に増へ、消去回数は1/Nとなり、フラッシュメモリの寿命を延ばす。
【0012】
一方、本発明の発明者等は、特許文献5に記載の発明を提案した。具体的には、不揮発性メモリに格納されたクライアントのユーザデータを、それを処理している電子計算機から、目的以外に利用できないようにし、外部へ持ち出さないようにしているデータ管理用のシステム及びそのためのプログラムである。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開2008−171246号公報
【特許文献2】特開2004−234473号公報
【特許文献3】特開2008−97132号公報
【特許文献4】特開2006−85596号公報
【特許文献5】WO2007/049625「電子計算機のデータ管理方法、プログラム、及び記録媒体」
【発明の概要】
【発明が解決しようとする課題】
【0014】
上述したように、フラッシュメモリへのデータ書き込み回数に制限があることは周知の事実である。Windows等のオペレーティングシステムは、ハードディスクを前提として設計されているため、頻繁に書き込み命令が発生する。また、オペレーティングシステムは、ファイルシステムという概念でデータをファイルとして管理している。そのために、ファイルを管理するための管理テーブルを使用しており、ファイルの作成、参照、更新、削除のタイミングで、管理テーブルに書き込みが発生する。管理テーブルへの書き込みは、メモリ上の同一アドレスへ頻繁に書き込みするため、ハードディスクの代わりにフラッシュメモリを使用するとフラッシュメモリの寿命を縮める要因となる。
【0015】
本発明は上述のような技術背景のもとになされたものであり、下記の目的を達成する。
本発明の目的は、書き込み制限を有する電子計算機の補助記憶装置の長寿命化を図ることである。
本発明の目的は、書き込み制限を有する電子計算機の補助記憶装置の同一アドレスへ、書き込みデータを書き込みする回数を低減し、補助記憶装置の延命を実現することである。
【課題を解決するための手段】
【0016】
本発明は、目的を達成するため、次の手段を採る。
本発明の発明1の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、入力デバイス(16,17)及び/又は出力デバイス、主記憶手段、並びに、補助記憶手段(25)を備え、オペレーティングシステム(11)によって制御されている電子計算機(1)において、前記補助記憶手段(25)へデータを書き込みする回数を減らすためのドライバ制御手段であって、A)前記補助記憶手段(25)へ前記データを書き込みする書き込みデータを取得する取得手段、B)前記書き込みデータを、前記電子計算機(1)の主記憶手段のキャッシュ領域(71)に、キャッシュデータとして書き込む書き込み手段、及び、C)前記キャッシュデータをまとめて前記補助記憶手段(25)の記録領域に書き込むフラッシュ手段からなることを特徴とする
【0017】
本発明の発明2の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明1の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記オペレーティングシステム(11)は、デバイス(22−27)を制御するためのデバイスドライバ(32−38)を備え、前記電子計算機(1)は、複数の前記デバイス(22−27)それぞれを制御するための前記デバイスドライバ(32−38)からなるデバイスドライバ層(30)と、前記オペレーティングシステム(11)がカーネルモードで提供する基本プログラム(63)との間に位置するフィルタドライバ手段(50)を有し、前記フィルタドライバ手段(50)は、前記オペレーティングシステム(11)の全ての命令を実行できる動作モードであるカーネルモードで動作し、かつ、
(i)前記デバイスドライバ(32−38)の共通の窓口となるとともに、前記基本プログラム(63)を通して行われる、前記デバイスドライバ(32−38)とアプリケーションプログラム(10)とのやり取りをまとめて行ない、
(ii)前記アプリケーションプログラム(10)から要求されたときに、前記複数のデバイス(22−27)の間、又は、前記アプリケーションプログラム(10)と前記デバイス(22−27)の間のデータの送受信を行ない、
(iii)前記アプリケーションプログラム(10)から前記電子計算機(1)の前記補助記憶装置(25)に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム(10)が標準で備えているインターフェースを通して、前記アプリケーションプログラム(10)から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置(25)とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機(1)を機能させるプログラムであり、
前記フィルタドライバ手段(50)は、前記書き込みデータを取得し、前記キャッシュ領域(71)に前記キャッシュデータとして書き込みし、及び、前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込みすることを特徴とする。
【0018】
本発明の発明3の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明2の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記フィルタドライバ手段(50)は、前記書き込みデータを分析して、前記書き込みが集中する前記記録領域の集中記録領域を、特定し、前記集中記録領域に書き込みされる前記書き込みデータを、前記キャッシュ領域(71)に、前記キャッシュデータとして書き込みし、及び、前記集中記録領域以外の前記記録領域に書き込みされる前記書き込みデータを、直接、前記記録領域書き込みすることを特徴とする。
【0019】
本発明の発明4の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明2又は3の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記オペレーティングシステム(11)は、前記補助記憶手段(25)に格納されているファイルの読み出し又は書き出しを管理するファイルシステムを備え、前記オペレーティングシステム(11)は、前記ファイルシステムを制御するためのファイルシステムドライバ(34)を備え、前記フィルタドライバ手段(50)は、前記アプリケーションプログラム又は前記基本プログラムから、前記ファイルシステムドライバへのアクセス要求を受信するインターフェース手段(51、51a)と、アクセス要求が前記書き込みデータを前記補助記憶手段(25)に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域(71)に前記キャッシュデータとして書き込みする書き込み処理手段(57a)と、アクセス要求が前記補助記憶手段(25)からデータ読み込みする読み込み要求のとき、前記読み込みデータを前記キャッシュ領域(71)及び/又は前記補助記憶手段(25)から取得する読み込み処理手段(56a)と、前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込むフラッシュ処理手段(55a)と、前記アクセス要求を前記インターフェース手段(51、51a)から受信し、前記アクセス要求を分析して、前記アクセスが書き込み要求か読み込み要求かを判定し、書き込み処理手段(57a)、読み込み処理手段(56a)、及び、フラッシュ処理手段(55a)の内1以上を実行させる制御手段(52、52a)と、下位のデバイスドライバとのインターフェースを提供するデバイスドライバ制御部(40、40a)とからなることを特徴とする。
【0020】
本発明の発明5の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明4の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記フィルタドライバ手段(50)は、前記補助記憶手段(25)からデータを読み込みするための、又は、前記補助記憶手段(25)にデータを書き込みするためのIRPを作成し、前記デバイスドライバ制御部(40、40a)を介して、前記下位デバイスドライバ(37)へ送信するIRP作成手段からなることを特徴とする。
【0021】
本発明の発明6の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明1乃至3の中から選択される1発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、(I)前記キャッシュ領域がフルになったときに、(II)定期的に、(III)前記電子計算機がシャットダウンするとき、(IV)前記オペレーティングシステムにログオンした利用者がログオフするとき、(V)前記オペレーティングシステムがサスペンドになるとき、(VI)前記オペレーティングシステムが休止になるとき、及び、(VII)強制フラッシュコマンドのときの中から選択される1条件であることを特徴とする。
【0022】
本発明の発明7の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明1乃至3の中から選択される1発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域であることを特徴とする。
【0023】
本発明の発明8の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明1乃至3の中から選択される1発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータであることを特徴とする。
【0024】
本発明の発明9の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明1乃至3の中から選択される1発明に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、フィルタドライバ手段(50)は、前記補助記憶装置(25)へ前記データを書き込みする書き込み回数、及び/又は、前記補助記憶装置(25)の稼動時間に関する統計情報を取得し、前記補助記憶装置(25)の推定稼動時間残量を計算し、前記アプリケーションプログラム(10)又は、前記オペレーティングシステム(11)に報告する報告手段を有することを特徴とする。
【0025】
本発明の発明10の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明1乃至3の中から選択される1発明に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記補助記憶手段(25)は、不揮発性メモリであることを特徴とする。
【0026】
本発明の発明11の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、発明10に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、前記不揮発性メモリは、フラッシュメモリであることを特徴とする。
【0027】
本発明の発明12の補助記憶装置用フィルタドライバプログラムは、入力デバイス(16,17)及び/又は出力デバイス、主記憶手段、並びに、補助記憶手段(25)を備え、オペレーティングシステム(11)によって制御されている電子計算機(1)において、前記補助記憶手段(25)へ前記データを書き込みする回数を減らすためのドライバ制御手段として、前記電子計算機を機能させるドライバ制御プログラムであって、前記補助記憶手段(25)へ書き込みする書き込みデータを取得するステップ、前記書き込みデータを、前記電子計算機(1)の主記憶手段のキャッシュ領域(71)に、キャッシュデータとして書き込むステップ、及び、前記キャッシュデータをまとめて前記補助記憶手段(25)の記録領域に書き込みするステップからなることを特徴とする。
【0028】
本発明の発明13の補助記憶装置用フィルタドライバプログラムは、発明12の補助記憶装置用フィルタドライバプログラムにおいて、前記オペレーティングシステム(11)は、デバイス(22−27)を制御するためのデバイスドライバ(32−38)を備え、前記電子計算機(1)は、複数の前記デバイス(22−27)それぞれを制御するための前記デバイスドライバ(32−38)からなるデバイスドライバ層(30)と、前記オペレーティングシステム(11)がカーネルモードで提供する基本プログラム(63)との間に位置するフィルタドライバプログラム(50)を有し、前記フィルタドライバプログラム(50)は、前記オペレーティングシステム(11)の全ての命令が実行できる動作モードであるカーネルモードで動作し、かつ、(I)前記デバイスドライバ(32−38)の共通の窓口となるとともに、前記基本プログラム(63)を通して行われる、前記デバイスドライバ(32−38)とアプリケーションプログラム(10)とのやり取りをまとめて行ない、(II)前記アプリケーションプログラム(10)から要求されたときに、前記複数のデバイス(22−27)の間、又は、前記アプリケーションプログラム(10)と前記デバイス(22−27)の間のデータの送受信を行ない、(III)前記アプリケーションプログラム(10)から前記電子計算機(1)の前記補助記憶装置(25)に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム(10)が標準で備えているインターフェースを通して、前記アプリケーションプログラム(10)から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置(25)とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機(1)を機能させるプログラムであり、前記フィルタドライバプログラム(50)は、A)前記補助記憶手段(25)へ書き込みする書き込みデータを取得するインターフェースステップ(51、51a)、B)前記書き込みデータを、前記電子計算機(1)の主記憶手段のキャッシュ領域(71)に、キャッシュデータとして書き込む書き込みステップ(57a)、及び、C)前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込みするフラッシュステップ(55a)からなることを特徴とする。
【0029】
本発明の発明14の補助記憶装置用フィルタドライバプログラムは、発明13に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム(50)は、前記アプリケーションプログラム又は前記基本プログラムから、前記ディスクへのアクセス要求を受信する前記インターフェースステップと、前記アクセス要求が前記書き込みデータを前記補助記憶手段(25)に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域(71)に前記キャッシュデータとして書き込みする書き込みステップ(57a)と、前記アクセス要求が前記補助記憶手段(25)から前記データを読み込みする読み込み要求のとき、前記データを前記キャッシュ領域(71)及び/又は前記補助記憶手段(25)から取得する読み込みステップ(56a)と、前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込むフラッシュステップ(55a)と、及び、(A)前記アクセス要求を前記インターフェース手段(51、51a)から受信し、前記アクセス要求を分析して、前記アクセス要求が書き込み要求か読み込み要求かを判定し、(B)前記アクセス要求が書き込み要求のとき、前記書き込ステップ(57a)を実行し、(C)前記アクセス要求が読み込み要求のとき、前記読み込みステップ(56a)を実行し、及び、(D)前記フラッシュステップ(55a)を実行する制御ステップ(52、52a)と、及び、下位のデバイスドライバ(37)とのインターフェースを提供するデバイスドライバ制御ステップ(40、40a)とからなることを特徴とする。
【0030】
本発明の発明15の補助記憶装置用フィルタドライバプログラムは、発明14に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム(50)は、前記補助記憶手段(25)からデータを読み込みするための、又は、前記補助記憶手段(25)にデータを書き込みするためのIRPを作成し、前記デバイスドライバ制御ステップ(40、40a)を介して、前記下位デバイスドライバ(37)へ送信するIRP作成ステップ(58a)からなることを特徴とする。
本発明の発明16の補助記憶装置用フィルタドライバプログラムは、発明12乃至14から選択される1発明の補助記憶装置用フィルタドライバプログラムにおいて、前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域であることを特徴とする。
【0031】
本発明の発明17の補助記憶装置用フィルタドライバプログラムは、発明12乃至14から選択される1発明に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータであることを特徴とする。
【0032】
本発明の発明18の補助記憶装置用フィルタドライバプログラムは、発明12乃至14から選択される1発明の補助記憶装置用フィルタドライバプログラムにおいて、前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、
(I)前記キャッシュ領域がフルになったときに、
(II)定期的に、
(III)前記電子計算機がシャットダウンするとき、
(IV)前記オペレーティングシステムにログオンした利用者がログオフするとき、
(V)前記オペレーティングシステムがサスペンドになるとき、
(VI)前記オペレーティングシステムが休止になるとき、及び、
(VII)強制フラッシュコマンドのとき
の中から選択される1条件であることを特徴とする。
【0033】
本発明の発明19の補助記憶装置用フィルタドライバプログラムは、発明12乃至14から選択される1発明の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム(50)は、前記補助記憶装置(25)へ前記データを書き込みする書き込み回数を取得するステップ、前記補助記憶装置(25)の稼動時間に関する統計情報を取得するステップ、前記補助記憶装置(25)の推定稼動時間残量を計算するステップ、及び、前記アプリケーションプログラム(10)又は、前記オペレーティングシステム(11)に、前記フィルタドライバプログラム(50)の状態を報告する報告ステップの内1以上のステップを有することを特徴とする。
【0034】
本発明の発明20の補助記憶装置用フィルタドライバプログラムは、発明15に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記書き込むフラッシュステップ(55a)は、下位のデバイスドライバへ指示であるIRPを作成するために前記IRP作成ステップを実行するステップと、前記キャッシュバッファ内の全データから前記補助記憶装置へ書き込むデータを計算するステップと、前記キャッシュバッファのデータを管理するバッファ管理テーブル(73)から、前記書き込みデータの補助記憶装置上の位置を取得するステップと、前記位置に、前記書き込みデータを書き込む命令を前記IRPに入れて、前記下位デバイスドライバへ送信するステップと、前記書き込みテータを前記補助記憶装置に書き込みした後、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ(72)の中の前記位置に該当する値をリセットするステップと、からなることを特徴とする。
【0035】
本発明の発明21の補助記憶装置用フィルタドライバプログラムは、発明14に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記書き込みステップ(57a)は、前記書き込み要求から、オフセット、バッファデータ、データサイズを取得するステップと、前記データサイズからキャッシュするセルのサイズを計算するステップと、前記オフセットから、インディクスを計算するステップと、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ(72)の中から、前記インディクスに該当するデータがあるかを検索するステップと、前記検索で、前記インディクスが見つからないとき、前記キャッシュバッファ(71)の空き領域に前記書き込みデータを書き込みし、前記書き込み後、前記補助記憶装置の前記データがキャッシュされているか否かを管理するデータであるマップ(72)の中の前記位置に該当する値をセットするステップと、及び、前記検索で、前記インディクスが見つかったとき、前記キャッシュバッファ(71)の中から前記インディクスに該当するセルに、前記書き込みデータを上書きするステップとからなることを特徴とする。
【0036】
本発明の発明22の補助記憶装置用フィルタドライバプログラムは、発明14に記載の補助記憶装置用フィルタドライバプログラムにおいて、前記読み込みステップ(56a)は、前記読み込み要求に指定されたデータを前記補助記憶装置(25)から読み込み、前記読み込み要求に指定されたバッファに格納するステップと、前記読み込み要求に指定されたデータが格納されている前記補助記憶装置(25)のオフセットを、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ(72)及び/又は、前記キャッシュバッファのデータを管理するバッファ管理テーブル(73)の中のから検索するステップと、前記検索で、前記オフセットが見つかったとき、前記キャッシュバッファ(71)の前記オフセットに該当するキャッシュデータを読み出すステップと、及び、前記読み出したデータを、前記バッファの前記オフセットに対応するデータに上書きするステップとからなることを特徴とする。
【0037】
本発明の発明23の補助記憶装置用フィルタドライバプログラムは、発明12乃至14のなから選択される1発明の補助記憶装置用フィルタドライバプログラムにおいて、前記フィルタドライバプログラム(50)は、(A)前記フィルタドライバプログラム(50)の動作、及び、又は前記オペレーティングシステム(11)の動作を記録するログ取得ステップ、(B)前記フィルタドライバプログラム(50)を初期値を設定する初期化ステップ、(C)前記電子計算機(1)の電源管理ハンドラからデータを取得する電源管理ステップ、及び、(D)前記電子計算機(1)に内蔵又は接続されている物理デバイスの確認、その初期化を行うハードウェア制御ステップの中から選択される1以上を有することを特徴とする。
【0038】
本発明の発明24の補助記憶装置用フィルタドライバプログラムは、発明11乃至23の中から選択される1発明の補助記憶装置用フィルタドライバプログラムを記録した補助記憶装置用フィルタドライバプログラムの記録媒体。
【発明の効果】
【0039】
本発明によると、次の効果が奏される。
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、電子計算機の補助記憶装置の長寿命化を図ることができた。
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機は、電子計算機の補助記憶装置への書き込み命令をフィルタリングして、同一アドレスへの書き込みデータをキャッシュし、キャッシュフル時等にまとめて電子計算機の補助記憶装置に実際に書き込むようにすることで、書き込み回数を低減することができ、その結果電子計算機の補助記憶装置の延命が実現できた。
【0040】
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体は、不揮発性メモリ等の書き込み制限を有する補助記憶装置を採用している電子計算機、特にノート型電子計算機、の製品寿命を延ばすことが可能となった。
本発明の補助記憶装置用フィルタドライバ手段を備えた電子計算機、補助記憶装置用フィルタドライバプログラム、及び、補助記憶装置用フィルタドライバプログラムの記録媒体は、フィルタドライバ手段で書き込み回数及び稼動時間の統計情報をとることで、電子計算機の補助記憶装置の推定稼動時間残量を使用者に知らせることが可能となった。
【図面の簡単な説明】
【0041】
【図1】図1は、本発明の補助記憶装置用フィルタドライバ手段の実施の形態のシステムの概要を示す概要図である。
【図2】図2は、電子計算機のオペレーティングシステムの構成例を示すブロック図である。
【図3】図3は、オペレーティングシステムの概要を示す概念図である。
【図4】図4は、SCSIリクエストを処理する動作を説明するための図である。
【図5】図5は、IRPの概要を示すブロック図である。
【図6】図6は、キャッシュするデータを管理するためのマップ、バッファ管理テーブルの概要を図示したブロック図である。
【図7】図7は、キャッシュバッファの例を示す図である。
【図8】図8は、マップの例を示す図である。
【図9】図9は、バッファ管理テーブルの例を示す図である。
【図10】図10は、データを書き込み、読み込み、フラッシュする手順を説明するブロック図である。
【図11】図11は、フィルタドライバのない部構成の例を示したブロック図である。
【図12】図12は、SCSIリクエストを処理する手順を示すフローチャートである。フラッシュ処理を示すフローチャートである。
【図13】図13は、キャッシュ処理モジュールの動作概要を示すフローチャートである。
【図14】図14は、読み込み処理モジュールの動作概要を示すフローチャートである。
【図15】図15は、フラッシュ処理モジュールの動作概要を示すフローチャートである。
【図16】図16は、ユーティリティプログラムの構成例を示すブロック図である。
【図17】図17は、IRP作成モジュールの動作例の概要を示すフローチャートである。
【図18】図18は、ユーティリティプログラムの画面例1を図示した図面である。
【図19】図19は、ユーティリティプログラムの画面例2を図示した図面である。
【発明を実施するための形態】
【0042】
〔単語の定義〕
当業者にとって、基本的で自明なことではあるが、誤解、誤解釈を招かないために、本明細書に用いる技術用語について簡単に定義する。「電子計算機」とは、入力装置、出力装置、主記憶装置、補助記憶装置、中央処理装置を備えたものをいう。「オペレーティングシステム」とは、電子計算機を制御し、動作させるための基本プログラムをいう。オペレーティングシステムのコンパイルされたソースコードは、基本的に、補助記憶装置に格納されていて、電子計算機に電源が投入されたとき、補助記憶装置から呼び出されて実行され、電子計算機を制御する。
【0043】
「アプリケーションプログラム」とは、オペレーティングシステムが提供する機能を利用して、電子計算機上に動作し、特定の機能を実現するプログラムをいう。「デバイスドライバ」とは、電子計算機が内蔵する入力装置、出力装置、補助記憶装置等の内蔵デバイス、又は、電子計算機に接続された外部デバイスを直接制御するためのプログラムをいう。これらのデバイスドライバは、オペレーティングシステムが標準で備えている。また、デバイスドライバは、周辺機器、内蔵機器を製造するメーカーが作成するデバイスドライバ、いわゆる、デバイスを提供したベンダーが提供するものもある。
【0044】
更に、デバイスドライバは、デバイスドライバの開発を専門にする技術者又は会社が開発したデバイスドライバもある。このように数多くの種類のデバイスドライバがある。この状況の中で、本実施の形態においては、全てのデバイスドライバは、オペレーティングシステムに属するものとする。「主記憶装置」とは、オペレーティングシステム、アプリケーションプログラムの実行中のデータ等が格納されるメモリであり、電源が切断されると格納データを保持しないものである。以下、主記憶装置は、RAMという。
【0045】
「ディスク」とは、電子計算機の補助記憶装置である。従来は、電子計算機の補助記憶装置は、ハードディスクドライブで実現されていた。ハードディスクドライブは、データを同じ記憶領域に書き換えできる回数は、非常に多く、通常の使用では実質的に無制限と考えても良いであろう。よって、一般のオペレーティングシステム、データベースは、ハードディスクの使用を前提に設計されているので、データの書き換え回数が多い。
【0046】
〔カーネルモードとユーザモード〕
オペレーティングシステムには、カーネルモードとユーザモードがある。カーネルモードは、電子計算機がエグゼクティブで動作するときの動作状態である。カーネルモードでは、オペレーティングシステムを操作するためのすべての命令が実行可能であり、仮に間違った命令を実行するとシステム全体に悪影響を及ぼしかねない。また、ユーザモードは、オペレーティングシステムの機能の内、アプリケーションプログラム等のユーザに対して完全に開放されているモードである。
【0047】
このユーザモードでは、システムに悪影響を与えないように、オペレーティングシステムを操作する命令を制限している。電子計算機がこのユーザモードで動作するとき、電子計算機の動作に悪影響を与えるような命令を、オペレーティングシステムが自動的に制限してくれるため、ユーザにとっては使い易い環境になっている。しかし、このような制限を設けることはオペレーティングシステムの機能の制限と同じことなので、ユーザモードで動作するアプリケーションプログラムは、ハードウェアに関わる部分には直接アクセスできなくなり、カーネルモードを経由しなければならない。
【0048】
カーネルモードは、オペレーティングシステムの機能をフルに使うことが可能であり、各入出力装置へも完全にアクセスできる。また、カーネルモードで動作するプログラムは、ユーザモードのプログラムより優先的に処理され、高いパフォーマンスを得ることができる。デバイスドライバは、オペレーティングシステムに属し、電子計算機の外部ハードウェアを管理するためのソフトウェアであり、カーネルモードで動作する。通常、デバイスドライバ一つに対して同じ属性を持つデバイスが一つだけ存在する。ユーザモードで動作するアプリケーションプログラムは、各デバイスにアクセスするためにデバイスドライバを経由しなければならない。
【0049】
〔本発明の実施の形態〕
図1は、本発明の補助記憶装置用フィルタドライバを備えた電子計算機1の実施の形態の概要を示す概要図である。図中には、電子計算機1上で動作するアプリケーションプログラム10、及び、ファイルシステムドライバ34、ディスクドライバ38、ミニポートドライバ37、キャッシュバッファ71、及び、電子計算機1の補助記憶装置であるディスク25を図示している。また、本発明のフィルタドライバ50、及びそのユーザインターフェースのためのユーティリティプログラム59を図示している。
【0050】
電子計算機1、アプリケーションプログラム10、ファイルシステムドライバ34、ディスクドライバ38、及び、ミニポートドライバ37の各詳細な機能については、後述する。ファイルシステムドライバ34は、ディスク25に格納されているファイル、フォルダに関する情報を管理するもので、これらファイルやフォルダへのアクセスを、その下位のデバイスドライバであるディスクドライバ38、ミニポートドライバ37を経由して、提供するためのプログラムである。
【0051】
アプリケーションプログラム10は、ディスク25にアクセスするとき、「アクセス要求」命令を発する。このアクセス要求は、ファイルシステムドライバ34、ディスクドライバ38、及び、ミニポートドライバ37で順番に処理される。ミニポートドライバ37が、最終的に、ディスク25にアクセスし、アクセス要求で指定された処理が行われる。そして、この一連のアクセス処理の結果は、逆の順番を辿ってアプリケーションプログラム10に渡される。本発明の、フィルタドライバ50は、ディスクドライバ38とミニポートドライバ37との間で送受信されているデータを制御することで、ディスク25へのアクセス処理を制御する。
【0052】
本発明は、電子計算機1のディスク25に、ハードディスクドライブに替って、書き換え回数に制限がある記録媒体を利用することを可能にする技術を提供する。具体的には、フィルタドライバ50を利用して、電子計算機1からディスク25へ電子データを書き込みする数を低減する。ディスク25には、不揮発性メモリ等を利用できる。特に、近年コストが低減しているフラッシュメモリを利用することが好ましい。フラッシュメモリは、NAND型でもNOR型の何れでも利用できる。キャッシュバッファ71は、本例では電子計算機1のメインメモリであるRAM上の領域である。
【0053】
フィルタドライバ50は、オペレーティングシステム11(図2及び図3を参照。)のカーネルモードで動作する。フィルタドライバ50は、RAM上に、ディスク25用のキャッシュバッファ71を確保し、ディスク25に書き込みする書き込みデータをキャッシュバッファ71に一時格納する。フィルタドライバ50は、このキャッシュバッファ71のデータを、ディスク25にまとめて書き込みする。これにより、オペレーティングシステム11又はアプリケーションプログラム10から、ディスク25に随時書き込みする回数を減らすことができる。
【0054】
また、フィルタドライバ50は、アプリケーションプログラム10又はオペレーティングシステム11から、ディスク25へアクセスするアクセス命令を取得し、このアクセス命令を分析する機能を有する。分析機能としては、アクセス命令の種類の特定、アクセス命令の内部データの特定等である。フィルタドライバ50は、キャッシュバッファ71に格納されているデータを、所定の条件で、ディスク25の該当する領域に書き込みする。オペレーティングシステム11又はアプリケーションプログラム10から出力されたアクセス命令は、基本的には、ディスク25からデータを読み込みする読み込み命令、又は、ディスク25にデータを書き込みする書き込み命令である。
【0055】
アクセス命令が読み込み命令であるとき、フィルタドライバ50は、読み込み対象データを取得して、オペレーティングシステム11又はアプリケーションプログラム10に渡す。読み込み対象データは、キャッシュバッファ71又はディスク25に格納されている。フィルタドライバ50は、先ず、キャッシュバッファ71内のデータを検索して、読み込み対象データを検索できたら、オペレーティングシステム11又はアプリケーションプログラム10に渡す。読み込み対象データがキャッシュバッファ71になければ、ディスク25内から取得して、オペレーティングシステム11又はアプリケーションプログラム10に渡す。
【0056】
フィルタドライバ50は、ディスク25と、キャッシュバッファ71の対応関係を示す管理データを参照して、上述のデータ検索を行う。この管理データは、マップ72(図6を参照。)、バッファ管理テーブル73(図6を参照。)等で例示されている。フィルタドライバ50がディスク25へデータを書き込みするタイミングは、キャッシュバッファ71がフルになったとき、定期的に、オペレーティングシステム11又はアプリケーションプログラム10が終了するとき等のときである。このように、フィルタドライバ50によって、ディスク25へのデータを書き込みする回数を低減する。
【0057】
〔キャッシュ機能及びキャッシュバッファ〕
本実施の形態おいて、フィルタドライバ50がキャッシュバッファ71にデータを書き込みできるようになった状態を、キャッシュ機能が有効になったという。また、キャッシュバッファ71にデータを書き込みするフィルタドライバ50の機能を止めた状態を、キャッシュ機能が無効、又は、キャッシュ機能が停止した状態と言う。キャッシュバッファ71の容量、言い換えると、キャッシュバッファ71に保存できるデータの最大サイズを、キャッシュバッファ71のキャッシュサイズである。
【0058】
キャッシュバッファ71のキャッシュサイズは、オペレーティングシステム11のレジストリに登録される。オペレーティングシステム11の起動時に、レジストリに登録されたキャッシュサイズの領域を、RAM上で確保し、キャッシュバッファ71が用意される。ユーザは、キャッシュバッファ71のキャッシュサイズを変更することができる。キャッシュサイズの変更は、ユーティリティプログラム59(図1及び図16を参照。)から行われる。キャッシュバッファ71のキャッシュサイズは、基本的に、任意に設定できるが、メガバイト単位であることが好ましい。
【0059】
また、初期設定で、キャッシュサイズは、RAMの物理メモリの半分、256メガバイト等のように、必要な特定の値に、設定できる。ただし、キャッシュサイズは、RAMのサイズ以下の値でなければいけないが、足りないときはRAMの容量を増設することで対応すると良い。よって、オペレーティングシステム11が消費するメモリ、その他のアプリケーションプログラム10が消費するメモリ等を考慮すると、キャッシュバッファ71のキャッシュサイズは、現在市販されているオペレーティングシステムを前提としたときには、実用的には、32メガバイト以上であることが好ましい。
【0060】
そして、このキャッシュサイズの上限は、64メガバイト以下であることが好ましい。キャッシュバッファ71のキャッシュサイズが小さいと、頻繁にキャッシュフルになり、ディスク25への書き込み回数が増加する。キャッシュサイズの変更後は、オペレーティングシステム11の再起動が好ましい。
本発明のフィルタドライバ50は、任意のオペレーティングシステム11で動作可能であるが、マイクロソフト社が提供するオペレーティングシステムでWindows XP(登録商標)以後のオペレーティングシステムであることが好ましい。
【0061】
具体的には、例えば、Windows XP、Windows Vista(登録商標)、Windows XP Embedded(登録商標)である。以後、本実施の形態において、オペレーティングシステムは、Windows XPを例にとって説明する。フィルタドライバ50は、Windows XP上のNTFS/FAT32用ファイルシステムドライバを機能拡張するものである。
本発明の実施の形態を理解しやすくするためには、まず、電子計算機1の構成例、オペレーティングシステム11、及び、フィルタドライバ50の概要をそれぞれ説明する。
【0062】
〔電子計算機の構成例〕
図2は、本発明の実施の形態の電子計算機1の構成例を示すブロック図である。図2には、電子計算機1を構成するハードウェア、及び、電子計算機1上で動作するソフトウェアの概要を図示している。本実施の形態のオペレーティングシステム11は、マイクロソフト社のWindows XP(登録商標)である。しかし、このオペレーティングシステム11を制限するものではなく、同様な機能を実現できれば、オペレーティングシステムの種類は問わない。
【0063】
本発明の発明時点では、Windows Vista(登録商標)が最新のオペレーティングシステムである。アプリケーションプログラム10は、オペレーティングシステム11の上で動作する。アプリケーションプラットフォームプログラム58は、オペレーティングシステム11のユーザモードで動作するアプリケーションソフトウェアであり、フィルタドライバ50のユーザインターフェースを提供する。フィルタドライバ50は、オペレーティングシステム11のカーネルモードで動作するプログラムである。
【0064】
アプリケーションプラットフォームプログラム58とフィルタドライバ50の動作と機能については、後述する。電子計算機1は、図示しないが、中央処理装置(CPU)、RAM、ROMを備えた一般の電子計算機である。更に、電子計算機1は、図2に図示したように、例えばディスプレイ(図示せず。)、キーボード16、マウス17等の入出力装置、例えば、ディスク25等の補助記憶装置、例えば、コネクタ22、ネットワークカード23、USBポート24等の通信用の各種ポートを備えている。
【0065】
電子計算機1は、ディスプレイ等の出力装置、RAM(図1のキャッシュバッファ71を参照。)等のメモリを備えている。電子計算機1は、外付けハードディスク、スキャナ、プリンタ等の周辺機器を有している。これらの周辺機器は、図示していないが、以下、外部デバイスという。外部デバイスは、コネクタ22又はUSBポート24に接続される。電子計算機1は、ネットワーク13に接続するためのネットワークカード23を備えている。更に、電子計算機1は、USBメモリ14等のUSB規格準拠の機器を接続するためのUSBポート24を備えている。
【0066】
これらのコネクタ22、ネットワークカード23を直接制御し、通信を行うためのプログラムは、それぞれのデバイスドライバであるインターフェースドライバ32、ネットワークドライバ33である。コネクタ22は、RS-232C、IrDA、USB、IEEE1394等のシリアルポート、IEEE1284、SCSI、IDE等のパラレルポートであることが好ましい。このシリアル転送方式は、1本の信号線で1ビットずつデータを伝送するデータ伝送の方式である。パラレル転送方式は、複数の信号線で同時に複数のビットを転送するデータ伝送の方式である。
【0067】
このデータ伝送は、電子計算機1に内蔵されたデバイス、電子計算機1とその周辺機器間のデータ伝送に用途ごとに最適なインターフェースを使用している。ここで、その代表的なものから例示する。記憶装置の場合は、パラレル転送方式が高速であり、この伝送方式を採用することが多いが、USB規格の普及により、近年USBポートを利用することが多くなっている。外部デバイスは、ネットワーク13に接続され、電子計算機1のネットワークカード23によって、データ通信可能な場所に設置される。電子計算機1は、停電、瞬停によるデータロストを防ぐために、バッテリバックアップの装備をしているものが特に好ましい。
【0068】
電子計算機1は、オペレーティングシステム11によって制御されて動作する。電子計算機1上で動作するアプリケーションプログラム10は、オペレーティングシステム11が提供する機能を利用して動作する。アプリケーションプログラム10は、オペレーティングシステム11のカーネルモード、又はユーザモードで動作する実行可能なファイル若しくはソフトウェアである。例えば、アプリケーションプログラム10は、ワードプロセッシングソフトウェア、テキストエディタ等の文書を作成、編集するためのソフトウェア、又は、アプリケーションプログラム10は、映像、静止画等を閲覧、編集するための画像処理ソフトウェアである。
【0069】
更に、アプリケーションプログラム10は、PDF形式のファイル等のような特定の形式のファイルを閲覧、作成、編集するためのソフトウェアである。更に、アプリケーションプログラム10は、販売店の料金管理用のアプリケーションプログラム等を意味する。ここで記述した例で理解されるように、アプリケーションプログラム10の種類を限定するものではない。
【0070】
図2に図示した例では、アプリケーションプログラム10は、オペレーティングシステム11のユーザモードで動作するアプリケーションソフトウェアである。ただし、このアプリケーションプログラム10は、カーネルモードのモジュールを含むものであっても良い。オペレーティングシステム11は、入力装置からの入力機能、出力装置への出力機能、外部記憶装置やメモリの管理等の基本的な機能を提供し、電子計算機1の全体を制御して動作させ、管理するためのソフトウェアである。オペレーティングシステム11は、その提供する機能を実現するために多数の実行可能なプログラムから構成されるものである。
【0071】
また、本発明を理解し再現する上では、オペレーティングシステム11、及び、そのデバイスドライバについて開示している技術情報が必要である。この技術情報には、オペレーティングシステム11を開発し、提供しているベンダーが情報開示しているインターネット上のデータ、これらのベンダーから開発者向けに提供された情報が含まれる。例えば、オペレーティングシステム11、特に本実施の形態に用いているWindows系のオペレーティングシステムについては、一般に広く公開されている多数の書籍があり、その一部から紹介する。本発明を再現するためには、これらの書籍に記述されている技術知識、特に、デバイスドライバ開発に関する知識が重要である。
【0072】
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)
【0073】
〔オペレーティングシステムの概要〕
図3は、オペレーティングシステム11の構成要素の内の代表的なものを図示したものであり、オペレーティングシステム11と、本発明のフィルタドライバ50との関係を図示している。オペレーティングシステム11は、サブシステム61、エグゼクティブ63、マイクロカーネル62、デバイスドライバ30、ハードウェア抽象化層(HAL)64から構成される。サブシステム61は、オペレーティングシステム11のユーザモードで提供されるサービスである。
【0074】
エグゼクティブ63は、メモリの管理、プログラム実行のプロセスとスレッドの管理、セキュリティ、I/O、ネットワーク、及びプロセス間通信等のオペレーティングシステム11の基本的なサービスを提供するものである。エグゼクティブ63は、マイクロカーネル62と連動して動作し、オペレーティングシステム11の基本機能を提供する基本プログラムとして、位置づけることができる。図3には、代表的なエグゼクティブ63を図示している。このエグゼクティブ63は、例えば、オブジェクトマネージャ65、プロセスマネージャ66、キャッシュマネージャ67、メモリマネージャ68、I/Oマネージャ69等がある。
【0075】
マイクロカーネル62は、スレッドスケジューリング、割り込み、例外通知、マルチプロセッサの同期等の低レベルの関数を提供する。また、マイクロカーネル62は、エグゼクティブ63の内部で使用するルーチンセットと基本オブジェクトを提供する。デバイスドライバ30は、図2において、インターフェースドライバ32、ネットワークドライバ33、ファイルシステムドライバ34、キーボードドライバ35、マウスドライバ36として図示されている。デバイスドライバ30は、通常は、電子計算機1に接続されたハードウェアごとにプログラムされ、HAL64を介して、そのハードウェア60を直接制御するものである。
【0076】
デバイスドライバ30は、アプリケーションプログラム10やオペレーティングシステム11からの入出力機能の要求(I/O呼び出し要求)を、特定のハードウェアデバイスに対する入出力機能の要
求(I/O要求)に変換するサービスと、ファイルシステムやネットワークドライバ等のシステムサービスを提供する。HAL64は、マイクロカーネル62、デバイスドライバ30、及びエグゼクティブ63をプラットフォーム固有のハードウェア機能から分離し抽象化するためのコード層である。
【0077】
即ち、HAL60は、電子計算機1の内蔵デバイス22〜27や、電子計算機1に接続されている外部デバイス等のハードウェアの種類による違いを吸収し、オペレーティングシステム11の各サービスに対して抽象化したサービスを提供する。HAL60によって、オペレーティングシステム11を構成する各種のサービスは、ハードウェアの種類による違いを意識することなくハードウェアにアクセスすることが可能になる。
【0078】
〔フィルタドライバ50〕
フィルタドライバ50は、デバイスドライバ30内の各インターフェースドライバ32〜36間のデータの送受信をカーネルモードで実現する。フィルタドライバ50は、アプリケーションプログラム10からデバイスドライバ30へアクセスするとき、また、デバイスドライバ30からアプリケーションプログラム10へデータを送信するときに、共通のインターフェースを提供する。フィルタドライバ50は、オペレーティングシステム11のカーネルモードで動作する。
【0079】
フィルタドライバ50は、デバイスドライバ30間の共通のデータの送受信を提供し、仲介する機能を有する。また、フィルタドライバ50は、オペレーティングシステム11と複数のデバイスドライバ30との共通のデータの送受信を提供し、仲介する機能を有する。フィルタドライバ50の例としては、「電子計算機のインターフェースドライバプログラム」として、WO02/091195号公報、及び、「電子計算機のファイルシステムドライバの制御方法、そのプログラム及びプログラムの記録媒体」として、WO2003/073289号公報等に開示されて公知であり、その詳細な説明の一部を省略する。
【0080】
フィルタドライバ50は、アプリケーションプログラム10からの命令やデータ等を受信し、アプリケーションプログラム10へのデータを送信するためのインターフェース部51を有する。フィルタドライバ50は、図2に図示したように、フィルタドライバ50の全体の動作を制御するための制御部52を有する。また、フィルタドライバ50の動作の履歴を取得するためのログ取得部53も有する。更に、フィルタドライバ50は、デバイスドライバ30を制御するために、デバイスドライバ制御部40を有する。
【0081】
制御部52は、デバイスドライバ制御部40、インターフェース部51、ログ取得部53等のフィルタドライバ50を構成している各部を制御し、監視するためのもので、必要であれば、各部を呼び出して実行させるもので、フィルタドライバ50の中核部である。アプリケーションプラットフォームプログラム58は、アプリケーションプログラム10と、オペレーティングシステム11との間に位置し、これらの間に命令やデータの送受信を仲介し制御するためのアプリケーションプログラムである。アプリケーションプラットフォームプログラム58は、オペレーティングシステム11のユーザモードで動作する。
【0082】
アプリケーションプラットフォームプログラム58は、オペレーティングシステム11のファイルシステムにアクセスするためのユーザインターフェースを提供するためのアプリケーションプログラムである。アプリケーションプラットフォームプログラム58は、アプリケーションプログラム10の起動、これに伴うプロセスの起動を監視し、これらの属性情報を取得する機能を有する。アプリケーションプラットフォームプログラム58は、Windowsエクスプローラと互換性があるアプリケーションプログラムであるものが好ましい。
【0083】
インターフェースドライバ32は、コネクタ22を制御するためのデバイスドライバである。ネットワークドライバ33は、ネットワークカード23を制御するためのデバイスドライバである。ファイルシステムドライバ34は、ディスク25、USBポートに接続された記憶装置等の補助記憶装置に保存されているファイル、フォルダに関する情報を管理するもの、これらファイルやフォルダへのアクセスを提供するためのプログラムである。アプリケーションプログラム10は、ディスク25に対してアクセス要求を出し、ディスク25に格納されているデータを読み込んだり、ディスク25にデータを書き込んだりするためのプログラムである。
【0084】
フィルタドライバ50は、アプリケーションプログラム10からデバイスドライバ30へアクセスするとき、また、デバイスドライバ30からアプリケーションプログラム10へデータを送信するときに、共通のインターフェースの機能、役割を果たす。図2に図示したように、フィルタドライバ50は、インターフェースドライバ32を制御するためのインターフェース制御部42を有する。デバイスドライバ制御部40は、ネットワークドライバ33を制御するためのネットワーク制御部43を有する。デバイスドライバ制御部40は、ファイルシステムドライバ34を制御するためのファイルシステム制御部44を有する。
【0085】
制御部52は、デバイスドライバ制御部40、インターフェース制御部42、ネットワーク制御部43、ファイルシステム制御部44等のフィルタドライバ50の他の部を制御し、監視するためのものである。制御部52は、フィルタドライバ50の中核部である。フィルタドライバ50のインターフェース制御部42、ネットワーク制御部43、ファイルシステム制御部44等は、デバイスドライバ30を制御することで、最終的には、電子計算機1に、接続又は内蔵されているデバイスを制御するものと理解することができる。図1に示したように、ファイルシステムドライバ34及びディスクドライバ38は、フィルタドライバ50とアプリケーションプログラム10との間に位置している。
【0086】
これは、アプリケーションプログラム10から出されたデータが流れる順番に従って表現したものであり、フィルタドライバ50の基本的な考え方に反しない。つまり、フィルタドライバ50は、デバイスドライバ30と、エグゼクティブ63の間に位置し、エグゼクティブ63とデバイスドライバ30とのデータ送受信を制御する。更に、このフィルタドライバ50は、デバイスドライバ30間のデータ通信を制御するものである。よって、エグゼクティブ63から1つのデバイスドライバ30へデータを送信し、このデバイスドライバ30から別のデバイスドライバへのデータ通信を、フィルタドライバ50が制御することができる。
【0087】
〔SCSIリクエストの処理フローチャート〕
本発明の実施の形態においては、フィルタドライバ50が、ディスクドライバ38とミニポートドライバ37との間のデータ通信の制御を行う。このデータ通信の制御の例は、SCSIリクエストの処理によって、説明する。図4は、SCSIリクエストを処理する動作を説明するための図である。I/Oマネージャ69は、フィルタドライバ50を介してデバイスドライバ30との通信を行うとき、「I/O Request Packet(以下、IRPという。詳しくは、後述説明する。)」と呼ばれる構造体を用いて行う。
【0088】
このデータ通信を図4にまとめている。図中には、IRPが送信された方向を矢印で示している。SCSIリクエストは、IO_CTLという形式で発行される。まず、アプリケーションプログラム10からデバイスへアクセス要求を出す。本例のデバイスは、ディスク25である。I/Oマネージャ69は、このアクセス要求を受け取り、このアクセス要求の内容をまとめてIRPを作成し、ファイルシステムドライバ34に送信する。ファイルシステムドライバ34は、このIRPを受け取る。ファイルシステムドライバ34は、ディスクドライバ38にしてもらう継続処理のための情報で、既存又は新規に作成した情報をIRPに追加し、I/Oマネージャ69に返す。
【0089】
ここで追加された情報は、図中には、IRPの後ろに追加され、「1」で示されている。次に、I/Oマネージャ69は、ファイルシステムドライバ34からIRPを受け取り、ディスクドライバ38へこのIRPを渡す。同様に、ディスクドライバ38は、情報をIRPに追加し、IRPをI/Oマネージャ69へ返す。ディスクドライバ38によって、IRPに追加された情報は、図中に「2」で図示されている。I/Oマネージャ69は、ディスクドライバ38からIRPを受け取り、これを、フィルタドライバ50へIRPを渡す。フィルタドライバ50は、このIRPを受け取り、その内容を分析する。
【0090】
従来は、I/Oマネージャ69は、ディスクドライバ38からIRPを受け取り、これを、ミニポートドライバ37へ渡していた。フィルタドライバ50は、このIRPの内容を分析して、読み込み処理、書き込み処理、フラッシュ処理等の処理を行う。フィルタドライバ50内でこの処理が完了する場合は、完了報告をIRPに追加して、I/Oマネージャ69に返す。フィルタドライバ50内で、フラッシュ処理又は読み込み処理が、必要な場合は、I/Oマネージャ69に完了報告をしない。このとき、フィルタドライバ50は、独自にIRPを作成する。この新しく作成されたIRPは、図4中に、IRPnewとして図示されている。
【0091】
そして、フィルタドライバ50は、IoCallDriver関数を用いてミニポートドライバ37を呼び、このIRPnewを、ミニポートドライバ37に渡す。フィルタドライバ50から、ミニポートドライバ37へIRPnewを渡すとき、I/Oマネージャ69を仲介する。ミニポートドライバ37は、フィルタドライバ50から受けとったIRPnewに記述された処理を、ディスク25に対して行う。そして、ミニポートドライバ37は、この処理の結果を、IRPnewに追加して、I/Oマネージャ69を介してフィルタドライバ50に返す。ミニポートドライバ37によって、IRPnewに追加されたデータは、図4中に「4」で図示されている。
【0092】
フィルタドライバ50は、ミニポートドライバ37からIRPnewを受信し、完了報告を作成する。この完了報告は、フィルタドライバ50から、ディスクドライバ38、ファイルシステムドライバ34、を介して、アプリケーションプログラム10に報告される。この完了報告は、アプリケーションプログラム10から出されたアクセス要求をフィルタドライバ50が受け取った手順と、逆の手順をたどって、アクセス要求の発行元に報告される。図4の中の、各ドライバによって、添付された1,2,3,及び4は、それぞれIO_STACK_LOCATION構造体(詳しくは、後述する。)で表現される。よって、複数のIO_STACK_LOCATION構造体が連続して4つ並んでいることになる。
【0093】
〔IRPについて〕
ここまでに、データのやりとりがIRPを用いて行われていることを説明したが、ここで、IRPについて少し説明する。IRPの概念は、当業者にとっては、自明なことであるが、その概要を説明する。IRPは、アプリケーションプログラム10からアクセス要求(例えば、I/O要求。)が発生した際に、I/Oマネージャ69が作成する構造体である。IRPは、オブジェクトではなく、データのパケットで、その構造体は非常に複雑な形をとっている。
【0094】
図5(a)には、IRPのデータの構成例を示している。図5(b)には、IRPの具体的な例を示している。IRPを参照番号500で図示している。IRP500は、I/Oマネージャ69から、適当なドライバのディスパッチルーチンを呼び出す時に、引数として渡される。ディスパッチルーチンは、アプリケーションプログラム10、又は上位のデバイスドライバからデバイスに対する要求を処理するプログラムである。IRP500の構造体は、ヘッダー501とスタックロケーション502の二つの部分からなる。スタックロケーション502の数は、I/O要求に関わるドライバの階層と関係している。
【0095】
例えば、上位、中間、物理の3つのドライバを介して一つのアクセス要求を処理する場合、3つのスタックロケーションが存在する。ヘッダー501の値と大きさは、ドライバの階層に関係なく固定させている。次のコード1は、IRPの構造体の簡略した例である。
[コード1]

【0096】
図5とコード1の中の関数の意味は、次の通りである。
MdlAddress: ドライバがダイレクトI/Oを使用する際に要求元のバッファを表すMDLを指す。
Flags: このフィールドは、一般にファイルシステムにのみ関係し、フラグを示す。
AssociatedIrp.MasterIrp: アソシエイトIRPに関連付けられたマスターIRPへのポインタである。このフィールドは、ファイルシステムのような最上階層のドライバにのみ関連する。
AssociatedIrp.SystemBuffer: ドライバがバッファードI/Oを使用する際に非ページプールメモリにある中間バッファへのポインタを示す。
【0097】
IoStatus: I/Oステータスブロックである。IRPが完了するとその完了状態がIoStatus.Statusに設定される。またIoStatus.Informationに読み書きされたバイト長が保持される。
RequestorMode: I/O要求元の実行モード(ユーザーモードかカーネルモード)を示す。
Cancel,CancelIrql,CancelRoutine: 実行中のIRP処理を取り消す際に使用する。
UserBuffer: ドライバがニーザーI/Oを使用する際にデータバッファの仮想アドレスを入れる。
Tail.Overlay.DeviceQueueEntry: システムキューを使うドライバのIRPキュー処理のために使用する。
【0098】
Tail.Overlay.Thread: 要求元のスレッド制御ブロックへのポインタである。
Tail.Overlay.ListEntry: ドライバがIRPを所有している間、このフィールドは次のIRPへのリンクに使う。
スタックロケーション502は、階層ドライバのそれぞれのドライバに対応している。スタックロケーション502は、IO_STACK_LOCATION構造体により次のコードのように定義される。次のコード2は、スタックロケーション502の構造体の例である。
【0099】
[コード2]

【0100】
ここで、
MajorFunction: I/O要求に関連したIRP_MJ_READ, IRP_MJ_WRITE等のメジャーI/O機能コードを示す。
MinorFunction: I/O要求に関連したマイナーI/O機能コードを示す。Window 2000/XPドライバのPnP機能と電源管理によく使用される関数である。
Flags: I/O操作に特有の実行フラグを示し、このフラグは主にファイルシステムと関係する。
【0101】
Control: I/Oマネージャによって設定、参照されるフラグ群を表し、特定のIRPをどのように処理する必要があるか示している。
Parameters: このフィールドはメジャーI/Oコードによって定義されている共用体である。
DeviceObject: I/O要求の対象となるデバイスオブジェクトへのポインタである。
FileObject:I/O要求に関連するファイルオブジェクトへのポインタである。
【0102】
〔マップ72及びバッファ管理テーブル73について〕
図6は、マップ72とバッファ管理テーブル73の例を図示したものである。マップ72とバッファ管理テーブル73は、ディスク25と、キャッシュバッファ71に格納されているデータの関連付けを示すデータである。マップ72とバッファ管理テーブル73は、テーブル式のデータである。マップ72は、ディスク25の全体の記憶領域に関するもので、ディスク25のどの領域のデータが、キャッシュバッファ71に格納されているかを示すものである。
【0103】
バッファ管理テーブル73は、キャッシュバッファ71に格納されているデータの場所を示すデータである。記録媒体に電子データを記録するとき、物理的な最小単位は、ビットである。8ビットは、1バイトである。本実施の形態においては、ディスク25へデータを書き込むとき、複数のバイトをまとめて書き込みする。1回の動作で書き込みするデータの最小単位を、アクセス最小単位nとする。ディスク25全体の容量をNバイトとする。Nを、nで割った値を、nmaxとする。このnmaxは、ディスク25をアクセス最小単位nに区切ったときにできる領域の数である。ディスク25は、nmaxの領域からなり、それを先頭から「0」、「1」、…、「n」、…「nmax-1」と番号付けて管理する。以下は、この領域に付けた固有番号を、インデックスiという。iは、最小値「0」から、最大値「nmax-1」の整数番号である。
【0104】
図6のマップ72は、ディスク25の全体を、アクセス最小単位na毎に、1対1で管理する表である。マップ72のインデックス欄74は、インデックスiになる。値欄75は、そのインデックスに対応するデータが、キャッシュバッファ71にあるかないかを示す値である。よって、値欄75は、キャッシュバッファ71にデータがある場合を示す「1(TRUE)」と、キャッシュバッファ71にデータがない場合を示す「0(FALSE)」からなり、1ビットである。
【0105】
例えば、アクセス最小単位nが512バイト、ディスク容量Nが4GBを、考える。このとき、インデスクの数nmaxは、800万個(=4GB/512B)になる。ディスク25のオフセットは、バイト単位の値であり、ディスク25上に書き込む位置を示す値である。キャッシュするオフセットと、そのサイズを管理する際に、メモリを節約するためにオフセットを最小単位で割ったインデックスで管理している。バッファ管理テーブル73は、インデックス欄76と、ポインタ欄77からなっている。インデックス欄76のデータは、マップ72のインデックス欄74の中の値が「1(TRUE)」のインデックスである。
【0106】
ポインタ欄77は、キャッシュバッファ71内の位置を表すポインタである。言換えると、バッファ管理テーブル73は、データをディスク25への書き込みする位置を表すインデックスniからなるインデックス欄76と、そのデータのキャッシュバッファ71内の位置を表すポインタからなるポインタ欄77からなる。図6の例では、例えば、アクセス最小単位nが512バイトの場合、インデックス「0」は、ディスク25の先頭から0〜511バイトを指す。インデックス「1」は、ディスク25の先頭から512〜1023バイトを指す。
【0107】
マップ72を参照することにより、キャッシュバッファ71内に、要求されたデータがあるかを確認することができる。また、マップ72を参照した結果キャッシュバッファ71内に要求されたデータがあった場合、バッファ管理テーブル73を参照して、そのデータが、キャッシュバッファ71内に格納されている場所を特定することができる。
図7は、キャッシュバッファ71の構造例を示す図である。図8は、マップ72の構造例を示す図である。図9は、バッファ管理テーブル73の構造例を示す図である。
【0108】
〔書き込み処理及びフラッシュ処理〕
フラッシュ処理とは、本実施の形態では、キャッシュバッファ71にキャッシュされているデータをディスク25へ書き込む処理を言う。フラッシュ処理は、本実施の形態においては、次の表に示す条件で行われる。この表1の第1欄はフラッシュ処理の条件を示す、第2欄はフラッシュ処理の条件の説明である。
【0109】
【表1】

【0110】
書き込み処理とは、本実施の形態では、データをディスク25へ書き込みする書き込み要求を処理する手順を言う。書き込み要求の書き込みデータは、まず、キャッシュバッファ71にキャッシュされる。そして、キャッシュバッファ71のデータは、上述のフラッシュ処理にて、実際に、ディスク25へ書き込まれる。書き込み処理は、キャッシュバッファ71へのキャッシュ処理ともいうことができる。書き込み処理は、アプリケーションプログラム10又はオペレーションシステム11等のアクセス要求を発した側からみた場合の言い方で、キャッシュ処理はフィルタドライバ50から見た言い方である。
【0111】
図10は、書き込みデータの流れを図示したブロック図である。フィルタドライバ50は、ディスクドライバ38から、ディスク25への書き込みデータ100を受け取る。フィルタドライバ50は、書き込みデータ100を、セル101に分割する。セル101の大きさは、上述のアクセス最小単位nである。そして、フィルタドライバ50は、分割されたセル101sの先頭のセル101から、キャッシュバッファ71に書き込む。フィルタドライバ50は、キャッシュバッファ71の先頭から順番に、セル101を書き込む。
【0112】
キャッシュバッファ71にすでにデータが格納されている場合、フィルタドライバ50は、キャッシュバッファ71の空き領域の先頭から、セル101を書き込む。ディスク25へ書き込む位置が同じセル101は、キャッシュバッファ71内には、同一場所に上書きされる。例えば、セル101と、キャッシュバッファ71内のセル102は、ディスク25の同じ位置に書き込まれるセルである場合は、セル101がセル102に上書きされる。書き込みデータ100のサイズに対して、キャッシュバッファ71の空き領域が足りない場合は、まず、書き込みデータ100を保留する。このとき、書き込みデータ100は、セルごとに分割されて保留される。
【0113】
この保留されたデータは、図中に、書き込みデータ100pと書かれており、RAM上で、保留される。このとき、キャッシュバッファ71は、キャッシュフルとみなされ、書き込みデータ100p用の空き領域ができるまでに、フラッシュ処理が行われる。そして、フラッシュ処理が行われ、キャッシュバッファ71には、書き込みデータ100pを書き込むのに必要な領域以上の領域ができると、書き込みデータ100pがキャッシュバッファ71にキャッシュされる。
【0114】
フラッシュ処理は、書き込み(キャッシュ)処理又は読み込み処理とは別に行う。フラッシュ処理は、キャッシュバッファ71の先頭からアクセス最小単位ずつ行う。図10に図示したように、フィルタドライバ50は、キャッシュバッファ71からセル103を取り出し、ミニポートドライバ37を介して、ディスク25に書き込む。バッファ管理テーブル73には、セル103のポインタと、インデックス76が入っており、このインデックスを基にディスク25上の位置を計算して、ディスク25に書き込む。
【0115】
〔読み込み処理〕
フィルタドライバ50は、ディスクドライバ38から、読み込み要求を受け取る場合の手順をここで説明する。フィルタドライバ50は、読み込み要求を受け取ると、要求された要求データが、どこにあるかを探す。要求データは、保留中の書き込みデータ100p、キャッシュバッファ71、又は、ディスク25に格納されている可能性がある。保留中のデータは、IRPキューによって管理される。IRPキューは、オペレーティングシステム11で用意されたIRPをシリアライズするために使用できる、ポインタのチェイン可を実現するための機構である。
【0116】
このため、フィルタドライバ50は、要求データが、書き込みデータ100pにあるかを確認する。ここに要求データがある場合は、フィルタドライバ50は、要求データを取得して、ディスクドライバ38へ渡す。フィルタドライバ50は、要求データが、書き込みデータ100pにない場合は、キャッシュバッファ71の中に確認する。ここに要求データがある場合は、フィルタドライバ50は、要求データを、キャッシュバッファ71から読み込み、ディスクドライバ38へ渡す。要求データが、キャッシュバッファ71にない場合は、フィルタドライバ50は、ディスク25から要求データを読み込み、ディスクドライバ38へ渡す。
【0117】
フィルタドライバ50は、読み込み要求を受け取ったとき、読み込み処理中に排他を掛ける。つまり、フィルタドライバ50は、ディスクドライバ38へ要求データを渡して読み込み処理が終わるまでに、他の処理を止める。保留するデータが、複数ある場合は、すべてをRAM上に保留し、書き込み要求が出された順番に、最初から処理する。つまり、先入れ先出し方式で、保留データを処理する。保留データがキャッシュバッファ71にキャッシュされ、IoCompleteRequest関数にて完了処理が行われてから、RAM上に保留データを開放する。
【0118】
図11には、本発明の実施の形態のフィルタドライバ50の詳細な機能を図示したものである。フィルタドライバ50は、インターフェース部51a、制御モジュール52a、フラッシュ処理モジュール55a、読み込み処理モジュール56a、書き込み処理モジュール57a、デバイスドライバ制御部40a、IRP作成モジュール58a等からなる。
以下、各モジュールの詳細な動作例をフローチャートで示し、説明する。
【0119】
〔制御モジュール〕
図12は、制御モジュール52aの動作概要を示すフローチャートである。まず、制御モジュール52aは、発行されたアクセス要求を受信する。制御モジュール52aは、ディスクドライバ38から、インターフェース部51aを介して、アクセス要求を受信する。制御モジュール52aは、フィルタドライバ50のキャッシュ機能が停止しているかを確認する(ステップ100)。フィルタドライバ50のキャッシュ機能が停止していると、読み込み要求又は書き込み要求のためのIRPは、フィルタドライバ50を通過して、下位のデバイスドライバ(例えば、ミニポートドライバ37。)へ送信される(ステップ108)。
【0120】
ステップ100の判定は、フィルタドライバ50が正常に動作し、キャッシュバッファ71に、書き込みデータをキャッシュする動作が有効であるかを確認するものである。よって、ステップ100において、キャッシュ機能が有効又は無効によって、キャッシュ処理するか否かの判定をする。キャッシュ機能が停止している場合は、アクセス要求が格納されているIRPを、下位のデバイスドライバへ渡す(ステップ108)。例えば、IRPは、下位のデバイスドライバのミニポートドライバ37へ渡す。ステップ100において、キャッシュ機能が有効な場合は、アクセス要求が、読み込み処理、又は、書き込み処理の何れかであるか、それ以外の処理であるかを確認する(ステップ101)。
【0121】
アクセス要求が、読み込み処理、又は書き込み処理以外の処理である場合は、アクセス要求が格納されているIRPを、下位のデバイスドライバへ渡す(ステップ108)。アクセス要求が、読み込み処理又は書き込み処理である場合は、制御モジュール52aは、アクセス要求が書き込み処理であるか否かを確認する(ステップ102)。ステップ102の判定で、書き込み処理ではない場合は、制御モジュール52aは、読み込み処理モジュール56aを呼び出し、読み込み処理を行う(ステップ107)。読み込み処理モジュール56aの動作例は、図14のフローチャートである。
【0122】
ステップ102の判定で書き込み処理である場合は、制御モジュール52aは、フラッシュ処理が実行されているかを確認する(ステップ103)。フラッシュ処理が実行されている場合は、ステップ110へ進む。フラッシュ処理が実行されていない場合は、バッファ管理テーブル73(図6参照)に空き領域があるか否かを確認する(ステップ104)。ここで、バッファ管理テーブル73に空き領域がない場合は、ステップ110へ進む。バッファ管理テーブル73に空き領域がある場合は、アクセス要求が、書き込み処理で、かつ、キャッシュバッファ71(図10参照)には書き込みデータを格納できる空き領域があるかを、確認する(ステップ105)。
【0123】
このとき、キャッシュバッファ71の空き領域が足りない場合、制御モジュール52aは、フラッシュ処理モジュール55aを呼び出し、フラッシュ処理を行う(ステップ109)。フラッシュ処理モジュール55aの動作例は、図15のフローチャートに示す。フラッシュ処理が実行された後、ステップ110へ進む(ステップ109)。アクセス要求が書き込み処理で、かつ、キャッシュバッファ71には書き込みデータを格納できる空き領域がある場合は、制御モジュール52aは、書き込み処理モジュール57aを呼び出し、書き込み処理を行う(ステップ106)。
【0124】
この書き込み処理は、ディスク25への書き込みデータを、キャッシュバッファ71にキャッシュする処理である。書き込み処理モジュール57aの動作例は、図13のフローチャートである。ステップ110においては、制御モジュール52aは、IRPキューを排他取得する。そして、このIRPキューの末尾に、現在のアクセス要求のIRPが追加される(ステップ110)。最後に、制御モジュール52aは、IRPキューの排他を解除する(ステップ112)。
【0125】
〔書き込み(キャッシュ)処理モジュール〕
図13は、書き込み処理モジュール57aの動作例の概要を示すフローチャートである。書き込み処理モジュール57aは、アクセス要求のIRP(図5(b)のParameters_xxxという部分)から、ディスク25のオフセット、バッファデータ、及び、データサイズを参照する(ステップ201)。このParameters_xxxメンバは共用体になっており、IRP_MJ_SCSIリクエストの場合は、そのリクエスト固有のパラメータが指定される。
【0126】
このオフセットは、読み込み処理又は書き込み処理を行う位置を、ディスク25の先頭から計算した値である。このバッファデータは、書き込みされるデータで、図10の書き込みデータ100に該当する。このデータサイズは、書き込みデータ100のデータのサイズである。そして、書き込み処理モジュール57aは、オフセットとデータサイズから、キャッシュするセル数ncell(データサイズをアクセス最小値nで割った値)を計算する(ステップ202)。セル数は、図10のセル101の数になる。
【0127】
ディスク25にデータを書き込みする先頭インデックスH(=オフセット/n)を計算する(ステップ203)。カレントインデックス「i」は、上位のデバイスドライバから発行された読み込み又は書き込み要求のオフセットより、Hの式で計算された値になる。カレントセルnは、書き込みされるセルの番号である(ステップ204)。
cell=データサイズ/n
i=H
n=0
【0128】
マップ72のiビット目の値を参照する(ステップ205)。参照が失敗すると、キャッシュバッファ71を参照し、空領域のポインタを取得する(ステップ206)。この参照が失敗するとは、図6のマップ72上のアクセス要求のオフセット(ディスク25上の位置)に該当するデータが存在しない、つまり、キャッシュバッファ71にキャッシュされていないことを意味する。取得したポインタ(MdlAddressから得られるバッファのポインタ)が指すキャッシュバッファ71の位置に、IRPの該当データをコピーする(ステップ207)。この該当データは、IRPのMdlAddressで指し示されるバッファに格納されている。
【0129】
このバッファは、直接参照はできないため、オペレーティングシステムが提供するAPI(MmGetSystemAddressForMdlSafe)を使用し、単純なメモリポインタに変換をしてから参照を行う。このコピーによって、書き込み処理が行われたことになる。マップ72のiビット目をオンにする(ステップ208)。逆に、参照が成功するとは、図6のマップ72上のアクセス要求のオフセットに該当するデータがある、つまり、キャッシュバッファ71にキャッシュされていることを意味する。ステップ205で、iビット目を参照し、成功すると、バッファ管理テーブル73から一致するオフセットを検索する(ステップ209)。
【0130】
このオフセットが見つかった場合は、ステップ214へ進む(ステップ210)。このオフセットが見つからない場合は、エラーを出力する(ステップ213)。ステップ214では、該当セルを、キャッシュバッファ71に、IRPからコピーする。具体的には、上述のMdlAddressから得られるバッファのポインタからメモリコピーをする。マップ72上のi番目のビットが立っていた場合(i番目のビットの値が1の場合。)、バッファ管理テーブル73には、関連するオフセットとバッファのポインタに関する記述は、必ず存在する前提に担っており、これが矛盾するとエラーとなる(ステップ213)。
【0131】
ステップ214で、コピー先に、データがあると、上書きする(ステップ214)。そして、iとn値を1つずつ増加する(ステップ215)。nの値が増加され、書き込みされる次のセルになる。nがncellに達したときは、IRP完了処理を実行する(ステップ216、及び、ステップ217)。nがncellに達しないときは、ステップ205からの処理を繰り返す(ステップ216、及び、ステップ205)。IRP完了処理は、アプリケーションプログラム10又はオペレーティングシステム11から発行された読み込み要求又は書き込み要求を完了し、発行元の処理を、継続して実行可能にする処理である。
【0132】
〔読み込み処理モジュール〕
図14は、読み込み処理モジュール56aの動作例を示すフローチャートである。IRPに指定されたオフセット、データサイズのデータをディスク25から読み込む(ステップ300)。この読み込まれたデータは、RAM上に、IRPに指定されたバッファに格納される。これは、読み込み要求に付随されている読み込み用バッファがそのままの形式ではアクセスできないため、これをアクセスしやすくするために、メモリにマップする処理である。
【0133】
要求された読み込みデータは、キャッシュバッファ71に入っている可能性があるので、次の手順で、キャッシュバッファ71内に該当するデータがあるかを探す。キャッシュバッファ71内に該当するデータがある場合は、IRPに指定されたバッファのデータを、キャッシュバッファ71のデータで書き換える。読み込まれたデータサイズから、セル数ncellを計算する。そして、オフセットの値から、先頭インデックスHを計算する(ステップ302)。カレントセルnを初期化する(ステップ302)。
cell=データサイズ/n
H=オフセット/n
n=0
【0134】
マップ72のiビット目を参照する(ステップ303)。参照が失敗すると、ステップ312へ進む。ステップ303で、iビット目を参照し、成功すると、キャッシュバッファ71から一致するセルを検索する(ステップ306)。このセルが見つからない場合は、エラーを出力する(ステップ310)。ステップ307で、一致するセルが見つると、ステップ311へ進む。ステップ311では、WDF_ReadCacheを実行する(ステップ311)。WDF_ReadCacheは、上位のデバイスドライバから発行された読み込み要求と、オフセットが一致しているキャッシュ済みデータを、IRPのバッファにメモリコピーする処理である。
【0135】
ステップ312では、iとn値を1つずつ増加する。nがncellに達したときは、IRP完了処理を実行する(ステップ313、及び、ステップ314)。IRP完了処理は、図13の書き込み処理モジュールの中のIRP完了処理と同様なものである。nがncellに達しないときは、ステップ303からの処理を繰り返す(ステップ313、及び、ステップ303)。
【0136】
〔フラッシュ処理モジュール〕
図15は、フラッシュ処理モジュール55aの動作例の概要を示すフローチャートである。フラッシュ処理モジュール55aが実行されると、IRP作成モジュール59aを呼び出して実行する(400)。、IRP作成モジュール59aの例は、図17のフローチャートに図示している。その後、フラッシュ処理モジュール55aは、まず、フラッシュフラグをオンにする(ステップ401)。フラッシュフラグは、ディスクドライブ毎に存在するフィルタドライバ50のデバイスオブジェクトのデバイスエクステンション構造体に格納されており、ドライバ作成者が自由に設定できる構造体である。
【0137】
このフラッシュフラグは、フィルタドライバ50内のどのモジュールからもアクセス可能である。フラッシュフラグのオンは、ゼロ以外(TRUE)の値になっている。逆に、フラッシュフラグのオフは、ゼロ「0」(FALSE)の値になっている。フラッシュフラグをオンにしたあとは、フラッシュ処理モジュール55aは、フラッシュ回数ncellを計算する(ステップ402)。
cell=UnitBufferPoint
フラッシュ回数ncellは、バッファ管理テーブル73内に格納されているキャッシュデータのセル数になる。フラッシュ処理は、セルごとに行われるので、フラッシュ回数は、フラッシュ処理される回数である。
【0138】
そして、フラッシュ個数の初期値(n=0)を設定する(ステップ403)。フラッシュ個数は、現在フラッシュ処理全体にて実際に書き込まれたキャッシュバッファ内のセル数になる。これの初期値は、通常は、「0」になっている。バッファ管理テーブル73(図6及び8を参照。)から、オフセット、バッファポインタを参照する(ステップ404)。このオフセットは、ディスク25上の書き込みオフセットに相当する。バッファポインタは、データが入っているメモリ場所のポインタである。
【0139】
該当キャッシュバッファ71をディスク25に書き込む(ステップ405)。マップ72(図6及び図8を参照。)の該当位置にビットをリセットする(ステップ406)。IRPキューを排他取得する(ステップ407)。IRPキューの先頭を参照する(ステップ408)。書き込み要求(SCSIWrite)かを確認する(ステップ409)。書き込み要求ではない場合は、IRPキューから、IRPを取り出す(ステップ410)。そして、IRPキューを排他取得する(ステップ411)。排他取得は、IRPキューに格納される読み込み要求又は書き込み要求の順番が異なったり、リンクの不正が発生しないように、するために必要な処理である。
【0140】
読み込み(SCSIRead)処理のために、読み込み処理モジュール56aを呼び出して実行する(ステップ412)。この読み込み処理モジュール56aの例は、図14のフローチャートである。その後、そして、ステップ419へ進む。ステップ409の書き込み要求(SCSIWrite)の確認で、書き込み要求の場合は、キャッシュバッファ71の空き領域を確認する(ステップ413)。空き領域がない場合は、IRPキューを排他取得する(ステップ414、及び、ステップ415)。そして、ステップ419へ進む。ステップ413の確認で、キャッシュバッファ71の空き領域がある場合は、IRPキューから、IRPを取り出す(ステップ416)。そして、IRPキューを排他取得する(ステップ417)。
【0141】
書き込み処理(SCSIWrite)を実行する(ステップ418)。書き込み処理の例は、図13のフローチャートである。その後、ステップ419へ進む。ステップ419では、n値を1つ増加する(ステップ419)。nがnmaxに達したときは、フラッシュフラグをリセットする(ステップ420、及び、ステップ421)。このリセットでは、フラッシュフラグは、「ゼロ(FALSE)」値になる。nがnmaxに達しないときは、ステップ404からの処理を繰り返す(ステップ420、及び、ステップ404)。
【0142】
〔IRP作成モジュール〕
図17には、IRP作成モジュール58aの動作概要を示すフローチャートである。IRP作成モジュール58aは、フィルタドライバ50のフラッシュ処理モジュール55aの処理開始時にから呼び出されて動作する。IRP作成モジュール58aは、動作を開始すると、IoGetNextIrpStackLocation関数で、下位のデバイスドライバ(例えば、ミニポートドライバ37。)のスタックロケーションを取得する(ステップ501)。
【0143】
続けて、IRP作成モジュール58aは、DeviceExtensionからワーク用IRPであるIRPnewを取得する(ステップ502)。IRPnewは、フィルタドライバ50が、事前に作成したIRPである。IRP作成モジュール58aは、ExAllocatePoolWithTag関数にて、NewSRBを割り当てる(ステップ503)。そして、新規に作成中のIRPnewの各メンバーに必要な値を代入する(ステップ505)。例えば、SCSIコマンド及び書き込み用バッファを代入する。そして、IRP作成モジュール58aは、IRPnewのMajorFunctionに、RP_MJ_INTERNAL_DEVICE_CONTROLをセットし(ステップ506)、NewSRBのDataBufferに読み込むデータの格納先ポインタをセットする(ステップ507)。
【0144】
その後、IRP作成モジュール58aは、NewSRBのDataTransferLengthに、読み込むデータのサイズをセットする(ステップ508)。IRP作成モジュール58aは、上位のデバイスドライバから発行されたIRPに指定されたオフセットを論理ブロックアドレスに変換し、そのサイズを論理ブロックバイトに変換する(ステップ509)。IRP作成モジュール58aは、NewSRBのCDBにオフセットをセットする(ステップ510)。そして、NewSRBのCDBにサイズをセットする(ステップ511)。最後は、IRP作成モジュール58aは、IoAllocateMdl関数で、MemoryDescriptorListを割り当てる(ステップ50)。
【0145】
〔ディスクドライバとミニポートドライバとのインターフェース〕
本実施の形態のオペレーティングシステム11の標準設計では、ディスクドライバ38とミニポートドライバ37の間のインターフェースが、SCSIリクエストで行われている。本発明のフィルタドライバ50は、図10に示すように、ディスクドライバ38から発行されたアクセス要求(例えば、SCSIリクエスト。)を、インターフェース部51aによって、受けとり、処理する。そして、フィルタドライバ50とミニポートドライバ37とのデータ送受信は、フィルタドライバ50が、ミニポートドライバ37向けのアクセス要求(例えば、SCSIリクエスト。)を発行し、デバイスドライバ制御部40aから、ミニポートドライバ37へ送信して行われる。
【0146】
ミニポートドライバ37は、フィルタドライバ50が発行したアクセス要求を受け取り、処理して、これに応答する。このように、フィルタドライバ50とミニポートドライバ37と間にデータのやり取りが行われる。フィルタドライバ50がディスクドライバ38とミニポートドライバ37とのインターフェースに用いる代表的な関数を次の表2に示す。これらの関数は、WINDOWS標準のものである。
【0147】
【表2】

【0148】
インターフェース部51aは、ディスクドライバ38からのアクセス要求を受け取り、このアクセス要求を、制御モジュール52aに渡す。インターフェース部51aは、ディスクドライバ38から発行される全ての種別のIRPを受け取る。IRPを受け取った際、IRPキューに未完了のIRPが存在しなければ、制御モジュール52aにこのIRPを渡す。IRPキューに未完了のIRPが存在した場合、IRPキューにこのIRPを追加する。アクセス要求が書き込み処理の場合、書き込み処理(キャッシュ処理)後に、インターフェース部51aは、ディスクドライバ38への書き込み要求に対するResponseを返す。
【0149】
そのために、以下の処理をする。まず、インターフェース部51aは、IRPのIoStatus.STATUSにSTATUS_SUCCESSを代入する。そして、IoCompleteRequestを呼び出す。最後に、returnでIoSTATUSを返す。これにより、IRPは、I/Oマネージャ69へ返され、結果的に、ディスクドライバ38へ送信される。アクセス要求が読み込み処理の場合、ディスク25から該当するオフセットとサイズのデータを一度読み取り、読み込み(キャッシュ)処理の後に、インターフェース部51aは、ディスクドライバ38への読み込み要求に対するResponseを返す。
【0150】
図11に図示されたデバイスドライバ制御部40aは、書き込み及び読み込みリクエストの場合、制御モジュール52aの処理のステータスをIRPのIoStatus.Statusに代入し、IoCompleteRequestを呼び出してIRPを完了する。IoStatus.Statusの値は、異常時を除いて、STATUS_SUCCESSである。これにより、IRPはI/Oマネージャ69によって完了され、結果的に、ディスクドライバ38にその完了が通知される。それ以外の種別のリクエストでは、ディスクドライバ38から発行されたIRPを、IoCallDriverでミニポートドライバ37に発行し、特に処理を行わない。
【0151】
〔ユーティリティプログラムの構成〕
図16は、ユーティリティプログラム59の構成例を示すブロック図である。ユーティリティプログラム59は、GUI部59a及び、定期フラッシュ部59bから構成される。GUI部59aは、ユーザインターフェースのためのものである。定期フラッシュ部59bは、フィルタドライバ50を制御するためのものである。フィルタドライバ50とユーティリティプログラム59と間のインターフェースには、次の表3のAPI関数を用いる。
【0152】
ユーティリティプログラム59とのインターフェースは、フィルタドライバ50のオープン・クローズを除いては、新たに、DeviceIoControlコードを定義し、このコードでコマンドを発行する。
【0153】
【表3】

【0154】
〔DeviceIoControlについて〕
本発明は、フィルタドライバ50を制御するDeviceIoControlを提供する。前述のとおり、フィルタドライバ50のステータス取得、その制御は、ユーティリティプログラム59からDeviceIoControl関数を呼び出すことにより行う。DeviceIoControl関数は、ユーザモードのアプリケーションプログラムがデバイスを制御するために使うWinAPI関数である。DeviceIoControl関数は、比較的にデバイスを自由に取り扱う事ができる。
【0155】
次の表4には、DeviceIoControl関数の代表機能の一覧を示している。
【0156】
【表4】

【0157】
DeviceIoControlのインターフェースの例を、次のコード3に示す。
[コード3]

【0158】
アプリケーションプログラム10から発行されたDeviceIoControl要求は、I/Oマネージャ69を経由して、フィルタドライバ50に渡される。I/Oコントロールコードは、Microsoft Windows Driver Kit (WDK) で提供されているマクロであるCTL_CODEと呼ばれるカスタムコントロールコードによって作成され、CTL_CODEは次のような形になっている。CTL_CODEマクロにパラメータを与えると、IO_CTLコード(図4を参照。)が戻り値で得られます。
【0159】
I/Oコントロールコードは、次の表5に示すように、DeviceIoControlの引数に指定したものが、ドライバのIRP_MJ_DEVICE_CONTROLのハンドラに渡されるものである。
【0160】
【表5】

【0161】
〔画面例〕
図18は、ユーティリティプログラム59の画面例である画面600を示す図である。画面600は、次の複数の領域からなる。領域601は、物理デバイスの選択を行うための領域で、ここで物理デバイスを選択する。図中には、物理デバイスが選択された例として「Disk01」になっている。ここで選択された物理デバイスは、本願発明の制御対象のディスク25になる。電子計算機1には、複数の補助記憶装置が内蔵又は、接続されているとき、そのどれか一つを選択する。
【0162】
領域602は、キャッシュ制御(フィルタドライバ50のキャッシュ機能)の状態を表示するための領域であり、この例では、「ON」になっており、キャッシュ制御(フィルタドライバ50のキャッシュ機能)が有効であることを示している。キャッシュ制御が無効の場合は、「OFF」として表示される。領域603は、キャッシュバッファ71の状態を示している。バー604は、キャッシュバッファ71の全体容量の内、どのぐらいの領域にデータが格納知れているかを示し、この例では、12%になっている。ボックス606には、キャッシュバッファ71の全体容量を示し、この例では、64MBになっている。ボックス605は、キャッシュバッファ71の使用容量を示し、この例では、8.139MBになっている。
【0163】
ボックス607は、キャッシュバッファ71が過去においては、使用された最大の容量を示し、この例では、16.375MBになっている。この過去は、電子計算機1に電源が投入されたから数えたものでもよい。また、電子計算機1に電源が投入されたから、最近、所定日、所定時間、又は、所定分の内の最大使用容量でも良い。例えば、最近、1日の最大使用量でも良い。また、電子計算機1のログを取り、電源の投入・切断に関係なく、過去一定期間に通しての値でも良い。これは、システム管理者にとっては、キャッシュバッファ71の容量をどのぐらいに設定するか決める重要な参考になる。
【0164】
領域608は、フラッシュ処理の制御に関するデータを示す領域である。この中で、領域609は、定期的な処理回数を示し、領域610はキャッシュフル時の処理回数を示す。領域611は、フラッシュ処理を最後に行った日時を示す。この例では、2009年2月3日、17時47分23秒にフラッシュ処理を起こったことを示している。この日時の表示のフォーマットは、電子計算機1の使用環境に応じて変更可能である。さらに、表示されるデータの一部を省略することもできる。領域612は、キャッシュバッファ71の統計情報を表示するための領域である。
【0165】
領域613は、キャッシュバッファ71に書き込み処理(キャッシュ)が行われた回数を表示している。回数は、この例では、上位のディスクドライバから発行された書き込みリクエストの回数である。領域614は、書き込み要求の総数を示している。領域615は、書き込み要求に対する書き込み処理の割合示すデータであり、ヒット率として表示されている。領域616は、本発明のフィルタドライバ50のプログラムのバージョン情報を示す領域である。ボタン617は、設定の変更を行うための画面に遷移するためのボタンである。ボタン617を押すと、図19の画面に遷移する。ボタン618は、画面600を閉じるためのボタンである。
【0166】
図19は、ユーティリティプログラム59の画面例2を示す図である。701は、キャッシュ処理の状態を変更するための領域で、ユーザは、この領域の「ON」又は「OFF」ボタンを押して、キャッシュ処理を有効又は無効にする。領域702は、フラッシュ処理が行われるスケジュールを指定するための領域であり、フラッシュ処理が定期的に行われる間隔を指定する。図の例では、分と秒単位で、フラッシュ処理を定期的に実行する間隔を指定する。領域703は、キャッシュバッファ71のサイズを指定する領域である。図の例では、選択方式になっており、64MBが選択されている。
【0167】
ここで、選択された領域は、図18の領域606に表示される。ボタン704は、フラッシュ処理を強制的に手動で実行するためのボタンである。このボタン704を押すと、フラッシュ処理が強制的に行われる。この強制的なフラッシュは、次の場面で使うと有効である。電子計算機1の管理者は、電子計算機1に新規のソフトウェアをインストールする等の作業を行うとき、ボタン704を押してフラッシュ処理が強制的に行うと、キャッシュバッファ71内のデータを保存する。ボタン705は、画面700の設定を反映させて、図18の画面600に遷移するためのボタンである。ボタン706は、画面700の設定を反映させないで、図18の画面600に遷移するためのボタンである。また、ボタン705とボタン706は、画面700の設定を反映させて、又は反映させない終了さえても良い。
【0168】
〔ボリュームについて〕
本発明のフィルタドライバ50は、ディスク50を物理デバイス毎、言い換えるとボリュームごとに、に制御する。ディスク25は、分割され、複数のパーティションになっていることがよくある。この場合は、パーティション毎に制御を行わない。
【0169】
〔その他〕
フィルタドライバ50は、図示しないが、初期化モジュール、ハードウェア制御モジュール、電源管理ハンドラな等のモジュールを備える。初期化モジュール(DriverEntry)は、フィルタドライバ50の起動後、一番最初に、呼び出されて動作するルーチンである。初期化モジュールは、フィルタドライバ50用のパラーメータの初期化、オペレーティングシステムのレジストリの読み込み等を行う。
【0170】
ハードウェア制御モジュール(WFDAddDevice)は、電子計算機1に接続又は内蔵されている物理デバイスの確認、デバイスオブジェクトの作成、デバイスのシンボリックリンク、デバイスリソースの割り当て、割り込みとの接続とDpcForIsrの登録、アダプタオブジェクトの取得、デバイスの初期化等を行うものである。ハードウェア制御モジュールは、初期化モジュール(DriverEntry)の実行後に呼び出されて動作する。電源管理ハンドラは、オペレーティングシステム11がシャットダウンするとき、呼び出され、フィルタドライバ50内で自動的にフラッシュ処理モジュール55aを呼び出して、フラッシュ処理を行うものである。
【0171】
書き込み処理、フラッシュ処理、読み込み処理を実行しているとき、エラーが発生したら、フィルタドライバ50は、そのエラーについての情報を、オペレーティングシステム11のイベントログに出力する。フィルタドライバ50は、オペレーティングシステムのレジストリに登録されて動作する。この登録は、フィルタドライバ50のソフトウェアを電子計算機にインストールするとき、又は、手動で登録できる。登録後は、オペレーティングシステムを再起動させることが好ましい。
レジストリ登録の例:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Driverware\Parameter\<デバイス固有キー>
次の表6は、レジストリに登録される値の例を示している。
【0172】
【表6】

【0173】
上述のように、本発明のフィルタドライバ50を用いて、ディスク25に書き込むデータを、RAM上のキャッシュバッファ71に一時的にキャッシュしてから、まとめて、ディスク25に書き込んでいる。これは、オペレーティングシステム11又はアプリケーションプログラム10からみると、ディスク25へデータを書き込む動作には、何らかの影響はなく、従来の通りの動作をすることができる。ディスク25へデータを書き込む動作は、従来より、劇的に低減できる。これは、実施の形態においては、ディスク25を例に説明した。図2に図示したUSBメモリ14にも、応用できる。
【0174】
さらに、ディスク25へデータを書き込む動作が低減されることによって、いままでに、オペレーティングシステムに想定されなかった、書き換え制限が記憶媒体を利用することができるようになった。特に、フラッシュメモリ等の不揮発性メモリを、ディスク25として利用でき、電子計算機の低価格化にも貢献できる。しかし、不揮発性メモリの書き換え回数を計算することが可能です。例えば、フラッシュ時に、バッファ管理テーブル73のデータをバックアップして、そのインデックス欄73を、インデックス毎に書き込みした数を集計して、不揮発性メモリの書き換え回数を取得することができる。
【0175】
これは、図10に図示した、セル103全体での書き換え回数になるが、不揮発性メモリの寿命を予期する上では、非常に役立つ。そして、ユーザに対しては、次の通知データを、通知する機能を、ユーティリティプログラム59に備えることができる。例えば、通知データとしては、一番たくさん書き換えされた領域、領域のうち一番多く書き換えされた回数、その領域の残り寿命(推定残り日数、推定残り書き換え回数等)を例示できる。これらの通知データは、電子計算機のディスプレイに、ユーザの視覚認識可能な状態で、通知されることが好ましい。
【0176】
例えば、グラフィックデータとして表示する。また、オペレーティングシステムの起動時に、画面上に表示することもできる。また、不揮発性メモリの新品時に保証される書き込み回数をあらかじめWindowsの提供するレジストリ等に記憶し、実際に書き込みが行われる回数を記録し続けることで、不揮発性メモリの寿命予測を行うことが可能である。
【0177】
〔書き込みが集中〕
フィルタドライバ50は、アクセス命令を分析して、ディスク25への書き込みが集中する領域を抽出する機能を有する。この分析により、アクセス命令が、ディスク25の同一の領域(同一アドレス)に繰り返し頻繁に書き込みする命令である場合は、この領域に書き込みする書き込みデータを取得し、上述のキャッシュバッファ71に書き込む。このとき、書き込みが集中しない書き込みは、キャッシュバッファ71にキャッシュしないで、ディスク25へ直接書き込む。
【0178】
ディスク25へ書き込みアクセスが多いのは、基本的に、ファイルシステム用の管理領域である。ディスク25のファイルシステム用の管理領域だけを、キャッシュバッファ71にキャッシングするだけで、ディスク25への書き込み回数を大幅に減らすことができる。ディスク25には、データの更新が頻繁に行われるデータベースがあるときは、データベース内のデータが頻繁に更新される領域だけを、キャッシングするだけ、ディスク25への書き込み回数を大幅に減らすこともできる。
【0179】
〔ソフトウェア及び記録媒体〕
本発明の補助記憶装置用のフィルタドライバ50は、単独で、又は、ユーティリティプログラム59と一緒に、ソフトウェアとして販売されることができる。更に、本発明の補助記憶装置用のフィルタドライバ50は、単独で、又は、ユーティリティプログラム59と一緒に、記録媒体に記録されて、販売されることができる。
【産業上の利用可能性】
【0180】
本発明は、フラッシュメモリを利用する分野に利用するとよい。
【符号の説明】
【0181】
1…電子計算機
10…アプリケーションプログラム
11…オペレーティングシステム
13…ネットワーク
14…USBメモリ
16…キーボード
17…マウス
22…コネクタ
23…ネットワークカード
24…USBポート
25…ディスク
27…マウス
30…デバイスドライバ
32…インターフェースドライバ
33…ネットワークドライバ
34…ファイルシステムドライバ
35…キーボードドライバ
36…マウスドライバ
37…ミニポートドライバ
38…ディスクドライバ
40…
40…aデバイスドライバ制御部
42…インターフェース制御部
43…ネットワーク制御部
44…ファイルシステム制御部
45…入力装置制御部
50…フィルタドライバ
51…アプリケーションプログラムインターフェース部
51a…インターフェース部
52…制御部
52a…制御モジュール
53…ログ取得部
55a…フラッシュ処理モジュール
56a…読み込み処理モジュール
57a…書き込み処理モジュール
58…アプリケーションプラットフォームプログラム
59…ユーティリティプログラム
59a…GUI部
59b…定期フラッシュ部
60…ハードウェア
61…サブシステム
62…マイクロカーネル
63…エグゼクティブ
64…HAL
65…オブジェクトマネージャ
66…プロセスマネージャ
67…キャッシュマネージャ
68…メモリマネージャ
69…I/Oマネージャ
71…キャッシュバッファ
72…マップ
73…バッファ管理テーブル
100、100p…書き込みデータ
101、102、103…セル
500…IRP
501…ヘッダー
502…スタックロケーション

【特許請求の範囲】
【請求項1】
入力デバイス(16,17)及び/又は出力デバイス、主記憶手段、並びに、補助記憶手段(25)を備え、オペレーティングシステム(11)によって制御されている電子計算機(1)において、前記補助記憶手段(25)へデータを書き込みする回数を減らすためのドライバ制御手段であって、
A)前記補助記憶手段(25)へ前記データを書き込みする書き込みデータを取得する取得手段、
B)前記書き込みデータを、前記電子計算機(1)の主記憶手段のキャッシュ領域(71)に、キャッシュデータとして書き込む書き込み手段、及び、
C)前記キャッシュデータをまとめて前記補助記憶手段(25)の記録領域に書き込むフラッシュ手段
からなることを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項2】
請求項1に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記オペレーティングシステム(11)は、デバイス(22−27)を制御するためのデバイスドライバ(32−38)を備え、
前記電子計算機(1)は、複数の前記デバイス(22−27)それぞれを制御するための前記デバイスドライバ(32−38)からなるデバイスドライバ層(30)と、前記オペレーティングシステム(11)がカーネルモードで提供する基本プログラム(63)との間に位置するフィルタドライバ手段(50)を有し、
前記フィルタドライバ手段(50)は、前記オペレーティングシステム(11)の全ての命令を実行できる動作モードであるカーネルモードで動作し、かつ、
(i)前記デバイスドライバ(32−38)の共通の窓口となるとともに、前記基本プログラム(63)を通して行われる、前記デバイスドライバ(32−38)とアプリケーションプログラム(10)とのやり取りをまとめて行ない、
(ii)前記アプリケーションプログラム(10)から要求されたときに、前記複数のデバイス(22−27)の間、又は、前記アプリケーションプログラム(10)と前記デバイス(22−27)の間のデータの送受信を行ない、
(iii)前記アプリケーションプログラム(10)から前記電子計算機(1)の前記補助記憶装置(25)に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム(10)が標準で備えているインターフェースを通して、前記アプリケーションプログラム(10)から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置(25)とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機(1)を機能させるプログラムであり、
前記フィルタドライバ手段(50)は、前記書き込みデータを取得し、前記キャッシュ領域(71)に前記キャッシュデータとして書き込みし、及び、前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込みする
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項3】
請求項2に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記フィルタドライバ手段(50)は、
前記書き込みデータを分析して、前記書き込みが集中する前記記録領域の集中記録領域を、特定し、
前記集中記録領域に書き込みされる前記書き込みデータを、前記キャッシュ領域(71)に、前記キャッシュデータとして書き込みし、及び、
前記集中記録領域以外の前記記録領域に書き込みされる前記書き込みデータを、直接、前記記録領域書き込みする
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項4】
請求項2又は3に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記オペレーティングシステム(11)は、前記補助記憶手段(25)に格納されているファイルの読み出し又は書き出しを管理するファイルシステムを備え、
前記オペレーティングシステム(11)は、前記ファイルシステムを制御するためのファイルシステムドライバ(34)を備え、
前記フィルタドライバ手段(50)は、
前記アプリケーションプログラム又は前記基本プログラムから、前記ファイルシステムドライバへのアクセス要求を受信するインターフェース手段(51、51a)と、
アクセス要求が前記書き込みデータを前記補助記憶手段(25)に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域(71)に前記キャッシュデータとして書き込みする書き込み処理手段(57a)と、
アクセス要求が前記補助記憶手段(25)からデータ読み込みする読み込み要求のとき、前記読み込みデータを前記キャッシュ領域(71)及び/又は前記補助記憶手段(25)から取得する読み込み処理手段(56a)と、
前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込むフラッシュ処理手段(55a)と、
前記アクセス要求を前記インターフェース手段(51、51a)から受信し、前記アクセス要求を分析して、前記アクセスが書き込み要求か読み込み要求かを判定し、書き込み処理手段(57a)、読み込み処理手段(56a)、及び、フラッシュ処理手段(55a)の内1以上を実行させる制御手段(52、52a)と、
下位のデバイスドライバとのインターフェースを提供するデバイスドライバ制御部(40、40a)と
からなることを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項5】
請求項4に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記フィルタドライバ手段(50)は、
前記補助記憶手段(25)からデータを読み込みするための、又は、前記補助記憶手段(25)にデータを書き込みするためのIRPを作成し、前記デバイスドライバ制御部(40、40a)を介して、前記下位デバイスドライバ(37)へ送信するIRP作成手段からなる
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項6】
請求項1乃至3の中から選択される1項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、
(I)前記キャッシュ領域がフルになったときに、
(II)定期的に、
(III)前記電子計算機がシャットダウンするとき、
(IV)前記オペレーティングシステムにログオンした利用者がログオフするとき、
(V)前記オペレーティングシステムがサスペンドになるとき、
(VI)前記オペレーティングシステムが休止になるとき、及び、
(VII)強制フラッシュコマンドのとき
の中から選択される1条件である
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項7】
請求項1乃至3の中から選択される1項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域である
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項8】
請求項1乃至3の中から選択される1項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータである
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項9】
請求項1乃至3の中から選択される1項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
フィルタドライバ手段(50)は、前記補助記憶装置(25)へ前記データを書き込みする書き込み回数、及び/又は、前記補助記憶装置(25)の稼動時間に関する統計情報を取得し、前記補助記憶装置(25)の推定稼動時間残量を計算し、前記アプリケーションプログラム(10)又は、前記オペレーティングシステム(11)に報告する報告手段を有する
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項10】
請求項1乃至3の中から選択される1項に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記補助記憶手段(25)は、不揮発性メモリである
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項11】
請求項10に記載の補助記憶装置用フィルタドライバ手段を備えた電子計算機において、
前記不揮発性メモリは、フラッシュメモリである
ことを特徴とする補助記憶装置用フィルタドライバ手段を備えた電子計算機。
【請求項12】
入力デバイス(16,17)及び/又は出力デバイス、主記憶手段、並びに、補助記憶手段(25)を備え、オペレーティングシステム(11)によって制御されている電子計算機(1)において、前記補助記憶手段(25)へデータを書き込みする回数を減らすためのドライバ制御手段として、前記電子計算機を機能させるドライバ制御プログラムであって、
前記補助記憶手段(25)へ書き込みする前記書き込みデータを取得するステップ、
前記書き込みデータを、前記電子計算機(1)の主記憶手段のキャッシュ領域(71)に、キャッシュデータとして書き込むステップ、及び、
前記キャッシュデータをまとめて前記補助記憶手段(25)の記録領域に書き込みするステップ
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項13】
請求項12に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記オペレーティングシステム(11)は、デバイス(22−27)を制御するためのデバイスドライバ(32−38)を備え、
前記電子計算機(1)は、複数の前記デバイス(22−27)それぞれを制御するための前記デバイスドライバ(32−38)からなるデバイスドライバ層(30)と、前記オペレーティングシステム(11)がカーネルモードで提供する基本プログラム(63)との間に位置するフィルタドライバプログラム(50)を有し、
前記フィルタドライバプログラム(50)は、前記オペレーティングシステム(11)の全ての命令が実行できる動作モードであるカーネルモードで動作し、かつ、
(I)前記デバイスドライバ(32−38)の共通の窓口となるとともに、前記基本プログラム(63)を通して行われる、前記デバイスドライバ(32−38)とアプリケーションプログラム(10)とのやり取りをまとめて行ない、(II)前記アプリケーションプログラム(10)から要求されたときに、前記複数のデバイス(22−27)の間、又は、前記アプリケーションプログラム(10)と前記デバイス(22−27)の間のデータの送受信を行ない、(III)前記アプリケーションプログラム(10)から前記電子計算機(1)の前記補助記憶装置(25)に記憶されているファイルへアクセスしようとするとき、前記オペレーティングシステム(10)が標準で備えているインターフェースを通して、前記アプリケーションプログラム(10)から出された前記ファイルへのアクセス要求を受信して、前記補助記憶装置(25)とのデータのやりとりを経由する共通インターフェース手段として前記電子計算機(1)を機能させるプログラムであり、
前記フィルタドライバプログラム(50)は、
A)前記補助記憶手段(25)へ書き込みする書き込みデータを取得するインターフェースステップ(51、51a)、
B)前記書き込みデータを、前記電子計算機(1)の主記憶手段のキャッシュ領域(71)に、キャッシュデータとして書き込む書き込みステップ(57a)、及び、
C)前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込みするフラッシュステップ(55a)
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項14】
請求項13に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム(50)は、
前記アプリケーションプログラム又は前記基本プログラムから、前記ディスクへのアクセス要求を受信する前記インターフェースステップと、
前記アクセス要求が前記書き込みデータを前記補助記憶手段(25)に書き込みする書き込み要求のとき、前記書き込みデータを前記キャッシュ領域(71)に前記キャッシュデータとして書き込みする書き込みステップ(57a)と、
前記アクセス要求が前記補助記憶手段(25)から前記データを読み込みする読み込み要求のとき、前記データを前記キャッシュ領域(71)及び/又は前記補助記憶手段(25)から取得する読み込みステップ(56a)と、
前記キャッシュデータをまとめて前記補助記憶手段(25)の前記記録領域に書き込むフラッシュステップ(55a)と、及び、
(A)前記アクセス要求を前記インターフェース手段(51、51a)から受信し、前記アクセス要求を分析して、前記アクセス要求が書き込み要求か読み込み要求かを判定し、(B)前記アクセス要求が書き込み要求のとき、前記書き込ステップ(57a)を実行し、(C)前記アクセス要求が読み込み要求のとき、前記読み込みステップ(56a)を実行し、及び、(D)前記フラッシュステップ(55a)を実行する制御ステップ(52、52a)と、及び、
下位のデバイスドライバ(37)とのインターフェースを提供するデバイスドライバ制御ステップ(40、40a)と
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項15】
請求項14に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム(50)は、
前記補助記憶手段(25)からデータを読み込みするための、又は、前記補助記憶手段(25)にデータを書き込みするためのIRPを作成し、前記デバイスドライバ制御ステップ(40、40a)を介して、前記下位デバイスドライバ(37)へ送信するIRP作成ステップ(58a)からなる
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項16】
請求項12乃至14から選択される1項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記記録領域は、前記ファイルシステムのファイル管理をするための管理テーブル用の領域である
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項17】
請求項12乃至14から選択される1項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記書き込みデータは、前記ファイルシステムのファイル管理をするための管理テーブルのデータである
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項18】
請求項12乃至14から選択される1項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記キャッシュデータをまとめて前記記録領域に書き込みするときのタイミングの条件は、
(I)前記キャッシュ領域がフルになったときに、
(II)定期的に、
(III)前記電子計算機がシャットダウンするとき、
(IV)前記オペレーティングシステムにログオンした利用者がログオフするとき、
(V)前記オペレーティングシステムがサスペンドになるとき、
(VI)前記オペレーティングシステムが休止になるとき、及び、
(VII)強制フラッシュコマンドのとき
の中から選択される1条件である
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項19】
請求項12乃至14から選択される1項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム(50)は、
前記補助記憶装置(25)へ前記データを書き込みする書き込み回数を取得するステップ、
前記補助記憶装置(25)の稼動時間に関する統計情報を取得するステップ、
前記補助記憶装置(25)の推定稼動時間残量を計算するステップ、及び、
前記アプリケーションプログラム(10)又は、前記オペレーティングシステム(11)に、前記フィルタドライバプログラム(50)の状態を報告する報告ステップ
の内1以上のステップを有する
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項20】
請求項15に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記書き込むフラッシュステップ(55a)は、
下位のデバイスドライバへ指示であるIRPを作成するために前記IRP作成ステップを実行するステップと、
前記キャッシュバッファ内の全データから前記補助記憶装置へ書き込むデータを計算するステップと、
前記キャッシュバッファのデータを管理するバッファ管理テーブル(73)から、前記書き込みデータの補助記憶装置上の位置を取得するステップと、
前記位置に、前記書き込みデータを書き込む命令を前記IRPに入れて、前記下位デバイスドライバへ送信するステップと、
前記書き込みテータを前記補助記憶装置に書き込みした後、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ(72)の中の前記位置に該当する値をリセットするステップと、
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項21】
請求項14に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記書き込みステップ(57a)は、
前記書き込み要求から、オフセット、バッファデータ、データサイズを取得するステップと、
前記データサイズからキャッシュするセルのサイズを計算するステップと、
前記オフセットから、インディクスを計算するステップと、
前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ(72)の中から、前記インディクスに該当するデータがあるかを検索するステップと、
前記検索で、前記インディクスが見つからないとき、前記キャッシュバッファ(71)の空き領域に前記書き込みデータを書き込みし、前記書き込み後、前記補助記憶装置の前記データがキャッシュされているか否かを管理するデータであるマップ(72)の中の前記位置に該当する値をセットするステップと、及び、
前記検索で、前記インディクスが見つかったとき、前記キャッシュバッファ(71)の中から前記インディクスに該当するセルに、前記書き込みデータを上書きするステップと
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項22】
請求項14に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記読み込みステップ(56a)は、
前記読み込み要求に指定されたデータを前記補助記憶装置(25)から読み込み、前記読み込み要求に指定されたバッファに格納するステップと、
前記読み込み要求に指定されたデータが格納されている前記補助記憶装置(25)のオフセットを、前記補助記憶装置のデータがキャッシュされているか否かを管理するデータであるマップ(72)及び/又は、前記キャッシュバッファのデータを管理するバッファ管理テーブル(73)の中のから検索するステップと、
前記検索で、前記オフセットが見つかったとき、前記キャッシュバッファ(71)の前記オフセットに該当するキャッシュデータを読み出すステップと、及び、
前記読み出したデータを、前記バッファの前記オフセットに対応するデータに上書きするステップと
からなることを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項23】
請求項12乃至14のなから選択される1項に記載の補助記憶装置用フィルタドライバプログラムにおいて、
前記フィルタドライバプログラム(50)は、
(A)前記フィルタドライバプログラム(50)の動作、及び、又は前記オペレーティングシステム(11)の動作を記録するログ取得ステップ、(B)前記フィルタドライバプログラム(50)を初期値を設定する初期化ステップ、(C)前記電子計算機(1)の電源管理ハンドラからデータを取得する電源管理ステップ、及び、(D)前記電子計算機(1)に内蔵又は接続されている物理デバイスの確認、その初期化を行うハードウェア制御ステップの中から選択される1以上を有する
ことを特徴とする補助記憶装置用フィルタドライバプログラム。
【請求項24】
請求項12乃至23の中から選択される1項に記載の補助記憶装置用フィルタドライバプログラムを記録した補助記憶装置用フィルタドライバプログラムの記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate


【公開番号】特開2010−198368(P2010−198368A)
【公開日】平成22年9月9日(2010.9.9)
【国際特許分類】
【出願番号】特願2009−42985(P2009−42985)
【出願日】平成21年2月25日(2009.2.25)
【出願人】(000233295)日立情報通信エンジニアリング株式会社 (195)
【出願人】(501180263)サイエンスパーク株式会社 (14)
【Fターム(参考)】