JP2015125525A - バッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラム - Google Patents

バッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラム Download PDF

Info

Publication number
JP2015125525A
JP2015125525A JP2013268403A JP2013268403A JP2015125525A JP 2015125525 A JP2015125525 A JP 2015125525A JP 2013268403 A JP2013268403 A JP 2013268403A JP 2013268403 A JP2013268403 A JP 2013268403A JP 2015125525 A JP2015125525 A JP 2015125525A
Authority
JP
Japan
Prior art keywords
input
output
unit
buffer
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013268403A
Other languages
English (en)
Other versions
JP6269045B2 (ja
Inventor
聡 横手
Satoshi Yokote
聡 横手
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2013268403A priority Critical patent/JP6269045B2/ja
Publication of JP2015125525A publication Critical patent/JP2015125525A/ja
Application granted granted Critical
Publication of JP6269045B2 publication Critical patent/JP6269045B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】 各プロセスに対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することが困難である。【解決手段】 利用可能な入出力バッファの総数と、新規プロセス及び実行中プロセスのそれぞれが必要とする入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、新規プロセスの実行を開始及び保留し、利用可能な入出力バッファの利用率がより高くなるように、実行中プロセスが同時に取得できる入出力バッファの数の上限値の見直しを実行するプロセススケジュール手段と、実行中プロセスによる入出力バッファの使用数を、その上限値以下に保つように、入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む。【選択図】 図1

Description

本発明は、バッファ管理技術に関し、特にバッファを割り当てる技術に関する。
バッファ管理のためのさまざまな関連技術が知られている。
例えば、特許文献1は、バッファ管理装置の一例を開示する。特許文献1のバッファ管理装置は、ファイルの入出力部分を一時記憶するバッファ部に、プロセス毎に設定されたサイズのバッファ領域を確保する、バッファ管理手段を備える。特許文献1は、上述の構成を備えるそのバッファ管理装置が、二次記憶装置への入出力の効率及びシステム全体の効率を向上させるとしている。
近年、コンピュータシステムの大規模化や複雑化などにより、コンピュータシステム内で動作するプロセス間の連携が密になる傾向がある。そのため、あるプロセスの想定外の停止が他のプロセスにも伝播し、システム全体に影響を与えるという可能性が、高くなっている。
想定外のプロセス停止の一因に、ブロッキングI/O(Input/Output) API(Application Programming Interface)使用時の資源不足が挙げられる。ブロッキングI/O APIにおいては、I/O実行の完了を待つ場合と、I/O実行に必要な資源であるI/Oバッファの確保を待つ場合とに、ブロッキングI/O APIの内部で処理の実行が停止する。
一般的に、I/O実行の完了待ちについては、プログラム実装者の想定の範囲内である。しかしながら、I/Oバッファの確保待ちという事象は、I/Oバッファ不足時にしか発生しない。そのため、実装者によってはその事象の発生を想定していないという場合がある。また、実装者が、その事象の発生を想定しながらも、そのI/Oバッファの確保待ちが発生した場合のテストを十分に実施していない場合がある。
ブロッキングI/O APIのI/Oバッファ不足によるプロセスの停止を避けるため、一般的にはノンブロッキングI/O APIも用意されている。
ノンブロッキングI/O APIは、I/O完了待ちによっても、I/Oバッファ不足によっても、処理の実行を停止しない。しかしながら、ノンブロッキングI/O APIを使用する場合には、I/O完了やI/Oバッファ不足解消などのハンドリング、API呼び出しの再試行などが必要である。そのため、ノンブロッキングI/O APIを使用する場合は、ブロッキングI/O APIを使用する場合より、プログラム実装の難易度が高い。
そこで、プログラムの実装を容易にするため、ブロッキングI/O APIが使用される場合がある。また、既存プログラムに対するブロッキングI/O APIからノンブロッキングI/O APIへの移行作業は、前述のとおりプログラミングモデルが異なるため、APIの単純置換では対応できず、コストが大きい。
即ち、大規模で複雑化したシステムにおいて、ブロッキングI/O APIが使用されることにより、I/Oバッファ不足時にプロセス停止が発生し、タイミング依存バグが誘発されるという問題点があった。
このような問題点を解決する技術が特許文献2に記載されている。特許文献2に記載のアプリケーション・プログラム・インタフェースの非同期動作制御方式は、プログラム実行時(即ち、プロセス)の資源(上述のI/Oバッファに対応)不足を回避する技術である。その非同期動作制御方式においては、資源保証したいプロセスに対して、事前確保した資源が固定的に割り当てられる。そして、そのプロセスは、割り当てられたその資源をプール管理して使用する。これらの構成を備えることで、その非同期動作制御方式は、他プロセスの資源消費の影響を排除する。
特開2000−305825号公報 特開平2−308338号公報
しかしながら、上述した先行技術文献に記載された技術においては、各プロセスに対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することが困難であるという問題点がある。
その理由は、以下のとおりである。
特許文献1に記載されたバッファ管理装置は、プロセス毎に設定されたサイズのバッファ領域を、固定的に確保するからである。即ち、そのバッファ管理装置は、未使用状態のバッファ領域が存在及び発生しても、確保するバッファ領域を増加する手段を持たないからである。
特許文献2に記載された非同期動作制御方式は、事前確保した資源を各プロセスがローカルに管理するからである。即ち、その非同期動作制御方式は、未使用状態のバッファ領域が発生しても、各プロセスがローカルに管理する資源を増加する手段を持たない。
即ち、上述した先行技術文献に記載された技術においては、プロセス間での資源(入出力バッファ)の融通が難しく、プロセスの数が増減する一般的な環境では、有限個の資源を余すことなく、効率的に利用できない。
本発明の目的は、上述した問題点を解決するバッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラムを提供することにある。
本発明の一様態における情報処理装置は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行するプロセススケジュール手段と、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む。
本発明の一様態におけるバッファ管理方法は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行し、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる。
本発明の一様態におけるプログラムは、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行し、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる処理をコンピュータに実行させる。
本発明は、各プロセスに対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することを可能にするという効果がある。
図1は、本発明の第1の実施形態に係るバッファ管理装置の構成を示すブロック図である。 図2は、第1の実施形態におけるプロセススケジュール部の一例を示すブロック図である。 図3は、第1の実施形態におけるブロッキング入出力部の一例を示すブロック図である。 図4は、第1の実施形態における使用枠管理部の一例を示すブロック図である。 図5は、第1の実施形態におけるプロセス管理テーブルの一例を示す図である。 図6は、第1の実施形態における入出力バッファ管理部の一例を示すブロック図である。 図7は、第1の実施形態における入出力バッファプール部の一例を示すブロック図である。 図8は、第1の実施形態における入出力実行キューの一例を示す図である。 図9は、第1の実施形態における入出力実行管理部の一例を示すブロック図である。 図10は、第1の実施形態に係る情報処理装置を実現するコンピュータのハードウェア構成を示すブロック図である。 図11は、第1の実施形態におけるユーザプログラムの実行指示受付時及び実行中プロセス終了時の動作を示すフローチャートである。 図12は、第1の実施形態におけるユーザプログラムの実行指示受付時及び実行中プロセス終了時の動作を示すフローチャートである。 図13は、第1の実施形態におけるユーザプログラムの実行指示受付時及び実行中プロセス終了時の動作を示すフローチャートである。 図14は、第1の実施形態における実行中プロセスがブロッキング入出力部を呼び出した場合の動作を示すフローチャートである。 図15は、第1の実施形態における実行中プロセスがブロッキング入出力部を呼び出した場合の動作を示すフローチャートである。 図16は、第1の実施形態における実行中プロセスがブロッキング入出力部を呼び出した場合の動作を示すフローチャートである。 図17は、本発明の第2の実施形態に係るバッファ管理装置の構成を示すブロック図である。 図18は、第2の実施形態におけるプロセススケジュール部の一例を示すブロック図である。 図19は、第2の実施形態におけるグループ使用枠管理テーブルの一例を示す図である。 図20は、第2の実施形態におけるプロセスグループ対応テーブルの一例を示す図である。 図21は、第2の実施形態におけるブロッキング入出力部の一例を示すブロック図である。 図22は、本発明の第3の実施形態に係るバッファ管理装置の構成を示すブロック図である。 図23は、本発明の第4の実施形態に係るバッファ管理装置の構成を示すブロック図である。 図24は、本発明の第5の実施形態に係るバッファ管理装置の構成を示すブロック図である。
本発明を実施するための形態について図面を参照して詳細に説明する。尚、各図面及び明細書記載の各実施形態において、同様の構成要素には同様の符号を付与し、適宜説明を省略する。
<<<第1の実施形態>>>
図1は、本発明の第1の実施形態に係るバッファ管理装置901の構成を示すブロック図である。
例えば、バッファ管理装置901は、ユーザによって作成されたユーザプログラムがプロセス1として動作するコンピュータシステムの一部である。
図1に示すように、本実施形態に係るバッファ管理装置901は、プロセススケジュール部2とブロッキング入出力部3と使用枠管理部4と入出力バッファ管理部5と入出力バッファプール6と複数の入出力実行キュー7と非同期入出力要求部8とを含む。即ち、ブロッキング入出力部3のブロッキング入出力部は、ブロッキングI/O部とも呼ばれる。入出力バッファ管理部5の入出力バッファ管理部は、I/Oバッファ管理部とも呼ばれる。入出力バッファプール6の入出力バッファプールは、I/Oバッファプールとも呼ばれる。入出力実行キュー7の入出力実行キューは、I/O実行キューとも記載する。非同期入出力要求部8は、非同期I/O力要求部8とも呼ばれる。
尚、図1に示す各構成要素は、ハードウェア単位の回路でも、コンピュータ装置の機能単位に分割された構成要素でもよい。ここでは、図1に示す構成要素は、コンピュータ装置の機能単位に分割された構成要素として説明する。
図1に示すプロセス1は、入出力要求(I/O要求とも呼ばれる)を行う任意のユーザプログラムの、動作中のインスタンスであり、複数のプロセス1が同時に動作してもよい。
プロセス1のそれぞれは、入出力バッファ(I/Oバッファとも呼ばれる)の所定使用枠値(下限値とも呼ばれる)を設定される。その所定使用枠値は、プロセス1が起動される際に、プロセス1が必要とする入出力バッファの数の下限値として、プロセス1に対して設定される。
具体的には、所定使用枠値は、ユーザによって事前に決定される。そして、その所定使用枠値は、例えば、プロセス1をインスタンスとするユーザプログラムの実行指示に含めて、バッファ管理装置901に与えられる。そして、プロセススケジュール部2は、プロセス1を起動する場合に、与えられたその所定使用枠値をプロセス1に設定(付与)する。
また、バッファ管理装置901において、その所定使用枠値に基づいて、プロセス1が同時に取得できる入出力バッファ数の上限値が設定される。以下では、その上限値を、再設定使用枠値と呼ぶ。
入出力バッファは、入出力要求を実現するための、有限個の固定長の記憶資源である。入出力バッファは、入出力要求毎に使用され、入出力完了時に解放(未使用状態に)される。入出力未使用状態の入出力バッファは、入出力バッファプール6によって管理される。
本実施形態のバッファ管理装置901は、プロセス1毎に、入出力バッファの最低保証量となる所定使用枠値を事前割当する。そうすることで、バッファ管理装置901は、入出力バッファの資源保証を行い、資源不足によるブロッキング入出力 APIの停止を回避する。更に、実行中プロセスの増減にあわせて、余剰の入出力バッファの使用枠値を余すことなく実行中プロセスに配分し、システム全体の入出力バッファ使用効率を向上させる。
===プロセススケジュール部2===
プロセススケジュール部2は、プロセス1の起動、終了及びプロセス1の入出力バッファの使用枠を制御する。
図2は、本実施形態のプロセススケジュール部2の構成を示すブロック図である。図2に示すようにプロセススケジュール部2は、開始部21と、終了検知部22と、開始判定部23と、使用枠値見直部24と、検査部25とを含む。
開始部21は、ユーザからのプログラム実行指示を受け、そのプログラム実行指示で指定されたユーザプログラムをプロセス1として起動する。そのプログラム実行指示は、例えば、ユーザプログラムの識別子、所定使用枠値及び係数(後述)を含む。
終了検知部22は、プロセス1の終了を検知して後処理を実行する。例えば、終了検知部22は、その後処理として、終了したプロセス1に対応する使用枠管理レコード431を使用枠管理テーブル43から削除する。
開始判定部23は、実行を開始されるプロセス1(新規プロセスとも呼ばれる)の所定使用枠値と実行中プロセスの所定使用枠値との合計を検査し、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性があるか否かを判定する。以下では、「実行を開始されるプロセス1」を新規プロセスとも呼ぶ。また、新規プロセスに対して、「既に実行中のプロセス1」を実行中プロセスと呼ぶ。
例えば、その検査は、その合計と利用可能な入出力バッファの総数とを比較する検査である。その合計がその総数以下の場合、開始判定部23は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定する。また、その合計がその総数を超える場合、開始判定部23は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性があると判定する。
また、開始判定部23は、後述の使用枠値見直部24による再設定使用枠値の見直しが実行された場合に、各実行中プロセスの入出力バッファ使用数と見直し後の再設定使用枠値の値とを検査する。続けて開始判定部23は、その検査した結果に基づいて、新規プロセスの実行を開始しても入出力バッファが枯渇する可能性がないか否かを判定する。
例えば、その検査は、実行中プロセスの入出力バッファ使用数と、その実行中プロセスの見直し後の再設定使用枠値の値とを比較する検査である。
その入出力バッファ使用数がその見直し後の再設定使用枠値以下の場合、開始判定部23は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定する。この場合、開始判定部23は、その新規プロセスのプロセス識別子、所定使用枠値及び係数(後述)を、使用枠管理部4に送信する。
また、その入出力バッファ使用数がその見直し後の再設定使用枠値を超える場合、開始判定部23は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性があると判定する。
使用枠値見直部24は、入出力バッファの利用効率を高めるために、再設定使用枠値の動的見直しを行う。使用枠値見直部24は、実行中プロセスの数が変化する場合、すなわち新規プロセスの実行開始時と実行中プロセスの実行終了時に、再設定使用枠値の見直しを実行する。
検査部25は、その新規プロセスをインスタンスとするユーザプログラムが、入出力バッファを使用するAPIをリンクしているか否かを検査する。ここで、本実施形態においては、その入出力バッファを使用するAPIは、ブロッキング入出力部3である。
そのユーザプログラムが入出力バッファを使用するAPIをリンクしている場合、検査部25は、ユーザプログラムの実行指示に与えられたその新規プロセスの所定使用枠値を、使用枠管理部4に設定する。
また、そのユーザプログラムが入出力バッファを使用するAPIをリンクしていない場合、検査部25は、その新規プロセスの所定使用枠値として0を、使用枠管理部4に設定する。その理由は、入出力バッファを使用しないプロセス1に、不要な再設定使用枠値を割り当てないようにするためである。
===ブロッキング入出力部3===
図1に戻って、ブロッキング入出力部3は、実行中プロセスとして動作するユーザプログラムからの呼び出し(入出力要求、またはI/O要求とも呼ばれる)に応じて、入出力バッファ管理部5に対して入出力要求を行う。例えば、ブロッキング入出力部3は、APIとして実現される。即ち、ブロッキング入出力部3は、入出力バッファ管理部5が、実行中プロセスとして動作するユーザプログラムから入出力要求を受け付ける際のゲートウェイとして機能する。従って、ブロッキング入出力部3は、ユーザプログラムと同一プロセス(同一の実行単位)で動作する。
図3は、本実施形態におけるブロッキング入出力部3の構成を示すブロック図である。
図3に示すように、ブロッキング入出力部3は、入出力要求部31と、取得制限部32と、高頻度入出力検出部33とを含む。入出力要求部31の入出力要求部は、I/O要求部とも呼ばれる。また、高頻度入出力検出部33の高頻度入出力検出部は、高頻度I/O検出部とも呼ばれる。
入出力要求部31は、非同期入出力要求部8へ入出力要求を通知、または、入出力バッファ管理部5へ、入出力要求を送信する。
===非同期入出力要求部8===
図1に戻って、非同期入出力要求部8は、独立した専用プロセスで動作し、ブロッキング入出力部3とは並列に動作可能である。非同期入出力要求部8は、入出力要求部31から入出力要求を受信し、入出力要求部31が実施する入出力バッファ管理部5への入出力要求処理を、代理実行する。
取得制限部32は、実行中プロセスとして動作するユーザプログラムからブロッキング入出力部3が呼ばれたときに、その実行中プロセスの入出力バッファ使用数が、その実行中プロセスの再設定使用枠値より少なくなるまで待ち合わせる。こうすることにより、取得制限部32は、呼び出し元のそのユーザプログラムの実行、即ちその実行中プロセス、を停止させて入出力バッファ使用数を再設定使用枠値以下に収める。
高頻度入出力検出部33は、入出力要求するデバイス(不図示)の性能につり合わない、高頻度の、ブロッキング入出力部3の呼び出しを行う実行中プロセスを検出する部である。高頻度入出力検出部33は、高頻度の呼び出しを行う実行中プロセスを検出した場合、使用枠値見直部24の再設定使用枠値見直しにおいて、その実行中プロセスの再設定使用枠値を拡大しないようにする。
===使用枠管理部4===
使用枠管理部4は、実行中プロセス毎にその実行中プロセスの所定使用枠値と再設定使用枠値と入出力バッファ使用数を保持する。
図4は、本実施形態における使用枠管理部4の構成を示すブロック図である。
図4に示すように、使用枠管理部4は、使用枠値取得部41と使用バッファ計数部42と使用枠管理テーブル43とを含む。
図5は、使用枠管理テーブル43の一例を示す図である。
図5に示すように、使用枠管理テーブル43は、プロセス識別子、係数、所定使用枠値、再設定使用枠値及び入出力バッファ使用数を含む。
プロセス識別子は、プロセス1のそれぞれを識別する情報である。
係数は、再設定使用枠値を算出する際の、プロセス識別子に対応するプロセス1の重みである。
所定使用枠値は、プロセス識別子に対応するプロセス1の所定使用枠値である。
再設定使用枠値は、プロセス識別子に対応するプロセス1の再設定使用枠値である。
入出力バッファ使用数は、プロセス識別子に対応するプロセス1の入出力バッファの現使用数である。
使用枠値取得部41は、プロセススケジュール部2から受け取った、プロセス1のそれぞれに対応する係数、所定使用枠値プロセス識別子と共に、使用枠管理テーブル43に記録する。また、使用枠値取得部41は、プロセススケジュール部2から受け取った再設定使用枠値で、使用枠管理テーブル43の再設定使用枠値を更新する。
そして、使用枠値取得部41は、プロセススケジュール部2及びブロッキング入出力部3からの要求に応答して、記録されたその係数、その所定使用枠値及びその再設定使用枠値を出力する。
使用バッファ計数部42は、実行中プロセスのそれぞれの入出力バッファの使用数を計数し、計数したその使用数を使用枠管理テーブル43に記録する。そして、使用バッファ計数部42は、プロセススケジュール部2からの要求に応答して記録されたその入出力バッファ使用数を出力する。
===入出力バッファ管理部5===
入出力バッファ管理部5は、未使用の入出力バッファを入出力バッファプール6で管理し、使用中の入出力バッファを入出力実行キュー7で管理する。
図6は、本実施形態における入出力バッファ管理部5の構成を示すブロック図である。
図6に示すように、入出力バッファ管理部5は、バッファ取得部51と、入出力実行管理部52と、バッファ解放部53とを含む。入出力実行管理部52の入出力実行管理部は、I/O実行管理部52とも記載する。
バッファ取得部51は、後述する入出力要求登録部521で入出力実行キュー7に登録するために、入出力バッファプール6から未使用の入出力バッファ61を取り出して、使用中の状態にする。ここで、入出力バッファ61は、物理的な記憶媒体としての入出力バッファを利用するための情報である。入出力バッファ61の入出力バッファは、I/Oバッファとも呼ばれる。
入出力実行管理部52は、入出力実行キュー7で使用中の入出力バッファ71を管理し、入出力実行キュー7に登録した入出力バッファ71を使用して、デバイスに対して登録順に入出力を実行する。ここで、入出力バッファ71は、物理的な記憶媒体としての入出力バッファを利用するための情報である。入出力バッファ71の入出力バッファは、I/Oバッファとも呼ばれる。
バッファ解放部53は、デバイスに対する入出力実行完了後に、その実行で使用した入出力バッファを、未使用の状態にして、入出力バッファプール6に戻し、プロセススケジュール部2と取得制限部32に通知する。
===入出力バッファプール部6===
入出力バッファプール6は、未使用の入出力バッファ61を管理するバッファプールである。
図7は、本実施形態における入出力バッファプール6の構成を示すブロック図である。
図7に示すように、入出力バッファプール6は、 複数の入出力バッファ61を含む。
===入出力実行キュー7=== 入出力実行キュー7は、入出力要求可能なデバイス毎に存在し、入出力実行待ちの入出力バッファ71を管理するFIFO(First In、First Out)のキューである。
図8は、本実施形態における入出力実行キュー7の構成を示すブロック図である。
図8に示すように、入出力実行キュー7は、複数の入出力バッファ71を含む。
図9は、本実施形態における入出力実行管理部52の構成を示すブロック図である。
図9に示すように、入出力実行管理部52は、入出力要求登録部521と、入出力要求キャンセル部522と、複数のデバイスドライバ523とを含む。入出力要求登録部521の入出力要求登録部は、I/O要求登録部とも呼ばれる。また、入出力要求キャンセル部522の入出力要求キャンセル部は、I/O要求キャンセル部とも呼ばれる。
入出力要求登録部521は、バッファ取得部51によって取得された使用中の状態になっている入出力バッファ61を、入出力実行キュー7に登録する。
入出力要求キャンセル部522は、入出力実行キュー7から任意の入出力バッファ71を取り出すことにより、未実行の入出力要求をキャンセルする。取り出した入出力バッファ71は、バッファ解放部53を使用して、入出力バッファプール6に戻される。
デバイスドライバ523は、入出力実行キュー7のそれぞれに1つ対応して、存在する。すなわち、デバイスドライバ523は、入出力要求可能なデバイスの数だけ存在する。デバイスドライバ523は、それぞれ独立した専用のプロセスで動作する。デバイスドライバ523は、入出力実行キュー7から、登録された順に入出力バッファ71を取り出し、対応するデバイスに対して入出力を実行する。デバイスドライバ523は、取り出した入出力バッファ71を、入出力実行完了後にバッファ解放部53を使用して、入出力バッファプール6に戻す。また、デバイスドライバ523は、統計情報として、入出力実行に要する平均時間をデバイスドライバ523毎の所定の記憶領域(不図示)に保持する。
以上が、バッファ管理装置901の機能単位の各構成要素についての説明である。
次に、バッファ管理装置901のハードウェア単位の構成要素について説明する。
図10は、本実施形態におけるバッファ管理装置901を実現するコンピュータ910のハードウェア構成を示す図である。
図10に示すように、コンピュータ910は、CPU(Central Processing Unit)911、記憶部912、記憶装置913及び入出力部914を含む。更に、コンピュータ910は、外部から供給される記録媒体(または記憶媒体)917を含む。例えば、記録媒体917は、情報を非一時的に記憶する不揮発性記録媒体(非一時的記録媒体)である。また、記録媒体917は、情報を信号として保持する、一時的記録媒体であってもよい。
CPU911は、オペレーティングシステム(不図示)を動作させて、コンピュータ910の全体の動作を制御する。例えば、CPU911は、記憶装置913に装着された記録媒体917から、プログラムやデータを読み込み、読み込んだそのプログラムやそのデータを記憶部912に書き込む。ここで、そのプログラムは、例えば、後述の図11乃至16に示すフローチャートの動作をコンピュータ910に実行させるためのプログラムである。
CPU911は、その読み込んだプログラムに従って、またその読み込んだデータに基づいて、図1に示すプロセススケジュール部2、ブロッキング入出力部3、使用枠管理部4、入出力バッファ管理部5及び非同期入出力要求部8として各種の処理を実行する。
尚、CPU911は、通信網(不図示)に接続されている外部コンピュータ(不図示)から、記憶部912にそのプログラムやそのデータをダウンロードしてもよい。
記憶部912は、そのプログラムやそのデータを記憶する。記憶部912は、入出力実行キュー7及び非同期入出力要求部8を含んでよい。
記憶装置913は、例えば、光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク及び半導体メモリであって、記録媒体917を含む。記憶装置913(記録媒体917)は、そのプログラムをコンピュータ読み取り可能に記憶する。また、記憶装置913は、そのデータを記憶してもよい。記憶装置913は、入出力実行キュー7及び非同期入出力要求部8を含んでよい。
入出力部914は、図示しない外部デバイスとのインタフェースを実現する。入出力部914は、入出力バッファ管理部5の入出力実行管理部52のデバイスドライバ523から制御されてよい。また、入出力部914は、デバイスドライバ523の一部として含まれてもよい。
入出力部914は、例えば、オペレータによる操作の入力、及びオペレータへの例えばGUI(GRAPHICAL User Interface)による入力要求や出力表示の入出力インタフェースを実現する。また、入出力部914は、外部記憶デバイスや通信制御装置などからの情報の入出力インタフェースを実現する。
以上説明したように、図1に示すバッファ管理装置901の機能単位のブロックは、図10に示すハードウェア構成のコンピュータ910によって実現される。但し、コンピュータ910が備える各部の実現部は、上記に限定されない。すなわち、コンピュータ910は、物理的に結合した1つの装置により実現されてもよいし、物理的に分離した2つ以上の装置を有線または無線で接続し、これら複数の装置により実現されてもよい。
尚、上述のプログラムのコードを記録した記録媒体917が、コンピュータ910に供給される場合、CPU911は、記録媒体917に格納されたそのプログラムのコードを読み出して実行してもよい。或いは、CPU911は、記録媒体917に格納されたそのプログラムのコードを、記憶部912、記憶装置913またはその両方に格納してもよい。すなわち、本実施形態は、コンピュータ910(CPU911)が実行するそのプログラム(ソフトウェア)を、一時的にまたは非一時的に、記憶する記録媒体917の実施形態を含む。尚、情報を非一時的に記憶する記憶媒体は、不揮発性記憶媒体とも呼ばれる。
以上が、本実施形態におけるバッファ管理装置901を実現するコンピュータ910の、ハードウェア単位の各構成要素についての説明である。
次に本実施形態の動作について、図面を参照して詳細に説明する。
図11、図12及び図13は、バッファ管理装置901がユーザプログラムの実行指示を受け付けた場合、及び実行中のプロセスが終了した場合の動作を示すフローチャートである。
尚、このフローチャートによる処理は、前述したCPU911によるプログラム制御に基づいて、実行されても良い。また、処理のステップ名については、ステップS101のように、記号で記載する。
(図11のステップS101)
ユーザがユーザプログラムの実行をプロセススケジュール部2に指示したとき、プロセススケジュール部2の開始部21は、そのユーザプログラムのロードモジュールをメモリ(例えば、図10に示す記憶部912)に展開する。即ち、開始部21は、そのユーザプログラムを新規プロセスとして実行可能な状態に準備する。
(図11のステップS102)
次に、プロセススケジュール部2の検査部25は、そのユーザプログラムが入出力バッファを使用するAPIをリンクしているか否かを検査する。
そのユーザプログラムが入出力バッファを使用するAPIをリンクしている場合(ステップS102でリンク有)、処理はステップS105へ進む。
そのユーザプログラムが入出力バッファを使用するAPIをリンクしていない場合(ステップS102でリンク無)、処理はステップS104へ進む。
(図11のステップS104)
検査部25は、その新規プロセスの所定使用枠値を0に設定する。
(図11のステップS105)
次に、プロセススケジュール部2の開始判定部23は、使用枠値取得部41から、全ての実行中プロセスの所定使用枠値の値を取得する。また、開始判定部23は、システムに存在する利用可能な入出力バッファの総数を、入出力バッファ管理部5から取得する。
(図11のステップS106)
次に、開始判定部23は、取得したその実行中プロセスの所定使用枠値の全てとその新規プロセスの所定使用枠値とを合計した合計値とその総数とを比較する。
開始判定部23は、その合計値が、その総数より多い場合(ステップS106で開始不可)、開始判定部23は、新規プロセスの開始を不可と判定する。次に、処理は、ステップS108に進む。また、その合計値が、入出力バッファの総数以下の場合(ステップS106で開始可)、開始判定部23は、新規プロセスの開始を可と判定する。次に、処理は、ステップS107に進む。
(図11のステップS107)
開始判定部23は、その新規プロセスのプロセス識別子及び所定使用枠値を、使用枠管理部4に送信する。
そのプロセス識別子及びその所定使用枠値を受信した使用枠管理部4の使用枠値取得部41は、使用枠管理テーブル43にその新規プロセスに対応する使用枠管理レコード431を設定する。この時、使用枠値取得部41は、その使用枠管理レコード431のプロセス識別子に、受信した使用枠管理レコード431を設定する。使用枠値取得部41は、その使用枠管理レコード431の計数に、初期値として0を設定する。使用枠値取得部41は、その使用枠管理レコード431の所定使用枠値に、受信した所定使用枠値を設定する。使用枠値取得部41は、その使用枠管理レコード431の再設定使用枠値に、初期値として受信した所定使用枠値を設定する。また、使用枠値取得部41は、その使用枠管理レコード431の入出力バッファ使用数に、初期値として0を設定する。
尚、本ステップ実行後、その新規プロセスは実行中プロセスに含まれているものとする。尚、特に、その新規プロセスであった実行中プロセスを指す場合、その実行中プロセスを新実行中プロセスと呼ぶ。
次に、処理は、ステップS109に進む。
(図11のステップS108)
開始判定部23は、その新規プロセスの実行を保留し、そのユーザプログラムの実行開始処理を中断する。例えば、開始判定部23は、保留するその新規プロセスに関する情報を、記憶装置913に記憶する。以後、保留されたその新規プロセスを、保留プロセスとも呼ぶ。
次に、処理は終了する。尚、保留プロセスは、既に実行中のいずれかの実行中プロセスが終了したことにより、終了検知部22が動作を開始した場合(ステップS117)の処理において、実行を開始するか否かの判断を受ける。
(図12のステップS109)
次に、プロセススケジュール部2の使用枠値見直部24は、全ての実行中プロセスについて、再設定使用枠値の見直しを行う。
本ステップにおいては、前述のその合計値は、前述のその総数以下である。すなわち、式1より算出される余剰使用枠値(Ls)は、0以上である。
使用枠値見直部24は、式2に示すように、実行中プロセス毎の所定使用枠値(Lp)に、余剰使用枠値を分配して加えた値を、見直し後の再設定使用枠値(Lp‘)として使用する。詳細な算出手順は、以下のとおりである。
「Ls = N − ΣLp ・・・(式1)
Ls: 余剰使用枠値
N:入出力バッファの総数
ΣLp:実行中プロセスの所定使用枠値の合計」。
「Lp’ = Lp + Ls・Rp ・・・(式2)
Lp’:見直し後の再設定使用枠値
Lp:実行中プロセスの所定使用枠値
Rp:実行中プロセスの分配率
Rp = Kp / ΣKp
Kp:実行中プロセスの係数
ΣKp:実行中実行中プロセスの係数の合計
※ 分配する使用枠値の合計が余剰使用枠値を超えないように、端数を処理する
※ 余剰使用枠値が0の場合は、Lp’=Lpとする
※ ΣKpが0の場合、Rp=0とする」。
ここで、係数(Kp)について詳細に説明する。
実行中プロセスの係数が相対的に大きいほど、その実行中プロセスに分配される使用枠値が大きくなるため、見直し後の再設定使用枠値も、より増加する。
実行中プロセスの係数は、プログラム実行指示時などに事前にユーザによって指定される。または、次のいずれかの方法で、バッファ管理装置901が、自動的に係数を設定する。
第1の方法では、使用枠値見直部24は、実行優先度の値を係数として設定する。この第1の方法では、実行優先度が高い実行中プロセスほど優先的に、再設定使用枠値を相対的に大きく割り当てられる。バッファ管理装置901は、例えば、実行中プロセスの実行優先度の値を、プロセス1を実行する図10に示すCPU911から取得し、係数として使用する。
第2の方法では、使用枠値見直部24は、所定使用枠値の値を係数として設定する。この第2の方法では、所定使用枠値が大きい実行中プロセスほど優先的に、再設定使用枠値を相対的に大きく割り当てられる。
第3の方法では、使用枠値見直部24は、デバイスの入出力性能(I/O性能とも呼ばれる)に応じた入出力性能値を係数として設定する。この第3の方法では、低速なデバイスに出力する実行中プロセスほど、再設定使用枠値を相対的に小さく割り当てられる。この方法は、ユーザプログラムが特定の1つのデバイスのみに入出力要求を行う場合に有効である。
例えば、使用枠値見直部24は、入出力性能値として、デバイスドライバ523が保持する統計情報(入出力実行の平均時間の逆数)を使用する。
(図12のステップS110)
次に、開始判定部23は、実行中プロセスのそれぞれについて、使用枠値取得部41と使用バッファ計数部42とを介して、使用枠管理テーブル43に保持されている再設定使用枠値と入出力バッファ使用数とを取得する。
(図12のステップS111)
次に、開始判定部23は、全ての実行中プロセスのそれぞれについて、その再設定使用枠値とその入出力バッファ使用数とを、順次比較する。
入出力バッファ使用数がその再設定使用枠値を超える実行中プロセスが1つでも存在する場合(ステップS111で有)、開始判定部23は、新実行中プロセスの実行を開始不可と判定する。次に、処理はステップS112に進む。その理由は、その再設定使用枠値より入出力バッファ使用数の方が大きい実行中プロセスが1つでも存在する場合、新実行中プロセスの実行を開始すると、入出力バッファが枯渇する可能性があるためである。
入出力バッファ使用数がその再設定使用枠値を超える実行中プロセスが1つも存在しない場合(ステップS111で無)、開始判定部23は、新実行中プロセスの実行を開始可と判定する。次に、処理はステップS114に進む。
(図12のステップS112)
開始判定部23は、入出力要求キャンセル部522を使用して、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスについて、入出力バッファの属性に基づいてその実行中プロセスの未実行の入出力要求をキャンセルする。
例えば、入出力バッファの属性として、優先度やプリエンプション(Preemption)可否など、対象領域の特性に応じた情報が、入出力要求を行うプログラムによって指定される。
例えば、入出力要求のキャンセルを許容する属性として、コンソールメッセージ出力要求時に指定されるコンソール高負荷時にメッセージ出力を諦める属性が、挙げられる。
具体的には、入出力要求キャンセル部522は、全ての入出力実行キュー7から、その実行中プロセスのキャンセル可能な優先度の入出力バッファ71を検索して取り出す。例えば、その優先度は、入出力要求に含めて入出力バッファ管理部5に通知され、入出力バッファ71に保持されている。続けて、開始判定部23は、バッファ解放部53を使用して、入出力要求キャンセル部522が取り出した入出力バッファ71を、入出力バッファ61として入出力バッファプール6に戻す。続けて、バッファ解放部53は、バッファ解放を開始判定部23に通知する。
尚、入出力実行完了によっても入出力バッファの使用数は減少する。従って、本ステップは必須ではない。
(図12のステップS113)
開始判定部23は、バッファ解放部53からのバッファ解放通知を待ち合わせる。バッファ解放が通知された後、処理はステップS110に戻り、プロセススケジュール部2は、再度、開始判定を実施する。
(図12のステップS114)
開始部21は、新実行中プロセスの実行を開始する。
(図12のステップS115)
開始判定部23は、保留プロセスが存在するか否かを確認する。
保留プロセスが存在しない場合(ステップS115で無)、処理は終了する。保留プロセスが存在する場合(ステップS115で有)、ステップS116に進む。
(図12のステップS116)
開始判定部23は、ステップS108で記憶した保留プロセスに関する情報に基づいて、保留プロセスのうち、実行指示時刻が最も早い保留プロセスを、開始判定の対象として選択する。次に、処理はステップS105に戻る。
(図13のステップS117)
プロセススケジュール部2の終了検知部22は、実行中プロセスのいずれかの終了を検知し、動作を開始する。
(図13のステップS118)
終了検知部22は、保留プロセスの有無を確認する。
保留プロセスが存在しない場合(ステップS118で無)、処理はステップS119に進む。保留プロセスが存在する場合(ステップS118で有)、処理はステップS120に進む。
(図13のステップS119)
使用枠値見直部24は、全ての実行中プロセスについて、再設定使用枠値の見直しを行う。再設定使用枠値の見直しは、ステップS109と同様の処理となる。但し、本ステップは、新実行中プロセスが存在しない場合に動作するため、再設定使用枠値の見直し対象である全ての実行中プロセスは、新実行中プロセスを含まない。次に、処理は終了する。
(図13のステップS120)
開始判定部23は、ステップS108で記憶した保留プロセスに関する情報に基づいて、保留プロセスのうち、実行指示時刻が最も早い保留プロセスを、開始判定の対象として選択する。
(図13のステップS121)
次に、開始判定部23は、使用枠値取得部41から、全ての実行中プロセスの所定使用枠値の値を取得する。また、開始判定部23は、システムに存在する利用可能な入出力バッファの総数を、入出力バッファ管理部5から取得する。
(図13のステップS122)
次に、開始判定部23は、その実行中プロセスの所定使用枠値の全てとその保留プロセスの所定使用枠値とを合計した合計値とその総数とを比較する。
その合計値が、その総数より多い場合(ステップS122で開始不可)、開始判定部23は、新規プロセスの開始を不可と判定する。次に、処理は、ステップS124に進む。この場合、開始判定部23は、その保留プロセスについて何も処理しない。即ち、その保留プロセスは、保留プロセスのままである。
また、その合計値が、入出力バッファの総数以下の場合(ステップS122で開始可)、開始判定部23は、新規プロセスの開始を可と判定する。次に、処理は、ステップS123に進む。
(図13のステップS123)
開始判定部23は、その保留プロセスのプロセス識別子及び所定使用枠値を、使用枠管理部4に送信する。
そのプロセス識別子及びその所定使用枠値を受信した使用枠管理部4の使用枠値取得部41は、使用枠管理テーブル43にその保留プロセスに対応する使用枠管理レコード431を設定する。この時、使用枠値取得部41は、その使用枠管理レコード431のプロセス識別子に、受信した使用枠管理レコード431を設定する。使用枠値取得部41は、その使用枠管理レコード431の計数に、初期値として0を設定する。使用枠値取得部41は、その使用枠管理レコード431の所定使用枠値に、受信した所定使用枠値を設定する。使用枠値取得部41は、その使用枠管理レコード431の再設定使用枠値に、初期値として受信した所定使用枠値を設定する。また、使用枠値取得部41は、その使用枠管理レコード431の入出力バッファ使用数に、初期値として0を設定する。
尚、本ステップ実行後、その保留プロセスは実行中プロセスに含まれているものとする。尚、特に、その保留プロセスであった実行中プロセスを指す場合、その実行中プロセスを新実行中プロセスと呼ぶ。
次に、処理は、ステップS109に進む。
(図13のステップS124)
使用枠値見直部24を使用して、全ての実行中プロセスについて、再設定使用枠値の見直しを行う。再設定使用枠値の見直しは、ステップS119と同様の処理となる。但し、ステップS109における合計値は、本ステップS124においては、保留プロセスの所定使用枠値を含まない、実行中プロセスのみの所定使用枠値の合計である。次に、処理は終了する。
図14、図15及び図16は、実行中プロセスがブロッキング入出力部3を呼び出した場合、即ち入出力要求が発生した場合、の動作を示すフローチャートである。
図14は、入出力要求が発生した場合のブロッキング入出力部3の動作を示すフローチャートである。図15は、入出力要求が発生した場合の非同期入出力要求部8の動作を示すフローチャートである。図16は、入出力要求が発生した場合のデバイスドライバ523の動作を示すフローチャートである。
(図14のステップS201)
ブロッキング入出力部3の高頻度入出力検出部33は、各実行中プロセスによるブロッキング入出力部3の呼び出しが、入出力要求するデバイスの性能につり合わない、高頻度の呼び出しであるか否かを監視する。続けて、高頻度入出力検出部33は、その監視した結果に基づいて、各実行中プロセスの係数を更新する。
具体的には、高頻度入出力検出部33は、実行中プロセス毎の所定の記憶領域(例えば、記憶部912の記憶領域)に、デバイス毎に前回のブロッキング入出力部3の呼び出し時刻と、その呼び出しの間隔の平均値と、その呼び出しの累積回数とを記憶する。
そして、高頻度入出力検出部33は、前回の呼び出し時刻と今回の呼び出し時刻との差から、呼び出し間隔を計算し、その呼び出しの間隔の平均値を再計算する。続けて、高頻度入出力検出部33は、前回の呼び出し時に記録された前回のブロッキング入出力部3の呼び出し時刻、呼び出し間隔の平均値及び呼び出し回数を更新する。
更新した呼び出し間隔の平均値が、デバイスドライバ523が保持する入出力実行時間の平均値より短い場合、高頻度入出力検出部33は、使用枠管理部4の使用枠管理テーブル43に記憶されている係数を0に設定する。尚、高頻度入出力検出部33は、係数を0に設定する実行中プロセスのプロセス識別子と元の係数とを例えば記憶部912に記憶する。
呼び出し間隔が、デバイスドライバ523が保持する入出力実行時間の平均値以上の場合、高頻度入出力検出部33は、係数を0に設定されたその実行中プロセスの係数を、先に記憶したその元の値に戻す。
(図14のステップS202)
次に、取得制限部32は、使用枠値取得部41と使用バッファ計数部42とを介して、ブロッキング入出力部3を呼び出した実行中プロセスについて、使用枠管理テーブル43に保持されている再設定使用枠値と入出力バッファ使用数とを取得する。
(図14のステップS203)
次に、取得制限部32は、その再設定使用枠値と入出力バッファ使用数とを比較する。入出力バッファ使用数がその再設定使用枠値以上の場合(ステップS203でNO)、取得制限部32は、入出力バッファの取得制限要と判定して、ステップS204に進む。入出力バッファ使用数が再設定使用枠値未満の場合(ステップS203でYES)、入出力バッファの取得制限不要と判定して、ステップS205に進む。
(図14のステップS204)
取得制限部32は、バッファ解放部53からのバッファ解放の通知を待ち合わせる。バッファ解放が通知されると、ステップS203に戻る。
(図14のステップS205)
ブロッキング入出力部3の入出力要求部31は、独立した専用のプロセスで動作する非同期入出力要求部8に、その入出力要求を通知して、制御を実行中プロセスで動作するユーザプログラムに戻す。
尚、バッファ取得を非同期実行して、そのユーザプログラムに制御を戻す時間を短縮する必要がない場合、または実行された入出力要求の結果をユーザプログラムに返却する必要がある場合は、以下のようにしてよい。第1に、ブロッキング入出力部3は、その入出力要求を非同期入出力要求部8に通知しない。第2に、ブロッキング入出力部3は、後述のステップS302、ステップS303の処理を、入出力要求部31のプロセス、すなわちブロッキング入出力部3のプログラム実行の延長で行う。第3に、ブロッキング入出力部3は、後述のステップS303の入出力バッファ登録の通知完了後に、制御をそのユーザプログラムに戻す。
(図15のステップS301)
非同期入出力要求部8は、独立した専用のプロセスで動作し、入出力要求部31からの入出力要求の通知を待ち合わせる。入出力要求が通知されると、処理はステップS302に進む。
(図15のステップS302)
非同期入出力要求部8は、バッファ取得部51を使用して、入出力バッファ61を取得する。
(図15のステップS303)
次に、非同期入出力要求部8は、入出力要求登録部521を使用して、ステップS302で取得した入出力バッファ61を、入出力バッファ71として入出力実行キュー7に登録し、入出力バッファ71の登録をデバイスドライバ523に通知する。次に、処理はステップS301に戻り、非同期入出力要求部8は、再度、入出力要求の通知を待ち合わせる。
(図16のステップS401)
デバイスドライバ523は、デバイスドライバ523毎に独立した専用のプロセスで動作し、入出力要求登録部521からの入出力バッファ登録通知を待ち合わせる。入出力バッファ登録が通知されると、処理はステップS402に進む。
(図16のステップS402)
デバイスドライバ523は、入出力実行キュー7に入出力バッファ71が登録されているか否かを確認する。入出力バッファ71が登録されていない場合(ステップS402で無)、処理はステップS401に戻り、デバイスドライバ523は、再度入出力バッファ登録通知を待ち合わせる。入出力バッファ71が登録されている場合(ステップS402で有)、デバイスドライバ523は、最初に登録された入出力バッファ71を取り出す。次に、処理はステップS403に進む。
(図16のステップS403)
デバイスドライバ523は、ステップS402で取り出した入出力バッファ71に基づいて、デバイスに対して入出力を実行する。
(図16のステップS404)
次に、デバイスドライバ523は、入出力実行に要した時間を測定し、統計情報として平均時間を記録する。
(図16のステップS405)
次に、デバイスドライバ523は、バッファ解放部53を使用して、入出力実行に使用した入出力バッファ71を、入出力バッファ61として入出力バッファプール6に戻す。この処理を実行することを、バッファ解放と呼ぶ。続けて、デバイスドライバ523は、そのバッファ解放をステップS113で待ち状態にある開始判定部23、または、ステップS204で待ち状態にある取得制限部32に通知する。次に、処理はステップS401に戻り、デバイスドライバ523は、再度入出力バッファ登録通知を待ち合わせる。
上述した本実施形態における第1の効果は、各プロセス1に対する入出力バッファの割当数を保証し、かつ利用可能な入出力バッファを有効に活用することを可能にする点である。
その理由は、以下のような構成を含むからである。即ち、第1に開始判定部23が、新規プロセス及び実行中プロセスの所定使用枠値に基づいて、新規プロセスの実行を保留する。第2に、ブロッキング入出力部3が各プロセス1による入出力バッファ使用数を再設定使用枠値以下に保つ。第3に、使用枠値見直部24が、新規プロセスの実行を開始する場合及び実行中プロセスが終了した場合に、入出力バッファの利用率がより高くなるように、再設定使用枠値の見直しを実行する。
上述した本実施形態における第2の効果は、ブロッキング入出力部3による入出力バッファ解放の待ち合わせが発生せず、ブロッキング入出力部3を呼び出した実行中プロセスとして動作するユーザプログラムに速やかに制御を戻せることを可能にする点である。
その理由は、以下のような構成を含むからである。即ち、第1に開始判定部23が、新規プロセス及び実行中プロセスの所定使用枠値に基づいて、新規プロセスの実行を保留する。第2に、開始判定部23が、更に再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスが存在しない場合に、新規プロセスの実行を開始する。
上述した本実施形態における第3の効果は、利用可能な入出力バッファを、更に有効に活用することを可能にする点である。
その第1の理由は、検査部25が、プロセス1として実行を開始するユーザプログラムのロードモジュールを検査し、入出力バッファを使用しないプロセスについては、所定使用枠値を0にするからである。
その第2の理由は、高頻度入出力検出部33が、実行中プロセスの暴走などによる、対象デバイスに見合わない高頻度なブロッキング入出力部3の呼び出しを検出して、その実行中プロセスの係数を0にするからである。
上述した本実施形態における第4の効果は、新実行中プロセス実行開始時における、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスの、バッファ解放の待ち合わせ時間を短縮できることである。
その理由は、開始判定部23が実行中プロセスを検出した場合、開始判定部23が入出力要求キャンセル部522を使用して、その実行中プロセスのキャンセル可能な未実行の入出力要求をキャンセルするからである。ここで、その実行中プロセスは、見直し後の再設定使用枠値以上の入出力バッファを使用している実行中プロセスである。即ち、入出力要求キャンセル部522が、その入出力要求をキャンセルすることで、デバイスの入出力性能に依存しない、速やかな入出力バッファの解放が実現できるからである。
上述した本実施形態における第5の効果は、ブロッキング入出力部3の実行に掛かる時間を短縮して、速やかにユーザプログラムに制御を戻せることである。
その理由は、非同期入出力要求部8が、独立した専用プロセスで動作し、入出力要求部31が実施する入出力バッファ管理部5への入出力要求処理を、代理実行するからである。
より詳細には、上述の第1の効果により、入出力バッファの枯渇は発生しないため、ブロッキング入出力部3は、バッファ取得の成否を確認することなくユーザプログラムに制御を戻せる。そこで、ブロッキング入出力部3は、別プロセスで動作する非同期入出力要求部8へ入出力要求を通知し、次に、通知を受けた非同期入出力要求部8は、並列して入出力バッファを取得する。
この第5の効果は、入出力バッファの数が非常に多くて空きバッファの探索に時間が掛かる場合や、多数の実行中プロセスが同時に入出力バッファの取得を要求して排他ネックになる場合など、入出力バッファの取得処理のコストが大きい場合に、特に有効である。尚、ブロッキング入出力部3は、非同期入出力要求部8によって非同期に実行された入出力要求の結果をユーザプログラムに返却できない。そのため、この非同期入出力要求部8を含む構成は、UDP(User Datagram Protocol)メッセージの送信や、コンソールメッセージの出力など、入出力バッファが確保できれば、成功とみなせるような処理に適用できる。
上述した本実施形態における第6の効果は、入出力バッファの特性に加えてデバイス毎に適した再設定使用枠値の見直しが可能になる点である。
その理由は、開始判定部23が、実行優先度、所定使用枠値及びデバイスの入出力性能の任意の情報に基づいて、係数を算出するようにしたからである。
<<<第2の実施形態>>>
次に、本発明の第2の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
図17は、本発明の第2の実施形態に係るバッファ管理装置902の構成を示すブロック図である。
図17に示すように、本実施形態におけるバッファ管理装置902は、第1の実施形態のバッファ管理装置901と比べて、プロセススケジュール部2に替えてプロセススケジュール部202を含む点が異なる。また、バッファ管理装置902は、ブロッキング入出力部3に替えてブロッキング入出力部302を含む点が異なる。
また、バッファ管理装置902は、バッファ管理装置901と比べて、使用枠管理部4を含まない点が異なる。バッファ管理装置902において、使用枠管理部4の機能に相当する機能は、開始判定部232(後述)、グループ使用枠管理テーブル2421(後述)及びプロセスグループ対応テーブル2422(後述)により実現される。
実施形態1のバッファ管理装置901は、再設定使用枠値の管理をプロセス1毎に行う。従って、実施形態1では、実行中プロセス数に比例する、再設定使用枠値の見直しを実行するための及び開始判定を実行するための、コストが発生する。第2の実施形態のバッファ管理装置902は、実行中プロセスが所定の情報に基づいてグループ化され、そのグループに対応する所定使用枠値及び再設定使用枠値を制御及び利用する。従って、第2の実施形態では、そのコストは、グループ数に比例する。
尚、本実施形態におけるユーザからのプログラム実行指示は、例えば、ユーザプログラムの識別子、所定使用枠値、係数及びグループ識別子を含む。
図18は、本実施形態のプロセススケジュール部202の構成を示すブロック図である。
図18に示すように、プロセススケジュール部202は、第1の実施形態のプロセススケジュール部2と比べて、以下の点が異なる。プロセススケジュール部202は、終了検知部22に替えて終了検知部222を含む。プロセススケジュール部202は、開始判定部23に替えて開始判定部232を含む。プロセススケジュール部202は、使用枠値見直部24に替えて使用枠値見直部242を含む。また、プロセススケジュール部202は、グループ使用枠管理テーブル2421及びプロセスグループ対応テーブル2422を更に含む。
図19は、本実施形態におけるグループ使用枠管理テーブル2421の一例を示す図である。
図19に示すように、グループ使用枠管理テーブル2421は、グループ識別子、係数、所定使用枠値、再設定使用枠値及び実行中プロセス数を含む、グループ使用枠レコードを含む。
グループ識別子は、グループを特定する情報である。そのグループ識別子は、事前にユーザによって設定される。
係数は、再設定使用枠値を算出する際の、そのグループに所属するプロセス1のそれぞれの重みである。その係数は、事前にユーザによって設定される。
所定使用枠値は、そのグループに所属するプロセス1のそれぞれの所定使用枠値である。その所定使用枠値は、事前にユーザによって設定される。
再設定使用枠値は、そのグループに所属するプロセス1のそれぞれの再設定使用枠値である。
実行中プロセス数は、そのグループに所属する実行中プロセスの数である。その実行中プロセス数は、開始判定部232と終了検知部222とによって、実行中プロセスの増減にあわせて、更新される。
図20は、本実施形態の開始部21におけるプロセスグループ対応テーブル2422の一例を示す図である。
図20に示すように、プロセスグループ対応テーブル2422は、プロセス識別子、グループ識別子及び入出力バッファ使用数を含む、対応レコードを含む。
プロセス識別子は、図5に示すプロセス識別子と同じである。
グループ識別子は、図18に示すグループ識別子と同じである。
入出力バッファ使用数は、図5に示す入出力バッファ使用数と同じである。
終了検知部222は、プロセス1の終了を検知して実行する後処理において、グループ使用枠管理テーブル2421の実行中プロセス数を、終了したプロセス1の数だけ減ずる。また、終了検知部222は、その後処理において、プロセスグループ対応テーブル2422から終了したプロセス1に対応する対応レコードを削除する。
開始判定部232は、プロセスグループ対応テーブル2422を参照することで、プロセス識別子に対応するグループ識別子を取得する。そして、開始判定部232は、取得したグループ識別子に基づいて、グループ使用枠管理テーブル2421を参照することで、そのプロセス識別子に対応する係数、所定使用枠値、再設定使用枠値を取得する。
開始判定部232は、実行中プロセスの所定使用枠値の合計を、グループ使用枠管理テーブル2421に基づいて、全てのグループ識別子のそれぞれに対応する所定使用枠値と実行中プロセス数とを乗じた値を、合算して算出する。
開始判定部232は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定した場合、その新規プロセスのプロセス識別子及びグループ識別子を含む対応レコードをプロセスグループ対応テーブル2422に追加する。また、開始判定部232は、新規プロセスの実行を開始した場合に入出力バッファが枯渇する可能性はないと判定した場合、グループ使用枠管理テーブル2421のその新規プロセスに対応する実行中プロセス数に1を加算する。
開始判定部232は、ブロッキング入出力部302からの要求に応答して、グループ使用枠管理テーブル2421に記録された再設定使用枠値を出力する。
開始判定部232は、実行中プロセスのそれぞれの入出力バッファの使用数を計数し、計数したその使用数をプロセスグループ対応テーブル2422に記録する。
開始判定部232は、ブロッキング入出力部302からの要求に応答して、プロセスグループ対応テーブル2422に記録された入出力バッファ使用数を出力する。
使用枠値見直し部242は、グループ使用枠管理テーブル2421でグループ毎に保持される所定使用枠値、係数、及び、そのグループに所属する実行中プロセス数に基づいて、再設定使用枠値の見直しを実施する。
ステップS109における計算手順において、式1は式3で、式2は式4で置換される。
「Ls = N − Σ(Lg・Pg) ・・・(式3)
Ls : 余剰使用枠値
N : 入出力バッファの総数
Lg : プロセスグループの1プロセスあたりの所定使用枠値
Pg : プロセスグループの実行中プロセス数
Σ(Lg・Pg) : 実行中プロセスの所定使用枠値の合計」。
「Lg’ = Lg + Ls・Rg ・・・(式4)
Lg’: プロセスグループの見直し後の再設定使用枠値
Lg : プロセスグループの所定使用枠値
Rg : プロセスグループの分配率
Rg = Kg / Σ(kg・Pg)
Kg : プロセスグループの1プロセスあたりの係数
Σ(Kg・Pg) : 実行中プロセスの係数の合計
※ 分配する使用枠値の合計が、余剰使用枠値を超えないように端数を処理する
※ 余剰使用枠値が0の場合は、Lg’ = Lgとする
※ Σ(kg・Pg)が0の場合、Rg = 0 とする」。
図21は、本実施形態のブロッキング入出力部302の構成を示すブロック図である。
図21に示すように、ブロッキング入出力部302は、第1の実施形態のブロッキング入出力部3と比べて、以下の点が異なる。ブロッキング入出力部302は、取得制限部32に替えて取得制限部322を、高頻度入出力検出部33に替えて高頻度入出力検出部332を含む。以後、高頻度入出力検出部332は、高頻度入出力検出部332とも記載する。
取得制限部322は、プロセススケジュール部202から、グループ使用枠管理テーブル2421の再設定使用枠値を取得する。また、取得制限部322は、プロセススケジュール部202から、プロセスグループ対応テーブル2422に含まれる入出力バッファ数を取得する。
高頻度入出力検出部332は、プロセススケジュール部202のグループ使用枠管理テーブル2421の再設定使用枠値を設定する。
上述した本実施形態における効果は、再設定使用枠値の見直しを実行するためのコスト及び開始判定を実行するための、コストを削減することが可能になる点である。
その理由は、プロセススケジュール部202及びプロセススケジュール部203が、プロセス1をグループ化し、グループを単位として再設定使用枠値の見直し、及び開始判定を実行するからである。
<<<第3の実施形態>>>
次に、本発明の第3の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
図22は、本発明の第3の実施形態に係るバッファ管理装置903の構成を示すブロック図である。
図22に示すように、本実施形態におけるバッファ管理装置903は、プロセススケジュール部203及びブロッキング入出力部303を含む。 尚、図22に示す各構成要素は、ハードウェア単位の回路でも、コンピュータ装置の機能単位に分割された構成要素でもよい。ここでは、図22に示す構成要素は、コンピュータ装置の機能単位に分割された構成要素として説明する。
プロセススケジュール部203は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれに対応する所定使用枠値の合計数(第1の合計数)と、を比較する。ここで、所定使用枠値は、プロセス1(新規プロセス及び実行中プロセスのそれぞれ)が必要とする入出力バッファの数の下限値である。
次に、プロセススケジュール部203は、その比較した結果に基づいて、その新規プロセスの実行を開始及び保留する。
また、プロセススケジュール部203は、新規プロセスの実行を開始する場合及び実行中プロセスが終了した場合、利用可能な入出力バッファの利用率がより高くなるように、再設定使用枠値の見直しを実行する。ここで、再設定使用枠値は、実行中プロセスのそれぞれが同時に取得できる、その入出力バッファの数の上限値(第1の上限値)である。
ブロッキング入出力部303は、実行中プロセスから入出力要求を受信した場合に、その実行中プロセスによる入出力バッファの使用数を、その実行中プロセスに対応する再設定使用枠値以下に保つように、入出力バッファの取得を待ち合わせる。
プロセススケジュール部203は、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスが存在しない状態になるまで、新規プロセスの実行を待ち合わせてよい。
例えば、プロセススケジュール部203は、新規プロセスを開始する場合、上述の第1の合計数と、上述の利用可能な入出力バッファの総数とに基づいて、再設定使用枠値の見直しを実行してよい。
例えば、プロセススケジュール部203は、実行中プロセスが終了した場合、その実行中プロセスに対して設定された所定使用枠値の合計数(第2の合計数)と、上述の利用可能な入出力バッファの総数とに基づいて、再設定使用枠値の見直しを実行してよい。
プロセススケジュール部203は、新規プロセス及び実行中プロセスのそれぞれに対応する実行優先度、並びに所定使用枠値及びデバイスの入出力性能、の任意の情報に基づいて、新規プロセス及び実行中プロセスのそれぞれに対応する係数を算出してよい。そして、プロセススケジュール部203は、算出したその係数に基づいて、再設定使用枠値の見直しを実行してよい。
ブロッキング入出力部303は、所定の閾値を超える頻度で入出力要求を実行する実行中プロセスに対応する上述の係数を、プロセススケジュール部203による再設定使用枠値の見直しにおいて再設定使用枠値が相対的に小さくなるように、更新してよい。
プロセススケジュール部203は、新規プロセスが入出力バッファを使用しないバッファ不用プロセスである場合、そのバッファ不用プロセスの所定使用枠値を0に設定してよい。
プロセススケジュール部203は、新規プロセスの実行を開始する場合及び実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、グループに対応する再設定使用枠値の見直しを実行してよい。ここで、そのグループは、プロセス1が所定の情報に基づいてグループ化されたグループである。グループに対応する再設定使用枠値は、そのグループに所属する実行中プロセスのそれぞれが同時に取得できる、入出力バッファの数の上限値(第2の上限値)である。
この場合、ブロッキング入出力部303は、グループに対応する再設定使用枠値に基づいて入出力バッファの取得を待ち合わせてよい。
尚、バッファ管理装置903のハードウェア単位の構成要素は、図10に示すバッファ管理装置901のハードウェア単位の構成要素と同様であってよい。
本実施形態の場合、CPU911は、読み込んだプログラムに従って、また読み込んだデータに基づいて、図22に示すプロセススケジュール部203及びブロッキング入出力部303として各種の処理を実行する。
上述した本実施形態における効果は、第1の実施形態の第1、2、3、6及び7と同様である。その理由は、バッファ管理装置903が上述のプロセススケジュール部203及びブロッキング入出力部303を含むからである。
<<<第4の実施形態>>>
次に、本発明の第4の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
図23は、本発明の第4の実施形態に係るバッファ管理装置904の構成を示すブロック図である。
図23に示すように、本実施形態におけるバッファ管理装置904は、図22に示す第3の実施形態のバッファ管理装置903と比べて、入出力バッファ管理部504を更に含む点が異なる。
入出力バッファ管理部504は、入出力バッファに格納されたデータの破棄を許容する特性が示されている場合、その特性に基づいて、使用中の入出力バッファを強制的に開放する。
上述した本実施形態における効果は、第3の実施形態の効果に加えて、新実行中プロセスの実行開始時における、再設定使用枠値を超える数の入出力バッファを使用している実行中プロセスのバッファ解放の待ち合わせ時間を短縮できることである。ここで、新実行中プロセスは、第1の実施形態において説明した、新たに実行を開始するプロセス1である。
その理由は、プロセススケジュール部204が実行中プロセスを検出した場合、プロセススケジュール部204が入出力バッファ管理部504を使用して、その実行中プロセスのキャンセル可能な未実行の入出力要求をキャンセルするからである。
<<<第5の実施形態>>>
次に、本発明の第5の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については説明を省略する。
図24は、本発明の第5の実施形態に係るバッファ管理装置905の構成を示すブロック図である。
図24に示すように、本実施形態におけるバッファ管理装置905は、図22に示す第3の実施形態のバッファ管理装置903と比べて、非同期入出力要求部8を更に含む点が異なる。
非同期入出力要求部8が、図1に示す非同期入出力要求部8と同じである。
上述した本実施形態における効果は、第3の実施形態の効果に加えて、ブロッキング入出力部303の実行に掛かる時間を短縮して、速やかにユーザプログラムに制御を戻せることである。
その理由は、非同期入出力要求部8を更に含むからである。
以上の各実施形態で説明した各構成要素は、必ずしも個々に独立した存在である必要はない。例えば、各構成要素は、複数の構成要素が1個のモジュールとして実現されてよい。また、各構成要素は、1つの構成要素が複数のモジュールで実現されてもよい。また、各構成要素は、ある構成要素が他の構成要素の一部であるような構成であってよい。また、各構成要素は、ある構成要素の一部と他の構成要素の一部とが重複するような構成であってもよい。
以上説明した各実施形態における各構成要素及び各構成要素を実現するモジュールは、必要に応じ、可能であれば、ハードウェア的に実現されてよい。また、各構成要素及び各構成要素を実現するモジュールは、コンピュータ及びプログラムで実現されてよい。また、各構成要素及び各構成要素を実現するモジュールは、ハードウェア的なモジュールとコンピュータ及びプログラムとの混在により実現されてもよい。
そのプログラムは、例えば、磁気ディスクや半導体メモリなど、不揮発性のコンピュータ可読記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られる。この読み取られたプログラムは、そのコンピュータの動作を制御することにより、そのコンピュータを前述した各実施形態における構成要素として機能させる。
また、以上説明した各実施形態では、複数の動作をフローチャートの形式で順番に記載してあるが、その記載の順番は複数の動作を実行する順番を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の順番は内容的に支障のない範囲で変更することができる。
更に、以上説明した各実施形態では、複数の動作は個々に相違するタイミングで実行されることに限定されない。例えば、ある動作の実行中に他の動作が発生したり、ある動作と他の動作との実行タイミングが部分的に乃至全部において重複していたりしていてもよい。
更に、以上説明した各実施形態では、ある動作が他の動作の契機になるように記載しているが、その記載はある動作と他の動作との全ての関係を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の関係は内容的に支障のない範囲で変更することができる。また各構成要素の各動作の具体的な記載は、各構成要素の各動作を限定するものではない。このため、各構成要素の具体的な各動作は、各実施形態を実施する上で機能的、性能的、その他の特性に対して支障をきたさない範囲内で変更されてよい。
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行する
プロセススケジュール手段と、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む
情報処理装置。
(付記2)前記ブロッキング入出力手段は、
前記第1の上限値を超える数の前記入出力バッファを使用している前記実行中プロセスが存在しない状態になるまで、前記新規プロセスの実行を待ち合わせる
ことを特徴とする付記1記載の情報処理装置。
(付記3)前記プロセススケジュール手段は、
前記新規プロセスを開始する場合、前記第1の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第1の上限値の見直しを実行し、
前記実行中プロセスが終了した場合、前記実行中プロセスに対して設定された前記下限値の第2の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第1の上限値の見直しを実行する
ことを特徴とする付記1または2記載の情報処理装置。
(付記4)前記プロセススケジュール手段は、
前記新規プロセス及び前記実行中プロセスのそれぞれに対応する実行優先度及び前記下限値、並びにデバイスの入出力性能、の任意の情報に基づいて、前記新規プロセス及び前記実行中プロセスのそれぞれに対応する係数を算出し、算出された前記係数に基づいて、前記見直しを実行する
ことを特徴とする付記1乃至3のいずれか1つに記載の情報処理装置。
(付記5)前記ブロッキング入出力手段は、所定の閾値を超える頻度で入出力要求を実行する前記実行中プロセスに対応する前記係数を、前記プロセススケジュール手段による前記見直しにおいて前記第1の上限値が相対的に小さくなるように、更新する
ことを特徴とする付記4記載の情報処理装置。
(付記6)前記プロセススケジュール手段は、前記新規プロセスが入出力バッファを使用しないバッファ不用プロセスである場合、前記バッファ不用プロセスの前記下限値を0に設定する
ことを特徴とする付記1乃至5のいずれか1つに記載の情報処理装置。
(付記7)前記入出力バッファに格納されたデータの破棄を許容する特性が示されている場合、前記特性に基づいて、使用中の前記入出力バッファを強制的に開放する入出力バッファ管理手段を更に含む
ことを特徴とする付記1乃至6のいずれか1つに記載の情報処理装置。
(付記8)前記プロセススケジュール手段は、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記プロセスが所定の情報に基づいてグループ化されたグループに対応する、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第2の上限値の見直しを実行し、
前記入出力ブロッキング手段は、前記第2の上限値に基づいて前記入出力バッファの取得を待ち合わせる
ことを特徴とする付記1乃至7のいずれか1つに記載の情報処理装置。
(付記9)前記入出力ブロッキング手段とは並列に動作可能であり、前記入出力ブロッキング手段から入出力要求を受信し、受信した前記入出力要求を代理実行する非同期入出力要求手段を、更に更に含む
ことを特徴とする付記1乃至8のいずれか1つに記載の情報処理装置。
(付記10)所定使用枠値の入力を受け付ける手段を更に含む
ことを特徴とする付記1乃至9のいずれか1つに記載の情報処理装置。
(付記11)プロセッサと、プロセススケジュール部及びブロッキング入出力部として動作するための、プロセッサによって実行される命令を保持する記憶部とを含み、
前記プロセススケジュール部は、利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行し、
前記ブロッキング入出力部は、前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる
情報処理装置。
(付記12)利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行し、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる
バッファ管理方法。
(付記13)利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行し、
前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる処理をコンピュータに実行させる
プログラム。
以上、各実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しえるさまざまな変更をすることができる。
1 プロセス
2 プロセススケジュール部
3 ブロッキング入出力部
4 使用枠管理部
5 入出力バッファ管理部
6 入出力バッファプール
7 入出力実行キュー
8 非同期入出力要求部
21 開始部
22 終了検知部
23 開始判定部
24 使用枠値見直部
25 検査部
31 入出力要求部
32 取得制限部
33 高頻度入出力検出部
41 使用枠値取得部
42 使用バッファ計数部
43 使用枠管理テーブル
51 バッファ取得部
52 入出力実行管理部
53 バッファ解放部
61 入出力バッファ
71 入出力バッファ
332 高頻度入出力検出部
431 使用枠管理レコード
521 入出力要求登録部
522 入出力要求キャンセル部
523 デバイスドライバ
901 バッファ管理装置
910 コンピュータ
911 CPU
912 記憶部
913 記憶装置
914 入出力部
917 記録媒体

Claims (10)

  1. 利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
    前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行する
    プロセススケジュール手段と、
    前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせるブロッキング入出力手段と、を含む
    情報処理装置。
  2. 前記ブロッキング入出力手段は、
    前記第1の上限値を超える数の前記入出力バッファを使用している前記実行中プロセスが存在しない状態になるまで、前記新規プロセスの実行を待ち合わせる
    ことを特徴とする請求項1記載の情報処理装置。
  3. 前記プロセススケジュール手段は、
    前記新規プロセスを開始する場合、前記第1の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第1の上限値の見直しを実行し、
    前記実行中プロセスが終了した場合、前記実行中プロセスに対して設定された前記下限値の第2の合計数と、前記利用可能な入出力バッファの総数とに基づいて、前記第1の上限値の見直しを実行する
    ことを特徴とする請求項1または2記載の情報処理装置。
  4. 前記プロセススケジュール手段は、
    前記新規プロセス及び前記実行中プロセスのそれぞれに対応する実行優先度及び前記下限値、並びにデバイスの入出力性能、の任意の情報に基づいて、前記新規プロセス及び前記実行中プロセスのそれぞれに対応する係数を算出し、算出された前記係数に基づいて、前記見直しを実行する
    ことを特徴とする請求項1乃至3のいずれか1項に記載の情報処理装置。
  5. 前記ブロッキング入出力手段は、所定の閾値を超える頻度で入出力要求を実行する前記実行中プロセスに対応する前記係数を、前記プロセススケジュール手段による前記見直しにおいて前記第1の上限値が相対的に小さくなるように、更新する
    ことを特徴とする請求項4記載の情報処理装置。
  6. 前記プロセススケジュール手段は、前記新規プロセスが入出力バッファを使用しないバッファ不用プロセスである場合、前記バッファ不用プロセスの前記下限値を0に設定する
    ことを特徴とする請求項1乃至5のいずれか1項に記載の情報処理装置。
  7. 前記入出力バッファに格納されたデータの破棄を許容する特性が示されている場合、前記特性に基づいて、使用中の前記入出力バッファを強制的に開放する入出力バッファ管理手段を更に含む
    ことを特徴とする請求項1乃至6のいずれか1項に記載の情報処理装置。
  8. 前記プロセススケジュール手段は、前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記プロセスが所定の情報に基づいてグループ化されたグループに対応する、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第2の上限値の見直しを実行し、
    前記入出力ブロッキング手段は、前記第2の上限値に基づいて前記入出力バッファの取得を待ち合わせる
    ことを特徴とする請求項1乃至7のいずれか1項に記載の情報処理装置。
  9. 利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
    前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行し、
    前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる
    バッファ管理方法。
  10. 利用可能な入出力バッファの総数と、新規に開始される新規プロセス及び既に実行中の実行中プロセスのそれぞれが必要とする前記入出力バッファの数の下限値の第1の合計数と、を比較した結果に基づいて、前記新規プロセスの実行を開始及び保留し、
    前記新規プロセスの実行を開始する場合及び前記実行中プロセスが終了した場合、前記利用可能な入出力バッファの利用率がより高くなるように、前記実行中プロセスのそれぞれが同時に取得できる前記入出力バッファの数の第1の上限値の見直しを実行し、
    前記実行中プロセスから入出力要求を受信した場合に、前記実行中プロセスによる前記入出力バッファの使用数を、前記実行中プロセスに対応する前記第1の上限値以下に保つように、前記入出力バッファの取得を待ち合わせる処理をコンピュータに実行させる
    プログラム。
JP2013268403A 2013-12-26 2013-12-26 バッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラム Active JP6269045B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013268403A JP6269045B2 (ja) 2013-12-26 2013-12-26 バッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013268403A JP6269045B2 (ja) 2013-12-26 2013-12-26 バッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラム

Publications (2)

Publication Number Publication Date
JP2015125525A true JP2015125525A (ja) 2015-07-06
JP6269045B2 JP6269045B2 (ja) 2018-01-31

Family

ID=53536204

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013268403A Active JP6269045B2 (ja) 2013-12-26 2013-12-26 バッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラム

Country Status (1)

Country Link
JP (1) JP6269045B2 (ja)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0793170A (ja) * 1993-09-28 1995-04-07 Mitsubishi Electric Corp 通信バッファ管理装置
JPH11249955A (ja) * 1998-02-27 1999-09-17 Ricoh Co Ltd バッファの動的管理方法およびその方法の各工程をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2001051855A (ja) * 1999-08-09 2001-02-23 Nec Corp メモリ分割管理方式
JP2001184176A (ja) * 1999-12-27 2001-07-06 Toshiba Corp ディスク制御装置
JP2003067243A (ja) * 2001-08-23 2003-03-07 Ricoh Co Ltd 画像処理装置、プログラム、プログラムが書き込まれた記録媒体および画像形成装置
JP2004080267A (ja) * 2002-08-14 2004-03-11 Nippon Telegr & Teleph Corp <Ntt> ネットワークサービスにおけるリソース割り当て方法およびこれを用いるリソース割り当て装置
US20040250026A1 (en) * 2003-06-06 2004-12-09 Nec Corporation Information recording apparatus, buffer allocation method, and computer-readable recording medium storing computer program
JP2006285871A (ja) * 2005-04-04 2006-10-19 Canon Inc 情報処理装置、制御方法、プログラム、及び記憶媒体
JP2012133436A (ja) * 2010-12-20 2012-07-12 Nec Corp データ記憶装置、データ移行方法、及び、プログラム

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0793170A (ja) * 1993-09-28 1995-04-07 Mitsubishi Electric Corp 通信バッファ管理装置
JPH11249955A (ja) * 1998-02-27 1999-09-17 Ricoh Co Ltd バッファの動的管理方法およびその方法の各工程をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2001051855A (ja) * 1999-08-09 2001-02-23 Nec Corp メモリ分割管理方式
JP2001184176A (ja) * 1999-12-27 2001-07-06 Toshiba Corp ディスク制御装置
JP2003067243A (ja) * 2001-08-23 2003-03-07 Ricoh Co Ltd 画像処理装置、プログラム、プログラムが書き込まれた記録媒体および画像形成装置
JP2004080267A (ja) * 2002-08-14 2004-03-11 Nippon Telegr & Teleph Corp <Ntt> ネットワークサービスにおけるリソース割り当て方法およびこれを用いるリソース割り当て装置
US20040250026A1 (en) * 2003-06-06 2004-12-09 Nec Corporation Information recording apparatus, buffer allocation method, and computer-readable recording medium storing computer program
JP2004362459A (ja) * 2003-06-06 2004-12-24 Nec Corp ネットワーク情報記録装置
JP2006285871A (ja) * 2005-04-04 2006-10-19 Canon Inc 情報処理装置、制御方法、プログラム、及び記憶媒体
JP2012133436A (ja) * 2010-12-20 2012-07-12 Nec Corp データ記憶装置、データ移行方法、及び、プログラム

Also Published As

Publication number Publication date
JP6269045B2 (ja) 2018-01-31

Similar Documents

Publication Publication Date Title
US9501319B2 (en) Method and apparatus for scheduling blocking tasks
EP2893444B1 (en) Quota-based resource management
CN113641457B (zh) 容器创建方法、装置、设备、介质及程序产品
US9448864B2 (en) Method and apparatus for processing message between processors
US20100153957A1 (en) System and method for managing thread use in a thread pool
JP5925846B2 (ja) 待ち時間低減パケット処理を備えたソケット管理
US20150293793A1 (en) Method and apparatus for providing a preemptive task scheduling scheme in a real time operating system
US8881161B1 (en) Operating system with hardware-enabled task manager for offloading CPU task scheduling
JP2009265963A (ja) 情報処理システム及びタスクの実行制御方法
US7770177B2 (en) System for memory reclamation based on thread entry and release request times
KR102338849B1 (ko) 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템
JP2008217332A (ja) 仮想マシン管理システム、その方法及びそのプログラム
WO2019109948A1 (zh) PaaS的管理方法、装置及存储介质
US9229716B2 (en) Time-based task priority boost management using boost register values
US20180217875A1 (en) Data processing system and data processing method
JP6269045B2 (ja) バッファを管理する情報処理装置、バッファ管理方法、及びそのためのプログラム
CN115168040A (zh) 一种作业抢占调度方法、装置、设备和存储介质
JP2008225641A (ja) コンピュータシステム、割り込み制御方法及びプログラム
CN117093335A (zh) 分布式存储系统的任务调度方法及装置
WO2020031675A1 (ja) スケジューリング装置、スケジューリングシステム、スケジューリング方法、プログラム及び非一時的コンピュータ可読媒体
CN115904644A (zh) 任务调度方法、电子设备和计算机程序产品
JP2013186765A (ja) バッチ処理システム、進捗状況確認装置、進捗状況確認方法、及びプログラム
Chen et al. Unikernel-based real-time virtualization under deferrable servers: Analysis and realization
JP2021060707A (ja) 同期制御システムおよび同期制御方法
JP2019139566A (ja) 資料採取サーバ、資料採取システム、資料採取方法および資料採取プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170823

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170912

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171109

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171218

R150 Certificate of patent or registration of utility model

Ref document number: 6269045

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150