(57)【要約】【課題】  ファイルシステムやアプリケーションの不具合に起因した管理領域の境界をまたぐアクセスに対して適切な処理を行うことを目的とする。【解決手段】  オペレーティングシステムの機能の一部であるファイルシステムからの記憶装置に対するアクセス要求を管理するデバイスドライバを有する情報処理装置であって、前記デバイスドライバに前記記憶装置の管理領域の境界に関する情報を保持させる保持手段と、前記ファイルシステムから前記デバイスドライバに対して前記アクセス要求を送信させる送信制御手段と、前記境界に関する情報に基づき、前記デバイスドライバに前記アクセス要求が前記管理領域の境界をまたぐものであるか否かを判定させ、前記デバイスドライバから前記判定に関する情報を通知させる制御手段と、を有することを特徴とする。【選択図】  図５
2016110514.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムの機能の一部であるファイルシステムからの記憶装置に対するアクセス要求を管理するデバイスドライバを有する情報処理装置であって、
前記デバイスドライバに前記記憶装置の管理領域の境界に関する情報を保持させる保持手段と、
前記ファイルシステムから前記デバイスドライバに対して前記アクセス要求を送信させる送信制御手段と、
前記境界に関する情報に基づき、前記デバイスドライバに前記アクセス要求が前記管理領域の境界をまたぐものであるか否かを判定させ、前記デバイスドライバから前記判定に関する情報を通知させる制御手段と、を有することを特徴とする情報処理装置。
【請求項２】
前記管理領域の境界は、ファイル管理領域と実データの領域との境界と、互いに異なるパーティションの境界との少なくともいずれか一つであることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記アクセス要求には、アクセス先の先頭のアドレスと終端のアドレスとが含まれていることを特徴とする請求項１もしくは２のいずれか１項に記載の情報処理装置。
【請求項４】
前記保持手段は、前記記憶装置のフォーマットパラメータに基づき前記管理領域の境界に関する情報を取得し、取得された当該管理領域の境界に関する情報を保持させることを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記制御手段は、前記記憶装置がフォーマット中でなく、かつ前記アクセス要求のアクセスのサイズが１セクタでない場合、前記デバイスドライバに前記アクセス要求が前記管理領域の境界をまたぐものであるか否かを判定させることを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記ファイルシステムからの情報に基づく境界に関する情報と、前記境界に関する情報とが同じであるか否かを前記デバイスドライバに判定させる第二の制御手段を更に有することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記第二の制御手段による判定の結果に基づき、前記制御手段は、前記通知される前記判定に関する情報を変更させることを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記デバイスドライバは、前記アクセス要求に基づき前記記憶装置に対する情報処理装置の動作を制御することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
オペレーティングシステムの機能の一部であるファイルシステムからの記憶装置に対するアクセス要求を管理するデバイスドライバを有する情報処理装置の制御方法であって、
保持手段が、前記デバイスドライバに前記記憶装置の管理領域の境界に関する情報を保持させる保持工程と、
送信制御手段が、前記ファイルシステムから前記デバイスドライバに対して前記アクセス要求を送信させる送信制御工程と、
制御手段が、前記境界に関する情報に基づき、前記デバイスドライバに前記アクセス要求が前記管理領域の境界をまたぐものであるか否かを判定させ、前記デバイスドライバから前記判定に関する情報を通知させる制御工程と、を有することを特徴とする情報処理装置の制御方法。
【請求項１０】
コンピュータを、
オペレーティングシステムの機能の一部であるファイルシステムからの記憶装置に対するアクセス要求を管理するデバイスドライバを有する情報処理装置であって、
前記デバイスドライバに前記記憶装置の管理領域の境界に関する情報を保持させる保持手段と、
前記情報処理装置のファイルシステムから前記デバイスドライバに対して前記アクセス要求を送信させる送信制御手段と、
前記境界に関する情報に基づき、前記デバイスドライバに前記アクセス要求が前記管理領域の境界をまたぐものであるか否かを判定させ、前記デバイスドライバから前記判定に関する情報を通知させる制御手段と、を有することを特徴とする情報処理装置として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置へのアクセス要求を管理するデバイスドライバを有する情報処理装置、情報処理装置の制御方法、およびコンピュータプログラムに関する。
【背景技術】
【０００２】
一般的なパーソナルコンピュータや組み込み機器などの情報処理装置が外部記憶装置にデータを記録する場合、情報処理装置を制御するオペレーティングシステム内のファイルシステムが用いられる。ファイルシステムは、外部記憶装置それぞれのファイル管理方式に応じた方法でアクセスをする。
【０００３】
ファイル管理方式として、オペレーティングシステムやオペレーティングシステムのバージョンごとに多くのものが提案されている。例えば、ＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）ファイルシステムは、多くの組み込み機器に採用されているファイル管理方式である。一般的なファイル管理方式は、ファイル管理領域や実データ領域などの複数の領域に分けて外部記憶装置のデータを管理している。
【０００４】
一方、一般的な外部記憶装置は、パーティションと呼ばれる複数の領域に分割することが可能である。それぞれのパーティションは別々の外部記憶装置のように扱うことが可能であり、それぞれのパーティションごとに別々のファイル管理方式を採用することも可能である。
【０００５】
上記の通り、外部記憶装置は、パーティションやファイル管理方式に応じた領域ごとに分けて管理されている。しかし、何かしらの不具合によって領域をまたぐアクセスが発生した場合、システムに不具合が発生する可能性がある。例えば、ファイル管理領域と実データ領域とに同時にアクセスした場合、ファイル管理上は存在しないはずのファイルが、実データとしては存在するなどの不具合が発生することが想定される。この場合、実データとしてのファイルは存在するが、ファイルシステムから当該ファイルを読みだすことは出来なくなってしまう。
【０００６】
特許文献１に開示されている技術では、所定のファイル管理方式で管理されている単一のパーティションに対して、複数種類のファイルシステムからのアクセスを防止することによって不具合の発生を防止することが開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−２０３４７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に開示されている技術によれば、複数種類のファイルシステムからのアクセスを原因とする不具合の発生を防止することが出来る。しかしながら、単一のファイルシステムからのアクセスであっても、当該ファイルシステムに不具合があった場合、複数の管理領域の境界をまたぐアクセスが発生してしまう可能性がある。また、オペレーティングシステム上で動作するアプリケーションの不具合によっても、上記管理領域の境界をまたぐアクセスが発生する可能性がある。このようなアクセスの発生は、主に、アプリケーションの開発段階で発生するものであるが、従来の技術では、ソースコードを目視するなどをして不具合を発見していた。
【０００９】
本発明は、上記課題を鑑みてなされたものであり、ファイルシステムやアプリケーションの不具合に起因した管理領域の境界をまたぐアクセスに対して適切な処理を行うことを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、オペレーティングシステムの機能の一部であるファイルシステムからの記憶装置に対するアクセス要求を管理するデバイスドライバを有する情報処理装置であって、前記デバイスドライバに前記記憶装置の管理領域の境界に関する情報を保持させる保持手段と、前記ファイルシステムから前記デバイスドライバに対して前記アクセス要求を送信させる送信制御手段と、前記境界に関する情報に基づき、前記デバイスドライバに前記アクセス要求が前記管理領域の境界をまたぐものであるか否かを判定させ、前記デバイスドライバから前記判定に関する情報を通知させる制御手段と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、ファイルシステムやアプリケーションの不具合に起因した管理領域の境界をまたぐアクセスに対して適切な処理を行うことが出来る。
【図面の簡単な説明】
【００１２】
【図１】情報処理装置のハードウェア構成を示す図である。
【図２】外部記憶装置内におけるデータ構造を示す図である。
【図３】外部記憶装置に対してアクセスする機能の構成を示す図である。
【図４】デバイスドライバ３０３が外部記憶装置の管理領域の境界を記憶するフローチャートを示す図である。
【図５】第一の実施形態において、デバイスドライバ３０３が、管理領域の境界をまたぐアクセスが要求されたか否かを判定するフローを示す図である。
【図６】デバイスドライバ３０３に対して、外部記憶装置３０４をフォーマットしていることを通知するフローを示す図である。
【図７】第二の実施形態において、デバイスドライバ３０３が、管理領域の境界をまたぐアクセスが要求されたか否かを判定するフローを示す図である。
【図８】デバイスドライバ３０３が、ファイルシステムの保持するファイル管理方式で規定されている境界が正しいか否かを判定するフローを示す図である。
【図９】デバイスドライバ３０３が、推測される不具合の原因を通知するフローチャートである。
【発明を実施するための形態】
【００１３】
（第一の実施形態）
図１は、本実施形態における情報処理装置１００のハードウェア構成を示す図である。
【００１４】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１は、バス１０５を介してＲＯＭ１０２、ＲＡＭ１０３、外部記憶装置３０４に記録されている各種コンピュータプログラムを実行するプロセッサーである。ＣＰＵは、各種コンピュータプログラムを実行することによって、以下の構成を制御する。
【００１５】
ＲＯＭ１０２（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）は、読み出し専用の記憶媒体であり、各種コンピュータプログラムやデータが格納されている。ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３は、揮発性で高速なアクセスが可能な記憶媒体であり、各種コンピュータプログラムやデータが一時的に格納される。外部記憶装置３０４は、不揮発性で記憶容量が大きい記憶媒体である。外部記憶装置３０４は、ハードディスクドライブやＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｉｓｋ）などから構成され、各種コンピュータプログラムやデータを長期的に格納するために用いられる。バス１０５は、上記各構成をつなぎ、データの送受信を可能とする伝送経路である。以上が、本実施形態における情報処理装置１００のハードウェア構成である。
【００１６】
次に、外部記憶装置３０４内に記憶されるデータや各種コンピュータプログラムのデータ構造について説明する。
【００１７】
図２は、本実施形態における外部記憶装置３０４内のデータ構造を示す図である。図２の左部に示す通り、外部記憶装置３０４は複数のパーティションに分割して管理することが可能である。各パーティションの領域は、それぞれ異なる外部記憶装置として扱うことが可能である。しかし、外部記憶装置３０４は、複数のパーティションを用いず、単一のパーティションで管理しても良く、本実施形態はパーティションの数に依存したものではない。一方、図２の右部に示す通り、各パーティション内部は、ファイル管理方式に対応した複数のファイル管理領域に分けて管理されている。図２は、ファイル管理方式としては、一般的なＦＡＴファイルシステムによるファイル管理領域を示したものである。
【００１８】
図２のＲｅｓｅｒｖｅｄ領域の先頭アドレスにはＢＰＢ（ＢＩＯＳ  Ｐａｒａｍｅｔｅｒ  Ｂｌｏｃｋ）と呼ばれるＦＡＴファイルシステムの構成を管理する領域がある。また、ＤＡＴＡ領域にはクラスタという単位で実データを記録するほか、ファイルまたはディレクトリに関する情報を含むディレクトリエントリが記録される。ＦＡＴ領域には、実データの次のクラスタ番号を表すＦＡＴが記録され、ファイルシステムはＦＡＴを読むことでクラスタの連結状況を知ることができる。ＲＯＯＴ領域にはルートディレクトリを格納する。
【００１９】
図３は、本実施形態における情報処理装置１００が外部装置３０４に対してアクセスする際の機能の構成を示す図である。
【００２０】
アプリケーション３０１は、情報処理装置１００のオペレーティングシステム上で動作するアプリケーションである。アプリケーション３０１はファイル単位での読み書きなどのアクセス要求をファイルシステム３０２に対して行う。
【００２１】
ファイルシステム３０２は、オペレーティングシステム内の機能の一部として動作し、ファイルアクセスなどを管理するシステムである。ファイルシステム３０２は、アプリケーション３０１からのアクセス要求を受けて、デバイスドライバ３０３に対して記録媒体のアドレス単位でアクセス要求を送信するように送信制御される。アクセス要求は、読み込みまたは書き込みの要求になるが、いずれにしても、アクセス先アドレスの先頭とアクセスのサイズが要求に含まれている。
【００２２】
デバイスドライバ３０３は、あらかじめオペレーティングシステムの機能の一部として組み込まれているか、情報処理装置１００内にインストールされたソフトウェアであり、外部記憶装置３０４へのアクセスを直接的に管理する。デバイスドライバ３０３は、ファイルシステム３０２からのアクセス要求を受けて、アクセス要求に含まれるアドレスの先頭からサイズ分のアクセスを外部装置３０４に対して行う。尚、アプリケーション３０１、ファイルシステム３０２、デバイスドライバ３０３は、いずれも各種コンピュータプログラム（ソフトウェア）の一部であり、ＣＰＵ１０１により実行される。
【００２３】
本実施形態は、アプリケーション３０１、ファイルシステム３０２の不具合などにより、外部記憶装置３０４に対して管理領域をまたぐアクセスの発生防止を目的としている。そこで、本実施形態では、デバイスドライバ３０３が、管理領域をまたぐアクセスが発生しているか否かを判定し、アクセス管理を適切に行う。
【００２４】
（前処理）
次に、デバイスドライバ３０３によって管理領域をまたぐアクセスが発生しているか否かを判定するため、デバイスドライバ３０３に管理領域の境界を記憶させる処理について説明する。管理領域の境界は、ファイル管理方式ごとに規定されている管理領域の境界アドレスとパーティションごとの境界アドレスとによって示される。
【００２５】
図４は、本実施形態におけるデバイスドライバ３０３が、管理領域の境界を記憶するフローを示した図である。尚、以下の各処理は、デバイスドライバ３０３が情報処理装置１００にインストールされた際に自動的に行っても良いし、ユーザからの指示操作に基づき適切なタイミングで行っても良い。また、あらかじめ設定された時間ごとに行っても良いし、外部記憶装置３０４に初めてアクセスする際に行っても良い。
【００２６】
（ステップＳ４０１）ステップＳ４０１では、デバイスドライバ３０３は、ファイル管理方式で規定されている領域の境界を記憶するため、フォーマットパラメータをアプリケーション３０１から取得する。尚、ファイル管理方式がＦＡＴファイルシステムの場合は、外部記憶装置３０４のＢＰＢ領域にフォーマットパラメータが記録してあるため、ここから読み込んでもよい。（ステップＳ４０２）ステップＳ４０２では、デバイスドライバ３０３は、フォーマットパラメータを取得したら取得した値から境界アドレスを算出する。（ステップＳ４０３）ステップＳ４０３では、デバイスドライバ３０３は、外部記憶装置３０４のブートセクタから各パーティションの境界アドレスを読み込んで取得する。（ステップＳ４０４）ステップＳ４０４では、デバイスドライバ３０３は、ステップＳ４０２とステップＳ４０３で取得した境界アドレスの合計個数ＮをＲＡＭ１０３に記憶する。（ステップＳ４０５）ステップＳ４０５では、デバイスドライバ３０３は、ステップＳ４０２とステップＳ４０３で取得した境界アドレスＮ個をＲＡＭ１０３の静的変数として確保した配列Ｂｏｕｎｄａｒｙ［］に先頭の要素から順に記憶する。
【００２７】
以上の処理によって、デバイスドライバ３０３は、管理領域の境界をＢｏｕｎｄａｒｙ［］に記憶することが出来る。よって、管理領域の境界判定は、Ｂｏｕｎｄａｒｙ［］を参照することによって行われる。
【００２８】
（判定処理）
次に、デバイスドライバ３０３がアクセス要求を受け取った際に、当該アクセス要求が
管理領域をまたぐものであるか否かを判定する処理について説明する。図５は、本実施形態において、デバイスドライバ３０３が、管理領域の境界をまたぐアクセスが要求されたか否かを判定するフローを示す図である。
【００２９】
（ステップＳ５０１）ステップＳ５０１では、デバイスドライバ３０３は、アクセス要求がまたいでいるか否かの判定に必要な値を取得する。具体的には、アクセス要求に含まれているアクセス先アドレスの先頭Ｈｅａｄと終端Ｔａｉｌを取得する。尚、Ｔａｉｌはアクセス先アドレスの先頭Ｈｅａｄにアクセスのサイズを足し合わせることで得られる。そして、管理領域の境界を示す情報として、ＲＡＭ１０３に記憶してある境界アドレスを保持する配列Ｂｏｕｎｄａｒｙ［］と、境界アドレスの個数Ｎを取得する。
【００３０】
（ステップＳ５０２）ステップＳ５０２では、デバイスドライバ３０３は、配列Ｂｏｕｎｄａｒｙ［］のインデクスｉを用意し、０に初期化する。
【００３１】
（ステップＳ５０３）ステップＳ５０３では、デバイスドライバ３０３は、アクセス要求が境界アドレスをまたいでいるか否か判定を行う。アクセス先アドレスの先頭Ｈｅａｄが境界アドレスＢｏｕｎｄａｒｙ［ｉ］より小さく、かつ、終端Ｔａｉｌが境界アドレスＢｏｕｎｄａｒｙ［ｉ］より大きい場合は境界アドレスをまたいだと判定する。そうでない場合はまたいでいないと判定する。境界アドレスをまたいだと判定された場合、ステップＳ５０４に処理を進める。境界アドレスをまたいだと判定されなかった場合、ステップＳ５０５に処理を進める。
【００３２】
（ステップＳ５０４）ステップＳ５０４では、デバイスドライバ３０３は、アクセス要求による境界アドレスをまたいだことが検出されたとして、検出結果の通知を行う。検出結果を通知する方法は、例えばファイルシステムに戻り値としてエラーを通知する方法がある。その他の方法としては、デバイスドライバ３０３にコールバック関数がユーザにより設定されることで、エラーをコールバック関数で通知する方法がある。通知後は、オペレーティングシステムの設定などに基づき、当該アクセス要求を拒絶する処理を行っても良い。
【００３３】
（ステップＳ５０５）ステップＳ５０５では、デバイスドライバ３０３は、配列Ｂｏｕｎｄａｒｙ［］に保持してある境界アドレスＮ個をすべて判定し終えたかを判定する。すべて判定し終えていないと判定された場合、ステップＳ５０６に処理を進める。すべて判定し終えたと判定された場合、ステップＳ５０７に処理を進める。
【００３４】
（ステップＳ５０６）ステップＳ５０６では、デバイスドライバ３０３は、配列Ｂｏｕｎｄａｒｙ［］に保持してある次の境界アドレスをまたいでいないかを判定するためにインデクスｉをインクリメントする。その後、ステップＳ５０３に処理を戻す。
【００３５】
（ステップＳ５０７）ステップＳ５０７では、デバイスドライバ３０３は、管理領域の境界をまたぐアクセス要求がなされていないとみなし、外部記憶装置３０４に対してアクセス先アドレスの先頭から指定サイズ分のアクセスを行う。以上が本実施形態における処理である。本実施形態の処理によれば、外部記憶装置３０４へのアクセス要求が管理領域の境界をまたぐものでないか否かを適切に判定し、アクセス要求の管理を行うことが出来る。
【００３６】
（第二の実施形態）
第一の実施形態では、デバイスドライバ３０３がファイルシステム３０２から受け取った全てのアクセス要求に対して、境界アドレスをまたいでいるか否かを判定した。本実施形態では、デバイスドライバ３０３がアクセス要求を受け取った際に、次の２つの条件に該当する場合は、当該アクセス要求が管理領域の境界をまたぐものであるか否かの判定を行わない。
【００３７】
１つ目の条件は、アクセス要求に含まれるアクセスのサイズが１セクタの場合である。２つ目の条件は、外部記憶装置３０４をフォーマットする場合である。いずれの場合も、アクセス要求が管理領域の境界をまたぐものであるか否かの判定は不要である。よって、本実施形態によれば、判定が必要な場合にだけ判定することが可能となり、システム全体のパフォーマンスを落とすことなく、適切なアクセス要求の管理が可能となる。尚、以下の本実施形態の説明において、第一の実施形態と同様の部分については、説明を省略するか簡略化する。
【００３８】
（前処理）
デバイスドライバ３０３が境界アドレスを記憶する前処理は第一の実施形態の（前処理）と同じである。よって、ここでは説明を省略する。
【００３９】
（フォーマットフラグの確保）
上記２つ目の条件に該当するか否かを判定するためには、デバイスドライバ３０３に対してフォーマット中であることを通知するための仕組みが必要になる。そのための仕組みとして、アプリケーション３０１またはファイルシステム３０２は、コンピュータプログラム起動時にフォーマットフラグを静的変数としてＲＡＭ１０３に確保する。
【００４０】
（フォーマット通知処理）
上記フォーマットフラグをＲＡＭ１０３上に確保した後に、アプリケーション３０１またはファイルシステム３０２がフォーマットする際、デバイスドライバ３０３に対してフォーマットしていることを通知する処理について、図６のフロー図を用いて説明する。
【００４１】
（ステップＳ６０１）ステップＳ６０１では、アプリケーション３０１またはファイルシステム３０２はフォーマットを開始する際には、フォーマットフラグをＯＮにする。例えば、フォーマットフラグの１がフォーマットフラグのＯＮを示す場合は、フォーマットフラグの値を１に変更する。ただし、フォーマットフラグのＯＮを示す値として、１以外の値を用いても良い。（ステップＳ６０２）ステップＳ６０２では、アプリケーション３０１またはファイルシステム３０２はフォーマットを外部記憶装置３０４に対して行う。（ステップＳ６０３）ステップＳ６０３では、フォーマットを終了したらフォーマットフラグをＯＦＦにする。例えば、フォーマットフラグの０がフォーマットフラグのＯＦＦを示す場合は、フォーマットフラグの値を０に変更する。以上が、本実施形態において、判定処理の前にあらかじめ行っておく処理である。
【００４２】
（判定処理）
デバイスドライバ３０３による、フォーマット時またはアクセスのサイズが１セクタの場合を除いて、アクセス要求が境界アドレスをまたいでいないか否かを判定する処理について図７のフローチャートを用いて説明する。
【００４３】
（ステップＳ７０１）ステップＳ７０１では、デバイスドライバ３０３は、アクセス要求に含まれるアクセスのサイズを取得する。（ステップＳ７０２）ステップＳ７０２では、デバイスドライバ３０３は、アクセスのサイズが１セクタであるか否かを判定する。アクセスのサイズが１セクタであると判定された場合、ステップＳ７０６に処理を進める。１セクタでないと判定された場合、ステップＳ７０３に処理を進める。（ステップＳ７０３）ステップＳ７０３では、デバイスドライバ３０３は、フォーマット時であるか否かを判定するためにＲＡＭ１０３にあるフォーマットフラグを参照する。（ステップＳ７０４）ステップＳ７０４では、デバイスドライバ３０３は、参照したフォーマットフラグがＯＮであるか否かを判定する。フォーマットフラグがＯＮであると判定された場合、ステップＳ７０６に処理を進める。フォーマットフラグがＯＦＦであると判定された場合、ステップＳ７０５に処理を進める。（ステップＳ７０５）ステップＳ７０５では、デバイスドライバ３０３は、図５に示したフローチャートの処理を行う。すなわち、アクセス要求が管理境界をまたぐものであるか否かを判定するための処理である。（ステップＳ７０６）ステップＳ７０６では、デバイスドライバ３０３は、それより後の判定処理をスキップして外部記憶装置３０４に対してアクセス先アドレスの先頭から指定サイズ分のアクセスを行う。以上が、本実施形態における処理である。
【００４４】
（第三の実施形態）
本実施形態では、デバイスドライバ３０３は、最初のアクセス要求を受け取る前に、ファイルシステムの保持するファイル管理方式で規定されている境界が正しいか否かを判定する。次に、受け取ったアクセス要求が境界アドレスをまたいでいると判定された場合、ファイルシステムが持つ境界アドレスが書き換えられていないか否かをチェックし、推測される不具合の原因を通知する。尚、以下の説明では、第一の実施形態および第二の実施形態と同じである部分は、省略するか簡略化する。
【００４５】
（第一の判定処理）
以下の処理は、ファイルシステム３０２が外部記憶装置３０４をマウントしてから最初のアクセス要求を受け取るまでの間に行われる判定処理である。判定処理は、デバイスドライバ３０３がファイルシステム３０２の記憶する境界アドレスが正しいか否かを判定するものである。以下、図８のフロー図に沿って説明する。
【００４６】
（ステップＳ８０１）ステップＳ８０１では、デバイスドライバ３０３は、アプリケーション３０１からフォーマットパラメータを取得し、ファイル管理方式で規定されている境界アドレスを計算する。このとき境界アドレスの個数をＮ個とする。（ステップＳ８０２）ステップＳ８０２では、デバイスドライバ３０３は、ＲＡＭ１０３に静的変数として確保した配列Ｂｏｕｎｄａｒｙ［］に対し、ステップＳ８０１で取得した境界アドレスを値の小さい方から順に格納する。（ステップＳ８０３）ステップＳ８０３では、デバイスドライバ３０３は、ファイルシステム３０２からファイル管理方式で規定されている境界アドレスを取得する。（ステップＳ８０４）ステップＳ８０４では、デバイスドライバ３０３は、ＲＡＭ１０３に静的変数として確保した配列Ｆ＿Ｂｏｕｎｄａｒｙ［］に対し、ステップＳ８０３で取得した境界アドレスを値の小さい方から順に格納する。（ステップＳ８０５）ステップＳ８０５では、デバイスドライバ３０３は、配列Ｂｏｕｎｄａｒｙ［］と配列Ｆ＿Ｂｏｕｎｄａｒｙ［］の値を先頭要素から順番に比較し判定するためにインデクスｉをＲＡＭ１０３に用意し、ｉを０に初期化する。（ステップＳ８０６）デバイスドライバ３０３は、デバイスドライバが算出した境界アドレスＢｏｕｎｄａｒｙ［ｉ］とファイルシステムが保持する境界アドレスＦ＿Ｂｏｕｎｄａｒｙ［ｉ］の値を比較する。値が同じであれば、ステップＳ８０７に処理を進める。値が異なっている場合、ステップＳ８０９に処理を進める。（ステップＳ８０７）ステップＳ８０７では、デバイスドライバ３０３は、保持してある境界アドレスＮ個をすべて判定し終えたかを判定する。判定し終えたと判定された場合、処理を終了させる。判定し終えたと判定されなかった場合、ステップＳ８０８に処理を進める。（ステップＳ８０８）ステップＳ８０８では、次の境界アドレスを比較するためにインデクスｉをインクリメントする。その後、ステップＳ８０６に処理を戻す。（ステップＳ８０９）ステップＳ８０９では、デバイスドライバ３０３は、ファイルシステムが保持する境界アドレスが正しくないためとみなし、その旨を通知する。
【００４７】
（第二の判定処理）
デバイスドライバ３０３が、アクセス要求が境界アドレスをまたいでいるか否かを判定する処理は第一の実施形態の（判定処理）と同じである。
【００４８】
（通知処理）
図９は、デバイスドライバ３０３が、アプリケーション３０１またはファイルシステム３０２の推測される不具合の原因を通知する処理のフローを示す図である。
【００４９】
（ステップＳ９０１）ステップＳ９０１では、デバイスドライバ３０３は、図５のステップＳ５０４で境界またぎが検出された時の配列Ｂｏｕｎｄａｒｙ［］のインデクスｉを取得する。（ステップＳ９０２）ステップＳ９０２では、デバイスドライバ３０３は、本実施形態の＜第一の判定処理＞で記憶した、ファイルシステムの境界アドレスを保持する配列Ｆ＿ｂｏｕｎｄａｒｙ［ｉ］と配列Ｂｏｕｎｄａｒｙ［ｉ］を比較する。値が同じである場合は、ステップＳ９０３に処理を進める。値が同じでない場合は、ステップＳ９０４に処理を進める。
【００５０】
（ステップＳ９０３）ステップＳ９０３では、デバイスドライバ３０３は、境界アドレスをまたいだ原因がファイルシステム３０２にあることを、アプリケーション３０１またはファイルシステム３０２に通知する。推測される原因としては、例えば、ファイルシステム３０２内のアクセス先アドレスを指定するプログラムに不具合がある、などがある。
【００５１】
（ステップＳ９０４）ステップＳ９０４では、デバイスドライバ３０３は、境界アドレスをまたいだ原因が、ファイルシステム３０２が保持する境界アドレスの領域が書き換えられたことにあると見なす。そして、ユーザまたはアプリケーション３０１またはファイルシステム３０２に原因を通知する。通知方法としては、例えばＲＡＭ上に確保しておいた変数にエラー番号を格納する方法がある。また他の方法として、デバイスドライバにコールバック関数を設定しておき、アクセス要求をエラー検出したら原因をコールバックする方法がある。
【００５２】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５３】
Ｓ５０３  アクセス要求が境界アドレスをまたいでいるか否か判定
Ｓ５０４  検出結果の通知
Ｓ５０７  外部記憶装置３０４へのアクセス
【図１】
2016110514.tif 000003
【図２】
2016110514.tif 000004
【図３】
2016110514.tif 000005
【図４】
2016110514.tif 000006
【図５】
2016110514.tif 000007
【図６】
2016110514.tif 000008
【図７】
2016110514.tif 000009
【図８】
2016110514.tif 000010
【図９】
2016110514.tif 000011