(57)【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、
処理の割り振りを行う権限であるマスタ権を有する場合に、前記複数のプロセッサコアに処理を割り振る複数のスケジューラと、
前記複数のスケジューラの１つである第１のスケジューラがマスタ権を付与された場合に、前記第１のスケジューラが前記複数のプロセッサコアに処理を割り振る前に、前記第１のスケジューラのマスタ権を保持したまま、前記第１のスケジューラを除く前記複数のスケジューラのいずれかにマスタ権を付与し、前記第１のスケジューラが前記複数のプロセッサコアに処理を割り振った後、前記第１のスケジューラのマスタ権を排除するサイクルを、割り振り対象の処理がなくなるまで繰り返すマスタ制御部と、
を備えることを特徴とするマルチコアシステム。
【請求項２】
マスタ権を有するスケジューラは、任意のプロセッサコアで処理可能な処理に対して割り振りを行い、プロセッサコアが予約されている処理に対しては、当該処理の起動を、当該予約されているプロセッサコアに依頼することを特徴とする請求項１に記載のマルチコアシステム。
【請求項３】
前記複数のスケジューラの各々は、前記マスタ制御部によりマスタ権を付与された後、前記複数のプロセッサコアごとの負荷情報を取得し、前記複数のプロセッサコアのうち負荷の低いプロセッサコアに処理を割り振ることを特徴とする請求項１に記載のマルチコアシステム。
【請求項４】
前記マスタ制御部は、前記複数のスケジューラの各々による最後の割り振り対象の処理の割り振りが終了すると、マスタ権を所定のプロセッサコアに戻すことを特徴とする請求項１に記載のマルチコアシステム。
【請求項５】
複数のプロセッサコアを有するマルチコアシステムの起動方法において、
処理の割り振りを行う権限であるマスタ権を有する場合に、前記複数のプロセッサコアに処理を割り振る複数のスケジューラの１つである第１のスケジューラが、マスタ権を付与された場合に、前記第１のスケジューラが前記複数のプロセッサコアに処理を割り振る前に、前記第１のスケジューラのマスタ権を保持したまま、前記第１のスケジューラを除く前記複数のスケジューラのいずれかにマスタ権を付与し、前記第１のスケジューラが前
記複数のプロセッサコアに処理を割り振った後、前記第１のスケジューラのマスタ権を排除するサイクルを、割り振り対象の処理がなくなるまで繰り返すことを特徴とする起動方法。
【請求項６】
マスタ権を有するスケジューラは、任意のプロセッサコアで処理可能な処理に対して割り振りを行い、プロセッサコアが予約されている処理に対しては、当該処理の起動を、当該予約されているプロセッサコアに依頼することを特徴とする請求項５に記載の起動方法。
【請求項７】
前記複数のスケジューラの各々が、マスタ権を付与された後、前記複数のプロセッサコアごとの負荷情報を取得し、前記複数のプロセッサコアのうち負荷の低いプロセッサコアに処理を割り振ることを特徴とする請求項５に記載の起動方法。
【請求項８】
前記複数のスケジューラの各々による最後の割り振り対象の処理の割り振りが終了すると、マスタ権を所定のプロセッサコアに戻すことを特徴とする請求項５に記載の起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチコアシステムおよび起動方法に関する。
【背景技術】
【０００２】
従来、コンピュータや携帯端末などの情報処理装置、またはデジタルカメラやテレビシステムなどの画像や音声の処理装置では、ユーザが装置の電源をオンにした後、できるだけ速やかに装置の起動を完了することが望まれている。高速に装置を起動する方式の一つに、ハイバネートブート方式がある。ハイバネートブート方式は、通常の起動シーケンスを行わずに、メモリなどに保持しておいた前回の動作状態を復元することによって高速に起動する技術である。また、ＵＩ（Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ、ユーザインターフェース）先行起動方式がある。ＵＩ先行起動方式は、装置の起動時に早い段階でユーザに対してダミーの画面を表示することにより擬似的に高速に起動したようにみせる技術である。
【０００３】
一方、複数のプロセッサを有するマルチプロセッサシステムや、複数のプロセッサコアを有するマルチコアシステム（以下、まとめてマルチコアシステムとする）がある。マルチコアシステムでは、複数のスケジューラのそれぞれに予め複数のプロセスを割り当てておき、選択されたスケジューラにおいてその割り当てに従って順次プロセスを実行するスケジューリング方式がある。また、マルチプロセッサシステムにおいて、アルゴリズムの異なる複数のスケジューラを用意し、タスクごとに適当なアルゴリズムのスケジューラでスケジューリングを行う方式がある。また、マスタスケジューラを有するプロセッサとスレーブスケジューラを有するプロセッサとがあり、マスタスケジューラがスレーブスケジューラによるプロセスの実行を制御する方式がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−１１７７８６号公報
【特許文献２】特開平４−６０８４３号公報
【特許文献３】特開平１１−２６５２９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ハイバネートブート方式では、装置の動作状態を格納するための記憶領域が必要であるという問題点がある。ＵＩ先行起動方式では、実際には装置の起動が高速に完了するわけではない。また、スケジューラごとにプロセスが予め割り当てられていると、各スケジューラに柔軟にプロセスを割り当てることができない。そのため、例えば携帯電話端末のように、使用中にユーザがシステムの更新や新機能の追加を行うことができるようなシステムには向いていない。また、複数のスケジューラが動作する場合には、確保したメモリや割込み番号などに矛盾が生じないようにスケジューラ間で同期をとる必要があるという問題点がある。また、アルゴリズムの異なる複数のスケジューラを動作させてスケジューリングの速さを競わせるような場合には、採用されなかったスケジューラが動作していたプロセッサは、結果として不要な演算を行ったことになる。これは、消費電力の点で問題である。また、アルゴリズムの異なる複数のスケジューラを用意しても、いずれかのアルゴリズムのスケジューラに負荷が集中すると、そのスケジューラが動作するプロセッサの処理が遅くなるという問題点がある。
【０００６】
マルチコアシステムにおいて装置を高速に起動することができるマルチコアシステムおよび起動方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
マルチコアシステムでは、複数のプロセッサコアでそれぞれスケジューラが動作する。各スケジューラは、マスタ権を有するときに各プロセッサコアに対して処理を割り振る。マスタ権は、処理の割り振りを行う権限である。マスタ制御部は、スケジューラ間でのマスタ権の移動を制御する。各スケジューラは、マスタ権を受信した後、各プロセッサコアに対して処理を割り振る前に他のプロセッサコアへマスタ権の移動を送信する。各スケジューラは、各プロセッサコアに対して処理を割り振った後、マスタ権を破棄してマスタ権の受信を待機する状態となる。各スケジューラは、このようなマスタ権の受信、マスタ権移動の送信、各プロセッサコアに対する処理の割り振り、マスタ権の破棄およびマスタ権の受信待機というサイクルを、処理対象の処理がなくなるまで繰り返す。
【発明の効果】
【０００８】
開示のマルチコアシステムおよび起動方法によれば、マルチコアシステムにおいて装置を高速に起動することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】実施例１にかかるマルチコアシステムを示すブロック図である。
【図２】実施例１にかかる起動方法を示すフローチャートである。
【図３】実施例２にかかるマルチコアシステムを示すブロック図である。
【図４】実施例２にかかる起動方法において最初にマスタ権を受信するプロセッサコアの動作を示すフローチャートである。
【図５】実施例２にかかる起動方法において最初にマスタ権を受信しないプロセッサコアの動作を示すフローチャートである。
【図６】実施例２にかかる起動方法においてスレーブ制御状態における状態遷移を示す図である。
【図７】実施例２にかかる起動方法によるマルチコアシステムの動作を示す図である。
【図８】比較例とする起動方法によるマルチコアシステムの動作を示す図である。
【発明を実施するための形態】
【００１０】
以下に、この発明にかかるマルチコアシステムおよび起動方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１１】
（実施例１）
実施例１では、各プロセッサコアで動作するスケジューラが他のプロセッサコアのスケジューラへマスタ権を譲り渡した後に各プロセッサコアに処理を割り振る。それにより、同時に複数のプロセッサコアでそれぞれに割り振られた処理が少しずつ時間をずらしながら並列に行われる。
【００１２】
・マルチコアシステムの説明
図１は、実施例１にかかるマルチコアシステムを示すブロック図である。図１に示すように、マルチコアシステムは、複数、特に限定しないが、図示例では４個のプロセッサコア１，２，３，４を有する。各プロセッサコア１，２，３，４では、それぞれスケジューラ５，６，７，８が動作する。各スケジューラ５，６，７，８は、マスタ権を有するときにスケジューリングを行う。スケジューリングによって、各プロセッサコア１，２，３，４に処理が割り振られる。マスタ権は、スケジューリングを行う権限である。マルチコアシステムは、スケジューラ５，６，７，８間でのマスタ権の移動を制御するマスタ制御部９を有する。
【００１３】
各スケジューラ５，６，７，８は、マスタ権を受信した後、スケジューリングを行う前に、他のプロセッサコア１，２，３，４へマスタ権の移動を送信する。各スケジューラ５，６，７，８は、スケジューリングを行った後、マスタ権を破棄してマスタ権の受信を待機する状態となる。マスタ制御部９は、各スケジューラ５，６，７，８がこのような一連のサイクルを、処理対象の処理がなくなるまで繰り返すように制御する。スケジューラ５，６，７，８およびマスタ制御部９は、各プロセッサコア１，２，３，４で例えばオペレーティングシステム（ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のカーネル部などのソフトウェアを実行することにより実現される。
【００１４】
・起動方法の説明
図２は、実施例１にかかる起動方法を示すフローチャートである。図２のフローチャートは、複数のスケジューラのうちの一つのスケジューラの動作を示すものである。ここでは、図１に示す構成のスケジューラＰ５の動作について説明する。図１に示す他のスケジューラＱ６、Ｒ７およびＳ８の動作も同様である。
【００１５】
図２に示すように、上述したマルチコアシステムを有する装置の電源がオンになる（コールドブート、コールドスタート）か、またはリセット（コールドリブート、コールドリスタート）されると、スケジューラＰ５はマスタ権を受信する（ステップＳ１）。次いで、スケジューラＰ５は、他のプロセッサコアＱ２、Ｒ３およびＳ４のいずれかへ、当該プロセッサコアで動作するスケジューラへマスタ権を移動することを送信する（ステップＳ２）。送信が終了するとスケジューラＰ５は、スケジューリングを行い、他のプロセッサコアＱ２、Ｒ３およびＳ４に処理を割り振る（ステップＳ３）。スケジューラＰ５は、スケジューリングが終了するとマスタ権を破棄し（ステップＳ４）、マスタ権の受信を待機する状態となる（ステップＳ５）。最初にマスタ権を受信しないスケジューラＱ６、Ｒ７およびＳ８については、マスタ権を受信するまではマスタ権の受信を待機する状態となるので、ステップＳ５から始まることになる。各スケジューラＰ５、Ｑ６、Ｒ７およびＳ８は、このステップＳ１からステップＳ５までを、処理する対象の処理がなくなるまで繰り返す。
【００１６】
実施例１によれば、各スケジューラが他のスケジューラにマスタ権を譲り渡した後にスケジューリングを行うので、各プロセッサコアに割り振られた処理の一部と他のプロセッサコアに割り振られた別の処理の一部とが並列に実行されることになる。従って、各プロセッサコアに割り振られた処理の一部を並列に実行しない場合と比べて、マルチコアシステムを有する装置を高速に起動することができる。また、各プロセッサコアで動作するスケジューラが他のスケジューラからマスタ権を譲り受けてスケジューリングを行うので、複数のスケジューラがスケジューリングを並列に実行する。従って、マスタとなる唯一のスケジューラが全てのプロセッサコアに対してスケジューリングを行う場合と比べて、マルチコアシステムを有する装置を高速に起動することができる。
【００１７】
（実施例２）
実施例２は、実施例１のマルチコアシステムを、例えば携帯電話端末などの携帯端末やテレビシステムなどの家庭電化製品の組み込みシステムとして用いたものである。
【００１８】
・マルチコアシステムの説明
図３は、実施例２にかかるマルチコアシステムを示すブロック図である。図３に示すように、マルチコアシステムは、プロセッサコア１１，１２，１３，１４、例えば画像処理や音声処理や通信処理などの各種処理を行うデバイス１５，１６、例えばハードディスクなどのストレージ１７および作業領域として使用されるメインメモリ１８を備えている。これらプロセッサコア１１，１２，１３，１４、デバイス１５，１６、ストレージ１７およびメインメモリ１８は、バス１９を介して相互に接続されている。各プロセッサコア１１，１２，１３，１４ではオペレーティングシステムが別々に動作するが、全体として一つのシステムが構築されている。プロセッサコアの数およびデバイスの数は、図示例に限らない。例えば、プロセッサコアの数は２個、３個または５個以上でもよい。
【００１９】
ストレージ１７は、巡回マスタイメージ２１、スレーブ機能イメージ２２、初期化プロセスイメージ２３およびＯＳカーネルブートイメージ２４を記憶している。巡回マスタイメージ２１は、スケジューラ間でのマスタ権の巡回を制御するプログラムのデータである。スレーブ機能イメージ２２は、各プロセッサコアにおいて各スケジューラにより割り振られた処理の受け付けおよび起動を制御するプログラムのデータである。初期化プロセスイメージ２３は、各種デバイスを初期化するプログラムのデータである。ＯＳカーネルブートイメージ２４は、オペレーティングシステムのカーネルを読み込んで動作させるプログラムのデータである。
【００２０】
巡回マスタイメージ２１、スレーブ機能イメージ２２、初期化プロセスイメージ２３およびＯＳカーネルブートイメージ２４は、ブートプログラムの実行によりストレージ１７から読み出されてメインメモリ１８に展開される。それによって、メインメモリ１８上にマスタ制御部３１、スレーブ制御部３２、初期化プロセスとしての初期化スレッド３３およびＯＳカーネル部３４が存在することになる。
【００２１】
ＯＳカーネル部３４は、オペレーティングシステムの基本的な機能、例えばプロセスやスレッドの起動などの機能を実装した部分である。ＯＳカーネル部３４は、プロセッサコアごとに動作する図示しないスケジューラを含んでいる。マスタ制御部３１は、スケジューラ間でのマスタ権の巡回を制御するプログラムである。マスタ権の一例として、例えばマルチコアオペレーティングシステムに記載されているマスタフラグを用いてもよい。この場合、マスタ制御部３１は、このマスタフラグを制御する。初期化スレッド３３は、各種デバイスを初期化するプログラムである。スレーブ制御部３２は、全てのプロセッサコアに常駐し、各スケジューラにより割り振られた処理の受け付けおよび起動を制御するプログラムである。
【００２２】
・起動方法の説明
図４は、実施例２にかかる起動方法において最初にマスタ権を受信するプロセッサコアの動作を示すフローチャートである。ここでは、図３に示す構成のプロセッサコアＰ１１で動作するカーネルが最初にマスタ権を受信するとして説明する。
【００２３】
図４に示すように、図３に示すマルチコアシステムを有する装置の電源がオンになるか、またはリセットされると（ステップＳ１１）、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４にリセット信号が入力される。それによって、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４では、内部の起動プログラムが動作する。この起動プログラムには、装置内において各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４がアクセス可能なアドレス空間が定義されている。また、起動プログラムには、ブートプログラムの開始アドレスが記載されている。このような起動プログラムは、スタートアップルーチンと呼ばれることがある。
【００２４】
各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４は、起動プログラムの手続きに従ってブートプログラムを読み込み、カーネルコアを読み込んで起動する（ステップＳ１２）。カーネルコアは、オペレーティングシステムの基本となる部分である。カーネルコアが起動することによって、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４の初期設定が行われ、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４でオペレーティングシステムが動作するようになる。カーネルコアだけでは、各種の機能サービスは起動されていない。
【００２５】
次いで、プロセッサコアＰ１１で動作するカーネルは、マスタ権を受信する（ステップＳ１３）。そして、プロセッサコアＰ１１で動作するカーネルは、プロセッサコア間通信によって他のプロセッサコアＱ１２、Ｒ１３またはＳ１４へマスタ権の移動を送信する（ステップＳ１４）。送信先のプロセッサコアはいずれでもよい。例えば、プロセッサコアの番号に基づいてマスタ権の移動を送信してもよい。例えば、送信先のプロセッサコアを、送信元のプロセッサコアの番号よりも１大きい番号のプロセッサコアとしてもよい。例えば、送信元のプロセッサコアの番号が最大値である場合、送信先のプロセッサコアを番号が最小のプロセッサコアとしてもよい。マスタ権の移動を送信してもマスタ権を破棄するまでは、プロセッサコアＰ１１で動作するカーネルは、マスタ権を有する。
【００２６】
マスタ権の移動を送信した後、プロセッサコアＰ１１で動作するカーネルは、自身を含めた各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４の負荷情報を集約する（ステップＳ１５）。負荷情報は、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４が使用するメモリ資源などのリソースの使用状況を示す情報である。負荷情報は、例えばメインメモリ１８などのメモリに記憶されている。プロセッサコアＰ１１で動作するカーネルは、集約した負荷情報に基づいて各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４の負荷が分散されるようにスケジューリングを行う（ステップＳ１６）。
【００２７】
そして、プロセッサコアＰ１１で動作するカーネルは、予め用意されている資源情報に基づいてリソースを確保し、初期化スレッドを割り振ったプロセッサコアに対して当該初期化スレッドの起動を依頼する（ステップＳ１７）。資源情報には、装置の起動やリセットごとに固定されている情報として、利用する資源、コンテキスト領域、プロセス（スレッド）ＩＤ、プロセス（スレッド）名および競合する他のプロセス（スレッド）に関する情報が含まれている。処理するプロセッサコアが予約されている初期化スレッドについては、プロセッサコアＰ１１で動作するカーネルは、スケジューリングを行わずに、その予約されているプロセッサコアに起動を依頼する。
【００２８】
次いで、プロセッサコアＰ１１で動作するカーネルは、マスタ権を破棄し（ステップＳ１８）、再度マスタ権を受信するのを待機する状態となる（ステップＳ１９）。プロセッサコアＰ１１で動作するカーネルは、再度マスタ権を受信すると（ステップＳ１３）、ステップＳ１３からステップＳ１９までを繰り返す。
【００２９】
図５は、実施例２にかかる起動方法において最初にマスタ権を受信しないプロセッサコアの動作を示すフローチャートである。ここでは、図３に示す構成において、最初にマスタ権を受信しないプロセッサコアＱ１２、Ｒ１３およびＳ１４のうち、プロセッサコアＱ１２で動作するカーネルの動作について説明する。プロセッサコアＲ１３およびＳ１４で動作するカーネルの動作についても同様である。
【００３０】
図５に示すように、装置の電源がオンになるか、またはリセットされた後、カーネルコアが起動した状態となるまでは、図４を参照しながらプロセッサコアＰ１１について説明した通りである（ステップＳ１１、ステップＳ１２）。カーネルコアが起動すると、プロセッサコアＱ１２で動作するカーネルは、他のプロセッサコアＰ１１、Ｒ１３およびＳ１４からマスタ権を受信するのを待機する状態となる（ステップＳ２１）。待機中にプロセッサコアＱ１２で動作するカーネルがマスタ権を受信すると（ステップＳ２２）、プロセッサコア間通信によって他のプロセッサコアＰ１１、Ｒ１３またはＳ１４へマスタ権の移動を送信する（ステップＳ２３）。送信先については、例えば図４のステップＳ１４に関連して説明したようにプロセッサコアの番号順であってもよい。この時点では、プロセッサコアＱ１２で動作するカーネルは、マスタ権を有している。
【００３１】
これ以降は、図４を参照しながらプロセッサコアＰ１１で動作するカーネルについて説明した通りである。すなわち、プロセッサコアＱ１２で動作するカーネルは、上述したように、負荷情報を集約し（ステップＳ２４）、スケジューリングを行い（ステップＳ２５）、初期化スレッドの起動を依頼する（ステップＳ２６）。そして、プロセッサコアＱ１２で動作するカーネルは、マスタ権を破棄し（ステップＳ２７）、再度マスタ権を受信するのを待機する状態（ステップＳ２１）に戻り、これを繰り返す。
【００３２】
ところで、あるプロセッサコアで動作するカーネルが他のプロセッサコアへマスタ権の移動を送信することによって、複数のプロセッサコアがマスタ権を同時に有する状態となることがある。例えば、図４および図５の例において、プロセッサコアＰ１１で動作するカーネルがプロセッサコアＱ１２へマスタ権の移動を送信したとする。この場合、プロセッサコアＰ１１およびプロセッサコアＱ１２は、それぞれがマスタ権を破棄するまで、マスタ権を保持することになる。
【００３３】
実施例２のような装置の起動時ではなく、稼働中の装置で通常のプロセスを起動する際には、このように複数のプロセッサコアが同時にマスタ権を有すると、次のような不具合が生じることがある。例えば、複数のマスタ権を有するカーネルが偶然同じタイミングでメモリ資源などを確保しようとした場合にコンフリクトが発生してしまう。それに対して、実施例２は装置の起動時の動作である。装置の起動時に起動されるスレッドやプロセスに必要な資源は、予めオペレーティングシステムの起動情報として用意されている機能テーブルなどに資源情報として予約されている。従って、複数のプロセッサコアが同時に資源の確保を行っても不具合は生じない。
【００３４】
図６は、実施例２にかかる起動方法においてスレーブ制御状態における状態遷移を示す図である。図６に示すように、装置の電源がオンになるか、またはリセットされた後、カーネルコアが起動すると、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４は、スレーブ制御部３２により初期化スレッドの起動依頼を受け付ける状態となる（ステップＳ３１）。各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４は、他のプロセッサコアから初期化スレッドの起動依頼を受け付けると、当該スレッドを起動する（ステップＳ３２）。その際、依頼された初期化スレッドを起動したプロセッサコアは、当該スレッドの起動に使用したメモリ資源などのリソースを使用中として負荷情報を更新する。プロセッサコアは、依頼された初期化スレッドによるデバイスの初期化が終了すると、他のプロセッサコアから別の初期化スレッドの起動依頼を受け付ける状態に戻る。
【００３５】
上述したように、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４で動作するスケジューラは、負荷情報に基づいて負荷の低いプロセッサコアに初期化スレッドの起動を依頼する。その際、複数のスケジューラが同時に動作していることがあるので、各スケジューラが集約した負荷情報が、そのときの各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４の負荷状況を正確に反映した情報であるとは限らない。従って、負荷情報に基づいてプロセッサコアに初期化スレッドを割り振っていくと、プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４の負荷に一時的に偏りが生じることがある。しかし、そのような負荷の偏りは、数多く、例えば５０個から１００個程度、あるいは１００個以上の初期化スレッドを順次各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４に割り振っていく間に平均化されていく。従って、特に問題は生じない。
【００３６】
・動作の説明
図７は、実施例２にかかる起動方法によるマルチコアシステムの動作を示す図である。図７に示すように、図３に示すマルチコアシステムを有する装置の電源がオンになるか、またはリセットされると、プロセッサコアＰ１１において、起動プログラムが動作し、ブートプログラムが動作する（ステップＳ４１）。そして、プロセッサコア間通信によってプロセッサコアＰ１１から他のプロセッサコアＱ１２、Ｒ１３およびＳ１４にブート指示が与えられる（ステップＳ４２）。そして、各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４は、カーネルコアを起動し、初期設定を行う（ステップＳ４３）。その際、プロセッサコアＰ１１には、マスタ権が与えられる。
【００３７】
次いで、プロセッサコアＰ１１は、プロセッサコア間通信によってプロセッサコアＱ１２へマスタ権の移動を送信する（ステップＳ４４）。そして、プロセッサコアＰ１１は、初期化スレッドａのスケジューリング（図７に「Ａ」で示す）を行い（ステップＳ４５）、マスタ権を破棄する。
【００３８】
マスタ権を受信したプロセッサコアＱ１２は、プロセッサコア間通信によってプロセッサコアＲ１３へマスタ権の移動を送信する（ステップＳ４６）。そして、プロセッサコアＱ１２は、初期化スレッドｂのスケジューリング（図７に「Ｂ」で示す）を行い（ステップＳ４７）、マスタ権を破棄する。
【００３９】
マスタ権を受信したプロセッサコアＲ１３は、プロセッサコア間通信によってプロセッサコアＳ１４へマスタ権の移動を送信する（ステップＳ４８）。そして、プロセッサコアＲ１３は、初期化スレッドｃのスケジューリング（図７に「Ｃ」で示す）を行い（ステップＳ４９）、マスタ権を破棄する。
【００４０】
マスタ権を受信したプロセッサコアＳ１４は、プロセッサコア間通信によってプロセッサコアＰ１１へマスタ権の移動を送信する（ステップＳ５０）。そして、プロセッサコアＳ１４は、初期化スレッドｄのスケジューリング（図７に「Ｄ」で示す）を行い（ステップＳ５１）、マスタ権を破棄する。
【００４１】
マスタ権を受信したプロセッサコアＰ１１は、プロセッサコア間通信によってプロセッサコアＱ１２へマスタ権の移動を送信する（ステップＳ５２）。そして、プロセッサコアＰ１１は、初期化スレッドｅのスケジューリング（図７に「Ｅ」で示す）を行い（ステップＳ５３）、マスタ権を破棄する。以後、最終の初期化スレッドｎのスケジューリング（図７に「Ｎ」で示す）が終了（ステップＳ５４）するまで、同様の動作を繰り返す。最終の初期化スレッドｎのスケジューリングを行うプロセッサコア、図示例ではプロセッサコアＲ１３は、最初にマスタ権を受信したプロセッサコアＰ１１にマスタ権を戻す（ステップＳ５５）。これによって、マスタ権を巡回させる制御が解除される。
【００４２】
各初期化スレッドは、スケジューラにより、空いているプロセッサコア、すなわち処理を行っていないプロセッサコアに割り振られる。特に限定しないが、図７に示す例では、プロセッサコアＰ１１がスケジューリングＡを行っているときに、プロセッサコアＱ１２およびプロセッサコアＲ１３は処理を行っており、プロセッサコアＳ１４は処理を行っていない。従って、初期化スレッドａは、プロセッサコアＳ１４に割り振られており、プロセッサコアＳ１４で実行されている。同様に、初期化スレッドｂは、スケジューリングＢのときに空いているプロセッサコアＰ１１に割り振られており、プロセッサコアＰ１１で実行されている。ｃ、ｄ、ｅおよびｎの初期化スレッドについても同様である。
【００４３】
このように、実施例２では、複数のスケジューラで別々の初期化スレッドのスケージュリングが並列に行われる。また、複数のプロセッサコアで別々の初期化スレッドが並列に行われる。カーネルコアの起動によって各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４の初期設定が完了した時点からＦ個の初期化スレッドによるデバイスの初期化が完了するまでの時間Ｔは、次の（１）式で表される。ただし、プロセッサコアの数をＧ、プロセッサコアでの平均スケジューリング時間をＨ［ｍｓ］、プロセッサコア間の平均通信時間をＪ［ｎｓ］およびデバイスの平均初期化時間をＫ［ｍｓ］とする。ＪとＨとＫの大小関係は、通常、Ｊ<<Ｈ＜Ｋである。Ｍａｘ（Ｙ，Ｚ）は、ＹとＺのうちの大きい方であることを意味する。
Ｔ＝（Ｆ／Ｇ）×Ｍａｘ（２×Ｊ＋Ｈ，Ｊ＋Ｋ）  ・・・（１）
【００４４】
比較として、マスタ権を移動しないで、プロセッサコアＰ１１が全ての初期化スレッドのスケジューリングを行う場合の動作を図８に示す。図８に示すように、マスタ権を移動しない場合には、プロセッサコアＰ１１で初期化スレッドａのスケジューリングＡが終了すると、初期化スレッドｂのスケジューリングＢが始まるというように、別々の初期化スレッドのスケージュリングは並列には行われない。この比較例において、カーネルコアの起動によって各プロセッサコアＰ１１、Ｑ１２、Ｒ１３およびＳ１４の初期設定が完了した時点からＦ個の初期化スレッドによるデバイスの初期化が完了するまでの時間Ｔ’は、次の（２）式で表される。
Ｔ’＝（Ｆ／Ｇ）×（Ｈ＋Ｊ＋Ｋ）  ・・・（２）
【００４５】
スケジューリング時間には、例えば処理をしていないプロセッサコアの探索に要する時間などが含まれる。初期化時間には、例えばコンテキストの生成に要する時間やデバイスの初期化（レジスタへの初期値設定など）に要する時間などが含まれる。プロセッサコア間の通信には、一般にはプロセッサコアの動作クロックの１／２のクロックで１通信あたり１０サイクル程度かかる。
【００４６】
一例として、初期化スレッドの数Ｆを１００、プロセッサコアの数Ｇを４、プロセッサコアでの平均スケジューリング時間Ｈを１ｍｓ、プロセッサコア間の平均通信時間Ｊを２０ｎｓおよびデバイスの平均初期化時間Ｋを３ｍｓとする。また、プロセッサコアの動作クロックを１ＧＨｚとする。上記（１）式によれば、実施例２においてＦ個の初期化スレッドによるデバイスの初期化が完了するまでの時間Ｔは、７５ｍｓとなる。一方、上記（２）式によれば、比較例においてＦ個の初期化スレッドによるデバイスの初期化が完了するまでの時間Ｔ’は、１００ｍｓとなる。従って、実施例２によれば、比較例に対して装置の起動時間を２５％改善することができる。また、従来のシングルコアシステム（プロセッサコアの数Ｇ＝１）を有する装置では、プロセッサコアの動作クロックが１ＧＨｚであるときには、上記（２）式よりＴ’は４００ｍｓ程度となる。従って、実施例２によれば、従来のシングルコアシステムを有する装置に対して装置の起動時間を８１％程度改善することができる。
【００４７】
実施例２によれば、実施例１と同様の効果が得られる。また、実施例２では、スケジューラごとにプロセスやスレッドが予め割り当てられているわけではない。従って、ユーザがシステムの更新や新機能の追加を行っても、追加されたプロセスやスレッドもそのときの負荷情報に応じて各プロセッサコアに適当に割り振られていく。つまり、実施例２は、例えば携帯電話端末のように、ユーザによる操作で新機能を追加するなどの柔軟性の高い運用を行う組み込み機器に適している。また、実施例２は、組み込み機器のような固定用途の製品において、初期状態で起動されるアプリケーションまたは製品の出荷段階ですでに組み込まれているようなアプリケーションに対しても適用することができる。その場合には、そのようなアプリケーションに対しても、オペレーティングシステムの起動情報として用意されている機能テーブルと同等の機能テーブルを用意すればよい。実施例２によれば、そのようなアプリケーションの起動を含めて、装置を高速に起動することができる。
【００４８】
なお、実施例１および２においては、マルチコアシステムとして、一つのマイクロプロセッサに複数のプロセッサコアが内蔵されているマルチコアプロセッサを例にして説明したが、複数のマイクロプロセッサを搭載したマルチプロセッサにも同様に適用することができる。マルチプロセッサに適用する場合には、上述した説明においてプロセッサコアがプロセッサとなる。
【００４９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００５０】
（付記１）複数のプロセッサコアと、
前記各プロセッサコアで動作し、処理の割り振りを行う権限であるマスタ権を有するときに前記各プロセッサコアに対して処理を割り振るスケジューラと、
前記各スケジューラが、マスタ権を受信した後、各プロセッサコアに対して処理を割り振る前に他のプロセッサコアへマスタ権の移動を送信し、各プロセッサコアに対して処理を割り振った後、マスタ権を破棄してマスタ権の受信を待機する状態となるサイクルを、処理対象の処理がなくなるまで繰り返すように制御するマスタ制御部と、
を備えることを特徴とするマルチコアシステム。
【００５１】
（付記２）マスタ権を有するスケジューラは、任意のプロセッサコアで処理可能な処理に対して割り振りを行い、プロセッサコアが予約されている処理に対しては、当該処理の起動を、当該予約されているプロセッサコアに依頼することを特徴とする付記１に記載のマルチコアシステム。
【００５２】
（付記３）前記各スケジューラは、マスタ権移動の送信後、前記各プロセッサコアの負荷情報を取得し、負荷の低いプロセッサコアに処理を割り振ることを特徴とする付記１に記載のマルチコアシステム。
【００５３】
（付記４）前記各スケジューラは、各プロセッサコアに対する処理の割り振りを終了するとマスタ権を破棄することを特徴とする付記１に記載のマルチコアシステム。
【００５４】
（付記５）前記マスタ制御部は、最後の処理対象の処理の割り振りが終了すると、マスタ権を所定のプロセッサコアに戻すことを特徴とする付記１に記載のマルチコアシステム。
【００５５】
（付記６）前記処理は、システムの起動時にシステムに接続されたデバイスを初期化する処理であることを特徴とする付記１〜５のいずれか一つに記載のマルチコアシステム。
【００５６】
（付記７）前記処理は、予めシステムの起動時に実行されるように組み込まれているプログラムであることを特徴とする付記１〜５のいずれか一つに記載のマルチコアシステム。
【００５７】
（付記８）複数のプロセッサコアを有するマルチコアシステムの起動方法において、
前記各プロセッサコアで動作し、処理の割り振りを行う権限であるマスタ権を有するときに前記各プロセッサコアに対して処理を割り振る各スケジューラが、マスタ権の受信、他のプロセッサコアへのマスタ権移動の送信、各プロセッサコアに対する処理の割り振り、マスタ権の破棄およびマスタ権の受信待機状態のサイクルを、処理対象の処理がなくなるまで繰り返すことを特徴とする起動方法。
【００５８】
（付記９）マスタ権を有するスケジューラは、任意のプロセッサコアで処理可能な処理に対して割り振りを行い、プロセッサコアが予約されている処理に対しては、当該処理の起動を、当該予約されているプロセッサコアに依頼することを特徴とする付記８に記載の起動方法。
【００５９】
（付記１０）前記各スケジューラが、マスタ権移動の送信後、前記各プロセッサコアの負荷情報を取得し、負荷の低いプロセッサコアに処理を割り振ることを特徴とする付記８に記載の起動方法。
【００６０】
（付記１１）前記各スケジューラが、各プロセッサコアに対する処理の割り振りを終了するとマスタ権を破棄することを特徴とする付記８に記載の起動方法。
【００６１】
（付記１２）最後の処理対象の処理の割り振りが終了すると、マスタ権を所定のプロセッサコアに戻すことを特徴とする付記８に記載の起動方法。
【００６２】
（付記１３）前記処理は、システムの起動時にシステムに接続されたデバイスを初期化する処理であることを特徴とする付記８〜１２のいずれか一つに記載の起動方法。
【００６３】
（付記１４）前記処理は、予めシステムの起動時に実行されるように組み込まれているプログラムであることを特徴とする付記８〜１２のいずれか一つに記載の起動方法。
【符号の説明】
【００６４】
１，２，３，４，１１，１２，１３，１４  プロセッサコア
５，６，７，８  スケジューラ
９，３１  マスタ制御部
１５，１６  デバイス
【図１】
0005445669.tif 000002
【図２】
0005445669.tif 000003
【図３】
0005445669.tif 000004
【図４】
0005445669.tif 000005
【図５】
0005445669.tif 000006
【図６】
0005445669.tif 000007
【図７】
0005445669.tif 000008
【図８】
0005445669.tif 000009