JP5465067B2 - スケジューリング装置、スケジューリング方法およびスケジューリングプログラム - Google Patents
スケジューリング装置、スケジューリング方法およびスケジューリングプログラム Download PDFInfo
- Publication number
- JP5465067B2 JP5465067B2 JP2010093412A JP2010093412A JP5465067B2 JP 5465067 B2 JP5465067 B2 JP 5465067B2 JP 2010093412 A JP2010093412 A JP 2010093412A JP 2010093412 A JP2010093412 A JP 2010093412A JP 5465067 B2 JP5465067 B2 JP 5465067B2
- Authority
- JP
- Japan
- Prior art keywords
- time
- unit
- event
- event record
- buffer
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
シミュレーションにおいては、非特許文献1のCalendar Queueと呼ばれるデータ構造が用いられることが一般的である。この構造はイベントを実行時刻順に整列して保持する代わりに、実行時刻に対応する固定数のタイムスロットにイベントを振り分けて格納する。これにより、イベント数によらない挿入コストを実現している。実行時刻を所定の時間分解能で表現した場合に実行時刻が同一となるイベントは同一のタイムスロットに格納される。現在時刻と実行時刻との差が「単位時間×タイムスロット数」を超えない場合、タイムスロット内の実行時刻は全て同一となる。しかし、一般にはタイムスロット数を小さく設定し、「単位時間×タイムスロット数」を法として実行時刻とタイムスロットの割り当てを行う。すなわち、タイムスロット内には異なる実行時刻のイベントが混在し、現在時刻に対応しないイベントはスキップされる。
有限の時間分解能を設定しない方法として、浮動小数点数の実行時刻にハッシュ関数を適用し、ハッシュ値に基づいてタイムスロットを割り当てる方法が特許文献1に開示されている。この場合もタイムスロット内には異なる実行時刻のイベントが混在することになる。
しかし、100億以上存在するWebページの内容をそれぞれに固有の周期で繰り返し収集するような場合においては、個々のWebページに対する収集イベントを主記憶上に保持するには大量の主記憶が必要となって実現コストが増大してしまう。
また、主記憶の容量が極めて限られた組み込み機器等においては、二次記憶を活用することでより多くのイベントを扱えるようにすることが求められる。
一方、実行時刻の混在が起こらない程度にタイムスロット数を増加させると、タイムスロットごとに割り当て可能な書き込みバッファの容量が減少し、二次記憶に対する小規模な書き込みが多数発生して実効的な転送速度が低下してしまう。
この課題は、タイムスロットの時間分解能を小さくしてスケジューリングの精度を上げようとすると特に顕著となる。単位時間の減少に伴い、実行時刻の混在を避けるために必要なタイムスロット数(=最大スケジューリング期間/単位時間)が増加するためである。
処理の開始予定時刻が定められたイベントレコードを入力するイベント入力部と、
前記イベント入力部がイベントレコードを入力した入力時刻から前記イベントレコードの開始予定時刻までの時間を開始待ち時間として算出し、算出した開始待ち時間が長いほど長い時間を単位時間として特定する単位時間特定部と、
前記単位時間特定部により特定された単位時間に基づいて前記イベントレコードの開始予定時刻を前記単位時間を単位とする時刻に変換し、変換して得られた時刻を開始判定時刻として特定する開始判定時刻特定部と、
前記開始判定時刻特定部により特定された開始判定時刻に基づいて前記開始判定時刻に対応付けた記憶領域を所定の記憶装置に確保し、確保した記憶領域に前記イベントレコードを記憶するスケジューリング部と、
前記開始判定時刻に前記開始判定時刻に対応する記憶領域に記憶されている前記イベントレコードを参照し、前記イベントレコードを参照した参照時刻と前記イベントレコードの開始予定時刻とに基づいて前記イベントレコードの処理を開始するか否かを判定し、前記イベントレコードの処理を開始すると判定した場合に前記イベントレコードの処理を開始し、前記イベントレコードの処理を開始しないと判定した場合に前記イベントレコードを前記イベント入力部に入力するイベント処理部とを備える。
イベントレコードの入力時刻からイベントレコードの開始予定時刻までの開始待ち時間(後述する実行間隔x)に基づいてイベントレコードをスケジューリングする形態について説明する。
実施の形態1におけるスケジューリングシステム100の機能構成について、図1に基づいて以下に説明する。
後述する「実行時刻210」は「開始予定時刻」の一例である。
格納先バッファ決定部122(開始判定時刻特定部の一例)は、特定した単位時間に基づいてイベントレコード200の開始予定時刻を前記単位時間を単位とする時刻に変換し、変換して得られた時刻を開始判定時刻として特定する。
または、イベント格納部123は、入力イベントを記憶する記憶領域をバッファ記憶部130に確保できない場合、バッファ記憶部130に確保されている記憶領域のうち所定の領域サイズより大きい領域サイズを有する記憶領域であって入力イベントの入力時刻から所定時間後の時刻以降の開始判定時刻に対応する記憶領域を解放領域として特定する。
または、イベント格納部123は、入力イベントを記憶する記憶領域をバッファ記憶部130に確保できない場合、バッファ記憶部130に確保されている記憶領域のうち入力イベントの入力時刻から所定時間後の時刻以降の開始判定時刻に対応する記憶領域を解放領域として特定する。
実行部110は、イベントレコード200を参照した参照時刻とイベントレコード200の開始予定時刻とに基づいてイベントレコード200の処理を開始するか否かを判定する。
実行部110は、イベントレコード200の処理を開始すると判定した場合にイベントレコード200の処理を開始し、イベントレコード200の処理を開始しないと判定した場合にイベントレコード200をイベント入力部121に入力する。
または、実行部110は、イベントレコード200を参照した参照時刻とイベントレコード200の開始予定時刻とに関わらず開始判定時刻にイベントレコード200の処理を開始する。
実施の形態1におけるイベントレコード200について、図2に基づいて説明する。
実行時刻210は、処理を開始する予定時刻を示す。
時刻許容誤差220は、実行時刻210に対する許容時間を示す。
実行内容230は、処理の実行に必要な情報を示す。例えば、実行内容230は、起動するプログラムの名称とプログラムの引数との組み合わせや、呼び出すサブルーチンの名称とサブルーチンのパラメータとの組み合わせを示す。
例えば、実行時刻210が「2010年1月28日16時35分30秒」であり、時刻許容誤差220が「1時間」である場合、イベントレコード200の処理は「2010年1月28日15時35分30秒」から「2010年1月28日17時35分30秒」までの間に開始される。
以下、イベントレコード200の処理を開始できる期間を「処理可能期間」という。
実施の形態1におけるバッファ記憶部130とバケット記憶部140との概要について、図3に基づいて以下に説明する。
例えば、バッファ記憶部130をランダムアクセスメモリ(RAM)で、バケット記憶部140を磁気ディスク装置で実装する。
複数のバッファBFはそれぞれに異なる開始時刻(t,t+u,・・・)に対応付けられている。
例えば、実行時刻210が「2010年1月28日16時35分30秒」であり、単位時間が「30分」である場合、イベントレコード200は「2010年1月28日16時30分00秒」に対応するバッファBFに記憶される。
第2の単位時間は、所定の第1の単位時間(例えば「1分」)を最小の単位として定められる。つまり、第2の単位時間は第1の単位時間の整数倍の時間である。
例えば、図3では、バッファBFt+4u、BFt+6u、BFt+8u〜BFt+10uは確保されていない。
例えば、図3では、最も早い開始時刻tから第1の単位時間u毎にバケットBTが設けられている。
例えば、開始時刻をファイル名に含んだファイルがバケットBTとして生成される。
例えば、図3においてバッファBFt+11uが選択された場合、バッファBFt+11uに記憶されている2つのイベントレコード200がバケットBTt+11uに記憶されている4つのイベントレコード200の後ろに記憶され、バッファBFt+11uが解放される。
同様に、バケットBTに記憶されたイベントレコード200はバケットBTの開始時刻に読み出され処理可能期間内の時刻であれば処理される。
読み出された時刻が処理可能期間内の時刻でない場合、バッファBFまたはバケットBTから読みだされたイベントレコード200は再スケジュールされて特定のバッファBFに記憶される。
実施の形態1におけるバッファ群300のデータ構造について、図4に基づいて以下に説明する。
開始時刻321に対応するバッファ399が確保された場合、バッファヘッダ329にはポインタ配列アドレス325が設定される。ポインタ配列アドレス325はポインタ配列330の先頭アドレスを示す。開始時刻321に対応するバッファ399が確保されていない場合、バッファヘッダ329にポインタ配列アドレス325は設定されない。
ポインタ配列330は割り当てられたページの先頭アドレスを要素とする配列であり、先頭の要素から順に使用される。割り当てられたページにはイベントレコード200が記憶される。ページは固定長の記憶領域である。例えば、最初に割り当てられたページの先頭アドレスがポインタ配列330の0番目の要素に設定される。ページに空き容量が無くなった場合、新たにページが割り当てられ、新たに割り当てられたページの先頭アドレスがポインタ配列330の1番目に要素に設定される。
以下、空き容量が無くなったページを「充填済みページ340」といい、空き容量が残っているページを「未充填ページ350」という。また、割り当てられたページ(充填済みページ340、未充填ページ350)を「バッファ399」という。図中の充填済みページ340および未充填ページ350は開始時刻tに対応するバッファ399である。
図4では、開始指標310は開始時刻tに対応するバッファヘッダ329の要素番号「2」を示す。要素番号「2」のバッファヘッダ329に関連付けられたバッファ399が開始時刻tに処理され又は再スケジュールされた場合、バッファ399およびポインタ配列330は解放され、開始指標310には次の要素番号「3」が設定される。要素番号「2」のバッファヘッダ329は新たに開始時刻「t+N・u」に対応付けられる。「N」はバッファヘッダ配列320の要素数であり、「u」は第1の単位時間である。
実施の形態1におけるバッファヘッダ329について、図5および図4に基づいて以下に説明する。
ポインタ配列アドレス325はポインタ配列330の先頭アドレスを示す。バッファ399が割り当てられていない場合、ポインタ配列アドレス325は無効アドレス(例えば「0」)を示す。
最大ページ数322はポインタ配列330の要素数、つまり、割り当てることができるページ数を示す。
使用ページ数323はポインタ配列330の要素のうち使用されている要素の数、つまり、割り当てられているページ数を示す。
空き容量324はポインタ配列330に関連付けられている未充填ページ350の空き容量を示す。
実施の形態1における実行部110のイベント実行処理について、図6に基づいて以下に説明する。
実行部110は、開始時刻tに対応するバッファ(t)に未選択のイベントレコード200が残っているか否かを判定する(S120)。
バッファ(t)に未選択のイベントレコード200が残っている場合(S120「YES」)、実行部110は、バッファ(t)から未選択のイベントレコード200を1つ選択し(S121)、選択したイベントレコード200を処理可能な時刻であるか否かを判定する(S122)。
選択したイベントレコード200を処理可能な時刻である場合(S122「YES」)、実行部110は、選択したイベントレコード200の処理を実行する(S123)。
選択したイベントレコード200を処理可能な時刻でない場合(S122「NO」)、実行部110は、選択したイベントレコード200をスケジュール部120に入力する(S124)。
バッファ(t)に未選択のイベントレコード200が残っていない場合(S120「NO」)、実行部110は、バッファ(t)を解放する(S125)。
その後、実行部110は、開始時刻tに対応するバケット(t)をバッファ(t)と同様に処理する(S130〜S135)。
S110の後、S111に進む。
S111の後、S120に進む。
実行部110は、ポインタ配列330に設定されているアドレスで特定されるページを参照し、選択していないイベントレコード200がページ内に残っているか否かを判定する。
以下、開始時刻tに対応するバッファを「バッファ(t)」といい、選択していないイベントレコード200を「未選択イベント」という。
バッファ(t)内に未選択イベントが残っている場合(YES)、S121に進む。
バッファ(t)内に未選択イベントが残っていない場合(NO)、S125に進む。
以下、選択した未選択イベントを「選択イベント」という。
S121の後、S122に進む。
現在時刻Tが実行時刻TEと時刻許容誤差Tαとに対して「TE−Tα≦T≦TE+Tα」の関係を満たせば、現在時刻Tは選択イベントを処理できる時刻である。
選択イベントを処理できる時刻である場合(YES)、S123に進む。
選択イベントを処理できない時刻である場合(NO)、S124に進む。
S123の後、S120に戻る。
S124の後、S120に戻る。
バッファ(t)のページとバッファ(t)のポインタ配列330とをバッファ記憶部130に返却し、開始時刻tに対応するバッファヘッダ329を初期化し、開始指標310を更新することにより、バッファ(t)を解放することができる。
バッファ(t)を解放することによりバッファ(t)のページが空きページになり、バッファ記憶部130に空きページが増える。空きページは任意のバッファに割り当てられる。
実行部110は、バッファヘッダ配列320内のバッファヘッダ329それぞれに対応する開始時刻のうち最も遅い開始時刻を最終開始時刻Eとして特定し、最終開始時刻Eに第1の単位時間uを加えた時刻をバッファヘッダ(t)の開始時刻321に設定する。最終開始時刻Eはバッファヘッダ配列320の要素数Nと第1の単位時間uとを用いて「E=t+((N−1)×u)」で表され、バッファヘッダ(t)の開始時刻321には「t+(N×u)」が設定される。
実行部110は、バッファヘッダ(t)の最大ページ数322、使用ページ数323および空き容量324に「0」を設定する。
実行部110は、バッファヘッダ(t)のポインタ配列アドレス325に無効アドレス(例えば「0」)を設定する。
つまり、バケット(t)に未選択イベントが残っている場合(S130「YES」)、未選択イベントを選択し(S131)、選択イベントを処理可能な時刻であるか否かを判定する(S132)。
選択イベントを処理可能な時刻であれば選択イベントを実行し(S133)、選択イベントを処理可能な時刻でなければ選択イベントをスケジュール部120に入力する(S134)。
バケット(t)から未選択イベントが無くなった場合(S130「NO」)、バケット(t)を解放する(例えば、ファイルを削除する)(S135)。
実施の形態1におけるスケジュール部120のイベントスケジュール処理について、図7に基づいて以下に説明する。
格納先バッファ決定部122はイベントレコード200の実行時刻および現在時刻に基づいてイベントレコード200の格納先バッファを決定する(S220)。
イベント格納部123は格納先バッファにイベントレコード200を記憶する空き容量が有るか否かを判定する(S230)。
格納先バッファに空き容量が有る場合(S230「YES」)、イベント格納部123はイベントレコード200を格納先バッファに記憶する(S270)。
格納先バッファに空き容量が無い場合(S230「NO」)、イベント格納部123はイベントレコード200を記憶する空きページがバッファ記憶部130に有るか否かを判定する(S240)。
バッファ記憶部130に空きページが有る場合(S240「YES」)、イベント格納部123は格納先バッファに空きページを割り当て(S260)、イベントレコード200を格納先バッファに記憶する(S270)。
バッファ記憶部130に空きページが無い場合(S240「NO」)、イベント格納部123は時刻閾値とページ閾値とを初期設定し(S250)、開始時刻が時刻閾値以降で且つ使用ページ数がページ閾値以上であるバッファを検索する(S251)。
該当バッファが無い場合(S252「NO」)、イベント格納部123はページ閾値および時刻閾値を変更し(S256)、変更後のページ閾値および時刻閾値に対応する該当バッファを検索する(S251)。
該当バッファが有る場合(S252「YES」)、イベント格納部123は該当バッファ内のイベントレコード200をバケット記憶部140に移動し(S253)、該当バッファ内の使用ページを解放し(S254)、バッファ記憶部130に空きページを確保できたか否かを判定する(S255)。
バッファ記憶部130に空きページを確保できた場合(S255「YES」)、イベント格納部123は格納先バッファに空きページを割り当て(S260)、イベントレコード200を格納先バッファに記憶する(S270)。
まだ、バッファ記憶部130に空きページを確保できない場合(S255「NO」)、イベント格納部123はページ閾値および時刻閾値を変更し(S256)、変更後のページ閾値および時刻閾値に対応する該当バッファを検索する(S251)。
また、イベント入力部121は、新たに発生したイベントレコード200を入力する。例えば、イベント入力部121は、ユーザが入力装置(キーボード、マウスなど)を用いて指定したイベントレコード200を入力する。また例えば、特定の端末装置からネットワークを介して送信されたイベントレコード200をスケジューリングシステム100の通信装置が受信し、受信されたイベントレコード200を入力する。
以下、入力したイベントレコード200を「入力イベント」という。
S210の後、S220に進む。
以下、決定するバッファを「格納先バッファ」という。
格納先バッファの決定方法については後述する。
S220の後、S230に進む。
格納先バッファに入力イベントを記憶する空き容量が有る場合(YES)、S270に進む。
格納先バッファに入力イベントを記憶する空き容量が無い場合(NO)、S240に進む。
入力イベントを記憶する空きページがバッファ記憶部130に有る場合(YES)、S260に進む。
入力イベントを記憶する空きページがバッファ記憶部130に無い場合(NO)、S250に進む。
時刻閾値は近いうちにイベント実行処理(図6参照)されるバッファを除外するための閾値であり、ページ閾値は使用ページ数が少ないバッファを除外するための閾値である。
例えば、現在時刻Tに「n×u」を加えた値を時刻閾値の初期値にする。「n」は正の整数であり、「u」は第1の単位時間である。また、バッファヘッダ329に設定される最大ページ数322の初期値をページ閾値の初期値にする。
S250の後、S251に進む。
例えば、イベント格納部123は、開始指標310によって特定されるバッファヘッダ329から開始時刻321の昇順または降順にバッファヘッダ配列320を検査し、条件に合うバッファを検索する。
以下、条件に合うバッファを「該当バッファ」という。
S251の後、S252に進む。
S252において、該当バッファが無かった場合(NO)、S256に進む。
イベント格納部123は、該当バッファのページに記憶されているイベントレコード200を対応バケットの最後に追加して記憶する。例えば、イベント格納部123は充填済みページ340に記憶されている複数のイベントレコード200をページ単位で対応バケットに記憶する。また、イベント格納部123は未充填ページ350に記憶されている1つ又は複数のイベントレコード200をレコード単位で対応バケットに記憶する。
イベント格納部123は、全ての該当バッファについて上記の処理を行う。
S253の後、S254に進む。
イベント格納部123は、全ての該当バッファについて上記の処理を行う。
該当バッファを解放することにより、割り当て可能な空きページが増える。
S254の後、S255に進む。
入力イベントを記憶する空きページがバッファ記憶部130に有る場合(YES)、S260に進む。
入力イベントを記憶する空きページがバッファ記憶部130に無い場合(NO)、S256に進む。
例えば、ページ閾値が「16」である場合にイベント格納部123は4分の1の値「4(=16/4)」をページ閾値に新たに設定する。
また例えば、イベント格納部123はページ閾値が「0」である場合、全てのバッファを解放対象にするために現在時刻を時刻閾値に設定する。
S256の後、S251に戻る。
イベント格納部123は、格納先バッファに空きページを割り当て、割り当てた空きページのアドレスをポインタ配列330内の未使用の要素に設定する。ポインタ配列330内に未使用の要素が足りず空きページのアドレスを設定できない場合、イベント格納部123は最大ページ数322が大きいポインタ配列330を格納先バッファに新たに割り当てる。イベント格納部123は、元のポインタ配列330に設定されているアドレスを新たなポインタ配列330にコピーし、元のポインタ配列330をバッファ記憶部130に返却する。イベント格納部123は、バッファヘッダ329の最大ページ数322に新たなポインタ配列330の要素数を設定し、ポインタ配列アドレス325に新たなポインタ配列330のアドレスを設定する。ポインタ配列330内に未使用の要素が足りない場合とは、「最大ページ数322−使用ページ数323」が割り当てる空きページ数より小さい場合である。
イベント格納部123は、割り当てた空きページのページ数をバッファヘッダ329の使用ページ数323に加算する。
S270により、イベントスケジュール処理は終了する。
実施の形態1における格納先バッファ決定処理(S220)(図7参照)について、図8に基づいて以下に説明する。
以下、算出する時間を「実行間隔」という。
S221の後、S222に進む。
第2の単位時間は実行間隔が短いほど短く、実行間隔が長いほど長い。
上記の式において「k=1/12」、「u=60[秒]」とした場合、実行間隔xと第2の単位時間vとは図9に示すような関係になる。
実行間隔xが「約50分(3000秒)」までは第2の単位時間は第1の単位時間u(=60秒)と同じであるが、実行間隔が「1時間」「1日」「1年」と長くなるにつれて第2の単位時間は「4分」「1時間23分」「23.3日」と長くなる。
また、第2の単位時間が「4分」である場合、実行時刻210の「4分」未満の時刻「3分30秒」を切り捨てて「2010年1月28日16時32分00秒」を格納先バッファの開始時刻とする。
また、第2の単位時間が「1時間」であれば「2010年1月28日16時00分00秒」、第2の単位時間が「1日」であれば「2010年1月28日00時00分00秒」、第2の単位時間が「1月」であれば「2010年1月1日00時00分00秒」を格納先バッファの開始時刻とする。
図10において、スケジューリングシステム100は、CPU911(Central・Processing・Unit)(マイクロプロセッサ、マイクロコンピュータともいう)を備えている。CPU911は、バス912を介してROM913、RAM914、通信ボード915、表示装置901、キーボード902、マウス903、ドライブ装置904、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。ドライブ装置904は、FD(Flexible・Disk・Drive)、CD(Compact Disc)、DVD(Digital・Versatile・Disc)などの記憶媒体を読み書きする装置である。
例えば、バッファのページにイベントレコード200が一つしか記憶されていなければレコード単位でバケットに書き込みを行うことになるが、バッファのページに多くのイベントレコード200が記憶されていればページ単位でバケットに書き込みを行うことができる。バケット記憶部140は磁気ディスク装置によって実装されることが想定されるため、書き込みの単位を大きくすることでランダムアクセスの発生が抑制され、磁気ディスク装置の性能低下の防止につながる。小さい単位で多くの書き込みを行うと磁気ディスク装置の性能が低下することが知られている。
また、ステップS240は、バッファの個別の容量ではなく、バッファ記憶部130の全体の空き容量に応じてバケットへの書き込みを起動する。これにより、イベントレコード200の実行時刻の分布によらず、バッファ記憶部130を有効に利用することができる。
また、ステップS251は十分なページ数を持つバッファのみを書き込み対象とするので、バケット記憶部140に対して小さな単位で書き込みを行うことを可能な限り避け、書き込み速度の低下を抑制することができる。
また、ステップS251は、現在時刻からn単位時間以内の開始時刻を持つバッファを書き込み対象外とするので、短時間の内に処理されるイベントレコード200をバケットへ書き込んでバケットから読み出すということを回避し、処理時間を短縮することができる。
また、ステップS124およびステップS134は時刻許容誤差を満たさないイベントレコード200を再スケジュールするので、大きな実行間隔を持つイベントレコード200を高い時間精度で実行することが可能である。
また、実行部110は、処理可能な時刻であるか否かの判定(S122)を行わずに選択イベントの処理を実行しても構わない(S123)。つまり、イベントレコード200は現在時刻T、実行時刻210および時刻許容誤差220に関わらず開始時刻に処理されても構わない。
処理部は、実行時刻と実行内容とを記述したイベントレコードに従って処理を実行する。
第1の記憶部は、実行時刻を第1の単位時間の整数倍で表した値である第1の開始時刻に基づいて複数の領域(バケット)に分けてイベントレコードを記憶する。
第2の記憶部は、実行時刻と現在時刻との差(実行間隔)の大きさに応じて変化する第2の単位時間の整数倍で実行時刻を表した値である第2の開始時刻に基づいて複数の領域(バッファ)に分けてイベントレコードを記憶する。
スケジューリング部は、イベントレコードを第2の記憶部の領域の1つに一時的に記憶させた後に、当該第2の記憶部の領域の第2の開始時刻と一致する第1の開始時刻を持つ第1の記憶部の領域に記憶させる。
スケジューリング部は、第2の記憶部の各領域に記憶されたイベントレコードを第2の開始時刻の順に第2の記憶部の領域の第2の開始時刻と一致する第1の開始時刻を持つ第1の記憶部の領域に書き込む。
スケジューリング部は、当該第2の記憶部の領域を空にする。
スケジューリング部は、第2の記憶部の各領域のうちイベントレコードを記憶している容量が所定の値以上である領域に記憶されたイベントレコードを、第2の開始時刻の順に、第2の記憶部の領域の第2の開始時刻と一致する第1の開始時刻を持つ第1の記憶部の領域に書き込む。
スケジューリング部は、当該第2の記憶部の領域を空にする。
なおもイベントレコードを記憶させるのに十分な容量が第2の記憶部に存在しない場合にのみ、スケジューリング部は以下の処理をする。
スケジューリング部は、第2の記憶部の各領域のうちイベントレコードを記憶している容量が所定の値に満たない領域に記憶されたイベントレコードを、第2の開始時刻の順に、第2の記憶部の領域の第2の開始時刻と一致する第1の開始時刻を持つ第1の記憶部の領域に書き込む。
スケジューリング部は、当該第2の記憶部の領域を空にする。
スケジューリング部は、第2の記憶部の各領域のうち現在時刻との差が所定の値を超える第2の開始時刻を持つ領域に記憶されたイベントレコードを、第2の開始時刻の順に、第2の記憶部の領域の第2の開始時刻と一致する第1の開始時刻を持つ第1の記憶部の領域に書き込む。
スケジューリング部は、当該第2の記憶部の領域を空にする。
なおもイベントレコードを記憶させるのに十分な容量が第2の記憶部に存在しない場合にのみ、スケジューリング部は以下の処理をする。
スケジューリング部は、第2の記憶部の各領域のうち現在時刻との差が所定の値に満たない第2の開始時刻を持つ領域に記憶されたイベントレコードを、第2の開始時刻の順に、第2の記憶部の領域の第2の開始時刻と一致する第1の開始時刻を持つ第1の記憶部の領域に書き込む。
スケジューリング部は、当該第2の記憶部の領域を空にする。
処理部は、読み出したイベントレコードの実行時刻が現在時刻より1単位時間以上大きい場合、当該イベントレコードの処理を実行しない。
スケジューリング部は、当該イベントレコードを第2の記憶部の領域の1つに一時的に記憶させた後に、当該第2の記憶部の領域の第2の開始時刻と一致する前記第1の開始時刻を持つ第1の記憶部の領域に当該イベントレコードを記憶する。
処理部は、現在時刻に対応する第1の開始時刻を持つ第1の記憶部の領域からイベントレコードを読み出す。
処理部は、読み出したイベントレコードの実行時刻と現在時刻との差が時刻許容誤差を超えている場合、当該イベントレコードの処理を実行しない。
スケジューリング部は、当該イベントレコードを第2の記憶部の領域の1つに一時的に記憶させた後に、当該第2の記憶部の領域の第2の開始時刻と一致する第1の開始時刻を持つ第1の記憶部の領域に当該イベントレコードを記憶する。
処理部は、第2の記憶部の領域からイベントレコードを全て読み出した後に、現在時刻に対応する第1の開始時刻を持つ第1の記憶部の領域からイベントレコードを読み出し、読み出したイベントレコードの実行時刻に関わらず当該イベントレコードの処理を実行する。
処理部は、読み出したイベントレコードの実行時刻が現在時刻より1単位時間以上大きい場合、当該イベントレコードの処理を実行せず、スケジューリング部に当該イベントレコードを第2の記憶部の領域の1つに記憶させる。
処理部は、第2の記憶部の領域からイベントレコードを全て読み出した後に、現在時刻に対応する第1の開始時刻を持つ第1の記憶部の領域からイベントレコードを読み出す。
処理部は、読み出したイベントレコードの実行時刻が現在時刻より1単位時間以上大きい場合に当該イベントレコードの処理を実行せず、スケジューリング部に当該イベントレコードを第2の記憶部の領域の1つに記憶させる。
処理部は、現在時刻に対応する第2の開始時刻を持つ第2の記憶部の領域からイベントレコードを読み出す。
処理部は、読み出したイベントレコードの実行時刻と現在時刻との差が時刻許容誤差を超えている場合に当該イベントレコードの処理を実行せず、スケジューリング部に当該イベントレコードを第2の記憶部の領域の1つに記憶させる。
処理部は、第2の記憶部の領域からイベントレコードを全て読み出した後に、現在時刻に対応する第1の開始時刻を持つ第1の記憶部の領域からイベントレコードを読み出す。
処理部は、読み出したイベントレコードの実行時刻と現在時刻との差が時刻許容誤差を超えている場合に当該イベントレコードの処理を実行せず、スケジューリング部に当該イベントレコードを第2の記憶部の領域の1つに記憶させる。
木構造でバッファ群300を管理する形態について説明する。
また、バッファ数が所定数を超えている場合、特定バッファに記憶されているイベントレコード200をバケット記憶部140に移動し、特定バッファを解放する形態について説明する。
実施の形態2におけるスケジューリングシステム100の機能構成について、図11に基づいて以下に説明する。
但し、バケット記憶部140はバッファ群300を木構造で管理する。
図13は、実施の形態2におけるバッファヘッダ370のフォーマットを示す図である。
実施の形態2におけるバッファ群300のデータ構造について、図12および図13に基づいて以下に説明する。
バッファヘッダ木311は、木構造の根の部分に位置するバッファヘッダ329aのアドレスを示す。
開始時刻321〜ポインタ配列アドレス325は実施の形態1(図5参照)と同じである。
左子ノードアドレス326と右子ノードアドレス327とはそれぞれ他のバッファヘッダ329のアドレスを示す。
例えば、バッファヘッダ329aの右子ノードアドレス327に関連付けられたバッファヘッダ329bはバッファヘッダ329aより後の開始時刻321を示す。また、バッファヘッダ329aの左子ノードアドレス326に関連付けられたバッファヘッダ329eはバッファヘッダ329aより前の開始時刻321を示す。つまり、バッファヘッダ329aの開始時刻321はバッファヘッダ329bより早い時刻であってバッファヘッダ329eより遅い時刻である。同様に、バッファヘッダ329bの開始時刻321はバッファヘッダ329cより早い時刻であってバッファヘッダ329dより遅い時刻である。
木構造の基本操作は公知技術であるため、バッファヘッダ329の挿入や削除など木構造の基本操作については説明を省略する。例えば、木構造の基本操作については非特許文献2に開示されている。
実施の形態2におけるスケジュール部120のイベントスケジュール処理について、図14に基づいて以下に説明する。
バッファヘッダ数制限処理(S280)において、バッファヘッダ数制限部124は、バッファヘッダ数が多い場合に特定バッファ内のイベントレコード200をバケット記憶部140に移動し、特定バッファを解放する。
以下に、バッファヘッダ数制限処理(S280)の詳細について説明する。
実施の形態2におけるバッファヘッダ数制限処理(S280)について、図15に基づいて以下に説明する。
格納先バッファのバッファヘッダ329が有る場合(YES)、S282に進む。
格納先バッファのバッファヘッダ329が無い場合(NO)、S281bに進む。
S281bの後、S282に進む。
バッファヘッダ数がヘッダ数閾値より大きい場合(YES)、S283に進む。
バッファヘッダ数がヘッダ数閾値以下の場合(NO)、バッファヘッダ数制限処理(S280)は終了する。
但し、バッファヘッダ数制限部124は、該当バッファを解放したことによりバッファヘッダ数がヘッダ数閾値以下になった場合にバッファヘッダ数制限処理(S280)を終了する。
バッファヘッダ数制限部124は開始時刻が時刻閾値以降で且つ使用ページ数がページ閾値以上である該当バッファを検索する(S285)。
バッファヘッダ数制限部124は該当バッファに記憶されているイベントレコード200を該当バッファと同じ開始時刻321に対応するバケットに記憶する(S286)。バッファヘッダ数制限部124は該当バッファをバッファ記憶部130に返却し、該当バッファのバッファヘッダ329を木構造から削除する(S287)。
また、ステップS282はバッファヘッダ数に上限を設けるので、多数で小容量のバッファが長期間存続してバッファ記憶部130の空き領域が減少してしまうことを避け、性能低下を防ぐことができる。
例えば、バッファ群全体の使用ページ数が所定のページ数を超えている場合に時刻閾値とページ閾値との条件を満たすバッファを解放してもよい。
また、バッファ群全体のバッファ数(ポインタ配列330の数、バッファヘッダ配列320に設定されているポインタ配列アドレス325の数)が所定のバッファ数を超えている場合に時刻閾値とページ閾値との条件を満たすバッファを解放してもよい。
スケジューリング部(スケジュール部120)は、少なくとも1つのイベントレコード200が記憶されたバッファ記憶部130の領域(バッファ)の数が所定の値を超える場合に、イベントレコード200を記憶させるのに十分な容量がバッファ記憶部130に存在しない場合と同様の処理を行う。
Claims (10)
- 処理の開始予定時刻が定められたイベントレコードを入力するイベント入力部と、
前記イベント入力部がイベントレコードを入力した入力時刻から前記イベントレコードの開始予定時刻までの時間を開始待ち時間として算出し、算出した開始待ち時間が第一の時間未満の時間である場合に第一の単位時間を前記イベントレコードの開始予定時刻を変換するための単位時間として特定し、算出した開始待ち時間が前記第一の時間以上第二の時間未満の時間である場合に第二の単位時間を前記イベントレコードの開始予定時刻を変換するための単位時間として特定する単位時間特定部と、
前記単位時間特定部により特定された単位時間に基づいて前記イベントレコードの開始予定時刻を前記単位時間を単位とする時刻に変換し、変換して得られた時刻を開始判定時刻として特定する開始判定時刻特定部と、
前記開始判定時刻特定部により特定された開始判定時刻に基づいて前記開始判定時刻に対応付けた記憶領域を所定の記憶装置に確保し、確保した記憶領域に前記イベントレコードを記憶するスケジューリング部と、
前記開始判定時刻に前記開始判定時刻に対応する記憶領域に記憶されている前記イベントレコードを参照し、前記イベントレコードを参照した参照時刻と前記イベントレコードの開始予定時刻とに基づいて前記イベントレコードの処理を開始するか否かを判定し、前記イベントレコードの処理を開始すると判定した場合に前記イベントレコードの処理を開始し、前記イベントレコードの処理を開始しないと判定した場合に前記イベントレコードを前記イベント入力部に入力するイベント処理部と
を備えることを特徴とするスケジューリング装置。 - 前記スケジューリング装置は、第1の記憶装置と第2の記憶装置とを備え、
前記スケジューリング部は、前記イベント入力部が入力したイベントレコードを入力イベントとして記憶する記憶領域を前記第1の記憶装置に確保できる場合、前記入力イベントの開始予定時刻に対応付けた記憶領域を前記第1の記憶装置に確保し、確保した記憶領域に前記入力イベントを記憶し、前記入力イベントを記憶する記憶領域を前記第1の記憶装置に確保できない場合、前記第1の記憶装置に確保されている記憶領域のうち少なくともいずれかの記憶領域を解放領域として特定し、特定した解放領域に記憶されているイベントレコードを前記解放領域の開始判定時刻に対応付けて前記第2の記憶装置に記憶し、前記解放領域を前記入力イベントの開始予定時刻に対応付けて確保し、確保した解放領域に前記入力イベントを記憶し、
前記イベント処理部は、特定の開始判定時刻に前記第1の記憶装置に記憶されているイベントレコードのうち前記特定の開始判定時刻に対応する記憶領域に記憶されているイベントレコードを参照すると共に前記第2の記憶装置に記憶されているイベントレコードのうち前記特定の開始判定時刻に対応する記憶領域に記憶されているイベントレコードを参照する
ことを特徴とする請求項1記載のスケジューリング装置。 - 前記スケジューリング部は、前記入力イベントを記憶する記憶領域を前記第1の記憶装置に確保できない場合、前記第1の記憶装置に確保されている記憶領域のうち所定の領域サイズより大きい領域サイズを有する記憶領域を前記解放領域として特定する
ことを特徴とする請求項2記載のスケジューリング装置。 - 前記スケジューリング部は、前記入力イベントを記憶する記憶領域を前記第1の記憶装置に確保できない場合、前記第1の記憶装置に確保されている記憶領域のうち所定の領域サイズより大きい領域サイズを有する記憶領域であって前記入力イベントの入力時刻から所定時間後の時刻以降の開始判定時刻に対応する記憶領域を前記解放領域として特定することを特徴とする請求項3記載のスケジューリング装置。
- 前記スケジューリング部は、前記入力イベントを記憶する記憶領域を前記第1の記憶装置に確保できない場合、前記第1の記憶装置に確保されている記憶領域のうち前記入力イベントの入力時刻から所定時間後の時刻以降の開始判定時刻に対応する記憶領域を前記解放領域として特定する
ことを特徴とする請求項2記載のスケジューリング装置。 - 前記イベント処理部は、前記イベントレコードの開始予定時刻を含んだ開始許容時間帯であって所定の時間長を有する開始許容時間帯に前記イベントレコードの参照時刻が含まれる場合に前記イベントレコードの処理を開始し、前記開始許容時間帯に前記イベントレコードの参照時刻が含まれない場合に前記イベントレコードを前記イベント入力部に入力する
ことを特徴とする請求項1〜請求項5いずれかに記載のスケジューリング装置。 - 前記単位時間特定部は、前記単位時間を意味するvと、前記イベントレコードの入力時刻を意味するtと、前記イベントレコードの開始予定時刻を意味するsと、所定時間を意味するuと、定数を意味するkと、aとbとのうち大きい方の値を意味するMax(a,b)と、x以下の最大の整数を意味する[x]と、xの指数関数を意味するexp(x)と、xの自然対数を意味するlog(x)とを用いた式であり、
前記式は、v=Max(u,[k・exp([log(s−t)])/u]・u)である
ことを特徴とする請求項1〜請求項6いずれかに記載のスケジューリング装置。 - 前記スケジューリング装置は、さらに、
前記第1の記憶装置に確保されている記憶領域の数が所定数を超えている場合、前記第1の記憶装置に確保されている記憶領域のうち少なくともいずれかの記憶領域を解放領域として特定し、特定した解放領域に記憶されているイベントレコードを前記解放領域の開始判定時刻に対応付けて前記第2の記憶装置に記憶し、前記第1の記憶装置の解放領域を解放する記憶領域数制限部を備える
ことを特徴とする請求項2記載のスケジューリング装置。 - イベント入力部が、処理の開始予定時刻が定められたイベントレコードを入力し、
単位時間特定部が、前記イベント入力部がイベントレコードを入力した入力時刻から前記イベントレコードの開始予定時刻までの時間を開始待ち時間として算出し、算出した開始待ち時間が第一の時間未満の時間である場合に第一の単位時間を前記イベントレコードの開始予定時刻を変換するための単位時間として特定し、算出した開始待ち時間が前記第一の時間以上第二の時間未満の時間である場合に第二の単位時間を前記イベントレコードの開始予定時刻を変換するための単位時間として特定し、
開始判定時刻特定部が、前記単位時間特定部により特定された単位時間に基づいて前記イベントレコードの開始予定時刻を前記単位時間を単位とする時刻に変換し、変換して得られた時刻を開始判定時刻として特定し、
スケジューリング部が、前記開始判定時刻特定部により特定された開始判定時刻に基づいて前記開始判定時刻に対応付けた記憶領域を所定の記憶装置に確保し、確保した記憶領域に前記イベントレコードを記憶し、
イベント処理部が、前記開始判定時刻に前記開始判定時刻に対応する記憶領域に記憶されている前記イベントレコードを参照し、前記イベントレコードを参照した参照時刻と前記イベントレコードの開始予定時刻とに基づいて前記イベントレコードの処理を開始するか否かを判定し、前記イベントレコードの処理を開始すると判定した場合に前記イベントレコードの処理を開始し、前記イベントレコードの処理を開始しないと判定した場合に前記イベントレコードを前記イベント入力部に入力する
ことを特徴とするスケジューリング方法。 - 処理の開始予定時刻が定められたイベントレコードを入力するイベント入力処理と、
前記イベント入力処理がイベントレコードを入力した入力時刻から前記イベントレコードの開始予定時刻までの時間を開始待ち時間として算出し、算出した開始待ち時間が第一の時間未満の時間である場合に第一の単位時間を前記イベントレコードの開始予定時刻を変換するための単位時間として特定し、算出した開始待ち時間が前記第一の時間以上第二の時間未満の時間である場合に第二の単位時間を前記イベントレコードの開始予定時刻を変換するための単位時間として特定する単位時間特定処理と、
前記単位時間特定処理により特定された単位時間に基づいて前記イベントレコードの開始予定時刻を前記単位時間を単位とする時刻に変換し、変換して得られた時刻を開始判定時刻として特定する開始判定時刻特定処理と、
前記開始判定時刻特定処理により特定された開始判定時刻に基づいて前記開始判定時刻に対応付けた記憶領域を所定の記憶装置に確保し、確保した記憶領域に前記イベントレコードを記憶するスケジューリング処理と、
前記開始判定時刻に前記開始判定時刻に対応する記憶領域に記憶されている前記イベントレコードを参照し、前記イベントレコードを参照した参照時刻と前記イベントレコードの開始予定時刻とに基づいて前記イベントレコードの処理を開始するか否かを判定し、前記イベントレコードの処理を開始すると判定した場合に前記イベントレコードの処理を開始し、前記イベントレコードの処理を開始しないと判定した場合に前記イベントレコードを前記イベント入力処理に入力するイベント処理と
をコンピュータに実行させるためのスケジューリングプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010093412A JP5465067B2 (ja) | 2010-04-14 | 2010-04-14 | スケジューリング装置、スケジューリング方法およびスケジューリングプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010093412A JP5465067B2 (ja) | 2010-04-14 | 2010-04-14 | スケジューリング装置、スケジューリング方法およびスケジューリングプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011221962A JP2011221962A (ja) | 2011-11-04 |
JP5465067B2 true JP5465067B2 (ja) | 2014-04-09 |
Family
ID=45038845
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010093412A Expired - Fee Related JP5465067B2 (ja) | 2010-04-14 | 2010-04-14 | スケジューリング装置、スケジューリング方法およびスケジューリングプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5465067B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5791478B2 (ja) * | 2011-11-29 | 2015-10-07 | 三菱電機株式会社 | 情報処理装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06282447A (ja) * | 1993-03-29 | 1994-10-07 | Mitsubishi Electric Corp | 待ち行列管理方式 |
EP1061463B1 (en) * | 1999-06-18 | 2007-07-25 | Synopsys, Inc. | Scheduling non-integral simulation time for mixed-signal simulation |
WO2002086736A1 (fr) * | 2001-04-19 | 2002-10-31 | International Business Machines Corporation | Serveur, systeme informatique, procede de gestion d'objet, procede de commande de serveur, programme informatique |
-
2010
- 2010-04-14 JP JP2010093412A patent/JP5465067B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2011221962A (ja) | 2011-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9244617B2 (en) | Scheduling requests in a solid state memory device | |
TW470912B (en) | A method and system for ordering priority commands on a commodity disk drive | |
US7305537B1 (en) | Method and system for I/O scheduler activations | |
KR100524763B1 (ko) | 개선된 edf 스케쥴링 방법 | |
JPH0635728A (ja) | 装置の割り当てのグローバルな最適化方法とシステム | |
JP6885193B2 (ja) | 並列処理装置、ジョブ管理方法、およびジョブ管理プログラム | |
US7681196B2 (en) | Providing optimal number of threads to applications performing multi-tasking using threads | |
JP2008140046A (ja) | 画像処理装置、画像処理プログラム | |
US20060047874A1 (en) | Resource management apparatus | |
US20200201763A1 (en) | Memory hierarchy-aware processing | |
CN112799606B (zh) | Io请求的调度方法及装置 | |
CN114615338A (zh) | 一种边缘环境中基于层共享的微服务部署方法及装置 | |
JP5521610B2 (ja) | 入出力制御装置、入出力制御方法 | |
JP2002202894A (ja) | 複数の処理システムのコンピューター資源の使用を見積もるシステムおよび方法 | |
JP5465067B2 (ja) | スケジューリング装置、スケジューリング方法およびスケジューリングプログラム | |
JP2003256067A (ja) | 省電力制御方式及び省電力制御方法及びプログラム及び記録媒体 | |
CN106537321B (zh) | 存取文件的方法、装置和存储系统 | |
JP2000148515A (ja) | メモリスケジューリング方法及びメモリスケジューリングプログラムを格納する記憶媒体 | |
JP2001125749A (ja) | 外部記憶装置ドライバプログラムを記録した記録媒体、及び外部記憶装置アクセス機能を有する計算機 | |
JP2016114967A (ja) | キャッシュ装置、キャッシュシステム、キャッシュ方法、及びキャッシュプログラム | |
CN111290856B (zh) | 数据处理装置和方法 | |
JP2009199367A (ja) | 計算機システム、i/oスケジューラ及びi/oスケジューリング方法 | |
WO2020031675A1 (ja) | スケジューリング装置、スケジューリングシステム、スケジューリング方法、プログラム及び非一時的コンピュータ可読媒体 | |
JP2924725B2 (ja) | バッファ割り当て制御システム | |
US7827556B2 (en) | Method for equitable resource sharing between local and network filesystems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20121119 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130930 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20131008 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131203 |
|
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: 20131224 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140121 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5465067 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |