(57)【要約】【課題】マルチコアを構成するＣＰＵを同時並行に使用し、処理能力を向上させる。【解決手段】マスタノード２０１は、複数のＣＰＵコアの中から、アプリケーションプログラムを実行させる専用のＣＰＵコアをアプリケーションノード２０２、２０３のＣＰＵコアとして選択し、デバイスドライバを実行させる専用のＣＰＵコアをＩＯノード２０６、２０７のＣＰＵコアとして選択する。【選択図】図２
2017161954.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が含まれるデータ処理システムであって、
前記複数のＣＰＵの中から、アプリケーションプログラムを実行させる専用のＣＰＵをアプリケーションＣＰＵとして選択し、デバイスドライバを実行させる専用のＣＰＵをデバイスドライバＣＰＵとして選択するＣＰＵ選択部を有することを特徴とするデータ処理システム。
【請求項２】
前記ＣＰＵ選択部は、
複数のデバイスドライバについて、デバイスドライバごとに、デバイスドライバＣＰＵを選択することを特徴とする請求項１に記載のデータ処理システム。
【請求項３】
前記データ処理システムは、更に、
前記アプリケーションＣＰＵに前記アプリケーションプログラムの実行を指示し、前記デバイスドライバＣＰＵに前記デバイスドライバの実行を指示する実行指示部を有することを特徴とする請求項１に記載のデータ処理システム。
【請求項４】
前記データ処理システムには、
３つ以上のＣＰＵが含まれ、
前記データ処理システムは、更に、
前記アプリケーションＣＰＵの負荷状態、及び前記デバイスドライバＣＰＵの負荷状態のうちの少なくともいずれかを検出する負荷状態検出部を有し、
前記ＣＰＵ選択部は、
前記負荷状態検出部により検出された前記アプリケーションＣＰＵの負荷状態に基づき、前記アプリケーションＣＰＵに加えて新たなアプリケーションＣＰＵを選択し、
前記負荷状態検出部により検出された記デバイスドライバＣＰＵの負荷状態に基づき、前記デバイスドライバＣＰＵに加えて新たなデバイスドライバＣＰＵを選択することを特徴とする請求項１に記載のデータ処理システム。
【請求項５】
前記データ処理システムには、
３つ以上のＣＰＵが含まれ、
前記データ処理システムは、更に、
前記アプリケーションＣＰＵの応答状態、及び前記デバイスドライバＣＰＵの応答状態のうちの少なくともいずれかを検出する応答状態検出部を有し、
前記ＣＰＵ選択部は、
前記応答状態検出部により検出された前記アプリケーションＣＰＵの応答状態に基づき、前記アプリケーションＣＰＵに代えて新たなアプリケーションＣＰＵを選択し、
前記応答状態検出部により検出された前記デバイスドライバＣＰＵの応答状態に基づき、前記デバイスドライバＣＰＵに代えて新たなデバイスドライバＣＰＵを選択することを特徴とする請求項１に記載のデータ処理システム。
【請求項６】
前記アプリケーションＣＰＵは、
複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に共通するフォーマットでＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）デバイスへのリクエストを生成し、生成したリクエストを前記デバイスドライバＣＰＵに出力することを特徴とする請求項１に記載のデータ処理システム。
【請求項７】
前記データ処理システムには、
３つ以上のＣＰＵが含まれ、
前記ＣＰＵ選択部は、
前記アプリケーションＣＰＵと前記デバイスドライバＣＰＵとの間でのデータ中継を行う専用ＣＰＵをデータ中継ＣＰＵとして選択することを特徴とする請求項１に記載のデータ処理システム。
【請求項８】
前記アプリケーションＣＰＵは、
複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）で共通するフォーマットでＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）デバイスへのリクエストを生成し、生成したリクエストを前記データ中継ＣＰＵを介して前記デバイスドライバＣＰＵに出力することを特徴とする請求項７に記載のデータ処理システム。
【請求項９】
データ処理システムに含まれる３つ以上のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のうちの特定のＣＰＵが、
前記３つ以上のＣＰＵのうちの前記特定のＣＰＵを除く他のＣＰＵの中から、アプリケーションプログラムを実行させる専用のＣＰＵをアプリケーションＣＰＵとして選択し、デバイスドライバを実行させる専用のＣＰＵをデバイスドライバＣＰＵとして選択することを特徴とするデータ処理方法。
【請求項１０】
データ処理システムに含まれる３つ以上のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のうちの特定のＣＰＵに、
前記３つ以上のＣＰＵのうちの前記特定のＣＰＵを除く他のＣＰＵの中から、アプリケーションプログラムを実行させる専用のＣＰＵをアプリケーションＣＰＵとして選択し、デバイスドライバを実行させる専用のＣＰＵをデバイスドライバＣＰＵとして選択するＣＰＵ選択処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コアを有するマルチコアプロセッサに関する。
【背景技術】
【０００２】
複数のＣＰＵコアを有するマルチコアプロセッサを用いて処理時間を短くする等、効率よく処理を実行するため、ソフトウェア処理モジュールを実行する際に、処理専用のＣＰＵコアに割り当て実行させる方法（特許文献１）や、特定の処理プロセスを実行させるＣＰＵコアを割り当てる方法（特許文献２）が示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２１８４４５号公報
【特許文献２】特開２００９−２１１６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
これら従来技術ではマルチコア上で複数の独立したＯＳを定常的に動作させるため、各ＯＳがそれぞれメモリを消費し効率が悪い。
またマルチコアでアプリケーションプログラム（以下、単にアプリケーションともいう）を複数のＣＰＵで動的に負荷を分散して処理を行う対象型マルチプロセッサ（ＳＭＰ）を用いるシステムでは使用可能なコア数が多いほど並列度が高く、スループットが向上しやすいのに対し、マルチコアで複数の独立したＯＳを動作させた場合には並列動作が限定されるという課題がある。
換言すると、同じＣＰＵがアプリケーションプログラムとデバイスドライバの双方を実行する構成の場合は、並列度が低く、スループットが低いという課題がある。
【０００５】
この発明は上記のような課題を解決することを主な目的としており、マルチコアを構成するＣＰＵを同時並行に使用し、処理能力を向上させることを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係るデータ処理システムは、
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が含まれるデータ処理システムであって、
前記複数のＣＰＵの中から、アプリケーションプログラムを実行させる専用のＣＰＵをアプリケーションＣＰＵとして選択し、デバイスドライバを実行させる専用のＣＰＵをデバイスドライバＣＰＵとして選択するＣＰＵ選択部を有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、アプリケーションプログラムを実行するＣＰＵとデバイスドライバを実行するＣＰＵとを別のＣＰＵとすることができ、デバイスドライバの実行を含めて、複数のＣＰＵを同時並行に使用させることができ、処理能力を向上させることができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係る制御装置のハードウェア構成例を示す図。
【図２】実施の形態１に係る制御装置のノード構成例を示す図。
【図３】実施の形態１に係るノードの内部構成例を示す図。
【図４】実施の形態１に係るアプリケーションノードの内部構成例を示す図。
【図５】実施の形態１に係る連携ノードの内部構成例を示す図。
【図６】実施の形態１に係るＩＯノードの内部構成例を示す図。
【図７】実施の形態１に係るマスタノードの内部構成例を示す図。
【図８】実施の形態１に係るＲＯＭに記憶されているデータの例を示す図。
【図９】実施の形態１に係るＲＡＭの領域の例を示す図。
【図１０】実施の形態１に係る処理管理テーブルの構成例を示す図。
【図１１】実施の形態１に係る処理コマンドの例を示す図。
【図１２】実施の形態１に係る処理状態の例を示す図。
【図１３】実施の形態１に係るコマンドパラメータの例を示す図。
【図１４】実施の形態１に係るシステム構成情報の例を示す図。
【図１５】実施の形態１に係るアプリケーションノードの処理フローの例を示すフローチャート図。
【図１６】実施の形態１に係るアプリケーションノードの処理フローの例を示すフローチャート図。
【図１７】実施の形態１に係るマスタノードの処理フローの例を示すフローチャート図。
【図１８】実施の形態１に係る連携ノードの処理フローの例を示すフローチャート図。
【図１９】実施の形態１に係るＩＯノードの処理フローの例を示すフローチャート図。
【図２０】実施の形態１に係るＩＯノードの処理フローの例を示すフローチャート図。
【図２１】実施の形態１に係るマスタノードの処理フローの例を示すフローチャート図。
【図２２】実施の形態１に係るマスタノードの処理フローの例を示すフローチャート図。
【図２３】実施の形態１に係るノード間割込みの処理フローの例を示すフローチャート図。
【図２４】実施の形態１に係る要求処理のシーケンスの例を示す図。
【発明を実施するための形態】
【０００９】
実施の形態１．
図１は、本実施の形態に係る制御装置（データ処理システムの例）のハードウェア構成例を示す。
図１において、マルチコアＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）１００は、ＣＰＵコア１０１を複数個搭載するマルチコアプロセッサであり、ＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）インタフェースやメモリコントローラを含む。
マルチコアＳｏＣ１００には、ＩＯデバイス１１１、ＩＯデバイス１１２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１２１及びＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２２が接続されている。
ＩＯデバイス１１１及びＩＯデバイス１１２は、例えば、ディスプレイ装置等の出力装置、マウス、キーボード、スイッチ等の入力装置である。
タッチパネル式のディスプレイであってもよい。
【００１０】
図２は本実施の形態に係るマルチコアＳｏＣ１００におけるノード構成例を示す。
マスタノード２０１は、システム起動時にシステム全体の初期設定やシステム全体を管理する。
アプリケーションノード２０２及びアプリケーションノード２０３は、アプリケーションプログラムを実行する。
連携ノード２０４及び連携ノード２０５は、アプリケーションノード２０２、２０３と後述のＩＯノード２０６、２０７との間の伝達制御を行う。
ＩＯノード２０６及びＩＯノード２０７は、ＩＯデバイス１１１及びＩＯデバイス１１２を制御する。
ＩＯノード２０６はＩＯデバイス１１１の制御を専門に行い、ＩＯノード２０７はＩＯデバイス１１２の制御を専門に行う。
予備ＣＰＵコア２０８は、マルチコアＳｏＣ１００を構成するＣＰＵコア１０１のうち、前述のどのノードにも割り当てられていないＣＰＵコアである。
【００１１】
図３は、本実施の形態に係るノードの構成例を示す。
マスタノード２０１、アプリケーションノード２０２、アプリケーションノード２０３、連携ノード２０４、連携ノード２０５、ＩＯノード２０６及びＩＯノード２０７は、それぞれ、ＣＰＵコア１０１とソフトウェア３０３で構成される。
ＣＰＵコア１０１は、ソフトウェア３０３を実行する。
ソフトウェア３０３は、それぞれのノードの機能に対応するソフトウェアである。
マスタノード２０１、アプリケーションノード２０２、アプリケーションノード２０３、連携ノード２０４、連携ノード２０５、ＩＯノード２０６及びＩＯノード２０７を区別する必要がない場合は、これらを総称してノード３０１という。
ソフトウェア３０３は、ＲＯＭ１２１に記憶されており、ＲＡＭ１２２にロードされ、ＲＡＭ１２２にロードされたソフトウェア３０３の少なくとも一部をＣＰＵコア１０１が読み込んで実行することにより、ノード３０１の機能（マスタノード２０１としての機能、アプリケーションノード２０２としての機能等）が実現される。
各ノードにおけるソフトウェアの詳細は後述する。
【００１２】
図４は、本実施の形態に係るアプリケーションノード２０２の構成例を示す。
ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）４１１は、アプリケーションノード２０２で動作するアプリケーションプログラム４１４の実行管理を行う。
アプリケーションプログラム４１４は、ＣＰＵコア１０１により実行されるアプリケーションプログラムである。
１つのアプリケーションノード２０２に複数のアプリケーションプログラム４１４が存在してもよい。
ＩＯ制御インタフェースプログラム４１３は、ＩＯ制御のインタフェースとして機能する。
ノード通信制御プログラム４１２は、ノード間の要求の伝達及び通知を行う。
ＯＳ４１１、ノード通信制御プログラム４１２、ＩＯ制御インタフェースプログラム４１３及びアプリケーションプログラム４１４が、アプリケーションノード２０２におけるソフトウェア３０３（図３）である。
アプリケーションノード２０２に含まれるＣＰＵコア１０１は、複数のＣＰＵコアの中からアプリケーションプログラム４１４の実行用に選択されたれたＣＰＵコアであり、アプリケーションＣＰＵの例に相当する。
【００１３】
図２のアプリケーションノード２０３は、アプリケーションノード２０２と同じ構成を持ち、処理内容が異なるアプリケーションプログラムを実行する。
つまり、アプリケーションノード２０３は、図４と同じ構成で、アプリケーションプログラム４１４の種類がアプリケーションノード２０２とは異なる。
また、アプリケーションノード２０２とアプリケーションノード２０３で動作するＯＳ４１１は、互いに異なるＯＳであってもよい。
アプリケーションノード２０２のＯＳ４１１とアプリケーションノード２０３のＯＳ４１１が異なっていても、アプリケーションノード２０２及びアプリケーションノード２０３は、それぞれ、２つのＯＳで共通するフォーマットでＩＯデバイス１１１、１１２へのリクエスト（ＲＥＡＤリクエスト、ＷＲＩＴＥリクエスト、ＩＯ  Ｃｏｎｔｒｏｌリクエスト）を連携ノード２０４、２０５を介してＩＯノード２０６、２０７に発行する。
ＩＯノード２０６、２０７は、アプリケーションノード２０２、２０３のＯＳ４１１が異なっていても、両アプリケーションノードからのリクエストを同じように処理することができる。
【００１４】
図５は、本実施の形態に係る連携ノード２０４の構成例を示す。
ノード間データ授受制御プログラム４２１はアプリケーションノード２０２及びアプリケーションノード２０３とＩＯノード２０６及びＩＯノード２０７の間のデータの受け渡しを管理する。
ノード間データ授受制御プログラム４２１が、連携ノード２０４におけるソフトウェア３０３（図３）である。
連携ノード２０４に含まれるＣＰＵコア１０１は、アプリケーションノードのＣＰＵコア１０１とＩＯノードのＣＰＵコア１０１との間でデータ中継を行うＣＰＵコアであり、データ中継ＣＰＵの例に相当する。
【００１５】
図２の連携ノード２０５は、連携ノード２０４と同じ構成を持つ。
つまり、連携ノード２０５は、図５と同じ構成を持つ。
【００１６】
図６は、本実施の形態に係るＩＯノード２０６の構成例を示す。
ＩＯノード通信制御プログラム４３２は、ノード間の要求の伝達及び通知を行う。
ＩＯデバイス制御プログラム４３１は、ＩＯデバイス１１１の制御を行う。
ＩＯノード通信制御プログラム４３２及びＩＯデバイス制御プログラム４３１が、ＩＯノード２０６におけるソフトウェア３０３（図３）である。
なお、ＩＯノード通信制御プログラム４３２及びＩＯデバイス制御プログラム４３１はデバイスドライバを構成する。
ＩＯノード２０６に含まれるＣＰＵコア１０１は、複数のＣＰＵコアの中からデバイスドライバの実行用に選択されたれたＣＰＵコアであり、デバイスドライバＣＰＵの例に相当する。
【００１７】
なお、図２におけるＩＯノード２０７はＩＯノード２０６と同じ構成を持ち、処理内容が異なるＩＯノード通信制御プログラム４３２及びＩＯデバイス制御プログラム４３１を実行する。
つまり、ＩＯノード２０７は、図６と同じ構成を持つが、ＩＯデバイス１１２用のＩＯノード通信制御プログラム４３２及びＩＯデバイス制御プログラム４３１を実行する。
【００１８】
図７は、本実施の形態に係るマスタノード２０１の構成例を示す。
【００１９】
起動処理プログラム４４１は、マルチコアＳｏＣ１００を構成する各ノードの初期設定を行う。
より具体的には、起動処理プログラム４４１は、アプリケーションノード２０２、２０３を構成するＣＰＵコア１０１を選択する。
つまり、アプリケーションノード２０２、２０３のアプリケーションプログラム４１４を実行させるＣＰＵコア１０１を選択する。
そして、選択したＣＰＵコア１０１にアプリケーションプログラム４１４の実行を指示する。
更に、起動処理プログラム４４１は、ＩＯノード２０６、２０７を構成するＣＰＵコア１０１を選択する。
つまり、ＩＯノード２０６、２０７のデバイスドライバ（ＩＯノード通信制御プログラム４３２及びＩＯデバイス制御プログラム４３１）を実行させるＣＰＵコア１０１を選択する。
そして、選択したＣＰＵコア１０１にデバイスドライバの実行を指示する。
連携ノード２０４、２０５についても同様に、起動処理プログラム４４１は、ＣＰＵコア１０１を選択し、選択したＣＰＵコア１０１にノード間データ授受制御プログラム４２１の実行を指示する。
なお、ＣＰＵコア１０１が起動処理プログラム４４１を実行することにより、ＣＰＵ選択部及び実行指示部の機能が実現される。
【００２０】
ノード間通信制御プログラム４４２は、ノード間の要求の伝達及び通知を行う。
ノード管理プログラム４４３は、マルチコアＳｏＣ１００中のノード全体の管理を行う。
より具体的には、ノード管理プログラム４４３は、ノード３０１ごとにＣＰＵコア１０１の負荷状態を検出し、いずれかのノード３０１のＣＰＵコア１０１の負荷状態が適正ではない場合に、当該ノード３０１に対して新たなＣＰＵコア１０１を選択し、当該ノード３０１に新たなＣＰＵコア１０１を追加する。
また、ノード管理プログラム４４３は、ノード３０１ごとにＣＰＵコア１０１の応答状態を検出し、いずれかのノード３０１のＣＰＵコア１０１の応答状態が適正ではない場合に、当該ノード３０１に対して新たなＣＰＵコア１０１を選択し、当該ノード３０１に新たなＣＰＵコア１０１を追加する。
ＣＰＵコア１０１が起動処理プログラム４４１を実行することにより、負荷状態検出部、応答状態検出部及びＣＰＵ選択部の機能が実現される。
【００２１】
なお、起動処理プログラム４４１、ノード間通信制御プログラム４４２及びノード管理プログラム４４３が、マスタノード２０１におけるソフトウェア３０３（図３）である。
【００２２】
図８は、本実施の形態に係るＲＯＭ１２１に保存されているデータの例を示す。
ブートローダイメージ５１１は、システム起動時にマスタノード２０１が実行する起動処理プログラム４４１のイメージファイルである。
システム構成情報５１２は、マルチコアＳｏＣ１００全体のノード構成を記述した情報である。
アプリケーションノードイメージ５１３は、アプリケーションノード２０２、２０３が実行するＯＳ４１１、ノード通信制御プログラム４１２、ＩＯ制御インタフェースプログラム４１３及びアプリケーションプログラム４１４のイメージファイルである。
連携ノードイメージ５１４は、連携ノード２０４、２０５が実行するノード間データ授受制御プログラム４２１のイメージファイルである。
ＩＯノードイメージ５１５は、ＩＯノード２０６、２０７が実行するＩＯノード通信制御プログラム４３２及びＩＯデバイス制御プログラム４３１のイメージファイルである。
【００２３】
図９は、本実施の形態に係るＲＡＭ１２２の保存領域を示す。
個別メモリ領域５２１は、ノードごとに個別に割り当てられ、ノードごとに個別に使用されるメモリ領域である。
ノード用ワークメモリ５２３は、個別メモリ領域５２１中にある各ノードが個別に使用するメモリ領域である。
共有メモリ領域５２２は、全ノードに共通に使用されるメモリ領域である。
処理管理テーブル５２４は、共有メモリ領域５２２に配置され、ノード間の通信内容を管理するテーブルである。
メモリプール５２５は、データ転送に使用するメモリ領域を要求に従い各ノードに割り当てるために確保された領域である。
一時バッファ５２６は、データ転送のために各ノードに一時的に割り当てられるメモリ領域である。
メモリプール５２５は、処理要求を発行したときに各ノードからマスタノード２０１に対して要求し、マスタノード２０１がＭＭＵ（メモリマネジメントユニット）等でメモリ空間を管理し、各ノードに一時バッファ５２６を割り当てる。
【００２４】
図１０は、図９に示す処理管理テーブル５２４の構成例を示す。
処理管理テーブル５２４は、ノード間の通信（トランザクション）を表形式で管理する。
処理番号５３１の欄には、処理要求を識別するための処理番号が設定される。
要求元ＩＤ５３２の欄には、処理要求の発行元のノードＩＤが設定される。
要求先ＩＤ５３３の欄には、処理要求の実行対象のノードＩＤが設定される。
処理コマンド５３４の欄には、処理要求の内容が設定される。
コマンドパラメータ５３５の欄には、処理に付随するパラメータが設定される。
バッファオフセット５３６の欄には、処理に使用するデータの設定先がメモリプール上のオフセット値で設定される。
要求領域サイズ５３７の欄には、処理に使用するデータの領域サイズが設定される。
処理状態５３８の欄には、トランザクションの処理状態が設定される。
【００２５】
図１１は、図１０の処理管理テーブル５２４の処理コマンド５３４の欄に設定される処理コマンドの例を示す。
ＲＥＡＤは、要求先に対してデータ読み出し操作を要求する処理コマンドである。
ＷＲＩＴＥは、要求先に対してデータの書き込み操作を要求する処理コマンドである。
ＩＯ  Ｃｏｎｔｒｏｌは、要求先に対してＲＥＡＤ／ＷＲＩＴＥ以外の操作を要求する際の処理コマンドである。
これらＲＥＡＤ、ＷＲＩＴＥ、ＩＯ  Ｃｏｎｔｒｏｌは、主にＩＯノードに対する要求コマンドである。
Ｈｅａｌｔｈ  Ｃｈｅｃｋは、マスタノードから各ノードに対して、応答性を確認するための応用要求を発行する際に使用する処理コマンドである。
Ａｄｄ  ＣＰＵは、ノードに対して予備ＣＰＵコア２０８の追加を要求するために、マスタノード２０１から発行される処理コマンドである。
Ｄｅｌｅｔｅ  ＣＰＵは、ノードで使用するＣＰＵの削減を要求するために、マスタノード２０１から発行される処理コマンドである。
【００２６】
図１２は、図１０の処理管理テーブル５２４の処理状態５３８の欄に設定される処理状態（各トランザクションにおける処理状態）の例を示す。
「登録中」は、処理管理テーブル５２４に新規レコードを追加する際に設定される状態である。
「未処理」は、要求元がトランザクション開始時に、処理管理テーブル５２４に登録した際に設定される状態である。
「処理中」は、要求先が処理を受け付けた際に設定される状態である。
「完了」は、要求元が処理を完了し必要なデータが共有メモリ上に用意できた時の状態である。
「エラー」は、トランザクション実行時にエラーが発生したときに設定される状態である。
この「エラー」は、ＩＯアクセスでエラーが発生した場合や、トランザクション発行時にメモリプールから必要サイズのメモリが確保できない状況で設定される。
【００２７】
図１３は、図１０の処理管理テーブル５２４のコマンドパラメータ５３５の欄に設定されるコマンドパラメータの例を示す。
「ＲＥＡＤデータサイズ」は、ＲＥＡＤ操作の際にＩＯデバイスから実際に読み出すデータサイズである。
「ＲＥＡＤデータ保存先」は、ＲＥＡＤ操作の際に読み出したデータを保存する個別メモリ領域５２１内のノード用ワークメモリ５２３の物理アドレスである。
「ＷＲＩＴＥデータサイズ」は、ＷＲＩＴＥ操作の際にＩＯデバイスへ実際に書き込むデータサイズである。
「ＷＲＩＴＥデータ保存先」は、ＷＲＩＴＥ操作の際に書き込むデータが存際する個別メモリ領域５２１内のノード用ワークメモリ５２３の物理アドレスである。
「ＩＯ  Ｃｏｎｔｒｏｌパラメータ」はＩＯ  Ｃｏｎｔｒｏｌコマンド実行時に必要な拡張パラメータが保管される個別メモリ領域５２１内のノード用ワークメモリ５２３の物理アドレスである。
【００２８】
次に、本実施の形態に係る制御装置の動作例について説明する。
図２４は、アプリケーションプログラムがＩＯアクセスする際の、処理手順を表すシーケンス図である。
図２４のシーケンス図を元に以下動作を示す。
なお、以下では、プログラム（例えばアプリケーションプログラム４１４）が「〜する」という説明を行うが、厳密には、ＣＰＵコア１０１がプログラム（例えばアプリケーションプログラム４１４）を実行して「〜する」という意味である。
【００２９】
（１）アプリケーションがＩＯデバイスへＲＥＡＤ操作を行う際の動作
［アプリケーションノード動作］
ここでは、アプリケーションノード２０２のアプリケーションプログラム４１４がＩＯデバイス１１１に対してＲＥＡＤ操作を行う場合を想定する。
アプリケーションプログラム４１４がＯＳ４１１を介してＩＯ制御インタフェースプログラム４１３にＲＥＡＤ要求を行うと（７００１）、要求内容をノード通信制御プログラム４１２が、処理管理テーブル５２４のリストに追加し、要求元ＩＤ５３２、要求先ＩＤ５３３、処理コマンド５３４、コマンドパラメータ５３５、要求領域サイズ５３７を設定する。
更に、ノード通信制御プログラム４１２は、処理番号５３１に新規追加を示す値を設定（図１０ではＮＥＷと表記）する。
また、ノード通信制御プログラム４１２は、処理状態５３８に「登録中」を設定し、ノード通信制御プログラム４１２からマスタノード２０１へノード間割り込みを発行する（７００２）。
【００３０】
［マスタノード動作］
マスタノード２０１ではノード間通信制御プログラム４４２が動作し、処理管理テーブル５２４をスキャンして、処理番号に新規追加を示す値（図１０ではＮＥＷ）を見つけた場合、要求領域サイズ５３７で示されるメモリ領域（一時バッファ５２６）をメモリプール５２５から確保する（７００３）。
一時バッファ５２６の確保に成功した場合に、ノード間通信制御プログラム４４２は、一時バッファ５２６のメモリプール内のアドレスオフセット値（バッファオフセット）を処理管理テーブル５２４のバッファオフセット５３６に設定する。
また、ノード間通信制御プログラム４４２は、処理状態５３８に「未処理」を設定する。
更に、ノード間通信制御プログラム４４２は、処理番号５３１にトランザクションを識別できるトランザクションＩＤ値を設定し、マスタノード２０１から、要求元のアプリケーションノード２０２にノード間割り込みを発行（７００４）するととともに、転送処理を担当する連携ノードを決定し、その連携ノードにノード間割り込みを発行（７００５）する。
【００３１】
［アプリケーションノード動作］
マスタノード２０１から割り込み（７００４）を受けたアプリケーションノード２０２は、ノード通信制御プログラム４１２が処理管理テーブル５２４の処理番号を取得し、ノード内に保管して、ノード通信制御プログラム４１２の処理は割り込み待ち（７０１２）状態となる。
処理番号５３１に設定するトランザクションＩＤ値は、他のトランザクションと識別できるような、固有の値を設定し、ＵＵＩＤ（Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）を用いてもよい。
また、マスタノード２０１が転送処理を担当する連携ノードを決定する方法として、複数の連携ノードに順番に処理を与えるラウンドロビン方式や、連携ノードの処理負荷から処理を担当する連携ノードを決定してもよい。
【００３２】
［連携ノード動作］
マスタノード２０１から割り込み（７００５）を受けた連携ノード（たとえば連携ノード２０４）では、ノード間データ授受制御プログラム４２１が処理管理テーブル５２４を参照し、処理状態５３８に「未処理」があることを見つけると、処理状態５３８に「処理中」を設定する。
また、ノード間データ授受制御プログラム４２１は、コマンドパラメータ５４３に設定されるＲＥＡＤデータサイズを読み出し、処理コマンド５３４がＲＥＡＤであることを判断する。
そして、ノード間データ授受制御プログラム４２１は、要求先ＩＤ５３３にあるノードに対してノード間割り込み（７００７）で通知する（この場合はＩＯノード２０６）。
【００３３】
［ＩＯノード動作］
ノード間割り込み（７００７）を受けたＩＯノード２０６では、ＩＯノード通信制御プログラム４３２が処理管理テーブル５２４を参照し、自ノード宛処理で「処理中」状態のリストに記載される内容を実行する。
ここでの例では処理コマンド５３４に記載されるＲＥＡＤコマンドと、コマンドパラメータ５３５に設定される５４３で示した構造体からＲＥＡＤデータサイズ、バッファオフセット５３６を読み出し、ＩＯデバイス制御プログラム４３１を起動し、ＩＯデバイス１１１に対してＲＥＡＤ制御を行う。
ＩＯデバイス１１１に対するＲＥＡＤ操作により読み出したデータは、一時バッファ５２６に保存される。
次に、ＩＯノード通信制御プログラム４３２は、処理状態５３８に「完了」を設定してマスタノード２０１にノード間割り込みを発行する（７００８）。
【００３４】
［マスタノード動作］
ノード間割り込み（７００８）を受けたマスタノード２０１では、ノード間通信制御プログラム４４２が処理管理テーブル５２４を参照し、処理状態５３８が「完了」であるリストを参照し、転送処理を担当する連携ノードを決定して、その連携ノードにノード間割り込みを発行（７００９）する。
【００３５】
［連携ノード動作］
割込み（７００９）を受けた連携ノードでは、ノード間データ授受制御プログラム４２１が処理管理テーブル５２４を参照し、処理状態５３８が「完了」であるリストを確認する。
処理コマンド５３４がＲＥＡＤの場合、コマンドパラメータ５３５、バッファオフセット５３６の情報から、一時バッファ５２６とノード用ワークメモリ５２３の間のデータ転送（７０１０）を行い、データ転送完了後、要求元ＩＤ５３２に設定されているノードに対して割り込みを発行（７０１１）する。
【００３６】
［アプリケーションノード動作］
割込み（７０１１）を受けたアプリケーションノード２０２では、ノード通信制御プログラム４１２が処理管理テーブル５２４を参照し、保存した処理番号のうち処理状態５３８が「完了」であるものを見つけ、ＩＯ制御インタフェースプログラム４１３へ結果を通知する。
その後、ノード通信制御プログラム４１２は、処理管理テーブル５２４からリストを削除する。
【００３７】
（２）アプリケーションがＩＯデバイスへＷＲＩＴＥ操作を行う際の動作
［アプリケーションノード動作］
ここでは、アプリケーションノード２０２のアプリケーションプログラム４１４がＩＯデバイス１１１に対してＷＲＩＴＥ操作を行う場合を想定する。
アプリケーションプログラム４１４は、ＯＳ４１１を介してＩＯ制御インタフェースプログラム４１３にＷＲＩＴＥ要求を行うと（７００１）、ノード通信制御プログラム４１２が要求内容を処理管理テーブル５２４のリストに追加し、要求元ＩＤ５３２、要求先ＩＤ５３３、処理コマンド５３４、コマンドパラメータ５３５、要求領域サイズ５３７を設定し、更に処理番号５３１に新規追加を示す値を設定する。
また、ノード通信制御プログラム４１２は、処理状態５３８に「登録中」を設定する。
そして、ノード通信制御プログラム４１２からマスタノード２０１へノード間割り込みを発行する（７００２）。
【００３８】
［マスタノード動作］
マスタノード２０１ではノード間通信制御プログラム４４２が動作し、処理管理テーブル５２４をスキャンして、処理番号に新規リストを見つけた場合、要求領域サイズ５３７で示されるメモリ領域（一時バッファ５２６）をメモリプール５２５から確保する（７００３）。
一時バッファ５２６の確保に成功した場合に、ノード間通信制御プログラム４４２は、一時バッファ５２６のメモリプール内のアドレスオフセット値（バッファオフセット）を処理管理テーブル５２４のバッファオフセット５３６に設定する。
また、ノード間通信制御プログラム４４２は、処理状態５３８に「未処理」を設定する。
更に、ノード間通信制御プログラム４４２は、処理番号５３１にトランザクションを識別できるトランザクションＩＤ値を設定し、マスタノード２０１から、要求元のアプリケーションノード２０２にノード間割り込みを発行（７００４）するととともに、転送処理を担当する連携ノードを決定し、その連携ノードにノード間割り込みを発行（７００５）する。
【００３９】
［アプリケーションノード動作］
マスタノード２０１から割り込み（７００４）を受けたアプリケーションノード２０２は、ノード通信制御プログラム４１２が処理管理テーブル５２４の処理番号を取得し、ノード内に保管して、ノード通信制御プログラム４１２の処理は割込み待ち状態へ遷移（７０１２）する。
【００４０】
［連携ノード動作］
マスタノード２０１から割り込み（７００５）を受けた連携ノード（たとえば連携ノード２０４）では、ノード間データ授受制御プログラム４２１が処理管理テーブル５２４を参照し、処理状態５３８に「未処理」があることを見つけると、処理状態５３８に「処理中」を設定する。
また、ノード間データ授受制御プログラム４２１は、コマンドパラメータ５４３に設定されるＷＲＩＴＥデータサイズを読み出し、処理コマンド５３４がＷＲＩＴＥであることを判断する。
そして、ノード間データ授受制御プログラム４２１は、コマンドパラメータ５４３（図１３）の構造体で保存されるＷＲＩＴＥデータ保存先から、バッファオフセット５３６で示される一時バッファ５２６の領域へデータをＣＯＰＹ（７００６）する。
そして、ノード間データ授受制御プログラム４２１は、要求先ＩＤ５３３にあるノードに対してノード間割り込みで処理要求（７００７）を行う（この場合はＩＯノード２０６）。
【００４１】
［ＩＯノード動作］
ノード間割り込み（７００７）を受けたＩＯノード２０６では、ＩＯノード通信制御プログラム４３２が処理管理テーブル５２４を参照し、自ノード宛処理で「処理中」状態のリストに記載される内容を実行する。
ここでの例では処理コマンド５４１（図１１）に記載されるＷＲＩＴＥコマンドと、コマンドパラメータ５４３（図１３）の構造体のＷＲＩＴＥデータサイズ、バッファオフセット５３６を読み出し、ＩＯデバイス制御プログラム４３１を起動し、ＩＯデバイス１１１に対してＷＲＩＴＥ制御を行う。
ＩＯデバイス１１１へのＷＲＩＴＥ操作を完了すると、ＩＯノード通信制御プログラム４３２は、処理状態５３８に「完了」を設定してマスタノード２０１にノード間割り込みを発行（７００８）する。
【００４２】
［マスタノード動作］
ノード間割り込み（７００８）を受けたマスタノード２０１では、ノード間通信制御プログラム４４２が処理管理テーブル５２４を参照し、処理状態５３８が「完了」であるリストを参照し、転送処理を担当する連携ノードを決定して、その連携ノードにノード間割り込みを発行（７００９）する。
【００４３】
［連携ノード動作］
割込み（７００９）を受けた連携ノードでは、ノード間データ授受制御プログラム４２１が処理管理テーブル５２４を参照し、処理状態５３８が「完了」であるリストを確認する。
処理コマンド５３４がＷＲＩＴＥである場合、要求元ＩＤ５３２に設定されているノードに対して割り込みを発行（７０１１）する。
【００４４】
［アプリケーションノード動作］
割込み（７０１１）を受けたアプリケーションノード２０２では、ノード通信制御プログラム４１２が処理管理テーブル５２４を参照し、保存した処理番号のうち処理状態５３８が「完了」であるものを見つけ、ＩＯ制御インタフェースプログラム４１３へ結果を通知する。
その後、ノード通信制御プログラム４１２は、処理管理テーブル５２４からリストを削除する。
【００４５】
（３）ＩＯノード間、アプリケーションノード間の転送
以上ではアプリケーションノードとＩＯノード間のコマンドの手順を示したが、ＩＯノード間や、アプリケーションノード間でも同様の操作を行うことができる。
【００４６】
（４）起動処理
制御装置の起動時の動作について説明する。
前述したように、図８はＲＯＭ１２１に保存される情報を示している。
制御装置の起動時にはマスタノード２０１のみが動作し、ブートローダイメージ５１１を実行する。
ブートローダイメージ５１１には、マルチコアＳｏＣ１００に搭載される複数のＣＰＵコア１０１を、アプリケーションノード２０２、２０３、連携ノード２０４、２０５、ＩＯノード２０６、２０７の何れに構成するかを示すシステム構成情報５１２（図１４）が含まれる。
マスタノード２０１の起動処理プログラム４４１は、システム構成情報５１２を読み出し、各ノードを構成する。
つまり、起動処理プログラム４４１は、システム構成情報５１２に従い、アプリケーションノードに対して、該当するＣＰＵコア１０１を選択し、選択したＣＰＵコア１０１にアプリケーションプログラム４１４の実行を指示し、当該ＣＰＵコア１０１にアプリケーションプログラム４１４を実行させる。
図２の例では、マルチコアＳｏＣ１００には、アプリケーションノード２０２とアプリケーションノード２０３が存在するので、起動処理プログラム４４１は、アプリケーションノード２０２及びアプリケーションノード２０３の各々に対して、ＣＰＵコア１０１を選択し、選択したＣＰＵコア１０１にアプリケーションプログラム４１４を実行させる。
また、起動処理プログラム４４１は、システム構成情報５１２に従い、連携ノードに対して、該当するＣＰＵコア１０１を選択し、選択したＣＰＵコア１０１にノード間データ授受制御プログラム４２１の実行を指示し、当該ＣＰＵコア１０１にノード間データ授受制御プログラム４２１を実行させる。
図２の例では、マルチコアＳｏＣ１００には、連携ノード２０４と連携ノード２０５が存在するので、起動処理プログラム４４１は、連携ノード２０４及び連携ノード２０５の各々に対して、ＣＰＵコア１０１を選択し、選択したＣＰＵコア１０１にノード間データ授受制御プログラム４２１を実行させる。
また、起動処理プログラム４４１は、システム構成情報５１２に従い、ＩＯノードに対して、該当するＣＰＵコア１０１を選択し、選択したＣＰＵコア１０１にデバイスドライバの実行を指示し、当該ＣＰＵコア１０１にデバイスドライバを実行させる。
図２の例では、マルチコアＳｏＣ１００には、ＩＯノード２０６とＩＯノード２０７が存在するので、起動処理プログラム４４１は、ＩＯノード２０６及びＩＯノード２０７の各々に対して、ＣＰＵコア１０１を選択し、選択したＣＰＵコア１０１にデバイスドライバを実行させる。
【００４７】
アプリケーションプログラム４１４の実行が指示されたＣＰＵコア１０１（アプリケーションノードの役割を割り当てられたＣＰＵコア）は、アプリケーションノードイメージ５１３を起動してアプリケーションノード２０２（２０３）を構成する。
前述したように、アプリケーションノードイメージ５１３は、図４に示した、ＯＳ４１１やアプリケーションプログラム４１４等の構成要素を含む。
ノード間データ授受制御プログラム４２１の実行が指示されたＣＰＵコア１０１（連携ノードの役割を割り当てたＣＰＵコア）は、連携ノードイメージ５１４を起動して連携ノード２０４（２０５）を構成する。
前述したように、連携ノードイメージ５１４は、図５に示すノード間データ授受制御プログラム４２１を含む。
デバイスドライバの実行が指示されたＣＰＵコア１０１（ＩＯノードの役割を割り当てたＣＰＵコア）は、ＩＯノードイメージ５１５を起動して連携ノード２０４（２０５）を構成する。
前述したように、ＩＯノードイメージ５１５は、図６に示すＩＯノード通信制御プログラム４３２及びＩＯデバイス制御プログラム４３１を含む。
【００４８】
（６）健全性確保、システム負荷調整
マスタノード２０１のノード管理プログラム４４３は、アプリケーションノード２０２、２０３、連携ノード２０４、２０５やＩＯノード２０６、２０７に対して、一定間隔で健全性の確認のため応答要求を発行する。
そして、応答時間が規定時間から遅れる状態が続く場合は、ノード管理プログラム４４３は、当該ノードに対して予備ＣＰＵコア２０８の追加割り当てを行い、複数のＣＰＵコア１０１で処理させることでスループットを向上させる。
一定間隔で応答を確認する動作において、各ノードからシステム負荷状態をマスタノード２０１に応答で返すことにより、ノード管理プログラム４４３が各ノードにおける負荷状態が確認でき、ノード管理プログラム４４３は、負荷状態が低い状態が続くノードから、当該ノードに割り当てているＣＰＵコア１０１を分離して、予備ＣＰＵコア２０８とすることもできる。
【００４９】
また、アプリケーションノード２０２、２０３とＩＯノード２０６、２０７間の通信量が増え、連携ノード２０４、２０５のスループットが低下する状態をマスタノード２０１が検知した場合に、ノード管理プログラム４４３が予備ＣＰＵコア２０８を使用して連携ノードを新たに追加することで、アプリケーションノードとＩＯノード間の通信経路を増やし、スループットを向上させることもできる。
この場合、利用可能な連携ノードの一覧は、マスタノード２０１で管理する。
【００５０】
次に、図１５〜図２３にて各ノードの動作を示す。
【００５１】
図１５及び図１６は、アプリケーションノード２０２のＩＯ制御インタフェースプログラム４１３及びノード通信制御プログラム４１２の処理内容を示したものである。
アプリケーションノード２０３での処理内容も同様である。
【００５２】
アプリケーションノード２０２において、アプリケーションプログラム４１４がＩＯアクセスを行う場合、ＯＳ４１１を介して、ＩＯ制御インタフェースプログラム４１３が、処理要求を受け付ける（６１０１）。
ＩＯ制御インタフェースプログラム４１３は、処理要求の宛先（処理対象）を判別し（６１０２）、処理要求を送付する宛先ごとに、メッセージを作成する（６１０３〜６１０６）。
つまり、処理要求の宛先がＩＯデバイス１１１であれば、ＩＯデバイス１１１宛のメッセージを作成する（６１０３）。
処理要求の宛先がＩＯデバイス１１２であれば、ＩＯデバイス１１２宛のメッセージを作成する（６１０４）。
また、処理要求の宛先が他のアプリケーションノード２０３であれば、アプリケーションノード２０３宛のメッセージを作成する（６１０５）。
また、処理要求の宛先がマスタノード２０１であれば、マスタノード２０１宛のメッセージを作成する（６１０６）。
そして、ＩＯ制御インタフェースプログラム４１３は、作成したメッセージをノード通信制御プログラム４１２へ伝達する（６１０７）。
【００５３】
図１６において、ノード通信制御プログラム４１２は、ＩＯ制御インタフェースプログラム４１３が作成したメッセージを受付け（６２０１）、メッセージを元に処理管理テーブル５２４に新要求のエントリを作成し（６２０２）、マスタノード２０１に対して処理要求を発行し（６２０３）、マスタノード２０１からの処理受付通知を待つ（６２０４）。
マスタノード２０１から処理受付け通知を受けると、ノード通信制御プログラム４１２は、処理管理テーブル５２４からトランザクションＩＤ番号を取り出し（６２０５）、対象のトランザクションＩＤ番号の完了通知を待つ（６２０６）。
処理完了通知を受けると、ノード通信制御プログラム４１２は、処理６２０２で作成した処理要求エントリを処理管理テーブル５２４から削除する（６２０７）。
【００５４】
図１７は、マスタノード２０１の処理フローを示すフローチャート図である。
【００５５】
ノード間通信制御プログラム４４２は、他ノードからの割込みを受け付け（６３０１）、割込みがあると処理管理テーブル５２４を参照して処理状態を判定する（６３０２）。
処理状態が「登録中」の場合は、ノード間通信制御プログラム４４２は、処理状態を「未処理」に更新し（６３０４）、要求に基づくメモリ領域を確保する（６３０５）。
また、ノード間通信制御プログラム４４２は、処理番号５３１に新たなトランザクションＩＤ番号を設定し（６３０６）、要求元ノードへ通知（図２４の７００４）するとともに、連携ノードへの通知（図２４の７００５）をノード間割込みで発行する（６３０７）。
一方、処理状態が「完了」の場合は、ノード間通信制御プログラム４４２は、連携ノードに対して完了処理の要求（図２４の７００９）をノード間割込みで発行する（６３０３）。
【００５６】
図１８は、連携ノード２０４の処理フローを示すフローチャート図である。
連携ノード２０５での処理内容も同様である。
【００５７】
ノード間データ授受制御プログラム４２１は、ノード間の要求割込みを受け付けると（６９００）、処理管理テーブル５２４を参照し（６４０２）、処理状態が「未処理」の場合は処理状態を「処理中」に更新し（６４０４）、処理内容を判定する（６４０５）。
処理内容がＷＲＩＴＥ処理の場合は、ノード間データ授受制御プログラム４２１は、コマンドパラメータ記載のアドレスに従い、ＷＲＩＴＥデータを固有領域からメモリプールの確保領域にコピーする（６４０６）。
一方、処理内容がＩＯ  Ｃｏｎｔｒｏｌの場合は、ノード間データ授受制御プログラム４２１は、コマンドパラメータ記載のアドレスに従い、ＩＯ  Ｃｏｎｔｒｏｌ情報を固有領域からメモリプールの確保領域にコピーする（６４０７）。
その後、ノード間データ授受制御プログラム４２１は、処理要求先のノードに処理要求を発行（図２４の７００７）する（６４０８）。
なお、処理内容がＲＥＡＤの場合は、データ操作は行わずに、処理要求先のノードに処理要求を発行（図２４の７００７）する（６４０８）。
【００５８】
また、処理６４０２で処理状態が「完了」の場合は、ノード間データ授受制御プログラム４２１は、処理内容を判定する（６４０３）。
処理内容がＲＥＡＤの場合は、ノード間データ授受制御プログラム４２１は、コマンドパラメータ記載のアドレスに従い、ＲＥＡＤデータをメモリプールの確保領域から固有領域にコピーする（６４０９）。
一方、処理内容がＩＯ  Ｃｏｎｔｒｏｌの場合は、ノード間データ授受制御プログラム４２１は、コマンドパラメータ記載のアドレスに従い、ＩＯ  Ｃｏｎｔｒｏｌ情報をメモリプールの確保領域から固有領域にコピーする（６４１０）。
その後、ノード間データ授受制御プログラム４２１は、処理要求元のノードに完了通知（図７の７０１１）を発行する（６４１１）。
なお、処理内容がＷＲＩＴＥの場合は、データ操作は行わずに、処理要求元のノードに完了通知（図７の７０１１）を発行する（６４１１）。
【００５９】
図１９は、ＩＯノード２０６におけるＩＯノード通信制御プログラム４３２の処理フローを示す。
ＩＯノード２０７のＩＯノード通信制御プログラム４３２の処理フローも同様である。
【００６０】
ノード間割込みを受け付けると（６９００）、ＩＯノード通信制御プログラム４３２は、処理管理テーブル５２４から処理対象の要求を読み出し（６５０２）、処理内容を判定する（６５０３）。
処理内容がＲＥＡＤの場合、ＩＯデバイス制御プログラム４３１へＲＥＡＤ要求を発行する（６５０４）。
処理内容がＷＲＩＴＥの場合、ＩＯデバイス制御プログラム４３１へＷＲＩＴＥ要求を発行する（６５０５）。
処理内容がＩＯ  Ｃｏｎｔｒｏｌの場合、ＩＯデバイス制御プログラム４３１へＩＯ  Ｃｏｎｔｒｏｌ要求を発行する（６５０６）。
次に、ＩＯノード通信制御プログラム４３２は、ＩＯ操作が成功したかどうかを判断し（６５０７）、ＩＯ操作が成功の場合は、処理管理テーブル５２４の処理状態５３８に「完了」を設定する（６５０８）。
一方、ＩＯ操作が失敗の場合は、処理管理テーブル５２４の処理状態５３８に「エラー」を設定する（６５０９）。
その後、ＩＯノード通信制御プログラム４３２は、マスタノード２０１に対して処理終了を通知する（図２４の７００８）（６５１０）。
【００６１】
図２０は、ＩＯノード２０６におけるＩＯデバイス制御プログラム４３１の処理フローを示す。
ＩＯノード２０７のＩＯデバイス制御プログラム４３１の処理フローも同様である。
【００６２】
ＩＯデバイス制御プログラム４３１は、ＩＯノード通信制御プログラム４３２からのコマンド（図１９の処理６５０４のＲＥＡＤ要求、処理６５０５のＷＲＩＴＥ要求、処理６５０６のＩＯ  Ｃｏｎｔｒｏｌ要求）を受け付ける（６６０１）。
次に、ＩＯデバイス制御プログラム４３１は、コマンド種別を判定し（６６０２）、コマンドがＲＥＡＤの場合は、ＩＯデバイス１１１のＲＥＡＤ操作を行う（６６０３）。
更に、ＩＯデバイス１１１から読み出したデータを共有メモリ領域５２２へ保存する（６６０４）。
また、コマンドがＷＲＩＴＥの場合は、ＩＯデバイス制御プログラム４３１は、共有メモリ領域５２２からデータを読み出し（６６０５）、ＩＯデバイス１１１に対しデータを書き込む（６６０６）。
また、コマンドがＩＯ  Ｃｏｎｔｒｏｌの場合は、共有メモリ領域５２２からデータ読み出し（６６０７）、ＩＯデバイス１１１を操作し（６６０８）、共有メモリ領域５２２へ必要なデータを保存する（６６０９）。
【００６３】
図２１は、マスタノード２０１における起動処理プログラム４４１の処理フローを示す。
【００６４】
制御装置の起動後に、起動処理プログラム４１１は、ＲＯＭ１２１にあるシステム構成情報５１２を読み出す（６７１３）。
起動処理プログラム４４１は、図１４のシステム構成情報５１２の各行を順に読み出す。
読み出し対象のシステム構成情報５１２がマスタノードを構成するためのマスタノード構成情報（図１４の１行目の情報）である場合（６７０２でＹＥＳ）は、マスタノード構成情報を読み出す（６７０６）。
読み出し対象のシステム構成情報５１２がアプリケーションノードを構成するためのアプリケーションノード構成情報（図１４の２行目の情報）である場合（６７０３でＹＥＳ）は、アプリケーションノード構成情報を読み出す（６７０７）。
読み出し対象のシステム構成情報５１２が連携ノードを構成するための連携ノード構成情報（図１４の３行目の情報）である場合（６７０４でＹＥＳ）は、連携ノード構成情報を読み出す（６７０８）。
読み出し対象のシステム構成情報５１２がＩＯノードを構成するためのＩＯノード構成情報（図１４の４行目の情報）である場合（６７０５でＹＥＳ）は、ＩＯノード構成情報を読み出す（６７０９）。
次に、起動処理プログラム４４１は、各ノードで必要な個数分のＣＰＵコア１０１を確保し（６７１０）、各ノードで実行するイメージのアドレスを対象のＣＰＵコア１０１に設定し（６７１１）、割り当てたＣＰＵコア１０１にイメージを起動させる起動要求を発行する（６７１２）。
各ノードの構成起動が完了すると、ノード管理プログラム４４３に処理が移行する。
【００６５】
図２２は、マスタノード２０１におけるノード管理プログラム４３３の処理フローを示す。
【００６６】
ノード管理プログラム４３３は、ノードｎの遅延応答カウント及び負荷超過カウントを初期化する（６８０１）。
ノードｎは、アプリケーションノード２０２、２０３、連携ノード２０４、２０５、ＩＯノード２６、２０７の各々である。
次に、ノード管理プログラム４３３は、処理コマンドとしてＨｅａｌｔｈ  Ｃｈｅｃｋを指定したコマンドをノードｎへ発行する（６８０２）。
次に、ノード管理プログラム４３３は、ノードｎからの応答を待ち（６８０３）、所定時間内で応答が有った場合（６８０４）は、ノードｎの遅延応答カウントを０にする（６８０５）。
次に、ノード管理プログラム４３３は、ノードｎの応答として返されたシステム負荷状態を判定する（６８１３）。
負荷状態が規定値を超えた場合は、ノード管理プログラム４３３は、負荷超過カウントを＋１する（６８１４）。
負荷超過カウントが規定数を超えた場合（６８１５）は、ノード管理プログラム４３３は、ノードｎへＣＰＵコア１０１の追加指示を発行する（６８１６）。
その後、ノード管理プログラム４３３は、ノードｎの負荷超過カウントをクリアする（６８１７）。
また、処理６８１３において負荷状態が規定値を超えない場合も、ノード管理プログラム４３３は、ノードｎの負荷超過カウントをクリアする（６８１７）。
【００６７】
一方、処理６８０４において所定時間内でノードｎからの応答が無い場合は、ノード管理プログラム４３３は、遅れて応答があるか否かを判断する（６８０６）。
遅れて応答が有った場合には、ノード管理プログラム４３３は、遅延応答カウントを＋１する（６８０７）。
遅延応答カウントが規定値を超えた場合（６８０８）は、対象のノードｎに対し、ＣＰＵコア１０１の追加指示を発行する（６８０９）。
その後、ノードｎの遅延応答カウントをクリアする（６８１０）。
一方、処理６８０６においてノードｎから全く応答がない場合は、ノード管理プログラム４３３は、ノードｎが動作不可の状態と判断し、ノードｎのＣＰＵコア１０１を停止させ、ＣＰＵコア１０１のリセットを行い、当該ＣＰＵコア１０１を予備ＣＰＵコア２０８へ移行させる（６８１１）。
更に、ノード管理プログラム４３３は、他の予備ＣＰＵコア２０８を新たにノードｎを構成するＣＰＵコアとして選択し、当該ＣＰＵコアを用いてノードｎの複製を生成し、新たなノードｎとして起動させる（６８１２）。
ノード管理プログラム４３３は、以上の処理を、アプリケーションノード２０２、２０３、連携ノード２０４、２０５、ＩＯノード２６、２０７の各々に対して行う。
【００６８】
図２３は、アプリケーションノード２０２、２０３、連携ノード２０４、２０５、ＩＯノード２０６、２０７で動作するノード間割込みハンドラの処理フローを示す。
図２３は、例えば、図１８の処理６９００、図１９の処理６９００の詳細を示す。
【００６９】
ノード間割込みハンドラは、処理管理テーブル５２４のリストを検索し（６９０１）、要求先ＩＤ５３３が自ノード宛の場合（６９０２でＹＥＳ）で、処理コマンドがＨｅａｌｔｈ  Ｃｈｅｃｋの場合（６９０３でＹＥＳ）は、自ノードのシステム負荷状態をコマンドパラメータに設定する（６９１０）。
一方、処理コマンドがＡｄｄ  ＣＰＵの場合（６９０４でＹＥＳ）は、予備ＣＰＵコアを自ノードに追加し、ノードを構成する（６９０６）。
処理コマンドがＤｅｌｅｔｅ  ＣＰＵ（６９０５でＹＥＳ）の場合は、自ノードで稼働するＣＰＵコアが複数である場合は、ＣＰＵコアの１つを切り離し、切り離したＣＰＵコアを予備ＣＰＵコアへ移行させる（６９０７）。
処理６９１０、６９０６、６９０７の後、ノード間割込みハンドラは、処理管理テーブル５２４の処理状態５３８の値を「完了」に設定し（６９０８）、マスタノードへノード間割込みを発行する（６９０９）。
Ｈｅａｌｔｈ  Ｃｈｅｃｋ、  Ａｄｄ  ＣＰＵ、  Ｄｅｌｅｔｅ  ＣＰＵ以外のコマンドの場合は、各ノードにおける続きの処理へ移行する。
【００７０】
以上、本実施の形態では、ＩＯ制御に単独のノード及びＣＰＵコアを割り当てる機能分散マルチコア制御装置を説明した。
【００７１】
また、本実施の形態では、アプリケーションを実行するノードが動作しなくなった場合に、動的に当該ノードのＣＰＵコアを分離して、新たなＣＰＵコアを当該ノードに割り当てて動作を回復する機能分散マルチコア制御装置を説明した。
【００７２】
また、本実施の形態では、システム上に複数の異なるＯＳが存在しても、共通のＩＯデバイスを、競合を意識することなく利用することができる機能分散マルチコア制御装置を説明した。
【００７３】
実施の形態２．
以上の実施の形態１では、連携ノードを用いたデータ操作方法を示したが、連携ノードを省略し、アプリケーションノードとＩＯノードで構成することも可能である。
【符号の説明】
【００７４】
１００  マルチコアＳｏＣ、１０１  ＣＰＵコア、１１１  ＩＯデバイス、１１２  ＩＯデバイス、１２１  ＲＯＭ、１２２  ＲＡＭ、２０１  マスタノード、２０２  アプリケーションノード、２０３  アプリケーションノード、２０４  連携ノード、２０５  連携ノード、２０６  ＩＯノード、２０７  ＩＯノード、２０８  予備ＣＰＵコア、３０１  ノード、３０３  ソフトウェア、４１１  ＯＳ、４１２  ノード通信制御プログラム、４１３  ＩＯ制御インタフェースプログラム、４１４  アプリケーションプログラム、４２１  ノード間データ授受制御プログラム、４３１  ＩＯデバイス制御プログラム、４３２  ＩＯノード通信制御プログラム、４４１  起動処理プログラム、４４２  ノード間通信制御プログラム、４４３  ノード管理プログラム、５１１  ブートローダイメージ、５１２  システム構成情報、５１３  アプリケーションノードイメージ、５１４  連携ノードイメージ、５１５  ＩＯノードイメージ、５２１  個別メモリ領域、５２２  共有メモリ領域、５２３  ノード用ワークメモリ、５２４  処理管理テーブル、５２５  メモリプール、５２６  一時バッファ。
【図１】
2017161954.tif 000003
【図２】
2017161954.tif 000004
【図３】
2017161954.tif 000005
【図４】
2017161954.tif 000006
【図５】
2017161954.tif 000007
【図６】
2017161954.tif 000008
【図７】
2017161954.tif 000009
【図８】
2017161954.tif 000010
【図９】
2017161954.tif 000011
【図１０】
2017161954.tif 000012
【図１１】
2017161954.tif 000013
【図１２】
2017161954.tif 000014
【図１３】
2017161954.tif 000015
【図１４】
2017161954.tif 000016
【図１５】
2017161954.tif 000017
【図１６】
2017161954.tif 000018
【図１７】
2017161954.tif 000019
【図１８】
2017161954.tif 000020
【図１９】
2017161954.tif 000021
【図２０】
2017161954.tif 000022
【図２１】
2017161954.tif 000023
【図２２】
2017161954.tif 000024
【図２３】
2017161954.tif 000025
【図２４】
2017161954.tif 000026