(57)【要約】  マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムにおいて、計算機間でのタスク同期ができるようにする。計算機は、他の計算機と同期をとってタスクを処理する同期プロセッサと、他の計算機と同期をとらずにタスクを処理する非同期プロセッサと、同期プロセッサ及び当該非同期プロセッサにタスクを割り当てるディスパッチャを有しており、ディスパッチャは、タスクが他の計算機と同期をとって処理すべきタスクか否かを判断し、判断結果に基いて、他の計算機と同期をとりながら処理すべき同期タスクは同期プロセッサに、他の計算機との同期が不要な非同期タスクは非同期プロセッサに割り当てる。
2011105226.tif 000002
【特許請求の範囲】
【請求項１】
他の計算機と同じタスクを処理する計算機であって、
前記他の計算機と同期をとってタスクを処理する同期プロセッサと、
前記他の計算機と同期をとらずにタスクを処理する非同期プロセッサと、
当該同期プロセッサ及び当該非同期プロセッサにタスクを割り当てるディスパッチャを有しており、
前記ディスパッチャは、タスクが前記他の計算機と同期をとって処理すべきタスクか否かを判断し、当該判断結果に基づいて、前記他の計算機と同期をとりながら処理すべき同期タスクは前記同期プロセッサに、前記他の計算機との同期が不要な非同期タスクは前記非同期プロセッサに割り当てる計算機。
【請求項２】
請求項１記載の計算機であって、
更に、前記同期プロセッサに割り当てられたタスクの状態を管理する同期タスク管理テーブルと、前記非同期プロセッサに割り当てられたタスクの状態を管理する非同期タスク管理テーブルとを有しており、
前記計算機と前記他の計算機は前記同期タスク管理テーブルの内容を、タスク制御用共有メモリ区画を介して相互に通信して交換しており、
前記ディスパッチャは、前記計算機の前記同期タスク管理テーブルの内容と前記他の計算機の前記同期タスク管理テーブルの内容とに基づいて、前記計算機の前記同期タスク管理テーブルに登録されている複数の同期タスクの内の一を選択して前記同期プロセッサに実行させる計算機。
【請求項３】
請求項２記載の計算機であって、
前記ディスパッチャは、前記非同期タスク管理テーブルに登録されている複数の非同期タスクの内の一を選択して、前記非同期プロセッサに実行させる計算機。
【請求項４】
請求項３記載の計算機であって、
前記ディスパッチャは、前記同期プロセッサが実行している実行中同期タスクを、他のタスクに切り替える切替ポイントを検出した場合に、前記実行中同期タスクの状態を待機中に変更し、
前記計算機の前記同期タスク管理テーブルの内容と前記他の計算機の前記同期タスク管理テーブルの内容とに基づいて、前記計算機の前記同期タスク管理テーブルに実行可能タスクとして登録されている複数の同期タスクの内の一を選択して前記同期プロセッサに実行させる計算機。
【請求項５】
請求項４記載の計算機であって、
前記ディスパッチャは、当該計算機の前記同期タスク管理テーブルと、前記他の計算機の前記同期タスク管理テーブルの双方に、実行可能タスクとして登録されている同期タスクを選択して、前記同期プロセッサに実行させる計算機。
【請求項６】
請求項５記載の計算機であって、
前記ディスパッチャは、前記同期プロセッサが実行している実行中同期タスクを非同期プロセッサに割り当てる切替ポイントを検出した場合に、前記実行中同期タスクを前記同期タスク管理テーブルから削除して、前記非同期タスク管理テーブルに当該同期タスクを実行可能タスクとして登録する計算機。
【請求項７】
請求項６記載の計算機であって、
前記ディスパッチャは、前記同期プロセッサから前記非同期プロセッサへ割当を変更した前記同期タスクを再び前記同期プロセッサに割り当てる場合に、当該同期タスクを前記非同期タスク管理テーブルから削除して、前記同期タスク管理テーブルに実行可能タスクとして登録し、
前記他の計算機との間で前記同期タスク管理テーブルの内容を交換して、前記計算機の前記同期タスク管理テーブルの内容と前記他の計算機の前記同期タスク管理テーブルの内容とに基づいて、前記計算機の前記同期タスク管理テーブルに実行可能タスクとして登録されている複数の同期タスクの内の一を選択して前記同期プロセッサに実行させる計算機。
【請求項８】
請求項７記載の計算機であって、
前記切替ポイントは、前記実行中同期タスクが呼び出した、オペレーションシステムへのシステムコールである計算機。
【請求項９】
請求項７記載の計算機であって、
前記切替ポイントは、前記実行中同期タスクが呼び出した、他のタスクから値を取得、もしくは埋め込みをするための命令である計算機。
【請求項１０】
請求項７記載の計算機であって、
前記非同期タスク管理テーブルは、複数の同期タスクを当該非同期タスク管理テーブルに割り当てられる順番に管理しており、
前記ディスパッチャは、前記順番に基づいて前記非同期プロセッサに実行させる同期タスクを選択する計算機。
【請求項１１】
請求項７記載の計算機であって、
前記他の計算機から前記切替ポイントを検知した旨の通知を所定の時間内に受信しない場合に、当該他の計算機に同期が外れている旨の通知を送信する計算機。
【請求項１２】
請求項３記載の計算機であって、
前記同期プロセッサ又は前記非同期プロセッサのいずれにも実行され得るタスクについて前記ディスパッチャは、当該タスクの起動を指示した親タスクが割り当てられているプロセッサの種別に基づいて、当該親タスクが同期プロセッサに割り当てられている場合には当該タスクを同期プロセッサに、当該親タスクが非同期プロセッサに割り当てられている場合には非同期プロセッサに当該タスクを割り当てる計算機。
【請求項１３】
請求項１２記載の計算機であって、
更に記憶装置を有しており、
前記記憶装置は、前記同期プロセッサ又は前記非同期プロセッサのいずれにも実行され得るタスクについて、当該同期プロセッサおよび当該非同期プロセッサ各々について、当該タスクの実行契機を判断するために用いられる閾値を格納しており、
前記同期プロセッサ用の前記閾値は、前記非同期プロセッサ用の前記閾値とは異なる値に設定されている計算機。
【請求項１４】
請求項１３記載の計算機であって、
前記同期プロセッサ又は前記非同期プロセッサのいずれにも実行され得るタスクとは、当該計算機が有するメモリの回収タスクである計算機。
【請求項１５】
請求項１４記載の計算機であって、
前記メモリの回収タスクの実行契機を判断するために用いられる閾値は、メモリの空き容量についての閾値であり、前記同期プロセッサ用の閾値の方が前記非同期プロセッサ用の閾値より小さく設定されている計算機。
【請求項１６】
他の計算機と同じタスクを処理する計算機であって、
前記他の計算機と同期をとってタスクを処理する同期プロセッサと、
前記他の計算機と同期をとらずにタスクを処理する非同期プロセッサと、
当該同期プロセッサ及び当該非同期プロセッサにタスクを割り当てるディスパッチャを有しており、
前記ディスパッチャによって前記同期プロセッサ又は前記非同期プロセッサのいずれにも実行され得るタスクには、当該同期プロセッサおよび当該非同期プロセッサ各々について、当該タスクの実行契機を判断するために用いられる閾値が設定されており、
前記同期プロセッサ用の前記閾値は、前記非同期プロセッサ用の前記閾値とは異なる値に設定されており、
前記同期プロセッサは前記同期プロセッサ用の前記閾値に基づいて、前記タスクの実行契機を判断し、
前記非同期プロセッサは前記非同期プロセッサ用の前記閾値に基づいて、前記タスクの実行契機を判断する計算機。
【請求項１７】
請求項１６記載の計算機であって、
前記同期プロセッサ又は前記非同期プロセッサのいずれにも実行され得るタスクとは、当該計算機が有するメモリの回収タスクである計算機。
【請求項１８】
請求項１７記載の計算機であって、
前記メモリの回収タスクの実行契機を判断するために用いられる閾値は、メモリの空き容量についての閾値であり、前記同期プロセッサ用の閾値の方が前記非同期プロセッサ用の閾値より小さく設定されている計算機。
【請求項１９】
他の計算機と同じタスクを処理する計算機の制御方法であって、
前記計算機が、
前記他の計算機と同期をとってタスクを処理する同期プロセッサと、
前記他の計算機と同期をとらずにタスクを処理する非同期プロセッサと、
当該同期プロセッサ及び当該非同期プロセッサにタスクを割り当てるディスパッチャを有しており、
前記ディスパッチャは、タスクが前記他の計算機と同期をとって処理すべきタスクか否かを判断し、当該判断結果に基づいて、前記他の計算機と同期をとりながら処理すべき同期タスクは前記同期プロセッサに、前記他の計算機との同期が不要な非同期タスクは前記非同期プロセッサに割り当てる計算機制御方法。
【請求項２０】
他の計算機と同じタスクを処理する計算機であって、
前記他の計算機と同期をとってタスクを処理する同期プロセッサと、
前記他の計算機と同期をとらずにタスクを処理する非同期プロセッサと、
当該同期プロセッサ及び当該非同期プロセッサにタスクを割り当てるディスパッチャを有している計算機に、
前記ディスパッチャが、タスクが前記他の計算機と同期をとって処理すべきタスクか否かを判断し、当該判断結果に基づいて、前記他の計算機と同期をとりながら処理すべき同期タスクは前記同期プロセッサに、前記他の計算機との同期が不要な非同期タスクは前記非同期プロセッサに割り当てる処理を実行させる、計算機制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機、計算機制御方法、および計算機制御プログラムに関するものである。
【背景技術】
【０００２】
計算機システムにおけるシステム稼働時間を長時間化するために、計算機を多重化する技術が存在している。この技術は、例えばデュアルシステムなどにより、ハードウェアの障害に際してもシステム内の処理を継続することが出来るものである。【０００３】
また、システム停止時間を最小化するための計算機として、フォールト・トレラントコンピュータ（Ｆａｕｌｔ  ｔｏｌｅｒａｎｔ  ｃｏｍｐｕｔｅｒ）がある。このフォールト・トレラントコンピュータの技術は、ハードウェアを多重化し、同一プログラムを複数のＣＰＵで動作させて、ＣＰＵの障害時にも処理を継続可能とするものである。例えば、本出願人は分散配置に適したフォールトトレラントシステムの構成を提案している（特許文献１参照）。【０００４】
こうした従来のデュアルシステムやフォールトトレラントシステムにおいては、その実現に際して、クロック同期（ロックステップ方式）などを必要とする。そのため、専用ハードウェアに各計算機の通信インターフェースが直接接続されている計算機構成が一般的となっていた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−３１４７４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
これまで専用ハードウェアによって各計算機が接続されていた従来のフォールトトレラントシステムの構成では、各計算機において同一時刻に同一のプログラムを実行することは可能であった。
一方、近年ではネットワークの高速化、及び計算機の汎用化に伴い、専用ハードウェアではなく、一般的なネットワークを利用して複数計算機を接続する技術が発達するとともに、計算機システムが処理する情報量の拡大に伴い、各処理ステップを複数のタスクとして分解し、マルチタスク実行可能ＯＳが複数のタスクを切り換えながら実行するニーズがある。【０００７】
しかしながら、マルチタスクを実行可能なＯＳが搭載されたマルチプロセッサを有する計算機において、他の計算機と同期をとるべき同期タスクと、他の計算機との同期が必要ない非同期タスクとを、どのようにマルチプロセッサに実行させるかについては、考えられてこなかった。【０００８】
本発明は上記のような課題に鑑みてなされたものであり、マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムにおいて、計算機間でのタスク同期を必要とする同期タスクと、タスク同期を必要としない非同期タスクのプロセッサへの割当についての技術を提供する。
【課題を解決するための手段】
【０００９】
計算機は、他の計算機と同期をとってタスクを処理する同期プロセッサと、
他の計算機と同期をとらずにタスクを処理する非同期プロセッサと、同期プロセッサ及び非同期プロセッサにタスクを割り当てるディスパッチャとを有する。【００１０】
ディスパッチャは、タスクが他の計算機と同期をとって処理すべきタスクか否かを判断し、判断結果に基づいて、前記他の計算機と同期をとりながら処理すべき同期タスクは同期プロセッサに、他の計算機との同期が不要な非同期タスクは非同期プロセッサに割り当てる。【００１１】
その他本願が開示する課題やその解決方法については、発明の実施形態の欄及び図面により明らかにされる。
【発明の効果】
【００１２】
本発明によれば、マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムにおいて、計算機間でのタスク同期を実現することができる。
【図面の簡単な説明】
【００１３】
【図１】本実施形態の計算機システムの構成例を示す図である。
【図２】本実施形態の計算機の構成例を示す図である。
【図３】本実施形態のタスク管理テーブルの構成例を示す図である。
【図４】本実施形態の非同期用のプロセッサに対して行われるディスパッチを説明する図である。
【図５】本実施形態の非同期用のプロセッサに対して行われるアン・ディスパッチを説明する図である。
【図６】本実施形態の同期用のプロセッサに対するディスパッチを説明する図である。
【図７】同時に複数のタスクが実行可能になった場合のタスク選定処理を説明する図である。
【図８】本実施形態の同期用のプロセッサに対するアン・ディスパッチを説明する図である。
【図９】本実施形態の切替システムコールが呼び出された場合のアン・ディスパッチを説明する図である。
【図１０】本実施形態の切替システムコールが呼び出された場合のディスパッチを説明する図である。
【図１１】断片化したメモリに連続領域のメモリ領域を確保する処理を行うタスクの一例を示す図である。
【図１２】タスクを割り当てるプロセッサを切り替えて、断片化したメモリに連続領域のメモリ領域を確保する処理を行うタスクの一例を示す図である。
【図１３】本実施形態の同期用のプロセッサから非同期用のプロセッサにタスクを割り当てるプロセッサを変更する処理を説明する図である。
【図１４】本実施形態の非同期用のプロセッサから同期用のプロセッサにタスクを割り当てるプロセッサを変更する処理を説明する図である。
【図１５】本実施形態のタスクプログラムがタスクの同期または非同期を指示する場合の処理を説明する図である。
【図１６】本実施形態の計算機間で行うタスク管理テーブルの交換がタイムアウトした場合の処理を説明する図である。
【図１７】本実施形態のタイムアウトを起こした回数を考慮するタイムアウト処理を説明する図である。
【図１８】Ｖｏｔｅｒを含む計算機システムの構成例を示す図である。
【図１９】Ｖｏｔｅｒにおける多数決処理に参加する計算機を変更する処理を説明する図である。
【図２０】計算機における同期実行をおこなう計算機を変更する処理を説明する図である。
【図２１】ソフトウェアにエラーが生じた場合の処理を説明する図である。
【図２２】ハードウェアにエラーが生じた場合の処理を説明する図である。
【図２３】プロセス間通信の有無を含めてタスクプログラムの同期を行う処理を説明する図である。
【図２４】あいこ状態を考慮した多数決によるタスクの選定処理を説明する図である。
【図２５】本実施形態の非同期用のプロセッサにて同期タスクの実行をシリアライズするためのタスク管理テーブルの構成例を示す図である。
【図２６】本実施形態の非同期用のプロセッサにて同期タスクの実行をシリアライズするための処理を説明する図である。
【図２７】本実施形態の同期用のプロセッサから非同期用のプロセッサに同期タスクを割り当てる際のシリアライズ処理を説明する図である。
【図２８】本実施形態の非同期用のプロセッサから同期用のプロセッサに同期タスクを割り当てる際のシリアライズ完了処理を説明する図である。
【図２９】本実施形態のプロセッサ個別にメモリ回収を行うための構成例を示す図である。
【図３０】本実施形態のプロセッサ個別にメモリ回収を行う処理を示す図である。
【図３１】本実施形態のシステムにおける、同期タスクおよび非同期タスクの定義テーブルの配置を示す図である。
【図３２】本実施形態の同期タスクおよび非同期タスクの定義テーブルの内容を説明する図である。
【図３３】本実施形態のタスクを管理するＴＣＢの内容を説明する図である。
【図３４】本実施形態の同期用のプロセッサから非同期用のプロセッサに同期タスクを割り当てる際の処理を説明する図である。
【図３５】本実施形態の非同期用のプロセッサから同期用のプロセッサに同期タスクを割り当てる際の処理を説明する図である。
【図３６】本実施形態のタスク起動処理を説明する図である。
【発明を実施するための形態】
【実施例１】
【００１４】
−−−システム構成−−−
以下に実施形態について図面を用いて詳細に説明する。図１は、本実施形態の計算機システム１０の構成図である。図２は計算機１００Ａ内の構成を詳細に示す図である。【００１５】
計算機システム１０は、マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムであって、計算機間でのタスク同期を行い、フォールトトレラントシステムを構成するコンピュータシステムである。  
計算機システム１０は、少なくとも２台の計算機１００Ａと計算機１００Ｂがネットワーク４００および５００によって接続されている。計算機１００Ａと計算機１００Ｂは同一の構成を有しており、以下では、詳細な構造については計算機１００Ａについてのみ説明する。【００１６】
計算機１００Ａは、２つのプロセッサ１８０Ａ（１８０Ａ−１および１８０Ａ−２）、タイマー１７０Ａ、通信インターフェース１５０Ａおよび１６０Ａ、ならびにメモリ１１０Ａを備え、これらはバス１９０Ａにて接続されている。  
本実施形態では、プロセッサ１８０Ａ−１は、計算機１００Ｂとの間でタスクを同期するタスク同期用として用い、プロセッサ１８０Ａ−２は、計算機１００Ｂとは独立して動作するタスク非同期用として用いるものとする。なお、タスク非同期用のプロセッサ１８０Ａ−２の用途が一般的である。【００１７】
メモリ１１０Ａは、２つのタスクプログラム１２０（１２０Ａおよび１２０Ｂ）、オペレーティングシステム１４０Ａ、ならびに、計算機１００Ｂとの間でのタスク同期に必要な情報を送受するためのタスク制御用共有メモリ区画１３０Ａなどを備えている。なお、タスクプログラム１２０には、オペレーティングシステムを実現するために必要なシステムプログラムと、それ以外のユーザプログラムとを含む。本実施形態では、システムプログラムは不図示とし、ユーザプログラムのみをタスクプログラム１２０として図示することとする。【００１８】
オペレーティングシステム１４０Ａは、複数のタスクを実行することのできるマルチタスク実行可能なオペレーティングシステムである。なお、オペレーティングシステム１４０Ａは、プロセッサ１８０Ａがメモリ１１０Ａに記憶されているシステムプログラムを実行することにより実現される。すなわち、オペレーティングシステム１４０Ａも、タスクが実行されることにより実現される。オペレーティングシステム１４０Ａは、タスクプログラム１２０の実行に係る処理をタスクに分解し、各タスクをプロセッサ１８０Ａ−１または１８０Ａ−２に割り当てるディスパッチャ１４１Ａ、タスク同期を行うためにタスク間メッセージを考慮したタスク同期を行うためのシグナル管理テーブル１１２Ａ・タスク間メッセージ管理テーブル１４３Ａ、プロセッサ１８０Ａ−１および１８０Ａ−２に割り当てたタスクに関する情報（「タスク制御ブロック；Task Control Block」という。以下、「ＴＣＢ」と表記する。）を記憶する２つのタスク管理テーブル１４３（１４３Ａ−１および１４３Ａ−２）、同期計算機管理テーブル１１１Ａを備える。タスク管理テーブル１４３Ａ−１は、プロセッサ１８０Ａ−１に割り当てられたタスクのＴＣＢを記憶し、タスク管理テーブル１４３Ａ−２は、プロセッサ１８０Ａ−２に割り当てられたタスクのＴＣＢを記憶する。【００１９】
オペレーティングシステム１４０Ａは、計算機１００Ａ内のリソースを複数のタスクに割り当てるために、プリエンプションを行う技術を提供している。プリエンプションとは、実行中のタスクを一時的に打ち切り、他のタスクにリソースを使用させることである。【００２０】
後述するように、各タスクには優先度が設定可能となっており、オペレーティングシステム１４０Ａは、優先度に応じて、タスクの実行順序を決定する。実行優先度の高いタスクが存在する場合は、実行優先度が低いタスクはプリエンプションにより実行権限を一時的に打ち切られる。オペレーティングシステム１４０Ａは、タスクごとに定められる所定の時間タスクを実行した場合にも、そのタスクの実行を打ち切る。【００２１】
タスクプログラム１２０には、複数の命令が含まれる。図２には、タスクプログラム１２０Ａの構成例が図示されている。タスクプログラム１２０Ａには、制御命令列Ａ１２０−１、システムコール１２０−２、および制御命令列Ｂ１２０−３が含まれている。ここでシステムコール１２０−２とは、タスクからオペレーティングシステム１４０Ａに対する命令である。システムコール１２０−２としては、例えば、ディスクへのアクセス命令や、タイマー１７０Ａからの時刻の取得命令などがある。オペレーティングシステム１４０Ａは、タスクから呼び出されるシステムコールに応じて、例えば、ディスクへのアクセスや、タイマー１７０Ａからの時刻の取得を行うなどの各種の処理を行う。【００２２】
近年計算機は、より高速に処理を実行するためにキャッシュ機能を提供している。プログラムが使用する情報がキャッシュにヒットする場合、計算機が保有するメモリから情報を取得する必要がないため、高速に動作することが可能となる。本実施形態の計算機システム１０では、クロック同期などを行うことなく計算機１００Ａと計算機１００Ｂとは独立に動作するため、例えば、計算機１００Ａにおいてキャッシュに情報が格納された場合にも計算機１００Ｂではキャッシュに情報が格納されないという状況が発生し得る。しかし、このような状況においても、後述するように、計算機１００Ａ及び１００Ｂがタスクをディスパッチする際に、同じタスクをディスパッチするように情報を交換することにより同期を行うことが可能となっている。【００２３】
プロセッサ１８０Ａ−１は、プログラムカウンタ１８０Ａ−１ａ、汎用レジスタ１８０Ａ−１ｂ、および制御レジスタ１８０Ａ−１ｃを備えている。なお、プロセッサ１８０Ａ−２も同様の構成である。
プログラムカウンタ１８０Ａ−１ａは、プロセッサ１８０Ａ−１が次に実行するべき命令が格納されているメモリ１１０Ａ上のアドレスを指し示すレジスタである。プロセッサ１８０Ａ−１がメモリ１１０Ａから命令を読み込む度に、読み取った命令の分だけ値が増加する。【００２４】
汎用レジスタ１８０Ａ−１ｂは、各種の値を記憶するレジスタである。汎用レジスタ１８０Ａ−１ｂは、プロセッサ１８０Ａ−１が行う演算処理などに用いられる。
制御レジスタ１８０Ａ−１ｃは、各種のフラグをリセットし、あるいはプロセッサ１８０Ａ−１の動作モードを特定のモード（例えば、低消費電力モード）にするように指示するためのレジスタである。【００２５】
図３は、タスク管理テーブル１４３の構成例を示す図である。計算機１００Ａで実行されるタスクは、生成されてから消滅するまでの間、実行中の状態、実行可能であるがまだ実行されていない状態（実行可能状態）、条件成就や入力などを待機している状態（待機状態）の間でその状態が遷移する。タスク管理テーブル１４３には、実行可能状態であるタスクに係るＴＣＢ１４６が格納される実行可能タスクキュー１４４、待機状態であるタスクに係るＴＣＢ１４６が格納される待機状態タスクキュー１４５、および実行中のタスクのＴＣＢ１４６を格納する実行中タスク１４７が含まれる。一般的には実行可能タスクキュー１４４には、優先度の高い順にＴＣＢ１４６が格納され、先頭から順にタスクがディスパッチされることにより、優先度が高い順にタスクがディスパッチされるようになっている。【００２６】
ＴＣＢ１４６には、ポインタ１４６−０が含まれる。実行可能タスクキュー１４４および待機状態タスクキュー１４５は、キューの先頭のＴＣＢ１４６を示すポインタを含み、実行可能タスクキュー１４４および待機状態タスクキュー１４５に格納されているＴＣＢ１４６のポインタ１４６−０には、キューにおける次のＴＣＢ１４６を示すポインタが格納される。キューの最後尾のＴＣＢ１４６のポインタ１４６−０にはｎｕｌｌが設定される。【００２７】
また、ＴＣＢ１４６には、タスクＩＤ１４６−１、プログラムカウンタ１４６−２、汎用レジスタ１４６−３、制御レジスタ１４６−４、割り込み可否１４６−５、プリエンプトタイプ１４６−６が含まれる。【００２８】
タスクは、タスクＩＤ１４６−１により識別される。プログラムカウンタ１４６−２は、プロセッサ１８０Ａ−１のプログラムカウンタ１８０Ａ−１ａに設定される値である。【００２９】
汎用レジスタ１４６−３は、プロセッサ１８０Ａ−１の汎用レジスタ１８０Ａ−１ｂに設定される値である。制御レジスタ１４６−４は、プロセッサ１８０Ａ−１の制御レジスタ１８０Ａ−１ｃに設定される値である。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−１において実行中のタスクの実行を打ち切って他のタスクに切り替える場合に、プログラムカウンタ１８０Ａ−１ａ、汎用レジスタ１８０Ａ−１ｂ、および制御レジスタ１８０Ａ−１ｃの内容をＴＣＢ１４６に設定して、タスクが実行可能状態である場合には実行可能タスクキュー１４４に追加し、タスクが待機状態である場合には、待機状態タスクキュー１４５に追加し、実行可能タスクキュー１４４から１つＴＣＢ１４６を読み出して、ＴＣＢ１４６のプログラムカウンタ１４６−２、汎用レジスタ１４６−３、および制御レジスタ１４６−４の内容をプロセッサ１８０Ａ−１に設定することにより、タスクの切り替えを行う。【００３０】
本実施形態では、ディスパッチャ１４１Ａが、プロセッサ１８０Ａのカウンタやレジスタの内容をＴＣＢ１４６に設定して実行中のタスクを打ち切ることを「アン・ディスパッチ」といい、ＴＣＢ１４６に基づいてプロセッサ１８０Ａに新たなタスクを実行させることを「ディスパッチ」ということとする。【００３１】
タスク制御用共有メモリ区画１３０は、各計算機１００間で分散共有されるメモリである。タスク制御用共有メモリ区画１３０は、タスクの同期処理を行う頻度よりも高い頻度でＯＳ１４０により計算機１００間で内容の同期が行われているものとする。後述するように、タスク制御用共有メモリ区画１３０には、実行可能タスクキュー１４４に格納されているＴＣＢ１４６がコピーされる。これによりディスパッチャ１４１は、各計算機１００における実行可能タスクキュー１４４に格納されているＴＣＢ１４６を交換することが可能になっている。【００３２】
同期計算機管理テーブル１１１は、同期をとろうとする計算機１００を示す識別情報に対応付けて、当該計算機１００と同期がとれているか否かを示すフラグやステータス情報を管理する。
シグナル管理テーブル１１２には、タスク間通信のためにシグナルが発生するごとに、発生したシグナルに関する情報がキューとして登録される。【００３３】
以下、本実施形態における計算機制御方法の実際手順について図に基づき説明する。以下で説明する計算機制御方法に対応する各種動作は、計算機システム１０を構成する各装置のＲＡＭ（Random Access Memory）に読み出して実行するプログラムによって実現される。そして、このプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。【００３４】
−−−非同期ディスパッチ−−−
図４は、非同期用のプロセッサ１８０Ａ−２に対して行われるディスパッチ（待ち状態からディスパッチ）を説明する図である。なお、一般的なプロセッサに対するディスパッチの処理も、図４に示すようなものになる。
ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−２の実行可能タスクキュー１４４より、先頭のＴＣＢ１４６Ａを選定する（Ｓ７０１）。すなわち、ディスパッチャ１４１Ａは、実行可能タスクキュー１４４のポインタが示すＴＣＢ１４６Ａを選定する。【００３５】
ディスパッチャ１４１Ａは、選定したＴＣＢ１４６Ａより、プログラムカウンタ情報１４６−２の情報をプログラムカウンタ１８０Ａ−２ａに格納し、汎用レジスタ情報１４６−３の情報を汎用レジスタ１８０Ａ−２ｂに格納し、制御レジスタの情報１４６−４を制御レジスタ１８０Ａ−２ｃに格納する（Ｓ７０２）。ディスパッチャ１４１Ａは、実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅを待機状態タスクキュー１４５の最後尾に追加する。すなわち、ディスパッチャ１４１は、待機状態タスクキュー１４５のポインタが示すＴＣＢ１４６Ｃから、ＴＣＢ１４６のポインタ１４６−０がｎｕｌｌになる最後尾のＴＣＢ１４６Ｄまで辿り、最後尾のＴＣＢ１４６Ｄのポインタ１４６−０にＴＣＢ１４６Ｅを示すポインタを設定し、ＴＣＢ１４６Ｅのポインタ１４６−０にｎｕｌｌを設定する。ディスパッチャ１４１Ａは、実行可能タスクキュー１４４の先頭から選定したＴＣＢ１４６Ａを実行中タスク１４７として設定する。すなわち、ディスパッチャ１４１Ａは、ＴＣＢ１４６Ａを示すポインタを実行中タスク１４７のポインタに設定する（Ｓ７０３）。【００３６】
また、ディスパッチャ１４１Ａは、実行可能タスクキュー１４４のポインタに、ＴＣＢ１４６Ａの次に位置するＴＣＢ１４６Ｂを示すポインタを設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２に実行を指示する（Ｓ７０４）。
このようにして、プロセッサ１８０Ａ−２におけるタスクの切り替えが行われる。【００３７】
−−−非同期アン・ディスパッチ−−−
図５は、非同期用プロセッサ１８０Ａ−２に対して行われるアン・ディスパッチ（ディスパッチから待ち状態）を説明する図である。なお、一般的なプロセッサに対するアン・ディスパッチの処理も、図５に示すようなものになる。
ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２に実行中断を指示し（Ｓ７０５）、プロセッサ１８０Ａ−２の状態を、実行中タスク１４７のポインタが示すＴＣＢ１４６Ａに退避する。すなわち、ディスパッチャ１４１Ａは、プログラムカウンタ１８０Ａ−２ａの情報をプログラムカウンタ情報１４６−２に格納し、汎用レジスタ１８０Ａ−２ｂの情報を汎用レジスタ情報１４６−３に格納し、制御レジスタ１８０Ａ−２ｃの情報を制御レジスタ情報１４６−４に格納する（Ｓ７０６）。
これにより、プロセッサ１８０Ａ−２の状態がＴＣＢ１４６Ａに退避され、アン・ディスパッチ処理が終了する。【００３８】
−−−同期ディスパッチ−−−
図６は、ディスパッチャ１４１によるオペレーティングシステム１４０内での同期用のプロセッサ１８０Ａ−１に対する同期ディスパッチを説明する図である。図６に示す処理は、オペレーティングシステム１４０内タスク同期制御（待ち状態からディスパッチ）である。一般的なディスパッチとの違いはステップＳ７１４の前に同期処理が行われることである。なお、図６のＳ７１４は、図４のＳ７０２〜Ｓ７０４に対応する。【００３９】
オペレーティングシステム１４０Ａにおいてディスパッチャ１４１Ａが起動されると（Ｓ７１０）、ディスパッチャ１４１Ａは、計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１内の実行可能タスクキュー１４４（以下、「実行可能タスクキュー１４４Ａ」という。）の内容と、タスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４（以下、「実行可能タスクキュー１４４Ｂ」という。）の内容とを通信インターフェース１６０および１５０を介して交換し、各同期計算機１００Ａと１００Ｂの制御用共有メモリ区画１３０Ａ、１３０Ｂに各々格納する（Ｓ７１２）。ディスパッチャ１４１Ａは、実行可能タスクキュー１４４Ａに登録されているＴＣＢ１４６と、実行可能タスクキュー１４４Ｂに登録されているＴＣＢ１４６との両方の情報を制御用共有メモリ区画１３０より取得し、優先度を含めて一致化しているかを確認し、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する。（Ｓ７１３）。【００４０】
図７は、プロセッサ１８０Ａ−１に割り当てるべき（ディスパッチするべき）タスクが存在する場合のタスクの選定処理の一例を説明する図である。各計算機１００において同一優先度の実行可能タスクキュー１４１に同時に複数のタスクが存在する場合を想定している。【００４１】
ディスパッチャ１４１Ａは、実行可能タスクキュー１４４の内容をタスク制御用共有メモリ区画１３０Ａに書き込む。上述したように、タスク制御用共有メモリ区画１３０Ａは、他の計算機１００と共有されているので、各計算機１００の実行可能タスクキュー１４４の内容がタスク制御用共有メモリ区画１３０Ａに書き込まれることになる。【００４２】
ディスパッチャ１４１Ａは、同期計算機管理テーブル１１１Ａを参照し、同期を取る計算機１００（以下、「同期計算機」ともいう。）がｎ台であることを確認する（Ｓ７１３１）。ディスパッチャ１４１Ａは、同期を取る計算機１００のそれぞれからタスク制御用共有メモリ区画１３０Ａに書き込まれているＴＣＢ１４６のタスクＩＤ１４６−１のうち、タスク制御用共有メモリ区画１３０Ａにｎ個存在するものがあるか否かを判断する（Ｓ７１３２）。ディスパッチャ１４１Ａは、ｎ個存在するタスクＩＤのうち、識別子が最も若い同期計算機１００の実行可能タスクキュー１４４の最も先頭に近いものに対応するタスクをディスパッチするタスクとして選定する（Ｓ７１３３）。【００４３】
ディスパッチャ１４１Ａは、上記ｎ個存在するタスクＩＤ１４６−１がない場合には、タスクＩＤ１４６−１がｎ個タスク制御用共有メモリ区画１３０Ａに書き込まれるまで、所定のタイムアウト時間待機する。タイムアウト時間が経過しても、ｎ個のタスクＩＤ１４６−１が書き込まれない場合には、いずれかの計算機１００の同期が外れた事が考えられる。そこで、タイムアウト時間が経過した場合、ディスパッチャ１４１Ａは、ｎを１つ減算し（Ｓ７１３４）、ｎが２より多い場合には（Ｓ７１３５：ＮＯ）、ｎ個のタスクＩＤ１４６−１がタスク制御用共有メモリ区画１３０Ａに書き込まれているか否かを判断する（Ｓ７１３６）。ディスパッチャ１４１Ａは、上記ｎ個のタスクＩＤ１４６−１が存在する場合（Ｓ７１３６：ＹＥＳ）、当該タスクＩＤ１４６−１のうち識別子が最も若い計算機１００の実行可能タスクキュー１４４の最も先頭に近いものを選択し、選択したタスクＩＤ１４６−１が実行可能タスクキュー１４４に含まれていない計算機１００を、同期外れを起こした計算機１００として、同期計算機管理テーブル１１１Ａより除外する（S７１３７）。ディスパッチャ１４１Ａは、Ｓ７１３３に進み、同期が外れた計算機１００を除外した上で、上記選択したタスクＩＤに対応するタスクをディスパッチするタスクとして選定する。ディスパッチャ１４１Ａは、ｎ個のタスクＩＤ１４６−１がタスク制御用共有メモリ区画１３０Ａに書き込まれていない場合には（Ｓ７１３６）、Ｓ７１３４に戻り、さらにｎを１減算する。【００４４】
ｎが２以下、すなわち同期している計算機１００が２台以下となり、多数決が取れない場合、もしくは、ｎが１で同期する計算機１００が１台しか存在しなくなった場合には（Ｓ７１３５：ＹＥＳ）、ディスパッチャ１４１Ａは、同期計算機１００のうち識別子の最も若い計算機１００を同期計算機管理テーブル１１１Ａに残し、その他の計算機１００を同期計算機管理テーブル１１１Ａから除外する（Ｓ７１３８）。ディスパッチャ１４１Ａは、Ｓ７１３３に進み、同期計算機管理テーブル１１１Ａに残された計算機１００の実行可能タスクキュー１４４の最も先頭のタスクＩＤ１４６−１に対応するタスクをディスパッチするタスクとして選定する。【００４５】
以上のようにして、同期計算機管理テーブル１１１を使用し、同期計算機情報を更新しながら多数決によりタスクの選定が行われる。【００４６】
図７の処理によりディスパッチすべきタスクが選定されると、ディスパッチャ１４１Ａは、図４のＳ７０２〜Ｓ７０４と同様に、選定したタスクのＴＣＢ１４６の内容をプロセッサ１８０Ａ−１に設定して、プロセッサ１８０Ａ−１に選定したタスクを実行させる（Ｓ７１４）。【００４７】
以上のようにして、全ての計算機１００において、実行可能タスクキュー１４４を交換した上で、全ての実行可能タスクキュー１４４に基づいてディスパッチすべきタスクを決定するので、全ての計算機１００において同じタスクを次に割り当てるタスクに決定することができる。これにより、実行可能タスクキュー１４４に登録されているＴＣＢ１４６が計算機１００によって異なる場合でも、全ての計算機１００において同じタスクがディスパッチされるようにすることができる。よって、クロック同期等を行うことなく、タスクの同期を行うことができる。【００４８】
−−−同期アン・ディスパッチ−−−
図８は、ディスパッチャ１４１によるオペレーティングシステム１４０内での同期用のプロセッサ１８０Ａ−１に対するアン・ディスパッチを説明する図である。図８に示す処理は、オペレーティングシステム１４０内タスク同期制御（実行状態から待ち状態）である。
ディスパッチャ１４１Ａは、オペレーティングシステム１４０Ａからタスク１２０Ｂを待機させる旨の指示を受けると（Ｓ７１５）、プロセッサ１８０Ａ−１が実行中であるタスク１２０Ｂの情報を回収する（Ｓ７１６）。すなわち、ディスパッチャ１４１Ａは、図５のＳ７０５およびＳ７０６と同様に、プロセッサ１８０Ａ−１に実行を中断するように指示し、プロセッサ１８０Ａ−１のプログラムカウンタ１８０Ａ−１ａ、汎用レジスタ１８０Ａ−１ｂおよび制御レジスタ１８０Ａ−１ｃの内容を、タスク管理テーブル１４３Ａ−１に含まれる実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅに設定する。ディスパッチャ１４１Ａは、ＴＣＢ１４６Ｅを、タスク管理テーブル１４３Ａ−１の待ち状態タスクキュー１４５に移動する（Ｓ７１７）。【００４９】
−−−同期アン・ディスパッチ−−−
上記のように、ディスパッチおよびアン・ディスパッチのタイミング（切替可能ポイント）は、オペレーティングシステム１４０Ａのディスパッチャ１４１Ａが決定するが、タスクプログラム１２０がそのタイミングを指示するようにすることもできる。この場合、所定のシステムコールを呼び出すＡＰＩ（Application Program Interface）を規定しておくようにする。以下、ディスパッチやアン・ディスパッチのタイミングを決定するためのＡＰＩに規定されたシステムコールを「切替システムコール」という。また、図２のタスクプログラム１２０Ａに含まれるシステムコール１２０−２は、切替システムコールであるものとする。【００５０】
図９は、切替システムコールが呼び出された場合のアン・ディスパッチを説明する図である。図９に示す処理は、ディスパッチャ１４１によるタスク内でのＡＰＩを介したタスク同期制御（実行状態から待ち状態）である。システムコール１２０−２がアン・ディスパッチを指示する切替システムコールであり、タスクがシステムコール１２０−２を呼び出すと（Ｓ７２０）、ディスパッチャ１４１Ａは、図８のＳ７１６、Ｓ７１７の処理を行う。【００５１】
−−−ＡＰＩによる同期ディスパッチ−−−
図１０は、切替システムコールが呼び出された場合のディスパッチを説明する図である。図１０に示す処理は、ディスパッチャ１４１によるタスク内でのＡＰＩを介したタスク同期制御（待ち状態から実行状態）である。システムコール１２０−２がディスパッチを指示する切替システムコールであり、タスクが、切替先としてタスク１２０Ａを指定してシステムコール１２０−２を呼び出した場合（Ｓ７３０）、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−１内の待ち状態タスクキュー１４５に格納されている、タスク１２０Ａに係るＴＣＢ１４６を、実行可能タスクキュー１４４に移動する（Ｓ７３２）。ディスパッチャ１４１Ａは、計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ、１４６Ｂを通信インターフェース１６０および１５０を介して交換する（Ｓ７３３）。ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６との両方に基づいて、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ７３４）。ディスパッチャ１４１Ａは、図４のＳ７０２−Ｓ７０４と同様に、選定したタスクのＴＣＢ１４６の内容をプロセッサ１８０Ａ−１に設定して、プロセッサ１８０Ａ−１に選定したタスクを実行させる（Ｓ７３５）。【００５２】
−−−同期・非同期の切り替え−−−
オペレーティングシステム１４０Ａは、例えば、プログラムの起動時にユーザから指定されたオプションにより、当該プログラムの実行に係るタスクを他の計算機１００と同期すべきか否かを決定することができる。ディスパッチャ１４１Ａは、同期すべきタスクは同期用のプロセッサ１８０Ａ−１に割り当て、非同期でよいタスクは非同期用のプロセッサ１８０Ａ−２に割り当てる。【００５３】
オペレーティングシステム１４０Ａは、タスクにおいて実行される処理に応じてタスクを同期すべきか否かを決定することもできる。例えば、タスクから同期を指示する所定のシステムコール（以下、「同期システムコール」という。）が呼び出された場合、ディスパッチャ１４１Ａは、そのタスクを同期用のプロセッサ１８０Ａ−１に割り当て、タスクから非同期を指示する所定のシステムコール（以下、「非同期システムコール」という。）が呼び出された場合には、そのタスクを非同期用のプロセッサ１８０Ａ−２に割り当てるようにすることができる。【００５４】
図１１は、断片化したメモリに連続領域のメモリ領域を確保する処理を行うタスクの一例を示す図である。すなわち、連続したメモリ領域が確保できるか否かが判断され（Ｓ１２００１）、連続したメモリ領域が確保できない場合には（Ｓ１２００１：ＮＯ）、メモリの回収タスクが起動され（Ｓ１２００２）、連続したメモリ領域を確保できる場合には（Ｓ１２００１：ＹＥＳ）、当該連続したメモリ領域を確保することになる（Ｓ１２００３）。各計算機１００におけるメモリの使用状況等は異なることが多いので、図１１のタスクが同期用のプロセッサ１８０Ａ−１にディスパッチされてしまうと、同期を取ることが難しくなる場合がある。そこで、連続したメモリ領域の確保を行う処理など、各計算機１００の状態に依存する処理（以下、「環境依存処理」という。）を行うタスクを同期用のプロセッサ１８０Ａ−１に割り当てる場合には、図１２に示すように、環境依存処理を行う前にタスクを非同期とし、環境依存処理の後に処理を行う場合にはタスクを同期するようにすることができる。すなわち、タスクが非同期システムコールを呼び出すと（Ｓ１２００４）、ディスパッチャ１４１Ａは、当該タスクを同期用プロセッサ１８０Ａ−１から非同期用プロセッサ１８０Ａ−２に割り当てを変更することで、非同期に上記図１１と同様にして連続したメモリ領域が確保されることになる。なお、プロセッサ１８０Ａ間のタスクの割り当ての変更処理の詳細については後述する。次に、タスクが同期システムコールを呼び出すと（Ｓ１２００５）、ディスパッチャ１４１Ａは、非同期用プロセッサ１８０Ａ−２から同期用のプロセッサ１８０Ａ−１に当該タスクの割り当てを変更し、これによりそれ以後のタスクは同期をとって実行されることになる。【００５５】
このように、タスクにおいて実行される処理に応じて同期及び非同期を切り替えるようにすることで、同期に適さない計算機１００それぞれの資源や環境に応じた処理を行う場合には、非同期でタスクを実行し、それ以外の場合には同期させてタスクを実行するようにすることもできる。【００５６】
−−−同期タスクの非同期への変更−−−
図１３は、同期用のプロセッサ１８０Ａ−１から非同期用のプロセッサ１８０Ａ−２にタスクを割り当てるプロセッサを変更する、オペレーティングシステム１４０内における同期タスクの非同期化処理を説明する図である。図１３に示す処理は、オペレーティングシステム１４０内タスク同期制御（実行状態から別コアでの非同期実行状態）である。【００５７】
オペレーティングシステム１４０Ａが、ディスパッチャ１４１Ａにタスク１２０Ｂを非同期にするように指示した場合（Ｓ７４０）、ディスパッチャ１４１Ａは、同期用のプロセッサ１８０Ａ−１が実行しているタスク１２０Ｂの情報を回収する（Ｓ７４１）。すなわち、ディスパッチャ１４１Ａは、図５のＳ７０５、Ｓ７０６と同様に、プロセッサ１８０Ａ−１に実行を中断するように指示し、プロセッサ１８０Ａ−１のプログラムカウンタ１８０Ａ−１ａ、汎用レジスタ１８０Ａ−１ｂおよび制御レジスタ１８０Ａ−１ｃの内容を、タスク管理テーブル１８０Ａ−１に含まれる実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅに設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−１に対応するタスク管理テーブル１４３Ａ−１からタスク１２０Ｂに対応するＴＣＢ１４６Ｅを削除し（Ｓ７４２）、非同期用のプロセッサ１８０Ａ−２に対応するタスク管理テーブル１４３Ａ−２の実行可能タスクキュー１４４に、タスク１２０ＢについてのＴＣＢ１４６Ｅを登録する（Ｓ７４３）。これにより、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−２の実行可能タスクキュー１４４に登録されたＴＣＢ１４６Ｅに基づいて、図４に示すディスパッチを行い、プロセッサ１８０Ａ−２においてタスク１２０Ｂが実行される（Ｓ７４４）。【００５８】
−−−非同期タスクの同期への変更−−−
図１４は、非同期用のプロセッサ１８０Ａ−２から同期用のプロセッサ１８０Ａ−１にタスクを割り当てるプロセッサを変更する処理を説明する図である。図１４に示す処理は、オペレーティングシステム１４０内タスク同期制御（別コアでの非同期実行状態から同期コアでのディスパッチ）である。
オペレーティングシステム１４０Ａが、ディスパッチャ１４１Ａにタスク１２０Ｂを同期するように指示した場合（Ｓ７５０）、ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２が実行しているタスク１２０Ｂの情報を回収する（Ｓ７５１）。すなわち、ディスパッチャ１４１Ａは、図５のＳ７０５、Ｓ７０６と同様に、プロセッサ１８０Ａ−２に実行を中断するように指示し、プロセッサ１８０Ａ−２のプログラムカウンタ１８０Ａ−２ａ、汎用レジスタ１８０Ａ−２ｂおよび制御レジスタ１８０Ａ−２ｃの内容を、タスク管理テーブル１８０Ａ−２に含まれる実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅに設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２に対応するタスク管理テーブル１４３Ａ−２からタスク１２０Ｂに対応するＴＣＢ１４６Ｅを削除し（Ｓ７５２）、同期用のプロセッサ１８０Ａ−１に対応するタスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に、タスク１２０ＢについてのＴＣＢ１４６Ｅを登録する（Ｓ７５３）。これにより、ディスパッチャ１４１Ａは、図６のＳ７１２〜７１４と同様に計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ、１４６Ｂを通信インターフェース１６０および１５０を介して交換し（Ｓ７５４）、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６との両方に基づいて、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ７５５）。これにより、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されたＴＣＢ１４６Ｅに基づいて、図４に示すディスパッチを行い、プロセッサ１８０Ａ−１においてタスク１２０Ｂが実行される（Ｓ７５６）。【００５９】
−−−ＡＰＩによるタスクの同期非同期の変更−−−
タスクプログラム１２０がタスクの同期または非同期を指示するようにすることもできる。この場合、タスクの同期または非同期を指示するシステムコール（以下、「同期システムコール」または「非同期システムコール」という。）を呼び出すＡＰＩを規定しておくようにする。図１５はこの場合における、同期プロセッサと非同期プロセッサとの間でのタスクの移動によるタスク内での同期タスクの非同期化・同期化処理を説明する図である。タスク１２０Ｂから非同期システムコールが呼び出された場合（Ｓ７６０）、ディスパッチャ１４１Ａは、図１３のＳ７４１〜Ｓ７４４の処理を行う。また、タスク１２０Ｂから同期システムコールが呼び出された場合には（Ｓ７７０）、ディスパッチャ１４１Ａは、図１４のＳ７５１〜Ｓ７５６の処理を行う。
これにより、タスクプログラムから任意に同期または非同期への変更を指定することが可能となる。【００６０】
−−−タイムアウト処理−−−
図１６は、例えば図６のＳ７１２などにおいて、計算機１００Ａと計算機１００Ｂとの間で行うタスク管理テーブル１４３の交換がタイムアウトした場合の処理を説明する図である。図１６に示す処理は、計算機１００の同期外れ判定（時間での判定）による同期タスク待ちのタイムアウト処理である。
ディスパッチャ１４１Ａは、処理を開始した時刻を取得して（Ｓ７８１）、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ、１４６Ｂを通信インターフェース１６０および１５０を介して交換し、各同期計算機１００Ａ、１００Ｂのタスク制御用共有メモリ区画１３０Ａ、１３０Ｂに各々のＴＣＢ１４６を格納する（Ｓ７８２）。【００６１】
タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、計算機１００Ｂから取得したタスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に格納されているＴＣＢ１４６とが一致していれば（Ｓ７８３：ＹＥＳ）、図６のＳ７１３、Ｓ７１４と同様に、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６との両方に基づいて、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ７８５）。ディスパッチャ１４１Ａは、図４のＳ７０２〜Ｓ７０４と同様に、選定したタスクのＴＣＢ１４６の内容をプロセッサ１８０Ａ−１に設定して、プロセッサ１８０Ａ−１に選定したタスクを実行させる（Ｓ７８６）。【００６２】
一方、ＴＣＢ１４６が一致しなければ（Ｓ７８３：ＮＯ）、ディスパッチャ１４１Ａは、上記Ｓ７８１で取得した時刻から現在時刻までの時間が所定の時間を越えたか否かにより、タイムアウトを起こしたか否かを判定する（Ｓ７８４）。タイムアウトを起こしていなければ（Ｓ７８４：ＮＯ）、ディスパッチャ１４１Ａは、Ｓ７８２からの処理を繰り返す。タイムアウトを起こしていれば（Ｓ７８４：ＹＥＳ）、ディスパッチャ１４１Ａは、実行可能タスクを多数決により決定する（Ｓ７８７）。すなわち、各計算機の実行可能タスクキュー１４４について、登録されているＴＣＢ１４６に基づいてタスクを選定していき、最も多く選定されたタスクを選定するようにする。最も多く選定されたタスクが複数存在する場合には、例えば、予め計算機の優先度を決めておき、優先度の高い計算機について選定されたタスクを優先して選定するようにする。ディスパッチャ１４１Ａは、タスク制御用共有メモリ区画１３０Ａを参照し、多数決により選定されなかった計算機１００を特定し、特定した計算機１００を示す識別情報に対応づけて、当該計算機１００と同期がとれていない旨を示す情報を同期計算機管理テーブル１１１Ａに登録する（Ｓ７８８）。ディスパッチャ１４１Ａは、図４のＳ７０２〜Ｓ７０４と同様に、選定したタスクのＴＣＢ１４６の内容をプロセッサ１８０Ａ−１に設定して、プロセッサ１８０Ａ−１に選定したタスクを実行させる（Ｓ７８９）。【００６３】
−−−回数を考慮したタイムアウト処理−−−
図１７は、上述した図１６のタイムアウト処理においてタイムアウトを起こした回数を考慮する処理を説明する図である。図１７に示す処理は、計算機１００の同期外れ判定（回数での判定）による同期タスク待ちのタイムアウト処理である。図１７のＳ７９０〜Ｓ７９７の処理は、図１６のＳ７８１〜Ｓ７８８と同様である。ディスパッチャ１４１Ａは、Ｓ７９７の後、カウンタをインクリメントして、カウンタが所定の設定回数を超えたか否かを判定し（Ｓ７９８）、カウンタが設定回数を超えていなければ（Ｓ７９８：ＮＯ）、観察実行とする（Ｓ７９９）。観察実行とは、例えば計算機識別子が多数決において高い優先度を持っていたとしても、優先度が最低として扱う方式である。つまり、図７のＳ７１３８において、識別子の若い計算機が観察実行状態であれば、Ｓ７１３８では識別子の年取った方が残る。カウンタが設定回数を超えていれば（Ｓ７９８：ＹＥＳ）、計算機を再起動する（Ｓ８００）。【００６４】
−−−Ｖｏｔｅｒ８７０を含むシステム構成−−−
図１８は、計算機システム１０が、計算機１００Ａからの出力と計算機１００Ｂからの出力とが一致することを検証するＶｏｔｅｒ８７０（多数決機）を含む構成を示す図である。【００６５】
Ｖｏｔｅｒ８７０は、計算機システム１０を構成する複数の計算機１００からの出力が一致していればそのまま出力し、異なる場合には、多数決により最も一致した数の多いものを出力する多数決処理を行う。Ｖｏｔｅｒ８７０は、メモリ８１０、プロセッサ８２０、通信インターフェース８６０を備えており、これらがバス８３０により接続されている。メモリ８１０は、オペレーティングシステム８４０を備え、オペレーティングシステム８４０は、同期計算機管理テーブル８５０を備えている。同期計算機管理テーブル８５０は計算機１００が備える同期計算機管理テーブル１１１と同様の構成である。同期計算機管理テーブル８５０には、多数決処理に参加する計算機１００が登録されており、オペレーティングシステム８４０は、同期計算機管理テーブル８５０に登録されている計算機１００からの出力のみについて多数決処理を行う。【００６６】
以下、Ｖｏｔｅｒ８７０を備える計算機システム１０における処理について説明する。【００６７】
−−−計算機１００からＶｏｔｅｒ８７０への通知処理−−−
図１９は、Ｖｏｔｅｒ８７０における多数決処理に参加する計算機１００を変更する処理を説明する図である。図１９に示す処理は、同期計算機管理情報の送受信（計算機１００からＶｏｔｅｒ８７０）であり、タスク同期外れした計算機１００をＶｏｔｅｒ８７０へ通知し、出力結果の多数決に参加できないようにするものである。計算機１００Ａのディスパッチャ１４１Ａは、上述した図１６のＳ７８８や図１７のＳ７９７において、多数決により選定されなかった計算機１００をＶｏｔｅｒ８７０に通知し（Ｓ８４１）、Ｖｏｔｅｒ８７０のオペレーティングシステム８４０は、同期計算機管理テーブル８５０から、通知された計算機１００を削除する（Ｓ８４２）。これにより、タイムアウトした計算機１００はＶｏｔｅｒ８７０による多数決処理に参加しないようにすることができる。【００６８】
−−−Ｖｏｔｅｒ８７０から計算機１００への通知処理−−−
図２０は、計算機１００における多数決処理に参加する計算機１００を変更する処理を説明する図である。図２０に示す処理は、同期計算機管理情報の送受信（Ｖｏｔｅｒ８７０から計算機１００）であり、Ｖｏｔｅｒ８７０において出力結果の多数決負けを起こした計算機１００を他の計算機１００に通知し、同期をとって同期計算機管理テーブル１１１から当該計算機１００を除外するものである。Ｖｏｔｅｒ８７０のオペレーティングシステム８４０は、上記多数決処理において選定されなかった計算機１００を、全ての計算機１００に通知する（Ｓ８４３）。計算機１００のディスパッチャ１４１は、Ｖｏｔｅｒ８７０から通知された計算機１００を同期計算機管理テーブルから削除する（Ｓ８４４）。【００６９】
−−−ソフトウェアエラーの処理−−−
図２１は、ソフトウェアにエラーが生じた場合の処理を説明する図である。図２１に示す処理は、オペレーティングシステム１４０内タスク同期制御（待ち状態からディスパッチ）におけるエラーハンドリング処理（ソフトウェアエラー）であり、一般的なディスパッチとの違いはＳ７１４の前に同期処理が発生することである。ディスパッチャ１４１ＡによりＳ７１１〜Ｓ７１４の処理が行われた後、タスクにエラーが発生した場合（Ｓ９００）、ディスパッチャ１４１Ａは、タスクがエラーを出力していれば（Ｓ９０１：ＹＥＳ）、エラー処理を行うプログラムを構成するタスクについてのＴＣＢ１４６を、実行可能タスクキュー１４４の先頭に移動し（Ｓ９０２）、エラーを出力していなければ（Ｓ９０１：ＮＯ）、図６のＳ７１１と同様に実行可能状態にあるタスクを１つ選定する（Ｓ９０３）。ディスパッチャ１４１Ａは、計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ、１４６Ｂを通信インターフェース１６０および１５０を介して交換し（Ｓ９０４）、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６との両方に基づいて、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ９０５）。ディスパッチャ１４１は、図４のＳ７０２〜Ｓ７０４と同様に、選定したタスクのＴＣＢ１４６の内容をプロセッサ１８０Ａ−１に設定して、プロセッサ１８０Ａ−１に選定したタスクを実行させる（Ｓ９０６）。【００７０】
−−−ハードウェアエラーの処理−−−
図２２は、ハードウェアにエラーが生じた場合の処理を説明する図である。図２２に示す処理は、オペレーティングシステム１４０内タスク同期制御（待ち状態からディスパッチ）におけるエラーハンドリング処理（ハードウェアエラー）であり、一般的なディスパッチとの違いはＳ７１４の前に同期処理が行われることである。ディスパッチャ１４１ＡによりＳ７１１〜Ｓ７１４の処理が行われた後、ハードウェアにエラーが発生したことを、監視タスクやオペレーティングシステム１４０Ａが検知した場合（Ｓ９１０）、ディスパッチャ１４１Ａは、エラーが存在していれば（Ｓ９１１：ＹＥＳ）、他の計算機１００Ｂにエラーの内容を示すエラー情報の複製を送信し（Ｓ９１２）、エラー処理を行うプログラムを構成するタスクについてのＴＣＢ１４６を、実行可能タスクキュー１４４の先頭に移動する（Ｓ９１３）。エラーが存在しなければ（Ｓ９１１：ＮＯ）、ディスパッチャ１４１Ａは、図６のＳ７１１と同様に実行可能状態にあるタスクを１つ選定する（Ｓ９１４）。ディスパッチャ１４１Ａは、計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ−１４６Ｂを通信インターフェース１６０および１５０を介して交換し（Ｓ９１５）、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６との両方に基づいて、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ９１６）。ディスパッチャ１４１は、図４のＳ７０２−Ｓ７０４と同様に、選定したタスクのＴＣＢ１４６の内容をプロセッサ１８０Ａ−１に設定して、プロセッサ１８０Ａ−１に選定したタスクを実行させる（Ｓ９１７）。【００７１】
−−−タスク間通信を考慮したタスク同期処理−−−
図２３は、計算機１００において同期タスクが実行されている場合に、同期タスク間通信をプロセス間通信の有無を含めてタスクプログラムの同期を行う処理を説明する図である。【００７２】
オペレーティングシステム１４０Ａがタスクからタスク間通信の相手先への通信の依頼を受けると（Ｓ９２０）、オペレーティングシステム１４０Ａは、タスク間通信の内容をタスク間メッセージ管理テーブル１４２Ａ・シグナル管理テーブル１１２Ａにキューとしてつないで管理し（Ｓ９２１）、計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ−１４６Ｂと、シグナル管理テーブル１１２Ａ及び１１２Ｂとタスク間メッセージテーブル１４２Ａ及び１４２Ｂに記憶されている情報とを通信インターフェース１６０および１５０を介して交換し、タスク制御用共有メモリ区画１３０Ａ−１３０Ｂに各々格納する（Ｓ９２３）。ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６とが、同期タスクへの通信有無を含めて一致しているか否かを確認する。すなわち、ディスパッチャ１４１Ａは、全ての実行可能キュー１４４Ａ及び１４４Ｂに登録されている全てのＴＣＢ１４６について、タスクＩＤ１４６−１に対応する情報をシグナル管理テーブル１１２Ａ又は１１２Ｂに登録されている場合、タスクＩＤ１４６−１に対応する情報をシグナル管理テーブル１１２Ａ及び１１２Ｂのそれぞれから取得し、取得した情報の内容が一致していなければ、当該ＴＣＢ１４６を実行可能キュー１４４Ａから削除して待機状態タスクキュー１４５に追加する（Ｓ９２４）。ディスパッチャ１４１Ａは、上記図７の処理と同様にして、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ９２５）。ディスパッチャ１４１Ａは、図４のＳ７０２−Ｓ７０４と同様に、選定したタスクのＴＣＢ１４６の内容をプロセッサ１８０Ａ−１に設定して、プロセッサ１８０Ａ−１に選定したタスクを実行させる（Ｓ９２６）。ディスパッチャ１４１Ａは、ディスパッチしたタスクに係るＴＣＢ１４６のタスクＩＤ１４６−１に対応する情報がシグナル管理テーブル１１２Ａに登録されている場合には、通信内容をタスク通信の相手先に通達する（Ｓ９２７）。このようにして、次に実行するタスクを決定する際に、シグナル管理テーブル１４５に登録されているタスク間通信の内容が計算機１００Ａと計算機１００Ｂとの間で一致することを確認することにより、タスク間通信が行われている場合でも、タスク間通信の内容に影響を与えることなく、計算機１００Ａと計算機１００Ｂとの間でディスパッチの同期を行うことが可能となる。【００７３】
以上説明したように、例えばリアルタイムタスク等、優先度の高いプロセスの実行を行うためにプリエンプションを実行している場合に、現行のマルチタスク実行可能なオペレーティングシステムでは、タイマーに基づいた判断によりプリエンプションを行うため、プリエンプションが行われたタスク処理の進捗が計算機間で変わり、各計算機間での同期が取れなくなるところ、本実施形態によれば、複数の計算機１００の間でタスク管理テーブル１４３を交換し、複数のタスク管理テーブル１４３に基づいて次にディスパッチするタスクを決定することができる。すなわち、ある計算機１００において実行可能となっているタスクであっても、他の計算機１００において実行可能となっていなければ、ディスパッチの対象として選定されないようにすることができる。これにより、複数の計算機１００の間でディスパッチするタスクの同期を取ることが可能となる。【００７４】
また、キャッシュに該当情報がヒットしたか否かにより、システムコール（例：ハードディスクドライブへのデータ読み取り指示等）が発行されたりされなかったりすることが考えられるが、この場合にも、従来のマルチタスク実行可能なオペレーティングシステムではタスク処理スピードの変化が生じて同期が取れなくなるところ、本実施形態によれば、全ての計算機１００において実行可能となったタスクのみをディスパッチするようにすることができるので、タスク処理スピードが変化した場合であっても、複数の計算機１００間でディスパッチの同期を取ることが可能となる。【００７５】
また、マルチコアやマルチプロセッサ環境において、本実施形態の計算機システム１０によれば、タスク内の処理フローの一部においてタスクを割り当てるコアやプロセッサを変更することができる。【００７６】
また、本実施形態の計算機システム１０によれば、タスクの同期をとる処理と、タスクの同期を外して非同期に処理する方式とを交互に制御し、その制御の境目で複数コアを移動させることができる。【００７７】
また、本実施形態の計算機システム１０によれば、タスクが同期を外れるために他のコアへ移動するためのＡＰＩやシステムコールをタスクに提供することができる。【００７８】
また、本実施形態の計算機システム１０によれば、他のコアへ移動し同期が外れたタスクが、再び同期を取るために元のコアへ戻ってくるためのＡＰＩやシステムコールをタスクに提供することができる。【００７９】
また、本実施形態の計算機システム１０によれば、他計算機との同期を意識して、障害等が発生した場合に、他の計算機にエラーを通知して、エラー処理を行うことができる。【００８０】
したがって、高信頼システムを実現できる。【００８１】
また、本実施形態の計算機システム１０によれば、Ｖｏｔｅｒによる精査の結果を受け、タスク同期の制御にフィードバックすることができる。【００８２】
なお、これまで示した計算機システム１０をなす計算機１００Ａ、１００Ｂにおける各機能部、Ｖｏｔｅｒ８７０における各機能部等はハードウェアとして実現してもよいし、各装置におけるメモリやＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの適宜な記憶部に格納したプログラムとして実現するとしてもよい。この場合、各装置のＣＰＵなど制御部がプログラム実行に合わせて記憶部より該当プログラムを読み出して、これを実行することとなる。【００８３】
また、本実施形態の計算機１００Ａは、２つのプロセッサ１８０Ａ−１および１８０Ａ−２を備えるものとしたが、３つ以上のプロセッサを備えるようにしてもよい。【００８４】
また、計算機１００Ａは、複数のコアを有する１つのプロセッサのみを備えるようにしてもよい。この場合、オペレーティングシステム１４０Ａは、各コアについてＴＣＢを管理し、タスクのディスパッチを行うものとする。【００８５】
また、本実施形態では、実行可能タスクキュー１４４には優先度の高い順にＴＣＢ１４６が格納されているものとしたが、ＴＣＢ１４６に優先度を記憶するようにして、実行可能タスクキュー１４４には、キュー以外の形態で、順番を問わずにＴＣＢ１４６を管理するようにしてもよい。この場合、ディスパッチャ１４１Ａは、図４のＳ７０１において、実行可能タスクキュー１４４に格納されているＴＣＢ１４６のうち、優先度の最も高いものを選択するようにする。【００８６】
また、本実施形態では、Ｖｏｔｅｒ８７０による多数決処理は、出力が一致する計算機１００を複数のグループに分けた場合に、所属する計算機１００の数が同じであるグループが複数存在する状態（あいこ状態）を考慮していなかったが、あいこ状態を考慮するようにしてもよい。図２４は、あいこ状態を考慮する場合のＶｏｔｅｒ８７０による多数決処理を説明する図である。この場合、各計算機１００には、重複しない番号（計算機Ｎｏ）を割り当てておくものとする。また、図２４の処理では、計算機１００から出力される内容を重複なく抽出して比較対象値とし、各計算機１００からの出力をその比較対象値に対する投票として、多数決処理を説明する。Ｖｏｔｅｒ８７０は、次に投票数の多い比較対象値を選び（Ｓ８７０１）、選んだ比較対象値に対する投票数と同じ投票数の他の比較対象値が存在する場合（あいこ状態）には（Ｓ８７０２：ＹＥＳ）、計算機Ｎｏが最も小さい計算機１００が投票した比較対象値を出力するようにし（Ｓ８７０３）、あいこ状態でない場合には（Ｓ８７０２：ＮＯ）、選んだ比較対象値を出力する（Ｓ８７０４）。これにより、あいこ状態を考慮した多数決処理により、出力を決定することができる。なお、計算機Ｎｏ以外にも、例えば、計算機１００に優先度を割り当てておき、優先度に応じて、Ｖｏｔｅｒ８７０が出力を選択するようにしてもよい。【００８７】
以上の実施形態によって、マルチプロセッサ環境を有する複数の計算機をネットワークで接続した計算機システムにおいて、計算機間でのタスク同期が可能となる。即ち、一般的なネットワークを利用して複数計算機を接続する方式において、従来のマルチタスク動作可能なＯＳは、タスクスケジュールの中で他の計算機の挙動を意識するように作られてはいなかった。したがって、従来技術では、例えば、プリエンプションが行われたタスク処理の進捗が計算機間で異なってしまう状況や、キャッシュに該当情報がヒットしたか否かにより、計算機によってシステムコール（例：ハードディスクドライブへのデータ読み取り指示等）が発行されたりされなかったりという違いが生じる状況などに対処することが出来ていない。これにより、タスク開始や終了のタイミングを各計算機間で合わせることができず、ひいては計算機間での同期は取れなくなってしまっていた。つまり従来技術における構成や処理内容を、一般的なネットワークにて複数計算機を接続する方式に単に適用したとしても、フォールトトレラントシステムに求められる要求をそもそも満たせなくなっていた。本実施例ではこのような従来技術の課題を解決し、各々がマルチプロセッサを有する複数の計算機間でのタスク同期が可能となる。
【実施例２】
【００８８】
次に他の実施形態について説明する。本実施形態では、実施例１において、複数の同期タスクについて一部の処理が同期用プロセッサから非同期用プロセッサに割り当てが変更され、一時的に非同期用プロセッサにて実行されることになった場合を想定している。この時、これら複数の同期タスクについて複数計算機間での同期を一時的にとることができなくなる。そこで、各計算機において非同期用プロセッサで実行される同期タスクの実行順序を管理し、非同期用プロセッサに同期タスクが割り当てられた順序に従って、同期タスクが非同期用プロセッサで実行されるよう制御する方法を説明する。尚、本実施例において特に説明しない限り、システムの構成、処理方法は実施例１と同様である。【００８９】
−−非同期実行用プロセッサでの同期タスクのディスパッチ−−
まず、本実施形態では、図３に示すタスク管理テーブル１４３に代えて図２５に示すタスク管理テーブル１４３−２が使用される。図２５に示すタスク管理テーブル１４３−２は、図３に加え同期タスク順序管理キュー１４８があり、同期実行用プロセッサから同期タスクが非同期実行用プロセッサへ割当変更された順序で当該同期タスクのＴＣＢへのリンク１９４がつながっている。各リンク１９４は、同期用プロセッサのタスク管理テーブル１４３から非同期プロセッサ用のタスク管理テーブル１４３に移し変えられ、実行可能タスクキュー１４４につなげられた同期タスクのＴＣＢへのポインタを少なくとも保持している。更に図２５には図示していないが、各ＴＣＢ１４６にはタスクの種類１４６−７が追加されている。このタスクの種類１４６−７はタスクが同期タスクであるか非同期タスクであるかを示す情報が格納されている。
更に本実施例では図４に示す一般的・タスク非同期ディスパッチ処理に代えて図２６に示す一般的・タスク非同期ディスパッチ処理が実行される。図２６に示す処理には、図４に示す処理に更にＳ７０５〜Ｓ７０７が追加されており、図２６に示す処理を実行すると、非同期用のプロセッサ１８０Ａ−２に対して、同期タスクの実行順序を管理しつつディスパッチを実行することができる。【００９０】
ディスパッチャ１４１Ａは、タスク管理テーブル１４３−２の実行可能タスクキュー１４４より、先頭のＴＣＢ１４６を選定する（Ｓ７０１）。すなわち、ディスパッチャ１４１Ａは、実行可能タスクキュー１４４のポインタが示すＴＣＢ１４６Ａを選定する。ディスパッチャ１４１Ａは、実行可能タスクキュー先頭のＴＣＢ１４６が同期タスクか確認する（Ｓ７０５）。この確認は、ＴＣＢ１４６のタスクの種類１４６−７を確認することによって行われる。このＴＣＢ１４６が非同期タスクであればＳ７０２を実行する。ＴＣＢ１４６が同期タスクであれば（Ｓ７０５：ＹＥＳ）、ディスパッチャ１４１Ａは、実行可能タスクキュー先頭のＴＣＢ１４６が同期タスク順序管理キュー１４８の先頭のタスクと同一か確認する（Ｓ７０６）。すなわち、この確認により同期タスクが非同期実行用プロセッサで処理される順番を制御することができる。もし、実行可能タスクキュー先頭のＴＣＢ１４６が同期タスク順序管理キュー１４８の先頭のタスクと同一であれば（Ｓ７０６：ＹＥＳ）、Ｓ７０２を実行する。【００９１】
実行可能タスクキュー先頭のＴＣＢ１４６が同期タスク順序管理キュー１４８の先頭のタスクと同一でない場合は（Ｓ７０５：ＮＯ）、実行順序待機中なので実行可能タスクキューの先頭のＴＣＢを、実行可能タスクキューの最後尾に繋ぎ直す（Ｓ７０７）。繋ぎなおした後に、再びＳ７０１に戻る。【００９２】
Ｓ７０５またはＳ７０６にて実行可能タスクが選定されると、ディスパッチャ１４１Ａは、選定したＴＣＢ１４６Ａより、プログラムカウンタ情報１４６−２の情報をプログラムカウンタ１８０Ａ−２ａに格納し、汎用レジスタ情報１４６−３の情報を汎用レジスタ１８０Ａ−２ｂに格納し、制御レジスタの情報１４６−４を制御レジスタ１８０Ａ−２ｃに格納する（Ｓ７０２）。ディスパッチャ１４１Ａは、実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅを待機状態タスクキュー１４５の最後尾に追加する。すなわち、ディスパッチャ１４１Ａは、待機状態タスクキュー１４５のポインタが示すＴＣＢ１４６Ｃから、ＴＣＢ１４６のポインタ１４６−０がｎｕｌｌになる最後尾のＴＣＢ１４６Ｄまで辿り、最後尾のＴＣＢ１４６Ｄのポインタ１４６−０にＴＣＢ１４６Ｅを示すポインタを設定し、ＴＣＢ１４６Ｅのポインタ１４６−０にｎｕｌｌを設定する。ディスパッチャ１４１Ａは、実行可能タスクキュー１４４の先頭から選定したＴＣＢ１４６Ａを実行中タスク１４７として設定する。すなわち、ディスパッチャ１４１Ａは、ＴＣＢ１４６Ａを示すポインタを実行中タスク１４７のポインタに設定する（Ｓ７０３）。また、ディスパッチャ１４１Ａは、実行可能タスクキュー１４４のポインタに、ＴＣＢ１４６Ａの次に位置するＴＣＢ１４６Ｂを示すポインタを設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２に実行を指示する（Ｓ７０４）。
この処理ステップにより、複数の同期タスクが非同期実行用プロセッサにて実行され、複数計算機間での同期を一時的にとらない場合においても、計算機内での実行順序を規定することができる。【００９３】
−−−同期タスクの非同期への変更−−−
更に本実施形態では、図１３に示す処理に代えて図２７に示す処理を用いて、同期用のプロセッサ１８０Ａ−１から非同期用のプロセッサ１８０Ａ−２にタスクを割り当てるプロセッサを変更する。図２７においては図１３におけるＳ７４４に変えてＳ７４５が実行される結果、同期タスクの実行をシリアライズするための登録処理が行われる。
オペレーティングシステム１４０Ａが、ディスパッチャ１４１Ａにタスク１２０Ｂを非同期にするように指示した場合（Ｓ７４０）、ディスパッチャ１４１Ａは、同期用のプロセッサ１８０Ａ−１が実行しているタスク１２０Ｂの情報を回収する（Ｓ７４１）。すなわち、ディスパッチャ１４１Ａは、図５のＳ７０５、Ｓ７０６と同様に、プロセッサ１８０Ａ−１に実行を中断するように指示し、プロセッサ１８０Ａ−１のプログラムカウンタ１８０Ａ−１ａ、汎用レジスタ１８０Ａ−１ｂおよび制御レジスタ１８０Ａ−１ｃの内容を、タスク管理テーブル１８０Ａ−１に含まれる実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅに設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−１に対応するタスク管理テーブル１４３Ａ−１からタスク１２０Ｂに対応するＴＣＢ１４６Ｅを削除し（Ｓ７４２）、非同期用のプロセッサ１８０Ａ−２に対応するタスク管理テーブル１４３Ａ−２の実行可能タスクキュー１４４に、タスク１２０ＢについてのＴＣＢ１４６Ｅを登録する（Ｓ７４３）。非同期実行用プロセッサ１８０Ａ−２用タスク管理テーブル内の同期タスク順序管理キュー１４８の最後尾にタスク１２０Ｂへのリンク１４９を登録する（Ｓ７４５）。【００９４】
これにより、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−２の実行可能タスクキュー１４４に登録されたＴＣＢ１４６Ｅに基づいて、図２６に示すディスパッチを行い、プロセッサ１８０Ａ−２においてタスク１２０Ｂが実行される。【００９５】
−−−非同期タスクの同期への変更−−−
更に本実施形態では、図１４に示す処理に代えて図２８に示す処理を用いて、非同期用のプロセッサ１８０Ａ−２から同期用のプロセッサ１８０Ａ−１にタスクを割り当てるプロセッサを変更する。図２８においては、図１４の処理に更にＳ７５７が追加されることによって、同期タスクのシリアライズが行われる。
オペレーティングシステム１４０Ａが、ディスパッチャ１４１Ａにタスク１２０Ｂを同期するように指示した場合（Ｓ７５０）、ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２が実行しているタスク１２０Ｂの情報を回収する（Ｓ７５１）。すなわち、ディスパッチャ１４１Ａは、図５のＳ７０５、Ｓ７０６と同様に、プロセッサ１８０Ａ−２に実行を中断するように指示し、プロセッサ１８０Ａ−２のプログラムカウンタ１８０Ａ−２ａ、汎用レジスタ１８０Ａ−２ｂおよび制御レジスタ１８０Ａ−２ｃの内容を、タスク管理テーブル１８０Ａ−２に含まれる実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅに設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２に対応するタスク管理テーブル１４３Ａ−２からタスク１２０Ｂに対応するＴＣＢ１４６Ｅを削除し（Ｓ７５２）、非同期実行用プロセッサ１８０Ａ−２用タスク管理テーブル内の同期タスク順序管理キュー１４８からタスク１２０Ｂへのリンクを削除する（Ｓ７５２）。【００９６】
その後、同期用のプロセッサ１８０Ａ−１に対応するタスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に、タスク１２０ＢについてのＴＣＢ１４６Ｅを登録する（Ｓ７５３）。これにより、ディスパッチャ１４１Ａは、図６のＳ７１２〜７１４と同様に計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ−１４６Ｂを通信インターフェース１６０および１５０を介して交換し（Ｓ７５４）、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６との両方に基づいて、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ７５５）。これにより、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されたＴＣＢ１４６Ｅに基づいて、図２６に示すディスパッチを行い、プロセッサ１８０Ａ−１においてタスク１２０Ｂが実行される（Ｓ７５６）。
【実施例３】
【００９７】
更に他の実施形態を示す。本実施形態は、実施例１又は実施例２において、メモリ回収タスクの同期用プロセッサによる実行を抑制するための構成を示す。尚、本実施例において特に説明しない限り、システムの構成、処理は実施例１または実施例２と同様である。【００９８】
−−−プロセッサ毎メモリ回収機能を含むシステム構成−−−
本実施形態は、図１に示すシステム構成に代えて図２９に示すシステム構成を有する。図２９に示すシステムは、図１のシステムに加えて、メモリ回収タスクプログラム１２０Ｃを有し、またオペレーティングシステム１４０Ａ内にプロセッサ毎メモリ回収閾値管理テーブル１１３を含む。【００９９】
−−−プロセッサ毎メモリ回収機能の処理−−−
図３０は、メモリ取得時にメモリ取得前にフォアグラウンドで行われるメモリ回収処理とバックグラウンドにて行われるメモリ回収処理における、メモリ回収タスクの処理の一例である。この処理はメモリ回収タスクプログラム１２０Ｃが実行されることによって行われる。
メモリ回収タスクはタスク管理テーブル１４３よりメモリ回収タスクを実行するＣＰＵを検知する（Ｓ１２１）。すなわち、プロセッサ毎に設定されているメモリ回収閾値を取得するため、まずはメモリ回収タスクを実行する可能性のあるプロセッサの識別を行う。次に検知されたプロセッサ毎に、当該プロセッサについてのメモリ回収閾値以下に現在のメモリ空き容量が達し、メモリを圧迫しているかを確認する（Ｓ１２２）。メモリ空き容量がメモリ回収閾値以下に達していた場合、当該プロセッサにメモリ回収を実行させる（Ｓ１２３）。非同期用プロセッサは同期用プロセッサよりも高い頻度でメモリ回収タスクが稼動する様に、非同期用プロセッサのメモリ回収閾値は同期用プロセッサのメモリ回収閾値より厳しく（大きく）してある。この結果、図１１や図１２に示した様な同期タスクがメモリ取得の一環でフォアグラウンドにてメモリ回収タスクを動作させることを、抑止することができる。【０１００】
尚、メモリ回収タスクは一例である。その他のタスクについても、同期用プロセッサと非同期用プロセッサとでタスクの実行契機の判断基準となる閾値を異なる値にしておくことによって、同期用プロセッサではなく非同期用プロセッサに当該タスクをなるべく実行させ、あるいは逆に非同期用プロセッサではなく同期用プロセッサに当該タスクをなるべく実行させるよう構成することができる。
【実施例４】
【０１０１】
更に他の実施形態を示す。本実施形態は、実施例１乃至実施例３において、タスクを同期用プロセッサ又は非同期用プロセッサに割り当てる際の処理の一例を示す。尚、本実施例において特に説明しない限り、システムの構成、処理は実施例１乃至実施例３と同様である。【０１０２】
−−−システム構成−−−
−−−同期および非同期タスクの定義テーブルの配置−−−
図３１に示すシステムは、図２９に示すシステムに加えて、記録媒体６００および同期タスク非同期タスク定義テーブル６１０を含む。同期タスク非同期タスク定義テーブル６１０は、図３１に示す記録媒体６００の他、外部の記録媒体に置くことも可能である。【０１０３】
−−−本実施形態の同期タスクおよび非同期タスクの定義テーブルの内容−−−
図３２は、計算機１００Ａの同期タスク非同期タスク定義テーブル６１０の内容の一例である。同期タスク非同期タスク定義テーブル６１０には、タスク名６１０−１と、実行時のタスクＩＤ６１０−２、タスクの種別６１０−３、同期用プロセッサ項目６１０−４、および非同期用プロセッサ項目６１０−５が格納されている。タスクの種別には、「同期」「非同期」「同期・非同期」があっる。「同期」はタスクを同期タスクとして起動する場合、「非同期」はタスクを非同期タスクとして起動する場合、「同期・非同期」はタスクを同期タスクとしてでも非同期タスクとしてでも起動可能な場合をあらわす。同期プロセッサ項目６１０−４は、タスクの種別６１０−３が「同期」又は「同期・非同期」の場合に当該タスクを実行する同期用プロセッサを指定する情報である。非同期プロセッサ項目６１０−５は、タスクの種別が「同期」である場合には当該同期タスクが一時的な非同期処理を行う場合にその非同期処理を実行するべき非同期用プロセッサを指定する情報であり、タスクの種別が「非同期」または「同期・非同期」である場合に当該タスクを実行すべき非同期用プロセッサを指定する情報である。【０１０４】
本実施例では２つのプロセッサを有する計算機での例を示すが、２つ以上のプロセッサを有する計算機であっても同期タスク非同期タスク定義テーブル６１０は利用可能である。【０１０５】
−−−タスクを管理するＴＣＢの内容−−−
図３１に示すシステムが有するタスク管理テーブル１４３は、図３に示すタスク管理テーブルとは異なる構成を有する。具体的にはタスク管理テーブル１４３内のＴＣＢ１４６の構成が異なる。そこで図３３にＴＣＢ１４６の構成の一例を示す。図３３に示すＴＣＢ１４６は、図３に示すＴＣＢに加え、同期タスクや非同期タスクなどタスクの種類を示すタスクの種類１４６−７、同期タスクを実行する同期用プロセッサを指定する同期実行時プロセッサ識別子１４６−８、同期タスクの中で一時的に非同期処理を行う場合にその非同期処理を実行する非同期用プロセッサ、もしくは非同期タスクを実行する非同期用プロセッサを指定する非同期実行時プロセッサ識別子１４６−９の項目を有する。【０１０６】
−−−同期タスクの非同期への変更−−−
図３４は、同期用のプロセッサ１８０Ａ−１から非同期用のプロセッサ１８０Ａ−２にタスクを割り当てるプロセッサを変更する際、非同期用プロセッサを定義情報から判定し非同期処理を行う方法を説明する図である。  
オペレーティングシステム１４０Ａが、ディスパッチャ１４１Ａにタスク１２０Ｂを非同期にするように指示した場合（Ｓ７４０）、ディスパッチャ１４１Ａは、同期用のプロセッサ１８０Ａ−１が実行しているタスク１２０Ｂの情報を回収する（Ｓ７４１）。すなわち、ディスパッチャ１４１Ａは、図５のＳ７０５、Ｓ７０６と同様に、プロセッサ１８０Ａ−１に実行を中断するように指示し、プロセッサ１８０Ａ−１のプログラムカウンタ１８０Ａ−１ａ、汎用レジスタ１８０Ａ−１ｂおよび制御レジスタ１８０Ａ−１ｃの内容を、タスク管理テーブル１８０Ａ−１に含まれる実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅに設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−１に対応するタスク管理テーブル１４３Ａ−１からタスク１２０Ｂに対応するＴＣＢ１４６Ｅを削除する（Ｓ７４２）。【０１０７】
ディスパッチャ１４１Ａは、タスク１２０ＢのＴＣＢ１４６Ｅの非同期実行時プロセッサ識別子１４６−９より、タスク１２０Ｂが実行される非同期用プロセッサ識別子を取得する。すなわち、非同期用プロセッサ１８０Ａ−２であるという情報を取得する（Ｓ１０００）。非同期用のプロセッサ１８０Ａ−２に対応するタスク管理テーブル１４３Ａ−２の実行可能タスクキュー１４４に、タスク１２０ＢについてのＴＣＢ１４６Ｅを登録する（Ｓ７４３）。非同期実行用プロセッサ１８０Ａ−２用タスク管理テーブル内の同期タスク順序管理キュー１４８の最後尾にタスク１２０Ｂへのリンクを登録する（Ｓ７４５）。【０１０８】
これにより、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−２の実行可能タスクキュー１４４に登録されたＴＣＢ１４６Ｅに基づいて、図２６に示すディスパッチを行い、プロセッサ１８０Ａ−２においてタスク１２０Ｂが実行される。【０１０９】
−−−非同期タスクの同期への変更−−−
図３５は、非同期用のプロセッサ１８０Ａ−２から同期用のプロセッサ１８０Ａ−１にタスクを割り当てるプロセッサを変更する際のシリアライズ完了処理を説明する図である。
オペレーティングシステム１４０Ａが、ディスパッチャ１４１Ａにタスク１２０Ｂを同期するように指示した場合（Ｓ７５０）、ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２が実行しているタスク１２０Ｂの情報を回収する（Ｓ７５１）。すなわち、ディスパッチャ１４１Ａは、図５のＳ７０５、Ｓ７０６と同様に、プロセッサ１８０Ａ−２に実行を中断するように指示し、プロセッサ１８０Ａ−２のプログラムカウンタ１８０Ａ−２ａ、汎用レジスタ１８０Ａ−２ｂおよび制御レジスタ１８０Ａ−２ｃの内容を、タスク管理テーブル１８０Ａ−２に含まれる実行中タスク１４７のポインタが示すＴＣＢ１４６Ｅに設定する。ディスパッチャ１４１Ａは、プロセッサ１８０Ａ−２に対応するタスク管理テーブル１４３Ａ−２からタスク１２０Ｂに対応するＴＣＢ１４６Ｅを削除し（Ｓ７５２）、非同期実行用プロセッサ１８０Ａ−２用タスク管理テーブル内の同期タスク順序管理キュー１４８からタスク１２０Ｂへのリンクを削除する（Ｓ７５６）。【０１１０】
ディスパッチャ１４１Ａは、タスク１２０ＢのＴＣＢ１４６Ｅの同期実行プロセッサ識別子１４６−８より、タスク１２０Ｂが実行される同期用プロセッサ識別子を取得する。すなわち、１８０Ａー１であるという情報を取得する（Ｓ１００１）。その後、同期用のプロセッサ１８０Ａ−１に対応するタスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に、タスク１２０ＢについてのＴＣＢ１４６Ｅを登録する（Ｓ７５３）。これにより、ディスパッチャ１４１Ａは、図６のＳ７１２〜７１４と同様に計算機１００Ｂのディスパッチャ１４１Ｂとの間で、タスク管理テーブル１４３Ａ−１およびタスク管理テーブル１４３Ｂ−１内の実行可能タスクキュー１４４に格納されているＴＣＢ１４６Ａ−１４６Ｂを通信インターフェース１６０および１５０を介して交換し（Ｓ７５４）、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６と、タスク管理テーブル１４３Ｂ−１の実行可能タスクキュー１４４に登録されているＴＣＢ１４６との両方に基づいて、次にプロセッサ１８０Ａ−１に割り当てるべきタスクを選定する（Ｓ７５５）。【０１１１】
これにより、ディスパッチャ１４１Ａは、タスク管理テーブル１４３Ａ−１の実行可能タスクキュー１４４に登録されたＴＣＢ１４６Ｅに基づいて、図２６に示すディスパッチを行い、プロセッサ１８０Ａ−１においてタスク１２０Ｂが実行される。【０１１２】
−−−タスクの起動処理−−−
図３６は、同期タスク・非同期タスク、またはメモリ回収タスクのように必要に応じて同期タスクからも非同期タスクからも起動されるタスクの起動プロセスを説明する図である。図３６に示す処理をディスパッチャ１４１によって実行される。【０１１３】
タスクが起動される場合、ディスパッチャ１４１は記録媒体６００内の同期タスク非同期タスク管理テーブル６１０より、起動を指定されたタスク名６１０−１を選出する（Ｓ１００２）。該当したタスク名６１０−１の行からタスクの種類６１０−３を参照し、該当タスクの種類が同期か、非同期か、または同期,非同期両方かを判定する。【０１１４】
同期タスクと判断された場合、当該タスクを６１０−４に示されるプロセッサで実行するために、メモリ確保などの起動処理を実行する（Ｓ１００６）。更に、該当タスク用ＴＣＢ１４６を生成し、ＴＣＢ１４６内のタスクの種類１４６−７に該当する同期タスク非同期タスク定義テーブル６１０のタスクの種類６１０−３の情報を書き込み、ＴＣＢ１４６内の同期実行時プロセッサ識別子１４６−８に該当する同期タスク非同期タスク定義テーブル６１０の同期プロセッサ６１０−４を書き込み、ＴＣＢ１４６内の非同期実行時プロセッサ識別子１４６−９に該当する同期タスク非同期タスク定義テーブル６１０の非同期プロセッサ６１０−９の情報を書き込む（Ｓ１００７）。ディスパッチャ１４１は当該タスクのＴＣＢ１４６を同期実行時プロセッサ識別子１４６−８にて示されるプロセッサのタスク管理テーブル１４３Ａ−１へ登録する（Ｓ１００８）
ステップＳ１００３で非同期タスクと判断された場合（Ｓ１００３：ＹＥＳ）、当該タスクを６１０−５に示されるプロセッサで実行するために、メモリ確保などの起動処理を実行する（Ｓ１０１０）。該当タスク用ＴＣＢ１４６を生成し、ＴＣＢ１４６内のタスクの種類１４６−７に該当する同期タスク非同期タスク定義テーブル６１０のタスクの種類６１０−３の情報を書き込み、ＴＣＢ１４６内の同期実行時プロセッサ識別子１４６−８に該当する同期タスク非同期タスク定義テーブル６１０の同期プロセッサ６１０−４を書き込み、ＴＣＢ１４６内の非同期実行時プロセッサ識別子１４６−９に該当する同期タスク非同期タスク定義テーブル６１０の非同期プロセッサ６１０−５の情報を書き込む（Ｓ１００７）。ディスパッチャ１４１は当該タスクのＴＣＢ１４６を１４６−９にて示されるプロセッサのタスク管理テーブル１４３Ａ−２へ登録する（Ｓ１０１１）。【０１１５】
ステップＳ１００３で「同期・非同期」タスクと判断された場合、該当タスクの起動を指示した親タスクの実行プロセッサ識別子が、同期タスク非同期タスク管理テーブル６１０の同期プロセッサ６１０−４に含まれるか確認する（Ｓ１００４）。同期プロセッサ６１０−４に含まれる場合はＳ１００６へ進み（Ｓ１００４：ＹＥＳ）、同期タスクとしての起動ステップを踏む。同期プロセッサ６１０−４に該当しない場合は（Ｓ１００４：ＮＯ）、該当タスクの起動を指示した親タスクの実行プロセッサ識別子が同期タスク非同期タスク管理テーブル６１０の非同期プロセッサ６１０−５に含まれるか確認する（Ｓ１００５）。非同期プロセッサ６１０−５に含まれる場合はＳ１０１０に進み（Ｓ１００５：ＹＥＳ）、非同期タスクとしての起動ステップを踏む。その他該当タスクの起動を指示した親タスクの実行プロセッサ識別子が同期タスク非同期タスク管理テーブル６１０の非同期プロセッサ６１０−５に含まれない場合は想定外の起動指示としてタスクの起動を中止し起動を終了する（Ｓ１００５：ＮＯ）。【０１１６】
以上、本発明について、その実施の形態に基づき具体的に説明したが、本発明はこれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。【０１１７】
例えば発明の実施形態を、以下のようにとらえることもできる。【０１１８】
（１）複数のタスクを時分割で実行する計算機であって、
他の計算機と通信可能に接続され、
前記タスクを実行するタスク処理部と、
前記各タスクについて、前記タスクの状態を示す情報であるタスク制御ブロックを記憶する管理テーブルと、
前記他の計算機から前記管理テーブルを取得する管理テーブル取得部と、
前記タスク処理部が実行しているタスクである実行中タスクを、他のタスクである切替タスクに切り替えるべきタイミングである切替可能ポイントを検出する切替可能ポイント検出部と、
前記切替可能ポイントが検出された場合に、当該計算機が備える前記管理テーブルに記憶されている前記タスク制御ブロックと、前記他の計算機から取得した前記管理テーブルに含まれる前記タスク制御ブロックとに基づいて前記切替タスクを決定し、前記タスク処理部が実行するタスクを前記切替タスクに切り替えるディスパッチャと、を備える計算機。【０１１９】
（２）（１）に記載の計算機であって、
前記複数の計算機のそれぞれにおいて、前記切替可能ポイントが検出されたか否かを示す切替情報を交換する切替情報交換部を備え、
前記ディスパッチャは、前記切替情報に基づいて前記各計算機が前記切替可能ポイントを検出したか否かを判定し、所定数の前記計算機が前記切替可能ポイントを検出している場合に、前記切替タスクを決定する計算機。（３）（１）に記載の計算機であって、
前記切替可能ポイント検出部は、前記実行中タスクが所定の命令を呼び出したか否かにより、前記切替可能ポイントを検出する計算機。【０１２０】
（４）（３）に記載の計算機であって、
前記所定の命令は、前記実行中タスク以外のタスクから値を取得する命令であること、を特徴とする計算機。【０１２１】
（５）（３）に記載の計算機であって、
前記所定の命令は、ユーザプログラムからオペレーティングシステムに対するシステムコールであること、を特徴とする計算機。【０１２２】
（６）（３）に記載の計算機であって、
前記実行中タスクに含まれる条件分岐、前記条件分岐において用いられる変数に値を設定する命令を特定する条件分岐特定部を備え、
前記所定の命令は、前記条件分岐において用いられる変数に値を設定する命令であること、を特徴とする計算機。【０１２３】
（７）（１）に記載の計算機であって、
前記管理テーブルには、前記実行中タスクに係る前記タスク制御ブロックを格納する第１の格納領域と、実行可能な状態にある前記タスクに係る前記タスク制御ブロックを格納する第２の格納領域と、待ち状態にある前記タスクに係る前記タスク制御ブロックを格納する第３の格納領域とが含まれ、
前記ディスパッチャは、当該計算機が備える前記管理テーブルに含まれる前記第２の格納領域と、前記他の計算機から取得した前記管理テーブルに含まれる前記第２の格納領域との両方に格納されている前記タスク制御ブロックに対応する前記タスクを前記切替タスクとして決定すること、を特徴とする計算機。【０１２４】
（８）（７）に記載の計算機であって、
前記タスク制御ブロックには前記タスクの優先度が設定され、
前記ディスパッチャは、当該計算機が備える前記管理テーブルに含まれる前記第２の格納領域と、前記他の計算機から取得した前記管理テーブルに含まれる前記第２の格納領域との両方に格納されている前記タスク制御ブロックが複数存在する場合、前記タスク制御ブロックの前記優先度に応じて前記切替タスクを決定すること、を特徴とする計算機。【０１２５】
（９）（３）に記載の計算機であって、
前記タスクを特定する情報に対応付けて、前記切替可能ポイントを検出するための前記命令を記憶する命令記憶部を備え、
前記切替可能ポイント検出部は、前記実行中タスクに対応する前記命令を前記命令記憶部から読み出し、前記読み出した命令を前記実行中タスクが呼び出すか否かにより、前記切替可能ポイントを検出すること、を特徴とする計算機。【０１２６】
（１０）（３）に記載の計算機であって、
前記所定の命令は、所定のＡＰＩとして定義されている関数の呼び出しであること、を特徴とする計算機。【０１２７】
（１１）（１）に記載の計算機であって、
オペレーティングシステムが動作し、
前記オペレーティングシステムはユーザプログラムを実行し、
前記切替可能ポイント検出部は、前記実行中タスクが前記ユーザプログラムに係るタスクである場合に、前記実行中タスクに応じて、前記実行中タスクに含まれている所定の命令の実行前の時点、または、前記所定の命令の実行後の時点のいずれかを前記切替可能ポイントとして決定すること、を特徴とする計算機。【０１２８】
（１２）（１）に記載の計算機であって、
タスク間通信を行うタスクを特定する情報に対応付けて、前記タスク間通信の通信状態を示す情報を記憶するシグナル管理テーブルと、
前記他の計算機から前記シグナル管理テーブルを取得するシグナル管理テーブル取得部と、を備え、
前記ディスパッチャは、前記切替タスクを決定する際に、当該計算機が備える前記シグナル管理テーブルに記憶されている前記通信状態を示す情報と、前記他の計算機から取得した前記シグナル管理テーブルに含まれる前記通信状態を示す情報とが一致するタスクを決定すること、を特徴とする計算機。【０１２９】
（１３）（１）に記載の計算機であって、
第１および第２の前記タスク処理部を有し、
前記ディスパッチャは、
前記第１のタスク処理部について前記切替タスクを決定する場合には、当該計算機が備える前記管理テーブルに記憶されている前記タスク制御ブロックと、前記他の計算機から取得した前記管理テーブルに記憶されている前記タスク制御ブロックとに基づいて、前記切替タスクを決定し、
前記第２のタスク処理部について前記切替タスクを決定する場合には、当該計算機が備える前記管理テーブルに記憶されている前記タスク制御ブロックのみに基づいて、前記切替タスクを決定すること、を特徴とする計算機。【０１３０】
（１４）（１３）に記載の計算機であって、
前記タスクの処理に応じて、前記タスクを前記第１および第２のタスク処理部のいずれかに割り当てるタスク割当部を備えること、を特徴とする計算機。【０１３１】
（１５）（１４）に記載の計算機であって、
前記第１のタスク処理部に割り当てられている第１のタスクが、当該タスクの割り当てを前記第１のタスク処理部から前記第２のタスク処理部に変更するタイミングを指定する命令である切替可能シグナルを呼び出した場合に、前記ディスパッチャは、前記第１のタスクを他の第２のタスクに切り替え、前記タスク割当部は、前記第１のタスクを前記第２のタスク処理部に割り当てること、を特徴とする計算機。【０１３２】
（１６）（２）に記載の計算機であって、
前記ディスパッチャは、所定時間内に前記所定数の前記計算機が前記切替可能ポイントを検出したか否かを判定し、
前記所定時間内に前記切替可能ポイントを検出していない他の前記計算機に対して、同期が外れた旨を通知する同期外通知部を備えること、を特徴とする計算機。【０１３３】
（１７）（１６）に記載の計算機であって、
前記他の計算機と通信可能に接続される多数決機に通信可能に接続され、
前記同期外通知部はさらに、前記所定時間内に前記切替可能ポイントを検出していない前記他の計算機である同期外計算機を指定して、前記同期外計算機の同期が外れた旨を示す同期外通知を前記多数決機に送信し、
前記多数決機は、
前記同期外通知を受信する同期外通知受信部と、
前記同期外通知に指定された前記同期外計算機以外の前記計算機による演算結果を比較して、同一になった数の最も多い前記演算結果を出力する多数決出力部と、を特徴とする計算機。【０１３４】
（１８）（１）に記載の計算機であって、
前記他の計算機と通信可能に接続される多数決機と通信可能に接続され、
前記多数決機は、
前記計算機による演算結果を比較して、同一になった数の最も多い前記演算結果である多数決結果を出力する多数決出力部と、
前記多数決結果と異なる前記演算結果を出力した前記計算機を前記各計算機に通知するエラー通知部とを備え、
前記ディスパッチャは、当該計算機が備える前記管理テーブルに記憶されている前記タスク制御ブロックと、前記多数決結果と異なる前記演算結果を出力した前記計算機以外の前記計算機から取得した前記管理テーブルに記憶されている前記タスク制御ブロックとに基づいて、前記切替タスクを決定すること、を特徴とする計算機。【０１３５】
（１９）（１）に記載の計算機であって、
計算機個別のエラーが発生したとき、エラー情報を計算機間で通信し、計算機間で同期をとってエラー処理を行うこと、を特徴とする計算機。【０１３６】
（２０）（１）に記載の計算機であって、
タスクにおいてプログラムエラーが発生したとき、ディスパッチャが当該エラーを同期して処理すること、を特徴とする計算機。【０１３７】
（２１）複数のタスクを時分割で実行する計算機の制御方法であって、
他の前記計算機と通信可能に接続され、前記タスクを実行するタスク処理部と、
前記各タスクについて、前記タスクの状態を示す情報であるタスク制御ブロックを記憶する管理テーブルとを備える計算機が、
前記タスク処理部が実行しているタスクである実行中タスクを、他のタスクである切替タスクに切り替えるべきタイミングである切替可能ポイントを検出し、
前記他の計算機から前記管理テーブルを取得し、
前記切替可能ポイントが検出された場合に、当該計算機が備える前記管理テーブルに記憶されている前記タスク制御ブロックと、前記他の計算機から取得した前記管理テーブルに含まれる前記タスク制御ブロックとに基づいて前記切替タスクを決定し、
前記タスク処理部が実行するタスクを前記切替タスクに切り替えること、を特徴とする計算機の制御方法。【０１３８】
（２２）複数のタスクを時分割で実行するためのプログラムであって、
他の前記計算機と通信可能に接続され、前記タスクを実行するタスク処理部と、前記各タスクについて、前記タスクの状態を示す情報であるタスク制御ブロックを記憶する管理テーブルとを備える計算機に、
前記タスク処理部が実行しているタスクである実行中タスクを、他のタスクである切替タスクに切り替えるべきタイミングである切替可能ポイントを検出するステップと、
前記他の計算機から前記管理テーブルを取得するステップと、
前記切替可能ポイントが検出された場合に、当該計算機が備える前記管理テーブルに記憶されている前記タスク制御ブロックと、前記他の計算機から取得した前記管理テーブルに含まれる前記タスク制御ブロックとに基づいて、前記切替タスクを決定するステップと、
前記タスク処理部が実行するタスクを前記切替タスクに切り替えるステップと、を実行させるためのプログラム。【０１３９】
（２３）（１５）に記載の計算機であって、
前記タスクの状態を示す情報であるタスク制御ブロックを記憶する前記管理テーブルには、前記実行中タスクに係る前記タスク制御ブロックを格納する第１の格納領域と、実行可能な状態にある前記タスクに係る前記タスク制御ブロックを格納する第２の格納領域と、待ち状態にある前記タスクに係る前記タスク制御ブロックを格納する第３の格納領域と、前記第１のタスク処理部に割り当てられている第１のタスクが、当該タスクの割り当てを前記第１のタスク処理部から前記第２のタスク処理部に変更するタイミングの順序を格納する第４の格納領域と、
を備える計算機。【０１４０】
（２４）（２３）に記載の計算機であって、
前記第１のタスク処理部に割り当てられている第１のタスクが、当該タスクの割り当てを前記第１のタスク処理部から前記第２のタスク処理部に変更するタイミングを指定する命令である切替可能シグナルを呼び出した場合に、前記ディスパッチャは、前記第１のタスクを他の第２のタスクに切り替え、前記第１のタスク処理部に割り当てられている第１のタスクが、当該タスクの割り当てを前記第１のタスク処理部から前記第２のタスク処理部に変更するタイミングの順序を格納する第４の格納領域に追加登録し、前記タスク割当部は、前記第４の格納領域にて実行順序が訪れたときのみ前記第１のタスクを前記第２のタスク処理部に割り当てること、
を特徴とする計算機。【０１４１】
（２５）（２３）に記載の計算機であって、
前記第２のタスク処理部に割り当てられている第１のタスクが、当該タスクの割り当てを前記第２のタスク処理部から前記第１のタスク処理部に変更するタイミングを指定する命令である切替可能シグナルを呼び出した場合に、前記ディスパッチャは、前記第４の格納領域から当該タスクの前記順序情報を削除し、前記第２のタスク処理部に割り当てられている第１のタスクが、当該タスクの割り当てを前記第２のタスク処理部から前記第１のタスク処理部に割り当てること、
を特徴とする計算機。【０１４２】
（２６）（１５）に記載の計算機であって、
前記第１のタスク処理部と第２のタスク処理部で実行するメモリ回収タスクと、
前記メモリ回収タスクが起動するメモリ空き容量状況の閾値を格納するタスク処理部毎メモリ回収閾値管理格納部と、
を有する特徴とする計算機。【０１４３】
（２７）（２６）に記載の計算機であって、
前記タスク処理部毎メモリ回収閾値管理処理部に、前記同期タスクが実行される処理部のメモリ回収閾値よりも他のタスク処理部でのメモリ回収閾値が先に閾値条件に合致する閾値有し、同期タスク実行処理部より先に他のタスク処理部にてメモリ回収を実行すること、
を特徴とする計算機。
【符号の説明】
【０１４４】
１０  計算機システム
１００Ａ，１００Ｂ  計算機
１１０Ａ、１１０Ｂ  メモリ
１２０Ａ、１２０Ｂ  タスクプログラム
１４０Ａ、１４０Ｂ  オペレーティングシステム
１４１Ａ、１４１Ｂ  ディスパッチャ
１４２Ａ、１４２Ｂ  タスク間メッセージ管理テーブル
１４３Ａ−１、１４３Ａ−２  タスク管理テーブル
１４３Ｂ−１、１４３Ｂ−２  タスク管理テーブル
１１１Ａ、１１１Ｂ  同期計算機管理テーブル
１１２Ａ、１１２Ｂ  シグナル管理テーブル
１４４  実行可能タスクキュー
１４５  待機状態タスクキュー
１４６  ＴＣＢ
１４７  実行中タスク
１３０Ａ、１３０Ｂ  タスク制御用共有メモリ区画
１５０Ａ、１５０Ｂ  通信インターフェース
１６０Ａ、１６０Ｂ  通信インターフェース
１７０Ａ、１７０Ｂ  タイマー
１８０Ａ−１、１８０Ａ−２、１８０Ｂ−１、１８０Ｂ−２  プロセッサ
１８０Ａ−１ａ、１８０Ａ−２ａ  プログラムカウンタ
１８０Ａ−１ｂ、１８０Ａ−２ｂ  汎用レジスタ
１８０Ａ−１ｃ、１８０Ａ−２ｃ  制御レジスタ
１９０Ａ、１９０Ｂ  バス
１４８  同期タスク順序管理キュー
１４９  同期タスク順序管理用ポインタ
１２０Ｃ  メモリ回収タスクプログラム
１１３Ｂ  プロセッサ毎メモリ回収閾値管理テーブル
６００  記録媒体
６１０  同期タスク非同期タスク定義テーブル
【図１】
2011105226.tif 000003
【図２】
2011105226.tif 000004
【図３】
2011105226.tif 000005
【図４】
2011105226.tif 000006
【図５】
2011105226.tif 000007
【図６】
2011105226.tif 000008
【図７】
2011105226.tif 000009
【図８】
2011105226.tif 000010
【図９】
2011105226.tif 000011
【図１０】
2011105226.tif 000012
【図１１】
2011105226.tif 000013
【図１２】
2011105226.tif 000014
【図１３】
2011105226.tif 000015
【図１４】
2011105226.tif 000016
【図１５】
2011105226.tif 000017
【図１６】
2011105226.tif 000018
【図１７】
2011105226.tif 000019
【図１８】
2011105226.tif 000020
【図１９】
2011105226.tif 000021
【図２０】
2011105226.tif 000022
【図２１】
2011105226.tif 000023
【図２２】
2011105226.tif 000024
【図２３】
2011105226.tif 000025
【図２４】
2011105226.tif 000026
【図２５】
2011105226.tif 000027
【図２６】
2011105226.tif 000028
【図２７】
2011105226.tif 000029
【図２８】
2011105226.tif 000030
【図２９】
2011105226.tif 000031
【図３０】
2011105226.tif 000032
【図３１】
2011105226.tif 000033
【図３２】
2011105226.tif 000034
【図３３】
2011105226.tif 000035
【図３４】
2011105226.tif 000036
【図３５】
2011105226.tif 000037
【図３６】
2011105226.tif 000038
【国際調査報告】
2011105226.tif 000039
2011105226.tif 000040