(57)【要約】【課題】  本発明は、コンピュータプロセス毎に適したＩ／Ｏスケジューラを設定することを目的とする。【解決手段】  本発明に係る情報処理装置は、記憶装置に対して複数のコンピュータプロセスからデータの入出力要求を行うことが可能な情報処理装置であって、前記複数のコンピュータプロセスの内、データの入出力要求を行うコンピュータプロセスの情報を取得する取得手段と、前記取得手段で取得されたコンピュータプロセスの情報に応じて、前記データの入出力要求を行う際のＩ／Ｏスケジューラを設定する設定手段と、を有することを特徴とする。【選択図】  図２
2015130095.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置に対して複数のコンピュータプロセスからデータの入出力要求を行うことが可能な情報処理装置であって、
前記複数のコンピュータプロセスの内、データの入出力要求を行うコンピュータプロセスの情報を取得する取得手段と、
前記取得手段で取得されたコンピュータプロセスの情報に応じて、前記データの入出力要求を行う際のＩ／Ｏスケジューラを設定する設定手段と、を有することを特徴とする情報処理装置。
【請求項２】
前記取得手段は、前記コンピュータプロセスが入出力を実行した場合に、前記コンピュータプロセスの情報を取得することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記取得手段は、前記コンピュータプロセスの情報として、前記コンピュータプロセスのプロセスＩＤと前記Ｉ／Ｏスケジューラの種別情報との組み合わせとを取得し、
前記設定手段は、前記コンピュータプロセスのプロセスＩＤと前記Ｉ／Ｏスケジューラの名前との組み合わせに応じて、前記データの入出力要求を行う際のＩ／Ｏスケジューラを設定することを特徴とする請求項１もしくは２のいずれか１項に記載の情報処理装置。
【請求項４】
前記取得手段は、あらかじめ設定されたＩ／Ｏスケジューラ設定ファイルから前記コンピュータプロセスのプロセスＩＤと前記Ｉ／Ｏスケジューラの種別情報との組み合わせとを取得することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記取得手段は、前記コンピュータプロセスの情報として、前記コンピュータプロセスが所属するグループのＩＤと前記Ｉ／Ｏスケジューラの種別情報との組み合わせとを取得し、
前記設定手段は、前記コンピュータプロセスが所属するグループのＩＤと前記Ｉ／Ｏスケジューラの種別情報との組み合わせに応じて、前記データの入出力要求を行う際のＩ／Ｏスケジューラを設定することを特徴とする請求項１もしくは２のいずれか１項に記載の情報処理装置。
【請求項６】
前記取得手段は、あらかじめ設定されたＩ／Ｏスケジューラ設定ファイルから前記コンピュータプロセスが所属するグループのＩＤと前記Ｉ／Ｏスケジューラの種別情報との組み合わせとを取得することを特徴とする請求項３に記載の情報処理装置。
【請求項７】
前記設定手段は、前記取得手段で取得された前記Ｉ／Ｏスケジューラの種別情報と、
前記コンピュータプロセスが入出力要求を行う対象の記憶装置に関連付けられている前記Ｉ／Ｏスケジューラの種別情報と、が一致しなかった場合、前記取得手段で取得された前記Ｉ／Ｏスケジューラの種別情報のＩ／Ｏスケジューラを設定することを特徴とする請求項３乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
記憶装置に対して複数のコンピュータプロセスからデータの入出力要求を行うことが可能な情報処理方法であって、
前記複数のコンピュータプロセスの内、データの入出力要求を行うコンピュータプロセスの情報を取得する取得工程と、
前記取得工程で取得されたコンピュータプロセスの情報に応じて、前記データの入出力要求を行う際のＩ／Ｏスケジューラを設定する設定工程と、を有することを特徴とする情報処理方法。
【請求項９】
コンピュータを、
記憶装置に対して複数のコンピュータプロセスからデータの入出力要求を行うことが可能な情報処理装置であって、
前記複数のコンピュータプロセスの内、データの入出力要求を行うコンピュータプロセスの情報を取得する取得手段と、
前記取得手段で取得されたコンピュータプロセスの情報に応じて、前記データの入出力要求を行う際のＩ／Ｏスケジューラを設定する設定手段と、を有することを特徴とする情報処理装置として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及びコンピュータプログラムに関する。
【背景技術】
【０００２】
パーソナルコンピュータに代表される情報処理装置においては、様々な種類のコンピュータプログラムが用いられるようになってきている。例えば、データ入出力のスループットを重視するものや、一定時間内でデータ入出力が終了することを期待するものなど、二次記憶装置に入出力を行う様々なコンピュータプログラムがある。
【０００３】
このような多様化したコンピュータプログラムに対し、多くのシステムでは複数のＩ／Ｏスケジューラを備えるようになった。Ｉ／Ｏスケジューラとは、二次記憶装置に対して入出力操作をどの様に送信するのかを決定する仕組みである。
【０００４】
このＩ／Ｏスケジューラは、システム起動時あるいは二次記憶装置装着時に二次記憶装置毎に設定されている。
【０００５】
特許文献１には、二次記憶装置のアクセスパターン毎に入出力操作処理の前段階のキューを持ち、二次記憶装置へのアクセスが有るたびにそのパターンを解析して、入出力操作をシステム内の各キューに投入することが開示されている。その後、特許文献１に開示されている技術においては、二次記憶装置が、一定時間ごとに各キューの格納状況に応じてスケジューリングを実施する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−２３９６２
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１に開示されている技術では、記憶装置に対して入出力要求を行うコンピュータプロセスそれぞれに適したＩ／Ｏスケジューラの設定をしていたわけではなかった。よって、コンピュータプロセス毎に適したＩ／Ｏスケジューラが選択されず、Ｉ／Ｏ処理の低速化や非効率なブロック割り当てが発生する可能性があった。
【０００８】
本発明は、上記課題を鑑みてなされたものであり、コンピュータプロセス毎に適したＩ／Ｏスケジューラを設定することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明に係る情報処理装置は、記憶装置に対して複数のコンピュータプロセスからデータの入出力要求を行うことが可能な情報処理装置であって、
前記複数のコンピュータプロセスの内、データの入出力要求を行うコンピュータプロセスの情報を取得する取得手段と、前記取得手段で取得されたコンピュータプロセスの情報に応じて、前記データの入出力要求を行う際のＩ／Ｏスケジューラを設定する設定手段と、を有することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、コンピュータプロセス毎に適したＩ／Ｏスケジューラを設定することができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理装置の構成を示す概略図である。
【図２】情報処理装置の機能構成を示す概略図である。
【図３】Ｉ／Ｏスケジューラの設定を設定ファイルに書込む処理を示すフローチャートである。
【図４】Ｉ／Ｏスケジューラの設定ファイルを表す概略図である。
【図５】プログラムのデータを二次記憶装置のファイルに書込む処理を示すフローチャートである。
【図６】マウント情報ファイルを表す概略図である。
【図７】Ｉ／Ｏスケジューラを変更する処理を示すフローチャートである。
【図８】Ｉ／Ｏスケジューラの管理情報ファイルを表す概略図である。
【図９】Ｉ／Ｏスケジューラの処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
（Ｉ／Ｏスケジューラの概略）
まず、Ｉ／Ｏスケジューラの概略について説明する。Ｉ／Ｏスケジューラは、コンピュータプログラムが入出力を実施する際に動作するものである。
【００１３】
コンピュータプログラムが入出力を実施すると、最初に、システムに備わるファイルシステムで入出力処理が実施される。コンピュータファイルシステムは、受け取った入出力操作に含まれる入出力対象のファイル名と入出力データ、サイズ、ファイルのオフセットを元に、二次記憶装置のどの位置にファイルを入出力するかを決定する。
【００１４】
入出力の位置を決定した後、ファイルシステムは、決定した入出力位置と入出力データ、サイズを、入出力要求として纏めてＩ／Ｏスケジューラに送信する。
【００１５】
Ｉ／Ｏスケジューラは、この入出力要求をスケジューリングして、デバイスドライバに入出力要求を送信する。スケジューリングの方法は、Ｉ／Ｏスケジューラの種類によって異なる。Ｉ／Ｏスケジューラの種類には、ｎｏｏｐスケジューラ、ａｎｔｉｃｉｐａｔｏｒｙスケジューラ、ｃｆｑスケジューラなどがある。
【００１６】
ｎｏｏｐスケジューラは、Ｉ／Ｏスケジューラに到達した入出力要求を、そのままデバイスドライバに送信するスケジューラである。
【００１７】
ａｎｔｉｃｉｐａｔｏｒｙスケジューラは、将来の入出力要求を予測したスケジューリングを行うスケジューラである。予測方法としては、次の入出力要求が、前の入出力要求に近いディスクブロックへの要求だと予想して、次のブロックへの入出力要求をアプリケーションに出させる様に、強制的に遅延を入れるものである。
【００１８】
ｃｆｑスケジューラは、全てのコンピュータプログラムにＩ／Ｏキューを用意し、入出力要求を各Ｉ／Ｏキューに均等に入れる様にして、各コンピュータプログラム間で均等な入出力を実現するスケジューラである。
【００１９】
使用するＩ／Ｏスケジューラの種類は、システム起動時にシステムによって各記憶装置に設定される。システムは、起動時に使用するＩ／Ｏスケジューラの初期化を行い、記憶装置とＩ／Ｏスケジューラを関連づける。これにより、記憶装置にアクセスした際に、関連付けられたＩ／Ｏスケジューラが呼び出されるようになる。
【００２０】
Ｉ／Ｏスケジューラは、プログラムが仮想ファイルシステムにあるＩ／Ｏスケジューラを設定するファイルにＩ／Ｏスケジューラの名前（種別情報）を書込むことで変更できる。設定するファイルに書込みが行われると、システムが新しく使用するＩ／Ｏスケジューラの初期化を行い、記憶装置と新しいＩ／Ｏスケジューラを関連づける。その後、古いＩ／Ｏスケジューラを停止する。これにより、変更後からは、新しいＩ／Ｏスケジューラが呼び出されるようになる。
【００２１】
従来のシステムでは、コンピュータプログラムが入出力を行う前に、既にＩ／Ｏスケジューラは設定されていた。この方法では、コンピュータプログラムが入出力を行う前に、別のコンピュータプログラムなどによって、適切でないＩ／Ｏスケジューラに変更される可能性もあった。以下、図面を参照して本実施例を詳細に説明する。本実施例では、予め設定ファイルにプログラムが使用するＩ／Ｏスケジューラを設定しておき、入出力時にその設定ファイルを参照して、設定したＩ／Ｏスケジューラに変更する。
【００２２】
（本実施例における情報処理装置の構成）
図１は、本実施例の情報処理装置の構成を示すブロック図である。
【００２３】
同図において、１００は情報処理装置である。１０１はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。１０２はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの一次記憶装置である。
【００２４】
情報処理装置１００においては、通常１コアのＣＰＵ１０１であれば複数のコンピュータプログラムのうちの１つを処理して、処理は一定期間ごとに他のコンピュータプログラムに切り替えて実施される。ＣＰＵ１０１に、演算処理等を行うプロセッサコアを複数備えても良いし、ＣＰＵ１０１を情報処理装置１００に複数備えても良い。一次記憶装置１０２は、主に二次記憶装置から読込んだプログラムやデータを保持する。一次記憶装置１０２は、ＤＤＲ  ＳＤＲＡＭ等の揮発性メモリとしてのＤＲＡＭや、ブートプログラムを保持する不揮発性メモリとしてのマスクＲＯＭやフラッシュメモリ等を備えている。
【００２５】
１０３はＩ／Ｏコントローラ１０３である。１０４はＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、フラッシュメモリなどを備える二次記憶装置である。ＳＳＤは不揮発性のフラッシュメモリを内蔵する不揮発性の記憶装置であり、ＨＤＤと同等の機能を実現可能に構成されている。
【００２６】
ファイルやディレクトリ等のファイルシステムに関わるデータは、二次記憶装置１０４に記録される。
【００２７】
なお、二次記憶装置１０４にあるファイルの操作は、ＣＰＵ１０１が一次記憶装置１０２上のプログラムを実行することで実現される、オペレーティングシステムからＩ／Ｏコントローラ１０３に対して、ＲＥＡＤ要求、ＷＲＩＴＥ要求を行うことで実現する。
【００２８】
（本実施例における情報処理装置の機能構成）
図２は、本実施例における情報処理装置の機能構成を示すブロック図である。同図に置いて、情報処理装置１００は１つ以上の二次記憶装置１０４を搭載している。
【００２９】
２０１は、プロセスが使用するＩ／Ｏスケジューラを設定する、Ｉ／Ｏスケジューラ設定部である。プロセスは、一次記憶装置１０２上にあるコンピュータプログラムの動作中のインスタンスを意味する。
【００３０】
Ｉ／Ｏスケジューラ設定部２０１は、プロセスが使用するＩ／Ｏスケジューラを指定すると、そのＩ／Ｏスケジューラの名前とプロセスのプロセスＩＤの組み合わせをＩ／Ｏスケジューラ設定ファイル２０２に書込む。プロセスＩＤは、プログラムを実行した時に割り当てる、オペレーティングシステムが現在実行されているプロセスを識別するためのプログラムごとに一意な識別子である。Ｉ／Ｏスケジューラ設定ファイル２０２は一次記憶装置１０２のメモリ上に作成しても良いし、二次記憶装置１０４に作成しても良い。
【００３１】
データ入出力操作部２０３は、ＣＰＵ１０１が一次記憶装置１０２上のコンピュータプログラムを実行することで実現される、データ入出力を実施する。データ入出力操作部２０３は、二次記憶装置１０４がマウントされていなければ、マウントを行う。なお、本実施例における「マウント」とは、デバイスを認識した上で、ファイルシステムが二次記憶装置１０４を認識させ、ファイルにアクセスできるようにさせる操作のことを示す。
【００３２】
情報処理装置１００の論理パーティションをツリー構造に纏めている場合に、ツリー構造に二次記憶装置１０４をディレクトリとして登録する作業とも説明できる。なお、逆の操作（例えば、ツリー構造から切り離す作業）は「アンマウント」と呼ぶ。マウントを行った場合、データ入出力操作部２０３は、二次記憶装置１０４がどのディレクトリに登録されたかを記憶するマウント情報ファイル２０４に、二次記憶装置１０４とディレクトリの組み合わせを書込む。このマウント情報ファイル２０４は、一次記憶装置１０２のメモリ上に作成しても良いし、二次記憶装置１０４に作成しても良い。その後、データ入出力操作部２０３は、マウントしたディレクトリにあるファイルを指定して、データの入出力操作をオペレーティングシステムに送信する。
【００３３】
データ入出力操作部２０３の実行後に、ファイルシステム処理部２０５を実行する。ファイルシステム処理部２０５は、まずデータ入出力操作部２０３から入出力操作を受け取る。次に、ファイルシステム処理部２０５は、二次記憶装置１０４に含まれる管理領域から、入出力操作に含まれる入出力対象のファイル名を検索する。この管理領域は、二次記憶装置１０４の固定領域に記録されており、この領域にはファイル名と実態の記録セクタ位置が記録されている。ファイル名から記録セクタ位置を特定すると、ファイルシステム処理部２０５は、入出力操作に含まれるファイルのオフセットからファイル内のどの位置を入出力するかを決定する。そして、ファイルシステム処理部２０５は、決定したセクタ位置、入出力する二次記憶装置１０４、入出力の種類（ＲＥＡＤまたはＷＲＩＴＥ）、入出力するサイズ、入出力するデータの開始位置を一つの入出力要求に纏めて、Ｉ／Ｏスケジューラに送信する。
【００３４】
ファイルシステム処理部２０５の実行後、Ｉ／Ｏスケジューラ変更部２０６を実行する。Ｉ／Ｏスケジューラ変更部２０６は、まず呼び出したプロセスのプロセスＩＤを取得する。その後、Ｉ／Ｏスケジューラ設定ファイル２０２を読込んで、プロセスのプロセスＩＤを検索し、そのプロセスＩＤの組み合わせとなるＩ／Ｏスケジューラの名前を取得する。取得後、マウント情報ファイル２０４を読込み、入出力対象の二次記憶装置１０４を取得する。そして、Ｉ／Ｏスケジューラ管理情報ファイル２０７を読込む。Ｉ／Ｏスケジューラ管理情報ファイル２０７は、一次記憶装置１０２に存在し、二次記憶装置１０４にどのＩ／Ｏスケジューラが関連付けられているかが書込まれている。このＩ／Ｏスケジューラ管理情報ファイル２０７から入出力対象の二次記憶装置１０４を検索し、検索して得たＩ／Ｏスケジューラの名前と、Ｉ／Ｏスケジューラ設定ファイル２０２から取得したＩ／Ｏスケジューラの名前を比較する。比較した結果一致しなければ、Ｉ／Ｏスケジューラを、プロセスＩＤの組み合わせとなるＩ／Ｏスケジューラに切り替える。そして、Ｉ／Ｏスケジューラ管理情報ファイル２０７の入出力対象の二次記憶装置１０４に関連付けられているＩ／Ｏスケジューラの名前を、Ｉ／Ｏスケジューラ設定ファイル２０２から取得したＩ／Ｏスケジューラの名前に変更する。
【００３５】
Ｉ／Ｏスケジューラ変更部２０６実行後に、Ｉ／Ｏスケジューラ処理部２０８を実行する。Ｉ／Ｏスケジューラ処理部２０８は、切り替えられたＩ／Ｏスケジューラを使用して、ファイルシステム処理部２０５から送られてきた入出力要求をスケジューリングする。
【００３６】
次に、図３〜図９を用いて、本実施例における情報処理装置１００の具体的な処理手順について説明する。
【００３７】
まず、図３、本実施形態におけるプログラムがＩ／Ｏスケジューラを設定する処理手順について説明する。図３は情報処理装置１００において、Ｉ／Ｏスケジューラの設定を行うフローチャートである。
【００３８】
（コンピュータプログラムのプロセスＩＤとＩ／Ｏスケジューラとの対応付け）
（ステップＳ３００）ステップＳ３００では、ＣＰＵ１０１が情報処理装置１００に備わるＩ／Ｏスケジューラの名前を指定する。そして、ステップＳ３０１に移る。  
【００３９】
（ステップＳ３０１）ステップＳ３０１では、ＣＰＵ１０１がＣＰＵ１０１によって実行されるプロセス（コンピュータプロセス）のプロセスＩＤを取得する。プロセスＩＤは、ＣＰＵ１０１がコンピュータプログラムを実行した時にプログラムごとに割り当てられている為、これを取得する。そして、ステップＳ３０２に移る。
【００４０】
（ステップＳ３０２）ステップＳ３０２では、ＣＰＵ１０１がプロセスＩＤとＩ／Ｏスケジューラの名前の組み合わせをＩ／Ｏスケジューラ設定ファイル２０２に書込む。ＣＰＵ１０１は、一次記憶装置１０２にＩ／Ｏスケジューラ設定ファイル２０２を作成する。ＣＰＵ１０１は、プロセスＩＤとＩ／Ｏスケジューラの名前を１つの組み合わせを、Ｉ／Ｏスケジューラ設定ファイル２０２に書込む。
【００４１】
以上の処理によって、Ｉ／Ｏスケジューラ設定ファイル２０２を作成することが出来る。
【００４２】
（Ｉ／Ｏスケジューラ設定ファイル２０２の内容）
図４は、Ｉ／Ｏスケジューラ設定ファイル２０２の内容を示す図である。同図において、状態４００では、プロセスＩＤとＩ／Ｏスケジューラの名前の組み合わせを示す。状態４００では、プロセスＩＤが１０００と１００１での設定したＩ／Ｏスケジューラの名前がｄｅａｄｌｅｎｅ、プロセスＩＤが１００２での設定したＩ／Ｏスケジューラの名前がｃｆｑであることを示す。
【００４３】
また、ＣＰＵ１０１は、Ｉ／Ｏスケジューラ設定ファイル２０２を二次記憶装置１０４に作成しても良い。この場合、ＣＰＵ１０１とＩ／Ｏコントローラ１０３の協働によって、プロセスＩＤとＩ／Ｏスケジューラの名前の組み合わせをＩ／Ｏスケジューラ設定ファイル２０２に書込む。
【００４４】
（コンピュータプログラムがデータ入出力を操作する処理手順）
次に、図５を用いて、本実施形態におけるコンピュータプログラムがデータ入出力を操作する処理手順について説明する。図５は情報処理装置１００において、コンピュータプログラムがデータ入出力を開始するフローチャートである。
【００４５】
（ステップＳ５００）ステップＳ５００では、ＣＰＵ１０１がデータ入出力を行う二次記憶装置１０４がマウントされているかどうかを確認する。マウント情報ファイル２０４には、二次記憶装置１０４のマウント状況が書込まれているため、この情報を読込んで確認する。マウント情報ファイル２０４の内容の詳細は後述するが、マウント情報ファイル２０４には、二次記憶装置の名前とディレクトリ名との組み合わせが記録されている。
【００４６】
本ステップにおいて、マウントされていないと判断された場合は、ステップＳ５０１に移り、マウントされていると判断された場合はステップＳ５０３に移る。
【００４７】
（ステップＳ５０１）ステップＳ５０１では、ＣＰＵ１０１が二次記憶装置１０４をマウントする。ＣＰＵ１０１は、マウントするディレクトリを指定して、マウントを行う。そして、ステップＳ５０２に移る。
【００４８】
（ステップＳ５０２）ステップＳ５０２では、ＣＰＵ１０１がマウント情報ファイル２０４にマウントした二次記憶装置１０４とディレクトリ名の組み合わせを書込む。そして、ステップＳ５０３に移る。
【００４９】
（ステップＳ５０３）ステップＳ５０３では、ＣＰＵ１０１がファイルへのデータ入出力操作をオペレーティングシステムに送信する。データ入出力は、ファイルからデータを読込む場合と、ファイルにデータを書込む場合の２通りが存在する。ファイルからデータを読込む場合は、読込むファイルの領域と読込むサイズを指定して、データ読込みの操作をオペレーティングシステムに送信する。ファイルにデータを書込む場合は、書込むファイルの領域、書込むデータ、書込むデータのサイズを指定して、データ書込みの操作をオペレーティングシステムに送信する。
【００５０】
（マウント情報ファイル２０４）
図６は、前述したマウント情報ファイル２０４の内容を示す図である。同図において、状態６００では、二次記憶装置の名前とディレクトリ名の組み合わせを示す。状態６００では、デバイスＡは／ｍｎｔ／Ａ、デバイスＢは／ｍｎｔ／Ｂにマウントされていることを示す。例えば、前述のステップＳ５０２では、ステップＳ５０１でマウントした二次記憶装置の名前とディレクトリ名の組み合わせを、状態６００に対して追加する。
【００５１】
次に、本実施形例におけるコンピュータプログラムがＩ／Ｏスケジューラを変更する処理手順について説明する。
【００５２】
（コンピュータプログラムがＩ／Ｏスケジューラを変更する処理手順）
図７は情報処理装置１００において、Ｉ／Ｏスケジューラを変更するフローチャートである。以下、図７のフローに沿って各ステップの説明をする。
【００５３】
（ステップＳ７００）ステップＳ７００では、ＣＰＵ１０１がＣＰＵ１０１によって実行されるプロセスのプロセスＩＤを取得する。プロセスＩＤの取得は、図３のステップＳ３０１と同様の方法で取得する。そして、ステップＳ７０１に移る。
【００５４】
（ステップＳ７０１）ステップＳ７０１では、ＣＰＵ１０１がＩ／Ｏスケジューラ設定ファイル２０２、マウント情報ファイル２０４、Ｉ／Ｏスケジューラ管理情報ファイル２０７を読込む。Ｉ／Ｏスケジューラ管理情報ファイル２０７には、二次記憶装置１０４にとＩ／Ｏスケジューラとの関連付けが書込まれている。このＩ／Ｏスケジューラ管理情報ファイル２０７の内容を読込後、ステップＳ７０２に移る。
【００５５】
図８は、上述のＩ／Ｏスケジューラ管理情報ファイル２０７を示す概念図である。
【００５６】
同図において、状態８００では、二次記憶装置１０４とＩ／Ｏスケジューラの名前の組み合わせを示している。状態８００では、デバイスＡに関連付けられているＩ／Ｏスケジューラの名前がｄｅａｄｌｅｎｅ、デバイスＢに関連付けられているＩ／Ｏスケジューラの名前がｃｆｑであることを示している。
【００５７】
（ステップＳ７０２）ステップＳ７０２では、ＣＰＵ１０１がＩ／Ｏスケジューラの変更を行うか否かを判断する。変更を行うか否かの判断には、プロセスＩＤ、Ｉ／Ｏスケジューラ設定ファイル２０２、マウント情報ファイル２０４、およびＩ／Ｏスケジューラ管理情報ファイル２０７に書き込まれている情報を用いる。本ステップにおける処理を具体的に、図４、図６、図８を用いて、例１と例２で説明する。
【００５８】
例１は、プロセスＩＤが１０００、入出力を行うファイルが／ｍｎｔ／Ａ／ＦＩＬＥＡのプロセスの場合で説明する。この場合、図４の状態４００を参照すると、プロセスＩＤが１０００の場合に設定したＩ／Ｏスケジューラの名前はｄｅａｄｌｉｎｅとなる。
【００５９】
一方、図６の状態６００を参照すると、／ｍｎｔ／Ａ以下のファイルはデバイスＡとなる。また、図８の状態８００を参照すると、デバイスＡのＩ／Ｏスケジューラの名前はｄｅａｄｌｉｎｅとなっている。よって、図４の状態４００の参照により得られたＩ／Ｏスケジューラの名前と、図８の状態８００を参照により得られたＩ／Ｏスケジューラの名前とは、共にｄｅａｄｌｉｎｅであるため、Ｉ／Ｏスケジューラを変更する必要はない。よって、変更は行わないと判断する。
【００６０】
例２は、プロセスＩＤが１００１、入出力を行うファイルが／ｍｎｔ／Ｂ／ＦＩＬＥＢのプロセス場合で説明する。図４の状態４００を参照すると、プロセスＩＤが１００１の場合に設定したＩ／Ｏスケジューラの名前はｄｅａｄｌｉｎｅとなる。一方、図６の状態６００を参照すると、／ｍｎｔ／Ｂ／以下のファイルはデバイスＢとなる。また、図８の状態８００を参照すると、デバイスＢのＩ／Ｏスケジューラの名前はｃｆｑとなっている。
【００６１】
よって、図４の状態４００の参照により得られたＩ／Ｏスケジューラの名前と、図８の状態８００を参照により得られたＩ／Ｏスケジューラの名前とは異なっている。そのため、Ｉ／Ｏスケジューラをｃｆｑからｄｅａｄｌｉｎｅに変更すると判断する。変更を行う場合は、ステップＳ７０３に移り、変更を行わない場合は終了する。
【００６２】
（ステップＳ７０３）ステップＳ７０３では、ＣＰＵ１０１が新しく設定するＩ／Ｏスケジューラの初期化処理を行う。初期化処理では、新しく設定するＩ／Ｏスケジューラの機能の有効化や、仮想ファイルシステム上にパラメータをチューニングするためのファイルの作成などを実施する。そして、ステップＳ７０４に移る。
【００６３】
（ステップＳ７０４）ステップＳ７０４では、ＣＰＵ１０１が従来のＩ／Ｏスケジューラにある入出力要求を排出し、リクエストキューに格納する。リクエストキューとは、デバイスを制御するデバイスドライバが使用する、入出力要求を格納するキューである。デバイスドライバは、このリクエストキューから入出力要求を取り出して、実際のデバイスに対してＩ／Ｏ処理を行う。Ｉ／Ｏスケジューラは、入出力要求をスケジューリング中の場合、Ｉ／Ｏスケジューラの中でその入出力要求を保持しているため、これを排出する。そして、ステップＳ７０５に移る。
【００６４】
（ステップＳ７０５）ステップＳ７０５では、ＣＰＵ１０１が従来のＩ／Ｏスケジューラから新しく設定するＩ／Ｏスケジューラに切り替える。具体的には、ＣＰＵ１０１が、従来のＩ／Ｏスケジューラのモジュールを切り離し、新しく設定したＩ／Ｏスケジューラのモジュールを呼び出す様に登録する。そして、ＣＰＵ１０１が、Ｉ／Ｏスケジューラ管理情報ファイル２０７の、二次記憶装置１０４に関連付けられているＩ／Ｏスケジューラの名前を、新しく設定するＩ／Ｏスケジューラの名前に変更する。そして、ステップＳ７０６に移る。
【００６５】
（ステップ７０６）ステップ７０６では、ＣＰＵ１０１が従来のＩ／Ｏスケジューラの機能を停止する。
【００６６】
（本実施形態におけるプログラムがＩ／ＯスケジューラでＩ／Ｏ処理を行う処理）
次に、図９を用いて、本実施形態におけるプログラムがＩ／ＯスケジューラでＩ／Ｏ処理を行う処理手順について説明する。図９は情報処理装置１００において、Ｉ／ＯスケジューラでＩ／Ｏ処理を変更するフローチャートである。
【００６７】
（ステップＳ９００）ステップＳ９００は、ＣＰＵ１０１が入出力要求をＩ／Ｏスケジューラに送信する。入出力要求は、データ入出力操作部２０３が送信したデータ入出力操作を、ファイルシステム処理部２０５がＩ／Ｏスケジューラに送信する形に纏めて、Ｉ／Ｏスケジューラに送信したものである。そして、ステップＳ９０１に移る。
【００６８】
（ステップＳ９０１）ステップＳ９０１は、ＣＰＵ１０１が二次記憶装置１０４に関連付けられているＩ／Ｏスケジューラを使用して、入出力要求をスケジューリングする。ステップＳ９００で受信した入出力要求には、入出力する二次記憶装置１０４の名前が含まれるため、これに関連付けられているＩ／Ｏスケジューラを使用する。
【００６９】
以上のように、本実施例では、コンピュータプログラムがＩ／Ｏスケジューラ設定部２０１を実行して、コンピュータプログラムが使用するＩ／Ｏスケジューラの名前とプロセスのプロセスＩＤの組み合わせをＩ／Ｏスケジューラ設定ファイル２０２を書込む。その後、データ入出力操作部２０３を実行して、マウントしたディレクトリにあるファイルを対象に、データの入出力操作をオペレーティングシステムに送信する。データ入出力操作部２０３実行後に、ファイルシステム処理部２０５を実行する。ファイルシステム処理部２０５は、ファイルシステム処理部２０５は、データ入出力操作部２０３から受け取った入出力操作に含まれるファイル名、ファイルのオフセットを元に二次記憶装置内のどの位置を入出力するかを決定する。そして、ファイルシステム処理部２０５は、決定した位置、入出力する二次記憶装置１０４、入出力の種類、入出力するサイズ、入出力するデータの開始位置を一つの入出力要求に纏めて、Ｉ／Ｏスケジューラに送信する。ファイルシステム処理部２０５実行後に、Ｉ／Ｏスケジューラ変更部２０６を実行する。Ｉ／Ｏスケジューラ変更部２０６は、Ｉ／Ｏスケジューラ設定ファイル２０２を読込んで、プロセスのプロセスＩＤを検索し、そのプロセスＩＤの組み合わせとなるＩ／Ｏスケジューラの名前を取得する。取得後、マウント情報ファイル２０４を読込み、入出力対象の二次記憶装置１０４の名前を取得する。そして、Ｉ／Ｏスケジューラ管理情報ファイル２０７を読込む。このＩ／Ｏスケジューラ管理情報ファイル２０７から入出力対象の二次記憶装置１０４の名前を検索する。検索後、検索して得たＩ／Ｏスケジューラの名前と、プロセスＩＤの組み合わせとなるＩ／Ｏスケジューラの名前を比較する。比較した結果一致しなければ、Ｉ／Ｏスケジューラを、プロセスＩＤの組み合わせとなるＩ／Ｏスケジューラに切り替える。そして、Ｉ／Ｏスケジューラ管理情報ファイル２０７の入出力対象の二次記憶装置１０４に関連付けられているＩ／Ｏスケジューラの名前を、Ｉ／Ｏスケジューラ設定ファイル２０２から取得したＩ／Ｏスケジューラの名前に変更する。Ｉ／Ｏスケジューラ変更部２０６実行後に、Ｉ／Ｏスケジューラ処理部２０８が実行される。Ｉ／Ｏスケジューラ処理部２０８は新しく切り替えられたＩ／Ｏスケジューラを使用して、入出力要求をスケジューリングする。これにより、二次記憶装置１０４について、プログラム単位で最適なＩ／Ｏスケジューラに切り替わる為、Ｉ／Ｏ処理の高速化と効率的なブロック割り当てが実現する。例えば、ｄｅａｄｌｉｎｅスケジューラは、限界時間を設けて、その限界時間に近づいた入出力要求を優先的にデバイスドライバに送信するため、Ｉ／Ｏによる遅延を回避したいプログラムに有効である。また、ｃｆｑスケジューラは、限界時間を設けず、各コンピュータプログラム間で均等な入出力を実現するため、遅延よりもスループットを重視したいコンピュータプログラムに有効である。
【００７０】
上述の実施例では、情報処理装置１００を利用するコンピュータプログラムが１つのプロセスの場合について説明したが、複数プロセスを１つのグループとして集めたプロセスグループの場合でも良い。１つのプロセスグループは、１つのグループＩＤを持つ。この場合、Ｉ／Ｏスケジューラ設定部２０１がＩ／Ｏスケジューラ設定ファイル２０２に書込むプロセスＩＤは、プロセスが所属するプロセスグループのグループＩＤとなる。そして、Ｉ／Ｏスケジューラ変更部２０６では、呼び出したプロセスが所属するプロセスグループのグループＩＤを元に、Ｉ／Ｏスケジューラ設定ファイル２０２を検索し、その組み合わせとなるＩ／Ｏスケジューラの名前を取得する。
【００７１】
また上述の実施例では、ファイルシステム処理部２０５はデータ入出力操作部２０３の後に実行する場合について説明したが、ファイルシステム処理部２０５をＩ／Ｏスケジューラ変更部２０６実行後に実行しても良い。この場合、データ入出力操作部２０３実行後にＩ／Ｏスケジューラ変更部２０６を実行する。そして、Ｉ／Ｏスケジューラ変更部２０６実行後に、ファイルシステム処理部２０５を実行する。ファイルシステム処理部２０５が、入出力要求をＩ／Ｏスケジューラに送信した後、Ｉ／Ｏスケジューラ処理部２０８を実行する。
【００７２】
また、本実施例は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するプログラムを、ネットワークまたは各種記憶媒体を介してシステム或いは装置に供給する。そのシステム或いは装置のコンピュータが、コンピュータが読み取り可能なコンピュータプログラムを読みだして実行する処理である。
【００７３】
コンピュータプログラムを供給するための記憶媒体としては、例えば、光ディスク、磁気ディスク、光磁気ディスク、磁気テープ、不揮発性のメモリカードなどを用いることが出来る。これらの記憶媒体は、上記実施形態の機能を実現する二次記憶装置としても用いることが出来る。
【符号の説明】
【００７４】
１０１  ＣＰＵ
１０２  一次記憶装置
１０３  Ｉ／Ｏコントローラ
【図１】
2015130095.tif 000003
【図２】
2015130095.tif 000004
【図３】
2015130095.tif 000005
【図４】
2015130095.tif 000006
【図５】
2015130095.tif 000007
【図６】
2015130095.tif 000008
【図７】
2015130095.tif 000009
【図８】
2015130095.tif 000010
【図９】
2015130095.tif 000011