(57)【特許請求の範囲】
【請求項１】
複数のコアと、
ソフトウェアごとに、カーネルが有するライブラリである共通プログラムを利用するソフトウェアであるか否かを示す情報と、前記ソフトウェアの実行に要するコアの数と、を記憶する記憶部と、
を有し、
前記複数のコアのうちの一のコアが、
対象ソフトウェアの起動指示を検出し、
前記対象ソフトウェアが、前記共通プログラムを利用するソフトウェアであるか否かを検出した起動指示と前記記憶部に記憶された前記情報とに基づいて判断し、
前記対象ソフトウェアが前記共通プログラムを利用しないソフトウェアであると判断した場合において、前記共通プログラムを利用してソフトウェアを実行させる第１の実行制御プログラムが動作する第１のコアと、前記共通プログラムを利用せずにソフトウェアを実行させる第２の実行制御プログラムが動作する第２のコアと、前記第１の実行制御プログラムと前記第２の実行制御プログラムとを選択的に動作させる第３のコアと、を有する前記複数のコアから、前記第２の実行制御プログラムが動作するコアを前記記憶部に記憶された前記対象ソフトウェアの実行に要するコアの数分特定し、前記第２の実行制御プログラムが動作するコアを前記コアの数分特定できなかった場合、前記第１の実行制御プログラムを動作させる前記第３のコアによって実行されるソフトウェアを前記第１のコアによって実行されるように移行し、移行後の前記第３のコアに前記第２の実行制御プログラムを動作させることにより、前記コアの数分だけ前記第２の実行制御プログラムが動作するコアを特定し、
特定したコアに前記対象ソフトウェアの実行指示を通知する、
処理を実行することを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記特定する処理では、
前記対象ソフトウェアが前記共通プログラムを利用するソフトウェアであると判断した場合、前記複数のコアから前記第１の実行制御プログラムが動作する前記第１のコアを特定することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記特定する処理では、
前記対象ソフトウェアが前記共通プログラムを利用するソフトウェアであると判断した場合、前記複数のコアから前記第１の実行制御プログラムが動作する前記第３のコアを特定することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項４】
ソフトウェアごとにカーネルが有するライブラリである共通プログラムを利用するソフトウェアであるか否かを示す情報と、前記ソフトウェアごとに前記ソフトウェアの実行に要するコアの数と、を記憶する記憶部にアクセス可能な複数のコアのうちの一のコアに、
対象ソフトウェアの起動指示を検出し、
前記対象ソフトウェアが、前記共通プログラムを利用するソフトウェアであるか否かを検出した起動指示と前記記憶部に記憶された前記情報とに基づいて判断し、
前記対象ソフトウェアが前記共通プログラムを利用しないソフトウェアであると判断した場合において、前記共通プログラムを利用してソフトウェアを実行させる第１の実行制御プログラムが動作する第１のコアと、前記共通プログラムを利用せずにソフトウェアを実行させる第２の実行制御プログラムが動作する第２のコアと、前記第１の実行制御プログラムと前記第２の実行制御プログラムとを選択的に動作させる第３のコアと、を有する前記複数のコアから、前記第２の実行制御プログラムが動作するコアを前記記憶部に記憶された前記対象ソフトウェアの実行に要するコアの数分特定し、前記第２の実行制御プログラムが動作するコアを前記コアの数分特定できなかった場合、前記第１の実行制御プログラムを動作させる前記第３のコアによって実行されるソフトウェアを前記第１のコアによって実行されるように移行し、移行後の前記第３のコアに前記第２の実行制御プログラムを動作させることにより、前記コアの数分だけ前記第２の実行制御プログラムが動作するコアを特定し、
特定したコアに前記対象ソフトウェアの実行指示を通知する、
処理を実行させることを特徴とする制御プログラム。
【請求項５】
ソフトウェアごとにカーネルが有するライブラリである共通プログラムを利用するソフトウェアであるか否かを示す情報と、前記ソフトウェアごとに前記ソフトウェアの実行に要するコアの数と、を記憶する記憶部にアクセス可能な複数のコアのうちの一のコアが、
対象ソフトウェアの起動指示を検出し、
前記対象ソフトウェアが、前記共通プログラムを利用するソフトウェアであるか否かを検出した起動指示と前記記憶部に記憶された前記情報とに基づいて判断し、
前記対象ソフトウェアが前記共通プログラムを利用しないソフトウェアであると判断した場合において、前記共通プログラムを利用してソフトウェアを実行させる第１の実行制御プログラムが動作する第１のコアと、前記共通プログラムを利用せずにソフトウェアを実行させる第２の実行制御プログラムが動作する第２のコアと、前記第１の実行制御プログラムと前記第２の実行制御プログラムとを選択的に動作させる第３のコアと、を有する前記複数のコアから、前記第２の実行制御プログラムが動作するコアを前記記憶部に記憶された前記対象ソフトウェアの実行に要するコアの数分特定し、前記第２の実行制御プログラムが動作するコアを前記コアの数分特定できなかった場合、前記第１の実行制御プログラムを動作させる前記第３のコアによって実行されるソフトウェアを前記第１のコアによって実行されるように移行し、移行後の前記第３のコアに前記第２の実行制御プログラムを動作させることにより、前記コアの数分だけ前記第２の実行制御プログラムが動作するコアを特定し、
特定したコアに前記対象ソフトウェアの実行指示を通知する、
処理を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサへのソフトウェアの割り当てを制御するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいて、ソフトウェアの実行形式には大きく２つの形式がある。１つはカーネルをマスタＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）で動作させ、スレーブＣＰＵで動作させない方式（「シングルカーネルマルチコア方式」と称する。）である。シングルカーネルマルチコア方式では、マスタＣＰＵがＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ）によりスレーブＣＰＵ上で処理対象となる関数を呼び出し、マスタＣＰＵがスレーブＣＰＵに該処理対象となる関数を実行させる。【０００３】
もう１つはカーネルを各ＣＰＵで動作させ、マルチコアプロセッサ全体でマルチスレッドを実現する方式（「マルチカーネルマルチコア方式」と称する。）である。【０００４】
また、マルチコアプロセッサシステムにおいて動作効率を上げるために、プロセスによって割り当てるＣＰＵを定義する技術が知られている（たとえば、下記特許文献１を参照。）。また、バッチ処理を割り当てるＣＰＵをあらかじめ決定させておくことにより、マルチコアプロセッサシステムにおいて動作効率を上げる技術が知られている。（たとえば、下記特許文献２を参照。）。【０００５】
また、マルチコアプロセッサシステムやシングルコアプロセッサシステムにおいて、プロセスの実行中には通常モードとし、プロセスを実行していないときには低消費電力モードに切り替えることにより、低消費電力化を図る技術が知られている（たとえば、下記特許文献３を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平７−２００４９６号公報
【特許文献２】特開２００３−２０８３２３号公報
【特許文献３】特開２００８−２７６３３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
近年では、たとえば、シングルコアプロセッサシステムからマルチコアプロセッサシステムに移行するに当たり、シングルコアプロセッサシステムで開発された開発資産をどのように有効利用していくかが問題となっている。ソフトウェアがシングルコアプロセッサシステムを用いて開発されたシンプルな構造であると、該ソフトウェアでは複雑な制御ができないため、マルチコアプロセッサシステムでマルチスレッドで動作させようとするとソフトウェアにチューニングが必要となる。チューニングが必要であるということは、ソフトウェアの継承性を崩さなければならないという問題点があった。【０００８】
また、シングルカーネルマルチコア方式では、関数呼び出しのタイミングでスレーブＣＰＵにおいて並列実行することにより、マルチコアの並列性を生かすこととなる。よって、該シングルカーネルマルチコア方式では、シングルコアプロセッサシステムからマルチコアプロセッサシステムに移行するに当たり、ソフトウェアの構造を変更する必要がほとんどない。しかしながら、ソフトウェアの並列性は限られているため、１００％の並列化実行は困難であり、マルチコアプロセッサシステム全体の利用効率は下がってしまう問題点があった。【０００９】
一方、マルチカーネルマルチコア方式では、すべてのＣＰＵでマルチスレッドが実行可能となるため、複数のソフトウェアを複数のＣＰＵ、複数のスレッドで動作させることが可能である。よって、マルチカーネルマルチコア方式では、システムの利用効率は上昇する。しかしながら、各ＣＰＵでＯＳを動作させる環境では実行制約が多いため、既存の開発資産を存分に活用することが困難である。すなわち、多くのソフトウェアにおいてマルチカーネルマルチコア方式に対応するソフトウェアを再度開発する必要性があるという問題点があった。【００１０】
本発明は、上述した従来技術による問題点を解消するため、どのシステム構成で開発されたかに関わらず対象ソフトを変更することなく使用することができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本実施形態の一観点によれば、対象ソフトウェアの起動指示を検出する検出手段と、前記対象ソフトウェアが共通プログラムを利用するソフトウェアであるか否かを前記検出手段により検出された起動指示に基づいて判断する判断手段と、前記共通プログラムを利用してソフトウェアを実行させる第１の実行制御プログラムが動作するコアと前記共通プログラムを利用せずにソフトウェアを実行させる第２の実行制御プログラムが動作するコアとを有するマルチコアプロセッサから前記判断手段による判断結果に基づいて前記対象ソフトウェアを割り当てるコアを特定する特定手段と、前記特定手段により特定されたコアに前記対象ソフトウェアの実行指示を通知する通知手段と、を備えるマルチコアプロセッサシステムを提供する。
【発明の効果】
【００１２】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、どのシステム構成で開発されたかに関わらず対象ソフトを変更することなく使用することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】マルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図２】タグ情報１４１の一例を示す説明図である。
【図３】マルチコアプロセッサシステム１００を示すブロック図である。
【図４】Ａ型のソフトウェアがマスタＣＰＵ１０１に割り当てられる例を示す説明図である。
【図５】Ａ型のソフトウェアがスレーブＣＰＵ１０２に割り当てられる例を示す説明図である。
【図６】Ｂ型のソフトウェアがスレーブＣＰＵ１０２とスレーブＣＰＵ１０３に割り当てられる例を示す説明図である。
【図７】スレーブＣＰＵに割り当てられたＢ型のソフトウェアのプロセスがマイグレーションされる例を示す説明図である。
【図８】Ｃ型のソフトウェアがスレーブＣＰＵ１０３とスレーブＣＰＵ１０４に割り当てられる例を示す説明図である。
【図９】マルチコアプロセッサシステム１００の起動時に関する制御処理手順を示すフローチャートである。
【図１０】マルチコアプロセッサシステム１００の制御処理手順を示すフローチャート（その１）である。
【図１１】マルチコアプロセッサシステム１００の制御処理手順を示すフローチャート（その２）である。
【図１２】マルチコアプロセッサシステム１００の制御処理手順を示すフローチャート（その３）である。
【発明を実施するための形態】
【００１４】
以下にマルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。なお、本実施の形態のマルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１５】
本実施の形態では、各ソフトウェアは利用者によりＡ型のソフトウェアとＢ型のソフトウェアとＣ型のソフトウェアとのいずれかに分類される。
【００１６】
Ａ型のソフトウェアとは、シングルコアプロセッサシステムで動作が保証されているソフトウェアであり、カーネル上で動作するソフトウェアである。カーネル上で動作するソフトウェアとは、具体的には、たとえば、カーネルが有するライブラリ（共通プログラム）を利用して動作することを示している。
【００１７】
Ｂ型のソフトウェアとは、マルチコアプロセッサシステムのマルチカーネルマルチコア方式で動作が保証されているソフトウェアであり、カーネル上で動作するソフトウェアである。Ｂ型のソフトウェアは複数のプロセスを有し、各プロセスはカーネル上で動作することにより、ＯＳの並列拡張が利用され効率よく動作するソフトウェアである。
【００１８】
また、たとえば、Ａ型のソフトウェアのソースコードはそのままで、開発者が該Ａ型のソフトウェアをリコンパイルすることでコンパイラの機能によってＢ型のソフトウェアに拡張することができる。これにより、Ｂ型のソフトウェアでは、マルチコアプロセッサシステムの各ＣＰＵのＯＳ上のライブラリ（共通プログラム）など並列拡張されたライブラリ（共通プログラム）にリンクすることが可能となる。Ｂ型のソフトウェアとしては、たとえば、高速ブラウザとＵＩ（Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）が挙げられる。
【００１９】
Ｃ型のソフトウェアとは、シングルカーネルマルチコアプロセッサシステムに対して、チューニングされたソフトウェアである。すなわち、ソースコードレベルでマルチコア対応がなされ、Ｂ型のソフトウェアのように並列拡張されたライブラリをリンクするのではなく、Ｃ型のソフトウェアのソースコードが並列化されている。たとえば、Ｃ型のソフトウェアとして高速通信対応パケット処理ライブラリが挙げられる。
【００２０】
（マルチコアプロセッサシステムのハードウェア）
図１は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、マスタＣＰＵ１０１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４と共有メモリ１０５とを有している。各部は、バス１０６を介して接続されている。
【００２１】
ここで、マスタＣＰＵ１０１とスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４では、たとえば、それぞれコアとレジスタとキャッシュとを有している。マスタＣＰＵ１０１はマスタＯＳ１１１を実行し、マルチコアプロセッサシステム１００の全体の制御を司る。マスタＯＳ１１１は、ソフトウェアの各プロセスをどのＣＰＵに割り当てるかを制御する制御プログラムを有し、マスタＣＰＵ１０１でのプロセスの切り替えを制御する機能を有している。
【００２２】
スレーブＣＰＵ１０２〜スレーブＣＰＵ１０４は、たとえば、それぞれカーネルとＥｘｅｃｕｔｏｒとマイクロカーネルとを実行している。各マイクロカーネルは関数の実行指示を受け付けた場合、Ｅｘｅｃｕｔｏｒに関数の実行指示を渡し、プロセスの起動指示を受け付けた場合、カーネルをスリープ状態から起こしてカーネルにプロセスを起動させる。
【００２３】
共有メモリ１０５は、たとえば、マルチコアプロセッサに共有されるメモリである。共有メモリ１０５は、たとえば、ブートプログラムとアプリケーションソフトウェアとプロセステーブル１４２とタグ情報１４１を有している。共有メモリ１０５は、具体的には、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。
【００２４】
たとえば、フラッシュＲＯＭがブートプログラムを記憶し、ＲＯＭがアプリケーションソフトウェアを記憶し、ＲＡＭがマスタＣＰＵ１０１とスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４のワークエリアとして使用される。共有メモリ１０５に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理を該各ＣＰＵに実行させることとなる。
【００２５】
プロセステーブル１４２とは、ソフトウェアのプロセスや関数がどのＣＰＵに割り当てられているか、各ＣＰＵがどのソフトウェアのプロセスや関数を実行中であるかを示す情報である。
【００２６】
図２は、タグ情報１４１の一例を示す説明図である。タグ情報１４１はソフトウェア名の項目２０１とソフトタイプの項目２０２と必要ＣＰＵ数の項目２０３とを有している。ソフトウェア名の項目２０１にはソフトウェア名が保持され、ソフトタイプの項目２０２にはソフトウェアがＡ型のソフトウェアであるかＢ型のソフトウェアであるかＣ型のソフトウェアであるかを判別可能な情報が保持されている。ソフトタイプの項目２０２にはＡ型のソフトウェアであればＡが保持され、Ｂ型のソフトウェアであればＢが保持され、Ｃ型のソフトウェアであればＣが保持されている。必要ＣＰＵ数の項目２０３にはソフトタイプがＣ型のソフトウェアの場合において実行に必要なＣＰＵ数が保持されている。
【００２７】
（マルチコアプロセッサシステム１００）
図３は、マルチコアプロセッサシステム１００を示すブロック図である。マスタＯＳ１１１は、検出部３０１と、判断部３０２と、特定部３０３と、通知部３０４と、を有している。マスタＯＳ１１１はマスタＣＰＵ１０１にロードされることで実行されるため、各部はマスタＣＰＵ１０１に実行されることとなる。
【００２８】
検出部３０１は、対象ソフトウェアの起動指示を検出する。
【００２９】
判断部３０２は、対象ソフトウェアが共通プログラムを利用するソフトウェアであるか否かを検出部３０１により検出された起動指示に基づいて判断する。
【００３０】
マルチコアプロセッサは、共通プログラムを利用してソフトウェアを実行させる第１の実行制御プログラムが動作する第１のＣＰＵと共通プログラムを利用せずにソフトウェアを実行させる第２の実行制御プログラムが動作する第２のＣＰＵとを有する。特定部３０３は、該マルチコアプロセッサから判断部３０２による判断結果に基づいて対象ソフトウェアを割り当てるＣＰＵを特定する。ここで、第１の実行制御プログラムはマスタＯＳ１１１とカーネル１２１からカーネル１２３であり、第２の実行制御プログラムはＥｘｅｃｕｔｏｒ１３１からＥｘｅｃｕｔｏｒ１３３である。
【００３１】
特定部３０３は、判断部３０２により対象ソフトウェアが共通プログラムを利用するソフトウェアであると判断された場合、マルチコアプロセッサから第１の実行制御プログラムが動作する第１のＣＰＵを特定する。
【００３２】
特定部３０３は、判断部３０２により対象ソフトウェアが共通プログラムを利用しないソフトウェアであると判断された場合、マルチコアプロセッサから第２の実行制御プログラムが動作する第２のＣＰＵを特定する。
【００３３】
通知部３０４は、特定部３０３により特定されたＣＰＵに対象ソフトウェアの実行指示を通知する。
【００３４】
また、マルチコアプロセッサが第１の実行制御プログラムと第２の実行制御プログラムとを選択的に動作させる第３のＣＰＵを有する。本実施の形態ではスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４が第３のＣＰＵである。
【００３５】
ここで、スレーブＣＰＵ１０２〜スレーブＣＰＵ１０４のそれぞれで動作するマイクロカーネル１１２〜マイクロカーネル１１４について説明する。マイクロカーネル１１２は受付部３０５と切り替え部３０６とを有している。マイクロカーネル１１３は受付部３０７と切り替え部３０８とを有している。マイクロカーネル１１４は受付部３０９と切り替え部３１０とを有している。
【００３６】
受付部３０５と受付部３０７と受付部３０９とは、対象ソフトウェアの実行指示を受け付ける。
【００３７】
切り替え部３０６は、第１の実行制御プログラムと第２の実行制御プログラムと、受付部３０５により受け付けた対象ソフトウェアの実行指示に応じて選択的に切り替える。
【００３８】
切り替え部３０８は、第１の実行制御プログラムと第２の実行制御プログラムと、受付部３０７により受け付けた対象ソフトウェアの実行指示に応じて選択的に切り替える。
【００３９】
切り替え部３１０は、第１の実行制御プログラムと第２の実行制御プログラムと、受付部３０９により受け付けた対象ソフトウェアの実行指示に応じて選択的に切り替える。
【００４０】
本実施の形態では、スレーブＣＰＵ１０２は第１の実行制御プログラムであるカーネル１２１と第２の実行制御プログラムであるＥｘｅｃｕｔｏｒ１３１とをマイクロカーネル１１２により選択的に動作させる。スレーブＣＰＵ１０３はカーネル１２２とＥｘｅｃｕｔｏｒ１３２とをマイクロカーネル１１３により選択的に動作させる。スレーブＣＰＵ１０４はカーネル１２３とＥｘｅｃｕｔｏｒ１３３とをマイクロカーネル１１４により選択的に動作させる。
【００４１】
また、特定部３０３は、判断部３０２により対象ソフトウェアが共通プログラムを利用するソフトウェアであると判断された場合、マルチコアプロセッサから第１の実行制御プログラムが動作する第１のＣＰＵまたは第３のＣＰＵを特定する。
【００４２】
また、特定部３０３は、判断部３０２により対象ソフトウェアが共通プログラムを利用しないソフトウェアであると判断された場合、マルチコアプロセッサから第２の実行制御プログラムが動作する第２のＣＰＵまたは第３のＣＰＵを特定する。
【００４３】
以上を踏まえて、図を用いて詳細な例を説明する。
【００４４】
図４は、Ａ型のソフトウェアがマスタＣＰＵ１０１に割り当てられる例を示す説明図である。まず、マスタＯＳ１１１がＡＰＰ１Ａの割り当て指示を受け付けると、マスタＯＳ１１１がＡＰＰ１Ａのアプリケーションタイプをタグ情報１４１に基づいて判断する。ＡＰＰ１ＡはＡ型のソフトウェアである。
【００４５】
マスタＯＳ１１１が、カーネル動作中またはＥｘｅｃｕｔｏｒが実行中でないＣＰＵを特定する。低負荷なＣＰＵをプロセステーブル１４２に基づいて特定する。ここでは、たとえば、全ＣＰＵが特定されるため、マスタＯＳ１１１がＡＰＰ１ＡをマスタＣＰＵ１０１に割り当てる。そして、マスタＯＳ１１１がＡＰＰ１Ａを実行する。
【００４６】
図５は、Ａ型のソフトウェアがスレーブＣＰＵ１０２に割り当てられる例を示す説明図である。マスタＯＳ１１１がＡＰＰ２Ａの割り当て指示を受け付けると、マスタＯＳ１１１がＡＰＰ２Ａのアプリケーションタイプをタグ情報１４１に基づいて判断する。ＡＰＰ２ＡはＡ型のソフトウェアである。
【００４７】
つぎに、マスタＯＳ１１１が低負荷なＣＰＵであるスレーブＣＰＵ１０２にＡＰＰ２Ａの起動指示を通知する。マスタＯＳ１１１がカーネル動作中またはＥｘｅｃｕｔｏｒが実行中でないＣＰＵを特定する。そして、マスタＯＳ１１１が特定したＣＰＵにＡＰＰ２Ａを割り当てる。ここでは、マスタＯＳ１１１がスレーブＣＰＵ１０２へＡＰＰ２Ａの実行指示を通知する。
【００４８】
そして、マイクロカーネル１１２がＡＰＰ２Ａの実行指示を受け付けると、マイクロカーネル１１２がカーネル１２１をスリープ状態から復帰させる。すなわち、マイクロカーネル１１２がＥｘｅｃｕｔｏｒ１３１動作からカーネル１２１動作に切り替える。そして、マイクロカーネル１１２がカーネル１２１にＡＰＰ２Ａを割り当て、カーネル１２１がＡＰＰ２Ａを実行する。
【００４９】
図６は、Ｂ型のソフトウェアがスレーブＣＰＵ１０２とスレーブＣＰＵ１０３に割り当てられる例を示す説明図である。マスタＯＳ１１１がＡＰＰ１Ｂの割り当て指示を受け付けると、マスタＯＳ１１１がＡＰＰ１Ｂのアプリケーションタイプをタグ情報１４１に基づいて判断する。ＡＰＰ１ＢはＢ型のソフトウェアである。ＡＰＰ１Ｂは、たとえば、ＡＰＰ１Ｂ−Ｐ１とＡＰＰ１Ｂ−Ｐ２との２つのプロセスにより構成されている。
【００５０】
つぎに、マスタＯＳ１１１がマスタＣＰＵ１０１およびスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４からカーネル動作または何も割り当てられていないＣＰＵを特定する。ここでは、全ＣＰＵが特定される。マスタＯＳ１１１はスレーブＣＰＵ１０２にＡＰＰ１Ｂ−Ｐ１の実行指示を通知する。そして、マイクロカーネル１１２がＡＰＰ１Ｂ−Ｐ１の実行指示を受け付けると、マイクロカーネル１１２がカーネル１２１にＡＰＰ１Ｂ−Ｐ１を割り当て、カーネル１２１がＡＰＰ１Ｂ−Ｐ１を実行する。
【００５１】
つぎに、マスタＯＳ１１１はスレーブＣＰＵ１０３にＡＰＰ１Ｂ−Ｐ２の実行指示を通知する。そして、マイクロカーネル１１３がＡＰＰ１Ｂ−Ｐ２の実行指示を受け付けると、マイクロカーネル１１３がカーネル１２２をスリープ状態から復帰させる。マイクロカーネル１１３がカーネル１２２にＡＰＰ１Ｂ−Ｐ２を割り当てると、カーネル１２２がＡＰＰ１Ｂ−Ｐ２を実行する。
【００５２】
図７は、スレーブＣＰＵに割り当てられたＢ型のソフトウェアのプロセスがマイグレーションされる例を示す説明図である。つぎに、マスタＯＳ１１１がＡＰＰ１Ｃの起動指示を受け付けると、マスタＯＳ１１１がＡＰＰ１Ｃのアプリケーションタイプをタグ情報１４１に基づいて判断する。ＡＰＰ１ＣはＣ型のソフトウェアである
【００５３】
つぎに、マスタＯＳ１１１がマスタＣＰＵ１０１およびスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４からＥｘｅｃｕｔｏｒ動作またはスリープ状態のＣＰＵを特定する。ここでは、スレーブＣＰＵ１０４が特定される。マスタＯＳ１１１はタグ情報１４１からＡＰＰ１Ｃの実行に必要なＣＰＵ数を取得する。そして、マスタＯＳ１１１は、ＡＰＰ１Ｃの実行に必要なＣＰＵ数と特定したＣＰＵ数とを比較することにより、ＡＰＰ１Ｃの実行に必要なＣＰＵ数をアサインできるか否かを判断する。ここでは、ＡＰＰ１Ｃの実行に必要なＣＰＵ数がアサインできないと判断される。
【００５４】
つぎに、マスタＯＳ１１１がスレーブＣＰＵ１０２〜スレーブＣＰＵ１０４からカーネル動作のＣＰＵを特定する。ここで、スレーブＣＰＵ１０２とスレーブＣＰＵ１０３が特定される。たとえば、マスタＯＳ１１１が、特定した２つのＣＰＵのうち低負荷であるスレーブＣＰＵ１０３を選択する。マスタＯＳ１１１がスレーブＣＰＵ１０３上でＡ型のソフトウェアまたはＢ型のソフトウェアが動作しているか否かをプロセステーブル１４２に基づいて判断する。
【００５５】
スレーブＣＰＵ１０３はＢ型のソフトウェアであるＡＰＰ１ＢのうちのＡＰＰ１Ｂ−Ｐ２を実行している。マスタＯＳ１１１がＡＰＰ１Ｂ−Ｐ２をカーネル動作のＣＰＵへマイグレートする。カーネル動作のＣＰＵは、マスタＣＰＵ１０１とスレーブＣＰＵ１０２であるが、ここでは、ＡＰＰ１Ｂ−Ｐ２はマスタＣＰＵ１０１へマイグレードされる。
【００５６】
ここで、マイグレートとは、マイグレート元のＣＰＵのキャッシュを共有メモリ１０５に書き出して、マイグレートする対象プロセスのコンテキストテーブルのポインタをマイグレート先のＣＰＵにプロセッサ間通信で通知する。
【００５７】
図８は、Ｃ型のソフトウェアがスレーブＣＰＵ１０３とスレーブＣＰＵ１０４に割り当てられる例を示す説明図である。マスタＯＳ１１１がスレーブＣＰＵ１０３へＡＰＰ１Ｃの実行指示を通知する。スレーブＣＰＵ１０３はＡＰＰ１Ｃの実行指示を受け付けると、マイクロカーネル１１３がカーネル１２２動作からＥｘｅｃｕｔｏｒ１３２動作に切り替える。そして、Ｅｘｅｃｕｔｏｒ１３２がＡＰＰ１Ｃを呼び出して実行する。
【００５８】
具体的には、Ｃ型のソフトウェアであるＡＰＰ１Ｃの実行指示は、たとえば、ＡＰＰ１Ｃの割り込み指示である。スレーブＣＰＵ１０３のマイクロカーネル１１３が割り込み指示を受け付けると、Ｅｘｅｃｕｔｏｒ１３２が割り込みハンドラのように直ちにＡＰＰ１Ｃを呼び出して実行する。
【００５９】
また、ＡＰＰ１ＣがＲＰＣによって関数（図中Ｒｅｍｏｔｅ  Ｆｕｎｃ）をスレーブＣＰＵ１０４で呼び出す。マイクロカーネル１１４がＥｘｅｃｕｔｏｒ１３３を動作させ、該ＡＰＰ１ＣからのＲＰＣによる関数をＥｘｅｃｕｔｏｒ１３３が呼び出して実行する。また、関数の実行結果が呼び出し元の関数（ここでは、スレーブＣＰＵ１０３で実行中のＡＰＰ１Ｃ）に通知され、該関数が終了する。該関数の実行が終了すると、マイクロカーネル１１４がスレーブＣＰＵ１０４をスリープ状態とする。なお、スリープ状態とは、割り込み指示（関数の実行指示）のみを受け付けている状態である。
【００６０】
（マルチコアプロセッサシステム１００の起動時に関する制御処理手順）
図９は、マルチコアプロセッサシステム１００の起動時に関する制御処理手順を示すフローチャートである。まず、マスタＣＰＵ１０１がマスタＯＳ１１１を起動する（ステップＳ９０１）。マスタＯＳ１１１が起動されると、各スレーブＣＰＵが、マイクロカーネルを起動し（ステップＳ９０２）、カーネルを起動して該カーネルをスリープ状態とする（ステップＳ９０３）。
【００６１】
つぎに、各スレーブＣＰＵが、Ｅｘｅｃｕｔｏｒを起動する（ステップＳ９０４）。そして、マスタＣＰＵ１０１は処理を待ち受ける（ステップＳ９０５）。処理を待ち受けるとはソフトウェアの起動指示を受け付けることを示す。図を用いてマスタＣＰＵ１０１がソフトウェアの起動指示を受け付けた場合のマルチコアプロセッサシステム１００の制御処理手順について説明する。
【００６２】
（マルチコアプロセッサシステム１００の制御処理手順）
図１０〜図１２は、マルチコアプロセッサシステム１００の制御処理手順を示すフローチャートである。まず、マスタＣＰＵ１０１が、ソフトウェアの起動指示を受け付けたか否かを判断し（ステップＳ１００１）、ソフトウェアの起動指示を受け付けていないと判断した場合（ステップＳ１００１：Ｎｏ）、ステップＳ１００１へ戻る。マスタＣＰＵ１０１が、ソフトウェアの起動指示を受け付けたと判断した場合（ステップＳ１００１：Ｙｅｓ）、起動指示を受け付けた対象ソフトウェアのソフトタイプをタグ情報１４１に基づいて判断する（ステップＳ１００２）。
【００６３】
マスタＣＰＵ１０１が、起動指示を受け付けた対象ソフトウェアのソフトタイプがＡ型のソフトウェアであると判断された場合（ステップＳ１００２：Ａ型）、カーネル動作またはスリープ状態のＣＰＵを特定する（ステップＳ１００３）。そして、マスタＣＰＵ１０１が、対象ソフトウェアをスレーブＣＰＵへ割り当てるか否かを判断する（ステップＳ１００４）。
【００６４】
つぎに、マスタＣＰＵ１０１が、対象ソフトウェアをスレーブＣＰＵへ割り当てないと判断した場合（ステップＳ１００４：Ｎｏ）、対象ソフトウェアのプロセスを実行し（ステップＳ１００５）、ステップＳ１００１へ戻る。マスタＣＰＵ１０１が、対象ソフトウェアをスレーブＣＰＵへ割り当てると判断した場合（ステップＳ１００４：Ｙｅｓ）、対象ソフトウェアのプロセスの実行指示を割り当てるスレーブＣＰＵへ通知し（ステップＳ１００６）、ステップＳ１００１へ戻る。
【００６５】
割り当てるスレーブＣＰＵが、対象ソフトウェアのプロセスの実行指示を受け付けると、カーネル動作にスイッチし（ステップＳ１００７）、対象ソフトウェアのプロセスを実行する（ステップＳ１００８）。
【００６６】
つぎに、マスタＣＰＵ１０１が、起動指示を受け付けた対象ソフトウェアのソフトタイプがＢ型のソフトウェアであると判断された場合（ステップＳ１００２：Ｂ型）、カーネル動作またはスリープ状態のＣＰＵを特定する（ステップＳ１００９）。なお、マスタＣＰＵ１０１はカーネル動作のＣＰＵまたはスリープ状態のＣＰＵ（いずれのプロセスおよび関数も割り当てられていないＣＰＵ）を特定するとともに、対象ソフトウェアのプロセスを割り当てるＣＰＵを決定することとする。
【００６７】
つぎに、マスタＣＰＵ１０１が、対象ソフトウェアのプロセスのうち、未選択のプロセスがあるか否かを判断する（ステップＳ１０１０）。マスタＣＰＵ１０１が、未選択のプロセスがあると判断した場合（ステップＳ１０１０：Ｙｅｓ）、未選択のプロセスから任意のプロセスを選択する（ステップＳ１０１１）。そして、マスタＣＰＵ１０１が、該選択したプロセスがスレーブＣＰＵへ割り当てられるか否かを判断する（ステップＳ１０１２）。マスタＣＰＵ１０１が、該選択したプロセスがスレーブＣＰＵへ割り当てられないと判断した場合（ステップＳ１０１２：Ｎｏ）、選択したプロセスを実行する（ステップＳ１０１３）。
【００６８】
マスタＣＰＵ１０１が、該選択したプロセスがスレーブＣＰＵへ割り当てられると判断した場合（ステップＳ１０１２：Ｙｅｓ）、割り当てるスレーブＣＰＵへ選択したプロセスの実行指示を通知し（ステップＳ１０１４）、ステップＳ１０１０へ戻る。
【００６９】
割り当てるスレーブＣＰＵが、割り当てるスレーブＣＰＵへ選択したプロセスの実行指示を受け付けると、カーネル動作にスイッチする（ステップＳ１０１５）。そして、割り当てるスレーブＣＰＵが、実行指示を受け付けたプロセスを実行し（ステップＳ１０１６）、ＯＳ間連携機構を起動する（ステップＳ１０１７）。
【００７０】
ステップＳ１００８またはステップＳ１０１７のつぎに、割り当てるスレーブＣＰＵが、プロセスが割り当てられているか否かを判断する（ステップＳ１０１８）。割り当てるスレーブＣＰＵが、プロセスが割り当てられていると判断した場合（ステップＳ１０１８：Ｙｅｓ）、ステップＳ１０１８に戻る。割り当てるスレーブＣＰＵが、プロセスが割り当てられていないと判断した場合（ステップＳ１０１８：Ｎｏ）、Ｅｘｅｃｕｔｏｒ動作にスイッチし（ステップＳ１０１９）、カーネルをスリープ状態に設定する（ステップＳ１０２０）。
【００７１】
また、ステップＳ１０１０において、マスタＣＰＵ１０１が、未選択のプロセスがないと判断した場合（ステップＳ１０１０：Ｎｏ）、ステップＳ１００１へ戻る。
【００７２】
つぎに、マスタＣＰＵ１０１が、起動指示を受け付けた対象ソフトウェアのソフトタイプがＣ型のソフトウェアであると判断された場合（ステップＳ１００２：Ｃ型）、Ｅｘｅｃｕｔｏｒ動作またはスリープ状態のスレーブＣＰＵを特定する（ステップＳ１０２１）。ここで、スリープ状態のスレーブＣＰＵとはいずれのプロセスもいずれの関数も割り当てられていないスレーブＣＰＵである。マスタＣＰＵ１０１が、対象ソフトウェアの必要ＣＰＵ数分のスレーブＣＰＵを特定したか否かを判断する（ステップＳ１０２２）。
【００７３】
マスタＣＰＵ１０１が、対象ソフトウェアの必要ＣＰＵ数分のスレーブＣＰＵが特定したと判断していない場合（ステップＳ１０２２：Ｎｏ）、不足ＣＰＵ数＝必要ＣＰＵ数−特定したＣＰＵ数とする（ステップＳ１０２３）。つぎに、マスタＣＰＵ１０１が、スレーブＣＰＵのうち、カーネル動作のＣＰＵを特定し（ステップＳ１０２４）、特定したＣＰＵのうち、負荷の軽いＣＰＵから順に不足ＣＰＵ数分のＣＰＵを選択する（ステップＳ１０２５）。
【００７４】
つぎに、マスタＣＰＵ１０１が、選択した各ＣＰＵでＡ型のソフトウェアまたはＢ型のソフトウェアが運用中であるか否かを判断する（ステップＳ１０２６）。マスタＣＰＵ１０１が、選択した各ＣＰＵでＡ型のソフトウェアまたはＢ型のソフトウェアが運用中であると判断した場合（ステップＳ１０２６：Ｙｅｓ）、ステップＳ１０２７へ移行する。
【００７５】
マスタＣＰＵ１０１が、選択した各ＣＰＵで運用中のＡ型のソフトウェアまたはＢ型のソフトウェアを選択されなかったカーネル動作ＣＰＵまたはマスタＣＰＵ１０１へマイグレートし（ステップＳ１０２７）、ステップＳ１０２８へ移行する。ステップＳ１０２６において、マスタＣＰＵ１０１が、選択した各ＣＰＵでＡ型のソフトウェアまたはＢ型のソフトウェアが運用中でないと判断した場合（ステップＳ１０２６：Ｎｏ）、ステップＳ１０２８へ移行する。
【００７６】
ステップＳ１０２２：Ｎｏ、ステップＳ１０２６：Ｎｏ、またはステップＳ１０２７のつぎに、割り当てるスレーブＣＰＵがＥｘｅｃｕｔｏｒ動作にスイッチする（ステップＳ１０２８）。そして、アプリマスタを割り当てるスレーブＣＰＵ（第１のＣＰＵ）が、対象ソフトウェアのアプリマスタを起動し（ステップＳ１０２９）、ＲＰＣを受け付けるスレーブＣＰＵへＲＰＣを発行する（ステップＳ１０３０）。アプリマスタとは、対象ソフトウェアのマスタ関数である。
【００７７】
第１のＣＰＵは、アプリマスタの実行を終了するとマスタＣＰＵ１０１へ実行結果をリターンし（ステップＳ１０３１）、スリープ状態となる（ステップＳ１０３２）。
【００７８】
一方、第１のＣＰＵからＲＰＣを受け付けるスレーブＣＰＵ（第２のＣＰＵ）が、スリープ状態（ステップＳ１０３３）からＲＰＣを受け付けてリモートコール関数を起動する（ステップＳ１０３４）。そして、第２のＣＰＵが、関数の実行を終了すると、実行結果を第１のＣＰＵへリターンし（ステップＳ１０３５）、ステップＳ１０３３へ戻る。
【００７９】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、対象ソフトウェアが共通プログラムを利用するソフトウェアか否かに基づいて該対象ソフトウェアを割り当てるＣＰＵを特定する。これにより、シングルコアプロセッサシステムまたはどのマルチコアプロセッサシステムに対応して開発されたアプリケーションであるかに関係なくアプリケーションを実行させることができる。
【００８０】
また、対象ソフトウェアが共通プログラムを利用するソフトウェアであれば、共通プログラムを利用する第１の実行制御プログラムが動作するＣＰＵを特定する。これにより、ＯＳ上で動作するソフトウェアを変更することなく実行させることができる。
【００８１】
また、対象ソフトウェアが共通プログラムを利用しないソフトウェアであれば、共通プログラムを利用しない第２の実行制御プログラムが動作するＣＰＵを特定する。これにより、ＯＳ上で動作しないソフトウェアを変更することなく実行させることができる。
【００８２】
また、共通プログラムを利用する第１の実行制御プログラムと共通プログラムを利用しない第２の実行制御プログラムとを選択的に切り替えるＣＰＵを有する。これにより、ソフトウェアがどのようなシステムで開発されたかによって、該ソフトウェアを効率よく実行させることができる。
【符号の説明】
【００８３】
１００  マルチコアプロセッサシステム
１１１  マスタＯＳ
１２１，１２２，１２３  カーネル
１３１，１３２，１３３  Ｅｘｅｃｕｔｏｒ
１１２，１１３，１１４  マイクロカーネル
３０１  検出部
３０２  判断部
３０３  特定部
３０４  通知部
３０５，３０７，３０９  受付部
３０６，３０８，３１０  切り替え部
【図１】
0005459402.tif 000002
【図２】
0005459402.tif 000003
【図３】
0005459402.tif 000004
【図４】
0005459402.tif 000005
【図５】
0005459402.tif 000006
【図６】
0005459402.tif 000007
【図７】
0005459402.tif 000008
【図８】
0005459402.tif 000009
【図９】
0005459402.tif 000010
【図１０】
0005459402.tif 000011
【図１１】
0005459402.tif 000012
【図１２】
0005459402.tif 000013