(57)【特許請求の範囲】
【請求項１】
データベースにおけるデータの、第１の高優先順位のトランザクションのストリームと第２の低優先順位のトランザクションのストリームの並列実行の完全性を保証するための方法であって、前記データベースがタスク、リソース、および、該タスクと該リソース間の割当て関係を含む方法において、
前記データベースの一部を記憶装置にコピーするステップと、
前記第１の高優先順位のトランザクションのストリームを前記データベースにおいて確立するステップと、
前記第２の低優先順位のトランザクションのストリームを前記記憶装置において確立するステップと、
前記第２の低優先順位のトランザクションのストリームを前記第１の高優先順位のトランザクションのストリームに対し調停して前記第１の高優先順位のトランザクションのストリームに前記第２の低優先順位のトランザクションのストリームより高いデータ優先順位を持たせ、かつ、前記データベースに所定の活性および安全制約を満足させるステップとを有し、
高いデータ優先順位を持たせかつ満足させる該ステップが、
前記コピーするステップの後で、前記データベースにおいて修正されているすべてのタスクおよびリソースを識別するステップと、
前記データベースにおいて修正されるリソースに割り当てられるタスクを、前記記憶装置において識別するステップと、
前記データベースにおいて修正されるタスクを、前記記憶装置において識別するステップと、
前記データベースにおいて修正されたと識別された、または修正されるリソースに割り当てられたと識別されたタスクについて、そのタスクに割り当てられたリソースを前記データベースにおいて割当て解除するステップと、
前記データベースにおいて修正されていないおよびリソースを必要としない、前記データベースにおけるタスクの一部に、前記データベースからの修正されていないリソースを割り当てるステップと、
前記データベースにおける前記割当て関係の互いに素の和集合を、前記データベースにおいて修正されたタスクおよびリソースと関連付けられる前記割当て関係と一緒に確立するステップと
を含むことを特徴とする方法。
【請求項２】
請求項１において、
前記一緒に確立するステップがさらに、
前記記憶装置において修正された前記割当て関係と、修正されていないタスクおよび修正されていないリソースに関連付けられる前記割当て関係を、前記データベースから削除するステップと、
前記記憶装置において修正された前記割当て関係と、修正されていないタスクおよび修正されていないリソースに関連付けられる前記割当て関係を、前記データベースにコピーするステップと
を含む方法。
【請求項３】
請求項１において、
前記記憶装置にコピーするステップが、
前記タスク、前記リソース、および、前記データベースの一部における前記割当て関係を、前記記憶装置にコピーするステップを含む方法。
【請求項４】
データベースにおけるデータの、第１の高優先順位のトランザクションのストリームと第２の低優先順位のトランザクションのストリームの並列実行の完全性を保証するためのシステムであって、前記データベースがタスク、リソース、および、該タスクと該リソース間の割当て関係を含むシステムにおいて、
記憶装置と、
前記データベースの一部を記憶装置にコピーする手段と、
前記第１の高優先順位のトランザクションのストリームを前記データベースにおいて確立する手段と、
前記第２の低優先順位のトランザクションのストリームを前記記憶装置において確立する手段と、
前記第２の低優先順位のトランザクションのストリームを前記第１の高優先順位のトランザクションのストリームに対し調停して前記第１の高優先順位のトランザクションのストリームに前記第２の低優先順位のトランザクションのストリームより高いデータ優先順位を持たせ、かつ、前記データベースに所定の活性および安全制約を満足させる手段とを有し、
高いデータ優先順位を持たせかつ満足させる該手段が、
前記データベースの一部を前記記憶装置にコピーしてから、前記データベースにおいて修正されているすべてのタスクおよびリソースを識別する手段と、
前記データベースにおいて修正されるリソースに割り当てられるタスクを、前記記憶装置において識別する手段と、
前記データベースにおいて修正されるタスクを、前記記憶装置において識別する手段と、
前記データベースにおいて修正されたと識別された、または修正されるリソースに割り当てられたと識別されたタスクについて、そのタスクに割り当てられたリソースを前記データベースにおいて割当て解除する手段と、
前記データベースにおいて修正されていないおよびリソースを必要としない、前記データベースにおけるタスクの一部に、前記データベースからの修正されていないリソースを割り当てる手段と、
前記データベースにおける前記割当て関係の互いに素の和集合を、前記データベースにおいて修正されたタスクおよびリソースと関連付けられる前記割当て関係と一緒に確立する手段と
を備えることを特徴とするシステム。
【請求項５】
データベースにおけるデータの、第１の高優先順位のトランザクションのストリームと第２の低優先順位のトランザクションのストリームの並列実行の完全性を保証するための方法であって、前記データベースがタスク、リソース、および、該タスクと該リソース間の割当て関係を含む方法において、
前記データベースの一部を記憶装置にコピーするステップと、
前記第１の高優先順位のトランザクションのストリームを前記データベースにおいて確立するステップと、
前記第２の低優先順位のトランザクションのストリームを前記記憶装置において確立するステップと、
前記第２の低優先順位のトランザクションのストリームを前記第１の高優先順位のトランザクションのストリームに対し調停して前記第１の高優先順位のトランザクションのストリームに前記第２の低優先順位のトランザクションのストリームより高いデータ優先順位を持たせ、かつ、前記データベースに所定の活性および安全制約を満足させるステップとを有し、
高いデータ優先順位を持たせかつ満足させる該ステップが、
前記コピーするステップの後で、前記データベースにおいて修正されているすべてのタスクおよびリソースを識別するステップと、
前記データベースにおいて修正されるリソースに割り当てられるタスクを、前記記憶装置において識別するステップと、
前記データベースにおいて修正されるタスクを、前記記憶装置において識別するステップと、
前記データベースにおいて修正されたと識別された、または修正されるリソースに割り当てられたと識別されたタスクについて、そのタスクに割り当てられたリソースを前記データベースにおいて割当て解除するステップと、
前記データベースにおいて修正されていないおよびリソースを必要としない、前記データベースにおけるタスクの一部に、前記データベースからの修正されていないリソースを割り当てるステップと、
前記データベースにおける前記割当て関係の互いに素の和集合を、前記データベースにおいて修正されたタスクおよびリソースと関連付けられる前記割当て関係と一緒に確立するステップと
を含むことを特徴とする方法を、コンピュータシステムに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
（発明の背景）
本発明は、一般に、データベースにおける並行トランザクションの管理に関し、より詳細には、スケジューリングデータベースにおいて、データベースの完全性を保証するような方法で、並行したトランザクションのストリームを調停（ｒｅｃｏｎｃｉｌｉｎｇ）するためのシステムおよび方法に関する。
【０００２】
データベースの基本的な目的は、トランザクションを実行することである。トランザクションは、データベースに対する読取り、書込み、更新、および／または削除などの動作のシーケンスからなる作業の単位である。データベースの状態の正しさ（ｃｏｒｒｅｃｔｎｅｓｓ）の測度は、データベースの完全性と呼ばれる。データベースの完全性とは、並行して実行中の２つ以上のトランザクションが、データベースにおいて誤った状態を生じるような方法で互いに干渉しないようにすることの問題を指す。アプリケーションプログラマは、データベースが正しい状態であるときに各トランザクションが開始するとすれば、各トランザクションが正しい状態を生じ、他のすべてのトランザクションから分離して実行するようにしなければならない。例えば、会計アプリケーションにおける各トランザクションは、資産を負債および総資産額と帳尻が合った状態にしておかなければならない。
【０００３】
トランザクション間の干渉は、多数の形式を取る可能性がある。干渉の１つの形式は「更新の紛失」問題であり、これが図１に例示される。図１に示すように、トランザクションＡがレコードＲにおけるフィールドＦの値を１だけインクリメントしようと試みる。トランザクションＡと並行して、トランザクションＢがフィールドＦの値に２をかけようと試みる。時間ｔ１において、フィールドＦは値４を有し、トランザクションＡがレコードＲを読み取る。時間ｔ２において、トランザクションＢがレコードＲを読み取る。時間ｔ３において、トランザクションＡは、トランザクションＡが時間ｔ１で読み取ったフィールドＦの値を１だけインクリメントし（すなわち、４プラス１）、結果として生じる値５でフィールドＦを更新する。時間ｔ４において、トランザクションＢは、トランザクションＢが時間ｔ２で読み取ったフィールドＦの値に２をかけ（すなわち、４かける２）、結果として生じる値８でフィールドＦを更新する。トランザクションＡによるレコードＲへの更新がこの例で失われるが、これは、トランザクションＢが時間ｔ４において、トランザクションＡが時間ｔ３でフィールドＦの値を変更したことを考慮せずにフィールドＦに上書きするからである。
【０００４】
更新の紛失の問題に対する１つの知られている解決策は、異なる実行優先順位を各トランザクションに割り当てることである。具体的には、より高い実行優先順位のプロセスＰ１が、低優先順位のプロセスＰ２がそのトランザクションを実行する前に、トランザクションを実行するために必要となる如何なる計算リソースをも制御する。結果として、２つのトランザクションは、それぞれ一度に実行されたものであるかのように、データベースに効果を与える。低優先順位のプロセスにおけるトランザクションは、高優先順位のプロセスにおけるトランザクションがその動作のシーケンスを完了するまで待機しなければならない。図１に示した例では、トランザクションＡを含むプロセスに高優先順位を、トランザクションＢを含むプロセスに低優先順位を割り当てることによって、トランザクションＢは、トランザクションＡがレコードＲを時間ｔ３において更新する後まで、レコードＲを読み取ることができない。トランザクションＢがレコードＲを読み取る時間までに、トランザクションＡによって行われた修正がレコードＲに反映され、したがって、更新の紛失の問題が回避される。
【０００５】
しかし、多数のトランザクションのストリームが並行してデータベースを修正しようと試みるとき、各ストリームがいくつかのトランザクションを含んでいる可能性がある場合、実行優先順位を各トランザクションに割り当てることは「データ優先順位」を保証しない。あるストリームにおける各トランザクションは、別のストリームにおけるトランザクションより高い実行優先順位を有する可能性があるにもかかわらず、２つのストリームにおけるトランザクションがなおインタリーブする可能性がある。すなわち、低い実行優先順位のトランザクションがなお、高い実行優先順位のトランザクションによって行われたデータベースにおける修正に上書きする可能性がある。したがって、高優先順位のストリームの修正が低優先順位のストリームの修正とコンフリクトするとき、データ優先順位を保証するためには、高優先順位のストリームの修正をデータベースにおいて確立し、低優先順位のストリームの修正をデータベースにおいて確立しないようにする。
【０００６】
したがって、従来技術のデータベースシステムでは、高優先順位のトランザクションのストリームが低優先順位のトランザクションのストリームより高いデータ優先順位を獲得するようにする唯一の方法は、各ストリームを単一のトランザクションに変換することである。これにより、高優先順位のストリームは低優先順位のストリームが実行を開始する前に完全に実行するようになり、高優先順位のストリームがその実行を完了するときにデータ優先順位が保持されるようになる。しかし、各ストリームが修正しようと試みるデータベースエントリが予め知られていない場合、各ストリームが他のストリームより高いデータ優先順位を保証するために、実行中にデータベース全体への排他的なアクセスを獲得しなければならない。さらに、ストリームが長い実行時間を有し、新しいトランザクションのストリームが経時的に発生する場合、各ストリームは完了するために過大な量の時間を待機しなければならなくなり、これによりデータベースにおいてブロック化およびデッドロックを引き起こす可能性がある。
【０００７】
したがって、データベースにおいて、第２のトラザクションのストリームと並行する第１のトランザクションのストリームの実行を調停（ｒｅｃｏｎｃｉｌｉｎｇ）して、第１のストリームが第２のストリームより高いデータ優先順位を有するようにし、したがって、各ストリームを単一のトランザクションに変換せずにデータベースの完全性を保証するための方法およびシステムを有することが望ましい。
【０００８】
（発明の説明）
本発明は、スケジューリングデータベースにおける、並行したトランザクションのストリームの実行を調停する（ｒｅｃｏｎｃｉｌｉｎｇ）ための方法およびシステムを含む。スケジューリングデータベースは、一般に、リソース、タスク、および関連付けられた割当て関係を含み、そのすべてが様々なタイミング規則、例えば、タスクを完了するための特定の時間ウィンドウによって制御される。スケジューリングデータベースは、２つの割当て関係のうち１つを含むことができる。すなわち、１）タスクを０または１つのリソースに割り当てることができる、あるいは、２）タスクを０、１つまたはいくつかのリソースに割り当てることができる。如何なるリソースにも割り当てられないタスクは、「割当て解除（ｕｎａｓｓｉｇｎｅｄ）」または「保留中（ｐｅｎｄｉｎｇ）」と呼ばれる。
【０００９】
本発明は、低優先順位のトランザクションのストリームと並行する高優先順位のトランザクションのストリームの実行を調停（ｒｅｃｏｎｃｉｌｉｎｇ）し、その両方がスケジューリングデータベースにおいてタスク、リソース、およびそれらの関連付けられた割当て関係を修正する方法およびシステムを含む。高優先順位のストリームによるデータベースへの修正は、以下で「ピング（ｐｉｎｇ）」と呼ばれる。したがって、割り当てられたタスクのリソースのリスト内で、あるリソースから別のリソースへ、あるいは異なる時間へタスクを割り当て直すことによって、高優先順位のストリームがタスクの割当てを修正する場合、タスクが「ピング」される。類似の方法で、高優先順位のストリームが新しいタスクをリソースに割り当て、１つまたは複数のタスクをリソースから割当て解除し、あるいはリソースに割り当てられたタスクを並べ替える場合、リソースが「ピング」される。
【００１０】
高優先順位のストリームは、例えば、ユーザによって（例えば、新しい順序または取り消しの結果として）開始されることが可能であり、低優先順位のストリームは、例えば、インテリジェントスケジューリングシステムによって開始されることが可能である。本発明の１つの目的は、高優先順位のストリームの修正と矛盾しないデータベースを維持し、一方で、低優先順位のストリームによって生成されたできるだけ多くの割当て関係を満たし、所望の安全および活性制約（ｌｉｖｅｎｅｓｓ  ｃｏｎｓｔｒａｉｎｔｓ）に従うことである。安全制約（ａ  ｓａｆｅｔｙ  ｃｏｎｓｔｒａｉｎｔ）は、スケジューリングデータベースが「望ましくない」状態の適切な定義について望ましくない状態に決して到達しないことを必要とする。活性制約は、スケジューリングデータベースが「所望の」状態の適切な定義について所望の状態についに到達することを必要とする。
【００１１】
本発明はさらに、スケジューリングデータベースにおいて、データベースにおける高優先順位のストリームを確立し、一時記憶装置における低優先順位のストリームを確立し、低優先順位のストリームを高優先順位のストリームと調停し、この時間の間にデータベースの一部へのさらなる修正が許可されず、高優先順位のストリームが低優先順位のストリームより高いデータ優先順位を有して結果として生じるデータベースが所望の安全および活性制約を満たすように、データベースにおいて低優先順位のトランザクションのストリームのいくつか、またはすべてを確立することによって、低優先順位のトランザクションのストリームと並行する高優先順位のトランザクションのストリームの実行を調停するための方法およびシステムを含む。低優先順位のストリームを高優先順位のストリームと調停すること（ｒｅｃｏｎｃｉｌｉｎｇ）は、一般に、低優先順位のストリームにおいて、高優先順位のストリームのものとコンフリクトするこれらの割当て関係を廃棄すること、データベースにおいてピングされないリソースに、一時記憶装置において割当て解除されるタスクおよびデータベースにおいてピングされないタスクのいくつかを割り当てること、および、一時記憶装置において結果として生じる割当て関係をデータベースにおいて確立することを意味する。
【００１２】
具体的には、低優先順位のストリームを高優先順位のストリームと調停することは、１）データベースにおける高優先順位のトランザクションのストリームの実行の前に、データベースにおいて保留中であったピングされたタスクを識別するステップ、２）データベースにおいてピングされたリソースに割り当てられるタスクを識別するステップ、３）データベースにおいて識別されたタスクに対応する、一時データベースにおけるタスク割当て解除するステップ、４）ピングされないリソースに、一時記憶装置において割当て解除されるタスクおよびデータベースにおいてピングされないタスクのいくつかを割り当てるステップ、および、５）データベースにおいて、結果として生じる一時記憶装置の割当て関係を確立するステップを含む。
【００１３】
本発明の方法およびシステムは、データ優先順位ならびに所望の安全および活性制約を保証し、したがって、並行したトランザクションのストリームを実行するときにデータベースの完全性を維持する。具体的には、本発明の方法およびシステムは、データベースにおいてピングされたエントリの知識（ｋｎｏｗｌｅｄｇｅ）、高優先順位のストリームの実行前のデータベースの状態、および低優先順位のストリームにおけるトランザクションのみに基づいて、低優先順位のトランザクションのストリームと並行する高優先順位のトランザクションのストリームの実行を調停する（ｒｅｃｏｎｃｉｌｅ）。したがって、データベースにおけるロッキング間隔の持続時間は、低優先順位のストリーム全体を実行する持続時間よりも調停ステップ（ｒｅｃｏｎｃｉｌｉａｔｉｏｎ  ｓｔｅｐ）の持続時間のみに低減される。さらに、データベースにおいて調停ステップ中にロックされなければならないエントリ数が低減され、これは、データベースにおいてピングされたエントリがロックされないためである。データベースにおいてロックされるエントリ数を低減することによって、データベースデッドロックおよびトランザクションロールバックの数が低減され、データベースの性能が向上する結果となる。
【００１４】
本発明の説明、および、本発明の最良の形態を実施するための以下の説明は、記載された本発明の範囲を制限するべきでない。両方が、他者が本発明を実施できるようにするための例および説明を提供する。添付の図面は、本発明の最良の形態を実施するための説明の一部を形成し、本発明のいくつかの実施形態を図示し、説明と共に、本発明の原理を説明する。
【００１５】
（発明を実施するための最良の形態）
次に、本発明のこの好ましい実施形態を詳細に参照し、その例が添付の図面に例示される。可能なところでは、図面中で同一参照番号が使用され、同一あるいは類似の部分を指す。
【００１６】
本発明は、スケジューリングデータベースにおいて、データベースにおいて高優先順位のストリームを実行し、一時記憶装置において低優先順位のストリームを実行し、低優先順位のストリームを高優先順位のストリームと調停して、この時間の間にデータベースの一部へのさらなる修正が許可されないようにすることによって、低優先順位のトランザクションのストリームと並行する高優先順位のトランザクションのストリームの実行を調停するための方法およびシステムを含む。スケジューリングサブシステムは、高優先順位のストリームが低優先順位のストリームより高いデータ優先順位を有して、結果として生じるデータベースが所望の安全および活性制約を満たすように、データベースにおける低優先順位のトランザクションのストリームのいくつか、またはすべてを実行することによって、低優先順位のストリームにおける割当て関係を高優先順位のストリームのそれらと調停する。
【００１７】
具体的には、スケジューリングサブシステムが、１）データベースにおける高優先順位のトランザクションのストリームの実行の前に、データベースにおいて割当て解除されるピングされたタスクを識別すること、２）データベースにおいてピングされたリソースに割り当てられるタスクを識別すること、３）データベースにおいて識別されたタスクに対応する、一時データベースにおけるタスクを割当て解除すること、４）ピングされないリソースに、一時記憶装置において割当て解除されるタスクおよびデータベースにおいてピングされないタスクのいくつかを割り当てること、および、５）データベースにおいて、結果として生じる一時記憶装置の割当て関係を確立することによって、低優先順位のストリームを高優先順位のストリームと調停する。割当て関係は、例えば、タスクの状態、そのタスクに割り当てられたリソース、およびタスクの推定開始時間を含むことができる。割当て関係の要素は、単一の構造または異なるテーブルにおける別々のエントリとして格納することができ、これは、割当て関係の特定の実施態様が本発明の実施に必須ではないからである。
【００１８】
調停ステップは、結果として生じるデータベースがタスクおよびリソース間の特定の割当て関係とは無関係に、以下の活性制約を満たすことを保証する。すなわち、タスクが時間ｔ１とｔ２の間で実行されなければならず、ピングされないリソースがタスクを実行する適性を有する場合、調停ステップの完了後、タスクが時間ｔ１とｔ２の間で実行されないときにリソースが時間ｔ１とｔ２の間でアイドル状態になるべきではない。
【００１９】
図２は、本発明の一実施形態による、Ｍ個のタスクをＮ個のリソースに割り当てるためのシステムのブロック図を例示する。図のように、スケジューリングシステム２００は、デスクトップコンピュータ２０１および２０２、モニタ２１０および２１１、およびプリンタ２１２と、それぞれ接続２０３、２０４、２１３、２１４、および２１５を介してインタフェースを取る。デスクトップコンピュータ２０１および２０２を介して、ユーザがタスク、リソース、および、タスクおよびリソースに関連付けられた割当て関係を作成し、修正することができ、次いでこれらがスケジューリングシステム２００に格納される。さらに、スケジューリングシステム２００は、自動的にタスクをリソースへ、リソースをタスクへ割り当て、必要があれば、ユーザによって入力された割当て関係を修正する。
【００２０】
本発明の一実施形態によれば、スケジューリングシステム２００は、リソース、タスク、および関連付けられた割当て関係を含み、そのすべてが様々なタイミング規則、例えば、タスクを完了するための特定の時間ウィンドウによって制御される。スケジューリングシステム２００は、タスクを０または１つのリソースに割り当てることができる、本発明の別の実施形態によれば、タスクを０、１つまたはいくつかのリソースに割り当てることができる。如何なるリソースにも割り当てられないタスクは、「割当て解除」または「保留中」と呼ばれる。
【００２１】
図３は、本発明の一実施形態によるスケジューリングシステム２００の構成要素を例示する。図のように、スケジューリングシステム２００は、プロセッサ３００、メモリ３１０、入力デバイス３２０、出力デバイス３３０、および補助記憶装置３４０を含み、そのすべてが高速バス３５０に接続される。メモリ３１０は、オペレーティングシステム３１２およびスケジューリングサブシステム３１４を含み、これらがデータ、および、プロセッサ３００が実行する１組の実行可能命令を含む。入力デバイス３２０は、標準の端末またはデスクトップコンピュータを含むことができる。出力デバイス３３０は端末とプリンタを含む。
【００２２】
補助記憶装置３４０は、ディスクドライブおよびテープドライブ、またはＣＤ読取り専用メモリ（ＲＯＭ）を含む。テープドライブまたはＣＤ  ＲＯＭからソフトウェアおよびデータをディスクドライブ上にロードすることができ、次いでこれらをメモリ３１０にコピーすることができる。類似の方法で、メモリ３１０におけるソフトウェアおよびデータをディスクドライブ上にコピーすることができ、次いでこれらをテープドライブまたはＣＤ  ＲＯＭ上にロードすることができる。
【００２３】
図４は、本発明の一実施形態によるスケジューリングサブシステム３１４のブロック図である。図のように、スケジューリングサブシステム３１４は、スケジューラ４００、ユーザアクセス４１０、レコンシレーション（ｒｅｃｏｎｃｉｌｉａｔｉｏｎ）４２０、およびデータベース管理システム（ＤＢＭＳ）４３０を含み、これがデータベース４４０を含む。ユーザアクセス４１０は、タスク、リソース、およびそれらの関連付けられた割当て関係を追加、修正、および削除するためのユーザインタフェースを提供し、それらのすべてがデータベース４４０に格納される。タスクおよびリソースがシステムに入力された後、スケジューラ４００は、入力されたタスクをリソースに、リソースを入力されたタスクに割り当て、必要があれば既存のタスクおよびリソースの割当て関係を修正する。レコンシレーション４２０はユーザアクセス４１０およびスケジューラ４００の並行した試みを制御して、データベース４４０におけるタスク、リソース、およびそれらの関連付けられた割当て関係にアクセスし、これらを修正する。
【００２４】
ＤＢＭＳ４３０は、スケジューラ４００、ユーザアクセス４１０、およびレコンシレーション４２０に、データベース４４０への読取りおよび書込みアクセスを提供する。ＤＢＭＳ４３０は、例えばＯｒａｃｌｅバージョン７．３など、商用データベース管理システムアプリケーションとすることができる。特定のタイプのデータベース管理システムは本発明の実施に必要ではなく、当業者に知られている他のデータベース管理システムを代わりに使用することができる。
【００２５】
データベース４４０は、タスク要求４４２およびタスクリスト４４３テーブルを含む。タスク要求４４２における各エントリは、一般に、タスクをその割り当てられたリソースにマッピングする。各エントリは、例えば、タスク識別子（ｔａｓｋ＿ｉｄ）、リソース識別子（ｒｅｓｏｕｒｃｅ＿ｉｄ）、状態、タスク完了予定日（ｓｃｈｅｄｕｌｅｄ＿ｄａｔｅ）、タスク開始推定時間（ｅｓｔｉｍａｔｅｄ＿ｓｔａｒｔ＿ｔｉｍｅ）、および、エントリが最後に修正および／または作成されたときのタイムスタンプを含む。タスク要求４４２のための一次キーはｔａｓｋ＿ｉｄを含むことができる。
【００２６】
タスク要求４４２のエントリにおける状況フィールドがタスクの状況を表し、これを、例えば「保留中」、「割当て済み（ａｓｓｓｉｎｇｅｄ）」、「ディスパッチ済み（ｄｉｓｐａｔｃｈｅｄ）」、または「完了（ｃｏｍｐｌｅｔｅｄ）」とすることができる。上で説明したように、「保留中」状態はタスクがリソースに割り当てられないことを示す。「割当て済み」状態は、タスクがリソースに割り当てられることを示す。「ディスパッチ済み」状態は、リソースがタスク上で動作開始したことを示す。「完了」状態は、タスクが完了されたことを示す。
【００２７】
タスクリスト４４３における各エントリは、各リソースの割り当てられたタスクに関する情報を提供する。エントリは、例えばリソース識別子（ｒｅｓｏｕｒｃｅ＿ｉｄ）、タスク識別子（ｔａｓｋ＿ｉｄ）、タスク完了予定日（ｓｃｈｅｄｕｌｅｄ＿ｄａｔｅ）、実際のタスク開始日、実際のタスク完了日、および、エントリが最後に修正および／または入力されたときのタイムスタンプを含む。タスクリスト４４３のための一次キーは、ｒｅｓｏｕｒｃｅ＿ｉｄおよびｓｃｈｅｄｕｌｅｄ＿ｄａｔｅを含むことができる。
【００２８】
図５は、本発明の一実施形態によるスケジューリングサブシステム３１４の状態図である。所与の時点において、スケジューリングサブシステム３１４の状態を、タスク、リソース、およびタスクからリソースへの割当て関係によって定義することができ、これらはデータベース４４０に格納される。この初期状態をＩＮＩＴＩＡＬ（状態５００）として示す。ＩＮＩＴＩＡＬ状態で、スケジューリングサブシステムにおける２つの独立したイベントが起こることができ、これらが、データベース４４０に格納されたタスク、リソース、およびタスクからリソースへの割当て関係の状態を修正する。まず、ユーザが新しいタスク、リソース、および割当て関係を入力し、および／または、既存のタスク、リソース、および割当て関係を修正することができ、この場合、ユーザアクセス４１０が高優先順位のトランザクションのストリームを生成してデータベース４４０を修正する（ステップ５０５）。ユーザアクセス４３０がデータベース４４０において高優先順位のトランザクションのストリームを実行した後、スケジューリングサブシステム３１４の新しい状態は、修正されたデータベース４４０における、新しい、および／または、修正されたタスク、リソース、および割当て関係によって定義される。この状態はＣＵＲＲＥＮＴ（状態５１０）として示される。
【００２９】
次に、ユーザアクセス４１０と並行して、スケジューラ４００がデータベース４４０における既存のタスク、リソース、および割当て関係を、データベース４４０における潜在的な実行のために低優先順位のトランザクションのストリームを生成することによって修正する。しかし、スケジューラ４００は、データベース４４０において低優先順位のトランザクションのストリームを直接実行しない。スケジューラ４００は、ＩＮＩＴＩＡＬ状態におけるデータベース４４０の一部のレプリカまたはコピーにおいて低優先順位のストリームを実行し、これがメモリ３１０に格納され、図４でｐｒｏｐｏｓｅｄ＿ｄｂ４２５として示される。データベース４４０のコピーされた部分は、タスク、関連付けられた割当て関係、およびリソースを含むことができ、これらは、例えば、割当てのための特定の日に使用可能である。別法として、コピーされた部分は、ＩＮＩＴＩＡＬ状態におけるデータベース４４０全体を含むことができる。
【００３０】
レコンシレーション４２０がｐｒｏｐｏｓｅｄ＿ｄｂ４２５において低優先順位のストリームを実行するとき（ステップ５０７）、スケジューリングサブシステム３１４の新しい状態は、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５に含まれている提案の（ｐｒｏｐｏｓｅｄ）タスク要求テーブル４２７および提案のタスクリストテーブル４２８における修正されたタスク、リソース、および割当て関係によって定義される。この状態は、ＰＲＯＰＯＳＥＤ（状態５２０）として示される。さらにスケジューラ４００は、「ディスパッチ済み」または「完了」の状態を有するタスクを修正しない。
【００３１】
以下で詳細に示すように、レコンシレーション４２０は、データベース４４０における並行する高優先順位のトランザクションを、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５における低優先順位のトランザクションと調停する。具体的には、レコンシレーション４２０がｐｒｏｐｏｓｅｄ＿ｄｂ４２５から、データベース４４０においてピングされたタスクおよび／またはピングされたリソースに関連付けられる割当て関係とコンフリクトする割当て関係を除去し、ピングされないリソースに、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５において割当て解除されるタスクおよびデータベース４４０においてピングされないタスクのいくつかを割り当てる（ステップ５２５）。ステップ５２５は、スケジューリングサブシステム３１４における新しい状態の結果となり、これが図５において状態ＰＲＯＰＯＳＥＤＭＩＮＵＳ（状態５３０）として示される。次いで、レコンシレーション４２０はデータベース４４０において、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５における残りの割当て関係を確立する（ステップ５３５）。ステップ５３５は、スケジューリングサブシステム３１４における別の新しい状態の結果となり、これが状態ＲＥＣＯＮＣＩＬＥＤとして示される（状態５４０）。スケジューリングサブシステム３１４が状態ＲＥＣＯＮＣＩＬＥＤに到達するとき、これはデータベース４４０において、低優先順位のトランザクションのいくつか、あるいはすべてを確立しており、これがデータベース４４０における割当て関係を修正し、修正がデータベース４４０における高優先順位のトランザクションと矛盾しないようにし、したがって、データベース４４０の完全性を保証する。
【００３２】
図６は、本発明の一実施形態による、データベース４４０において並行したトランザクションのストリームを調停するときに、スケジューリングサブシステム３１４が実行するステップのフローチャートである。スケジューラ４００がデータベース４４０（または、ユーザアクセス４１０を介して行われた仕様に基づいて識別されたような、少なくとも１つのデータベース４４０のサブセット）をｐｒｏｐｏｓｅｄ＿ｄｂ４２５にコピーし、コピーされたタスク、リソース、および割当て関係のそれぞれの最後の修正の時間（「ｐｒｏｐｏｓｅｄ＿ｓｔａｍｐ」と呼ばれる）を含む（ステップ６００）。別法として、スケジューラ４００は、コピーの日付および時間をｐｒｏｐｏｓｅｄ＿ｓｔａｍｐに格納することができる。ユーザアクセス４１０は、高優先順位のトランザクションのストリームを生成し実行して、データベース４４０において新しいタスク、リソース、および割当て関係を作成し、および／または、既存のタスク、リソース、および割当て関係を修正する（ステップ６１０）。ユーザアクセス４１０と並行して、スケジューラ４００が低優先順位のトランザクションのストリームを生成し実行して、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５において既存のタスク、リソース、および割当て関係を修正する（ステップ６２０）。
【００３３】
次いで、レコンシレーション４２０は、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５における低優先順位のトランザクションを、データベース４４０における高優先順位の修正と、以下のように調停する（ステップ６３０から６７０）。すなわち、レコンシレーション４２０は、例えば、第１のストアされたプロシージャを実行して、タスクリスト４４３においてｐｒｏｐｏｓｅｄ＿ｓｔａｍｐより大きいタイムスタンプを有するエントリを求めてデータベース４４０を照会することによって、データベース４４０においてピングされたリソースを識別する（ステップ６３０）。具体的には、第１のストアされたプロシージャがｐｒｏｐｏｓｅｄ＿ｓｔａｍｐをタスクリスト４４３への探索キーとして使用し、リードロック（ｒｅａｄ−ｌｏｃｋ）を使用してリソース、タスク、および割当て関係をロックし、ステップ６００においてスケジューラ４００がこれらをｐｒｏｐｏｓｅｄ＿ｄｂ４２５にコピーする。タスクリスト４４３におけるエントリがｐｒｏｐｏｓｅｄ＿ｓｔａｍｐより大きいタイムスタンプを有する場合、最後にスケジューラ４００がデータベース４４０をｐｒｏｐｏｓｅｄ＿ｄｂ４２５にコピーしたとき以来、そのエントリに関連付けられたリソースがピングされている。第１のストアされたプロシージャは、ピングされているリソースのサブセットを返す。別法として、第１のストアされたプロシージャがライトロックを使用して、タスクリスト４４３全体をロックすることができる。当業者に知られている他のロッキングまたは並行処理制御方法を代わりに使用することができ、これは、特定のロッキング機構は本発明の実施に必須でないからである。
【００３４】
次に、レコンシレーション４２０は、例えば第２のストアされたプロシージャを実行して、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５において保留中の状態を有するタスク、および、タスク要求４４２においてそれらの関連付けられたエントリがｐｒｏｐｏｓｅｄ＿ｓｔａｍｐより大きいタイムスタンプを有するタスクを求めて、データベース４４０を照会することによって、データベース４４０においてピングされたタスクを識別する（ステップ６４０）。具体的には、タスク要求４４２におけるエントリがｐｒｏｐｏｓｅｄ＿ｓｔａｍｐより大きいタイムスタンプを有する場合、最後にスケジューラ４００がデータベース４４０をｐｒｏｐｏｓｅｄ＿ｄｂ４２５にコピーしたとき以来、そのエントリに関連付けられたタスクがピングされている。別法として、第２のストアされたプロシージャがライトロックを使用して、タスク要求４４２全体をロックすることができる。当業者に知られている他のロッキング方法を代わりに使用することができ、これは、特定のロッキング機構は本発明の実施に必須でないからである。
【００３５】
レコンシレーション４２０は、例えば、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５においてそのタスクに関連付けられたエントリを削除することによって、データベース４４０においてピングされる、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５において割り当てられた各タスクを割当て解除する（ステップ６５０）。次いで、レコンシレーション４２０は、例えばｐｒｏｐｏｓｅｄ＿ｄｂ４２５から、そのタスクに関連付けられた割当て関係を除去することによって、データベース４４０においてピングされるリソースに割り当てられる、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５における各タスクを割当て解除する（ステップ６６０）。活性制約を満たすために、次いでレコンシレーション４２０はピングされないリソースに、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５において割当て解除されるタスク、および、データベースにおいてピングされないタスクのいくつかを割り当てる（ステップ６７０）。
【００３６】
最後に、レコンシレーション４２０は、ｐｒｏｐｏｓｅｄ＿ｄｂ４２５において、スケジューラ４００によって修正されたタスク、リソース、および割当て関係を識別し、ライトロックを使用してデータベース４４０において対応するエントリを修正する（ステップ６８０）。ＤＢＭＳ４３０がデータベース４４０において対応するエントリをうまく修正するとき、レコンシレーション４２０はデータベース４４０上でロックを解除する。
【００３７】
（調停（ＲＥＣＯＮＣＩＬＩＡＴＩＯＮ）の詳細）
上で説明したように、スケジューリングデータベースは、タスクとリソースの間の２つの割当て関係のうち１つを含むことができる。すなわち、１）タスクを０または１つのリソースに割り当てることができる、あるいは、２）タスクを０、１つまたはいくつかのリソースに割り当てることができる。本発明の一実施形態によれば、タスクとリソースの間の第１の割当て関係は各タスクｘを多くとも１つのリソースに割り当てることができる安全制約を満たさなければならず、リソースはａｌｌｏｗａｂｌｅ（ｘ）における複数の単集合のうちの１つでなければならず、ただし、単集合は単一のリソースを含む集合であり、ａｌｌｏｗａｂｌｅ（ｘ）は、タスクｘを実行するために必須の属性を有するリソースを表す。スケジューリングデータベースの最後の状態も、タスクおよびリソースの間の特定の割当て関係に関係なく、以下の活性制約を満たさなければならない。すなわち、タイミング規則が、ピングされないタスクｘが時間ｔ１とｔ２の間で行われることを可能にすると仮定すれば、リソースｙはタスクｘを実行することができ（すなわち、｛ｙ｝がａｌｌｏｗａｂｌｅ（ｘ）に属する）、ｙはピングされない。次いで、これは、リソースｙが時間ｔ１とｔ２の間でアイドル状態であり、タスクｘは、タスクｘのタイミング規則を満たす方法で完了されない場合であってはならない。
【００３８】
本発明の別の実施形態によれば、第２の割当て関係は各タスクｘを多くともａｌｌｏｗａｂｌｅ（ｘ）における１つの集合に割り当てることができる汎用安全制約を満たさなければならず、ただし、各集合は、共にタスクｘを実行するために必須の属性を有する複数のリソースを含むことができる。データベースの最後の状態も、以下の汎用活性制約を満たさなければならない。すなわち、タイミング規則がピングされないタスクｘが時間ｔ１とｔ２の間で行われることを可能にすると仮定すれば、リソースの集合ｙがタスクｘを実行することができ（すなわち、集合ｙはａｌｌｏｗａｂｌｅ（ｘ）に属する）、ｙにおけるすべてのリソースはピングされない。次いで、これは、ｙにおけるすべてのリソースが時間ｔ１とｔ２の間でアイドル状態であり、タスクｘは、タスクｘのタイミング規則を満たす方法で決して完了されない場合であってはならない。
【００３９】
具体的には、割当てを、ある時間にタスクをリソースに、あるいは、「保留中」と呼ばれる状態にマッピングする関数とすることができる。別法として、割当てを集合値関数にすることができ、ただし、タスクをいくつかのリソースに割り当てることができる。リソースにマッピングされない如何なるタスク（すなわち、リソースの非空集合にマッピングされない如何なるタスク）も「保留中」にマッピングされる。これは公式として、ＰＥＮＤＩＮＧ＝｛ｔａｓｋ  ｘ｜ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇ）と表すことができる。さらに、ピングされたタスクは、割当て関数が高優先順位のトランザクションのストリームによって変更されているものである。同様に、ピングされたリソースは、割当て関数が高優先順位のストリームによって修正されているリソースである。
【００４０】
スケジューリングデータベースは、本発明の一実施形態による５つの状態のうち１つを含むことができる。すなわち、１）ＩＮＩＴＩＡＬ状態は、データベースの元のアンロックされた状態を表し（データベースにおけるトランザクションの実行前）、２）ＣＵＲＲＥＮＴ状態は、高優先順位のトランザクションのストリームの実行からの結果であるデータベースの状態を表し（調停プロセス（ｒｅｃｏｎｃｉｌｉａｔｉｏｎ  ｐｒｏｃｅｓｓ）が開始するとき、これがデータベースの状態である）、３）ＰＲＯＰＯＳＥＤ状態は、ＩＮＩＴＩＡＬ状態における低優先順位のトランザクションのストリームの実行からの結果であるデータベースの状態を表し、４）ＰＲＯＰＯＳＥＤＭＩＮＵＳ状態は、ＣＵＲＲＥＮＴにおけるピングされたタスクおよび／またはピングされたリソースに関連付けられた割当て関係にコンフリクトする、ＰＲＯＰＯＳＥＤにおける割当て関係を除去することから、かつ、リソースに、ＰＲＯＰＯＳＥＤにおいて割り当て解除されるタスクおよびＣＵＲＲＥＮＴにおいてピングされないタスクのいくつかを割り当てることからの結果であるデータベースの状態を表し、５）ＲＥＣＯＮＣＩＬＥＤ状態は、ＰＲＯＰＯＳＥＤ状態とＣＵＲＲＥＮＴ状態の調停（ｒｅｃｏｎｃｉｌｉａｔｉｏｎ）からの結果であるデータベースの状態を表す。
【００４１】
Ｓが、上で識別された５つのデータベース状態のうち１つを表す場合、Ｓ：ｘはＳにおけるｘの値を表す。例えば、ｘがタスクである場合、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）はデータベース状態ＩＮＩＴＩＡＬにおけるａｓｓｉｇｎｅｄ（ｘ）の値である。換言するなら、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）はリソースであり、これには、データベース状態ＩＮＩＴＩＡＬにおいてタスクｘが割り当てられる（すなわち、一般にはリソースの集合）。さらに、次の表記法が以下で使用される。
【００４２】
ｐｉｎｇｅｄ［Ｘ］は、ピングされるＸの要素を表し、すなわち、｛ｘ ｉｎ Ｘ｜ｐｉｎｇｅｄ（ｘ）＝ｔｒｕｅ｝であり、
Ｔは、ＩＮＩＴＩＡＬにおけるリソースの集合を表し（すなわち、Ｔ＝ＩＮＩＴＩＡＬ：ｒｅｓｏｕｒｃｅｓ）、
Ｐは、ＩＮＩＴＩＡＬにおける保留中のタスクの集合を表し（すなわち、Ｐ＝ＩＮＩＴＩＡＬ：ＰＥＮＤＩＮＧ）、
ｎｅｗ＿ｔａｓｋｓは、ＩＮＩＴＩＡＬにおけるものでなくＣＵＲＲＥＮＴにおけるタスクであり、
ｄｉｓｃａｒｄｅｄ＿ｔａｓｋｓは、ＣＵＲＲＥＮＴにおけるものでなくＩＮＩＴＩＡＬにおけるタスクであり、
ｐｉｎｇｅｄ［Ｔ］は、ＩＮＩＴＩＡＬ中に存在するピングされるリソースの集合を表し、
ｐｉｎｇｅｄ［Ｐ］は、ＩＮＩＴＩＡＬにおいて存在する、ピングされるタスクの集合を表し、
ｐｉｎｇｅｄ［Ｐ］の要素は、ピングされたＰＥＮＤＩＮＧと呼ばれる。さらに、ピングされたＰＥＮＤＩＮＧタスクは、データベース状態ＣＵＲＲＥＮＴにおける状態「保留中」をなお有することができる。
【００４３】
高優先順位のストリームが実質的な遅延なしに実行できるようにするため、上述の安全および活性制約を条件として、どのタスクおよびリソースがピングされたかを知ることを越えて、ＣＵＲＲＥＮＴ状態の詳細へのアクセスを有することなく、低優先順位のストリームを高優先順位のストリームと調停することが望ましい。これは、以下の副命題のために達成することができる。すなわち、ＬｅａｖｅＡｌｏｎｅを、ＣＵＲＲＥＮＴ状態においてピングされたリソースに割り当てられたすべてのタスク（ＩＮＩＴＩＡＬおよび新規）と、ＣＵＲＲＥＮＴ状態において保留中であるすべてのピングされたタスクとの集合にさせる。略して、ｒｅｃｅｎｔ＿ｒｅｓｏｕｒｃｅを、ＩＮＩＴＩＡＬ以来システムに入ったリソースにさせる、すなわち、ｒｅｃｅｎｔ＿ｒｅｓｏｕｒｃｅ＝ＣＵＲＲＥＮＴ：ｒｅｓｏｕｒｃｅ−ＩＮＩＴＩＡＬ：ｒｅｓｏｕｒｃｅである。公式として、ＬｅａｖｅＡｌｏｎｅを以下のように表すことができる。
【００４４】
ＬｅａｖｅＡｌｏｎｅ＝｛ｘ ｉｎ ｔａｓｋ｜（（ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）はｒｅｃｅｎｔ＿ｒｅｓｏｕｒｃｅまたはｐｉｎｇｅｄ［Ｔ］にある）または（ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇであり、ｘはｐｉｎｇｅｄ［ｔａｓｋ］にある）または（ｘはｄｉｓｃａｒｄｅｄ＿ｔａｓｋｓにある））｝。
【００４５】
ａｓｓｉｇｎｅｄが集合値関数である場合、ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）は、ｒｅｃｅｎｔ＿ｒｅｓｏｕｒｃｅまたはｐｉｎｇｅｄ［Ｔ］と交わりなしではない状態（ｎｏｎ−ｎｕｌｌ  ｉｎｔｅｒｓｅｃｔｉｏｎ）でなければならない。調停（ｒｅｃｏｎｃｉｌｉａｔｉｏｎ）を実行中にＣＵＲＲＥＮＴ状態全体が読み取られる必要がないようにするため、ＬｅａｖｅＡｌｏｎｅＣｏｎｓｔｒｕｃｔｅｄを、ＩＮＩＴＩＡＬ状態においてピングされたリソースに割り当てられたすべてのタスクと一緒に、ＩＮＩＴＩＡＬ状態において保留中であったピングされたタスクの集合として定義することができることは確かである。ＬｅａｖｅＡｌｏｎｅＣｏｎｓｔｒｕｃｔｅｄは以下のように表すことができる。
【００４６】
ＬｅａｖｅＡｌｏｎｅＣｏｎｓｔｒｕｃｔｅｄ＝｛ｘ ｉｎ ｔａｓｋ｜（（ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］にある）または（ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇかつｐｉｎｇｅｄ（ｘ）＝ｔｒｕｅ）または（ｘはｎｅｗ＿ｔａｓｋｓにある））｝。
【００４７】
ａｓｓｉｇｎｅｄが集合値関数である場合、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄはｐｉｎｇｅｄ［Ｔ］と交わりなしではない状態でなければならない。
【００４８】
以下の副命題は、タスクが単一のリソースまたは「保留中」にマッピングされる割当て関数の場合について証明されるが、タスクをいくつかのリソースにマッピングすることができる場合にも適用される。以下の副命題、すなわち、ＬｅａｖｅＡｌｏｎｅＣｏｎｓｔｒｕｃｔｅｄ＝ＬｅａｖｅＡｌｏｎｅを考慮する。以下では、ＬｅａｖｅＡｌｏｎｅはＬｅａｖｅＡｌｏｎｅＣｏｎｓｔｒｕｃｔｅｄの部分集合であることを証明する。まず、ＣＵＲＲＥＮＴ状態においてピングされたリソースＹに割り当てられるタスクｘを考慮する。これは、以下のように表すことができる。すなわち、ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］またはｒｅｃｅｎｔ＿ｒｅｓｏｕｒｃｅにある。さらに、タスクｘを、以下の４つの方法のうち１つでＹに割り当てておくことができる。
【００４９】
ｉ）ｘがＩＮＩＴＩＡＬ状態においてＹに割り当てられていた（すなわち、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）＝Ｙ）、ｘがＩＮＩＴＩＡＬ状態においてピングされたリソースに割り当てられていた場合であり、したがって、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］にある。
ｉｉ）ｘがＩＮＩＴＩＡＬ状態において別のリソースＹ’に割り当てられていた（すなわち、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）＝Ｙ’）、次いでＣＵＲＲＥＮＴにおいてＹに割り当てられた。この場合、Ｙ’はピングされ、ｘはピングされたリソースのＩＮＩＴＩＡＬ状態にあるようになる。したがって、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］にある。これは、ＹがＩＮＩＴＩＡＬ状態におけるリソースでなかった場合にも当てはまる。
ｉｉｉ）ｘがＩＮＩＴＩＡＬにおいて保留中されていて、次いで、ＣＵＲＲＥＮＴにおいてＹへ移動された。次いで、ｘはピングされたＰＥＮＤＩＮＧにあるようになる（すなわち、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇ、かつｐｉｎｇｅｄ（ｘ）＝ｔｒｕｅ）。または
ｉｖ）ｘが新規であり、ＣＵＲＲＥＮＴにおいてＹへ移動された。したがって、ｘはｎｅｗ＿ｔａｓｋｓにある。
【００５０】
ＣＵＲＲＥＮＴ：ＰＥＮＤＩＮＧにおいてピングされたタスクｘは以下のように表すことができる。すなわち、ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇである。タスクｘは、ピングされる前の２つの状態のうちの１つであった可能性がある。すなわち、１）ｘが保留中であったか、あるいは２）ＩＮＩＴＩＡＬ状態においてリソースへ割り当てられていた。この部分集合関係は、以下の２つの理由によって当てはまる。
【００５１】
ｉ）ｘがＩＮＩＴＩＡＬ状態において保留中であった場合、ｘはピングされたＰＥＮＤＩＮＧであり、したがって、ｘはｐｉｎｇｅｄ［Ｐ］にある。これは、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇ、かつｐｉｎｇｅｄ（ｘ）＝ｔｒｕｅと表すことができる。または
ｉｉ）ｘがＩＮＩＴＩＡＬ状態において、あるリソースＹに割り当てられていた場合は、Ｙはピングされている（すなわち、ｘがｐｉｎｇｅｄ［Ｔ］にある）。これは、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］にあると表すことができる。
【００５２】
最後に、廃棄されたタスクｘの場合、２つの可能性がある。すなわち、ｉ）タスクｘがＩＮＩＴＩＡＬ状態において保留中されていた、次いでそれが廃棄されたときにピングされた（すなわち、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇ、かつｐｉｎｇｅｄ（ｘ）＝ｔｒｕｅ）、またはｉｉ）タスクｘがＩＮＩＴＩＡＬにおいてあるリソースＹに割り当てられていた、次いで除去されたとき、そのリソースはピングされる（すなわち、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］にある）。
【００５３】
以下では、ＬｅａｖｅＡｌｏｎｅＣｏｎｓｔｒｕｃｔｅｄはＬｅａｖｅＡｌｏｎｅの部分集合であることを証明する。ｘを、ＩＮＩＴＩＡＬ状態における、ピングされたリソースＴのためのタスクとし、これを公式として、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）がｐｉｎｇｅｄ［Ｔ］にあることを表すことができる。したがって、タスクｘは、以下の３つの状態のうちの１つとすることができる。
【００５４】
ｉ）ｘがなお同一か、あるいは異なるリソースに割り当てられる（すなわち、ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］にある）。
ｉｉ）ｘが保留中になったので、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）とｘ自体が共にピングされている（ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇであり、ｘがｐｉｎｇｅｄ［ｔａｓｋ］にある）。または
ｉｉｉ）ｘは廃棄されている（すなわち、ｘはｄｉｓｃａｒｄｅｄ＿ｔａｓｋｓにある）。
【００５５】
ｘがＩＮＩＴＩＡＬ状態において保留中であった、ピングされたタスクの場合（すなわち、ＩＮＩＴＩＡＬ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇ、かつｐｉｎｇｅｄ（ｘ）＝ｔｒｕｅ）、ＣＵＲＲＥＮＴ状態において、タスクｘは以下の３つの状態のうちの１つとすることができる。
【００５６】
ｉ）ｘがＣＵＲＲＥＮＴ：ＰＥＮＤＩＮＧにある場合、ｘがピングされて以来、ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇであり、ｘはｐｉｎｇｅｄ［ｔａｓｋ］にある。
ｉｉ）ｘがあるリソースＹのスケジュールへ移動されると、このときＹはピングされているので、ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）はｐｉｎｇｅｄ［Ｔ］またはｒｅｃｅｎｔ＿ｒｅｓｏｕｒｃｅにある。または
ｉｉｉ）ｘがｎｅｗ＿ｔａｓｋｓにあると、このときｘは保留中の状態において、あるいはタスクリスト上でピングされる（すなわち、（ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）がｐｉｎｇｅｄ［Ｔ］またはｒｅｃｅｎｔ＿ｒｅｓｏｕｒｃｅにある））または（ＣＵＲＲＥＮＴ：ａｓｓｉｇｎｅｄ（ｘ）＝ｐｅｎｄｉｎｇであり、ｘはｐｉｎｇｅｄ［ｔａｓｋ］にある））。
【００５７】
したがって、ＬｅａｖｅＡｌｏｎｅはタスクｘを含む。さらに、ＲＥＣＯＮＣＩＬＥＤは、ＣＵＲＲＥＮＴにおける集合ＬｅａｖｅＡｌｏｎｅにおけるすべてのタスクに関連付けられた割当て関係、およびＰＲＯＰＯＳＥＤＭＩＮＵＳにおける他のすべてのタスクの割当て関係を含む。すなわち、ＬｅａｖｅＡｌｏｎｅタスクに関連付けられた割当て関係は、ＰＲＯＰＯＳＥＤＭＩＮＵＳにおける割当て関係によって修正されない。
【００５８】
（調停（ＲＥＣＯＮＣＩＬＩＡＴＩＯＮ）ステップ）
調停方法は、１）ＣＵＲＲＥＮＴからｐｉｎｇｅｄ［Ｔ］およびｐｉｎｇｅｄ［Ｐ］を識別するステップ、および２）ｐｉｎｇｅｄ［Ｔ］、ｐｉｎｇｅｄ［Ｐ］、ＩＮＩＴＩＡＬ、およびＰＲＯＰＯＳＥＤの識別にのみ基づいてＲＥＣＯＮＣＩＬＥＤを達成するために、ＣＵＲＲＥＮＴへの必要な修正を決定するステップを含む。具体的には、調停のステップ（２）はさらに以下のステップを含む。
【００５９】
ａ）ＰＲＯＰＯＳＥＤから、ＬｅａｖｅＡｌｏｎｅＣｏｎｓｔｒｕｃｔｅｄにおけるｘについて、ｕｎａｓｓｉｇｎ（ｘ）を実行する（すなわち、タスクｘを保留中へ返す）。さらに、活性を達成するため、ｙが割当て解除されてＬｅａｖｅＡｌｏｎｅにない場合、タスクｙをＴｒｕｅＰｅｎｄｉｎｇＴａｓｋとする。次に、残りの使用可能なリソースが残りのＴｒｕｅＰｅｎｄｉｎｇＴａｓｋｓに不適当であるか、残りのＴｒｕｅＰｅｎｄｉｎｇＴａｓｋｓのためのタイミング要件を満たさなくなるまで、ピングされないリソースにＴｒｕｅＰｅｎｄｉｎｇＴａｓｋｓを割り当てる。一般に、タスクｙをピングされないリソースにおけるギャップの集まりへ挿入し、ここで、ｘはａｌｌｏｗａｂｌｅ（ｙ）に属する。これにより、データベース状態ＰＲＯＰＯＳＥＤＭＩＮＵＳの結果となる。
ｂ）ＲＥＣＯＮＣＩＬＥＤは、ＣＵＲＲＥＮＴ中でピングされたタスクとピングされたリソースに関連付けられた割当て関係の互いに素の和集合（ｄｉｓｊｏｉｎｔ  ｕｎｉｏｎ）から、ＰＲＯＰＯＳＥＤＭＩＮＵＳ中のタスクとリソースに関連付けられた割当て関係と一緒に達成される。
【００６０】
ＰＲＯＰＯＳＥＤおよびＣＵＲＲＥＮＴが個々に安全制約を満たす（それぞれ、低および高優先順位のストリームにおけるトランザクションによって保証される）と仮定すると、活性ステップａ）からの結果生じるデータベース状態は安全制約を満たす。これは、ＬｅａｖｅＡｌｏｎｅにおけるタスクに関連付けられた割当て関係がＣＵＲＲＥＮＴから取られ、他のすべてのタスクに関連付けられた割当て関係がＰＲＯＰＯＳＥＤから取られるからである。すなわち、ＰＲＯＰＯＳＥＤおよびＣＵＲＲＥＮＴはそれぞれ安全制約を満たすので、ＰＲＯＰＯＳＥＤＭＩＮＵＳおよびＣＵＲＲＥＮＴの互いに素の和集合も安全制約を満たす。
【００６１】
したがって、高優先順位のストリームは低優先順位のストリームよりも高いデータ優先順位を維持する。これは、ＣＵＲＲＥＮＴにおけるすべてのピングされたタスクおよびリソースがデータベースにあるからである。データベースは、調停の活性ステップａ）のため、活性制約を満たす。活性ステップにおいて割り当てられたタスクは集合ＬｅａｖｅＡｌｏｎｅになく、タスクの保留中状態から割当て済み状態への移行のため、活性ステップは安全性またはデータ優先順位に違反しないことに留意されたい。
【００６２】
ここに、本発明の好ましい実施形態および方法であると見なされるものが例示され、記載されたが、本発明の真の範囲から逸れることなく、様々な変更および修正を行うことができ、それらの要素の代わりに均等物を使用できることは、当業者には理解されよう。
【００６３】
加えて、本発明の中心の範囲から逸れることなく、特定の要素、技術または実施態様を本発明の教示に適合させるように、多数の修正を行うことができる。したがって、本発明は、本明細書に開示された特定の実施形態および方法に限定されず、本発明は、添付した特許請求の範囲の範囲内に含まれるすべての実施形態を含むことを意図するものである。
【図面の簡単な説明】
【図１】  従来技術のデータベースの、多数のトランザクションが並行してデータベースを修正しようと試みるときの状態を例示する図である。
【図２】  本発明の一実施形態による、Ｍ個のタスクをＮ個のリソースに割り当てるためのシステムのブロック図である。
【図３】  本発明の一実施形態によるスケジューリングシステムの構成要素を例示する図である。
【図４】  本発明の一実施形態によるスケジューリングサブシステムのブロック図である。
【図５】  本発明の一実施形態によるスケジューリングサブシステムの状態図である。
【図６】  本発明の一実施形態によるスケジューリングデータベースにおいて、並行したトランザクションのストリームの実行を調停するときに、スケジューリングサブシステムが実行するステップのフローチャートである。
【図１】
0003689336.tif 000002
【図２】
0003689336.tif 000003
【図３】
0003689336.tif 000004
【図４】
0003689336.tif 000005
【図５】
0003689336.tif 000006
【図６】
0003689336.tif 000007