(57)【要約】【課題】  各プロセスに対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することが困難である。【解決手段】  利用可能な入出力バッファの総数と、新規プロセス及び実行中プロセスのそれぞれが必要とする入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、新規プロセスの実行を開始及び保留し、利用可能な入出力バッファの利用率がより高くなるように、実行中プロセスが同時に取得できる入出力バッファの数の上限値の見直しを実行するプロセススケジュール手段と、実行中プロセスによる入出力バッファの使用数を、その上限値以下に保つように、入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む。【選択図】      図１
2015125525.tif 000002
【特許請求の範囲】
【請求項１】
利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行する
プロセススケジュール手段と、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む
情報処理装置。
【請求項２】
前記ブロッキング入出力手段は、
前記第１の上限値を超える数の前記入出力バッファを使用している前記実行中プロセスが存在しない状態になるまで、前記新規プロセスの実行を待ち合わせる
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記プロセススケジュール手段は、
前記新規プロセスを開始する場合、前記第１の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第１の上限値の見直しを実行し、
前記実行中プロセスが終了した場合、前記実行中プロセスに対して設定された前記下限値の第２の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第１の上限値の見直しを実行する
ことを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
前記プロセススケジュール手段は、
前記新規プロセス及び前記実行中プロセスのそれぞれに対応する実行優先度及び前記下限値、並びにデバイスの入出力性能、の任意の情報に基づいて、前記新規プロセス及び前記実行中プロセスのそれぞれに対応する係数を算出し、算出された前記係数に基づいて、前記見直しを実行する
ことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記ブロッキング入出力手段は、所定の閾値を超える頻度で入出力要求を実行する前記実行中プロセスに対応する前記係数を、前記プロセススケジュール手段による前記見直しにおいて前記第１の上限値が相対的に小さくなるように、更新する
ことを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記プロセススケジュール手段は、前記新規プロセスが入出力バッファを使用しないバッファ不用プロセスである場合、前記バッファ不用プロセスの前記下限値を０に設定する
ことを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記入出力バッファに格納されたデータの破棄を許容する特性が示されている場合、前記特性に基づいて、使用中の前記入出力バッファを強制的に開放する入出力バッファ管理手段を更に含む
ことを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記プロセススケジュール手段は、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記プロセスが所定の情報に基づいてグループ化されたグループに対応する、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第２の上限値の見直しを実行し、
前記入出力ブロッキング手段は、前記第２の上限値に基づいて前記入出力バッファの取得を待ち合わせる
ことを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行し、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる
バッファ管理方法。
【請求項１０】
利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行し、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる処理をコンピュータに実行させる
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッファ管理技術に関し、特にバッファを割り当てる技術に関する。
【背景技術】
【０００２】
バッファ管理のためのさまざまな関連技術が知られている。
【０００３】
例えば、特許文献１は、バッファ管理装置の一例を開示する。特許文献１のバッファ管理装置は、ファイルの入出力部分を一時記憶するバッファ部に、プロセス毎に設定されたサイズのバッファ領域を確保する、バッファ管理手段を備える。特許文献１は、上述の構成を備えるそのバッファ管理装置が、二次記憶装置への入出力の効率及びシステム全体の効率を向上させるとしている。
【０００４】
近年、コンピュータシステムの大規模化や複雑化などにより、コンピュータシステム内で動作するプロセス間の連携が密になる傾向がある。そのため、あるプロセスの想定外の停止が他のプロセスにも伝播し、システム全体に影響を与えるという可能性が、高くなっている。
【０００５】
想定外のプロセス停止の一因に、ブロッキングＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）  ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）使用時の資源不足が挙げられる。ブロッキングＩ／Ｏ  ＡＰＩにおいては、Ｉ／Ｏ実行の完了を待つ場合と、Ｉ／Ｏ実行に必要な資源であるＩ／Ｏバッファの確保を待つ場合とに、ブロッキングＩ／Ｏ  ＡＰＩの内部で処理の実行が停止する。
【０００６】
一般的に、Ｉ／Ｏ実行の完了待ちについては、プログラム実装者の想定の範囲内である。しかしながら、Ｉ／Ｏバッファの確保待ちという事象は、Ｉ／Ｏバッファ不足時にしか発生しない。そのため、実装者によってはその事象の発生を想定していないという場合がある。また、実装者が、その事象の発生を想定しながらも、そのＩ／Ｏバッファの確保待ちが発生した場合のテストを十分に実施していない場合がある。
【０００７】
ブロッキングＩ／Ｏ  ＡＰＩのＩ／Ｏバッファ不足によるプロセスの停止を避けるため、一般的にはノンブロッキングＩ／Ｏ  ＡＰＩも用意されている。
【０００８】
ノンブロッキングＩ／Ｏ  ＡＰＩは、Ｉ／Ｏ完了待ちによっても、Ｉ／Ｏバッファ不足によっても、処理の実行を停止しない。しかしながら、ノンブロッキングＩ／Ｏ  ＡＰＩを使用する場合には、Ｉ／Ｏ完了やＩ／Ｏバッファ不足解消などのハンドリング、ＡＰＩ呼び出しの再試行などが必要である。そのため、ノンブロッキングＩ／Ｏ  ＡＰＩを使用する場合は、ブロッキングＩ／Ｏ  ＡＰＩを使用する場合より、プログラム実装の難易度が高い。
【０００９】
そこで、プログラムの実装を容易にするため、ブロッキングＩ／Ｏ  ＡＰＩが使用される場合がある。また、既存プログラムに対するブロッキングＩ／Ｏ  ＡＰＩからノンブロッキングＩ／Ｏ  ＡＰＩへの移行作業は、前述のとおりプログラミングモデルが異なるため、ＡＰＩの単純置換では対応できず、コストが大きい。
【００１０】
即ち、大規模で複雑化したシステムにおいて、ブロッキングＩ／Ｏ  ＡＰＩが使用されることにより、Ｉ／Ｏバッファ不足時にプロセス停止が発生し、タイミング依存バグが誘発されるという問題点があった。
【００１１】
このような問題点を解決する技術が特許文献２に記載されている。特許文献２に記載のアプリケーション・プログラム・インタフェースの非同期動作制御方式は、プログラム実行時（即ち、プロセス）の資源（上述のＩ／Ｏバッファに対応）不足を回避する技術である。その非同期動作制御方式においては、資源保証したいプロセスに対して、事前確保した資源が固定的に割り当てられる。そして、そのプロセスは、割り当てられたその資源をプール管理して使用する。これらの構成を備えることで、その非同期動作制御方式は、他プロセスの資源消費の影響を排除する。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０００−３０５８２５号公報
【特許文献２】特開平２−３０８３３８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、上述した先行技術文献に記載された技術においては、各プロセスに対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することが困難であるという問題点がある。
【００１４】
その理由は、以下のとおりである。
【００１５】
特許文献１に記載されたバッファ管理装置は、プロセス毎に設定されたサイズのバッファ領域を、固定的に確保するからである。即ち、そのバッファ管理装置は、未使用状態のバッファ領域が存在及び発生しても、確保するバッファ領域を増加する手段を持たないからである。
【００１６】
特許文献２に記載された非同期動作制御方式は、事前確保した資源を各プロセスがローカルに管理するからである。即ち、その非同期動作制御方式は、未使用状態のバッファ領域が発生しても、各プロセスがローカルに管理する資源を増加する手段を持たない。
【００１７】
即ち、上述した先行技術文献に記載された技術においては、プロセス間での資源（入出力バッファ）の融通が難しく、プロセスの数が増減する一般的な環境では、有限個の資源を余すことなく、効率的に利用できない。
【００１８】
本発明の目的は、上述した問題点を解決するバッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラムを提供することにある。
【課題を解決するための手段】
【００１９】
本発明の一様態における情報処理装置は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行するプロセススケジュール手段と、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む。
【００２０】
本発明の一様態におけるバッファ管理方法は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行し、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる。
【００２１】
本発明の一様態におけるプログラムは、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行し、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる処理をコンピュータに実行させる。
【発明の効果】
【００２２】
本発明は、各プロセスに対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することを可能にするという効果がある。
【図面の簡単な説明】
【００２３】
【図１】図１は、本発明の第１の実施形態に係るバッファ管理装置の構成を示すブロック図である。
【図２】図２は、第１の実施形態におけるプロセススケジュール部の一例を示すブロック図である。
【図３】図３は、第１の実施形態におけるブロッキング入出力部の一例を示すブロック図である。
【図４】図４は、第１の実施形態における使用枠管理部の一例を示すブロック図である。
【図５】図５は、第１の実施形態におけるプロセス管理テーブルの一例を示す図である。
【図６】図６は、第１の実施形態における入出力バッファ管理部の一例を示すブロック図である。
【図７】図７は、第１の実施形態における入出力バッファプール部の一例を示すブロック図である。
【図８】図８は、第１の実施形態における入出力実行キューの一例を示す図である。
【図９】図９は、第１の実施形態における入出力実行管理部の一例を示すブロック図である。
【図１０】図１０は、第１の実施形態に係る情報処理装置を実現するコンピュータのハードウェア構成を示すブロック図である。
【図１１】図１１は、第１の実施形態におけるユーザプログラムの実行指示受付時及び実行中プロセス終了時の動作を示すフローチャートである。
【図１２】図１２は、第１の実施形態におけるユーザプログラムの実行指示受付時及び実行中プロセス終了時の動作を示すフローチャートである。
【図１３】図１３は、第１の実施形態におけるユーザプログラムの実行指示受付時及び実行中プロセス終了時の動作を示すフローチャートである。
【図１４】図１４は、第１の実施形態における実行中プロセスがブロッキング入出力部を呼び出した場合の動作を示すフローチャートである。
【図１５】図１５は、第１の実施形態における実行中プロセスがブロッキング入出力部を呼び出した場合の動作を示すフローチャートである。
【図１６】図１６は、第１の実施形態における実行中プロセスがブロッキング入出力部を呼び出した場合の動作を示すフローチャートである。
【図１７】図１７は、本発明の第２の実施形態に係るバッファ管理装置の構成を示すブロック図である。
【図１８】図１８は、第２の実施形態におけるプロセススケジュール部の一例を示すブロック図である。
【図１９】図１９は、第２の実施形態におけるグループ使用枠管理テーブルの一例を示す図である。
【図２０】図２０は、第２の実施形態におけるプロセスグループ対応テーブルの一例を示す図である。
【図２１】図２１は、第２の実施形態におけるブロッキング入出力部の一例を示すブロック図である。
【図２２】図２２は、本発明の第３の実施形態に係るバッファ管理装置の構成を示すブロック図である。
【図２３】図２３は、本発明の第４の実施形態に係るバッファ管理装置の構成を示すブロック図である。
【図２４】図２４は、本発明の第５の実施形態に係るバッファ管理装置の構成を示すブロック図である。
【発明を実施するための形態】
【００２４】
本発明を実施するための形態について図面を参照して詳細に説明する。尚、各図面及び明細書記載の各実施形態において、同様の構成要素には同様の符号を付与し、適宜説明を省略する。
【００２５】
＜＜＜第１の実施形態＞＞＞
図１は、本発明の第１の実施形態に係るバッファ管理装置９０１の構成を示すブロック図である。
【００２６】
例えば、バッファ管理装置９０１は、ユーザによって作成されたユーザプログラムがプロセス１として動作するコンピュータシステムの一部である。
【００２７】
図１に示すように、本実施形態に係るバッファ管理装置９０１は、プロセススケジュール部２とブロッキング入出力部３と使用枠管理部４と入出力バッファ管理部５と入出力バッファプール６と複数の入出力実行キュー７と非同期入出力要求部８とを含む。即ち、ブロッキング入出力部３のブロッキング入出力部は、ブロッキングＩ／Ｏ部とも呼ばれる。入出力バッファ管理部５の入出力バッファ管理部は、Ｉ／Ｏバッファ管理部とも呼ばれる。入出力バッファプール６の入出力バッファプールは、Ｉ／Ｏバッファプールとも呼ばれる。入出力実行キュー７の入出力実行キューは、Ｉ／Ｏ実行キューとも記載する。非同期入出力要求部８は、非同期Ｉ／Ｏ力要求部８とも呼ばれる。
【００２８】
尚、図１に示す各構成要素は、ハードウェア単位の回路でも、コンピュータ装置の機能単位に分割された構成要素でもよい。ここでは、図１に示す構成要素は、コンピュータ装置の機能単位に分割された構成要素として説明する。
【００２９】
図１に示すプロセス１は、入出力要求（Ｉ／Ｏ要求とも呼ばれる）を行う任意のユーザプログラムの、動作中のインスタンスであり、複数のプロセス１が同時に動作してもよい。
【００３０】
プロセス１のそれぞれは、入出力バッファ（Ｉ／Ｏバッファとも呼ばれる）の所定使用枠値（下限値とも呼ばれる）を設定される。その所定使用枠値は、プロセス１が起動される際に、プロセス１が必要とする入出力バッファの数の下限値として、プロセス１に対して設定される。
【００３１】
具体的には、所定使用枠値は、ユーザによって事前に決定される。そして、その所定使用枠値は、例えば、プロセス１をインスタンスとするユーザプログラムの実行指示に含めて、バッファ管理装置９０１に与えられる。そして、プロセススケジュール部２は、プロセス１を起動する場合に、与えられたその所定使用枠値をプロセス１に設定（付与）する。
【００３２】
また、バッファ管理装置９０１において、その所定使用枠値に基づいて、プロセス１が同時に取得できる入出力バッファ数の上限値が設定される。以下では、その上限値を、再設定使用枠値と呼ぶ。
【００３３】
入出力バッファは、入出力要求を実現するための、有限個の固定長の記憶資源である。入出力バッファは、入出力要求毎に使用され、入出力完了時に解放（未使用状態に）される。入出力未使用状態の入出力バッファは、入出力バッファプール６によって管理される。
【００３４】
本実施形態のバッファ管理装置９０１は、プロセス１毎に、入出力バッファの最低保証量となる所定使用枠値を事前割当する。そうすることで、バッファ管理装置９０１は、入出力バッファの資源保証を行い、資源不足によるブロッキング入出力  ＡＰＩの停止を回避する。更に、実行中プロセスの増減にあわせて、余剰の入出力バッファの使用枠値を余すことなく実行中プロセスに配分し、システム全体の入出力バッファ使用効率を向上させる。
【００３５】
＝＝＝プロセススケジュール部２＝＝＝
プロセススケジュール部２は、プロセス１の起動、終了及びプロセス１の入出力バッファの使用枠を制御する。
【００３６】
図２は、本実施形態のプロセススケジュール部２の構成を示すブロック図である。図２に示すようにプロセススケジュール部２は、開始部２１と、終了検知部２２と、開始判定部２３と、使用枠値見直部２４と、検査部２５とを含む。
【００３７】
開始部２１は、ユーザからのプログラム実行指示を受け、そのプログラム実行指示で指定されたユーザプログラムをプロセス１として起動する。そのプログラム実行指示は、例えば、ユーザプログラムの識別子、所定使用枠値及び係数（後述）を含む。
【００３８】
終了検知部２２は、プロセス１の終了を検知して後処理を実行する。例えば、終了検知部２２は、その後処理として、終了したプロセス１に対応する使用枠管理レコード４３１を使用枠管理テーブル４３から削除する。
【００３９】
開始判定部２３は、実行を開始されるプロセス１（新規プロセスとも呼ばれる）の所定使用枠値と実行中プロセスの所定使用枠値との合計を検査し、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性があるか否かを判定する。以下では、「実行を開始されるプロセス１」を新規プロセスとも呼ぶ。また、新規プロセスに対して、「既に実行中のプロセス１」を実行中プロセスと呼ぶ。
【００４０】
例えば、その検査は、その合計と利用可能な入出力バッファの総数とを比較する検査である。その合計がその総数以下の場合、開始判定部２３は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定する。また、その合計がその総数を超える場合、開始判定部２３は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性があると判定する。
【００４１】
また、開始判定部２３は、後述の使用枠値見直部２４による再設定使用枠値の見直しが実行された場合に、各実行中プロセスの入出力バッファ使用数と見直し後の再設定使用枠値の値とを検査する。続けて開始判定部２３は、その検査した結果に基づいて、新規プロセスの実行を開始しても入出力バッファが枯渇する可能性がないか否かを判定する。
【００４２】
例えば、その検査は、実行中プロセスの入出力バッファ使用数と、その実行中プロセスの見直し後の再設定使用枠値の値とを比較する検査である。
【００４３】
その入出力バッファ使用数がその見直し後の再設定使用枠値以下の場合、開始判定部２３は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定する。この場合、開始判定部２３は、その新規プロセスのプロセス識別子、所定使用枠値及び係数（後述）を、使用枠管理部４に送信する。
【００４４】
また、その入出力バッファ使用数がその見直し後の再設定使用枠値を超える場合、開始判定部２３は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性があると判定する。
【００４５】
使用枠値見直部２４は、入出力バッファの利用効率を高めるために、再設定使用枠値の動的見直しを行う。使用枠値見直部２４は、実行中プロセスの数が変化する場合、すなわち新規プロセスの実行開始時と実行中プロセスの実行終了時に、再設定使用枠値の見直しを実行する。
【００４６】
検査部２５は、その新規プロセスをインスタンスとするユーザプログラムが、入出力バッファを使用するＡＰＩをリンクしているか否かを検査する。ここで、本実施形態においては、その入出力バッファを使用するＡＰＩは、ブロッキング入出力部３である。
【００４７】
そのユーザプログラムが入出力バッファを使用するＡＰＩをリンクしている場合、検査部２５は、ユーザプログラムの実行指示に与えられたその新規プロセスの所定使用枠値を、使用枠管理部４に設定する。
【００４８】
また、そのユーザプログラムが入出力バッファを使用するＡＰＩをリンクしていない場合、検査部２５は、その新規プロセスの所定使用枠値として０を、使用枠管理部４に設定する。その理由は、入出力バッファを使用しないプロセス１に、不要な再設定使用枠値を割り当てないようにするためである。
【００４９】
＝＝＝ブロッキング入出力部３＝＝＝
図１に戻って、ブロッキング入出力部３は、実行中プロセスとして動作するユーザプログラムからの呼び出し（入出力要求、またはＩ／Ｏ要求とも呼ばれる）に応じて、入出力バッファ管理部５に対して入出力要求を行う。例えば、ブロッキング入出力部３は、ＡＰＩとして実現される。即ち、ブロッキング入出力部３は、入出力バッファ管理部５が、実行中プロセスとして動作するユーザプログラムから入出力要求を受け付ける際のゲートウェイとして機能する。従って、ブロッキング入出力部３は、ユーザプログラムと同一プロセス(同一の実行単位)で動作する。
【００５０】
図３は、本実施形態におけるブロッキング入出力部３の構成を示すブロック図である。
【００５１】
図３に示すように、ブロッキング入出力部３は、入出力要求部３１と、取得制限部３２と、高頻度入出力検出部３３とを含む。入出力要求部３１の入出力要求部は、Ｉ／Ｏ要求部とも呼ばれる。また、高頻度入出力検出部３３の高頻度入出力検出部は、高頻度Ｉ／Ｏ検出部とも呼ばれる。
【００５２】
入出力要求部３１は、非同期入出力要求部８へ入出力要求を通知、または、入出力バッファ管理部５へ、入出力要求を送信する。
【００５３】
＝＝＝非同期入出力要求部８＝＝＝
図１に戻って、非同期入出力要求部８は、独立した専用プロセスで動作し、ブロッキング入出力部３とは並列に動作可能である。非同期入出力要求部８は、入出力要求部３１から入出力要求を受信し、入出力要求部３１が実施する入出力バッファ管理部５への入出力要求処理を、代理実行する。
【００５４】
取得制限部３２は、実行中プロセスとして動作するユーザプログラムからブロッキング入出力部３が呼ばれたときに、その実行中プロセスの入出力バッファ使用数が、その実行中プロセスの再設定使用枠値より少なくなるまで待ち合わせる。こうすることにより、取得制限部３２は、呼び出し元のそのユーザプログラムの実行、即ちその実行中プロセス、を停止させて入出力バッファ使用数を再設定使用枠値以下に収める。
【００５５】
高頻度入出力検出部３３は、入出力要求するデバイス（不図示）の性能につり合わない、高頻度の、ブロッキング入出力部３の呼び出しを行う実行中プロセスを検出する部である。高頻度入出力検出部３３は、高頻度の呼び出しを行う実行中プロセスを検出した場合、使用枠値見直部２４の再設定使用枠値見直しにおいて、その実行中プロセスの再設定使用枠値を拡大しないようにする。
【００５６】
＝＝＝使用枠管理部４＝＝＝
使用枠管理部４は、実行中プロセス毎にその実行中プロセスの所定使用枠値と再設定使用枠値と入出力バッファ使用数を保持する。
【００５７】
図４は、本実施形態における使用枠管理部４の構成を示すブロック図である。
【００５８】
図４に示すように、使用枠管理部４は、使用枠値取得部４１と使用バッファ計数部４２と使用枠管理テーブル４３とを含む。
【００５９】
図５は、使用枠管理テーブル４３の一例を示す図である。
【００６０】
図５に示すように、使用枠管理テーブル４３は、プロセス識別子、係数、所定使用枠値、再設定使用枠値及び入出力バッファ使用数を含む。
【００６１】
プロセス識別子は、プロセス１のそれぞれを識別する情報である。
【００６２】
係数は、再設定使用枠値を算出する際の、プロセス識別子に対応するプロセス１の重みである。
【００６３】
所定使用枠値は、プロセス識別子に対応するプロセス１の所定使用枠値である。
【００６４】
再設定使用枠値は、プロセス識別子に対応するプロセス１の再設定使用枠値である。
【００６５】
入出力バッファ使用数は、プロセス識別子に対応するプロセス１の入出力バッファの現使用数である。
【００６６】
使用枠値取得部４１は、プロセススケジュール部２から受け取った、プロセス１のそれぞれに対応する係数、所定使用枠値プロセス識別子と共に、使用枠管理テーブル４３に記録する。また、使用枠値取得部４１は、プロセススケジュール部２から受け取った再設定使用枠値で、使用枠管理テーブル４３の再設定使用枠値を更新する。
【００６７】
そして、使用枠値取得部４１は、プロセススケジュール部２及びブロッキング入出力部３からの要求に応答して、記録されたその係数、その所定使用枠値及びその再設定使用枠値を出力する。
【００６８】
使用バッファ計数部４２は、実行中プロセスのそれぞれの入出力バッファの使用数を計数し、計数したその使用数を使用枠管理テーブル４３に記録する。そして、使用バッファ計数部４２は、プロセススケジュール部２からの要求に応答して記録されたその入出力バッファ使用数を出力する。
【００６９】
＝＝＝入出力バッファ管理部５＝＝＝
入出力バッファ管理部５は、未使用の入出力バッファを入出力バッファプール６で管理し、使用中の入出力バッファを入出力実行キュー７で管理する。
【００７０】
図６は、本実施形態における入出力バッファ管理部５の構成を示すブロック図である。
【００７１】
図６に示すように、入出力バッファ管理部５は、バッファ取得部５１と、入出力実行管理部５２と、バッファ解放部５３とを含む。入出力実行管理部５２の入出力実行管理部は、Ｉ／Ｏ実行管理部５２とも記載する。
【００７２】
バッファ取得部５１は、後述する入出力要求登録部５２１で入出力実行キュー７に登録するために、入出力バッファプール６から未使用の入出力バッファ６１を取り出して、使用中の状態にする。ここで、入出力バッファ６１は、物理的な記憶媒体としての入出力バッファを利用するための情報である。入出力バッファ６１の入出力バッファは、Ｉ／Ｏバッファとも呼ばれる。
【００７３】
入出力実行管理部５２は、入出力実行キュー７で使用中の入出力バッファ７１を管理し、入出力実行キュー７に登録した入出力バッファ７１を使用して、デバイスに対して登録順に入出力を実行する。ここで、入出力バッファ７１は、物理的な記憶媒体としての入出力バッファを利用するための情報である。入出力バッファ７１の入出力バッファは、Ｉ／Ｏバッファとも呼ばれる。
【００７４】
バッファ解放部５３は、デバイスに対する入出力実行完了後に、その実行で使用した入出力バッファを、未使用の状態にして、入出力バッファプール６に戻し、プロセススケジュール部２と取得制限部３２に通知する。
【００７５】
＝＝＝入出力バッファプール部６＝＝＝
入出力バッファプール６は、未使用の入出力バッファ６１を管理するバッファプールである。
【００７６】
図７は、本実施形態における入出力バッファプール６の構成を示すブロック図である。
【００７７】
図７に示すように、入出力バッファプール６は、  複数の入出力バッファ６１を含む。
【００７８】
＝＝＝入出力実行キュー７＝＝＝  入出力実行キュー７は、入出力要求可能なデバイス毎に存在し、入出力実行待ちの入出力バッファ７１を管理するＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ、Ｆｉｒｓｔ  Ｏｕｔ）のキューである。
【００７９】
図８は、本実施形態における入出力実行キュー７の構成を示すブロック図である。
【００８０】
図８に示すように、入出力実行キュー７は、複数の入出力バッファ７１を含む。
【００８１】
図９は、本実施形態における入出力実行管理部５２の構成を示すブロック図である。
【００８２】
図９に示すように、入出力実行管理部５２は、入出力要求登録部５２１と、入出力要求キャンセル部５２２と、複数のデバイスドライバ５２３とを含む。入出力要求登録部５２１の入出力要求登録部は、Ｉ／Ｏ要求登録部とも呼ばれる。また、入出力要求キャンセル部５２２の入出力要求キャンセル部は、Ｉ／Ｏ要求キャンセル部とも呼ばれる。
【００８３】
入出力要求登録部５２１は、バッファ取得部５１によって取得された使用中の状態になっている入出力バッファ６１を、入出力実行キュー７に登録する。
【００８４】
入出力要求キャンセル部５２２は、入出力実行キュー７から任意の入出力バッファ７１を取り出すことにより、未実行の入出力要求をキャンセルする。取り出した入出力バッファ７１は、バッファ解放部５３を使用して、入出力バッファプール６に戻される。
【００８５】
デバイスドライバ５２３は、入出力実行キュー７のそれぞれに１つ対応して、存在する。すなわち、デバイスドライバ５２３は、入出力要求可能なデバイスの数だけ存在する。デバイスドライバ５２３は、それぞれ独立した専用のプロセスで動作する。デバイスドライバ５２３は、入出力実行キュー７から、登録された順に入出力バッファ７１を取り出し、対応するデバイスに対して入出力を実行する。デバイスドライバ５２３は、取り出した入出力バッファ７１を、入出力実行完了後にバッファ解放部５３を使用して、入出力バッファプール６に戻す。また、デバイスドライバ５２３は、統計情報として、入出力実行に要する平均時間をデバイスドライバ５２３毎の所定の記憶領域（不図示）に保持する。
【００８６】
以上が、バッファ管理装置９０１の機能単位の各構成要素についての説明である。
【００８７】
次に、バッファ管理装置９０１のハードウェア単位の構成要素について説明する。
【００８８】
図１０は、本実施形態におけるバッファ管理装置９０１を実現するコンピュータ９１０のハードウェア構成を示す図である。
【００８９】
図１０に示すように、コンピュータ９１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１１、記憶部９１２、記憶装置９１３及び入出力部９１４を含む。更に、コンピュータ９１０は、外部から供給される記録媒体（または記憶媒体）９１７を含む。例えば、記録媒体９１７は、情報を非一時的に記憶する不揮発性記録媒体（非一時的記録媒体）である。また、記録媒体９１７は、情報を信号として保持する、一時的記録媒体であってもよい。
【００９０】
ＣＰＵ９１１は、オペレーティングシステム（不図示）を動作させて、コンピュータ９１０の全体の動作を制御する。例えば、ＣＰＵ９１１は、記憶装置９１３に装着された記録媒体９１７から、プログラムやデータを読み込み、読み込んだそのプログラムやそのデータを記憶部９１２に書き込む。ここで、そのプログラムは、例えば、後述の図１１乃至１６に示すフローチャートの動作をコンピュータ９１０に実行させるためのプログラムである。
【００９１】
ＣＰＵ９１１は、その読み込んだプログラムに従って、またその読み込んだデータに基づいて、図１に示すプロセススケジュール部２、ブロッキング入出力部３、使用枠管理部４、入出力バッファ管理部５及び非同期入出力要求部８として各種の処理を実行する。
【００９２】
尚、ＣＰＵ９１１は、通信網（不図示）に接続されている外部コンピュータ（不図示）から、記憶部９１２にそのプログラムやそのデータをダウンロードしてもよい。
【００９３】
記憶部９１２は、そのプログラムやそのデータを記憶する。記憶部９１２は、入出力実行キュー７及び非同期入出力要求部８を含んでよい。
【００９４】
記憶装置９１３は、例えば、光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク及び半導体メモリであって、記録媒体９１７を含む。記憶装置９１３（記録媒体９１７）は、そのプログラムをコンピュータ読み取り可能に記憶する。また、記憶装置９１３は、そのデータを記憶してもよい。記憶装置９１３は、入出力実行キュー７及び非同期入出力要求部８を含んでよい。
【００９５】
入出力部９１４は、図示しない外部デバイスとのインタフェースを実現する。入出力部９１４は、入出力バッファ管理部５の入出力実行管理部５２のデバイスドライバ５２３から制御されてよい。また、入出力部９１４は、デバイスドライバ５２３の一部として含まれてもよい。
【００９６】
入出力部９１４は、例えば、オペレータによる操作の入力、及びオペレータへの例えばＧＵＩ（ＧＲＡＰＨＩＣＡＬ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）による入力要求や出力表示の入出力インタフェースを実現する。また、入出力部９１４は、外部記憶デバイスや通信制御装置などからの情報の入出力インタフェースを実現する。
【００９７】
以上説明したように、図１に示すバッファ管理装置９０１の機能単位のブロックは、図１０に示すハードウェア構成のコンピュータ９１０によって実現される。但し、コンピュータ９１０が備える各部の実現部は、上記に限定されない。すなわち、コンピュータ９１０は、物理的に結合した１つの装置により実現されてもよいし、物理的に分離した２つ以上の装置を有線または無線で接続し、これら複数の装置により実現されてもよい。
【００９８】
尚、上述のプログラムのコードを記録した記録媒体９１７が、コンピュータ９１０に供給される場合、ＣＰＵ９１１は、記録媒体９１７に格納されたそのプログラムのコードを読み出して実行してもよい。或いは、ＣＰＵ９１１は、記録媒体９１７に格納されたそのプログラムのコードを、記憶部９１２、記憶装置９１３またはその両方に格納してもよい。すなわち、本実施形態は、コンピュータ９１０（ＣＰＵ９１１）が実行するそのプログラム（ソフトウェア）を、一時的にまたは非一時的に、記憶する記録媒体９１７の実施形態を含む。尚、情報を非一時的に記憶する記憶媒体は、不揮発性記憶媒体とも呼ばれる。
【００９９】
以上が、本実施形態におけるバッファ管理装置９０１を実現するコンピュータ９１０の、ハードウェア単位の各構成要素についての説明である。
【０１００】
次に本実施形態の動作について、図面を参照して詳細に説明する。
【０１０１】
図１１、図１２及び図１３は、バッファ管理装置９０１がユーザプログラムの実行指示を受け付けた場合、及び実行中のプロセスが終了した場合の動作を示すフローチャートである。
【０１０２】
尚、このフローチャートによる処理は、前述したＣＰＵ９１１によるプログラム制御に基づいて、実行されても良い。また、処理のステップ名については、ステップＳ１０１のように、記号で記載する。
【０１０３】
（図１１のステップＳ１０１)
ユーザがユーザプログラムの実行をプロセススケジュール部２に指示したとき、プロセススケジュール部２の開始部２１は、そのユーザプログラムのロードモジュールをメモリ（例えば、図１０に示す記憶部９１２）に展開する。即ち、開始部２１は、そのユーザプログラムを新規プロセスとして実行可能な状態に準備する。
【０１０４】
（図１１のステップＳ１０２)
次に、プロセススケジュール部２の検査部２５は、そのユーザプログラムが入出力バッファを使用するＡＰＩをリンクしているか否かを検査する。
【０１０５】
そのユーザプログラムが入出力バッファを使用するＡＰＩをリンクしている場合（ステップＳ１０２でリンク有）、処理はステップＳ１０５へ進む。
【０１０６】
そのユーザプログラムが入出力バッファを使用するＡＰＩをリンクしていない場合（ステップＳ１０２でリンク無）、処理はステップＳ１０４へ進む。
【０１０７】
（図１１のステップＳ１０４)
検査部２５は、その新規プロセスの所定使用枠値を０に設定する。
【０１０８】
（図１１のステップＳ１０５)
次に、プロセススケジュール部２の開始判定部２３は、使用枠値取得部４１から、全ての実行中プロセスの所定使用枠値の値を取得する。また、開始判定部２３は、システムに存在する利用可能な入出力バッファの総数を、入出力バッファ管理部５から取得する。
【０１０９】
（図１１のステップＳ１０６)
次に、開始判定部２３は、取得したその実行中プロセスの所定使用枠値の全てとその新規プロセスの所定使用枠値とを合計した合計値とその総数とを比較する。
【０１１０】
開始判定部２３は、その合計値が、その総数より多い場合（ステップＳ１０６で開始不可）、開始判定部２３は、新規プロセスの開始を不可と判定する。次に、処理は、ステップＳ１０８に進む。また、その合計値が、入出力バッファの総数以下の場合（ステップＳ１０６で開始可）、開始判定部２３は、新規プロセスの開始を可と判定する。次に、処理は、ステップＳ１０７に進む。
【０１１１】
（図１１のステップＳ１０７)
開始判定部２３は、その新規プロセスのプロセス識別子及び所定使用枠値を、使用枠管理部４に送信する。
【０１１２】
そのプロセス識別子及びその所定使用枠値を受信した使用枠管理部４の使用枠値取得部４１は、使用枠管理テーブル４３にその新規プロセスに対応する使用枠管理レコード４３１を設定する。この時、使用枠値取得部４１は、その使用枠管理レコード４３１のプロセス識別子に、受信した使用枠管理レコード４３１を設定する。使用枠値取得部４１は、その使用枠管理レコード４３１の計数に、初期値として０を設定する。使用枠値取得部４１は、その使用枠管理レコード４３１の所定使用枠値に、受信した所定使用枠値を設定する。使用枠値取得部４１は、その使用枠管理レコード４３１の再設定使用枠値に、初期値として受信した所定使用枠値を設定する。また、使用枠値取得部４１は、その使用枠管理レコード４３１の入出力バッファ使用数に、初期値として０を設定する。
【０１１３】
尚、本ステップ実行後、その新規プロセスは実行中プロセスに含まれているものとする。尚、特に、その新規プロセスであった実行中プロセスを指す場合、その実行中プロセスを新実行中プロセスと呼ぶ。
【０１１４】
次に、処理は、ステップＳ１０９に進む。
【０１１５】
（図１１のステップＳ１０８)
開始判定部２３は、その新規プロセスの実行を保留し、そのユーザプログラムの実行開始処理を中断する。例えば、開始判定部２３は、保留するその新規プロセスに関する情報を、記憶装置９１３に記憶する。以後、保留されたその新規プロセスを、保留プロセスとも呼ぶ。
【０１１６】
次に、処理は終了する。尚、保留プロセスは、既に実行中のいずれかの実行中プロセスが終了したことにより、終了検知部２２が動作を開始した場合（ステップＳ１１７）の処理において、実行を開始するか否かの判断を受ける。
【０１１７】
（図１２のステップＳ１０９)
次に、プロセススケジュール部２の使用枠値見直部２４は、全ての実行中プロセスについて、再設定使用枠値の見直しを行う。
【０１１８】
本ステップにおいては、前述のその合計値は、前述のその総数以下である。すなわち、式１より算出される余剰使用枠値(Ｌｓ)は、０以上である。
【０１１９】
使用枠値見直部２４は、式２に示すように、実行中プロセス毎の所定使用枠値(Ｌｐ)に、余剰使用枠値を分配して加えた値を、見直し後の再設定使用枠値(Ｌｐ‘)として使用する。詳細な算出手順は、以下のとおりである。
【０１２０】
「Ｌｓ  ＝  Ｎ  −  ΣＬｐ    ・・・（式１）
Ｌｓ：  余剰使用枠値
Ｎ：入出力バッファの総数
ΣＬｐ：実行中プロセスの所定使用枠値の合計」。
【０１２１】
「Ｌｐ’  ＝  Ｌｐ  ＋  Ｌｓ・Ｒｐ    ・・・（式２）
Ｌｐ’：見直し後の再設定使用枠値
Ｌｐ：実行中プロセスの所定使用枠値
Ｒｐ：実行中プロセスの分配率
Ｒｐ  ＝  Ｋｐ  ／  ΣＫｐ
Ｋｐ：実行中プロセスの係数
ΣＫｐ：実行中実行中プロセスの係数の合計
※  分配する使用枠値の合計が余剰使用枠値を超えないように、端数を処理する
※  余剰使用枠値が０の場合は、Ｌｐ’＝Ｌｐとする
※  ΣＫｐが０の場合、Ｒｐ＝０とする」。
【０１２２】
ここで、係数（Ｋｐ）について詳細に説明する。
【０１２３】
実行中プロセスの係数が相対的に大きいほど、その実行中プロセスに分配される使用枠値が大きくなるため、見直し後の再設定使用枠値も、より増加する。
【０１２４】
実行中プロセスの係数は、プログラム実行指示時などに事前にユーザによって指定される。または、次のいずれかの方法で、バッファ管理装置９０１が、自動的に係数を設定する。
【０１２５】
第１の方法では、使用枠値見直部２４は、実行優先度の値を係数として設定する。この第１の方法では、実行優先度が高い実行中プロセスほど優先的に、再設定使用枠値を相対的に大きく割り当てられる。バッファ管理装置９０１は、例えば、実行中プロセスの実行優先度の値を、プロセス１を実行する図１０に示すＣＰＵ９１１から取得し、係数として使用する。
第２の方法では、使用枠値見直部２４は、所定使用枠値の値を係数として設定する。この第２の方法では、所定使用枠値が大きい実行中プロセスほど優先的に、再設定使用枠値を相対的に大きく割り当てられる。
第３の方法では、使用枠値見直部２４は、デバイスの入出力性能（Ｉ／Ｏ性能とも呼ばれる）に応じた入出力性能値を係数として設定する。この第３の方法では、低速なデバイスに出力する実行中プロセスほど、再設定使用枠値を相対的に小さく割り当てられる。この方法は、ユーザプログラムが特定の1つのデバイスのみに入出力要求を行う場合に有効である。
【０１２６】
例えば、使用枠値見直部２４は、入出力性能値として、デバイスドライバ５２３が保持する統計情報（入出力実行の平均時間の逆数）を使用する。
【０１２７】
（図１２のステップＳ１１０）
次に、開始判定部２３は、実行中プロセスのそれぞれについて、使用枠値取得部４１と使用バッファ計数部４２とを介して、使用枠管理テーブル４３に保持されている再設定使用枠値と入出力バッファ使用数とを取得する。
【０１２８】
（図１２のステップＳ１１１）
次に、開始判定部２３は、全ての実行中プロセスのそれぞれについて、その再設定使用枠値とその入出力バッファ使用数とを、順次比較する。
【０１２９】
入出力バッファ使用数がその再設定使用枠値を超える実行中プロセスが１つでも存在する場合（ステップＳ１１１で有）、開始判定部２３は、新実行中プロセスの実行を開始不可と判定する。次に、処理はステップＳ１１２に進む。その理由は、その再設定使用枠値より入出力バッファ使用数の方が大きい実行中プロセスが１つでも存在する場合、新実行中プロセスの実行を開始すると、入出力バッファが枯渇する可能性があるためである。
【０１３０】
入出力バッファ使用数がその再設定使用枠値を超える実行中プロセスが１つも存在しない場合（ステップＳ１１１で無）、開始判定部２３は、新実行中プロセスの実行を開始可と判定する。次に、処理はステップＳ１１４に進む。
【０１３１】
（図１２のステップＳ１１２）
開始判定部２３は、入出力要求キャンセル部５２２を使用して、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスについて、入出力バッファの属性に基づいてその実行中プロセスの未実行の入出力要求をキャンセルする。
【０１３２】
例えば、入出力バッファの属性として、優先度やプリエンプション（Ｐｒｅｅｍｐｔｉｏｎ）可否など、対象領域の特性に応じた情報が、入出力要求を行うプログラムによって指定される。
【０１３３】
例えば、入出力要求のキャンセルを許容する属性として、コンソールメッセージ出力要求時に指定されるコンソール高負荷時にメッセージ出力を諦める属性が、挙げられる。
【０１３４】
具体的には、入出力要求キャンセル部５２２は、全ての入出力実行キュー７から、その実行中プロセスのキャンセル可能な優先度の入出力バッファ７１を検索して取り出す。例えば、その優先度は、入出力要求に含めて入出力バッファ管理部５に通知され、入出力バッファ７１に保持されている。続けて、開始判定部２３は、バッファ解放部５３を使用して、入出力要求キャンセル部５２２が取り出した入出力バッファ７１を、入出力バッファ６１として入出力バッファプール６に戻す。続けて、バッファ解放部５３は、バッファ解放を開始判定部２３に通知する。
【０１３５】
尚、入出力実行完了によっても入出力バッファの使用数は減少する。従って、本ステップは必須ではない。
【０１３６】
（図１２のステップＳ１１３）
開始判定部２３は、バッファ解放部５３からのバッファ解放通知を待ち合わせる。バッファ解放が通知された後、処理はステップＳ１１０に戻り、プロセススケジュール部２は、再度、開始判定を実施する。
【０１３７】
（図１２のステップＳ１１４）
開始部２１は、新実行中プロセスの実行を開始する。
【０１３８】
（図１２のステップＳ１１５）
開始判定部２３は、保留プロセスが存在するか否かを確認する。
【０１３９】
保留プロセスが存在しない場合（ステップＳ１１５で無）、処理は終了する。保留プロセスが存在する場合（ステップＳ１１５で有）、ステップＳ１１６に進む。
【０１４０】
（図１２のステップＳ１１６）
開始判定部２３は、ステップＳ１０８で記憶した保留プロセスに関する情報に基づいて、保留プロセスのうち、実行指示時刻が最も早い保留プロセスを、開始判定の対象として選択する。次に、処理はステップＳ１０５に戻る。
【０１４１】
（図１３のステップＳ１１７）
プロセススケジュール部２の終了検知部２２は、実行中プロセスのいずれかの終了を検知し、動作を開始する。
【０１４２】
（図１３のステップＳ１１８）
終了検知部２２は、保留プロセスの有無を確認する。
【０１４３】
保留プロセスが存在しない場合（ステップＳ１１８で無）、処理はステップＳ１１９に進む。保留プロセスが存在する場合（ステップＳ１１８で有）、処理はステップＳ１２０に進む。
【０１４４】
（図１３のステップＳ１１９）
使用枠値見直部２４は、全ての実行中プロセスについて、再設定使用枠値の見直しを行う。再設定使用枠値の見直しは、ステップＳ１０９と同様の処理となる。但し、本ステップは、新実行中プロセスが存在しない場合に動作するため、再設定使用枠値の見直し対象である全ての実行中プロセスは、新実行中プロセスを含まない。次に、処理は終了する。
【０１４５】
（図１３のステップＳ１２０）
開始判定部２３は、ステップＳ１０８で記憶した保留プロセスに関する情報に基づいて、保留プロセスのうち、実行指示時刻が最も早い保留プロセスを、開始判定の対象として選択する。
【０１４６】
（図１３のステップＳ１２１）
次に、開始判定部２３は、使用枠値取得部４１から、全ての実行中プロセスの所定使用枠値の値を取得する。また、開始判定部２３は、システムに存在する利用可能な入出力バッファの総数を、入出力バッファ管理部５から取得する。
【０１４７】
（図１３のステップＳ１２２）
次に、開始判定部２３は、その実行中プロセスの所定使用枠値の全てとその保留プロセスの所定使用枠値とを合計した合計値とその総数とを比較する。
【０１４８】
その合計値が、その総数より多い場合（ステップＳ１２２で開始不可）、開始判定部２３は、新規プロセスの開始を不可と判定する。次に、処理は、ステップＳ１２４に進む。この場合、開始判定部２３は、その保留プロセスについて何も処理しない。即ち、その保留プロセスは、保留プロセスのままである。
【０１４９】
また、その合計値が、入出力バッファの総数以下の場合（ステップＳ１２２で開始可）、開始判定部２３は、新規プロセスの開始を可と判定する。次に、処理は、ステップＳ１２３に進む。
【０１５０】
（図１３のステップＳ１２３)
開始判定部２３は、その保留プロセスのプロセス識別子及び所定使用枠値を、使用枠管理部４に送信する。
【０１５１】
そのプロセス識別子及びその所定使用枠値を受信した使用枠管理部４の使用枠値取得部４１は、使用枠管理テーブル４３にその保留プロセスに対応する使用枠管理レコード４３１を設定する。この時、使用枠値取得部４１は、その使用枠管理レコード４３１のプロセス識別子に、受信した使用枠管理レコード４３１を設定する。使用枠値取得部４１は、その使用枠管理レコード４３１の計数に、初期値として０を設定する。使用枠値取得部４１は、その使用枠管理レコード４３１の所定使用枠値に、受信した所定使用枠値を設定する。使用枠値取得部４１は、その使用枠管理レコード４３１の再設定使用枠値に、初期値として受信した所定使用枠値を設定する。また、使用枠値取得部４１は、その使用枠管理レコード４３１の入出力バッファ使用数に、初期値として０を設定する。
【０１５２】
尚、本ステップ実行後、その保留プロセスは実行中プロセスに含まれているものとする。尚、特に、その保留プロセスであった実行中プロセスを指す場合、その実行中プロセスを新実行中プロセスと呼ぶ。
【０１５３】
次に、処理は、ステップＳ１０９に進む。
【０１５４】
（図１３のステップＳ１２４）
使用枠値見直部２４を使用して、全ての実行中プロセスについて、再設定使用枠値の見直しを行う。再設定使用枠値の見直しは、ステップＳ１１９と同様の処理となる。但し、ステップＳ１０９における合計値は、本ステップＳ１２４においては、保留プロセスの所定使用枠値を含まない、実行中プロセスのみの所定使用枠値の合計である。次に、処理は終了する。
【０１５５】
図１４、図１５及び図１６は、実行中プロセスがブロッキング入出力部３を呼び出した場合、即ち入出力要求が発生した場合、の動作を示すフローチャートである。
【０１５６】
図１４は、入出力要求が発生した場合のブロッキング入出力部３の動作を示すフローチャートである。図１５は、入出力要求が発生した場合の非同期入出力要求部８の動作を示すフローチャートである。図１６は、入出力要求が発生した場合のデバイスドライバ５２３の動作を示すフローチャートである。
【０１５７】
（図１４のステップＳ２０１）
ブロッキング入出力部３の高頻度入出力検出部３３は、各実行中プロセスによるブロッキング入出力部３の呼び出しが、入出力要求するデバイスの性能につり合わない、高頻度の呼び出しであるか否かを監視する。続けて、高頻度入出力検出部３３は、その監視した結果に基づいて、各実行中プロセスの係数を更新する。
【０１５８】
具体的には、高頻度入出力検出部３３は、実行中プロセス毎の所定の記憶領域（例えば、記憶部９１２の記憶領域）に、デバイス毎に前回のブロッキング入出力部３の呼び出し時刻と、その呼び出しの間隔の平均値と、その呼び出しの累積回数とを記憶する。
【０１５９】
そして、高頻度入出力検出部３３は、前回の呼び出し時刻と今回の呼び出し時刻との差から、呼び出し間隔を計算し、その呼び出しの間隔の平均値を再計算する。続けて、高頻度入出力検出部３３は、前回の呼び出し時に記録された前回のブロッキング入出力部３の呼び出し時刻、呼び出し間隔の平均値及び呼び出し回数を更新する。
【０１６０】
更新した呼び出し間隔の平均値が、デバイスドライバ５２３が保持する入出力実行時間の平均値より短い場合、高頻度入出力検出部３３は、使用枠管理部４の使用枠管理テーブル４３に記憶されている係数を０に設定する。尚、高頻度入出力検出部３３は、係数を０に設定する実行中プロセスのプロセス識別子と元の係数とを例えば記憶部９１２に記憶する。
【０１６１】
呼び出し間隔が、デバイスドライバ５２３が保持する入出力実行時間の平均値以上の場合、高頻度入出力検出部３３は、係数を０に設定されたその実行中プロセスの係数を、先に記憶したその元の値に戻す。
【０１６２】
（図１４のステップＳ２０２）
次に、取得制限部３２は、使用枠値取得部４１と使用バッファ計数部４２とを介して、ブロッキング入出力部３を呼び出した実行中プロセスについて、使用枠管理テーブル４３に保持されている再設定使用枠値と入出力バッファ使用数とを取得する。
【０１６３】
（図１４のステップＳ２０３）
次に、取得制限部３２は、その再設定使用枠値と入出力バッファ使用数とを比較する。入出力バッファ使用数がその再設定使用枠値以上の場合（ステップＳ２０３でＮＯ）、取得制限部３２は、入出力バッファの取得制限要と判定して、ステップＳ２０４に進む。入出力バッファ使用数が再設定使用枠値未満の場合（ステップＳ２０３でＹＥＳ）、入出力バッファの取得制限不要と判定して、ステップＳ２０５に進む。
【０１６４】
（図１４のステップＳ２０４）
取得制限部３２は、バッファ解放部５３からのバッファ解放の通知を待ち合わせる。バッファ解放が通知されると、ステップＳ２０３に戻る。
【０１６５】
（図１４のステップＳ２０５）
ブロッキング入出力部３の入出力要求部３１は、独立した専用のプロセスで動作する非同期入出力要求部８に、その入出力要求を通知して、制御を実行中プロセスで動作するユーザプログラムに戻す。
【０１６６】
尚、バッファ取得を非同期実行して、そのユーザプログラムに制御を戻す時間を短縮する必要がない場合、または実行された入出力要求の結果をユーザプログラムに返却する必要がある場合は、以下のようにしてよい。第１に、ブロッキング入出力部３は、その入出力要求を非同期入出力要求部８に通知しない。第２に、ブロッキング入出力部３は、後述のステップＳ３０２、ステップＳ３０３の処理を、入出力要求部３１のプロセス、すなわちブロッキング入出力部３のプログラム実行の延長で行う。第３に、ブロッキング入出力部３は、後述のステップＳ３０３の入出力バッファ登録の通知完了後に、制御をそのユーザプログラムに戻す。
【０１６７】
（図１５のステップＳ３０１）
非同期入出力要求部８は、独立した専用のプロセスで動作し、入出力要求部３１からの入出力要求の通知を待ち合わせる。入出力要求が通知されると、処理はステップＳ３０２に進む。
【０１６８】
（図１５のステップＳ３０２）
非同期入出力要求部８は、バッファ取得部５１を使用して、入出力バッファ６１を取得する。
【０１６９】
（図１５のステップＳ３０３）
次に、非同期入出力要求部８は、入出力要求登録部５２１を使用して、ステップＳ３０２で取得した入出力バッファ６１を、入出力バッファ７１として入出力実行キュー７に登録し、入出力バッファ７１の登録をデバイスドライバ５２３に通知する。次に、処理はステップＳ３０1に戻り、非同期入出力要求部８は、再度、入出力要求の通知を待ち合わせる。
【０１７０】
（図１６のステップＳ４０１）
デバイスドライバ５２３は、デバイスドライバ５２３毎に独立した専用のプロセスで動作し、入出力要求登録部５２１からの入出力バッファ登録通知を待ち合わせる。入出力バッファ登録が通知されると、処理はステップＳ４０２に進む。
【０１７１】
（図１６のステップＳ４０２）
デバイスドライバ５２３は、入出力実行キュー７に入出力バッファ７１が登録されているか否かを確認する。入出力バッファ７１が登録されていない場合（ステップＳ４０２で無）、処理はステップＳ４０１に戻り、デバイスドライバ５２３は、再度入出力バッファ登録通知を待ち合わせる。入出力バッファ７１が登録されている場合（ステップＳ４０２で有）、デバイスドライバ５２３は、最初に登録された入出力バッファ７１を取り出す。次に、処理はステップＳ４０３に進む。
【０１７２】
（図１６のステップＳ４０３）
デバイスドライバ５２３は、ステップＳ４０２で取り出した入出力バッファ７１に基づいて、デバイスに対して入出力を実行する。
【０１７３】
（図１６のステップＳ４０４）
次に、デバイスドライバ５２３は、入出力実行に要した時間を測定し、統計情報として平均時間を記録する。
【０１７４】
（図１６のステップＳ４０５）
次に、デバイスドライバ５２３は、バッファ解放部５３を使用して、入出力実行に使用した入出力バッファ７１を、入出力バッファ６１として入出力バッファプール６に戻す。この処理を実行することを、バッファ解放と呼ぶ。続けて、デバイスドライバ５２３は、そのバッファ解放をステップＳ１１３で待ち状態にある開始判定部２３、または、ステップＳ２０４で待ち状態にある取得制限部３２に通知する。次に、処理はステップＳ４０１に戻り、デバイスドライバ５２３は、再度入出力バッファ登録通知を待ち合わせる。
【０１７５】
上述した本実施形態における第１の効果は、各プロセス１に対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することを可能にする点である。
【０１７６】
その理由は、以下のような構成を含むからである。即ち、第１に開始判定部２３が、新規プロセス及び実行中プロセスの所定使用枠値に基づいて、新規プロセスの実行を保留する。第２に、ブロッキング入出力部３が各プロセス１による入出力バッファ使用数を再設定使用枠値以下に保つ。第３に、使用枠値見直部２４が、新規プロセスの実行を開始する場合及び実行中プロセスが終了した場合に、入出力バッファの利用率がより高くなるように、再設定使用枠値の見直しを実行する。
【０１７７】
上述した本実施形態における第２の効果は、ブロッキング入出力部３による入出力バッファ解放の待ち合わせが発生せず、ブロッキング入出力部３を呼び出した実行中プロセスとして動作するユーザプログラムに速やかに制御を戻せることを可能にする点である。
【０１７８】
その理由は、以下のような構成を含むからである。即ち、第１に開始判定部２３が、新規プロセス及び実行中プロセスの所定使用枠値に基づいて、新規プロセスの実行を保留する。第２に、開始判定部２３が、更に再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスが存在しない場合に、新規プロセスの実行を開始する。
【０１７９】
上述した本実施形態における第３の効果は、利用可能な入出力バッファを、更に有効に活用することを可能にする点である。
【０１８０】
その第１の理由は、検査部２５が、プロセス１として実行を開始するユーザプログラムのロードモジュールを検査し、入出力バッファを使用しないプロセスについては、所定使用枠値を０にするからである。
【０１８１】
その第２の理由は、高頻度入出力検出部３３が、実行中プロセスの暴走などによる、対象デバイスに見合わない高頻度なブロッキング入出力部３の呼び出しを検出して、その実行中プロセスの係数を０にするからである。
【０１８２】
上述した本実施形態における第４の効果は、新実行中プロセス実行開始時における、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスの、バッファ解放の待ち合わせ時間を短縮できることである。
【０１８３】
その理由は、開始判定部２３が実行中プロセスを検出した場合、開始判定部２３が入出力要求キャンセル部５２２を使用して、その実行中プロセスのキャンセル可能な未実行の入出力要求をキャンセルするからである。ここで、その実行中プロセスは、見直し後の再設定使用枠値以上の入出力バッファを使用している実行中プロセスである。即ち、入出力要求キャンセル部５２２が、その入出力要求をキャンセルすることで、デバイスの入出力性能に依存しない、速やかな入出力バッファの解放が実現できるからである。
【０１８４】
上述した本実施形態における第５の効果は、ブロッキング入出力部３の実行に掛かる時間を短縮して、速やかにユーザプログラムに制御を戻せることである。
【０１８５】
その理由は、非同期入出力要求部８が、独立した専用プロセスで動作し、入出力要求部３１が実施する入出力バッファ管理部５への入出力要求処理を、代理実行するからである。
【０１８６】
より詳細には、上述の第１の効果により、入出力バッファの枯渇は発生しないため、ブロッキング入出力部３は、バッファ取得の成否を確認することなくユーザプログラムに制御を戻せる。そこで、ブロッキング入出力部３は、別プロセスで動作する非同期入出力要求部８へ入出力要求を通知し、次に、通知を受けた非同期入出力要求部８は、並列して入出力バッファを取得する。
【０１８７】
この第５の効果は、入出力バッファの数が非常に多くて空きバッファの探索に時間が掛かる場合や、多数の実行中プロセスが同時に入出力バッファの取得を要求して排他ネックになる場合など、入出力バッファの取得処理のコストが大きい場合に、特に有効である。尚、ブロッキング入出力部３は、非同期入出力要求部８によって非同期に実行された入出力要求の結果をユーザプログラムに返却できない。そのため、この非同期入出力要求部８を含む構成は、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）メッセージの送信や、コンソールメッセージの出力など、入出力バッファが確保できれば、成功とみなせるような処理に適用できる。
【０１８８】
上述した本実施形態における第６の効果は、入出力バッファの特性に加えてデバイス毎に適した再設定使用枠値の見直しが可能になる点である。
【０１８９】
その理由は、開始判定部２３が、実行優先度、所定使用枠値及びデバイスの入出力性能の任意の情報に基づいて、係数を算出するようにしたからである。
【０１９０】
＜＜＜第２の実施形態＞＞＞
次に、本発明の第２の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
【０１９１】
図１７は、本発明の第２の実施形態に係るバッファ管理装置９０２の構成を示すブロック図である。
【０１９２】
図１７に示すように、本実施形態におけるバッファ管理装置９０２は、第１の実施形態のバッファ管理装置９０１と比べて、プロセススケジュール部２に替えてプロセススケジュール部２０２を含む点が異なる。また、バッファ管理装置９０２は、ブロッキング入出力部３に替えてブロッキング入出力部３０２を含む点が異なる。
【０１９３】
また、バッファ管理装置９０２は、バッファ管理装置９０１と比べて、使用枠管理部４を含まない点が異なる。バッファ管理装置９０２において、使用枠管理部４の機能に相当する機能は、開始判定部２３２（後述）、グループ使用枠管理テーブル２４２１（後述）及びプロセスグループ対応テーブル２４２２（後述）により実現される。
【０１９４】
実施形態１のバッファ管理装置９０１は、再設定使用枠値の管理をプロセス１毎に行う。従って、実施形態１では、実行中プロセス数に比例する、再設定使用枠値の見直しを実行するための及び開始判定を実行するための、コストが発生する。第２の実施形態のバッファ管理装置９０２は、実行中プロセスが所定の情報に基づいてグループ化され、そのグループに対応する所定使用枠値及び再設定使用枠値を制御及び利用する。従って、第２の実施形態では、そのコストは、グループ数に比例する。
【０１９５】
尚、本実施形態におけるユーザからのプログラム実行指示は、例えば、ユーザプログラムの識別子、所定使用枠値、係数及びグループ識別子を含む。
【０１９６】
図１８は、本実施形態のプロセススケジュール部２０２の構成を示すブロック図である。
【０１９７】
図１８に示すように、プロセススケジュール部２０２は、第１の実施形態のプロセススケジュール部２と比べて、以下の点が異なる。プロセススケジュール部２０２は、終了検知部２２に替えて終了検知部２２２を含む。プロセススケジュール部２０２は、開始判定部２３に替えて開始判定部２３２を含む。プロセススケジュール部２０２は、使用枠値見直部２４に替えて使用枠値見直部２４２を含む。また、プロセススケジュール部２０２は、グループ使用枠管理テーブル２４２１及びプロセスグループ対応テーブル２４２２を更に含む。
【０１９８】
図１９は、本実施形態におけるグループ使用枠管理テーブル２４２１の一例を示す図である。
【０１９９】
図１９に示すように、グループ使用枠管理テーブル２４２１は、グループ識別子、係数、所定使用枠値、再設定使用枠値及び実行中プロセス数を含む、グループ使用枠レコードを含む。
【０２００】
グループ識別子は、グループを特定する情報である。そのグループ識別子は、事前にユーザによって設定される。
【０２０１】
係数は、再設定使用枠値を算出する際の、そのグループに所属するプロセス１のそれぞれの重みである。その係数は、事前にユーザによって設定される。
【０２０２】
所定使用枠値は、そのグループに所属するプロセス１のそれぞれの所定使用枠値である。その所定使用枠値は、事前にユーザによって設定される。
【０２０３】
再設定使用枠値は、そのグループに所属するプロセス１のそれぞれの再設定使用枠値である。
【０２０４】
実行中プロセス数は、そのグループに所属する実行中プロセスの数である。その実行中プロセス数は、開始判定部２３２と終了検知部２２２とによって、実行中プロセスの増減にあわせて、更新される。
【０２０５】
図２０は、本実施形態の開始部２１におけるプロセスグループ対応テーブル２４２２の一例を示す図である。
【０２０６】
図２０に示すように、プロセスグループ対応テーブル２４２２は、プロセス識別子、グループ識別子及び入出力バッファ使用数を含む、対応レコードを含む。
【０２０７】
プロセス識別子は、図５に示すプロセス識別子と同じである。
【０２０８】
グループ識別子は、図１８に示すグループ識別子と同じである。
【０２０９】
入出力バッファ使用数は、図５に示す入出力バッファ使用数と同じである。
【０２１０】
終了検知部２２２は、プロセス１の終了を検知して実行する後処理において、グループ使用枠管理テーブル２４２１の実行中プロセス数を、終了したプロセス１の数だけ減ずる。また、終了検知部２２２は、その後処理において、プロセスグループ対応テーブル２４２２から終了したプロセス１に対応する対応レコードを削除する。
【０２１１】
開始判定部２３２は、プロセスグループ対応テーブル２４２２を参照することで、プロセス識別子に対応するグループ識別子を取得する。そして、開始判定部２３２は、取得したグループ識別子に基づいて、グループ使用枠管理テーブル２４２１を参照することで、そのプロセス識別子に対応する係数、所定使用枠値、再設定使用枠値を取得する。
【０２１２】
開始判定部２３２は、実行中プロセスの所定使用枠値の合計を、グループ使用枠管理テーブル２４２１に基づいて、全てのグループ識別子のそれぞれに対応する所定使用枠値と実行中プロセス数とを乗じた値を、合算して算出する。
【０２１３】
開始判定部２３２は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定した場合、その新規プロセスのプロセス識別子及びグループ識別子を含む対応レコードをプロセスグループ対応テーブル２４２２に追加する。また、開始判定部２３２は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定した場合、グループ使用枠管理テーブル２４２１のその新規プロセスに対応する実行中プロセス数に１を加算する。
【０２１４】
開始判定部２３２は、ブロッキング入出力部３０２からの要求に応答して、グループ使用枠管理テーブル２４２１に記録された再設定使用枠値を出力する。
【０２１５】
開始判定部２３２は、実行中プロセスのそれぞれの入出力バッファの使用数を計数し、計数したその使用数をプロセスグループ対応テーブル２４２２に記録する。
【０２１６】
開始判定部２３２は、ブロッキング入出力部３０２からの要求に応答して、プロセスグループ対応テーブル２４２２に記録された入出力バッファ使用数を出力する。
【０２１７】
使用枠値見直し部２４２は、グループ使用枠管理テーブル２４２１でグループ毎に保持される所定使用枠値、係数、及び、そのグループに所属する実行中プロセス数に基づいて、再設定使用枠値の見直しを実施する。
【０２１８】
ステップＳ１０９における計算手順において、式１は式３で、式２は式４で置換される。
【０２１９】
「Ｌｓ  ＝  Ｎ  −  Σ（Ｌｇ・Ｐｇ）    ・・・（式３）
Ｌｓ    ：  余剰使用枠値
Ｎ      ：  入出力バッファの総数
Ｌｇ    ：  プロセスグループの１プロセスあたりの所定使用枠値
Ｐｇ    ：  プロセスグループの実行中プロセス数
Σ（Ｌｇ・Ｐｇ）  ：  実行中プロセスの所定使用枠値の合計」。
【０２２０】
「Ｌｇ’  ＝  Ｌｇ  ＋    Ｌｓ・Ｒｇ    ・・・（式４）
Ｌｇ’：  プロセスグループの見直し後の再設定使用枠値
Ｌｇ  ：  プロセスグループの所定使用枠値
Ｒｇ  ：  プロセスグループの分配率
Ｒｇ  ＝  Ｋｇ  ／  Σ（ｋｇ・Ｐｇ）
Ｋｇ    ：  プロセスグループの１プロセスあたりの係数
Σ（Ｋｇ・Ｐｇ）  ：  実行中プロセスの係数の合計
※  分配する使用枠値の合計が、余剰使用枠値を超えないように端数を処理する
※  余剰使用枠値が０の場合は、Ｌｇ’  ＝  Ｌｇとする
※  Σ（ｋｇ・Ｐｇ）が０の場合、Ｒｇ  ＝  ０  とする」。
【０２２１】
図２１は、本実施形態のブロッキング入出力部３０２の構成を示すブロック図である。
【０２２２】
図２１に示すように、ブロッキング入出力部３０２は、第１の実施形態のブロッキング入出力部３と比べて、以下の点が異なる。ブロッキング入出力部３０２は、取得制限部３２に替えて取得制限部３２２を、高頻度入出力検出部３３に替えて高頻度入出力検出部３３２を含む。以後、高頻度入出力検出部３３２は、高頻度入出力検出部３３２とも記載する。
【０２２３】
取得制限部３２２は、プロセススケジュール部２０２から、グループ使用枠管理テーブル２４２１の再設定使用枠値を取得する。また、取得制限部３２２は、プロセススケジュール部２０２から、プロセスグループ対応テーブル２４２２に含まれる入出力バッファ数を取得する。
【０２２４】
高頻度入出力検出部３３２は、プロセススケジュール部２０２のグループ使用枠管理テーブル２４２１の再設定使用枠値を設定する。
【０２２５】
上述した本実施形態における効果は、再設定使用枠値の見直しを実行するためのコスト及び開始判定を実行するための、コストを削減することが可能になる点である。
【０２２６】
その理由は、プロセススケジュール部２０２及びプロセススケジュール部２０３が、プロセス１をグループ化し、グループを単位として再設定使用枠値の見直し、及び開始判定を実行するからである。
【０２２７】
＜＜＜第３の実施形態＞＞＞
次に、本発明の第３の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
【０２２８】
図２２は、本発明の第３の実施形態に係るバッファ管理装置９０３の構成を示すブロック図である。
【０２２９】
図２２に示すように、本実施形態におけるバッファ管理装置９０３は、プロセススケジュール部２０３及びブロッキング入出力部３０３を含む。  尚、図２２に示す各構成要素は、ハードウェア単位の回路でも、コンピュータ装置の機能単位に分割された構成要素でもよい。ここでは、図２２に示す構成要素は、コンピュータ装置の機能単位に分割された構成要素として説明する。
【０２３０】
プロセススケジュール部２０３は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれに対応する所定使用枠値の合計数（第１の合計数）と、を比較する。ここで、所定使用枠値は、プロセス１（新規プロセス及び実行中プロセスのそれぞれ）が必要とする入出力バッファの数の下限値である。
【０２３１】
次に、プロセススケジュール部２０３は、その比較した結果に基づいて、その新規プロセスの実行を開始及び保留する。
【０２３２】
また、プロセススケジュール部２０３は、新規プロセスの実行を開始する場合及び実行中プロセスが終了した場合、利用可能な入出力バッファの利用率がより高くなるように、再設定使用枠値の見直しを実行する。ここで、再設定使用枠値は、実行中プロセスのそれぞれが同時に取得できる、その入出力バッファの数の上限値（第１の上限値）である。
【０２３３】
ブロッキング入出力部３０３は、実行中プロセスから入出力要求を受信した場合に、その実行中プロセスによる入出力バッファの使用数を、その実行中プロセスに対応する再設定使用枠値以下に保つように、入出力バッファの取得を待ち合わせる。
【０２３４】
プロセススケジュール部２０３は、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスが存在しない状態になるまで、新規プロセスの実行を待ち合わせてよい。
【０２３５】
例えば、プロセススケジュール部２０３は、新規プロセスを開始する場合、上述の第１の合計数と、上述の利用可能な入出力バッファの総数とに基づいて、再設定使用枠値の見直しを実行してよい。
【０２３６】
例えば、プロセススケジュール部２０３は、実行中プロセスが終了した場合、その実行中プロセスに対して設定された所定使用枠値の合計数（第２の合計数）と、上述の利用可能な入出力バッファの総数とに基づいて、再設定使用枠値の見直しを実行してよい。
【０２３７】
プロセススケジュール部２０３は、新規プロセス及び実行中プロセスのそれぞれに対応する実行優先度、並びに所定使用枠値及びデバイスの入出力性能、の任意の情報に基づいて、新規プロセス及び実行中プロセスのそれぞれに対応する係数を算出してよい。そして、プロセススケジュール部２０３は、算出したその係数に基づいて、再設定使用枠値の見直しを実行してよい。
【０２３８】
ブロッキング入出力部３０３は、所定の閾値を超える頻度で入出力要求を実行する実行中プロセスに対応する上述の係数を、プロセススケジュール部２０３による再設定使用枠値の見直しにおいて再設定使用枠値が相対的に小さくなるように、更新してよい。
【０２３９】
プロセススケジュール部２０３は、新規プロセスが入出力バッファを使用しないバッファ不用プロセスである場合、そのバッファ不用プロセスの所定使用枠値を０に設定してよい。
【０２４０】
プロセススケジュール部２０３は、新規プロセスの実行を開始する場合及び実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、グループに対応する再設定使用枠値の見直しを実行してよい。ここで、そのグループは、プロセス１が所定の情報に基づいてグループ化されたグループである。グループに対応する再設定使用枠値は、そのグループに所属する実行中プロセスのそれぞれが同時に取得できる、入出力バッファの数の上限値（第２の上限値）である。
【０２４１】
この場合、ブロッキング入出力部３０３は、グループに対応する再設定使用枠値に基づいて入出力バッファの取得を待ち合わせてよい。
【０２４２】
尚、バッファ管理装置９０３のハードウェア単位の構成要素は、図１０に示すバッファ管理装置９０１のハードウェア単位の構成要素と同様であってよい。
【０２４３】
本実施形態の場合、ＣＰＵ９１１は、読み込んだプログラムに従って、また読み込んだデータに基づいて、図２２に示すプロセススケジュール部２０３及びブロッキング入出力部３０３として各種の処理を実行する。
【０２４４】
上述した本実施形態における効果は、第１の実施形態の第１、２、３、６及び７と同様である。その理由は、バッファ管理装置９０３が上述のプロセススケジュール部２０３及びブロッキング入出力部３０３を含むからである。
【０２４５】
＜＜＜第４の実施形態＞＞＞
次に、本発明の第４の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
【０２４６】
図２３は、本発明の第４の実施形態に係るバッファ管理装置９０４の構成を示すブロック図である。
【０２４７】
図２３に示すように、本実施形態におけるバッファ管理装置９０４は、図２２に示す第３の実施形態のバッファ管理装置９０３と比べて、入出力バッファ管理部５０４を更に含む点が異なる。
【０２４８】
入出力バッファ管理部５０４は、入出力バッファに格納されたデータの破棄を許容する特性が示されている場合、その特性に基づいて、使用中の入出力バッファを強制的に開放する。
【０２４９】
上述した本実施形態における効果は、第３の実施形態の効果に加えて、新実行中プロセスの実行開始時における、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスのバッファ解放の待ち合わせ時間を短縮できることである。ここで、新実行中プロセスは、第１の実施形態において説明した、新たに実行を開始するプロセス１である。
【０２５０】
その理由は、プロセススケジュール部２０４が実行中プロセスを検出した場合、プロセススケジュール部２０４が入出力バッファ管理部５０４を使用して、その実行中プロセスのキャンセル可能な未実行の入出力要求をキャンセルするからである。
【０２５１】
＜＜＜第５の実施形態＞＞＞
次に、本発明の第５の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
【０２５２】
図２４は、本発明の第５の実施形態に係るバッファ管理装置９０５の構成を示すブロック図である。
【０２５３】
図２４に示すように、本実施形態におけるバッファ管理装置９０５は、図２２に示す第３の実施形態のバッファ管理装置９０３と比べて、非同期入出力要求部８を更に含む点が異なる。
【０２５４】
非同期入出力要求部８が、図１に示す非同期入出力要求部８と同じである。
【０２５５】
上述した本実施形態における効果は、第３の実施形態の効果に加えて、ブロッキング入出力部３０３の実行に掛かる時間を短縮して、速やかにユーザプログラムに制御を戻せることである。
【０２５６】
その理由は、非同期入出力要求部８を更に含むからである。
【０２５７】
以上の各実施形態で説明した各構成要素は、必ずしも個々に独立した存在である必要はない。例えば、各構成要素は、複数の構成要素が１個のモジュールとして実現されてよい。また、各構成要素は、１つの構成要素が複数のモジュールで実現されてもよい。また、各構成要素は、ある構成要素が他の構成要素の一部であるような構成であってよい。また、各構成要素は、ある構成要素の一部と他の構成要素の一部とが重複するような構成であってもよい。
【０２５８】
以上説明した各実施形態における各構成要素及び各構成要素を実現するモジュールは、必要に応じ、可能であれば、ハードウェア的に実現されてよい。また、各構成要素及び各構成要素を実現するモジュールは、コンピュータ及びプログラムで実現されてよい。また、各構成要素及び各構成要素を実現するモジュールは、ハードウェア的なモジュールとコンピュータ及びプログラムとの混在により実現されてもよい。
【０２５９】
そのプログラムは、例えば、磁気ディスクや半導体メモリなど、不揮発性のコンピュータ可読記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られる。この読み取られたプログラムは、そのコンピュータの動作を制御することにより、そのコンピュータを前述した各実施形態における構成要素として機能させる。
【０２６０】
また、以上説明した各実施形態では、複数の動作をフローチャートの形式で順番に記載してあるが、その記載の順番は複数の動作を実行する順番を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の順番は内容的に支障のない範囲で変更することができる。
【０２６１】
更に、以上説明した各実施形態では、複数の動作は個々に相違するタイミングで実行されることに限定されない。例えば、ある動作の実行中に他の動作が発生したり、ある動作と他の動作との実行タイミングが部分的に乃至全部において重複していたりしていてもよい。
【０２６２】
更に、以上説明した各実施形態では、ある動作が他の動作の契機になるように記載しているが、その記載はある動作と他の動作との全ての関係を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の関係は内容的に支障のない範囲で変更することができる。また各構成要素の各動作の具体的な記載は、各構成要素の各動作を限定するものではない。このため、各構成要素の具体的な各動作は、各実施形態を実施する上で機能的、性能的、その他の特性に対して支障をきたさない範囲内で変更されてよい。
【０２６３】
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０２６４】
（付記１）利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行する
プロセススケジュール手段と、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む
情報処理装置。
【０２６５】
（付記２）前記ブロッキング入出力手段は、
前記第１の上限値を超える数の前記入出力バッファを使用している前記実行中プロセスが存在しない状態になるまで、前記新規プロセスの実行を待ち合わせる
ことを特徴とする付記１記載の情報処理装置。
【０２６６】
（付記３）前記プロセススケジュール手段は、
前記新規プロセスを開始する場合、前記第１の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第１の上限値の見直しを実行し、
前記実行中プロセスが終了した場合、前記実行中プロセスに対して設定された前記下限値の第２の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第１の上限値の見直しを実行する
ことを特徴とする付記１または２記載の情報処理装置。
【０２６７】
（付記４）前記プロセススケジュール手段は、
前記新規プロセス及び前記実行中プロセスのそれぞれに対応する実行優先度及び前記下限値、並びにデバイスの入出力性能、の任意の情報に基づいて、前記新規プロセス及び前記実行中プロセスのそれぞれに対応する係数を算出し、算出された前記係数に基づいて、前記見直しを実行する
ことを特徴とする付記１乃至３のいずれか１つに記載の情報処理装置。
【０２６８】
（付記５）前記ブロッキング入出力手段は、所定の閾値を超える頻度で入出力要求を実行する前記実行中プロセスに対応する前記係数を、前記プロセススケジュール手段による前記見直しにおいて前記第１の上限値が相対的に小さくなるように、更新する
ことを特徴とする付記４記載の情報処理装置。
【０２６９】
（付記６）前記プロセススケジュール手段は、前記新規プロセスが入出力バッファを使用しないバッファ不用プロセスである場合、前記バッファ不用プロセスの前記下限値を０に設定する
ことを特徴とする付記１乃至５のいずれか１つに記載の情報処理装置。
【０２７０】
（付記７）前記入出力バッファに格納されたデータの破棄を許容する特性が示されている場合、前記特性に基づいて、使用中の前記入出力バッファを強制的に開放する入出力バッファ管理手段を更に含む
ことを特徴とする付記１乃至６のいずれか１つに記載の情報処理装置。
【０２７１】
（付記８）前記プロセススケジュール手段は、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記プロセスが所定の情報に基づいてグループ化されたグループに対応する、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第２の上限値の見直しを実行し、
前記入出力ブロッキング手段は、前記第２の上限値に基づいて前記入出力バッファの取得を待ち合わせる
ことを特徴とする付記１乃至７のいずれか１つに記載の情報処理装置。
【０２７２】
（付記９）前記入出力ブロッキング手段とは並列に動作可能であり、前記入出力ブロッキング手段から入出力要求を受信し、受信した前記入出力要求を代理実行する非同期入出力要求手段を、更に更に含む
ことを特徴とする付記１乃至８のいずれか１つに記載の情報処理装置。
【０２７３】
（付記１０）所定使用枠値の入力を受け付ける手段を更に含む
ことを特徴とする付記１乃至９のいずれか１つに記載の情報処理装置。
【０２７４】
（付記１１）プロセッサと、プロセススケジュール部及びブロッキング入出力部として動作するための、プロセッサによって実行される命令を保持する記憶部とを含み、
前記プロセススケジュール部は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行し、
前記ブロッキング入出力部は、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる
情報処理装置。
【０２７５】
（付記１２）利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行し、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる
バッファ管理方法。
【０２７６】
（付記１３）利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第１の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第１の上限値の見直しを実行し、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第１の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる処理をコンピュータに実行させる
プログラム。
【０２７７】
以上、各実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しえるさまざまな変更をすることができる。
【符号の説明】
【０２７８】
１    プロセス
２    プロセススケジュール部
３    ブロッキング入出力部
４    使用枠管理部
５    入出力バッファ管理部
６    入出力バッファプール
７    入出力実行キュー
８    非同期入出力要求部
２１    開始部
２２    終了検知部
２３    開始判定部
２４    使用枠値見直部
２５    検査部
３１    入出力要求部
３２    取得制限部
３３    高頻度入出力検出部
４１    使用枠値取得部
４２    使用バッファ計数部
４３    使用枠管理テーブル
５１    バッファ取得部
５２    入出力実行管理部
５３    バッファ解放部
６１    入出力バッファ
７１    入出力バッファ
３３２    高頻度入出力検出部
４３１    使用枠管理レコード
５２１    入出力要求登録部
５２２    入出力要求キャンセル部
５２３    デバイスドライバ
９０１    バッファ管理装置
９１０    コンピュータ
９１１    ＣＰＵ
９１２    記憶部
９１３    記憶装置
９１４    入出力部
９１７    記録媒体
【図１】
2015125525.tif 000003
【図２】
2015125525.tif 000004
【図３】
2015125525.tif 000005
【図４】
2015125525.tif 000006
【図５】
2015125525.tif 000007
【図６】
2015125525.tif 000008
【図７】
2015125525.tif 000009
【図８】
2015125525.tif 000010
【図９】
2015125525.tif 000011
【図１０】
2015125525.tif 000012
【図１１】
2015125525.tif 000013
【図１２】
2015125525.tif 000014
【図１３】
2015125525.tif 000015
【図１４】
2015125525.tif 000016
【図１５】
2015125525.tif 000017
【図１６】
2015125525.tif 000018
【図１７】
2015125525.tif 000019
【図１８】
2015125525.tif 000020
【図１９】
2015125525.tif 000021
【図２０】
2015125525.tif 000022
【図２１】
2015125525.tif 000023
【図２２】
2015125525.tif 000024
【図２３】
2015125525.tif 000025
【図２４】
2015125525.tif 000026