(57)【要約】マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムにおいて、計算機間でのタスク同期ができるようにする。タスク同期処理は対象プログラムの改変なく挿入できるようにする。計算機は、同期用プロセッサと非同期用プロセッサを有し、タスクを実行するプロセッサと、各タスクについてＴＣＢを記憶するタスク管理テーブルと、同期タイムアウト管理テーブルと、切り替えポイント挿入処理部を備える。計算機のディスパッチャは、切り替えポイント挿入処理部により設定された切り替えポイントと同期タイムアウトに基づき、同期外れと誤ってみなされてしまう現象を検知する。ディスパッチャは他の計算機から取得したタスク管理テーブルに記憶されているＴＣＢに基づいて、切り替えタスクを決定し、プロセッサが実行するタスクを切り替えタスクに切り替える。
2012137238.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機で構成される計算機システムであって、
各計算機は、
前記複数の計算機間で処理の同期を要する同期タスクを実行する同期用プロセッサと、
前記複数の計算機間で処理の同期を要しない非同期タスクを実行する非同期用プロセッサと、
各プロセッサにおけるタスクの実行状況を管理するタスク管理テーブルと、
他の計算機から当該他の計算機における各プロセッサのタスクの実行状況を取得するタスク実行状況取得部と、
各プロセッサにタスクを割り当てるディスパッチャと、
プロセッサが実行するタスクを他のタスクに切り替えるタイミングを示すタスク切り替えポイントを有しており、
前記タスク切り替えポイントが検出された場合に、前記ディスパッチャは、前記同期用プロセッサが実行するタスクを他のタスクに切り替える場合には、前記同期用プロセッサにおけるタスク実行状況と前記タスク実行状況取得部が取得した他の計算機における同期用プロセッサのタスク実行状況とに基いて当該同期用プロセッサに実行させる当該他のタスクを選択し、
前記タスク切り替えポイントが検出された場合に、前記ディスパッチャは、前記非同期用プロセッサが実行するタスクを他のタスクに切り替える場合には、前記非同期用プロセッサにおけるタスク実行状況に基いて当該非同期用プロセッサに実行させる当該他のタスクを選択することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記タスク切り替えポイントが検出された場合にプロセッサによる実行を打ち切られるタスクには、同期タイムアウト値が設定され、当該タスクは前記タスク管理テーブルに実行可能タスクとして管理されることを特徴とする計算機システム。
【請求項３】
請求項２記載の計算機システムであって、
前記タスク実行状況取得部が取得するタスク実行状況には、前記同期プロセッサによって実行される各タスクが前記同期タイムアウト値に達しているか否かを示す情報が含まれることを特徴とする計算機システム。
【請求項４】
請求項３に記載の計算機システムであって、
前記同期用プロセッサが実行するタスクを他のタスクに切り替える場合には、前記ディスパッチャは、当該同期用プロセッサのタスク管理テーブルに実行可能タスクとして管理されており、前記他の計算機の同期用プロセッサのタスク管理テーブルでも実行可能タスクとして管理されているタスクを当該他のタスクとして選択することを特徴とする計算機システム。
【請求項５】
請求項４記載の計算機システムであって、
前記非同期用プロセッサが実行するタスクを他のタスクに切り替える場合には、前記ディスパッチャは、当該非同期用プロセッサのタスク管理テーブルに実行可能タスクとして管理されているタスクを当該他のタスクとして選択することを特徴とする計算機システム。
【請求項６】
請求項２に記載の計算機システムであって、
各計算機は、タスク切り替え処理を実行するためのコードをプログラムコードの前記タスク切り替えポイントに挿入するための挿入部を有しており、
前記挿入部は、前記同期タイムアウト値を前記タスク切り替え処理を実行するためのコードに設定することを特徴とする計算機システム。
【請求項７】
請求項１に記載の計算機システムであって、
各計算機は、時刻を取得するための時刻取得プログラムと、
他の計算機との間で時刻情報を交換して他の計算機と共通の時刻情報を返す同期時刻取得プログラムと、
前記時刻取得プログラムに替えて前記同期時刻取得プログラムをプロセッサに実行させるために当該同期時刻取得プログラムをプログラムコードに挿入するための挿入部とを有することを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
計算機、計算機制御方法、および計算機制御プログラムに関するものである。
【背景技術】
【０００２】
計算機システムのシステム稼働時間を長時間化するために、計算機を多重化する技術がある。例えばデュアルシステムを用いれば、１つのシステムにハードウェアの障害が生じた場合にも他のシステムによって処理を継続することが出来る。【０００３】
また、システム停止時間を最小化するために、フォールト・トレラントコンピュータ（Ｆａｕｌｔ  ｔｏｌｅｒａｎｔ  ｃｏｍｐｕｔｅｒ）がある。このフォールト・トレラントコンピュータでは、ハードウェアを多重化し、同一プログラムを複数のＣＰＵで動作させて、１つのＣＰＵの障害時にも他のCPUを用いて処理を継続実行する。例えば、本出願人は分散配置に適したフォールトトレラントシステムの構成を提案している（特許文献１参照）。【０００４】
こうした従来のデュアルシステムやフォールトトレラントコンピュータにおいては、その実現に際して、クロック同期（ロックステップ方式）を必要とする。そのため、専用ハードウェアに各計算機の通信インタフェースが直接接続される計算機構成が一般的であった。これは、複数の計算機が共通のタイミングで動作しないと、現実的にはこれらの計算機間で同期を取ることが困難だったからである。【０００５】
一方、近年ではネットワークの高速化、及び計算機の汎用化に伴い、専用ハードウェアではなく、一般的なネットワークを利用して複数計算機を接続する技術が発達してきた。また、計算機システムが処理する情報量の拡大に伴い、各処理ステップを複数のタスクとして分解し、マルチタスク実行可能なＯＳが複数のタスクを切り換えながら実行する技術もある。【０００６】
なお、情報処理装置の信頼性を向上させるための従来として、以下の技術が存在する。【０００７】
互いに独立して同一処理を実行する第１の装置および第２の装置を備える情報処理装置において、第１の装置においてステータスを取得するステータス取得手段と、このステータスに応じた共通のイベントを、第１の装置および第２の装置において発生させるイベント発生手段とを備える情報処理装置が提案されている（特許文献２参照）。【０００８】
互いに独立して同一処理を実行する第１の装置および第２の装置を備える情報処理装置において、第２の装置における処理により生成されたデータを、第２の装置から第１の装置に向けて送信する送信手段と、送信手段により送信されたデータと、第１の装置における処理により生成されたデータとを、第１の装置において照合し、両データが一致しない場合に異常と判定するデータ照合手段と、を備える情報処理装置も提案されている（特許文献３参照）。【０００９】
信頼性の高いクラスタシステムを提供するため、複数のクラスタを有し、各クラスタは複数のノードからなり、各ノードはアプリケーションプログラムの処理を分担して並列に実行しており、各クラスタの実行結果の中から、最も多くのクラスタが出力したの実行結果をアプリケーションプログラムの実行結果として採用する多数決手段を具備する高信頼性クラスタシステムも提案されている（特許文献４参照）。【００１０】
単一の実行プログラムをに、プログラムの修正をすることなくブレークポイントを埋め込み、プログラムを実行している計算機とは別の計算機に変数値を送信し、多数決をとる事でフォールトを検知するシステムも提案されている（特許文献５参照）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平８−３１４７４４号公報
【特許文献２】特開２００６−２０９５６５号公報
【特許文献３】特開２００６−２０９５２３号公報
【特許文献４】特開２００４−０４６３５６号公報
【特許文献５】特開２０００−８１９９６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
専用ハードウェアによって各計算機が接続されていた従来のフォールトトレラントコンピュータの構成では、同一アーキテクチャの各計算機において同一時刻に同一のプログラムを実行することは可能であった。だが一般的なネットワークを利用して複数計算機を接続する方式において、従来のマルチタスクが実行可能なＯＳは、タスクスケジュールの中で他の計算機の挙動を意識するように作られてはいない。したがって、従来技術では、例えば、プリエンプションが行われたタスク処理の進捗が計算機間で異なってしまう状況や、キャッシュにデータがヒットしたか否かにより、計算機によってシステムコール（例：ハードディスクドライブへのデータ読み取り指示等）が発行されたりされなかったりなどという、計算機間で処理状況の違いが生じるケースに対処することが出来ない。これにより、タスクの開始や終了のタイミングを各計算機間で合わせることができず、ひいては計算機間での同期は取れなくなってしまう。つまり従来技術を、一般的なネットワークに複数計算機を接続する方式に単に適用したとしても、フォールトトレラントコンピュータに求められる処理の同期に対する要求を満たせない。【００１３】
さらに近年、計算機システムの安全性の要求に対して、別の計算機アーキテクチャを採用する試みも行われている。この構成を用いると、専用ハードウェアによる同期は行えず、特定の論理的な処理のタイミングにて計算機が自身で同期を取りながら稼動する必要がある。同期処理がハードウェアの制限から開放されると、同期処理や同期対象アプリケーションを開発している最中に、将来採用される可能性のある機器の性能を適切に把握し、同期タイムアウトを設定することは出来なくなる。したがって納入先にインストールされ処理で使用される外部端末が接続されて始めて、適切にタイムアウトが設定されておらずフォールトの検出に時間がかかったり、同期が取れているにもかかわらず、みなしの同期外れが発生する可能性がある。【００１４】
そこで、マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムにおいて、計算機間でのタスク切り替えポイント、同期対象アプリケーションのメソッド変更、同期タイムアウト時間の設定等を、同期対象アプリケーションのプログラムの変更及びリコンパイルを行う事なく可能とする技術を提供する。
【課題を解決するための手段】
【００１５】
計算機システムは複数の計算機で構成され、
各計算機は、
複数の計算機間で処理の同期を要する同期タスクを実行する同期用プロセッサと、
複数の計算機間で処理の同期を要しない非同期タスクを実行する非同期用プロセッサと、
各プロセッサにおけるタスクの実行状況を管理するタスク管理テーブルと、
他の計算機から当該他の計算機における各プロセッサのタスクの実行状況を取得するタスク実行状況取得部と、
各プロセッサにタスクを割り当てるディスパッチャと、
プロセッサが実行するタスクを他のタスクに切り替えるタイミングを示すタスク切り替えポイントを有しており、
タスク切り替えポイントが検出された場合にディスパッチャは、同期用プロセッサが実行するタスクを他のタスクに切り替える場合には、同期用プロセッサにおけるタスク実行状況とタスク実行状況取得部が取得した他の計算機における同期用プロセッサのタスク実行状況とに基いて当該同期用プロセッサに実行させる他のタスクを選択し、
タスク切り替えポイントが検出された場合にディスパッチャは、非同期用プロセッサが実行するタスクを他のタスクに切り替える場合には、非同期用プロセッサにおけるタスク実行状況に基いて非同期用プロセッサに実行させる他のタスクを選択する。
【発明の効果】
【００１６】
マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムにおいて、計算機間でマルチタスク同期すること、およびインストール後に同期タイミングや同期タイムアウトをチューニングすることができる。
【図面の簡単な説明】
【００１７】
【図１】本実施形態の計算機システムの構成例を示す図である。
【図２】本実施形態のタスク管理テーブルの構成例を示す図である。
【図３】本実施形態のＴＣＢの一例を示す図である。
【図４】本実施形態の同期タスクおよび非同期タスクの分類を管理するテーブルの一例を示す図である。
【図５】本実施形態の同期タイムアウト管理テーブルの一例を示す図である。
【図６】同期計算機管理テーブルの一例を示す図である。
【図７】同期および非同期タスクの起動処理の一例を説明する図である。
【図８】一般的なプログラムの命令配置の一例を説明する図である。
【図９】本実施形態のタスクの同期タイムアウトを動的にプログラムへ挿入する処理の一例を説明する図である。
【図１０】本実施形態のタスク切り替えタイムアウトを動的にプログラムへ挿入する処理の一例を説明する図である。
【図１１】本実施形態の時刻取得プログラムを同期時刻取得プログラムにすり替える処理の一例を説明する図である。
【図１２】本実施形態の切り替えポイント挿入処理部による動的な各種挿入処理の一例を説明する図である。
【図１３】本実施形態における意図しないタスク切り替えが非同期実行用プロセッサ内で発生した場合の同期タスクのアン・ディスパッチ処理の一例を説明する図である。
【図１４】本実施形態における意図しないタスク切り替えが同期実行用プロセッサ内で発生した場合の同期タスクのアン・ディスパッチ処理の一例を説明する図である。
【図１５】本実施形態におけるタスク切り替えポイントが非同期実行用プロセッサ内で実行された場合の同期タスクのアン・ディスパッチ処理の一例を説明する図である。
【図１６】本実施形態におけるタスク切り替えポイントが同期実行用プロセッサ内で実行さされた場合の同期タスクのアン・ディスパッチ処理の一例を説明する図である。
【図１７】本実施形態におけるディスパッチの処理の一例を説明する図である。
【図１８】本実施形態におけるプログラムすり替え例を時刻取得プログラムを用いて説明した図である。
【発明を実施するための形態】
【００１８】
以下に実施形態について図面を用いて詳細に説明する。
【００１９】
図１は、本実施形態の計算機システム１０の構成図である。より信頼性の高い構成を取る場合は計算機システムに3台以上の計算機を使用するが、本実施例では多重構成の最小構成である２台の計算機を有するシステム構成を説明する。システムに3台以上の計算機が存在する場合であっても、本実施例は実施可能である。
【００２０】
計算機システム１０は、各々がマルチプロセッサ環境を有する（複数のプロセッサを有する）複数の計算機をネットワークで接続した計算機システムである。計算機間ではタスク同期を行い、計算機システム１０はフォールトトレラントコンピュータを構成している。
【００２１】
計算機システム１０は、ダイバーシティ性を向上させるためアーキテクチャの違う少なくとも２台の計算機１００と計算機２００がネットワーク５００および６００によって接続されて構成されている。計算機１００と計算機２００は別アーキテクチャにより構成されているため、タイマーや処理時間が計算機間で完全には一致していない。但し、機能的には計算機１００と計算機２００は同様の機能を提供しているため、以下では計算機の詳細な構造については計算機２００を用いて説明する。計算機１００も同様の機能構成を有している。
【００２２】
計算機２００は、２つのプロセッサ２８０（２８０−１および２８０−２）、タイマー２１１、２つの通信インタフェース２１２および２１３、ならびにメモリ２１０を備え、これらはバス２９０にて接続されている。
【００２３】
本実施形態では、プロセッサ２８０−１は、計算機１００のプロセッサ１８０−１との間でタスク同期を必要とするタスクを実行する同期用プロセッサとして用い、プロセッサ２８０−２は、計算機１００とは独立して動作するタスクを実行する非同期用プロセッサとして用いるものとする。
【００２４】
メモリ２１０は、２つのタスクプログラム１２０（１２０Ａおよび１２０Ｂ）、オペレーティングシステム１４０Ａ、ならびに、計算機１００との間でのタスク同期に必要な情報を送受するためのタスク制御用共有メモリ区画１３０Ａ、同期を取るべき情報を計算間で管理するための同期情報共有メモリ区画１６０Ａ、タスクの切り替えポイントや同期タイムアウト等を管理する同期タイムアウト管理テーブル１５０、同期外れの要因となる時刻取得処理を同期させるため同期時刻取得プログラム１７０Ａ等を有する。
【００２５】
なお、タスクプログラム１２０には、オペレーティングシステムを実現するために必要なシステムプログラムと、それ以外のユーザプログラムとを含む。
【００２６】
オペレーティングシステム１４０Ａは、複数のタスクを実行することのできるマルチタスク実行可能なオペレーティングシステムである。なお、オペレーティングシステム１４０Ａは、プロセッサ２８０がメモリ２１０に記憶されているシステムプログラムを実行することにより実現される。すなわち、オペレーティングシステム１４０Ａも、タスクが実行されることにより実現される。
【００２７】
オペレーティングシステム１４０Ａは、タスクプログラム１２０の実行に係る処理をタスクに分解し、各タスクをプロセッサ２８０−１または２８０−２に割り当てるディスパッチャ１４２Ａ、プロセッサ２８０−１および２８０−２に割り当てたタスクに関する情報（「タスク制御ブロック；Task Control Block」という。以下、「ＴＣＢ」と表記する。）を記憶する２つのタスク管理テーブル１４３（１４３Ａ−１および１４３Ａ−２）、同期計算機管理テーブル１４１Ａを備える。
【００２８】
タスク管理テーブル１４３Ａ−１は、プロセッサ２８０−１に割り当てられたタスクのＴＣＢを記憶し、タスク管理テーブル１４３Ａ−２は、プロセッサ２８０−２に割り当てられたタスクのＴＣＢを記憶する。
【００２９】
オペレーティングシステムは、時刻の取得やメモリの確保などハードウェアリソースを利用するための基本的な機能プログラムを提供している。しかし、これらのプログラムは他のハードウェアのハードウェアリソースを考慮していない。このような基本的な機能提供プログラムの例として、本実施形態では時刻取得プログラム１４４Ａを例示する。
【００３０】
オペレーティングシステムはさらに切り替えポイント挿入処理部１４５Ａを有する。切り替えポイント挿入処理部１４５Ａは、プログラムに動的にタスク切り替えポイントを挿入する。また切り替えポイント挿入処理部１４５Ａは、同期タイムアウトを動的にプログラムに挿入したり、同期外れの要因を作る時刻取得プログラム１４４Ａ等のプログラムを別のプログラム（例えば同期時刻取得プログラム１７０A）にすりかえたりもする。
【００３１】
オペレーティングシステム１４０Ａは、計算機２００内のリソースを複数のタスクに割り当てるために、プリエンプションを行う。プリエンプションとは、実行中のタスクを一時的に打ち切り、他のタスクにリソースを使用させることである。後述するように、各タスクには優先度が設定可能となっており、オペレーティングシステム１４０Ａは、優先度に応じて、タスクの実行順序を決定する。実行優先度の高いタスクが存在する場合は、実行優先度が低いタスクはプリエンプションにより実行権限を一時的に打ち切られる。オペレーティングシステム１４０Ａは、タスクごとに定められる所定の時間タスクを実行した場合にも、そのタスクの実行を打ち切る。
【００３２】
プリエンプションは、タスクプログラムの中に明記されている場合もあるが、オペレーティングシステムの中の処理の延長上でタスク切り替えが明記されており発生することもある。マルチタスクをサポートするオペレーティングシステムではロックの競合も考慮する必要があるので、どこでプリエンプションが発生するかを予想することは困難である。
【００３３】
同期非同期タスク定義テーブル３１０Ａ及び、同期タイムアウト管理テーブル１５０Ａは、計算機２００の起動前は記録媒体３００に格納されており、起動後メモリ上に展開される。
【００３４】
図２は、タスク管理テーブル１４３の構成例を示す図である。計算機２００で実行されるタスクは、生成されてから消滅するまでの間、実行中の状態、実行可能であるがまだ実行されていない状態（実行可能状態）、条件成就や入力などを待機している状態（待機状態）の３つの状態の間を遷移する。タスク管理テーブル１４３には、実行可能状態であるタスクに係るＴＣＢ１４３−４が格納される実行可能タスクキュー１４３−５、待機状態であるタスクに係るＴＣＢ１４３−４が格納される待機状態タスクキュー１４３−６、および実行中のタスクのＴＣＢ１４３−４を格納する実行中タスク１４３−７が含まれる。一般的には実行可能タスクキュー１４３−５には、優先度ごとに異なるキューが備えられていても良い。タスクがディスパッチャ１４２によってタスク管理テーブル１４３−１またはタスク管理テーブル１４３−２にディスパッチされることにより、当該タスクがディスパッチされたタスク管理テーブルに対応するプロセッサによって実行されるようになっている。
【００３５】
ＴＣＢ１４３−４には、ポインタ１４３−４eが含まれる。実行中タスクキュー１４３−７、実行可能タスクキュー１４３−５および待機状態タスクキュー１４３−６は、キューの先頭のＴＣＢ１４３−４を示すポインタを含み、実行可能タスクキュー１４３−５および待機状態タスクキュー１４３−６に格納されている各ＴＣＢ１４３−４には、キューにおける次のＴＣＢ１４３−４を示すポインタ１４３−４eが格納される。キューの最後尾のＴＣＢ１４３−４のポインタ１４３−４eにはｎｕｌｌが設定される。
【００３６】
図３は、ＴＣＢ１４３−４の構成例を示している。ＴＣＢ１４３−４には、タスクＩＤ１４３−４a、プログラムカウンタ１４３−４b、汎用レジスタ１４３−４c、制御レジスタ１４３−４d、割り込み可否１４３−４f、プリエンプトタイプ１４３−４g、同期タスクか非同期タスクかの識別子が入るタスクの種類１４３−４h、当該タスクが同期タスクである場合に当該タスクを実行すべきプロセッサの識別子が格納された同期実行時プロセッサ識別子１４３−４i、当該タスクが同期タスクであって当該タスクを非同期時実行する場合または当該タスクが非同期タスクである場合に当該タスクを実行すべきプロセッサの識別子が格納された非同期実行時プロセッサ識別子１４３−４j、タスクが同期を取るときにタイムアウトとして使用されるタスク同期タイムアウト１４３−４kが含まれる。
【００３７】
図４には、同期タスクと非同期タスクを区別する同期タスク非同期タスク定義テーブル３１０Ａが図示されている。同期タスク非同期タスク定義テーブル３１０Aは、タスク名欄３１０−１とタスクＩＤ欄３１０−２、同期プロセッサ、非同期プロセッサ、もしくは同期プロセッサ・非同期プロセッサ双方のいずれで処理するかを示すタスクの種類欄３１０−３、タスクを実行する同期用プロセッサを示す同期プロセッサ欄３１０−４、タスクを実行する非同期プロセッサを示す非同期プロセッサ欄３１０−５を有する。
【００３８】
図５は、同期タイムアウト管理テーブルの一例である。同期タイムアウト管理テーブル１５０には、同期を取るタスク名欄１５０−１、タスクＩＤ欄１５０−２、プローブハンドラ欄１５０−４、プローブハンドラ欄に示されるプログラムを実行するポイントとなる挿入ポイント欄１５０−３、みなし同期外れを発生させないためのチューニングタイムアウトを格納する同期タイムアウト欄１５０−５を有している。プローブハンドラの挿入ポイント１５０−３としては、仮想アドレスや、関数、プログラムシンボルなど挿入ポイントを一意に定めることができる値が格納されている。プローブハンドラ１５０−４としては、タスク切り替えプログラムや、同期タイムアウト１５０−５の値に示す時間同期を監視するプログラム、同期外れの要因となるプログラムに変えて実行されるプログラムのアドレスやドライバなどを指定することができる。
【００３９】
図６は、同期計算機管理テーブル１４１Ａの一例である。同期計算機管理テーブルは計算機システム１０の同期タスク用プロセッサについて、その同期状態を管理するテーブルである。図６では計算機システム１０が２台の計算機で構成される場合を示しているが、台数が増える場合は行が増える。
【００４０】
同期計算機管理テーブル１４１Ａは、同期用プロセッサを識別するための計算機の名前およびプロセッサ識別子を格納する同期計算機欄１４１Ａ−１と、同期状態を格納する同期状態欄１４１Ａ−２、タスク切り替えポイントにタスクが到達した時のタイムスタンプカウンタ値を格納するタイムスタンプカウンタ欄１４１Ａ−３と、タスク切り替えポイントを迎えたタスクＩＤを格納するタスクＩＤ欄１４１Ａ−４と、タスク切り替えポイントのアドレスを格納する現在到達した挿入ポイント１４１Ａ−５と、を有する。
【００４１】
タイムスタンプカウンタは、同一のタスク切り替えポイントにタスクが繰り返し到達する場合に、その到達の新旧を識別するために使用する。タイムスタンプカウンタの値としては、ディスパッチよりも細かい精度で進捗を管理するタイマーの値を活用することもできる。同期状態は、全ての計算機が同期しているときを同期、いずれかの計算機が同期タイムアウトに間に合わなかった場合を監視、いずれかの計算機が同期タイムアウトを迎えたが送れてタスク切り替えポイントに到達した場合をみなし同期外れ、いずれかの計算機が同期タイムアウト以内に異なるタスク切り替えポイントに到達してしまった場合を同期外れ、いずれかの計算機がシステム性能要件を満たさない時刻のまま監視状態となった場合は同期外れ状態とする。
【００４２】
図７は、同期タスク・非同期タスク、またはメモリ回収タスクのように必要に応じて同期タスクとしても非同期タスクとしても起動されるタスクの起動プロセスを説明する図である。
【００４３】
ディスパッチャ１４２Ａは記録媒体３００内の同期タスク非同期タスク管理テーブルよ３１０り、起動を指定されたタスクを選出する（Ｓ１００）。ディスパッチャ１４２は指定されたタスクのタスク名の行からタスクの種類３１０−３を参照し、該当タスクの種類が同期か、非同期か、または同期,非同期両方かを判定する。
【００４４】
同期タスクと判断された場合はS106へ進む。同期タスク非同期タスク定義テーブル３１０の同期用プロセッサ３１０−４に示されるプロセッサでメモリ確保など当該タスクの起動処理を実行する（Ｓ１０６）。さらにディスパッチャは該当タスク用ＴＣＢを生成し、ＴＣＢ内のタスクの種類１４３−４hに同期タスク非同期タスク定義テーブルのタスクの種類３１０−３の情報を書き込み、ＴＣＢ内の同期実行時プロセッサ識別子１４３−４iに同期タスク非同期タスク定義テーブルの同期プロセッサ３１０−４の情報を書き込み、ＴＣＢ内の非同期実行時プロセッサ識別子１４３−４ｊに同期タスク非同期タスク定義テーブルの非同期プロセッサ３１０−５の情報を書き込む（Ｓ１０７）。ディスパッチャ１４２は当該タスクのＴＣＢ１４３−４を１４３−４iにて示されるプロセッサのタスク管理テーブル１４３Ａ−１へ登録する。即ち当該タスクの状態に応じて実行可能タスクキュー１４３−５または待機状態タスクキュー１４３−６のいずれかへ登録する（Ｓ１０９）。
【００４５】
S101で非同期タスクと判断された場合にはS102へ進む。同期タスク非同期タスク定義テーブル３１０の非同期用プロセッサ３１５−５に示されるプロセッサでメモリ確保など当該タスクの起動処理を実行する（Ｓ１０２）。さらにディスパッチャは、ＴＣＢ内のタスクの種類１４３−４hに同期タスク非同期タスク定義テーブルのタスクの種類３１０−３の情報を書き込み、ＴＣＢ内の同期実行時プロセッサ識別子１４３−４iに同期タスク非同期タスク定義テーブルの同期プロセッサ３１０−４の情報を書き込み、ＴＣＢ内の非同期実行時プロセッサ識別子１４３−４ｊに同期タスク非同期タスク定義テーブルの非同期プロセッサ３１０−５の情報を書き込む（Ｓ１０５）。ディスパッチャ１４２Ａは当該タスクのＴＣＢ１４３−４を１４３−４jにて示されるプロセッサのタスク管理テーブル１４３Ａ−２へ登録する。即ち当該タスクの状態に応じて実行可能タスクキュー１４３−５または待機状態タスクキュー１４３−６のいずれかへ登録する（（Ｓ１０８）。
【００４６】
メモリ回収タスクプログラムのように、同期タスクや非同期タスクの処理の中で起動されるタスクの起動の場合、S101では同期、非同期タスクと判断される。この場合S103へ進みディスパッチャは該当タスクの起動を指示した親タスクの実行プロセッサ識別子が、同期タスク非同期タスク管理テーブルの同期プロセッサ３１０−４に含まれるか確認する（S103）。含まれる場合は同期タスクとしての起動ステップを踏むためS106へ進む。同期プロセッサ３１０−４に該当しない場合は該当タスクの起動を指示した親タスクの実行プロセッサ識別子が非同期プロセッサ３１０−５に含まれるか確認する（S104）。含まれる場合は非同期タスクとしての起動ステップを踏むためにS102へ進む。該当タスクの起動を指示した親タスクの実行プロセッサ識別子が、同期プロセッサ３１０−４にも非同期プロセッサ３１０−５にも含まれない場合は想定外の起動指示としてタスクの起動中止し起動を終了する。
【００４７】
図８には、一般的なタスクプログラムの命令列を示す。
【００４８】
ターゲットプログラムのソースコードあるいは実行可能コード（この場合は図８に示す命令列を構成する各命令）を直接変更する事無くターゲットプログラムの任意の場所の値を取得すること、またターゲットプログラムのソースコードの任意の場所から、別のプログラムへ処理を遷移させ、あたかもターゲットプログラム中のコードが処理した結果の様にターゲットプログラムへ返り値を返すための処理を以下に説明する。
【００４９】
図９には、タスクプログラムのうち、命令１と命令２の間でみなし同期はずれが発生しないように、命令１と命令２の間に同期コード１２６A−２が挿入され、この同期コード１２６A−２に同期タイムアウト管理テーブル１５０Ａより取得されたチューニングされた同期タイムアウトが設定されている場合を示す。
まず切替ポイント挿入処理部１４５は図８に示すタスクプログラム１２０Aの一部（命令２、命令３、命令４）をＪｕｍｐ命令で上書きする前に、上書きされてしまう命令２命令３命令４をメモリ２１０上の別の領域へ退避させる。そして切替ポイント挿入処理部１４５は、命令２がある位置に同期コード１２６Ａ−２に制御を飛ばすためのＪｕｍｐ命令を挿入して命令２、命令３、命令４をJump命令で上書きする。Ｊｕｍｐ命令を使用することにより、ブレーク命令を用いる場合に比べてオーバーヘッドを少なくすることができる。Ｊｕｍｐ命令の実行により同期コード１２６A-2へ処理が飛ぶと、同期タイムアウト管理テーブル１５０Aに設定された同期タイムアウト値に達するまでの間、複数計算機間で命令１の実行終了の同期をとるようプロセッサは動作する。したがって同期コード１２６Ａ−２の実行を契機に、マルチタスク環境において計算機間で同期を取ることができ、いずれかの計算機が他の計算機に先駆けて命令２を実行することを防止できる。即ちタスクプログラム１２０Aの途中で計算機間の同期をとることができる。
【００５０】
図１０は、タスクプログラム１２０Aの命令１と命令２の間にタスク切り替えコード１２６Ａ−４を挿入し、タスク切り替えを行う（プロセッサで実行中のタスクを別のタスクに切り替える）ための命令列を示している。ス命令１と命令２の間でみなし同期はずれが発生しないように、タスク切替コード１２６A-4には、同期タイムアウト管理テーブル１５０Ａより取得されたチューニングされた同期タイムアウトが設定されている。図９の場合と同様に、まず切替ポイント挿入処理部１４５はタスクプログラムの一部（命令２、命令３、命令４）をＪｕｍｐ命令で上書きする前に、上書きされてしまう命令２命令３命令４をメモリ２１０上の別の領域へ退避させる。そして切替ポイント挿入処理部１４５は、命令２の位置にタスク切り替えコード１２６−４に制御を飛ばすためのＪｕｍｐ命令を挿入して、命令２、命令３、命令４をJump命令で上書きする。Ｊｕｍｐ命令の他ブレーク命令を使用することもできる。Ｊｕｍｐ命令の実行によりタスク切替コード１２６A-4へ処理が飛ぶと、ディスパッチャはプロセッサで実行中のタスク処理を打ちきって、他のタスクを実行させる。この際、同期タイムアウト管理テーブル１５０Aに設定された同期タイムアウト値に達するまでの間、複数計算機間でタスクの切りかえ処理の同期をとるようディスパッチャは動作する。したがってタスクを他の計算機と同期して切り替えるタイミングを動的にタスクプログラムに挿入することが可能となる。同期タイムアウト管理テーブル１５０Ａのタイムアウト値を大きく設定しておくことで、タスク切り替えコード１２６Ａ−４の実行を契機に、計算機個別の性能差や、キャッシュのヒットの有無、メモリの回収の有無などにより生じたみなし同期はずれを吸収することもできる。また、マルチタスクを実現するＯＳで意図しない位置でのタスク切り替えが発生し、ディスパッチャ１４２が非同期プロセッサへ同期タスクのＴＣＢを移動させた場合においても、タスク切り替えコード１２６Ａ−４を利用することにより、同期プロセッサ用タスク管理テーブル１４３Ａ−１へ当該同期タスクのＴＣＢを移動させて当該同期タスクを再び同期用プロセッサで実行させる事ができる。
【００５１】
図１１は、ＯＳが基本的な機能として提供する時刻取得プログラム１４４を同期時刻取得プログラム１７０にすりかえる例を示している。時刻取得プログラム１４４を計算機システム１０を構成する各計算機が実行すると、各計算機が当該計算機の時刻取得プログラム１４４から取得する時刻の値が同じではないので、その後のプログラムの挙動が計算機間で変わってしまう事がある。図１１を用いて説明するのはこの問題を防ぐための処理である。すなわち時刻取得を行うプログラムやメソッドの開始位置にＪｕｍｐを埋め込み、時刻取得プログラム１４４Aに代えて複数計算機間で同期を取って現在時刻を返す同期時刻取得プログラム１７０Aが実行されるようプログラムのすり替えを行った場合の命令列を図１１は示している。
【００５２】
切替ポイント挿入処理部１４５は、時刻取得プログラム１４４の開始位置に、同期時刻取得プログラム１７０Aへ処理を飛ばすためのＪｕｍｐ命令１２６A-1を挿入する。Ｊｕｍｐ命令の実行により同期時刻取得プログラム１７０Aに処理が飛ぶと、プロセッサは同期時刻取得プログラム１７０Aを実行することにより、計算機間で同期がとれた時刻を取得することができる。この際、同期タイムアウト管理テーブル１５０Aに設定された同期タイムアウト値に達するまでの間、複数計算機間で時刻取得処理の同期をとるよう各計算機は動作する。したがって、時刻同期処理自体の同期をとることも可能となる。
【００５３】
尚、図９から図１１で説明した方法を実施する場合、Ｊｕｍｐ命令を挿入するために退避させた命令へ他のプログラムからの遷移が無いか調べ、そのようなプログラムが存在する場合には、遷移元のプログラムで指示されている遷移先のアドレスを変更する必要がある。
【００５４】
図１２は、切り替えポイント挿入処理部１４５Ａが図８に示すプログラム命令列にタスク切り替えコードを動的に挿入して、図１０に示すプログラム命令列を生成するための処理について説明する図である。
【００５５】
切り換えポイント挿入処理部１４５Ａは、同期タイムアウト管理テーブル１５０Ａより挿入ポイントである挿入ポイント１５０−３と同期タイムアウト１５０−５を取得する（Ｓ０６１）。次に、切り換えポイント挿入処理部１４５Ａは、オリジナルの命令列（図８に示す命令列）上で挿入ポイント１５０−３が示す位置に存在する命令を複製する。さらに切り換えポイント挿入処理部１４５Ａは、プローブハンドラ１５０−４が示す位置に、タスク切り替えコード１２６Ａ−４、複製した命令、命令１２５Ａへ遷移させるＪＵＭＰ命令１２６Ａ−３をこの順に並べる（Ｓ０６２）。そして切り換えポイント挿入処理部１４５Ａは、タスク切り替えコード１２６Ａ−４へのパラメータとして同期タイムアウト１５０−５を設定する（Ｓ０６３）。そして、切り換えポイント挿入処理部１４５Ａはタスク切り替えコード１２６Ａ−４へのＪｕｍｐ命令を挿入ポイント１５３−３に上書きする（Ｓ０６４）。
【００５６】
尚、図８に示すプログラム命令列に同期コードを挿入して図９に示すプログラム命令列を生成するための処理は、タスク切り替えコードに変わり同期コードが用いられることが違うのみで、他は図１２に示す処理と同様である。また図１１に示すように、時刻取得プログラム１４４Aを同期時刻取得プログラム１７０Aに挿げ替える処理は、図１２のS062において命令（ここでは時刻取得プログラム１４４）の複製を実行しないこと、プローブハンドラ１５０−４が示す位置に同期時刻取得プログラム１７０Aと命令１２５Ａへ遷移させるＪＵＭＰ命令１２６Ａ−３をなラベルことが異なるだけで、その他は図１２で説明した処理と同様である。  次にタスクの切り替えについて説明する。計算機１００及び２００がタスクをディスパッチする際に、同じタスクをディスパッチするように情報を交換することによりタスクの切り替えタイミングの同期をとることが可能である。
【００５７】
プロセッサ２８０−１は、プログラムカウンタ、汎用レジスタ、および制御レジスタ等を備えている。なお、プロセッサ２８０−２も同様の構成である。
【００５８】
タスクは、TCB143-4のタスクＩＤ１４３−４aの値により識別される。プログラムカウンタの値１４３−４bは、プロセッサ２８０−１のプログラムカウンタに設定される値である。汎用レジスタの値は１４３−４cは、プロセッサ２８０−１の汎用レジスタに設定される値である。制御レジスタの値１４３−４dは、プロセッサ２８０−１の制御レジスタに設定される値である。ディスパッチャ１４２Ａは、プロセッサ２８０−１において実行中のタスクの実行を打ち切って他のタスクに切り替える場合に、プログラムカウンタ、汎用レジスタ、および制御レジスタの内容をＴＣＢ１４３−４に設定して、タスクが実行可能状態である場合には実行可能タスクキュー１４３−５に追加し、タスクが待機状態である場合には、待機状態タスクキュー１４３−６に追加し、実行可能タスクキュー１４３−５から１つＴＣＢ１４３−４を読み出して、ＴＣＢ１４３−４のプログラムカウンタ１４３−４b、汎用レジスタ１４３−４c、および制御レジスタ１４３−４dの内容をプロセッサ２８０−１に設定することにより、タスクの切り替えを行う。
【００５９】
本実施形態では、ディスパッチャ１４２Ａが、プロセッサ２８０のカウンタやレジスタの内容をＴＣＢ１４３−４に設定して実行中のタスクを打ち切ることを「アン・ディスパッチ」といい、プロセッサ２８０に新たなタスクを実行させることを「ディスパッチ」ということとする。
【００６０】
タスク制御用共有メモリ区画１３０Ａ、及び同期情報共有メモリ区画１６０Ａは、各計算機１００および２００間で共有されるメモリである。タスク制御用共有メモリ区画１３０Ａ、及び同期情報共有メモリ区画１６０Ａは、タスクの同期処理を行う頻度よりも高い頻度でＯＳ１４０により計算機間で内容の同期が行われているものとする。後述するように、タスク制御用共有メモリ区画１３０Ａには、実行可能タスクキュー１４３−５に格納されているＴＣＢ１４３−４がコピーされる。これによりディスパッチャ１４２Ａは、各計算機１００における実行可能タスクキュー１４３−５に格納されているＴＣＢ１４３−４を交換することが可能になっている。
【００６１】
この他、計算機１００および２００はシグナル管理テーブルも有し、タスク間通信のためにシグナルが発生するごとに、発生したシグナルに関する情報をキューとしてシグナル管理テーブルに登録し、シグナル発生のタイミングがずれる事でタスクの同期が外れる事を防止する。
【００６２】
−−−意図しないタスク切り替えポイントでのアン・ディスパッチ−−−
図１３は、本実施形態における、マルチタスクサポートのオペレーティングシステムで発生する、意図しないタスクの切り替えに伴うタスクのアン・ディスパッチ処理を説明する図である。ここで「意図しないタスク切り替え」とは、図１２を用いて説明した処理により挿入されたタスク切り替えコード１２６A−４や同期コード１２６A-2、時刻取得プログラム１４４と取り替えられた同期時刻取得プログラム１７０の実行を契機とするタスク切り替え以外のタスク切り替えを意味する。図１２は特に、非同期用として使用するＣＰＵ２８０−２におけるアン・ディスパッチ処理を示している。
【００６３】
オペレーティングシステム１４０Ａ内タスク切り替え処理や、スケジュールシステムコールにより、ディスパッチャ１４２Ａへタスク１２０Ｂのアン・ディスパッチ指示が発行される（Ｓ００１）。ディスパッチャ１４２Ａは、非同期プロセッサタスク管理テーブルのアン・ディスパッチ処理に入り、非同期用プロセッサ（非同期ＣＰＵ）２８０−２の実行中タスク１２０Ｂの情報を回収する（Ｓ０１１）。そしてディスパッチャ１４２Ａは、非同期用プロセッサ２８０−２用のタスク管理テーブル１４３Ａ−２の実行可能キューの最後尾に回収したタスク１２０ＢのＴＣＢ１４３−４を登録する（Ｓ０１２）。  このようにして、非同期プロセッサ２８０−２における意図しないタスクのアン・ディスパッチが行われる。このアン・ディスパッチは一般的に行われるタスク切り替え時のアン・ディスパッチと同様である。
【００６４】
図１４は、意図しないタスクの切り替えに伴うアン・ディスパッチ処理が同期用プロセッサ２８０−１で発生する場合の処理を説明する図である。
【００６５】
オペレーティングシステム１４０Ａ内のタスク切り替え処理や、スケジュールシステムコールにより、ディスパッチャ１４２Ａへタスク１２０Ｂのアン・ディスパッチ指示が発行される（Ｓ００１）。ディスパッチャ１４２Ａは、同期プロセッサタスク管理テーブルのアン・ディスパッチ処理に入り、同期ＣＰＵ２８０−１上の実行中タスク１２０Ｂの情報を回収する（Ｓ０１３）。ディスパッチャ１４２Ａは同期用プロセッサ２８０−１用のタスク管理テーブル１４３Ａ−１からタスク１２０ＢのＴＣＢを削除する（Ｓ０１４）。さらにディスパッチャ１４２Ａは、同期用プロセッサ２８０−１用のタスク管理テーブル１４３Ａ−１から削除したタスク１２０ＢのＴＣＢにある非同期実行時プロセッサ識別子１４３−４jより、当該タスク１２０Ｂが実行される非同期用プロセッサ識別子を取得する（Ｓ０１５）。そしてこの識別子によって特定される非同期実行用プロセッサ２８０−２用のタスク管理テーブル１４３Ａ−２の実行可能キューの最後尾に、当該タスク１２０ＢのＴＣＢ１４３−４を登録する（Ｓ０１６）。このようにして、プロセッサ２８０−１における意図しないタスクのアン・ディスパッチが行われる。意図しないタスクの切り替えは、同期しながら稼動するＦＴＣシステムにおいては、同期外れの原因となる。したがって同期はずれをなるべく防止するために、上述のように、同期用プロセッサからアン・ディスパッチしたタスクを非同期用プロセッサのタスク管理テーブルへ登録する処理を追加している。
【００６６】
図１５は、タスク切り替えコード１２６Ａ−４の実行を契機としたアン・ディスパッチ処理を説明する図である。特に、非同期用として使用するＣＰＵ２８０−２における処理を以下に説明する。この状況は、意図しないタスクの切り替えにより、一時的に非同期用として使用するＣＰＵ２８０−２にて実行されていたタスクが、タスク切り替えコード１２６−Aに到達した場合等に発生する。
【００６７】
オペレーティングシステム１４０Ａは、タスク切り替えコード１２６Ａ−４の実行により、当該コードに設定された同期タイムアウト管理テーブル１５０Ａ−５のタイムアウト値を引数として受け取る（Ｓ００２）。オペレーティングシステム１４０Ａは、タイムアウト値１５０Ａ−５を引数としてディスパッチャ１４２Ａへタスク１２０Ｂのアン・ディスパッチを指示する（Ｓ００３）。
【００６８】
ディスパッチャ１４２Ａはタスク１２０Ｂを非同期プロセッサ用タスク管理テーブルからアン・ディスパッチする。まずディスパッチャ１４２Ａは、タイムアウト値１５０−５を受け取りアン・ディスパッチ対象のタスク１２０BのＴＣＢ１４３−４kに格納する（Ｓ０２０）。次にディスパッチャ１４２Aは非同期用プロセッサ（ＣＰＵ）２８０−２上の実行中タスク（即ちアンディスパッチ対象のタスク）１２０ＢのＴＣＢ１４３−４を回収する（Ｓ０２１）。そして当該タスク１２０ＢのＴＣＢ１４３−４で管理されている同期実行時プロセッサ識別子１４３−４iより、タスク１２０Ｂが実行される同期実行用プロセッサ識別子を取得する（Ｓ０２２）。そして当該識別子が示す同期用プロセッサ２８０−1用のタスク管理テーブル１４３Ａ−１の実行可能キューの最後尾に、回収した当該タスク１２０ＢのＴＣＢ１４３−４を登録する（Ｓ０２３）。
【００６９】
以上の処理により、意図しないタスク切り替えにより一時的に非同期で稼動したタスクが同期をとるために同期実行用プロセッサに戻ってくることができる。
【００７０】
図１６は、タスク切り替えコード１２６Ａ−４の実行を契機としたアン・ディスパッチ処理の他の一例を説明する図である。特に、同期用として使用するＣＰＵ２８０−１における処理を図１６を用いて説明する。
【００７１】
この状況は、意図しないタスクの切り替えが発生せずに、タスクが意図したタスク切り替えコードに到達した場合等に発生する。
【００７２】
オペレーティングシステム１４０Ａは、タスク切り替えコード１２６Ａ−４の実行により、当該コードに設定された同期タイムアウト管理テーブル１５０Ａ−５のタイムアウト値を引数として受け取る（Ｓ００２）。オペレーティングシステム１４０Ａは、タイムアウト値１５０Ａ−５を引数としてディスパッチャ１４２Ａへタスク１２０Ｂのアン・ディスパッチを指示する（Ｓ００３）。
【００７３】
ディスパッチャ１４２Ａはタスク１２０Ｂを同期プロセッサ用タスク管理テーブル上でアン・ディスパッチする。まず、ディスパッチャ１４２Ａは、タイムアウト値１５０−５を受け取りアン・ディスパッチ対象のタスク１２０BのＴＣＢ１４３−４kに格納する（Ｓ０２４）。さらにディスパッチャ１４２Ａは、同期ＣＰＵ２８０−１上の実行中タスク（即ちアンディスパッチ対象のタスク）１２０ＢのＴＣＢ１４３−４を回収する（Ｓ０２５）。そしてディスパッチャ１４２Ａは、同期実行用プロセッサ２８０−1用のタスク管理テーブル１４３Ａ−１の実行可能キューの最後尾に当該タスク１２０ＢのＴＣＢ１４３−４を登録する（Ｓ０２６）。
【００７４】
以上の処理により、実行中の同期タスクをアン・ディスパッチする。
−−−同期ディスパッチ−−−
図１７は、同期用のプロセッサ２８０Ａ−１に対し、タスク各々に設定されたタスク切り替えポイントにおける同期タイムアウトを加味したタイミングで、タスクを複数計算機に同期してディスパッチする処理を説明する図である。
【００７５】
本実施形態の特徴は、同期処理を終了して同期状態から実行可能状態へ遷移するポイントを、次の同期タイムアウトを設定して挿入するところにある。この同期タイムアウトを実行可能状態に登録された段階からカウントすることで、同期を管理すると共にリアルタイムタスクに対する最大実行遅延時間を管理することが出来る。
【００７６】
ディスパッチャ１４２Ａは、自計算機２００のタスク管理テーブル１４３Ａ−１で管理する実行可能タスクの情報を同期をとるべき他の計算機１００に通信インタフェース２１２および２１３を介して送信すると共に、同期をとる他の計算機１００から当該計算機１００のタスク管理テーブル１４３Ｂ−１で管理する実行可能タスクの情報を通信インタフェース２１２及び２１３を介して受信する（Ｓ０３０）。送受信したタスク管理テーブル１４３−５の情報はタスク制御用共有メモリ区画１３０Ａに格納する（Ｓ０３１）。ディスパッチャ１４２Ａは、同期計算機管理テーブル１４１Ａに示される同期状態の計算機全てで実行可能になっているタスクはあるかを、タスク制御用共有メモリ区画１３０Ａを参照して確認する（Ｓ０３２）。実行可能状態になっているタスクが存在する場合は（Ｓ０３２：ＹＥＳ）ＴＣＢ１４３−４kにより管理されている情報より、ディスパッチャ１４２Ａは当該タスクがタイムアウトを迎えているか確認する（Ｓ０３６）。タイムアウトを迎えていない場合は（Ｓ０３６：ＮＯ）、同期用プロセッサ２８０−１にタスク１２０Ｂをディスパッチする（即ち同期用プロセッサ２８０−１のタスク管理テーブル１４３A-1の実行中タスクキュー１４３−７に当該タスク１２０BのTCBを繋ぐ）（Ｓ０３８）。これにより、タスク切り替えポイントを迎えたタスクを、同期タイムアウト以内に複数計算機間で同期が取れた状態で同期用プロセッサにディスパッチされる。
【００７７】
一方、みなしの同期外れの場合、タイムアウトに間に合わないがタスクがタスク切り替えコードに到達する。この場合Ｓ０３６においてタスクはタイムアウトを迎えているので（Ｓ０３６：ＹＥＳ）、ディスパッチャ１４２Ａはみなしの同期外れ状態であることを検知する。この検知より、ディスパッチャ１４２Aはタイムアウト時間見直しの警告を出力し（Ｓ０３７）、その後、同期用プロセッサ２８０−１にタスク１２０Ｂをディスパッチする（Ｓ０３８）。これにより、タスク切り替えポイントを迎えたタスクが、複数計算機間で同期が取れた状態で同期用プロセッサにディスパッチされる。
【００７８】
次にフォールトトレラント性を確保するために、みなしの同期外れを本当の同期外れとして扱い、残りの計算機のみで処理を続ける処理方法について説明する。同期状態の計算機全てで実行可能になっているタスクがない場合（Ｓ０３２：ＮＯ）、ディスパッチャ１４２Aはタスクが実行可能となっていない計算機の全てでタイムアウトを迎えているタスクがあるかを確認する（S033）。このようなタスクが存在する場合（Ｓ０３３：ＹＥＳ）、ディスパッチャ１４２Ａはみなしの同期外れを本当の同期外れとして扱う。すなわちディスパッチャ１４２Ａは同期計算機管理テーブル１４１Ａへ同期が外れた計算機（すなわちタスクが実行可能となっていない計算機）を同期外れとして登録し、同期が外れた計算機を除外する（Ｓ０３５）。そしてタイムアウト時間の見直しの警告を出した後（Ｓ０３５）、Ｓ０３０の処理に戻る。尚、S０３３でタスクが実行可能となっていない計算機の全てでタイムアウトを迎えているタスクが見つからなかった場合（S033：No）も、S030に戻ってディスパッチャ１４２Aは処理を続ける。
【００７９】
上記の処理の他、同期状態は、同期タイムアウトに間に合わなかった場合を監視、同期タイムアウトを迎えたが送れてタスク切り替えポイントに到達した場合をみなし同期外れ、同期タイムアウト以内に異なるタスク切り替えポイントに到達してしまった場合を同期外れ、システム性能要件を満たさない時刻のまま監視状態となった場合は同期外れ状態へと遷移の種類を増やして管理することも可能である。
【００８０】
尚、非同期用プロセッサ２８０−２に対してタスクをディスパッチする場合には、ディスパッチャ１４２Aは非同期用プロセッサ２８０−２用のタスク管理テーブル１４３A-２を参照して実行可能タスクキュー１４３−５に登録されているタスクの中からタスクを選択して、これを実行中タスク１４３−７に登録する。ディスパッチャは例えば実行可能タスクキュー１４３−５の先頭に登録されているタスクを選択しても良いし、実行可能タスクキュー１４３−５に登録されているタスクのうち実行優先度が最も高いタスクを選択しても良い。  図１８は、図１１で説明したように、ＯＳが基本的な機能として提供する時刻取得プログラムに代えて、同期時刻取得プログラム１７０が実行される場合の処理について説明している。
【００８１】
同期時刻取得プログラム１７０が実行されると、同期時刻取得プログラム１７０はOSからタスクＩＤ情報、及び到達した挿入ポイント情報１５０-３、計算機の時刻を通信インタフェース２１２、及び２１３より受信する（Ｓ０５０）。そして同期時刻取得プログラム１７０はタスクＩＤ情報、及び到達した挿入ポイント情報１５０-３、計算機の時刻を他計算機に送信すると共に、同様の情報を他の計算機からも受信して、これを同期情報共有メモリ区画１６０Ａに格納する（Ｓ０５１）。
【００８２】
次に同時時刻取得プログラム１７０は、同期計算機管理テーブル１４１Ａに示される同期状態の計算機全てで時刻を交換したか確認する（Ｓ０５２）。時刻が全同期計算機分交換できていた場合は（Ｓ０５２：ＹＥＳ）ＴＣＢ１４３−４kにより管理されている情報より、同時時刻取得プログラム１７０はタイムアウトを迎えているか確認する（Ｓ０５６）。タイムアウトを迎えていない場合は（Ｓ０５６：ＮＯ）、同時時刻取得プログラム１７０は同期情報共有メモリ区画１６０Ａに格納した時刻の平均値（平均時刻）をOSへ返す（Ｓ０５８）。これにより、同期外れが発生する原因となる個々の計算機によりばらつく時刻情報のちを計算機間で揃えることが出来る。
【００８３】
一方、みなしの同期外れは、稀ではあるが処理サイクルの差により発生する。この場合みなしの同期外れ状態であることはＴＣＢ１４３−４kにより管理されている情報よりタイムアウトを迎えていることを検知することで確認できる（S056：YES）。この検知より、同期時刻取得プログラムはタイムアウト値見直しの警告を出力し（Ｓ０５７）、その後、平均時刻をOSへ返す（Ｓ０５８）。
【００８４】
次にフォールトトレラント性を確保するために、みなしの同期外れを本当の同期外れとして扱い、残りの計算機のみで処理を続ける処理方法について説明する。同時時刻取得プログラム１７０は同期状態の計算機全てで時刻を交換しておらず、（Ｓ０５２：ＮＯ）、かつ時刻情報の交換が済んでいない計算機の全てでタイムアウトを迎えているか確認し（Ｓ０５３）、タイムアウトを迎えていた場合（Ｓ０５３：ＹＥＳ）同時時刻取得プログラム１７０はみなしの同期外れを本当の同期外れとして扱う。すなわち同期計算機管理テーブル１４１Ａへ同期が外れた計算機（時刻情報の交換が済んでいない計算機）を同期外れとして登録し、同期が外れた計算機を以降の処理から除外する（Ｓ０５４）。そして、タイムアウト値の見直しの警告を出して（Ｓ０５５）、Ｓ０５０の処理に戻る。尚、S０５３で時刻情報の交換が済んでいない計算機の全てでタイムアウトを迎えていなかった場合（S０５３：No）、S０５０に戻ってディスパッチャ１４２Aは処理を続ける。
【００８５】
これまで示した計算機システム１０を構成する計算機１００、２００における各機能部、等はハードウェアとして実現してもよいし、各装置におけるメモリやＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの適宜な記憶部に格納したプログラムとして実現するとしてもよい。この場合、各装置のＣＰＵなど制御部がプログラム実行に合わせて記憶部より該当プログラムを読み出して、これを実行することとなる。
【００８６】
また、本実施形態の計算機２００は、２つのプロセッサ１８０Ａ−１および１８０Ａ−２を備えるものとしたが、３つ以上のプロセッサを備えるようにしてもよい。
【００８７】
また、計算機２００は、複数のコアを有する１つのプロセッサのみを備えるようにしてもよい。この場合、オペレーティングシステム１４０Ａは、各コアについてＴＣＢを管理し、タスクのディスパッチを行うものとする。
【００８８】
また、本実施形態では、実行可能タスクキュー１４３−５には優先度の高い順にＴＣＢ１４６が格納されているものとしたが、ＴＣＢ１４６に優先度を記憶するようにして、実行可能タスクキュー１４３−５には、キュー以外の形態で、順番を問わずにＴＣＢ１４６を管理するようにしてもよい。
【００８９】
以上、実施の形態について、その実施の形態に基づき具体的に説明したが、これに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【符号の説明】
【００９０】
１０  計算機システム
１００，２００  計算機
１１０、２１０  メモリ
１１１、２１１  タイマー
１１２、１１３  通信インタフェース
２１３、２１３  通信インタフェース
１２０Ａ、１２０Ｂ  タスクプログラム
１２１Ａ、１２２Ａ、１２３Ａ、１２４Ａ、１２５Ａ  処理命令、及びプログラム
１２６Ａ−１  Ｊｕｍｐ命令
１２６Ａ−２  同期コード
１２６Ａ−３  Ｊｕｍｐ命令
１２６Ａ−４  タスク切り替えコード
１３０Ａ、１３０Ｂ  タスク制御用共有メモリ区画
１４０Ａ、１４０Ｂ  オペレーティングシステム
１４１Ａ、１４１Ｂ  同期計算機管理テーブル
１４１Ａ−１  同期計算機
１４１Ａ−２  同期状態
１４１Ａ−３  タイムスタンプカウンタ
１４１Ａ−４  タスクＩＤ
１４１Ａ−５  現在到達した挿入ポイント
１４２Ａ、１４２Ｂ  ディスパッチャ
１４３Ａ−１、１４３Ａ−２、１４３Ｂ−１、１４３Ｂ−２  タスク管理テーブル
１４３−４  ＴＣＢ
１４３−４a  タスクＩＤ
１４３−４b  プログラムカウンタ
１４３−４c  汎用レジスタ
１４３−４d  制御レジスタ
１４３−４e  ポインタ
１４３−４f  割り込み可否
１４３−４g  プリエンプトタイム
１４３−４h  タスクの種類
１４３−４i  同期実行時プロセッサ識別子
１４３−４j  非同期実行時プロセッサ識別子
１４３−４k  タスク同期タイムアウト
１４３−５  実行可能タスクキュー
１４３−６  待機状態タスクキュー
１４３−７  実行中タスク
１４４Ａ、１４４Ｂ  時刻取得プログラム
１４５Ａ、１４５Ｂ  切り替えポイント挿入処理部
１５０Ａ、１５０Ｂ  同期タイムアウト管理テーブル
１５０−１  タスク名
１５０−２  タスクのＩＤ
１５０−３  挿入ポイント
１５０−４  プローブハンドラ
１５０−５  同期タイムアウト
１６０Ａ、１６０Ｂ  同期情報共有メモリ区画
１７０Ａ、１７０Ｂ  同期時刻取得プログラム
１８０−１、１８０−２，２８０−１，２８０−２  プロセッサ
１９０、２９０  バス
３００、４００  記録媒体
３１０Ａ、３１０Ｂ  同期タスク非同期タスク定義テーブル
３１０−１  タスク名
３１０−２  タスクのＩＤ
３１０−３  タスクの種類
３１０−４  同期プロセッサ
３１０−５  非同期用プロセッサ
５００、６００  通信経路
【図１】
2012137238.tif 000003
【図２】
2012137238.tif 000004
【図３】
2012137238.tif 000005
【図４】
2012137238.tif 000006
【図５】
2012137238.tif 000007
【図６】
2012137238.tif 000008
【図７】
2012137238.tif 000009
【図８】
2012137238.tif 000010
【図９】
2012137238.tif 000011
【図１０】
2012137238.tif 000012
【図１１】
2012137238.tif 000013
【図１２】
2012137238.tif 000014
【図１３】
2012137238.tif 000015
【図１４】
2012137238.tif 000016
【図１５】
2012137238.tif 000017
【図１６】
2012137238.tif 000018
【図１７】
2012137238.tif 000019
【図１８】
2012137238.tif 000020
【国際調査報告】
2012137238.tif 000021
2012137238.tif 000022
2012137238.tif 000023
2012137238.tif 000024