(57)【要約】【課題】記憶デバイスに対するＩ／Ｏ処理の数を低減する。【解決手段】Ｉ／Ｏ処理制御装置は、未処理の複数のＩ／Ｏ要求の中で、同一のＩ／Ｏ処理の種類であって、不連続な２以上の領域をＩ／Ｏ先とする２以上のＩ／Ｏ要求を、前記不連続な２以上の領域を包含する１つの連続する領域を対象とする１つのＩ／Ｏ要求に統合し、統合されたＩ／Ｏ要求に基づいて、記憶デバイスに対するＩ／Ｏ処理を実行する。【選択図】図１
2015060486.tif 000002
【特許請求の範囲】
【請求項１】
記憶デバイスに対するＩ／Ｏ処理を制御するＩ／Ｏ処理制御装置であって、
前記記憶デバイスに対する未処理の複数のＩ／Ｏ要求を記憶する記憶部と、
前記複数のＩ／Ｏ要求の中で、同一のＩ／Ｏ処理の種類であって、不連続な２以上の領域をＩ／Ｏ先とする２以上のＩ／Ｏ要求を、前記不連続な２以上の領域を包含する１つの連続する領域をＩ／Ｏ先とする１つのＩ／Ｏ要求に統合するＩ／Ｏスケジューラ部と、
統合されたＩ／Ｏ要求に基づいて、前記記憶デバイスに対してＩ／Ｏ処理を実行するデバイスドライバ部と
を有するＩ／Ｏ処理制御装置。
【請求項２】
前記２以上のＩ／Ｏ要求は、２以上の読出し要求である、
請求項１に記載のＩ／Ｏ処理制御装置。
【請求項３】
前記２以上の読出し要求は、読出し処理を別々に実行するよりも１つの読出し処理に統合した方が処理時間が短くなると推定される２以上の読出し要求である、
請求項２に記載のＩ／Ｏ処理制御装置。
【請求項４】
前記記憶部は、実行した読出し処理が対象とする領域の長さを特定可能な情報と、前記読出し処理の実行に要した時間を特定可能な情報とを対応付けたＩ／Ｏ情報を更に記憶し、
前記Ｉ／Ｏスケジューラ部は、前記Ｉ／Ｏ情報に基づいて、前記複数のＩ／Ｏ要求のうちのいずれかＭ個（Ｍは２以上の整数）の読出し要求を別々の読出し処理として実行するのに要すると推定される第１の処理時間と、そのＭ個の読出し要求を１つの読出し要求に統合して読出し処理を実行するのに要すると推定される第２の処理時間とを推定し、
前記２以上の読出し要求についての第２の処理時間は、前記２以上の読出し要求についての第１の処理時間より短い、
請求項３に記載のＩ／Ｏ処理制御装置。
【請求項５】
前記不連続の２以上の領域における各々の領域間隔は、所定の大きさ以下である、
請求項２に記載のＩ／Ｏ処理制御装置。
【請求項６】
前記連続する領域中の、前記不連続の２以上の領域以外の領域である追加領域から読み出したデータと、前記追加領域を特定する情報とを対応付けて記憶部に記憶するＩ／Ｏ終了処理部を更に有する、
請求項１に記載のＩ／Ｏ処理制御装置。
【請求項７】
前記記憶部は、実行した読出し処理により読み出されたデータの少なくとも一部を記憶し、
前記２以上のＩ／Ｏ要求は、それぞれ書込み要求であり、
前記不連続な２以上の領域における領域間の領域に格納されているデータが、前記記憶部に記憶されている、
請求項１に記載のＩ／Ｏ処理制御装置。
【請求項８】
前記Ｉ／Ｏスケジューラ部は、前記記憶デバイスに対する新たなＩ／Ｏ要求である第１のＩ／Ｏ要求のＩ／Ｏ先領域が、前記記憶部内のいずれかのＩ／Ｏ要求である第２のＩ／Ｏ要求のＩ／Ｏ先領域と連続する場合に、前記第１のＩ／Ｏ要求と前記第２のＩ／Ｏ要求を１つのＩ／Ｏ要求に統合する、
請求項１に記載のＩ／Ｏ処理制御装置。
【請求項９】
未処理の複数のＩ／Ｏ要求の中で、同一のＩ／Ｏ処理の種類であって、不連続な２以上の領域をＩ／Ｏ先とする２以上のＩ／Ｏ要求を、前記不連続な２以上の領域を包含する１つの連続する領域をＩ／Ｏ先とする１つのＩ／Ｏ要求に統合し、
統合されたＩ／Ｏ要求に基づいて、前記記憶デバイスに対してＩ／Ｏ処理を実行する、
Ｉ／Ｏ処理制御方法。
【請求項１０】
前記２以上のＩ／Ｏ要求は、２以上の読出し要求である、
請求項９に記載のＩ／Ｏ処理制御方法。
【請求項１１】
前記２以上の読出し要求は、読出し処理を別々に実行するよりも１つの読出し処理に統合した方が処理時間が短くなると推定される２以上の読出し要求である、
請求項１０に記載のＩ／Ｏ処理制御方法。
【請求項１２】
実行した読出し処理が対象とする領域の長さを特定可能な情報と、前記読出し処理の実行に要した時間を特定可能な情報とを対応付けたＩ／Ｏ情報に基づいて、前記複数のＩ／Ｏ要求のうちのいずれかＭ個（Ｍは２以上の整数）の読出し要求を別々の読出し処理として実行するのに要すると推定される第１の処理時間と、そのＭ個の読出し要求を１つの読出し要求に統合して読出し処理を実行するのに要すると推定される第２の処理時間とを推定し、
前記２以上の読出し要求についての第２の処理時間は、前記２以上の読出し要求についての第１の処理時間より短い、
請求項１１に記載のＩ／Ｏ処理制御方法。
【請求項１３】
前記不連続の２以上の領域における各々の領域間隔は、所定の大きさ以下である、
請求項１０に記載のＩ／Ｏ処理制御方法。
【請求項１４】
前記連続する領域中の、前記不連続の２以上の領域以外の領域である追加領域から読み出したデータと、前記追加領域を特定する情報とを対応付ける、
請求項９に記載のＩ／Ｏ処理制御方法。
【請求項１５】
前記２以上のＩ／Ｏ要求は、それぞれ書込み要求であり、
前記不連続な２以上の領域における領域間の領域に格納されているデータが、前記記憶デバイスとは別の記憶領域に記憶されている、
請求項９に記載のＩ／Ｏ処理制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＩ／Ｏ要求を統合する技術に関する。
【背景技術】
【０００２】
Ｉ／Ｏ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）処理の１つとして、読出し処理がある。読出し処理では、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの記憶デバイスからデータを高速に取得するために、記憶デバイス内で論理的又は物理的に連続した複数のデータを取得するとき、アプリケーション、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、デバイスドライバ、記憶デバイスによって複数の読出し要求を統合して１つの読出し要求を送信するようにしている。これにより、記憶デバイスでは、複数回のデータ読出し処理を１回に削減でき、高速なデータ取得を可能としている。
【０００３】
一方、近年の高速な計算処理技術の進歩は目覚ましく、マルチコア技術や非同期Ｉ／Ｏ技術の利用により記憶デバイスで処理可能なＩ／Ｏ数以上のＩ／Ｏ処理要求を計算機システムが発行する事例が発生してきている。この結果、計算機システムは、記憶デバイスのＩ／Ｏ処理待ちとなり、計算処理性能が低下する問題が発生している。
【０００４】
この問題に対する技術として、非特許文献１には、記憶デバイスの連続するセクタ領域に対する複数のＩ／Ｏ処理を１つのＩ／Ｏ処理として実行する技術が開示されている。
【０００５】
また、近年では、ＨＤＤに代わる高速な記憶デバイスとしてフラッシュメモリを有するＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの記憶デバイスが注目されている。一般に、フラッシュメモリは、データを上書きできないという特徴がある。
【０００６】
このようなフラッシュメモリを有する記憶デバイスに対するデータの書込み手法として、特許文献１には、新データ（更新されたデータ）を記憶デバイスに書き込む際に、旧データ（新データに対応する更新前のデータ）を含んだ所定単位のデータを読み込み、所定単位のデータにおける旧データを新データに置換し、新データを含んだ所定単位のデータを書き込む技術が開示されている。この技術は、リードモディファイライトと呼ばれる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第５４９９３３７号明細書
【非特許文献】
【０００８】
【非特許文献１】ＤＡＮＩＥＬ  Ｐ．ＢＯＶＥＴ、ＭＡＲＣＯ  ＣＥＳＡＴＩ著、詳細ＬＩＮＵＸカーネル、Ｐ６２１
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記した非特許文献１に開示の技術では、連続する複数のセクタ領域にそれぞれ対応した複数の読出し要求を１つの読出し要求に統合することが可能であるため、読出し処理数を低減することができる。しかしながら、複数の読出し要求が非連続の複数のセクタ領域に対する複数の読出し要求の場合には、複数の読出し要求を統合できず、読出し処理数を低減することができない。
【００１０】
例えば、少ないコアを有する計算機システムでは、多くのＩ／Ｏ処理が発生しないこと、及び、アプリケーションやユーザが意図的に大きなセクタ領域に対するＩ／Ｏ処理を発行するため、Ｉ／Ｏ処理の増加が計算機システムの性能低下の原因になりにくい。しかしながら、マルチコア技術や非同期Ｉ／Ｏ技術により、計算機システムで実行されるＩ／Ｏ処理は増加し、かつ、アプリケーションやユーザがＩ／Ｏ処理を把握しきれず、計算機システムの性能低下が頻繁に発生する虞がある。
【００１１】
また、フラッシュメモリを有する記憶デバイスでは、データを更新する際に、書込みが遅くなる問題がある。例えば、特許文献１に開示の技術では、データの更新処理においては、リードモディファイライトに従う読み出しが発生するため、記憶デバイスの性能低下を伴う。
【００１２】
本発明の目的は、記憶デバイスに対するＩ／Ｏ処理の数を低減することにある。
【課題を解決するための手段】
【００１３】
Ｉ／Ｏ処理制御装置は、未処理の複数のＩ／Ｏ要求の中で、同一のＩ／Ｏ処理の種類であって、不連続な２以上の領域をＩ／Ｏ先とする２以上のＩ／Ｏ要求を、前記不連続な２以上の領域を包含する１つの連続する領域を対象とする１つのＩ／Ｏ要求に統合し、統合されたＩ／Ｏ要求に基づいて、記憶デバイスに対するＩ／Ｏ処理を実行する。
【発明の効果】
【００１４】
記憶デバイスに対するＩ／Ｏ処理の数を低減することができる。
【図面の簡単な説明】
【００１５】
【図１】計算機システムの機能ブロック図である。
【図２】データ部の構成の一例を示す図である。
【図３】セグメント領域を説明する図である。
【図４】記憶デバイスの構成を説明する図である。
【図５】セクタ領域を説明する図である。
【図６】Ｉ／Ｏセクタテーブルの一例の構成図である。
【図７】Ｉ／Ｏセグメントテーブルの一例の構成図である。
【図８】Ｉ／Ｏ要求テーブルの一例の構成図である。
【図９】Ｉ／Ｏ環境設定テーブルの一例の構成図である。
【図１０】Ｉ／Ｏ要求キューテーブルの一例の構成図である。
【図１１】Ｉ／Ｏ情報リストの一例の構成図である。
【図１２】Ｉ／Ｏ要求リストの一例の構成図である。
【図１３】Ｉ／Ｏセクタ参照テーブルの一例の構成図である。
【図１４】Ｉ／Ｏセクタ再構築テーブルの一例の構成図である。
【図１５】汎用ブロック部の機能ブロック図である。
【図１６】Ｉ／Ｏスケジューラ部の機能ブロック図である。
【図１７】デバイスドライバ部の機能ブロック図である。
【図１８】Ｉ／Ｏ終了処理部の機能ブロック図である。
【図１９】Ｉ／Ｏ要求生成判定部の処理のフローチャートである。
【図２０】Ｉ／Ｏ要求統合追加判定部の処理のフローチャートである。
【図２１】Ｉ／Ｏ要求統合追加判定部の判定処理のフローチャートである。
【図２２】Ｉ／Ｏセクタ終了判定部の処理のフローチャートである。
【図２３】計算機システムのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１６】
図面を参照して、実施形態に係るＩ／Ｏ処理制御装置の一例である計算機システムを説明する。
【００１７】
なお、以下の説明では「ａａａテーブル」等の表現にて本発明の情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」等について「ａａａ情報」と呼ぶことがある。
【００１８】
また、以下の説明では、プログラムを実行することにより構成される機能部を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェースを用いながら行うため、処理の主語がプロセッサとされてもよい。機能部を主語として説明された処理は、プロセッサを含む装置が行う処理としてもよい。また、プロセッサが、処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースから装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ、又は、計算機が読み取り可能な記憶メディアであってもよい。
【００１９】
図１は、計算機システムの機能ブロック図である。
【００２０】
計算機システム１０００では、記憶部１７００が、記憶デバイス１８００に対する未処理の複数のＩ／Ｏ要求を記憶する。そして、Ｉ／Ｏスケジューラ部４００が、それら複数のＩ／Ｏ要求の中で、同一のＩ／Ｏ処理の種類であって、不連続な複数の領域をＩ／Ｏ先とする複数のＩ／Ｏ要求を、その不連続な複数の領域を包含する１つの連続する領域をＩ／Ｏ先とする１つのＩ／Ｏ要求に統合する。その後、デバイスドライバ部１５００が、統合されたＩ／Ｏ要求に基づいて、記憶デバイス１８００に対してＩ／Ｏ処理を実行する。これにより、記憶デバイス１８００に対するＩ／Ｏ要求数を低減することができる。これは、例えば、多数のＩ／Ｏ要求が生成される環境では特に有用である。
【００２１】
具体的には、例えば、計算機システム１０００は、Ｉ／Ｏ環境設定部１１００、アプリケーション部１２００、汎用ブロック部１３００、Ｉ／Ｏスケジューラ部１４００、デバイスドライバ部１５００、Ｉ／Ｏ終了処理部１６００、記憶部１７００、及び記憶デバイス１８００を有する。なお、Ｉ／Ｏスケジューラ部１４００、デバイスドライバ部１５００、及びＩ／Ｏ終了処理部１６００は、プロセッサがプログラムを実行することにより構成するようにしてもよく、また、ハードウェアで構成するようにしてもよい。具体的には、例えば、図２３に示すように、計算機システム１０００は、メモリ２３０１、ハードウェア回路群２３０３及びそれらに接続されたプロセッサ２３０２を有してよい。図１に示した機能部のうち、アプリケーション部１２００、汎用部ブロック部１３００及びＩ／Ｏ環境設定部１１００が、それぞれコンピュータプログラムであって、プロセッサ２３０２に実行されてよい。図１に示した機能部のうち、アプリケーション部１２００、汎用部ブロック部１３００及びＩ／Ｏ環境設定部１１００以外の機能部が、それぞれハードウェア回路であって、例えばハードウェア回路群２３０３に含まれてよい。ハードウェア回路群２３０３は、例えば、オペレーティングシステム（ＯＳ）より下位のレイヤのドライバ回路であってよい。
【００２２】
ユーザ２０００は、矢印２００１に示すように、図示しない入力デバイスを使用して、アプリケーション部１２００に計算処理命令を指示することができる。また、ユーザ２０００は、矢印２００２に示すように、図示しない入力デバイスを使用して、Ｉ／Ｏ環境設定部１１００に対してＩ／Ｏ環境の設定変更を指示することができる。
【００２３】
記憶部１７００は、主記憶部及び／又は補助記憶部等により構成される。例えば、主記憶部は、ＤＲＡＭにより構成され、補助記憶装置は、不揮発性メモリにより構成される。記憶部１７００は、各種データを記憶するデータ部３０００を有する。データ部３０００には、主記憶部の記憶領域である主記憶部領域１７１０及び／又は補助記憶部の記憶領域である補助記憶部領域１７２０が割り当てられる。データ部３０００が記憶するデータについては、後述する。
【００２４】
記憶デバイス１８００は、データを記憶するデバイスであり、例えば、ＨＤＤであってもよいし、ＳＳＤのようなフラッシュメモリデバイスであってもよい。
【００２５】
Ｉ／Ｏ環境設定部１１００は、矢印１２０３に示すように、アプリケーション部１２００からＩ／Ｏ環境の設定変更の命令を受ける。また、Ｉ／Ｏ環境設定部１１００は、矢印２００２に示すように、ユーザ２０００からＩ／Ｏ環境の設定変更の命令を受ける。Ｉ／Ｏ環境設定部１１００は、Ｉ／Ｏ環境の設定変更の命令を受けると、矢印１１０１に示すように、記憶部１７００が保持するデータ部３０００の所定のデータを更新する。
【００２６】
アプリケーション部１２００は、ユーザ２０００の計算処理命令に従って、所定の計算処理を実行する。アプリケーション部１２００は、計算処理において、矢印１２０２に示すように、データ部３０００の所望のデータにアクセスする。また、アプリケーション部１２００は、計算処理において、矢印１２０１に示すように、必要に応じて汎用ブロック部１３００にＩ／Ｏ処理命令を通知する。また、アプリケーション部１２００は、矢印２００１に示すように、ユーザ２０００に計算処理結果を通知する。
【００２７】
汎用ブロック部１３００は、矢印１３０２に示すように、データ部３０００の所望のデータにアクセス可能である。また、汎用ブロック部１３００は、矢印１３０１に示すように、Ｉ／Ｏスケジューラ部１４００にＩ／Ｏ処理命令を通知する。また、汎用ブロック部１３００は、矢印１３０１Ａに示すように、Ｉ／Ｏ終了処理部１６００にＩ／Ｏ処理命令を通知する。
【００２８】
Ｉ／Ｏスケジューラ部１４００は、矢印１４０２に示すように、データ部３０００の所望のデータにアクセス可能である。また、Ｉ／Ｏスケジューラ部１４００は、矢印１４０１に示すように、デバイスドライバ部１５００にＩ／Ｏ処理命令を通知する。
【００２９】
デバイスドライバ部１５００は、矢印１５０２に示すように、データ部３０００の所望のデータにアクセス可能である。また、デバイスドライバ部１５００は、矢印１５０３に示すように、記憶デバイス１８００の所望のデータにアクセス可能である。また、デバイスドライバ部１５００は、Ｉ／Ｏ処理を終了した場合に、矢印１５０１に示すように、Ｉ／Ｏ終了処理部１６００にＩ／Ｏ処理完了を通知する。
【００３０】
Ｉ／Ｏ終了処理部１６００は、矢印１６０２に示すように、データ部３０００の任意のデータにアクセス可能である。また、Ｉ／Ｏ終了処理部１６００は、矢印１６０１に示すように、アプリケーション部１２００にＩ／Ｏ処理完了を通知する。
【００３１】
図２は、データ部３０００の構成の一例を示す図である。
【００３２】
データ部３０００は、Ｉ／Ｏセクタテーブル３１００、Ｉ／Ｏセグメントテーブル３２００、Ｉ／Ｏ要求テーブル３３００、Ｉ／Ｏ環境設定テーブル３４００、Ｉ／Ｏ要求キューテーブル３５００、Ｉ／Ｏ情報リスト３６００、Ｉ／Ｏ要求リスト３７００、Ｉ／Ｏセクタ参照テーブル３８００、Ｉ／Ｏセクタ再構築テーブル３９００、及びセグメント領域４１００を有する。なお、各テーブル等の詳細は後述する。
【００３３】
図３は、セグメント領域４１００を説明する図である。
【００３４】
セグメント領域４１００は、アプリケーション部１２００が利用するデータをデータ部３０００で管理する管理単位であるセグメント（４１１０、４１１１等）を記憶する領域である。図３においては、発行対象のＩ／Ｏ要求が対象とするセグメント中の領域をＩ／Ｏ発行データ部（４１５０、４１５１等）とし、それ以外の領域をＩ／Ｏ未発行データ部（４１６０、４１６１、４１６２、４１６３等）としている。
【００３５】
例えば、セグメント４１１０のＩ／Ｏ発行データ部４１５０は、セグメント４１１０の先頭アドレス４１２０と、セグメント４１１０の先頭からＩ／Ｏ発行データ部４１５０の先頭までのアドレス長を示すオフセット４１３０と、Ｉ／Ｏ発行データ部４１５０のデータ長４１４０とによって規定される。同様に、セグメント４１１１のＩ／Ｏ発行データ部４１５１の領域は、セグメント４１１１の先頭アドレス４１２１と、セグメント４１１１の先頭からＩ／Ｏ発行データ部４１５１の先頭までのアドレス長を示すオフセット４１３１と、Ｉ／Ｏ発行データ部４１５１のデータ長４１４１とによって規定される。
【００３６】
図４は、記憶デバイス１８００の構成を説明する図である。
【００３７】
記憶デバイス１８００は、記憶デバイス１８００に対するＩ／Ｏ処理におけるデータアクセス単位となる領域であるセクタを管理するセクタ領域４２００を有する。
【００３８】
図５は、セクタ領域４２００を説明する図である。
【００３９】
セクタ領域４２００は、複数のセクタ（４２１０、４２１１等）を格納する。例えば、セクタ４２１０からセクタ４２１１の直前のセクタまでの領域については、領域の先頭セクタ４２２０であるセクタ４２１０のセクタ番号と、その領域の次の先頭セクタ４２２１であるセクタ４２１１のセクタ番号と先頭セクタ４２２０のセクタ番号との差であるセクタ数４２３０とによって規定される。
【００４０】
図６は、Ｉ／Ｏセクタテーブル３１００の一例の構成図である。
【００４１】
Ｉ／Ｏセクタテーブル３１００は、Ｉ／Ｏ処理の対象となる記憶デバイス１８００の領域を管理するためのＩ／Ｏセクタ情報要素（３１５０、３１５１、３１５２等）を有する。Ｉ／Ｏセクタ情報要素の構成は同様なので、ここではＩ／Ｏセクタ情報要素３１５０を例に説明する。Ｉ／Ｏセクタ情報要素３１５０は、項目３１０１と、項目に該当する設定値を格納する設定値３１０２とのフィールドを有する。項目３１０１の列には、先頭セクタ３１１０、セクタ数３１１１、Ｉ／Ｏセグメントテーブルポインタ３１１２、Ｉ／Ｏ要求キューテーブルポインタ３１１３、セグメント数３１１４、Ｒ／Ｒフラグ３１１５、Ｉ／Ｏ終了処理設定３１１６、Ｉ／Ｏ情報リストポインタ３１１７、Ｉ／Ｏセクタ連結ポインタ３１１８、開始時刻３１１９、及び追加Ｉ／Ｏフラグ３１２０が格納されている。設定値３１０２の列には、項目３１０１の各項目に該当する設定値が格納される。
【００４２】
先頭セクタ３１１０は、Ｉ／Ｏ要求の対象とする記憶デバイス１８００の領域（Ｉ／Ｏ対象セクタ領域）の先頭セクタのセクタ番号を示す。セクタ数３１１１は、Ｉ／Ｏ対象セクタ領域のセクタ数を示す。Ｉ／Ｏセグメントテーブルポインタ３１１２は、Ｉ／Ｏ要求の対象となるデータ部３０００の領域を管理するＩ／Ｏセグメントテーブル３２００へのポインタを示す。Ｉ／Ｏ要求キューテーブルポインタ３１１３は、Ｉ／Ｏ要求キューテーブル３５００へのポインタを示す。セグメント数３１１４は、セグメント数を示す。Ｒ／Ｗフラグ３１１５は、Ｉ／Ｏ要求に基づくＩ／Ｏ処理の種別を示すフラグ、例えば、ＲＥＡＤ（Ｒ：読み込み）又はＷＲＩＴＥ（Ｗ：書き込み）のいずれであるかを示すフラグを示す。Ｉ／Ｏ終了処理設定３１１６は、Ｉ／Ｏ終了処理の設定を示す。Ｉ／Ｏ情報リストポインタ３１１７は、Ｉ／Ｏ情報リスト３６００へのポインタを示す。Ｉ／Ｏセクタ連結ポインタ３１１８は、１つのＩ／Ｏ要求に含まれる他のＩ／Ｏセクタ情報要素へのポインタを示す。開始時刻３１１９は、Ｉ／Ｏセクタ情報要素に係る記憶デバイス１８００の領域に対するＩ／Ｏ処理を開始した時刻を示す。追加Ｉ／Ｏフラグ３１２０は、Ｉ／Ｏセクタ情報要素に係る領域が、複数のＩ／Ｏ要求を１つのＩ／Ｏ要求に統合する際に追加された記憶デバイス１８００の領域（追加領域）であるかを示すフラグである。Ｉ／Ｏ要求に統合する際に追加された記憶デバイス１８００の領域である場合には、追加Ｉ／Ｏフラグ３１２０の設定値は、ＯＮ（オン）に設定され、それ以外の場合は、ＯＦＦ（オフ）に設定される。
【００４３】
図７は、Ｉ／Ｏセグメントテーブル３２００の一例の構成図である。
【００４４】
Ｉ／Ｏセグメントテーブル３２００は、Ｉ／Ｏ要求の対象となる記憶部１７００の領域を管理するためのＩ／Ｏセグメント情報要素（３２５０、３２５１等）を有する。Ｉ／Ｏセグメント情報要素の構成は同様なので、ここではＩ／Ｏセグメント情報要素３２５０を例に説明する。Ｉ／Ｏセクタ情報要素３２５０は、項目３２０１と、項目に該当する設定値を格納する設定値３２０２とのフィールドを有する。項目３２０１の列には、先頭アドレス３２１０、アドレス長３２１１、及びオフセット３２１２が格納されている。設定値３２０２の列には、項目３２０１の各項目に該当する設定値が格納される。
【００４５】
先頭アドレス３２１０は、Ｉ／Ｏ要求の対象となるデータ部３０００の領域を含むセグメントの先頭アドレスを示す。アドレス長３２１１は、Ｉ／Ｏ要求の対象となるデータ部３０００の領域のアドレス長を示す。オフセット３２１２は、セグメントの先頭からＩ／Ｏ要求の対象となるデータ部３０００の領域の先頭までのオフセットを示す。
【００４６】
図８は、Ｉ／Ｏ要求テーブル３３００の一例の構成図である。
【００４７】
Ｉ／Ｏ要求テーブル３３００は、記憶デバイス１８００に対する１つのＩ／Ｏ要求毎に１つのＩ／Ｏ要求情報要素（３３５０、３３５１等）を有する。従って、１つのＩ／Ｏ要求情報要素は、１つのＩ／Ｏ要求に相当し、１つのＩ／Ｏ要求情報要素により、記憶デバイス１８００に対する１つの（１回の）Ｉ／Ｏ処理が実行される。Ｉ／Ｏ要求情報要素の構成は同様なので、ここではＩ／Ｏ要求情報要素３３５０を例に説明する。Ｉ／Ｏ要求情報要素３３５０は、項目３３０１と、項目に該当する設定値を格納する設定値３３０２とのフィールドを有する。項目３３０１の列には、Ｒ／Ｗフラグ３３１０、Ｉ／Ｏ要求リストポインタ３３１１、先頭セクタ３３１２、未転送セクタ数３３１３、合計セクタ数３３１４、合計セグメント数３３１５、先頭Ｉ／Ｏセクタポインタ３３１６、及び終端Ｉ／Ｏセクタポインタ３３１７が格納されている。設定値３３０２の列には、項目３３０１の各項目に該当する設定値が格納される。
【００４８】
Ｒ／Ｗフラグ３３１０は、実行するＩ／Ｏ処理の種別を示すフラグを示す。Ｒ／Ｗフラグ３３１０の設定値には、記憶デバイス１８００にデータを書き込むＷＲＩＴＥと、記憶デバイス１８００からデータを読み出すＲＥＡＤがある。Ｉ／Ｏ要求リストポインタ３３１１は、複数のＩ／Ｏ要求情報要素を管理するＩ／Ｏ要求リスト３７００へのポインタを示す。先頭セクタ３３１２は、Ｉ／Ｏ要求の対象とする記憶デバイス１８００の領域の先頭セクタのセクタ番号を示す。未転送セクタ数３３１３は、Ｉ／Ｏ要求の対象のセクタの中の未転送のセクタの数を示す。合計セクタ数３３１４は、Ｉ／Ｏ要求の対象の領域のセクタの合計数を示す。合計セグメント数３３１５は、Ｉ／Ｏ要求の対象の記憶部１７００の領域のセグメントの合計数を示す。先頭Ｉ／Ｏセクタポインタ３３１６は、Ｉ／Ｏ要求情報要素に対応するＩ／Ｏ要求の対象の先頭の領域を示すＩ／Ｏセクタ情報要素へのポインタを示す。終端Ｉ／Ｏセクタポインタ３３１７は、Ｉ／Ｏ要求情報要素に対応するＩ／Ｏ要求の対象の終端の領域を示すＩ／Ｏセクタ情報要素へのポインタを示す。
【００４９】
図９は、Ｉ／Ｏ環境設定テーブル３４００の一例の構成図である。
【００５０】
Ｉ／Ｏ環境設定テーブル３４００は、Ｉ／Ｏ環境の設定を管理するテーブルであり、項目３４０１と、項目に該当する設定値を格納する設定値３４０２とのフィールドを有する。項目３４０１の列には、Ｉ／Ｏ環境の設定項目として、動的Ｉ／Ｏ判定フラグ３４１０、ＲＭＷフラグ３４１１、キャッシュフラグ３４１２、簡易チェックフラグ３４１３、及び追加Ｉ／Ｏ平均化セグメント数３４１４が格納されている。設定値３４０２の列には、項目３４０１が有する各項目に該当する設定値が格納される。ここで、各項目に対する設定値は、ユーザ及び／又はアプリケーション部１２００によって設定される。
【００５１】
動的Ｉ／Ｏ判定フラグ３４１０は、複数のＩ／Ｏ要求を動的に１つのＩ／Ｏ要求に統合するか否かを判定する動的Ｉ／Ｏ判定を行うか否かを示すフラグを示す。動的Ｉ／Ｏ判定フラグ３４１０の設定値は、動的Ｉ／Ｏ判定を行う場合には、ＯＮ（オン）が設定され、動的Ｉ／Ｏ判定を行わない場合には、ＯＦＦ（オフ）が設定される。ＲＭＷフラグ３４１１は、記憶デバイス１８００に対してＲＭＷ（読出しモディファイ書込み）を実行するか否かを示すフラグを示す。例えば、記憶デバイス１８００がＳＳＤの場合には、ＲＭＷフラグ３４１１の設定値がＯＮに設定されることもある。キャッシュフラグ３４１２は、記憶デバイス１８００から読み出したデータのキャッシュを行うか否かを示すフラグを示す。キャッシュフラグ３４１２の設定値は、キャッシュを行う場合には、ＯＮが設定され、キャッシュを行わない場合には、ＯＦＦが設定される。簡易チェックフラグ３４１３は、動的Ｉ／Ｏ判定において、簡易チェックのみとするか否かを示すフラグを示す。簡易チェックのみとする場合には、簡易チェックフラグ３４１３の設定値は、ＯＮに設定され、詳細なチェックを行う場合にはＯＦＦに設定される。追加Ｉ／Ｏ平均化セグメント数３４１４は、複数のＩ／Ｏ要求を動的に１つのＩ／Ｏ要求に統合する際に、統合するためにＩ／Ｏ要求に追加されることとなるセグメントの平均の数を示す。
【００５２】
図１０は、Ｉ／Ｏ要求キューテーブル３５００の一例の構成図である。
【００５３】
Ｉ／Ｏ要求キューテーブル３５００は、Ｉ／Ｏ要求のキュー（Ｉ／Ｏ要求キュー）を管理するテーブルであり、項目３５０１、及び、項目に該当する設定値を格納する設定値３５０２を有する。項目３５０１の列には、要求数３５１０、Ｉ／Ｏ要求リストポインタ３５１１、状態フラグ３５１２、プラグフラグ３５１３、最大保留時間制限３５１４、最大要求数制限３５１５、最大セクタ数制限３５１６、最大セグメント数制限３５１７、開始時間３５１８、Ｉ／Ｏ情報リストポインタ３５１９、及びＩ／Ｏセクタ参照テーブルポインタ３５２０が格納される。設定値３５０２の列には、項目３５０１の各項目に該当する設定値が格納される。
【００５４】
要求数３５１０は、Ｉ／Ｏ要求キューに管理されているＩ／Ｏ要求の数を示す。Ｉ／Ｏ要求リストポインタ３５１１は、Ｉ／Ｏ要求を管理するＩ／Ｏ要求リスト３７００へのポインタを示す。状態フラグ３５１２は、Ｉ／Ｏ要求の受付状態を示すフラグを示す。新たなＩ／Ｏ要求を受付可能である場合には、状態フラグ３５１２の設定値は、受付可となり、新たなＩ／Ｏ要求を受付可能でない場合には、状態フラグ３５１２の設定値は、受付不可となる。プラグフラグ３５１３は、Ｉ／Ｏ要求をキューにためている状態か否かを示すフラグである。Ｉ／Ｏ要求をキューにためていない場合には、プラグフラグ３５１３の設定値は、閉鎖となり、Ｉ／Ｏ要求をキューにためている場合には、プラグフラグ３５１３の設定値は、開放となる。最大保留時間制限３５１４は、Ｉ／Ｏ要求をキューに保留してよい最大の時間を示す。最大要求数制限３５１５は、Ｉ／Ｏ要求をキューに蓄積できる最大の数を示す。最大セクタ数制限３５１６は、１つのＩ／Ｏ要求で対象とすることのできる最大のセクタ数を示す。最大セグメント数制限３５１７は、１つのＩ／Ｏ要求で対象とすることのできる最大のセグメント数を示す。開始時間３５１８は、Ｉ／Ｏ要求の保留を開始した時間を示す。Ｉ／Ｏ情報リストポインタ３５１９は、後述するＩ／Ｏ情報要素を管理するＩ／Ｏ情報リスト３６００へのポインタを示す。Ｉ／Ｏセクタ参照テーブルポインタ３５２０は、Ｉ／Ｏセクタ参照テーブル３８００へのポインタを示す。
【００５５】
図１１は、Ｉ／Ｏ情報リスト３６００の一例の構成図である。
【００５６】
Ｉ／Ｏ情報リスト３６００は、１つのＩ／Ｏ要求毎に１つのＩ／Ｏ情報要素（３６５０、３６５１等）を有する。Ｉ／Ｏ情報要素の構成は同様なので、ここではＩ／Ｏ情報要素３６５０を例に説明する。Ｉ／Ｏ情報要素３６５０は、項目３６０１と、項目に該当する設定値を格納する設定値３６０２とのフィールドを有する。項目３６０１の列には、合計セクタ数３６１０、合計セグメント数３６１１、開始時刻３６１２、終了時刻３６１３、及び終了セクタ数３６１４が格納される。設定値３６０２の列には、項目３６０１の各項目に該当する設定値が格納される。
【００５７】
合計セクタ数３６１０は、Ｉ／Ｏ要求の対象となる記憶デバイス１８００の領域のセクタの合計数を示す。合計セクタ数３６１０の設定値により、Ｉ／Ｏ処理が対象とした記憶デバイス１８００の領域の長さを特定することができる。合計セグメント数３６１１は、Ｉ／Ｏ要求の対象となる記憶部１７０の領域のセグメントの合計数を示す。開始時刻３６１２は、Ｉ／Ｏ要求に基づくＩ／Ｏ処理を開始した時刻を示す。終了時刻３６１３は、Ｉ／Ｏ要求に基づくＩ／Ｏ処理を終了した時刻を示す。ここで、終了時刻３６１３の設定値から、開始時刻３６１２の設定値を減算することにより、Ｉ／Ｏ処理の実行時間を特定することができる。設定終了セクタ数３６１４は、Ｉ／Ｏ要求に基づくＩ／Ｏ処理が終了したセクタの数を示す。
【００５８】
図１２は、Ｉ／Ｏ要求リスト３７００の一例の構成図である。
【００５９】
Ｉ／Ｏ要求リスト３７００は、複数のＩ／Ｏ要求に対応するＩ／Ｏ要求情報要素を管理するリストであり、項目３７０１、及び、項目に該当する設定値を格納する設定値３７０２を有する。項目３７０１の列には、Ｉ／Ｏ要求情報要素ポインタ（３７１０、３７１１、・・）が格納される。設定値３７０２の列には、項目３７０１の各項目に該当する設定値が格納される。Ｉ／Ｏ要求情報要素ポインタ３７１０、３７１１、・・は、それぞれのＩ／Ｏ要求に対応するＩ／Ｏ要求情報要素へのポインタを示す。
【００６０】
図１３は、Ｉ／Ｏセクタ参照テーブル３８００の一例の構成図である。
【００６１】
Ｉ／Ｏセクタ参照テーブル３８００は、記憶部１７００にデータがキャッシュされている記憶デバイス１８００の領域に対応するＩ／Ｏセクタ情報要素を参照可能に管理するテーブルであり、項目３８０１、及び、項目に該当する設定値を格納する設定値３８０２を有する。項目３８０１の列には、Ｉ／Ｏセクタ情報要素ポインタ（３８１０、３８１１、・・・）が格納される。設定値３８０２の列には、項目３８０１の各項目に該当する設定値が格納される。Ｉ／Ｏセクタ情報要素ポインタ（３８１０、３８１１、・・・）は、記憶部１７００にデータがキャッシュされている記憶デバイス１８００の領域に対応するＩ／Ｏセクタ情報要素へのポインタを示す。
【００６２】
図１４は、Ｉ／Ｏセクタ再構築テーブル３９００の一例の構成図である。
【００６３】
Ｉ／Ｏセクタ再構築テーブル３９００は、項目３９０１、及び、項目に該当する設定値を格納する設定値３９０２を有する。項目３９０１の列には、Ｉ／Ｏセクタ情報要素ポインタＩＤ３９１０、３９１１、・・・が格納される。設定値３９０２の列には、項目３９０１の各項目に該当する設定値が記入される。Ｉ／Ｏセクタ情報要素ポインタＩＤ３９１０、３９１１、・・・は、Ｉ／Ｏセクタ情報要素ポインタのＩＤを示す。本実施形態では、このＩＤの設定値は、Ｉ／Ｏ終了処理における設定を示す。Ｉ／Ｏセクタ情報要素ポインタＩＤは、Ｉ／Ｏセクタ情報要素が有するユニークな値である。Ｉ／Ｏセクタ情報要素ポインタＩＤは、例えば、先頭セクタ、セクタ数、Ｒ／Ｗフラグ及び開始時刻などによって定義されてもよい。Ｉ／Ｏ終了処理Ａ，Ｂは，Ｉ／Ｏ終了処理設定３１１６を動的Ｉ／Ｏ判定モードに変更する際、元データ（動的Ｉ／Ｏ判定モードに変更する以前のデータ）を保存するための領域である。この元データには、Ｉ／Ｏ完了を通知又は隠蔽するなどの命令が記載されてよい。
【００６４】
図１５は、汎用ブロック部１３００の機能ブロック図である。
【００６５】
汎用ブロック部１３００は、Ｉ／Ｏ解釈部１３１０、Ｉ／Ｏセクタ生成部１３２０、Ｉ／Ｏセグメント生成部１３３０、及びキャッシュ判定部１３４０を有する。
【００６６】
汎用ブロック部１３００のＩ／Ｏ解釈部１３１０は、矢印１２０１に示すように、アプリケーション部１２００からＩ／Ｏ処理命令を受信する。Ｉ／Ｏ解釈部１３１０は、Ｉ／Ｏ処理命令から、Ｉ／Ｏ処理命令に含まれているデータ（例えば、記憶デバイス１８００のＩ／Ｏ処理の対象の領域の先頭のセクタ、その対象の領域内のセクタ数、Ｉ／Ｏ要求キューテーブルのポインタ、Ｒ／Ｗフラグ、Ｉ／Ｏ終了処理設定、記憶部１７００のＩ／Ｏ処理の対象の領域を含むセグメントの先頭アドレス、その対象の領域のアドレス長、及びセグメントの先頭から対象の領域までのオフセット）を抽出する。Ｉ／Ｏ解釈部１３１０は、抽出したデータ群を矢印１２０３に示すように、Ｉ／Ｏセクタ生成部１３２０へ送信する。
【００６７】
Ｉ／Ｏセクタ生成部１３２０は、矢印１３０２に示すように、記憶部１７００のＩ／Ｏセクタテーブル３１００にＩ／Ｏ処理命令に対応するＩ／Ｏセクタ情報要素（例えば、Ｉ／Ｏセクタ情報要素３１５０）を生成する。Ｉ／Ｏセクタ生成部１３２０は、Ｉ／Ｏセクタ情報要素３１５０の先頭セクタ３１１０、セクタ数３１１１、Ｉ／Ｏ要求キューテーブルポインタ３１１３、Ｒ／Ｗフラグ３１１５、及び、Ｉ／Ｏ終了処理設定３１１６に該当する設定値３１０２の列に、Ｉ／Ｏ解釈部１３１０から受信したデータ群に含まれるそれぞれの項目に対応する値を格納する。次いで、Ｉ／Ｏセクタ生成部１３２０は、矢印１２０４に示すように、Ｉ／Ｏセクタ情報要素３１５０と、Ｉ／Ｏ解釈部１３１０から受信した先頭アドレス、アドレス長、及びオフセットをＩ／Ｏセグメント生成部１３３０へ送信する。
【００６８】
Ｉ／Ｏセグメント生成部１３３０は、矢印１３０２に示すように、Ｉ／Ｏセクタ生成部１３２０から送信された各種データに基づいて、記憶部１７００のＩ／Ｏセグメントテーブル３２００にＩ／Ｏセグメント情報要素（例えば、Ｉ／Ｏセグメント情報要素３２５０）を生成する。Ｉ／Ｏセグメント生成部１３３０は、Ｉ／Ｏセグメント情報要素３２５０の先頭アドレス３２１０、アドレス長３２１１、及びオフセット３２１２に該当する設定値３２０２の列に、Ｉ／Ｏセクタ生成部１３２０から受信した値を格納する。また、Ｉ／Ｏセグメント生成部１３３０は、Ｉ／Ｏセクタ情報要素３１５０のＩ／Ｏセグメントテーブルポインタ３１１２に該当する設定値として、Ｉ／Ｏセグメント情報要素３２５０が属するＩ／Ｏセグメントテーブル３２００へのポインタを設定する。また、Ｉ／Ｏセグメント生成部１３３０は、Ｉ／Ｏセグメントテーブル３２００が保有するＩ／Ｏセグメント情報要素３２５０の総数を、Ｉ／Ｏセクタ情報要素３１５０のセグメント数３１１４に該当する設定値として設定する。最後に、Ｉ／Ｏセグメント生成部１３３０は、矢印１２０５に示すように、キャッシュ判定部１３４０へＩ／Ｏセクタ情報要素３１５０、Ｉ／Ｏセグメント情報要素３２５０を転送する。
【００６９】
キャッシュ判定部１３４０は、矢印１３０２に示すように、記憶部１７００のＩ／Ｏ環境設定テーブル３４００のキャッシュフラグ３４１２の設定値を参照する。キャッシュフラグ３４１２の設定値がＯＦＦの場合、記憶部１７００にＩ／Ｏ要求の対象のデータがキャッシュされていないことを意味するので、キャッシュ判定部１３４０は、矢印１３０１に示すように、Ｉ／Ｏスケジューラ部１４００へＩ／Ｏセクタ情報要素３１５０を送信する。
【００７０】
一方、キャッシュフラグ３４１２の設定値がＯＮの場合、記憶部１７００にキャッシュされている可能性があるので、キャッシュ判定部１３４０は、矢印１３０２に示すように、記憶部１７００のＩ／Ｏセクタ参照テーブル３８００を参照する。この際、Ｉ／Ｏセグメント生成部１３３０から受信したＩ／Ｏセクタ情報要素３１５０のＲ／Ｗフラグ３１１５の設定値がＷＲＩＴＥの場合、キャッシュ判定部１３４０は、Ｉ／Ｏスケジューラ部１４００へＩ／Ｏセクタ情報要素３１５０を転送する。一方、Ｉ／Ｏセグメント生成部１３３０から受信したＩ／Ｏセクタ情報要素３１５０のＲ／Ｗフラグ３１１５の設定値がＲＥＡＤの場合、キャッシュ判定部１３４０は、記憶部１７００にＩ／Ｏ要求に対応するデータがキャッシュされているか否かを判定する。具体的には、キャッシュ判定部１３４０は、Ｉ／Ｏセクタ情報要素３１５０の先頭セクタ３１１０の設定値が示す先頭セクタからセクタ数３１１１の設定値分のセクタを含む領域（キャッシュ判定部１３４０の処理の説明においてＩ／Ｏ対象領域という）を含んでいる領域を対象としているＩ／Ｏセクタ情報要素をＩ／Ｏセクタ参照テーブル３８００が保持しているか否か確認する。この結果、このようなＩ／Ｏセクタ情報要素をＩ／Ｏセクタ参照テーブル３８００が保持していない場合、キャッシュされていないことを意味しているので、キャッシュ判定部１３４０は、Ｉ／Ｏスケジューラ部１４００へＩ／Ｏセクタ情報要素３１５０を送信する。
【００７１】
一方、このようなＩ／Ｏセクタ情報要素をＩ／Ｏセクタ参照テーブル３８００が保持している場合、キャッシュされていることを意味しているので、キャッシュ判定部１３４０は、Ｉ／Ｏセクタ参照テーブル３８００が保持しているＩ／Ｏセクタ情報要素のＩ／Ｏセグメントテーブルポインタ３１１２の設定値からＩ／Ｏセグメントテーブル３２００を特定し、特定したＩ／Ｏセグメントテーブル３２００から、ＩＯ対象領域のデータを格納している記憶部１７００の領域を特定し、特定した領域のデータを、Ｉ／Ｏセグメント生成部１３３０から受信したＩ／Ｏセグメント情報要素３２５０により規定される記憶部１７００の領域に複製する。その後、キャッシュ判定部１３４０は、Ｉ／Ｏセクタ参照テーブル３８００から、参照したＩ／Ｏセクタ情報要素を削除し、矢印１３０１Ａに示すように、Ｉ／Ｏ終了処理部１６００へ処理を移す。
【００７２】
図１６は、Ｉ／Ｏスケジューラ部１４００の機能ブロック図である。
【００７３】
Ｉ／Ｏスケジューラ部１４００は、Ｉ／Ｏ要求変更判定部１４１０、Ｉ／Ｏセクタ再構成部１４１１、Ｉ／Ｏ要求生成判定部１４２０、Ｉ／Ｏセクタ追加部１４２１、Ｉ／Ｏ要求生成部１４２２、Ｉ／Ｏ要求統合追加判定部１４４０、追加Ｉ／Ｏセクタ生成部１４４１、Ｉ／Ｏセクタ追加部１４４２、Ｉ／Ｏ統合部１４５０、Ｉ／Ｏ要求発行判定部１４６０、Ｉ／Ｏセクタ参照テーブル更新部１４７０、及びＩ／Ｏ情報設定部１４８０を有する。
【００７４】
Ｉ／Ｏ要求変更判定部１４１０は、矢印１３０１に示すように、汎用ブロック部１３００からＩ／Ｏセクタ情報要素３１５０を受信する。Ｉ／Ｏセクタ情報要素を受信すると、Ｉ／Ｏ要求変更判定部１４１０は、矢印１４０２に示すように、記憶部１７００のＩ／Ｏ環境設定テーブル３４００の動的Ｉ／Ｏ判定フラグ３４１０の設定値を参照し、動的Ｉ／Ｏ判定フラグ３４１０の設定値がＯＮの場合、矢印１３０３Ａ１に示すように、Ｉ／Ｏセクタ再構成部１４１１に処理を移す一方、動的Ｉ／Ｏ判定フラグ３４１０の設定値がＯＦＦの場合、矢印１３０３に示すように、Ｉ／Ｏ要求生成判定部１４２０へ処理を移す。
【００７５】
Ｉ／Ｏセクタ再構成部１４１１は、受信したＩ／Ｏセクタ情報要素３１５０とＩ／Ｏ終了処理設定３１１６をＩ／Ｏセクタ再構築テーブル３９００のＩ／Ｏセクタ情報ポインタＩＤ３９１０に関連付けて格納する。この後、Ｉ／Ｏセクタ再構成部１４１１は、Ｉ／Ｏセクタ情報要素３１５０のＩ／Ｏ終了処理設定３１１６の設定値を動的Ｉ／Ｏ判定モードに変更する。Ｉ／Ｏセクタ再構成部１４１１は、矢印１３０３Ａ２に示すように、Ｉ／Ｏ要求生成判定部１４２０へＩ／Ｏセクタ情報要素３１５０を送信する。
【００７６】
Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求変更判定部１４１０、又は、Ｉ／Ｏセクタ再構成部１４１１からＩ／Ｏセクタ情報要素３１５０を受信する。ここで、Ｉ／Ｏ要求生成判定部１４２０の処理を、図面を参照して説明する。
【００７７】
図１９は、Ｉ／Ｏ要求生成判定部１４２０の処理のフローチャートである。
【００７８】
Ｓ５００１で、Ｉ／Ｏ要求生成判定部１４２０は、受信したＩ／Ｏセクタ情報要素３１５０のＩ／Ｏ要求キューテーブルポインタ３１１３の設定値が示すＩ／Ｏ要求キューテーブル３５００の状態フラグ３５１２の設定値を参照し、Ｉ／Ｏ要求が受付可であるか否かを判定する。この判定の結果、Ｉ／Ｏ要求が受付可である場合（Ｓ５００１：Ｙｅｓ）、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００２に進める一方、Ｉ／Ｏ要求が受付可でない場合（Ｓ５００１：Ｎｏ）、Ｓ５００１の処理を再び実行する。
【００７９】
Ｓ５００２で、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求キューテーブル３５００のプラグフラグ３５１３の設定値が開放であるか否かを判定する。この結果、プラグフラグ３５１３の設定値が開放であると判定した場合（Ｓ５００２：Ｙｅｓ）、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求キューテーブル３５００の状態フラグ３５１２の設定値を受付不可とし、処理をＳ５００３に進める一方、プラグフラグ３５１３の設定値が開放でないと判定した場合（Ｓ５００２：Ｎｏ）、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００１に進める。
【００８０】
Ｓ５００３で、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求キューテーブル３５００の要求数３５１０の設定値が１以上であるか否かを判定する。この結果、要求数３５１０の設定値が１以上でない場合（Ｓ５００３：Ｎｏ）、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００４に進める一方、要求数３５１０の設定値が１以上である場合（Ｓ５００３：Ｙｅｓ）、処理をＳ５００５に進める。
【００８１】
Ｓ５００４で、Ｉ／Ｏ要求生成判定部１４２０は、現在の時刻をＩ／Ｏ要求キューテーブル３５００の開始時間３５１８に設定し、Ｉ／Ｏ要求生成部１４２２に処理を移行する。
【００８２】
Ｓ５００５で、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求キューテーブル３５００のＩ／Ｏ要求リストポインタ３５１１が示すＩ／Ｏ要求リスト３７００を特定し、特定したＩ／Ｏ要求リスト３７００のＩ／Ｏ要求情報要素ポインタ（３７１０、３７１１、・・・）の全てを処理対象として選択したか否かを判定する。この結果、未選択のＩ／Ｏ要求情報要素ポインタがある場合（Ｓ５００５：Ｙｅｓ）、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求情報要素ポインタ３７１０が示すＩ／Ｏ要求情報要素を処理対象として取得し、処理をＳ５００６に進める一方、未選択のＩ／Ｏ要求情報要素がない場合（Ｓ５００５：Ｎｏ）、Ｉ／Ｏ要求生成部１４２２に処理を移行する。
【００８３】
Ｓ５００６で、Ｉ／Ｏ要求生成判定部１４２０は、取得したＩ／Ｏ要求情報要素のＲ／Ｗフラグ３３１０の設定値と、Ｉ／Ｏセクタ情報要素３１５０のＲ／Ｗフラグ３１１５の設定値が同じであるか否かを判定する。この結果、Ｒ／Ｗフラグ３３１０の設定値と、Ｉ／Ｏセクタ情報要素３１５０のＲ／Ｗフラグ３１１５の設定値とが同じ場合（Ｓ５００６：Ｙｅｓ）、複数のＩ／Ｏ要求を一つに統合できる可能性があるので、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００７に進める一方、Ｒ／Ｗフラグ３３１０の設定値と、Ｉ／Ｏセクタ情報要素３１５０のＲ／Ｗフラグ３１１５の設定値とが同じでない場合（Ｓ５００６：Ｎｏ）、処理をＳ５００５に進める。
【００８４】
Ｓ５００７で、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の前に連続するセクタであるか否かを判定する。具体的には、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏセクタ情報要素３１５０の先頭セクタ３１１０の設定値と、セクタ数３１１１の設定値との和が、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の設定値と等しいか否かにより判定する。この結果、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の前に連続するセクタである場合（Ｓ５００７：Ｙｅｓ）、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００９に進める一方、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の前に連続するセクタでない場合（Ｓ５００７：Ｎｏ）、処理をＳ５００８に進める。
【００８５】
Ｓ５００８で、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０に対応する範囲のセクタの後に連続するセクタであるか否かを判定する。具体的には、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の設定値と合計セクタ数３３１４の設定値との和が、Ｉ／Ｏセクタ情報要素３１５０の先頭セクタ３１１０の設定値と等しいか否かにより判定する。この結果、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０に対応する範囲のセクタの後に連続するセクタである場合（Ｓ５００８：Ｙｅｓ）、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００９に進める一方、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０に対応する範囲のセクタの後に連続するセクタでない場合（Ｓ５００８：Ｎｏ）、処理をＳ５００５に進める。
【００８６】
Ｓ５００９で、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求キューテーブル３５００の最大セクタ数制限３５１６の制限の違反であるか否かを判定する。具体的には、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求情報要素の合計セクタ数３３１４の設定値と、Ｉ／Ｏセクタ情報要素３１５０のセクタ数３１１１の設定値の和が、最大セクタ数制限３５１６の設定値以下であるか否かを判定する。この結果、Ｉ／Ｏ要求キューテーブル３５００の最大セクタ数制限３５１６の制限の違反である場合、すなわち、Ｉ／Ｏ要求情報要素の合計セクタ数３３１４の設定値と、Ｉ／Ｏセクタ情報要素３１５０のセクタ数３１１１の設定値の和が、最大セクタ数制限３５１６の設定値以下でない場合（Ｓ５００９：Ｙｅｓ）、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００５に進める一方、Ｉ／Ｏ要求キューテーブル３５００の最大セクタ数制限３５１６の制限の違反でない場合（Ｓ５００９：Ｎｏ）、処理をＳ５０１０に進める。
【００８７】
Ｓ５０１０で、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求キューテーブル３５００の最大セグメント数制限３５１７の制限の違反であるか否かを判定する。具体的には、Ｉ／Ｏ要求生成判定部１４２０は、Ｉ／Ｏ要求情報要素の合計セグメント数３３１５の設定値と、Ｉ／Ｏセクタ情報要素３１５０のセグメント数３１１４の設定値の和が、最大セグメント数制限３５１７の設定値以下であるか否かを判定する。この結果、Ｉ／Ｏ要求キューテーブル３５００の最大セグメント数制限３５１７の制限の違反である場合、すなわち、Ｉ／Ｏ要求情報要素の合計セグメント数３３１５の設定値と、Ｉ／Ｏセクタ情報要素３１５０のセグメント数３１１４の設定値の和が、最大セグメント数制限３５１７の設定値以下でない場合（Ｓ５０１０：Ｙｅｓ）、Ｉ／Ｏ要求生成判定部１４２０は、処理をＳ５００５に進める一方、Ｉ／Ｏ要求キューテーブル３５００の最大セグメント数制限３５１７の制限の違反でない場合（Ｓ５０１０：Ｎｏ）、対象とするセクタが連続するＩ／Ｏセクタ情報要素と、Ｉ／Ｏ要求情報要素とをＩ／Ｏセクタ追加部１４２１に送信し、Ｉ／Ｏセクタ追加部１４２１の処理に移行する。
【００８８】
図１６の説明に戻り、Ｉ／Ｏセクタ追加部１４２１は、矢印１３０４Ｂ１に示すように、Ｉ／Ｏセクタ情報要素３１５０と、Ｉ／Ｏセクタ情報要素３１５０の対象とする範囲と連続するセクタを対象とするＩ／Ｏ要求情報要素３３５０とを受信する。Ｉ／Ｏセクタ追加部１４２１は、図１９のＳ５００７と同様な処理により、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の前に連続するセクタであるか否かを判定する。
【００８９】
この結果、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の前に連続するセクタである場合、Ｉ／Ｏセクタ追加部１４２１は、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の設定値を、Ｉ／Ｏセクタ情報要素３１５０の先頭セクタ３１１０の設定値に変更し、未転送セクタ数３３１３の設定値に、セクタ数３１１１の設定値を加え、合計セクタ数３３１４の設定値にセクタ数３１１１の設定値を加え、合計セグメント数３３１５の設定値にセグメント数３１１４の設定値を加え、Ｉ／Ｏセクタ連結ポインタ３１１８の設定値を、先頭Ｉ／Ｏセクタポイント３３１６の設定値に変更し、先頭Ｉ／Ｏセクタポイント３３１６の設定値をＩ／Ｏセクタ情報要素３１５０へのポインタに変更する。これにより、連続する領域を対象とするＩ／Ｏ処理を１つのＩ／Ｏ要求に統合することができる。すなわち、連続する領域を対象とするＩ／Ｏ処理を１つのＩ／Ｏ処理として実行することができ、Ｉ／Ｏ数を低減できるとともに、全体としてのＩ／Ｏ処理の時間を短縮することができる。一方、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０の先頭セクタ３３１２の前に連続するセクタでない場合には、Ｉ／Ｏセクタ情報要素３１５０に対応する範囲のセクタが、Ｉ／Ｏ要求情報要素３３５０に対応する範囲のセクタの後に連続するセクタであることを意味しているので、Ｉ／Ｏセクタ追加部１４２１は、先頭セクタ３３１２の設定値を、先頭セクタ３１１０の設定値に変更し、未転送セクタ数３３１３の設定値に、セクタ数３１１１の設定値を加え、合計セクタ数３３１４の設定値にセクタ数３１１１の設定値を加え、合計セグメント数３３１５の設定値にセグメント数３１１４の設定値を加え、終端Ｉ／Ｏセクタポインタ３３１７が示すＩ／Ｏセクタ情報要素３１５３のＩ／Ｏセクタ連結ポインタ３１１８の設定値をＩ／Ｏセクタ情報要素３１５０のポインタに変更し、終端Ｉ／Ｏセクタポインタ３３１７の設定値をＩ／Ｏセクタ情報要素３１５０のポインタに変更する。これにより、連続する領域を対象とするＩ／Ｏ処理を１つのＩ／Ｏ要求に統合することができる。すなわち、連続する領域を対象とするＩ／Ｏ処理を１つのＩ／Ｏ処理として実行することができ、Ｉ／Ｏ数を低減できるとともに、全体としてのＩ／Ｏ処理の時間を短縮することができる。この後、Ｉ／Ｏセクタ追加部１４２１は、Ｉ／Ｏ要求統合追加判定部１４４０に処理を移す。
【００９０】
Ｉ／Ｏ要求生成部１４２２は、矢印１３０４Ａ１に示すように、Ｉ／Ｏセクタ情報要素３１５０を受信する。Ｉ／Ｏセクタ情報要素３１５０を受信すると、Ｉ／Ｏ要求生成部１４２２は、Ｉ／Ｏ要求テーブル３３００にＩ／Ｏ要求情報要素３３５０を生成し、Ｉ／Ｏ要求情報要素３３５０のＲ／Ｗフラグ３３１０の設定値に、Ｉ／Ｏセクタ情報要素３１５０のＲ／Ｗフラグ３１１５の設定値を設定し、Ｉ／Ｏ要求リストポインタ３３１１の設定値に、Ｉ／Ｏ要求キューテーブルポインタ３１１３が示すＩ／Ｏ要求キューテーブル３５００のＩ／Ｏ要求リストポインタ３５１１の設定値を設定し、先頭セクタ３３１２の設定値に、先頭セクタ３１１０の設定値を設定し、未転送セクタ数３３１３の設定値に、セクタ数３１１１の設定値を設定し、合計セクタ数３３１４の設定値にセクタ数３１１１の設定値を設定し、合計セグメント数３３１５の設定値にセグメント数３１１４の設定値を設定し、先頭Ｉ／Ｏセクタポインタ３３１６の設定値に、Ｉ／Ｏセクタ情報要素３１５０を示すポインタを設定する。更に、Ｉ／Ｏ要求生成部１４２２は、Ｉ／Ｏ要求キューテーブル３５００の要求数３５１０の設定値が１未満である場合、Ｉ／Ｏ要求リスト３７００のＩ／Ｏ要求情報ポインタ３７１０の設定値にＩ／Ｏ要求情報要素３３５０を示すポインタを格納する。一方、Ｉ／Ｏ要求キューテーブル３５００の要求数３５１０の設定値が１以上である場合、Ｉ／Ｏ要求リスト３７００の未使用のＩ／Ｏ要求情報要素ポインタの設定値にＩ／Ｏ要求情報要素３３５０を示すポインタを格納するとともに、Ｉ／Ｏ要求リスト３７００に格納されているＩ／Ｏ要求情報要素ポインタ（３７１０、３７１１、・・・）を、各Ｉ／Ｏ要素情報要素ポインタが示すＩ／Ｏ要求情報要素３３５０、３３５１、・・・の先頭セクタ３３１２の設定値が小さい順に並ぶように並び替える。この後、Ｉ／Ｏ要求生成部１４２２は、Ｉ／Ｏ要求統合追加判定部１４４０に命令を送信し、処理を移す。
【００９１】
Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏセクタ追加部１４２１、又は、Ｉ／Ｏ要求生成部１４２２から命令を受ける。Ｉ／Ｏ要求統合追加判定部１４４０の処理を、図面を参照して説明する。
【００９２】
図２０は、Ｉ／Ｏ要求統合追加判定部１４４０の処理のフローチャートである。
【００９３】
Ｓ５１０１で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求リスト３７００の全てのＩ／Ｏ要求情報要素ポインタを用いてＩ／Ｏ要求情報要素が統合可能であるかを確認したか否かを判定する。この結果、全てのＩ／Ｏ要求情報要素ポインタを用いてＩ／Ｏ要求情報要素が統合可能であるかを確認した場合（Ｓ５１０１：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求発行判定部１４６０に処理を移す一方、全てのＩ／Ｏ要求情報要素ポインタを用いてＩ／Ｏ要求情報要素が統合可能であるかを確認していない場合（Ｓ５１０１：Ｎｏ）、処理をＳ５１０２に進める。
【００９４】
Ｓ５１０２で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求リスト３７００から連続するＩ／Ｏ要求情報要素であり、かつ、それぞれのＲ／Ｗフラグ３３１０の設定値が同じであるＩ／Ｏ要求情報要素の組みが取得可能か否かを判定する。この結果、このようなＩ／Ｏ要求情報要素の組みが取得可能である場合（Ｓ５１０２：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、該当するＩ／Ｏ要求情報要素の組を取得し、処理をＳ５１０３に進める一方、このようなＩ／Ｏ要求情報要素の組みが取得可能でない場合（Ｓ５１０２：Ｎｏ）、Ｉ／Ｏ要求発行判定部１４６０に処理を移す。
【００９５】
Ｓ５１０３で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求情報要素の組のそれぞれが対象とするセクタが連続しているか否かを判定する。具体的には、Ｉ／Ｏ要求統合追加判定部１４４０は、一方のＩ／Ｏ要求情報要素の先頭セクタ３３１２の設定値と合計セクタ数３３１４の設定値との和が、他方のＩ／Ｏ要求情報要素の先頭セクタ３３１２の設定値と等しいか、もしくは、他方のＩ／Ｏ要求情報要素の先頭セクタ３３１２の設定値と合計セクタ数３３１４の設定値との和が一方のＩ／Ｏ要求情報３３５０の先頭セクタ３３１２の設定値と等しいか否かにより判断する。この結果、Ｉ／Ｏ要求情報要素の組のそれぞれが対象とするセクタが連続している場合（Ｓ５１０３：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、処理をＩ／Ｏ統合部１４５０に移行する一方、Ｉ／Ｏ要求情報要素の組のそれぞれが対象とするセクタが連続していない場合（Ｓ５１０３：Ｎｏ）、処理をＳ５１０４に進める。
【００９６】
Ｓ５１０４で、Ｉ／Ｏ要求統合追加判定部１４４０は、対象とするセクタが不連続なＩ／Ｏ要求情報要素の組を、１つのＩ／Ｏ要求として統合するための後続の処理を実行するか否かを判定する。具体的には、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ環境設定テーブル３４００のＲＭＷフラグ３４１１の設定値がＯＮであり、かつ、Ｒ／Ｗフラグ３３１０の設定値がＷＲＩＴＥであるか否かを判断する。または、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｒ／Ｗフラグ３３１０の設定値がＲＥＡＤ、かつ、キャッシュフラグ３４１２の設定値がＯＮであるか否かを判断する。そして、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ環境設定テーブル３４００のＲＭＷフラグ３４１１の設定値がＯＮであり、かつ、Ｒ／Ｗフラグ３３１０の設定値がＷＲＩＴＥである場合、又はＲ／Ｗフラグ３３１０の設定値がＲＥＡＤ、かつ、キャッシュフラグ３４１２の設定値がＯＮである場合、対象とするセクタが不連続なＩ／Ｏ要求情報要素の組を、１つのＩ／Ｏ要求として統合するための後続の処理を実行すると判定する。
【００９７】
Ｓ５１０４の結果、対象とするセクタが不連続なＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合するための後続の処理を実行すると判定した場合（Ｓ５１０４：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、処理をＳ５１０５に進める一方、対象とするセクタが不連続なＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合するための後続の処理を実行すると判定しなかった場合（Ｓ５１０４：Ｎｏ）には、処理をＳ５１０１に進める。
【００９８】
Ｓ５１０５で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求キューテーブル３５００の最大セクタ数制限３５１６の制限の違反であるか否かを判定する。具体的には、Ｉ／Ｏ要求統合追加判定部１４４０は、対象とする領域が後方のＩ／Ｏ要求情報要素（後方対象Ｉ／Ｏ要求情報要素という）の先頭セクタ３３１２の設定値と合計セクタ数３３１４の設定値との和と、対象とする領域が前方のＩ／Ｏ要求情報要素（前方対象Ｉ／Ｏ要求情報要素という）の先頭セクタ３３１２の設定値との差が、最大セクタ数制限３５１６の設定値以下であるか否かを判定する。この結果、対象とする領域が後方のＩ／Ｏ要求情報要素の先頭セクタ３３１２の設定値と合計セクタ数３３１４の設定値との和と、対象とする領域が前方のＩ／Ｏ要求情報要素の先頭セクタ３３１２の設定値との差が、最大セクタ数制限３５１６の設定値より大きい場合、すなわち、Ｉ／Ｏ要求キューテーブル３５００の最大セクタ数制限３５１６の制限の違反である場合（Ｓ５１０５：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、処理をＳ５１０１に進める一方、後方対象Ｉ／Ｏ要求情報要素の先頭セクタ３３１２の設定値と合計セクタ数３３１４の設定値との和と、前方対象Ｉ／Ｏ要求情報要素の先頭セクタ３３１２の設定値との差が、最大セクタ数制限３５１６の設定値以下である場合、すなわち、Ｉ／Ｏ要求キューテーブル３５００の最大セクタ数制限３５１６の制限の違反でない場合（Ｓ５１０５：Ｎｏ）、処理をＳ５１０６に進める。
【００９９】
Ｓ５１０６で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求キューテーブル３５００の最大セグメント数制限３５１７の制限の違反であるか否かを判定する。具体的には、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求情報要素の組の合計セグメント数３３１５の設定値の和が、最大セグメント数制限３５１７の設定値以下であるか否かを判定する。この結果、Ｉ／Ｏ要求キューテーブル３５００の最大セグメント数制限３５１７の制限の違反である場合（Ｓ５１０６：Ｙｅｓ）、１つのＩ／Ｏ要求に統合できないので、Ｉ／Ｏ要求統合追加判定部１４４０は、処理をＳ５１０１に進める一方、Ｉ／Ｏ要求キューテーブル３５００の最大セグメント数制限３５１７の制限の違反でない場合（Ｓ５１０６：Ｎｏ）、処理をＳ５１０７に進める。
【０１００】
Ｓ５１０７で、Ｉ／Ｏ要求統合追加判定部１４４０は、対象とするセクタが不連続なＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合することができるか否かを更に判定する判定処理（図２１参照）を実行する。この結果、対象とするセクタが不連続なＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合することができると判定した場合（Ｓ５１０７：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、追加Ｉ／Ｏ要求生成部１４４１に、Ｉ／Ｏ要求情報要素の組を送信し、処理を移行する一方、対象とするセクタが不連続なＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合することができると判定しなかった場合（Ｓ５１０７：Ｎｏ）、処理をＳ５１０１に進める。
【０１０１】
Ｓ５１０７の判定処理を、図面を参照して説明する。
【０１０２】
図２１は、Ｉ／Ｏ要求統合追加判定部１４４０の判定処理のフローチャートである。
【０１０３】
Ｓ５１１２で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求情報要素３３５０のＲ／Ｗフラグ３３１０の設定値がＲＥＡＤであるか否かを判定する。この結果、Ｒ／Ｗフラグ３３１０の設定値がＲＥＡＤである場合（Ｓ５１１２：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、処理をＳ５１１５に進める一方、Ｒ／Ｗフラグ３３１０の設定値がＲＥＡＤでない場合（Ｓ５１１２：Ｎｏ）、処理をＳ５１１３に進める。
【０１０４】
Ｓ５１１３で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求情報要素の組のそれぞれが対象とする領域の間に存在する区間（空きセクタ区間）を算出する。空きセクタ区間の先頭セクタＡは、対象とする領域が前方のＩ／Ｏ要求情報要素の先頭セクタ３３１２の設定値と合計セクタ数３３１４の設定値との和で決まる。また、空きセクタ区間のセクタ数Ｂは、対象とする領域が後方のＩ／Ｏ要求情報の先頭セクタ３３１２の設定値と、空きセクタ区間の先頭セクタＡとの差で決まる。
【０１０５】
Ｓ５１１４で、Ｉ／Ｏ要求統合追加判定部１４４０は、先頭セクタＡとセクタ数Ｂとにより規定される空きセクタ区間に対応するＩ／Ｏセクタ情報要素がＩ／Ｏセクタ参照テーブル３８００に存在するか否かを判断する。この結果、空きセクタ区間に対応するＩ／Ｏセクタ情報要素がＩ／Ｏセクタ参照テーブル３８００に存在する場合（Ｓ５１１４：Ｙｅｓ）、空きセクタ区間に対応するデータが記憶部１７００にキャッシュされていることを示しているので、Ｉ／Ｏ要求統合追加判定部１４４０は、判定処理の結果をＹｅｓと判定する。これにより、Ｉ／Ｏ要求情報要素の組が１つのＩ／Ｏ要求に統合され、１つのＩ／Ｏ処理として実行されることとなる。一方、空きセクタ区間に対応するＩ／Ｏセクタ情報要素がＩ／Ｏセクタ参照テーブル３８００に存在しない場合（Ｓ５１１４：Ｎｏ）、Ｉ／Ｏ要求統合追加判定部１４４０は、判定処理の結果をＮｏと判定する。
【０１０６】
Ｓ５１１５で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ要求情報要素の組のそれぞれが対象とする区間の間の空きセクタ数（セクタ間隔：空きセクタ空間の大きさ）を算出する。空きセクタ数は、Ｓ５１１３のセクタ数Ｂと同様な処理により算出できる。
【０１０７】
Ｓ５１１６で、Ｉ／Ｏ要求統合追加判定部１４４０は、セクタ間隔が所定の数以下であるか否かを判定する。なお、Ｉ／Ｏ要求情報要素の組のそれぞれが対象とする区間は連続しておらず、セクタ間隔が０とはならないので、所定の数を１とした場合には、所定の数以下のセクタ間隔は、１に限られるため、図２１の例では、セクタ間隔が１と一致するか否かを判定するようにしている。なお、所定の数としては、１に限らず、２以上の数でもよく、要は、それぞれのＩ／Ｏ要求としてＩ／Ｏ処理を実行するよりも、１つのＩ／Ｏ要求としてＩ／Ｏ処理を実行した場合に実行時間が短いことを比較的高い確率で保証できるセクタ間隔であればよい。
【０１０８】
この結果、セクタ間隔が所定の数以下である場合（Ｓ５１１６：Ｙｅｓ）、１つのＩ／Ｏ要求に統合した方がＩ／Ｏ処理の実行時間が短いと推定できるため、Ｉ／Ｏ要求統合追加判定部１４４０は、判定処理の結果をＹｅｓと判定する。これにより、Ｉ／Ｏ要求情報要素の組が１つのＩ／Ｏ要求に統合され、１つのＩ／Ｏ処理として実行されることとなり、Ｉ／Ｏ処理数を低減でき、Ｉ／Ｏ処理時間を短縮することができる。一方、セクタ間隔が所定の数を超える場合（Ｓ５１１６：Ｎｏ）、Ｉ／Ｏ要求統合追加判定部１４４０は、処理をＳ５１１７に進める。
【０１０９】
Ｓ５１１７で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ環境設定テーブル３４００の簡易チェックフラグ３４１３の設定値がＯＮであるか否かを判定する。この結果、簡易チェックフラグ３４１３の設定値がＯＮの場合（Ｓ５１１７：Ｙｅｓ）、簡易チェック（Ｓ５１１６のチェック）のみであることを意味しているので、Ｉ／Ｏ要求統合追加判定部１４４０は、判定処理の結果をＮｏと判定する。こ一方、簡易チェックフラグ３４１３の設定値がＯＦＦの場合（Ｓ５１１７：Ｎｏ）、後続の詳細チェックを行うことを意味しているので、Ｉ／Ｏ要求統合追加判定部１４４０は、処理をＳ５１１８に進める。
【０１１０】
Ｓ５１１８で、Ｉ／Ｏ要求統合追加判定部１４４０は、Ｉ／Ｏ情報リスト３６００を参照し、不連続な領域を対象とするＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合した方が記憶デバイス１８００のＩ／Ｏ処理の実行時間を短縮できるか否かを判定する。ここで、Ｉ／Ｏ要求情報要素に対応するＩ／Ｏ処理を別々に実行する場合に推定される実行時間（個別時実行時間：第１の処理時間）は、それぞれのＩ／Ｏ要求情報要素について、合計セクタ数３３１４及び合計セグメント数３３１５と、Ｉ／Ｏ情報リスト３６００のＩ／Ｏ情報要素の合計セクタ数３６１０及び合計セグメント数３６１１とが最も近しい値であるＩ／Ｏ情報要素３６５０を特定し、このＩ／Ｏ情報要素の終了時刻３６１３の設定値と開始時刻３６１２の設定値との差をそれぞれのＩ／Ｏ要求情報要素に対応するＩ／Ｏ処理の実行時間として算出し、Ｉ／Ｏ要求情報要素の組の３３５１の実行時間の和を取ることにより推定することができる。また、不連続な領域を対象とするＩ／Ｏ要求情報要素の組のＩ／Ｏ要求を１つのＩ／Ｏ要求に統合してＩ／Ｏ処理を実行する場合に推定される実行時間（統合時実行時間：第２の処理時間）は、Ｉ／Ｏ要求情報要素の組の合計セクタ数３３１４と合計セグメント数３３１５とのそれぞれの和を取ることにより求められる統合合計セクタ数と統合合計セグメント数とを算出し、この統合合計セクタ数に、不連続区間（不連続な領域）に該当するセクタの数を加えた統合後合計セクタ数を算出し、統合後合計セクタ数及び統合合計セグメント数と、Ｉ／Ｏ情報リスト３６００のＩ／Ｏ情報要素の合計セクタ数３６１０の設定値と合計セグメント数３６１１の設定値とが最も近しい値であるＩ／Ｏ情報要素を特定し、このＩ／Ｏ情報要素の終了時刻３６１３の設定値と開始時刻３６１２の設定値との差を取ることにより推定することができる。Ｉ／Ｏ要求統合追加判定部１４４０は、不連続なＩ／Ｏ要求情報要素の組のＩ／Ｏ要求を統合してＩ／Ｏ処理を実行する場合の実行時間が、Ｉ／Ｏ要求を統合しない場合の実行時間より短くなるか否かを判定する。
【０１１１】
この結果、不連続な領域を対象とするＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合した方が記憶デバイス１８００のＩ／Ｏ処理の実行時間を短縮できると判定した場合（Ｓ５１１８：Ｙｅｓ）、Ｉ／Ｏ要求統合追加判定部１４４０は、判定処理の結果をＹｅｓと判定する。これにより、不連続なＩ／Ｏ要求情報要素の組のＩ／Ｏ要求を統合してＩ／Ｏ処理を実行する場合の実行時間が、Ｉ／Ｏ要求を統合しない場合の実行時間より短くなると推定されるときに、１つのＩ／Ｏ要求に統合され、１つのＩ／Ｏ処理として実行されることとなり、Ｉ／Ｏ処理数を低減でき、Ｉ／Ｏ処理時間を短縮することができる。一方、不連続な領域を対象とするＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求として統合した方が記憶デバイス１８００のＩ／Ｏ処理の実行時間を短縮できないと判定した場合（Ｓ５１１８：Ｎｏ）、Ｉ／Ｏ要求統合追加判定部１４４０は、判定処理の結果をＮｏと判定する。
【０１１２】
図１６の説明に戻り、追加Ｉ／Ｏセクタ生成部１４４１は、Ｉ／Ｏ要求統合追加判定部１４４０から受信したＩ／Ｏ要求情報要素の組に基づいて、これらＩ／Ｏ要求情報要素の組のＩ／Ｏ要求を統合する際に追加するセクタの領域、すなわち、Ｉ／Ｏ要求情報要素の組が対象とする不連続なセクタの領域を連続する領域にするために追加するセクタの領域（追加領域）に対応する、Ｉ／Ｏセクタ情報要素とＩ／Ｏセグメント情報要素とを追加する。
【０１１３】
具体的には、まず、追加Ｉ／Ｏセクタ生成部１４４１は、Ｉ／Ｏ要素情報要素の組のＲ／Ｗフラグ３３１０の設定値がＲＥＡＤであるか否かを判定する。
【０１１４】
この結果、Ｒ／Ｗフラグ３３１０の設定値がＲＥＡＤである場合には、追加Ｉ／Ｏセクタ生成部１４４１は、Ｉ／Ｏセクタ情報要素を生成し、Ｉ／Ｏセクタ情報要素の各項目３１０１の設定値３１０２に、Ｉ／Ｏ要求情報要素に対応するＩ／Ｏセクタ情報要素の設定値３１０２を複製する。更に、追加Ｉ／Ｏセクタ生成部１４４１は、Ｓ５１１４と同様の方法で追加区間の先頭セクタＡとセクタ数Ｂとを算出して、生成したＩ／Ｏセクタ情報要素の先頭セクタ３１１０とセクタ数３１１１とに設定する。また、追加Ｉ／Ｏセクタ生成部１４４１は、追加Ｉ／Ｏフラグ３１２０の設定値を、追加領域であることを示すＯＮにする。次に、追加Ｉ／Ｏセクタ生成部１４４１は、セクタ数Ｂと同じアドレス長となる記憶部１７００の領域を示す１、又は、複数のＩ／Ｏセグメント情報要素を生成する。次いで、追加Ｉ／Ｏセクタ生成部１４４１は、生成した１又は複数のＩ／Ｏセグメント情報要素を含むＩ／Ｏセグメントテーブル３２００のポインタを、生成したＩ／Ｏセクタ情報要素のＩ／Ｏセグメントテーブルポインタ３１１２の設定値に設定し、生成したＩ／Ｏセグメント情報要素の数をセグメント数３１１４に設定する。
【０１１５】
一方、Ｒ／Ｗフラグ３３１０の設定値がＷＲＩＴＥである場合には、追加Ｉ／Ｏセクタ生成部１４４１は、Ｓ５１１４と同様の方法で追加領域の先頭セクタＡとセクタ数Ｂとを算出して、Ｉ／Ｏセクタ参照テーブル３８００から先頭セクタＡとセクタ数Ｂが示す追加領域を含む領域に対応するＩ／Ｏセクタ情報要素を特定する。追加Ｉ／Ｏセクタ生成部１４４１は、Ｉ／Ｏセクタ参照テーブル３８００から特定したＩ／Ｏセクタ情報要素のＩ／Ｏセクタ情報要素ポインタを削除する。
【０１１６】
更に、追加Ｉ／Ｏセクタ生成部１４４１は、特定したＩ／Ｏセクタ情報要素の先頭セクタ３１１０の設定値と先頭セクタＡが異なる場合、先頭セクタ３１１０の設定値と先頭セクタＡとの差分の領域に対応する領域を示すＩ／Ｏセグメント情報要素を削除するとともに、セクタ数３１１１の設定値から、先頭セクタ３１１０の設定値と先頭セクタＡとの差分を引いた値を新たな設定値とし、セグメント数３１１４の設定値から、削除したＩ／Ｏセグメント情報要素の数を引いた値を新たな設定値とする。また、追加Ｉ／Ｏセクタ生成部１４４１は、セクタ数３１１１の設定値とセクタ数Ｂとが異なる場合、セクタ数３１１１の設定値とセクタ数Ｂとの差分が示す領域に対応する領域を示すＩ／Ｏセグメント情報要素を削除し、セクタ数３１１１の設定値をセクタ数Ｂとし、削除したＩ／Ｏセグメント情報要素の数だけセグメント数３１１４の設定値から引く。次に、追加Ｉ／Ｏセクタ生成部１４４１は、特定したＩ／Ｏセグメント情報要素のＲ／Ｗフラグ３１１５の設定値をＷＲＩＴＥとし、追加Ｉ／Ｏフラグ３１２０の設定値をＯＮとする。
【０１１７】
追加Ｉ／Ｏセクタ生成部１４４１は、Ｉ／Ｏセクタ情報要素を追加した後、矢印１３０５Ｂ２に示すように、Ｉ／Ｏセクタ情報要素と、Ｉ／Ｏ要求情報要素の組と、をＩ／Ｏセクタ追加部１４４２に送信する。
【０１１８】
Ｉ／Ｏセクタ追加部１４４２は、追加Ｉ／Ｏセクタ生成部１４４１からＩ／Ｏセクタ情報要素と、Ｉ／Ｏ要求情報要素の組とを受信すると、受信したＩ／Ｏセクタ情報要素のセグメント数３１１４の設定値と、Ｉ／Ｏ要求情報要素の組の合計セグメント数３３１４との和が最大セグメント数制限３５１７の設定値以下である場合、Ｉ／Ｏセクタ追加部１４２１と同様の処理を行って、矢印１３０５Ｂ３に示すように、Ｉ／Ｏ要求情報要素の組をＩ／Ｏ統合部１４５０へ送信する。
【０１１９】
Ｉ／Ｏ統合部１４５０は、Ｉ／Ｏセクタ追加部１４４２から受信したＩ／Ｏ要求情報要素の組を１つのＩ／Ｏ要求情報要素に統合する。具体的には、Ｉ／Ｏ統合部１４５０は、先頭セクタ３３１２の設定値が小さいＩ／Ｏ要求情報要素（すなわち、前方対象Ｉ／Ｏ要求情報要素）の未転送セクタ数３３１３、合計セクタ数３３１４、及び合計セグメント数３３１５の設定値に、後方対象Ｉ／Ｏ要求情報要素の設定値を加算し、前方対象Ｉ／Ｏ要求情報の終端Ｉ／Ｏセクタポインタ３３１７が示すＩ／Ｏセクタ情報要素のＩ／Ｏセクタ連結ポインタ３１１８の設定値を、後方対象Ｉ／Ｏ要求情報要素の先頭Ｉ／Ｏセクタポインタ３３１６の設定値とし、前方対象Ｉ／Ｏ要求情報要素の終端Ｉ／Ｏセクタポインタ３３１７の設定値を、後方対象Ｉ／Ｏ要求情報要素の終端Ｉ／Ｏセクタポインタ３３１７の設定値とする。その後、Ｉ／Ｏ統合部１４５０は、前方対象Ｉ／Ｏ要求情報要素のＩ／Ｏ要求リストポインタ３３１１の設定値が示すＩ／Ｏ要求リスト３７００から、後方対象Ｉ／Ｏ要求情報要素に対応する項目及び設定値を削除し、後方対象Ｉ／Ｏ要求情報要素を削除する。この処理により、前方対象Ｉ／Ｏ要求情報要素は、追加領域と、後方対象Ｉ／Ｏ要求情報要素が対象とする領域とを含む連続した領域を対象とすることとなる。すなわち、１つのＩ／Ｏ要求情報要素に統合されることとなる。
【０１２０】
最後に、Ｉ／Ｏ統合部１４５０は、矢印１３０６に示すように、処理をＩ／Ｏ要求発行判定部１４６０に移す。
【０１２１】
Ｉ／Ｏ要求発行判定部１４６０は、Ｉ／Ｏ要求を発行すべきか否かを判定する。具体的には、Ｉ／Ｏ要求発行判定部１４６０は、まず、現時刻とＩ／Ｏ要求キューテーブル３５００の開始時間３５１８の設定値との差が最大保留時間制限３５１４の設定値以上である場合、又は、要求数３５１０の設定値が最大要求数制限３５１５の設定値以上である場合、プラグフラグ３５１３の設定値を閉鎖とし、状態フラグ３５１２の設定値を受付不可とし、矢印１３０７に示すように、Ｉ／Ｏセクタ参照テーブル更新部１４７０へ処理を移す。一方、上記以外の場合は、Ｉ／Ｏ要求発行判定部１４６０は、状態フラグ３５１２の設定値を受付可とし、汎用ブロック部１３００からＩ／Ｏセクタ情報要素３１５０を受信するまで、Ｉ／Ｏ要求発行判定部１４６０の処理を繰り返し実行する。
【０１２２】
Ｉ／Ｏセクタ参照テーブル更新部１４７０は、Ｉ／Ｏ要求キューテーブル３５００のＩ／Ｏ要求リストポインタ３５１１からＩ／Ｏ要求リスト３７００が示すＩ／Ｏ要求情報要素が対象とするセクタの領域と、Ｉ／Ｏセクタ参照テーブル３８００が示すＩ／Ｏセクタ情報要素が対象とするセクタの領域とが重複しているか否かを判定し、重複している場合、Ｉ／Ｏセクタ参照テーブル３８００から、対象とするセクタの領域が重複しているＩ／Ｏセクタ情報要素のポインタを削除し、その後、Ｉ／Ｏ情報設定部１４８０に処理を移行する。
【０１２３】
Ｉ／Ｏ情報設定部１４８０は、Ｉ／Ｏ要求キューテーブル３５００のＩ／Ｏ情報リストポインタ３５１９が示すＩ／Ｏ情報リスト３６００に、Ｉ／Ｏ要求キューテーブル３５００のＩ／Ｏ要求リストポインタ３５１１の設定値が示すＩ／Ｏ要求リスト３７００に登録されているＩ／Ｏ要求情報要素の数分のＩ／Ｏ情報要素を生成する。具体的には、Ｉ／Ｏ情報設定部１４８０は、各Ｉ／Ｏ情報要素の合計セクタ数３６１０及び合計セグメント数３６１１の設定値を、各Ｉ／Ｏ要求情報要素の合計セクタ数３３１４及び合計セグメント数３３１５に設定し、各Ｉ／Ｏ情報要素の開始時刻３６１２の設定値と、各Ｉ／Ｏ要求情報要素に対応する全てのＩ／Ｏセクタ情報要素の開始時刻３１１９の設定値とに現時刻を記載し、各Ｉ／Ｏ要求情報要素に対応する全てのＩ／Ｏセクタ情報要素のＩ／Ｏ情報リストポインタ３１１７の設定値にＩ／Ｏ情報リストポインタ３５１９の設定値を設定する。最後に、Ｉ／Ｏ情報設定部１４８０は、Ｉ／Ｏ要求リストポインタ３５１１が示すＩ／Ｏ要求リスト３７００を、矢印１４０１に示すように、デバイスドライバ部１５００へ送信する。
【０１２４】
図１７は、デバイスドライバ部１５００の機能ブロック図である。
【０１２５】
デバイスドライバ部１５００は、データ転送部１５２０、及びデータ転送完了通知部１５３０を有する。
【０１２６】
データ転送部１５２０は、Ｉ／Ｏスケジューラ部１４００からＩ／Ｏ要求リスト３７００を受信する。データ転送部１５２０は、Ｉ／Ｏ要求リスト３７００を受信すると、Ｉ／Ｏ要求リスト３７００が示すＩ／Ｏ要求情報要素のＲ／Ｗフラグ３３１０の設定値がＲＥＡＤの場合、Ｉ／Ｏ要求情報要素の先頭Ｉ／Ｏセクタポインタ３３１６が示すＩ／Ｏセクタ情報要素の先頭セクタ３１１０の設定値が示す先頭セクタから、セクタ数３１１１の設定値が示すセクタ数分の領域のデータを記憶デバイス１８００から読み出し、Ｉ／Ｏセグメントテーブルポインタ３１１２の設定値が示すＩ／Ｏセグメントテーブル３２００のＩ／Ｏセグメント情報要素の先頭アドレス３２１０の設定値が示す先頭アドレスからオフセット３２１２の設定値だけ後のアドレスから、アドレス長３２１１の設定値のアドレス長分の、記憶部１７００の領域に読み出したデータを書込む。ここで、データ転送部１５２０は、セクタから読んだデータを、複数のＩ／Ｏセグメント情報要素に対応する複数の領域に分散して書込むことも可能である。
【０１２７】
データ転送部１５２０は、Ｉ／Ｏセクタ情報要素に対応する領域のデータ転送が全て終わると、Ｉ／Ｏ要求情報要素の未転送セクタ数３３１３の設定値からＩ／Ｏセクタ情報要素のセクタ数３１１１の設定値を引き、矢印１４０３に示すように、Ｉ／Ｏセクタ情報要素をデータ転送完了通知部１５３０へ転送する。
【０１２８】
一方、Ｉ／Ｏ要求リスト３７００が示すＩ／Ｏ要求情報要素のＲ／Ｗフラグ３３１０がＷＲＩＴＥの場合、データ転送部１５２０は、記憶部１７００のＩ／Ｏセグメント情報要素に対応する領域からデータを読み出し、記憶デバイス１８００のＩ／Ｏセクタ情報要素の先頭セクタからセクタ数３１１１の設定値分のセクタ数までの領域に記憶部１７００から読み出したデータを書込む。
その後、データ転送部１５２０は、Ｉ／Ｏ要求情報要素の未転送セクタ数３３１３の設定値を更新し、Ｉ／Ｏセクタ情報要素をデータ転送完了通知部１５３０へ転送する。
【０１２９】
また、データ転送部１５２０は、Ｉ／Ｏ要求リスト３７００が示す全てのＩ／Ｏ要求情報要素が示すＩ／Ｏ処理を処理すると、Ｉ／Ｏ要求キューテーブル３５００のプラグフラグ３５１３の設定値を開放に設定する。
【０１３０】
データ転送完了通知部１５３０は、Ｉ／Ｏセクタ情報要素のＩ／Ｏ終了処理設定３１１６の設定値である処理命令をＩ／Ｏ終了処理部１６００へ通知する。
【０１３１】
図１８は、Ｉ／Ｏ終了処理部１６００の機能ブロック図である。
【０１３２】
Ｉ／Ｏ終了処理部１６００は、Ｉ／Ｏセクタ終了判定部１６１０、追加Ｉ／Ｏセクタ終了処理部１６２０、及びＩ／Ｏセクタ終了処理部１６３０を有する。
【０１３３】
Ｉ／Ｏセクタ終了判定部１６１０は、矢印１５０１に示すように、デバイスドライバ部１５００からＩ／Ｏセクタ情報要素を受信する。Ｉ／Ｏセクタ情報要素を受信した場合のＩ／Ｏセクタ終了判定部１６１０の処理を、別図を用いて説明する。
【０１３４】
図２２は、Ｉ／Ｏセクタ終了判定部１６１０の処理のフローチャートである。
【０１３５】
Ｓ５２０１で、Ｉ／Ｏセクタ終了判定部１６１０は、Ｉ／Ｏ環境設定テーブル３４００の動的Ｉ／Ｏ判定フラグ３４１０の設定値がＯＮであるか否かを判定する。この結果、動的Ｉ／Ｏ判定フラグ３４１０の設定値がＯＮである場合、Ｉ／Ｏセクタ終了判定部１６１０は、処理をＳ５２０２に進める一方、動的Ｉ／Ｏ判定フラグ３４１０の設定値がＯＦＦである場合、Ｉ／Ｏセクタ終了判定部１６１０は、処理をＳ５２０４に進める。
【０１３６】
Ｓ５２０２で、Ｉ／Ｏセクタ終了判定部１６１０は、Ｉ／Ｏ情報リスト３６００から、Ｉ／Ｏセクタ情報要素の開始時刻３１１９の設定値と同じ開始時刻３６１２の設定値を持つＩ／Ｏ情報要素を取得し、取得したＩ／Ｏ情報要素の終了時刻３６１３の設定値に現時刻を書込み、終了セクタ数３６１４の設定値にセクタ数３１１１の設定値を加算する。
【０１３７】
Ｓ５２０３で、Ｉ／Ｏセクタ終了判定部１６１０は、Ｉ／Ｏセクタ情報ポインタのＩＤを用いてＩ／Ｏセクタ再構築テーブル３９００から終了処理の設定（例えば、Ｉ／Ｏ終了処理設定Ａ）を取得し、Ｉ／Ｏセクタ情報要素のＩ／Ｏ終了処理設定３１１６の設定値を、取得した終了処理の設定に変更する。
【０１３８】
Ｓ５２０４で、Ｉ／Ｏセクタ終了判定部１６１０は、Ｉ／Ｏセクタ情報要素の追加Ｉ／Ｏフラグ３１２０の設定値がＯＮであるか否かを判定する。この結果、追加Ｉ／Ｏフラグ３１２０の設定値がＯＮである場合（Ｓ５２０４：Ｙｅｓ）、Ｉ／Ｏセクタ終了判定部１６１０は、追加Ｉ／Ｏセクタ終了処理部１６２０にＩ／Ｏセクタ情報要素を送信して、処理を移行する一方、追加Ｉ／Ｏフラグ３１２０の設定値がＯＮでない場合（Ｓ５２０４：Ｎｏ）、Ｉ／Ｏ終了処理設定３１１６の設定値に対応する処理を実行するようにＩ／Ｏセクタ終了処理部１６３０を起動する。
【０１３９】
図１８の説明に戻り、追加Ｉ／Ｏセクタ終了処理部１６２０は、Ｉ／Ｏセクタ終了判定部１６１０から受信したＩ／Ｏセクタ情報要素のＲ／Ｗフラグ３１１５の設定値がＷＲＩＴＥの場合、そのまま処理を終了する。
【０１４０】
一方、Ｉ／Ｏセクタ情報要素のＲ／Ｗフラグ３１１５の設定値がＲＥＡＤの場合であって、Ｉ／Ｏ環境設定テーブル３４００のＲＭＷフラグ３４１１の設定値がＯＮである場合、又は、Ｉ／Ｏ環境設定テーブル３４００のキャッシュフラグ３４１２の設定値がＯＮである場合、追加Ｉ／Ｏセクタ終了処理部１６２０は、Ｉ／Ｏセクタ参照テーブル３８００に、Ｉ／Ｏセクタ情報要素へのポインタを追加する一方、上記以外の場合は、Ｉ／Ｏセクタ参照テーブル３８００を更新しない。
【０１４１】
このように、ＲＭＷフラグ３４１１の設定値がＯＮである場合、すなわち、ＲＭＷを行う場合又はキャッシュが必要な場合には、本来必要のデータではなかった追加領域に対応するデータをＩ／Ｏセクタ参照テーブル３８００に登録するようにしているので、後に、Ｉ／Ｏセクタ参照テーブル３８００を参照してＩ／Ｏセクタ情報要素を取得し、追加領域のデータが記憶部１７００にキャッシュされていることを特定し、そのデータを利用することができる。例えば、アプリケーション部１２００の処理においては、読み出したデータを処理して更新データを作成し、記憶デバイス１８００に書込むことが行われることがあり、記憶デバイス１８００に対してＲＭＷを行う場合には、一般には、記憶デバイス１８００の処理に用いたデータの領域に連続する領域のデータを記憶デバイス１８０から読み出し、更新データと連続するデータとを用いて記憶デバイス１８００の他の領域にデータを書き込むこととなるが、本実施形態では、読み出したデータの領域に連続する領域のデータ、すなわち、アプリケーション部１２００の処理に必要のなかった追加領域のデータについて記憶部１７００にキャッシュしているので、ＲＭＷに必要なデータを、記憶デバイス１８００から読み出す必要性を低減でき、処理を軽減することができる。また、記憶デバイス１８００がＲＭＷに対応する処理を実行する必要がないので、記憶デバイス１８００の処理を軽減することができる。
【０１４２】
Ｉ／Ｏセクタ終了処理部１６３０は、Ｉ／Ｏセクタ終了判定部１６１０から命令されたＩ／Ｏ終了処理設定３１１６として設定された終了処理を実行し、矢印１６０１に示すように、Ｉ／Ｏ処理完了通知をアプリケーション部１２００へ送信する。これにより、アプリケーション部１２００は、Ｉ／Ｏ終了処理部１６００からＩ／Ｏ処理完了通知を受け取り、所定の処理を継続する。
【０１４３】
以上、一実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１４４】
１０００：計算機システム、１１００：Ｉ／Ｏ環境設定部、１２００：アプリケーション部、１３００：汎用ブロック部、１４００：Ｉ／Ｏスケジューラ部、１５００：デバイスドライバ部、１６００：Ｉ／Ｏ終了処理部、１７００：記憶部、１８００：記憶デバイス
【図１】
2015060486.tif 000003
【図２】
2015060486.tif 000004
【図３】
2015060486.tif 000005
【図４】
2015060486.tif 000006
【図５】
2015060486.tif 000007
【図６】
2015060486.tif 000008
【図７】
2015060486.tif 000009
【図８】
2015060486.tif 000010
【図９】
2015060486.tif 000011
【図１０】
2015060486.tif 000012
【図１１】
2015060486.tif 000013
【図１２】
2015060486.tif 000014
【図１３】
2015060486.tif 000015
【図１４】
2015060486.tif 000016
【図１５】
2015060486.tif 000017
【図１６】
2015060486.tif 000018
【図１７】
2015060486.tif 000019
【図１８】
2015060486.tif 000020
【図１９】
2015060486.tif 000021
【図２０】
2015060486.tif 000022
【図２１】
2015060486.tif 000023
【図２２】
2015060486.tif 000024
【図２３】
2015060486.tif 000025