(57)【要約】  ウエイトキューに対象アプリケーションのバイナリ情報へのポインタが積まれると、スケジューラが対象アプリケーションの起動指示を受け付けたと判断する。スケジューラがマルチコアプロセッサから、各ＣＰＵに割り当てられている最も遅い起動時刻のアプリケーションの中で、起動時刻が最も遅いアプリケーションの割当先であるコアを除くコアを特定する。起動時刻が最も遅いアプリケーションは、ＣＰＵ＃２に割り当てられている起動時刻が１２：５５のアプリケーションである。起動時刻が１２：５５のアプリケーションの割当先ＣＰＵであるＣＰＵ＃２を除くＣＰＵは、ＣＰＵ＃０とＣＰＵ＃１である。スケジューラが、ＣＰＵ＃１で実行中の起動時刻が１２：１５のアプリケーションをランキューに退避させ、ＣＰＵ＃１で対象アプリケーションを実行させる。
2012095982.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、
アプリケーションを前記複数のプロセッサに割り当てるスケジューラと、
を含み、
前記スケジューラは、
対象アプリケーションの起動要求がある場合に、前記複数のプロセッサで実行されるアプリケーションの起動時刻に基づいて、前記対象アプリケーションを実行するプロセッサを選択すること
を特徴とするマルチコアプロセッサシステム。
【請求項２】
前記起動時刻は、前記プロセッサ毎にレジスタに記憶されること
を特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記スケジューラは、
前記起動時刻が最小であるアプリケーションを実行するプロセッサに前記対象アプリケーションを割り当てること
を特徴とする請求項１または２に記載のマルチコアプロセッサシステム。
【請求項４】
前記スケジューラは、
最小である前記起動時刻を前記対象アプリケーションの起動時刻に置き換えること
を特徴とする請求項３に記載のマルチコアプロセッサシステム。
【請求項５】
前記対象アプリケーションの起動時刻に基づいて、前記複数のプロセッサの内の少なくとも一のプロセッサの動作クロックまたは共有資源へのアクセス頻度に関する情報が変更されること
を特徴とする請求項１乃至請求項４の何れか一に記載のマルチコアプロセッサシステム。
【請求項６】
複数の動作クロックを生成するクロック生成回路を含み、
前記対象アプリケーションを実行するプロセッサに前記複数の動作クロックの内で最も周波数の高い動作クロックが供給されること
を特徴とする請求項１乃至請求項５の何れか一に記載のマルチコアプロセッサシステム。
【請求項７】
前記対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、前記複数のプロセッサへ供給する動作クロックの周波数が同一周波数に変更されること
を特徴とする請求項５または６に記載のマルチコアプロセッサシステム。
【請求項８】
前記対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、前記複数の動作クロックの内で最も周波数の低い動作クロックが前記複数のプロセッサへ供給されること
を特徴とする請求項７に記載のマルチコアプロセッサシステム。
【請求項９】
コンピュータが、
前記複数のプロセッサで実行される複数のアプリケーションのそれぞれの起動時刻を登録し、
対象アプリケーションの起動指示を受け取り、
前記起動時刻に基づいて前記複数のプロセッサの中から前記対象アプリケーションを実行するプロセッサを選択すること
を特徴とするスケジューリング方法。
【請求項１０】
前記起動時刻を前記複数のプロセッサのそれぞれに対応して設けられるレジスタに登録すること
を特徴とする請求項９に記載のスケジューリング方法。
【請求項１１】
前記対象アプリケーションを実行するプロセッサに対応するレジスタに登録される起動時刻を前記対象アプリケーションの起動時刻に置き換えること
を特徴とする請求項１０に記載のスケジューリング方法。
【請求項１２】
前記対象アプリケーションの起動時刻に基づいて、前記複数のプロセッサの内の少なくとも一のプロセッサの動作クロックまたはメモリへのアクセス頻度に関する情報を変更すること
を特徴とする請求項９乃至請求項１１の何れか一に記載のスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの割当先を制御するマルチコアプロセッサシステム、およびスケジューリング方法に関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいて、アプリケーションをいずれのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に割り当てるかは、各ＣＰＵに割り当てられたアプリケーションの負荷や優先度に基づいて決定される（たとえば、下記特許文献１を参照。）。さらに、各ＣＰＵにおいての実行順序は優先度に基づいて決定される。【０００３】
また、動作周波数ごとにアプリケーションをグループ化し、グループごとにアプリケーションのデッドラインを満たすように各ＣＰＵの動作周波数を設定することで、消費電力を削減する技術が開示されている（たとえば、下記特許文献２を参照。）。【０００４】
また、実行中のアプリケーションの情報やアプリケーションの実行順序に基づいて各ＣＰＵに供給される電源電圧とクロック周波数を制御することで、消費電力を削減する技術が開示されている（たとえば、下記特許文献３を参照。）。【０００５】
また、マルチコアプロセッサのＣＰＵをグループ化し、各グループで高速に同期を行うことが可能な手段をマルチコアプロセッサシステムに備えることで、ＣＰＵ間の並列動作を階層的に管理する技術が開示されている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第２６８６４３８号公報
【特許文献２】特開２０００−６６９１０号公報
【特許文献３】特開２００３−２０２９３５号公報
【特許文献４】特公平６−１４６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、優先度や負荷に基づく対象アプリケーションの割当先ＣＰＵの決定や実行順序の決定では、必ずしもユーザが操作したいアプリケーションの応答がよいとは限らない問題点があった。ここで、携帯電話を例に挙げると、メーラや通話のアプリケーションの優先度は音楽再生ソフトやゲームアプリケーションの優先度よりも高く設定される。ユーザがメーラを起動中に音楽再生ソフトを起動させた場合、ユーザは起動直後の音楽の再生の操作を行うが、音楽再生ソフトの操作開始後すぐにメーラを操作する可能性は低い。しかしながら、マルチコアプロセッサのうち、メーラと音楽再生ソフトが同一ＣＰＵに割り当てられた場合、メーラが優先的に実行され、ユーザが操作したい音楽再生ソフトの実行が遅くなる問題点があった。【０００８】
また、優先度や負荷に基づいて対象アプリケーションの割当先ＣＰＵの決定を行う場合、各ＣＰＵの割当状態をプロセッサ間通信によって各ＣＰＵから集計しなければならないため、スケジューリングのオーバーヘッドが増大する問題点があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、ユーザが操作したいアプリケーションの応答性を向上させるとともに、スケジューリングによるオーバーヘッドを削減することができるマルチコアプロセッサシステム、およびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一観点によれば、複数のプロセッサで実行される複数のアプリケーションのそれぞれの起動時刻を登録し、対象アプリケーションの起動指示を受け取り、起動時刻に基づいて複数のプロセッサの中から対象アプリケーションを実行するプロセッサを選択するマルチコアプロセッサシステム、およびスケジューリング方法を提供することができる。
【発明の効果】
【００１１】
本マルチコアプロセッサシステム、およびスケジューリング方法によれば、ユーザが操作したいアプリケーションの応答性を向上させるとともに、スケジューリングのオーバーヘッドを削減することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の一実施例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図３】図３は、アクセス比率の一例を示す説明図である。
【図４】図４は、マルチコアプロセッサシステム２００の機能ブロック図の一例である。
【図５】図５は、アプリケーションの割当例を示す説明図である。
【図６】図６は、管理テーブル６００の一例を示す説明図である。
【図７】図７は、起動時刻テーブルの一例を示す説明図である。
【図８】図８は、アプリ＃５の起動指示が受け付けられた例を示す説明図である。
【図９】図９は、アプリ＃５の実行例を示す説明図である。
【図１０】図１０は、管理テーブル６００の更新例を示す説明図である。
【図１１】図１１は、起動時刻テーブル７００内の起動時刻の更新例を示す説明図である。
【図１２】図１２は、起動時刻テーブル７００内の仮想プロセッサＩＤの更新例を示す説明図である。
【図１３】図１３は、起動時刻テーブル７００内のアクセス比率とクロック周波数の更新例を示す説明図である。
【図１４】図１４は、アプリ＃５を実行時のアクセス比率とクロック周波数の制御例を示す説明図である。
【図１５】図１５は、所定時間経過後の起動時刻テーブル７００の更新例を示す説明図である。
【図１６】図１６は、所定時間経過後のアクセス比率とクロック周波数の設定例を示す説明図である。
【図１７】図１７は、スケジューラ２３１による割り当て処理の割り当て処理手順を示すフローチャートである。
【図１８】図１８では、各スケジューラによる設定処理の設定処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に、本発明にかかるマルチコアプロセッサシステム、およびスケジューリング方法の好適な実施の形態を詳細に説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１４】
ここで、ユーザはアプリケーションを起動した直後に該アプリケーションを操作したい。さらに、たとえば、携帯電話を例に挙げると、音楽再生ソフトにより音楽を再生中にメールの受信によりメーラが起動され、ユーザが受信したメールを閲覧する。そして、ユーザがメールに記述されているＷｅｂサイトのホームページを閲覧する場合、ブラウザが起動されるため、ユーザはブラウザを操作する可能性が最も高い。そして、ブラウザの起動に関わったメーラもユーザが操作する可能性が高く、音楽再生ソフトを使用する可能性が最も低い。そこで、本実施の形態では、起動指示が発生したアプリケーションの他に起動時刻が遅いアプリケーションをユーザが操作する可能性が高いと判断している。
【００１５】
図１は、本発明の一実施例を示す説明図である。図１では、ＣＰＵ＃０では、起動時刻が１２：２０のアプリケーションが実行中であり、起動時刻が１２：１０のアプリケーションがランキューに登録されている。ＣＰＵ＃１では、起動時刻が１２：１５のアプリケーションが実行中であり、起動時刻が１２：０５のアプリケーションがランキューに登録されている。ＣＰＵ＃２では、起動時刻が１２：５５のアプリケーションが実行中であり、起動時刻が１２：０１のアプリケーションがランキューに登録されている。ここでは、起動時刻を何時何分であるかのみを記載しているが、これに限らず、何年何月何日何時何分何秒のように時刻を詳細にしてもよい。
【００１６】
ここで、図１中の各ＯＳはそれぞれランキューを有し、各ランキューには割り当てられたアプリケーションのコンテキスト情報のポインタが積まれる。コンテキスト情報とは、たとえば、ロードされたアプリケーションの実行状態や該アプリケーション内の変数などが含まれる情報である。各ＯＳはランキュー内のコンテキスト情報のポインタを取得し、アプリケーションのコンテキスト情報にアクセスすることで、アプリケーションを直ぐに実行することができる。
【００１７】
ここでは、ＣＰＵ＃０上で動作するＯＳがマスタＯＳである。該マスタＯＳは起動指示を受け付けた対象アプリケーションの割当先ＣＰＵを決定するスケジューラを有している。ウエイトキューはマスタＯＳが有し、ウエイトキューにアプリケーションのバイナリ情報へのポインタが積まれると、スケジューラは対象アプリケーションの起動指示を受け付けたと判断する。そして、スケジューラが、マルチコアプロセッサから、各ＣＰＵに割り当てられているアプリケーションの中で、起動時刻が最も遅いアプリケーションの割当先であるコアを除くコアを特定する。各ＣＰＵに割当済のアプリケーションの中で、起動時刻が最も遅いアプリケーションは起動されてから最も時間が経っていないので、ユーザが利用する可能性が高い。
【００１８】
各ＣＰＵに割り当てられているアプリケーションの中で、起動時刻が最も遅いアプリケーションは、ＣＰＵ＃２に割り当てられている起動時刻が１２：５５のアプリケーションである。起動時刻が１２：５５のアプリケーションの割当先ＣＰＵであるＣＰＵ＃２を除くＣＰＵは、ＣＰＵ＃０とＣＰＵ＃１である。ここでは、ＣＰＵ＃１が特定されることとする。そして、スケジューラが、ＣＰＵ＃１で実行中の起動時刻が１２：１５のアプリケーションをランキューに退避させ、ＣＰＵ＃１に対象アプリケーションを実行させる。
【００１９】
（マルチコアプロセッサシステムのハードウェア）
図２は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。図２において、マルチコアプロセッサシステム２００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ＣＰＵ＃２と、を有している。さらに、マルチコアプロセッサシステム２００は、キーボード２０５と、ディスプレイ２０４と、Ｉ／Ｆ２０６（ＩｎｔｅｒＦａｃｅ）と、アービター２０１と、共有メモリ２０３と、クロックジェネレータ２０２と、を有している。ＣＰＵ＃０と、ＣＰＵ＃１と、ＣＰＵ＃２と、キーボード２０５と、ディスプレイ２０４と、Ｉ／Ｆ２０６と、アービター２０１と、クロックジェネレータ２０２とは、バス２０７を介して接続されている。
【００２０】
ここで、ＣＰＵ＃０とＣＰＵ＃１とＣＰＵ＃２は、それぞれレジスタとコアとキャッシュとを有している。コアは、演算機能を有している。各ＣＰＵ内のレジスタは、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）やリセットレジスタを有している。
【００２１】
各ＣＰＵ内のキャッシュは、共有メモリ２０３よりも動作が速く、容量が小さいメモリである。各ＣＰＵ内のキャッシュは、たとえば、共有メモリ２０３から読み出されたデータを一時的に記憶する。各ＣＰＵ内のキャッシュは、たとえば、共有メモリ２０３への書き込みデータを一時的に記憶する。各ＣＰＵ内のキャッシュは、他のＣＰＵとスヌープ回路を介して接続されている。スヌープ回路は、キャッシュ間で共有するデータがいずれかのキャッシュで更新された場合、該更新を検出し、他のキャッシュ内の該データも更新する機能を有している。
【００２２】
ＣＰＵ＃０はマスタＣＰＵであり、マルチコアプロセッサシステム２００の全体の制御を司り、ＯＳ２２１（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行する。ＯＳ２２１はマスタＯＳであり、ＣＰＵ＃０に割り当てられたスレッドを実行する。ＯＳ２２１はスケジューラ２３１を有し、スケジューラ２３１は起動指示を受け付けたアプリケーションをマルチコアプロセッサのうちのいずれのＣＰＵに割り当てるかを制御する機能を有している。スケジューラ２３１はＣＰＵ＃０に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２３】
ＣＰＵ＃１はスレーブＣＰＵであり、ＯＳ２２２を実行する。ＯＳ２２２はスレーブＯＳであり、ＣＰＵ＃１に割り当てられたスレッドを実行する。ＯＳ２２２はスケジューラ２３２を有し、スケジューラ２３２はＣＰＵ＃１に割り当てられたアプリケーションの実行順序を制御する機能を有する。ＣＰＵ＃２はスレーブＣＰＵであり、ＯＳ２２３を実行する。ＯＳ２２３はスレーブＯＳであり、ＣＰＵ＃２に割り当てられたスレッドを実行する。ＯＳ２２３はスケジューラ２３３を有し、スケジューラ２３３はＣＰＵ＃２に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２４】
ディスプレイ２０４は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０４は、たとえば、ＴＦＴ液晶ディスプレイ２０４などを採用することができる。
【００２５】
キーボード２０５は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０５は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２６】
Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２０６は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０６には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２７】
共有メモリ２０３は、ＣＰＵ＃０とＣＰＵ＃１に共有されるメモリであり、具体的には、たとえば、ＲＯＭ２０９（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ２０８（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭ２１０と、フラッシュＲＯＭコントローラ２１１と、フラッシュＲＯＭ２１２と、などを有している。
【００２８】
ＲＯＭ２０９は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０８は、ＣＰＵのワークエリアとして使用される。フラッシュＲＯＭ２１０は、ＯＳ２２１〜ＯＳ２２３などのシステムソフトウェアやアプリケーションソフトウェアや後述する管理テーブルおよび起動時刻テーブルなどを記憶している。たとえば、各ＯＳを更新する場合、マルチコアプロセッサシステム２００は、Ｉ／Ｆ２０６によって新しいＯＳを受信し、フラッシュＲＯＭ２１０に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２９】
フラッシュＲＯＭコントローラ２１１は、各ＣＰＵの制御に従ってフラッシュＲＯＭ２１２に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２１２は、フラッシュＲＯＭコントローラ２１１の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム２００を使用するユーザがＩ／Ｆ２０６を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２１２は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３０】
アービター２０１は、各ＣＰＵから共有メモリ２０３へのアクセス要求を調停する。アービター２０１は、ＣＰＵから共有メモリ２０３へのアクセス比率を設定可能なレジスタ２４１〜レジスタ２４３を有している。アクセス比率とは、共有メモリ２０３へのアクセス頻度を制御するための比率である。レジスタ２４１にはＣＰＵ＃０のアクセス比率が設定され、レジスタ２４２にはＣＰＵ＃１のアクセス比率が設定され、レジスタ２４３にはＣＰＵ＃２のアクセス比率が設定される。
【００３１】
図３は、アクセス比率の一例を示す説明図である。図３の例では、レジスタ２４１の値が３で、レジスタ２４２の値が２で、レジスタ２４３の値が１であるとする。図３では、リクエストキュー３００の中の各ボックスがアクセス要求である。アービター２０１は、リクエストキュー３００の右側からアクセス要求を受け付け、左側から順にアクセス要求を処理することとする。
【００３２】
リクエストキュー３００内のボックスのうち、０が付されたボックスがＣＰＵ＃０からのアクセス要求であり、１が付されたボックスがＣＰＵ＃１からのアクセス要求であり、２が付されたボックスがＣＰＵ＃２からのアクセス要求である。リクエストキュー３００内では、０が付されたボックスが３個並び、つぎに、１が付されたボックスが２個並び、２が付されたボックスが１個並び、再度、０が付されたボックスが３個並んでいる。
【００３３】
すなわち、アービター２０１は、ＣＰＵ＃０のアクセス要求を３回行い、つぎに、ＣＰＵ＃１のアクセス要求を２回行い、そして、ＣＰＵ＃２のアクセス要求を１回行う。図２に戻って、レジスタ２４１〜レジスタ２４３には初期値（１）が設定されている。
【００３４】
クロックジェネレータ２０２は各部にクロックを供給するクロック生成回路である。ここで、本実施の形態では、各ＣＰＵへは、１００［ＭＨｚ］と２００［ＭＨｚ］と３００［ＭＨｚ］とのうちのいずれか一つの周波数のクロックを供給できることとする。たとえば、クロックジェネレータ２０２は、ＣＰＵごとに該ＣＰＵに供給するクロック周波数を設定可能なレジスタ２５１〜レジスタ２５２を有している。
【００３５】
レジスタ２５１の値が１であれば、ＣＰＵ＃０へ１００Ｍ［Ｈｚ］のクロックが供給される。レジスタ２５１の値が２であれば、ＣＰＵ＃０へ２００Ｍ［Ｈｚ］のクロックが供給される。レジスタ２５１の値が３であれば、ＣＰＵ＃０へ３００Ｍ［Ｈｚ］のクロックが供給される。
【００３６】
レジスタ２５２の値が１であれば、ＣＰＵ＃１へ１００Ｍ［Ｈｚ］のクロックが供給される。レジスタ２５２の値が２であれば、ＣＰＵ＃１へ２００Ｍ［Ｈｚ］のクロックが供給される。レジスタ２５２の値が３であれば、ＣＰＵ＃１へ３００Ｍ［Ｈｚ］のクロックが供給される。
【００３７】
レジスタ２５３の値が１であれば、ＣＰＵ＃２へ１００Ｍ［Ｈｚ］のクロックが供給される。レジスタ２５３の値が２であれば、ＣＰＵ＃２へ２００Ｍ［Ｈｚ］のクロックが供給される。レジスタ２５３の値が３であれば、ＣＰＵ＃２へ３００Ｍ［Ｈｚ］のクロックが供給される。図２では、各レジスタの値が初期値（１）に設定されている。
【００３８】
（マルチコアプロセッサシステム２００の機能ブロック図）
図４は、マルチコアプロセッサシステム２００の機能ブロック図の一例である。マルチコアプロセッサシステム２００は、特定部４０１と、実行部４０２と、制御部４０３と、を有している。具体的には、特定部４０１〜制御部４０３を有するプログラムが共有メモリ２０３などの記憶装置に記憶されている。マルチコアプロセッサのうちの特定のＣＰＵが該記憶装置にアクセスして該プログラムを読み出し、該スケジューラ２３１内にコーディングされている処理を実行することにより、該特定部４０１〜制御部４０３の処理が実行される。本実施の形態では、たとえば、特定のＣＰＵがＣＰＵ＃０であり、該プログラムはスケジューラ２３１である。
【００３９】
特定部４０１は、対象アプリケーションの起動指示を受け付けると、マルチコアプロセッサから、各ＣＰＵに割り当てられているアプリケーションの中で起動時刻が最も遅いアプリケーションの割当先であるＣＰＵを除くＣＰＵを特定する。また、特定部４０１は、各ＣＰＵに割り当てられている最も遅い起動時刻のアプリケーションの中で起動時刻が最も早いアプリケーションの割当先であるＣＰＵを特定してもよい。
【００４０】
実行部４０２は、特定部４０１により特定されたＣＰＵで実行中のアプリケーションに代わって対象アプリケーションを実行する。
【００４１】
制御部４０３は、特定部４０１により特定されたＣＰＵへ与えるクロックの周波数をマルチコアプロセッサの他のＣＰＵへ与えるクロックの周波数よりも高くする。また、制御部４０３は、特定されたＣＰＵへ与えるクロックの周波数を供給可能なクロック周波数の中で最も高い周波数にする。
【００４２】
また、制御部４０３は、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、マルチコアプロセッサの各ＣＰＵへ与えるクロックの周波数を同一周波数にする。また、制御部４０３は、マルチコアプロセッサの各ＣＰＵへ与えるクロックの周波数を、マルチコアプロセッサの各ＣＰＵへ与えられているクロックの周波数の中で最も低いクロックの周波数にしてもよい。
【００４３】
また、制御部４０３は、特定部４０１により特定されたＣＰＵからマルチコアプロセッサで共有する共有資源へのアクセス比率を、マルチコアプロセッサの他のＣＰＵから共有資源へのアクセス比率よりも大きいアクセス比率にする。本実施の形態では、共有資源が共有メモリである。
【００４４】
さらに、制御部４０３は、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、マルチコアプロセッサの各ＣＰＵから共有メモリへのアクセス比率を同一比率にする。以上を踏まえて詳細例を説明する。
【００４５】
図５は、アプリケーションの割当例を示す説明図である。図５では、ディスプレイ２０４、キーボード２０５、Ｉ／Ｆ２０６、フラッシュＲＯＭコントローラ２１１、フラッシュＲＯＭ２１０、ＲＡＭ２０８、ＲＯＭ２０９、フラッシュＲＯＭ２１２の記載を省略している。図５では、ＣＰＵ＃０にアプリ＃１が割り当てられ、ＣＰＵ＃１にアプリ＃２が割り当てられ、ＣＰＵ＃２にアプリ＃３とアプリ＃４とが割り当てられている。ここで、ウエイトキュー５０４は、マスタＯＳであるＯＳ２２１が有している。ウエイトキュー５０４にアプリケーションのバイナリ情報へのポインタが積まれると、スケジューラ２３１は該アプリケーションの起動指示を受け付けたと判断する。
【００４６】
ここで、ランキュー５０１はＯＳ２２１が有し、ランキュー５０２はＯＳ２２２が有し、ランキュー５０３はＯＳ２２３が有している。各ランキューには、アプリケーションのコンテキスト情報のポインタが積まれる。各ＯＳは、実行中のアプリケーションが終了すると、ランキューに他のアプリケーションのコンテキスト情報のポインタが積まれていれば、他のアプリケーションを実行する。たとえば、ＣＰＵ＃２ではアプリ＃３が実行中であるため、ランキュー５０３にはアプリ＃４のコンテキスト情報のポインタが積まれている。
【００４７】
図６は、管理テーブルの一例を示す説明図である。管理テーブル６００は、ＣＰＵの識別情報の項目６０１と、アプリケーションの識別情報の項目６０２と、起動時刻の項目６０３と、を有している。ＣＰＵの識別情報の項目６０１には、各ＣＰＵの識別情報が登録される。アプリケーションの識別情報の項目６０２には、ＣＰＵの識別情報の項目６０１に登録された識別情報が示すＣＰＵに割り当てられたアプリケーションの識別情報が登録される。起動時刻の項目６０３には、アプリケーションの識別情報の項目６０２に登録された識別情報が示すアプリケーションの起動時刻が登録される。ここで、起動時刻は時：分：秒である。
【００４８】
たとえば、ＣＰＵの識別情報の項目６０１がＣＰＵ＃０の場合、アプリケーションの識別情報の項目６０２にはアプリ＃１が登録され、起動時刻の項目６０３には１２：２０：２０が登録されている。すなわち、ＣＰＵ＃０には、１２時２０分２０秒に起動されたアプリ＃１が割り当てられていることを示している。
【００４９】
また、上述のように、管理テーブル６００はフラッシュＲＯＭ２１０などの記憶装置に記憶されていることとする。さらに、各ＣＰＵのキャッシュにも記憶されていることとしてもよい。一のＣＰＵのキャッシュ内の管理テーブル６００に変更が生じると、スヌープ回路が該管理テーブル６００の変更を検出し、他のＣＰＵのキャッシュ内の管理テーブル６００を変更する。
【００５０】
図７は、起動時刻テーブルの一例を示す説明図である。起動時刻テーブル７００は、ＣＰＵの識別情報の項目７０１と、起動時刻の項目７０２と、仮想プロセッサＩＤの項目７０３と、アクセス比率の項目７０４と、クロック周波数の項目７０５と、を有している。ＣＰＵの識別情報の項目７０１には、各ＣＰＵの識別情報が登録されている。起動時刻の項目７０２には、各ＣＰＵに割り当てられたアプリケーションの中で、最後に割り当てられたアプリケーションの起動時刻が登録される。最後に割り当てられたアプリケーションとは、起動時刻が最も遅いアプリケーションである。
【００５１】
仮想プロセッサＩＤの項目７０３には、起動時刻の項目７０２に登録された起動時刻が遅い順にＣＰＵに付された順位である。仮想プロセッサＩＤの項目７０３には、初期値としてすべて０が登録されている。
【００５２】
アクセス比率の項目７０４には、アービター２０１に設定するアクセス比率が登録される。アクセス比率は、仮想プロセッサＩＤの項目７０３に登録された値に基づいて決定される。ここでは、仮想プロセッサＩＤの項目７０３の値が小さい順にアクセス比率の値が大きくなる。仮想プロセッサＩＤの項目７０３の値がすべて同一値である場合、ＣＰＵのアクセス比率は等しくなる。
【００５３】
クロック周波数の項目７０５には、各ＣＰＵに供給されるクロックの周波数が登録される。各ＣＰＵに供給されるクロックの周波数は、仮想プロセッサＩＤの項目７０３の値に基づいて決定される。
【００５４】
また、上述のように、起動時刻テーブル７００はフラッシュＲＯＭ２１０などの記憶装置に記憶されていることとする。さらに、各ＣＰＵのキャッシュにも記憶されていることとしてもよい。一のＣＰＵのキャッシュ内の起動時刻テーブル７００に変更が生じると、スヌープ回路が該起動時刻テーブル７００の変更を検出し、他のＣＰＵのキャッシュ内の起動時刻テーブル７００を変更する。
【００５５】
図８は、アプリ＃５の起動指示が受け付けられた例を示す説明図である。ウエイトキュー５０４にアプリ＃５が積まれると、スケジューラ２３１が、（１）アプリ＃５の起動指示を受け付けたと判断する。スケジューラ２３１が、（２）起動時刻テーブル７００内の起動時刻の項目７０２に登録されている起動時刻が最も早い時刻であるＣＰＵを特定する。ＣＰＵ＃１が特定される。
【００５６】
図９は、アプリ＃５の実行例を示す説明図である。スケジューラ２３１が（３）ＣＰＵ＃１にアプリ＃５の実行指示を通知する。アプリ＃５の実行指示は、ウエイトキュー５０４内のアプリ＃５のバイナリ情報へのポインタの値を有している。スケジューラ２３２が、アプリ＃５の実行指示を受け付けると、（４）実行中のアプリ＃２をランキュー５０２に退避させる。スケジューラ２３２が、アプリ＃５のバイナリ情報へのポインタの値に基づいて共有メモリ２０３からアプリ＃５のバイナリ情報をロードする。スケジューラ２３２が、（５）ロードしたアプリ＃５のバイナリ情報に基づいてアプリ＃５を実行する。
【００５７】
図１０は、管理テーブル６００の更新例を示す説明図である。スケジューラ２３２が、管理テーブル６００内のＣＰＵ＃１に関するアプリケーションの識別情報の項目６０２にアプリ＃５を追加する。スケジューラ２３２が現時刻を検出し、管理テーブル６００内のアプリ＃５に関する起動時刻の項目６０３に検出した現時刻を登録する。図１０では、アプリ＃５の起動時刻として１２：３０：２０が登録されている。
【００５８】
図１１は、起動時刻テーブル７００内の起動時刻の更新例を示す説明図である。スケジューラ２３２が、起動時刻テーブル７００内のＣＰＵ＃１に関する起動時刻の項目７０２を検出した現時刻に更新する。これにより、ＣＰＵ＃１に関する起動時刻がＣＰＵ＃１に割り当てられたアプリケーションの中で最も遅く割り当てられたアプリケーションの起動時刻に更新される。
【００５９】
図１２は、起動時刻テーブル７００内の仮想プロセッサＩＤの更新例を示す説明図である。スケジューラ２３２が、起動時刻テーブル７００内の起動時刻の項目７０２に登録されている起動時刻が早い順に番号を仮想プロセッサＩＤの項目７０３に登録する。図１２では、ＣＰＵ＃０が最も早いため、ＣＰＵ＃０に関する仮想プロセッサＩＤの項目７０３に１が登録され、ＣＰＵ＃２がつぎに早いため、ＣＰＵ＃２に関する仮想プロセッサＩＤの項目７０３に２が登録される。ＣＰＵ＃１が最も遅いため、ＣＰＵ＃１に関する仮想プロセッサＩＤの項目７０３に３が登録される。
【００６０】
図１３は、起動時刻テーブル７００内のアクセス比率とクロック周波数の更新例を示す説明図である。スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号に基づいて各ＣＰＵのアクセス比率を決定する。たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が最も大きいＣＰＵのアクセス比率が他のＣＰＵのアクセス比率よりも高いアクセス比率に設定する。
【００６１】
具体的には、たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が大きい順にアクセス比率が高くなるように各ＣＰＵのアクセス比率を決定し、各ＣＰＵに関するアクセス比率の項目７０４に決定したアクセス比率を登録する。ここでは、仮想プロセッサＩＤの項目７０３の番号と同一値をアクセス比率の項目７０４に登録することとする。
【００６２】
また、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号に基づいて各ＣＰＵに供給するクロックの周波数を決定する。たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が最も大きいＣＰＵへ供給するクロックの周波数を他のＣＰＵへ供給する周波数よりも高い周波数に設定する。
【００６３】
または、たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が最も大きいＣＰＵへ供給するクロックの周波数をクロックジェネレータ２０２が供給可能な最も高い周波数に設定する。すなわち、スケジューラ２３２が、ＣＰＵ＃１へ供給するクロックの周波数を３００［ＭＨｚ］に設定する。または、たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が大きい順にクロック周波数が高くなるように各ＣＰＵに供給するクロックの周波数を決定する。そして、スケジューラ２３２が、起動時刻テーブル７００内の各ＣＰＵに関するクロック周波数の項目７０５に決定したクロック周波数を登録する。
【００６４】
図１３では、スケジューラ２３２が、ＣＰＵ＃１へ与えるクロックの周波数がＣＰＵへ与えるクロック周波数の中で最も高く、ＣＰＵ＃２へ与えるクロックの周波数がＣＰＵ＃１へ与えるクロック周波数のつぎに高くなるように決定する。スケジューラ２３２は、ＣＰＵ＃０へ与えるクロックの周波数がＣＰＵへ与えるクロック周波数の中で最も低くなるように決定する。
【００６５】
上述のように本実施の形態でＣＰＵに供給可能なクロック周波数は１００Ｍ［ＭＨｚ］、２００Ｍ［ＭＨｚ］、３００Ｍ［ＭＨｚ］である。具体的には、たとえば、スケジューラ２３２が、ＣＰＵ＃１へ与えるクロックの周波数を３００［ＭＨｚ］に決定し、ＣＰＵ＃２へ与えるクロックの周波数を２００［ＭＨｚ］に決定し、ＣＰＵ＃０へ与えるクロックの周波数を１００［ＭＨｚ］に決定する。そして、スケジューラ２３２が、ＣＰＵ＃１に関するクロック周波数の項目７０５に３００［ＭＨｚ］を登録する。スケジューラ２３２が、ＣＰＵ＃２に関するクロック周波数の項目７０５に２００［ＭＨｚ］を登録する。スケジューラ２３２が、ＣＰＵ＃０に関するクロック周波数の項目７０５に１００［ＭＨｚ］を登録する。
【００６６】
図１４は、アプリ＃５を実行時のアクセス比率とクロック周波数の制御例を示す説明図である。スケジューラ２３２が、（６）更新後の起動時刻テーブル７００に登録した各ＣＰＵのアクセス比率をアービター２０１のレジスタ２４１〜レジスタ２４３にそれぞれ設定することで、各ＣＰＵから共有メモリ２０３へのアクセス比率を制御する。レジスタ２４１の値が１となり、レジスタ２４２の値が３となり、レジスタ２４３の値が１となる。
【００６７】
スケジューラ２３２が、（６）起動時刻テーブル７００に登録した各ＣＰＵのクロック周波数に対応する番号をクロックジェネレータ２０２のレジスタ２５１〜レジスタ２５３にそれぞれ設定することで、各ＣＰＵへ与えるクロックの周波数を制御する。レジスタ２５１の値が１となり、レジスタの値２５２が３となり、レジスタ２５３の値が２となる。
【００６８】
図１５は、所定時間経過後の起動時刻テーブル７００の更新例を示す説明図である。最後にアプリケーションの起動要求を受け付けてから所定時間が経過した場合、スケジューラ２３１は、仮想プロセッサＩＤの項目７０３の番号をすべて０に更新する。スケジューラ２３１は、アクセス比率の項目７０４のアクセス比率をすべて１に更新し、クロック周波数の項目７０５の周波数をすべて１００［ＭＨｚ］に更新する。
【００６９】
起動直後のアプリケーションであればユーザが使用する確率は高いが、一定時間が経過すると、いずれのアプリケーションをユーザが使用するかは明確でない。そこで、本実施の形態では、一定時間経過した場合、共有メモリ２０３へのアクセスやクロック周波数をすべて同一値に設定する。たとえば、一定時間としては固定値であってもよいし、最後に起動要求のあったアプリケーションによって該一定時間を異なる値に設定してもよい。
【００７０】
図１６は、所定時間経過後のアクセス比率とクロック周波数の設定例を示す説明図である。スケジューラ２３１が、（７）更新後の起動時刻テーブル７００に登録した各ＣＰＵのアクセス比率をアービター２０１のレジスタ２４１〜レジスタ２４３にそれぞれ設定する。レジスタ２４１の値が１となり、レジスタ２４２の値が１となり、レジスタ２４３の値が１となる。
【００７１】
スケジューラ２３１が、（７）起動時刻テーブル７００に登録した各ＣＰＵのクロック周波数に対応する番号をクロックジェネレータ２０２のレジスタ２５１〜レジスタ２５３にそれぞれ設定する。レジスタ２５１の値が１となり、レジスタ２５２の値が１となり、レジスタ２５３の値が１となる。
【００７２】
（スケジューラ２３１による割り当て処理）
図１７は、スケジューラ２３１による割り当て処理の割り当て処理手順を示すフローチャートである。まず、スケジューラ２３１が、ウエイトキュー５０４に対象アプリケーションがあるか否か、または一定時間ウエイトキュー５０４が空か否かを判断する（ステップＳ１７０１）。スケジューラ２３１が、ウエイトキュー５０４に対象アプリケーションがなく、かつ一定時間ウエイトキュー５０４が空でないと判断した場合（ステップＳ１７０１：Ｎｏ）、ステップＳ１７０１へ戻る。
【００７３】
スケジューラ２３１が、ウエイトキュー５０４に対象アプリケーションがあると判断した場合（ステップＳ１７０１：ある）、起動時刻テーブル７００に基づき起動時刻が最も早いＣＰＵを特定する（ステップＳ１７０２）。スケジューラ２３１が、特定したＣＰＵに対象アプリケーションの実行要求を通知し（ステップＳ１７０３）、ステップＳ１７０１へ戻る。
【００７４】
スケジューラ２３１が、一定時間ウエイトキュー５０４が空であると判断した場合（ステップＳ１７０１：空）、仮想プロセッサＩＤとアクセス比率とクロック周波数を初期値に決定する（ステップＳ１７０４）。スケジューラ２３１が、決定結果をクロックジェネレータ２０２とアービター２０１に設定し（ステップＳ１７０５）、ステップＳ１７０１へ戻る。
【００７５】
（各スケジューラによる設定処理）
図１８は、各スケジューラによる設定処理の設定処理手順を示すフローチャートである。スケジューラが、対象アプリケーションの実行要求、または実行中のアプリケーションの終了を検出したか否かを判断する（ステップＳ１８０１）。スケジューラが、対象アプリケーションの実行要求、および実行中のアプリケーションの終了を検出していないと判断した場合（ステップＳ１８０１：Ｎｏ）、ステップＳ１８０１へ戻る。スケジューラが、対象アプリケーションの実行要求を検出したと判断した場合（ステップＳ１８０１：実行要求）、実行中のアプリケーションをランキューに退避する（ステップＳ１８０２）。
【００７６】
そして、スケジューラが、対象アプリケーションを実行し（ステップＳ１８０３）、現時刻を特定する（ステップＳ１８０４）。スケジューラが、管理テーブル６００へ現時刻を対象アプリケーションの起動時刻として設定する（ステップＳ１８０５）。スケジューラが、起動時刻テーブル７００内の対象アプリケーションを実行するＣＰＵに対応する起動時刻を対象アプリケーションの起動時刻に設定し（ステップＳ１８０６）、ステップＳ１８１１へ移行する。
【００７７】
ステップＳ１８０１において、スケジューラが、実行中のアプリケーションの終了を検出したと判断した場合（ステップＳ１８０１：終了）、他に割当済のアプリケーションがあるか否かを判断する（ステップＳ１８０７）。スケジューラが、他に割当済のアプリケーションがないと判断した場合（ステップＳ１８０７：Ｎｏ）、起動時刻を最低値に設定し（ステップＳ１８０８）、ステップＳ１８１１へ移行する。最低値とは、たとえば、０に設定しておく。スケジューラ２３１が、対象アプリケーションの起動指示を受け付けた際に、起動時刻テーブル７００内の起動時刻が０であるＣＰＵがあれば、該ＣＰＵに対象アプリケーションを割り当てることとしてもよい。
【００７８】
スケジューラが、他に割当済のアプリケーションがあると判断した場合（ステップＳ１８０７：Ｙｅｓ）、割当済のアプリケーションの起動時刻の中で、最も早い起動時刻を特定する（ステップＳ１８０９）。そして、スケジューラが、特定した起動時刻を設定し（ステップＳ１８１０）、起動時刻テーブル７００に起動時刻の早い順に仮想プロセッサＩＤを設定する（ステップＳ１８１１）。スケジューラが、仮想プロセッサＩＤに基づいてクロック周波数とアクセス比率を決定する（ステップＳ１８１２）。スケジューラが、決定結果をクロックジェネレータ２０２とアービター２０１に設定することで、各ＣＰＵへ供給するクロックの周波数とＣＰＵから共有メモリ２０３へのアクセス比率を制御し（ステップＳ１８１３）、ステップＳ１８０１へ戻る。
【００７９】
以上説明したように、マルチコアプロセッサシステム、およびスケジューリング方法によれば、起動時刻が最も遅いアプリケーションと起動指示が発生した対象アプリケーションとを同一のＣＰＵに割り当てないようにし、対象アプリケーションを直ちに実行する。各ＣＰＵに割り当てられている起動時刻のみで割当先を決定するので、従来の負荷や優先度によって割当先を決定することと比較して、プロセッサ間通信を行う回数を減少させることができ、スケジューリングによるオーバーヘッドを削減することができる。
【００８０】
さらに、起動から時間が経過したアプリケーションよりも、起動直後のアプリケーションをユーザが使用する。すなわち、起動時刻が最も遅いアプリケーションと対象アプリケーションはユーザが操作する可能性が高いので、これらの２つのアプリケーションが異なるＣＰＵで実行されることで、ユーザの応答性を向上させることができる。さらに、対象アプリケーションを直ちに実行させることで、ユーザの応答性を向上させることができる。
【００８１】
また、各ＣＰＵに割り当てられたアプリケーションの起動時刻は、ＣＰＵごとにレジスタに記憶されることにより、プロセッサ間通信を行わずに対象アプリケーションの割当先ＣＰＵを決定することができる。したがって、プロセッサ間通信を行う回数を減少させることができ、スケジューリングによるオーバーヘッドを削減することができる。
【００８２】
また、起動時刻が最小であるアプリケーションを実行するＣＰＵに対象アプリケーションを割り当てる。起動時刻が最小であるアプリケーションを実行するＣＰＵとは、各ＣＰＵに割り当てられている最も遅い起動時刻のアプリケーションの中で起動時刻が最も早いアプリケーションの割当先であるＣＰＵである。起動からの時間経過が大きいアプリケーションであれば、ユーザが使用する可能性が低いため、ユーザの操作に影響を与えることなく、対象アプリケーションを直ぐに実行させることができる。
【００８３】
また、対象アプリケーションを割り当てた割当先コアに関する最小である起動時刻を対象アプリケーションの起動時刻に置き換えることで、プロセッサ通信を行うことなく、割当先を決定するための起動時刻に関する情報を容易に更新することができる。
【００８４】
また、対象アプリケーションの起動時刻に基づいて、複数のＣＰＵのうちの少なくとも一のＣＰＵの動作クロックまたは共有資源へのアクセス頻度に関する情報が変更されることにより、対象アプリケーションの実行性能を向上させることができる。
【００８５】
また、対象アプリケーションを実行するＣＰＵに複数の動作クロックの内で最も周波数の高い動作クロックが供給されることにより、対象アプリケーションの実行性能を向上させることができる。
【００８６】
また、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、複数のＣＰＵへ供給する動作クロックの周波数が同一周波数に変更される。ある一定時間を過ぎると、ユーザがいずれのアプリケーションを使用するかが不明確となる。そこで、各ＣＰＵの性能を共通にすることで、いずれのＣＰＵに割り当てられたアプリケーションがユーザに操作されても応答性に偏りなく実行させることができる。また、複数のＣＰＵへ供給する動作クロックの周波数が供給可能な周波数の中で最も低い周波数に変更されることで、低消費電力化を図ることができる。
【００８７】
また、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、複数のＣＰＵから共有資源へのアクセス頻度が同一頻度に変更される。ある一定時間を過ぎると、ユーザがいずれのアプリケーションを使用するかが不明確となる。そこで、各ＣＰＵの性能を共通にすることで、いずれのＣＰＵに割り当てられたアプリケーションがユーザに操作されても応答性に偏りなく実行させることができる。
【００８８】
なお、スケジューリング方法は、予め用意されたプログラムをマルチコアプロセッサのうちのいずれかのＣＰＵで実行することにより実現することができる。また、該プログラムは、フラッシュＲＯＭ２１２などのマルチコアプロセッサのいずれかのＣＰＵが読み取り可能な記録媒体に記録され、マルチコアプロセッサのいずれかのＣＰＵによって記録媒体から読み出されることによって実行されてもよい。また、該プログラムは、インターネット等のネットワークを介して配布されてもよい。
【符号の説明】
【００８９】
２００  マルチコアプロセッサシステム
２０１  アービター
２０２  クロックジェネレータ
２０３  共有メモリ
２３１  スケジューラ
【図１】
2012095982.tif 000003
【図２】
2012095982.tif 000004
【図３】
2012095982.tif 000005
【図４】
2012095982.tif 000006
【図５】
2012095982.tif 000007
【図６】
2012095982.tif 000008
【図７】
2012095982.tif 000009
【図８】
2012095982.tif 000010
【図９】
2012095982.tif 000011
【図１０】
2012095982.tif 000012
【図１１】
2012095982.tif 000013
【図１２】
2012095982.tif 000014
【図１３】
2012095982.tif 000015
【図１４】
2012095982.tif 000016
【図１５】
2012095982.tif 000017
【図１６】
2012095982.tif 000018
【図１７】
2012095982.tif 000019
【図１８】
2012095982.tif 000020
【手続補正書】
【提出日】平成25年7月31日(2013.7.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプロセッサと、
アプリケーションを前記複数のプロセッサに割り当てるスケジューラと、
を含み、
前記スケジューラは、
対象アプリケーションの起動要求がある場合に、前記複数のプロセッサで実行されるアプリケーションの起動時刻に基づいて、前記対象アプリケーションを実行するプロセッサを選択すること
を特徴とするマルチコアプロセッサシステム。
【請求項２】
前記起動時刻は、前記プロセッサ毎にレジスタに記憶されること
を特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記スケジューラは、
前記起動時刻が最小であるアプリケーションを実行するプロセッサに前記対象アプリケーションを割り当てること
を特徴とする請求項１または２に記載のマルチコアプロセッサシステム。
【請求項４】
前記スケジューラは、
最小である前記起動時刻を前記対象アプリケーションの起動時刻に置き換えること
を特徴とする請求項３に記載のマルチコアプロセッサシステム。
【請求項５】
前記対象アプリケーションの起動時刻に基づいて、前記複数のプロセッサの内の少なくとも一のプロセッサの動作クロックまたは共有資源へのアクセス頻度に関する情報が変更されること
を特徴とする請求項１乃至請求項４の何れか一に記載のマルチコアプロセッサシステム。
【請求項６】
複数の動作クロックを生成するクロック生成回路を含み、
前記対象アプリケーションを実行するプロセッサに前記複数の動作クロックの内で最も周波数の高い動作クロックが供給されること
を特徴とする請求項１乃至請求項５の何れか一に記載のマルチコアプロセッサシステム。
【請求項７】
コンピュータが、
複数のプロセッサで実行される複数のアプリケーションのそれぞれの起動時刻を登録し、
対象アプリケーションの起動指示を受け取り、
前記起動時刻に基づいて前記複数のプロセッサの中から前記対象アプリケーションを実行するプロセッサを選択すること
を特徴とするスケジューリング方法。
【請求項８】
前記起動時刻を前記複数のプロセッサのそれぞれに対応して設けられるレジスタに登録すること
を特徴とする請求項７に記載のスケジューリング方法。
【請求項９】
前記対象アプリケーションを実行するプロセッサに対応するレジスタに登録される起動時刻を前記対象アプリケーションの起動時刻に置き換えること
を特徴とする請求項８に記載のスケジューリング方法。
【請求項１０】
前記対象アプリケーションの起動時刻に基づいて、前記複数のプロセッサの内の少なくとも一のプロセッサの動作クロックまたはメモリへのアクセス頻度に関する情報を変更すること
を特徴とする請求項７乃至請求項９の何れか一に記載のスケジューリング方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの割当先を制御するマルチコアプロセッサシステム、およびスケジューリング方法に関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいて、アプリケーションをいずれのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に割り当てるかは、各ＣＰＵに割り当てられたアプリケーションの負荷や優先度に基づいて決定される（たとえば、下記特許文献１を参照。）。さらに、各ＣＰＵにおいての実行順序は優先度に基づいて決定される。
【０００３】
また、動作周波数ごとにアプリケーションをグループ化し、グループごとにアプリケーションのデッドラインを満たすように各ＣＰＵの動作周波数を設定することで、消費電力を削減する技術が開示されている（たとえば、下記特許文献２を参照。）。
【０００４】
また、実行中のアプリケーションの情報やアプリケーションの実行順序に基づいて各ＣＰＵに供給される電源電圧とクロック周波数を制御することで、消費電力を削減する技術が開示されている（たとえば、下記特許文献３を参照。）。
【０００５】
また、マルチコアプロセッサのＣＰＵをグループ化し、各グループで高速に同期を行うことが可能な手段をマルチコアプロセッサシステムに備えることで、ＣＰＵ間の並列動作を階層的に管理する技術が開示されている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第２６８６４３８号公報
【特許文献２】特開２０００−６６９１０号公報
【特許文献３】特開２００３−２０２９３５号公報
【特許文献４】特公平６−１４６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、優先度や負荷に基づく対象アプリケーションの割当先ＣＰＵの決定や実行順序の決定では、必ずしもユーザが操作したいアプリケーションの応答がよいとは限らない問題点があった。ここで、携帯電話を例に挙げると、メーラや通話のアプリケーションの優先度は音楽再生ソフトやゲームアプリケーションの優先度よりも高く設定される。ユーザがメーラを起動中に音楽再生ソフトを起動させた場合、ユーザは起動直後の音楽の再生の操作を行うが、音楽再生ソフトの操作開始後すぐにメーラを操作する可能性は低い。しかしながら、マルチコアプロセッサのうち、メーラと音楽再生ソフトが同一ＣＰＵに割り当てられた場合、メーラが優先的に実行され、ユーザが操作したい音楽再生ソフトの実行が遅くなる問題点があった。
【０００８】
また、優先度や負荷に基づいて対象アプリケーションの割当先ＣＰＵの決定を行う場合、各ＣＰＵの割当状態をプロセッサ間通信によって各ＣＰＵから集計しなければならないため、スケジューリングのオーバーヘッドが増大する問題点があった。
【０００９】
本発明は、上述した従来技術による問題点を解消するため、ユーザが操作したいアプリケーションの応答性を向上させるとともに、スケジューリングによるオーバーヘッドを削減することができるマルチコアプロセッサシステム、およびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一観点によれば、複数のプロセッサで実行される複数のアプリケーションのそれぞれの起動時刻を登録し、対象アプリケーションの起動指示を受け取り、起動時刻に基づいて複数のプロセッサの中から対象アプリケーションを実行するプロセッサを選択するマルチコアプロセッサシステム、およびスケジューリング方法を提供することができる。
【発明の効果】
【００１１】
本マルチコアプロセッサシステム、およびスケジューリング方法によれば、ユーザが操作したいアプリケーションの応答性を向上させるとともに、スケジューリングのオーバーヘッドを削減することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の一実施例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図３】図３は、アクセス比率の一例を示す説明図である。
【図４】図４は、マルチコアプロセッサシステム２００の機能ブロック図の一例である。
【図５】図５は、アプリケーションの割当例を示す説明図である。
【図６】図６は、管理テーブル６００の一例を示す説明図である。
【図７】図７は、起動時刻テーブルの一例を示す説明図である。
【図８】図８は、アプリ＃５の起動指示が受け付けられた例を示す説明図である。
【図９】図９は、アプリ＃５の実行例を示す説明図である。
【図１０】図１０は、管理テーブル６００の更新例を示す説明図である。
【図１１】図１１は、起動時刻テーブル７００内の起動時刻の更新例を示す説明図である。
【図１２】図１２は、起動時刻テーブル７００内の仮想プロセッサＩＤの更新例を示す説明図である。
【図１３】図１３は、起動時刻テーブル７００内のアクセス比率とクロック周波数の更新例を示す説明図である。
【図１４】図１４は、アプリ＃５を実行時のアクセス比率とクロック周波数の制御例を示す説明図である。
【図１５】図１５は、所定時間経過後の起動時刻テーブル７００の更新例を示す説明図である。
【図１６】図１６は、所定時間経過後のアクセス比率とクロック周波数の設定例を示す説明図である。
【図１７】図１７は、スケジューラ２３１による割り当て処理の割り当て処理手順を示すフローチャートである。
【図１８】図１８では、各スケジューラによる設定処理の設定処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に、本発明にかかるマルチコアプロセッサシステム、およびスケジューリング方法の好適な実施の形態を詳細に説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１４】
ここで、ユーザはアプリケーションを起動した直後に該アプリケーションを操作したい。さらに、たとえば、携帯電話を例に挙げると、音楽再生ソフトにより音楽を再生中にメールの受信によりメーラが起動され、ユーザが受信したメールを閲覧する。そして、ユーザがメールに記述されているＷｅｂサイトのホームページを閲覧する場合、ブラウザが起動されるため、ユーザはブラウザを操作する可能性が最も高い。そして、ブラウザの起動に関わったメーラもユーザが操作する可能性が高く、音楽再生ソフトを使用する可能性が最も低い。そこで、本実施の形態では、起動指示が発生したアプリケーションの他に起動時刻が遅いアプリケーションをユーザが操作する可能性が高いと判断している。
【００１５】
図１は、本発明の一実施例を示す説明図である。図１では、ＣＰＵ＃０では、起動時刻が１２：２０のアプリケーションが実行中であり、起動時刻が１２：１０のアプリケーションがランキューに登録されている。ＣＰＵ＃１では、起動時刻が１２：１５のアプリケーションが実行中であり、起動時刻が１２：０５のアプリケーションがランキューに登録されている。ＣＰＵ＃２では、起動時刻が１２：５５のアプリケーションが実行中であり、起動時刻が１２：０１のアプリケーションがランキューに登録されている。ここでは、起動時刻を何時何分であるかのみを記載しているが、これに限らず、何年何月何日何時何分何秒のように時刻を詳細にしてもよい。
【００１６】
ここで、図１中の各ＯＳはそれぞれランキューを有し、各ランキューには割り当てられたアプリケーションのコンテキスト情報のポインタが積まれる。コンテキスト情報とは、たとえば、ロードされたアプリケーションの実行状態や該アプリケーション内の変数などが含まれる情報である。各ＯＳはランキュー内のコンテキスト情報のポインタを取得し、アプリケーションのコンテキスト情報にアクセスすることで、アプリケーションを直ぐに実行することができる。
【００１７】
ここでは、ＣＰＵ＃０上で動作するＯＳがマスタＯＳである。該マスタＯＳは起動指示を受け付けた対象アプリケーションの割当先ＣＰＵを決定するスケジューラを有している。ウエイトキューはマスタＯＳが有し、ウエイトキューにアプリケーションのバイナリ情報へのポインタが積まれると、スケジューラは対象アプリケーションの起動指示を受け付けたと判断する。そして、スケジューラが、マルチコアプロセッサから、各ＣＰＵに割り当てられているアプリケーションの中で、起動時刻が最も遅いアプリケーションの割当先であるコアを除くコアを特定する。各ＣＰＵに割当済のアプリケーションの中で、起動時刻が最も遅いアプリケーションは起動されてから最も時間が経っていないので、ユーザが利用する可能性が高い。
【００１８】
各ＣＰＵに割り当てられているアプリケーションの中で、起動時刻が最も遅いアプリケーションは、ＣＰＵ＃２に割り当てられている起動時刻が１２：５５のアプリケーションである。起動時刻が１２：５５のアプリケーションの割当先ＣＰＵであるＣＰＵ＃２を除くＣＰＵは、ＣＰＵ＃０とＣＰＵ＃１である。ここでは、ＣＰＵ＃１が特定されることとする。そして、スケジューラが、ＣＰＵ＃１で実行中の起動時刻が１２：１５のアプリケーションをランキューに退避させ、ＣＰＵ＃１に対象アプリケーションを実行させる。
【００１９】
（マルチコアプロセッサシステムのハードウェア）
図２は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。図２において、マルチコアプロセッサシステム２００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ＣＰＵ＃２と、を有している。さらに、マルチコアプロセッサシステム２００は、キーボード２０５と、ディスプレイ２０４と、Ｉ／Ｆ２０６（ＩｎｔｅｒＦａｃｅ）と、アービター２０１と、共有メモリ２０３と、クロックジェネレータ２０２と、を有している。ＣＰＵ＃０と、ＣＰＵ＃１と、ＣＰＵ＃２と、キーボード２０５と、ディスプレイ２０４と、Ｉ／Ｆ２０６と、アービター２０１と、クロックジェネレータ２０２とは、バス２０７を介して接続されている。
【００２０】
ここで、ＣＰＵ＃０とＣＰＵ＃１とＣＰＵ＃２は、それぞれレジスタとコアとキャッシュとを有している。コアは、演算機能を有している。各ＣＰＵ内のレジスタは、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）やリセットレジスタを有している。
【００２１】
各ＣＰＵ内のキャッシュは、共有メモリ２０３よりも動作が速く、容量が小さいメモリである。各ＣＰＵ内のキャッシュは、たとえば、共有メモリ２０３から読み出されたデータを一時的に記憶する。各ＣＰＵ内のキャッシュは、たとえば、共有メモリ２０３への書き込みデータを一時的に記憶する。各ＣＰＵ内のキャッシュは、他のＣＰＵとスヌープ回路を介して接続されている。スヌープ回路は、キャッシュ間で共有するデータがいずれかのキャッシュで更新された場合、該更新を検出し、他のキャッシュ内の該データも更新する機能を有している。
【００２２】
ＣＰＵ＃０はマスタＣＰＵであり、マルチコアプロセッサシステム２００の全体の制御を司り、ＯＳ２２１（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行する。ＯＳ２２１はマスタＯＳであり、ＣＰＵ＃０に割り当てられたスレッドを実行する。ＯＳ２２１はスケジューラ２３１を有し、スケジューラ２３１は起動指示を受け付けたアプリケーションをマルチコアプロセッサのうちのいずれのＣＰＵに割り当てるかを制御する機能を有している。スケジューラ２３１はＣＰＵ＃０に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２３】
ＣＰＵ＃１はスレーブＣＰＵであり、ＯＳ２２２を実行する。ＯＳ２２２はスレーブＯＳであり、ＣＰＵ＃１に割り当てられたスレッドを実行する。ＯＳ２２２はスケジューラ２３２を有し、スケジューラ２３２はＣＰＵ＃１に割り当てられたアプリケーションの実行順序を制御する機能を有する。ＣＰＵ＃２はスレーブＣＰＵであり、ＯＳ２２３を実行する。ＯＳ２２３はスレーブＯＳであり、ＣＰＵ＃２に割り当てられたスレッドを実行する。ＯＳ２２３はスケジューラ２３３を有し、スケジューラ２３３はＣＰＵ＃２に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２４】
ディスプレイ２０４は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０４は、たとえば、ＴＦＴ液晶ディスプレイ２０４などを採用することができる。
【００２５】
キーボード２０５は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０５は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２６】
Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２０６は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０６には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２７】
共有メモリ２０３は、ＣＰＵ＃０とＣＰＵ＃１に共有されるメモリであり、具体的には、たとえば、ＲＯＭ２０９（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ２０８（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭ２１０と、フラッシュＲＯＭコントローラ２１１と、フラッシュＲＯＭ２１２と、などを有している。
【００２８】
ＲＯＭ２０９は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０８は、ＣＰＵのワークエリアとして使用される。フラッシュＲＯＭ２１０は、ＯＳ２２１〜ＯＳ２２３などのシステムソフトウェアやアプリケーションソフトウェアや後述する管理テーブルおよび起動時刻テーブルなどを記憶している。たとえば、各ＯＳを更新する場合、マルチコアプロセッサシステム２００は、Ｉ／Ｆ２０６によって新しいＯＳを受信し、フラッシュＲＯＭ２１０に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２９】
フラッシュＲＯＭコントローラ２１１は、各ＣＰＵの制御に従ってフラッシュＲＯＭ２１２に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２１２は、フラッシュＲＯＭコントローラ２１１の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム２００を使用するユーザがＩ／Ｆ２０６を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２１２は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３０】
アービター２０１は、各ＣＰＵから共有メモリ２０３へのアクセス要求を調停する。アービター２０１は、ＣＰＵから共有メモリ２０３へのアクセス比率を設定可能なレジスタ２４１〜レジスタ２４３を有している。アクセス比率とは、共有メモリ２０３へのアクセス頻度を制御するための比率である。レジスタ２４１にはＣＰＵ＃０のアクセス比率が設定され、レジスタ２４２にはＣＰＵ＃１のアクセス比率が設定され、レジスタ２４３にはＣＰＵ＃２のアクセス比率が設定される。
【００３１】
図３は、アクセス比率の一例を示す説明図である。図３の例では、レジスタ２４１の値が３で、レジスタ２４２の値が２で、レジスタ２４３の値が１であるとする。図３では、リクエストキュー３００の中の各ボックスがアクセス要求である。アービター２０１は、リクエストキュー３００の右側からアクセス要求を受け付け、左側から順にアクセス要求を処理することとする。
【００３２】
リクエストキュー３００内のボックスのうち、０が付されたボックスがＣＰＵ＃０からのアクセス要求であり、１が付されたボックスがＣＰＵ＃１からのアクセス要求であり、２が付されたボックスがＣＰＵ＃２からのアクセス要求である。リクエストキュー３００内では、０が付されたボックスが３個並び、つぎに、１が付されたボックスが２個並び、２が付されたボックスが１個並び、再度、０が付されたボックスが３個並んでいる。
【００３３】
すなわち、アービター２０１は、ＣＰＵ＃０のアクセス要求を３回行い、つぎに、ＣＰＵ＃１のアクセス要求を２回行い、そして、ＣＰＵ＃２のアクセス要求を１回行う。図２に戻って、レジスタ２４１〜レジスタ２４３には初期値（１）が設定されている。
【００３４】
クロックジェネレータ２０２は各部にクロックを供給するクロック生成回路である。ここで、本実施の形態では、各ＣＰＵへは、１００［ＭＨｚ］と２００［ＭＨｚ］と３００［ＭＨｚ］とのうちのいずれか一つの周波数のクロックを供給できることとする。たとえば、クロックジェネレータ２０２は、ＣＰＵごとに該ＣＰＵに供給するクロック周波数を設定可能なレジスタ２５１〜レジスタ２５２を有している。
【００３５】
レジスタ２５１の値が１であれば、ＣＰＵ＃０へ１００［ＭＨｚ］のクロックが供給される。レジスタ２５１の値が２であれば、ＣＰＵ＃０へ２００［ＭＨｚ］のクロックが供給される。レジスタ２５１の値が３であれば、ＣＰＵ＃０へ３００［ＭＨｚ］のクロックが供給される。
【００３６】
レジスタ２５２の値が１であれば、ＣＰＵ＃１へ１００［ＭＨｚ］のクロックが供給される。レジスタ２５２の値が２であれば、ＣＰＵ＃１へ２００［ＭＨｚ］のクロックが供給される。レジスタ２５２の値が３であれば、ＣＰＵ＃１へ３００［ＭＨｚ］のクロックが供給される。
【００３７】
レジスタ２５３の値が１であれば、ＣＰＵ＃２へ１００Ｍ［ＭＨｚ］のクロックが供給される。レジスタ２５３の値が２であれば、ＣＰＵ＃２へ２００［ＭＨｚ］のクロックが供給される。レジスタ２５３の値が３であれば、ＣＰＵ＃２へ３００［ＭＨｚ］のクロックが供給される。図２では、各レジスタの値が初期値（１）に設定されている。
【００３８】
（マルチコアプロセッサシステム２００の機能ブロック図）
図４は、マルチコアプロセッサシステム２００の機能ブロック図の一例である。マルチコアプロセッサシステム２００は、特定部４０１と、実行部４０２と、制御部４０３と、を有している。具体的には、特定部４０１〜制御部４０３を有するプログラムが共有メモリ２０３などの記憶装置に記憶されている。マルチコアプロセッサのうちの特定のＣＰＵが該記憶装置にアクセスして該プログラムを読み出し、該スケジューラ２３１内にコーディングされている処理を実行することにより、該特定部４０１〜制御部４０３の処理が実行される。本実施の形態では、たとえば、特定のＣＰＵがＣＰＵ＃０であり、該プログラムはスケジューラ２３１である。
【００３９】
特定部４０１は、対象アプリケーションの起動指示を受け付けると、マルチコアプロセッサから、各ＣＰＵに割り当てられているアプリケーションの中で起動時刻が最も遅いアプリケーションの割当先であるＣＰＵを除くＣＰＵを特定する。また、特定部４０１は、各ＣＰＵに割り当てられている最も遅い起動時刻のアプリケーションの中で起動時刻が最も早いアプリケーションの割当先であるＣＰＵを特定してもよい。
【００４０】
実行部４０２は、特定部４０１により特定されたＣＰＵで実行中のアプリケーションに代わって対象アプリケーションを実行する。
【００４１】
制御部４０３は、特定部４０１により特定されたＣＰＵへ与えるクロックの周波数をマルチコアプロセッサの他のＣＰＵへ与えるクロックの周波数よりも高くする。また、制御部４０３は、特定されたＣＰＵへ与えるクロックの周波数を供給可能なクロック周波数の中で最も高い周波数にする。
【００４２】
また、制御部４０３は、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、マルチコアプロセッサの各ＣＰＵへ与えるクロックの周波数を同一周波数にする。また、制御部４０３は、マルチコアプロセッサの各ＣＰＵへ与えるクロックの周波数を、マルチコアプロセッサの各ＣＰＵへ与えられているクロックの周波数の中で最も低いクロックの周波数にしてもよい。
【００４３】
また、制御部４０３は、特定部４０１により特定されたＣＰＵからマルチコアプロセッサで共有する共有資源へのアクセス比率を、マルチコアプロセッサの他のＣＰＵから共有資源へのアクセス比率よりも大きいアクセス比率にする。本実施の形態では、共有資源が共有メモリである。
【００４４】
さらに、制御部４０３は、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、マルチコアプロセッサの各ＣＰＵから共有メモリへのアクセス比率を同一比率にする。以上を踏まえて詳細例を説明する。
【００４５】
図５は、アプリケーションの割当例を示す説明図である。図５では、ディスプレイ２０４、キーボード２０５、Ｉ／Ｆ２０６、フラッシュＲＯＭコントローラ２１１、フラッシュＲＯＭ２１０、ＲＡＭ２０８、ＲＯＭ２０９、フラッシュＲＯＭ２１２の記載を省略している。図５では、ＣＰＵ＃０にアプリ＃１が割り当てられ、ＣＰＵ＃１にアプリ＃２が割り当てられ、ＣＰＵ＃２にアプリ＃３とアプリ＃４とが割り当てられている。ここで、ウエイトキュー５０４は、マスタＯＳであるＯＳ２２１が有している。ウエイトキュー５０４にアプリケーションのバイナリ情報へのポインタが積まれると、スケジューラ２３１は該アプリケーションの起動指示を受け付けたと判断する。
【００４６】
ここで、ランキュー５０１はＯＳ２２１が有し、ランキュー５０２はＯＳ２２２が有し、ランキュー５０３はＯＳ２２３が有している。各ランキューには、アプリケーションのコンテキスト情報のポインタが積まれる。各ＯＳは、実行中のアプリケーションが終了すると、ランキューに他のアプリケーションのコンテキスト情報のポインタが積まれていれば、他のアプリケーションを実行する。たとえば、ＣＰＵ＃２ではアプリ＃３が実行中であるため、ランキュー５０３にはアプリ＃４のコンテキスト情報のポインタが積まれている。
【００４７】
図６は、管理テーブルの一例を示す説明図である。管理テーブル６００は、ＣＰＵの識別情報の項目６０１と、アプリケーションの識別情報の項目６０２と、起動時刻の項目６０３と、を有している。ＣＰＵの識別情報の項目６０１には、各ＣＰＵの識別情報が登録される。アプリケーションの識別情報の項目６０２には、ＣＰＵの識別情報の項目６０１に登録された識別情報が示すＣＰＵに割り当てられたアプリケーションの識別情報が登録される。起動時刻の項目６０３には、アプリケーションの識別情報の項目６０２に登録された識別情報が示すアプリケーションの起動時刻が登録される。ここで、起動時刻は時：分：秒である。
【００４８】
たとえば、ＣＰＵの識別情報の項目６０１がＣＰＵ＃０の場合、アプリケーションの識別情報の項目６０２にはアプリ＃１が登録され、起動時刻の項目６０３には１２：２０：２０が登録されている。すなわち、ＣＰＵ＃０には、１２時２０分２０秒に起動されたアプリ＃１が割り当てられていることを示している。
【００４９】
また、上述のように、管理テーブル６００はフラッシュＲＯＭ２１０などの記憶装置に記憶されていることとする。さらに、各ＣＰＵのキャッシュにも記憶されていることとしてもよい。一のＣＰＵのキャッシュ内の管理テーブル６００に変更が生じると、スヌープ回路が該管理テーブル６００の変更を検出し、他のＣＰＵのキャッシュ内の管理テーブル６００を変更する。
【００５０】
図７は、起動時刻テーブルの一例を示す説明図である。起動時刻テーブル７００は、ＣＰＵの識別情報の項目７０１と、起動時刻の項目７０２と、仮想プロセッサＩＤの項目７０３と、アクセス比率の項目７０４と、クロック周波数の項目７０５と、を有している。ＣＰＵの識別情報の項目７０１には、各ＣＰＵの識別情報が登録されている。起動時刻の項目７０２には、各ＣＰＵに割り当てられたアプリケーションの中で、最後に割り当てられたアプリケーションの起動時刻が登録される。最後に割り当てられたアプリケーションとは、起動時刻が最も遅いアプリケーションである。
【００５１】
仮想プロセッサＩＤの項目７０３には、起動時刻の項目７０２に登録された起動時刻が遅い順にＣＰＵに付された順位である。仮想プロセッサＩＤの項目７０３には、初期値としてすべて０が登録されている。
【００５２】
アクセス比率の項目７０４には、アービター２０１に設定するアクセス比率が登録される。アクセス比率は、仮想プロセッサＩＤの項目７０３に登録された値に基づいて決定される。ここでは、仮想プロセッサＩＤの項目７０３の値が小さい順にアクセス比率の値が大きくなる。仮想プロセッサＩＤの項目７０３の値がすべて同一値である場合、ＣＰＵのアクセス比率は等しくなる。
【００５３】
クロック周波数の項目７０５には、各ＣＰＵに供給されるクロックの周波数が登録される。各ＣＰＵに供給されるクロックの周波数は、仮想プロセッサＩＤの項目７０３の値に基づいて決定される。
【００５４】
また、上述のように、起動時刻テーブル７００はフラッシュＲＯＭ２１０などの記憶装置に記憶されていることとする。さらに、各ＣＰＵのキャッシュにも記憶されていることとしてもよい。一のＣＰＵのキャッシュ内の起動時刻テーブル７００に変更が生じると、スヌープ回路が該起動時刻テーブル７００の変更を検出し、他のＣＰＵのキャッシュ内の起動時刻テーブル７００を変更する。
【００５５】
図８は、アプリ＃５の起動指示が受け付けられた例を示す説明図である。ウエイトキュー５０４にアプリ＃５が積まれると、スケジューラ２３１が、（１）アプリ＃５の起動指示を受け付けたと判断する。スケジューラ２３１が、（２）起動時刻テーブル７００内の起動時刻の項目７０２に登録されている起動時刻が最も早い時刻であるＣＰＵを特定する。ＣＰＵ＃１が特定される。
【００５６】
図９は、アプリ＃５の実行例を示す説明図である。スケジューラ２３１が（３）ＣＰＵ＃１にアプリ＃５の実行指示を通知する。アプリ＃５の実行指示は、ウエイトキュー５０４内のアプリ＃５のバイナリ情報へのポインタの値を有している。スケジューラ２３２が、アプリ＃５の実行指示を受け付けると、（４）実行中のアプリ＃２をランキュー５０２に退避させる。スケジューラ２３２が、アプリ＃５のバイナリ情報へのポインタの値に基づいて共有メモリ２０３からアプリ＃５のバイナリ情報をロードする。スケジューラ２３２が、（５）ロードしたアプリ＃５のバイナリ情報に基づいてアプリ＃５を実行する。
【００５７】
図１０は、管理テーブル６００の更新例を示す説明図である。スケジューラ２３２が、管理テーブル６００内のＣＰＵ＃１に関するアプリケーションの識別情報の項目６０２にアプリ＃５を追加する。スケジューラ２３２が現時刻を検出し、管理テーブル６００内のアプリ＃５に関する起動時刻の項目６０３に検出した現時刻を登録する。図１０では、アプリ＃５の起動時刻として１２：３０：２０が登録されている。
【００５８】
図１１は、起動時刻テーブル７００内の起動時刻の更新例を示す説明図である。スケジューラ２３２が、起動時刻テーブル７００内のＣＰＵ＃１に関する起動時刻の項目７０２を検出した現時刻に更新する。これにより、ＣＰＵ＃１に関する起動時刻がＣＰＵ＃１に割り当てられたアプリケーションの中で最も遅く割り当てられたアプリケーションの起動時刻に更新される。
【００５９】
図１２は、起動時刻テーブル７００内の仮想プロセッサＩＤの更新例を示す説明図である。スケジューラ２３２が、起動時刻テーブル７００内の起動時刻の項目７０２に登録されている起動時刻が早い順に番号を仮想プロセッサＩＤの項目７０３に登録する。図１２では、ＣＰＵ＃０が最も早いため、ＣＰＵ＃０に関する仮想プロセッサＩＤの項目７０３に１が登録され、ＣＰＵ＃２がつぎに早いため、ＣＰＵ＃２に関する仮想プロセッサＩＤの項目７０３に２が登録される。ＣＰＵ＃１が最も遅いため、ＣＰＵ＃１に関する仮想プロセッサＩＤの項目７０３に３が登録される。
【００６０】
図１３は、起動時刻テーブル７００内のアクセス比率とクロック周波数の更新例を示す説明図である。スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号に基づいて各ＣＰＵのアクセス比率を決定する。たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が最も大きいＣＰＵのアクセス比率が他のＣＰＵのアクセス比率よりも高いアクセス比率に設定する。
【００６１】
具体的には、たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が大きい順にアクセス比率が高くなるように各ＣＰＵのアクセス比率を決定し、各ＣＰＵに関するアクセス比率の項目７０４に決定したアクセス比率を登録する。ここでは、仮想プロセッサＩＤの項目７０３の番号と同一値をアクセス比率の項目７０４に登録することとする。
【００６２】
また、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号に基づいて各ＣＰＵに供給するクロックの周波数を決定する。たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が最も大きいＣＰＵへ供給するクロックの周波数を他のＣＰＵへ供給する周波数よりも高い周波数に設定する。
【００６３】
または、たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が最も大きいＣＰＵへ供給するクロックの周波数をクロックジェネレータ２０２が供給可能な最も高い周波数に設定する。すなわち、スケジューラ２３２が、ＣＰＵ＃１へ供給するクロックの周波数を３００［ＭＨｚ］に設定する。または、たとえば、スケジューラ２３２が、仮想プロセッサＩＤの項目７０３の番号が大きい順にクロック周波数が高くなるように各ＣＰＵに供給するクロックの周波数を決定する。そして、スケジューラ２３２が、起動時刻テーブル７００内の各ＣＰＵに関するクロック周波数の項目７０５に決定したクロック周波数を登録する。
【００６４】
図１３では、スケジューラ２３２が、ＣＰＵ＃１へ与えるクロックの周波数がＣＰＵへ与えるクロック周波数の中で最も高く、ＣＰＵ＃２へ与えるクロックの周波数がＣＰＵ＃１へ与えるクロック周波数のつぎに高くなるように決定する。スケジューラ２３２は、ＣＰＵ＃０へ与えるクロックの周波数がＣＰＵへ与えるクロック周波数の中で最も低くなるように決定する。
【００６５】
上述のように本実施の形態でＣＰＵに供給可能なクロック周波数は１００Ｍ［ＭＨｚ］、２００Ｍ［ＭＨｚ］、３００Ｍ［ＭＨｚ］である。具体的には、たとえば、スケジューラ２３２が、ＣＰＵ＃１へ与えるクロックの周波数を３００［ＭＨｚ］に決定し、ＣＰＵ＃２へ与えるクロックの周波数を２００［ＭＨｚ］に決定し、ＣＰＵ＃０へ与えるクロックの周波数を１００［ＭＨｚ］に決定する。そして、スケジューラ２３２が、ＣＰＵ＃１に関するクロック周波数の項目７０５に３００［ＭＨｚ］を登録する。スケジューラ２３２が、ＣＰＵ＃２に関するクロック周波数の項目７０５に２００［ＭＨｚ］を登録する。スケジューラ２３２が、ＣＰＵ＃０に関するクロック周波数の項目７０５に１００［ＭＨｚ］を登録する。
【００６６】
図１４は、アプリ＃５を実行時のアクセス比率とクロック周波数の制御例を示す説明図である。スケジューラ２３２が、（６）更新後の起動時刻テーブル７００に登録した各ＣＰＵのアクセス比率をアービター２０１のレジスタ２４１〜レジスタ２４３にそれぞれ設定することで、各ＣＰＵから共有メモリ２０３へのアクセス比率を制御する。レジスタ２４１の値が１となり、レジスタ２４２の値が３となり、レジスタ２４３の値が１となる。
【００６７】
スケジューラ２３２が、（６）起動時刻テーブル７００に登録した各ＣＰＵのクロック周波数に対応する番号をクロックジェネレータ２０２のレジスタ２５１〜レジスタ２５３にそれぞれ設定することで、各ＣＰＵへ与えるクロックの周波数を制御する。レジスタ２５１の値が１となり、レジスタの値２５２が３となり、レジスタ２５３の値が２となる。
【００６８】
図１５は、所定時間経過後の起動時刻テーブル７００の更新例を示す説明図である。最後にアプリケーションの起動要求を受け付けてから所定時間が経過した場合、スケジューラ２３１は、仮想プロセッサＩＤの項目７０３の番号をすべて０に更新する。スケジューラ２３１は、アクセス比率の項目７０４のアクセス比率をすべて１に更新し、クロック周波数の項目７０５の周波数をすべて１００［ＭＨｚ］に更新する。
【００６９】
起動直後のアプリケーションであればユーザが使用する確率は高いが、一定時間が経過すると、いずれのアプリケーションをユーザが使用するかは明確でない。そこで、本実施の形態では、一定時間経過した場合、共有メモリ２０３へのアクセスやクロック周波数をすべて同一値に設定する。たとえば、一定時間としては固定値であってもよいし、最後に起動要求のあったアプリケーションによって該一定時間を異なる値に設定してもよい。
【００７０】
図１６は、所定時間経過後のアクセス比率とクロック周波数の設定例を示す説明図である。スケジューラ２３１が、（７）更新後の起動時刻テーブル７００に登録した各ＣＰＵのアクセス比率をアービター２０１のレジスタ２４１〜レジスタ２４３にそれぞれ設定する。レジスタ２４１の値が１となり、レジスタ２４２の値が１となり、レジスタ２４３の値が１となる。
【００７１】
スケジューラ２３１が、（７）起動時刻テーブル７００に登録した各ＣＰＵのクロック周波数に対応する番号をクロックジェネレータ２０２のレジスタ２５１〜レジスタ２５３にそれぞれ設定する。レジスタ２５１の値が１となり、レジスタ２５２の値が１となり、レジスタ２５３の値が１となる。
【００７２】
（スケジューラ２３１による割り当て処理）
図１７は、スケジューラ２３１による割り当て処理の割り当て処理手順を示すフローチャートである。まず、スケジューラ２３１が、ウエイトキュー５０４に対象アプリケーションがあるか否か、または一定時間ウエイトキュー５０４が空か否かを判断する（ステップＳ１７０１）。スケジューラ２３１が、ウエイトキュー５０４に対象アプリケーションがなく、かつ一定時間ウエイトキュー５０４が空でないと判断した場合（ステップＳ１７０１：Ｎｏ）、ステップＳ１７０１へ戻る。
【００７３】
スケジューラ２３１が、ウエイトキュー５０４に対象アプリケーションがあると判断した場合（ステップＳ１７０１：ある）、起動時刻テーブル７００に基づき起動時刻が最も早いＣＰＵを特定する（ステップＳ１７０２）。スケジューラ２３１が、特定したＣＰＵに対象アプリケーションの実行要求を通知し（ステップＳ１７０３）、ステップＳ１７０１へ戻る。
【００７４】
スケジューラ２３１が、一定時間ウエイトキュー５０４が空であると判断した場合（ステップＳ１７０１：空）、仮想プロセッサＩＤとアクセス比率とクロック周波数を初期値に決定する（ステップＳ１７０４）。スケジューラ２３１が、決定結果をクロックジェネレータ２０２とアービター２０１に設定し（ステップＳ１７０５）、ステップＳ１７０１へ戻る。
【００７５】
（各スケジューラによる設定処理）
図１８は、各スケジューラによる設定処理の設定処理手順を示すフローチャートである。スケジューラが、対象アプリケーションの実行要求、または実行中のアプリケーションの終了を検出したか否かを判断する（ステップＳ１８０１）。スケジューラが、対象アプリケーションの実行要求、および実行中のアプリケーションの終了を検出していないと判断した場合（ステップＳ１８０１：Ｎｏ）、ステップＳ１８０１へ戻る。スケジューラが、対象アプリケーションの実行要求を検出したと判断した場合（ステップＳ１８０１：実行要求）、実行中のアプリケーションをランキューに退避する（ステップＳ１８０２）。
【００７６】
そして、スケジューラが、対象アプリケーションを実行し（ステップＳ１８０３）、現時刻を特定する（ステップＳ１８０４）。スケジューラが、管理テーブル６００へ現時刻を対象アプリケーションの起動時刻として設定する（ステップＳ１８０５）。スケジューラが、起動時刻テーブル７００内の対象アプリケーションを実行するＣＰＵに対応する起動時刻を対象アプリケーションの起動時刻に設定し（ステップＳ１８０６）、ステップＳ１８１１へ移行する。
【００７７】
ステップＳ１８０１において、スケジューラが、実行中のアプリケーションの終了を検出したと判断した場合（ステップＳ１８０１：終了）、他に割当済のアプリケーションがあるか否かを判断する（ステップＳ１８０７）。スケジューラが、他に割当済のアプリケーションがないと判断した場合（ステップＳ１８０７：Ｎｏ）、起動時刻を最低値に設定し（ステップＳ１８０８）、ステップＳ１８１１へ移行する。最低値とは、たとえば、０に設定しておく。スケジューラ２３１が、対象アプリケーションの起動指示を受け付けた際に、起動時刻テーブル７００内の起動時刻が０であるＣＰＵがあれば、該ＣＰＵに対象アプリケーションを割り当てることとしてもよい。
【００７８】
スケジューラが、他に割当済のアプリケーションがあると判断した場合（ステップＳ１８０７：Ｙｅｓ）、割当済のアプリケーションの起動時刻の中で、最も早い起動時刻を特定する（ステップＳ１８０９）。そして、スケジューラが、特定した起動時刻を設定し（ステップＳ１８１０）、起動時刻テーブル７００に起動時刻の早い順に仮想プロセッサＩＤを設定する（ステップＳ１８１１）。スケジューラが、仮想プロセッサＩＤに基づいてクロック周波数とアクセス比率を決定する（ステップＳ１８１２）。スケジューラが、決定結果をクロックジェネレータ２０２とアービター２０１に設定することで、各ＣＰＵへ供給するクロックの周波数とＣＰＵから共有メモリ２０３へのアクセス比率を制御し（ステップＳ１８１３）、ステップＳ１８０１へ戻る。
【００７９】
以上説明したように、マルチコアプロセッサシステム、およびスケジューリング方法によれば、起動時刻が最も遅いアプリケーションと起動指示が発生した対象アプリケーションとを同一のＣＰＵに割り当てないようにし、対象アプリケーションを直ちに実行する。各ＣＰＵに割り当てられている起動時刻のみで割当先を決定するので、従来の負荷や優先度によって割当先を決定することと比較して、プロセッサ間通信を行う回数を減少させることができ、スケジューリングによるオーバーヘッドを削減することができる。
【００８０】
さらに、起動から時間が経過したアプリケーションよりも、起動直後のアプリケーションをユーザが使用する。すなわち、起動時刻が最も遅いアプリケーションと対象アプリケーションはユーザが操作する可能性が高いので、これらの２つのアプリケーションが異なるＣＰＵで実行されることで、ユーザの応答性を向上させることができる。さらに、対象アプリケーションを直ちに実行させることで、ユーザの応答性を向上させることができる。
【００８１】
また、各ＣＰＵに割り当てられたアプリケーションの起動時刻は、ＣＰＵごとにレジスタに記憶されることにより、プロセッサ間通信を行わずに対象アプリケーションの割当先ＣＰＵを決定することができる。したがって、プロセッサ間通信を行う回数を減少させることができ、スケジューリングによるオーバーヘッドを削減することができる。
【００８２】
また、起動時刻が最小であるアプリケーションを実行するＣＰＵに対象アプリケーションを割り当てる。起動時刻が最小であるアプリケーションを実行するＣＰＵとは、各ＣＰＵに割り当てられている最も遅い起動時刻のアプリケーションの中で起動時刻が最も早いアプリケーションの割当先であるＣＰＵである。起動からの時間経過が大きいアプリケーションであれば、ユーザが使用する可能性が低いため、ユーザの操作に影響を与えることなく、対象アプリケーションを直ぐに実行させることができる。
【００８３】
また、対象アプリケーションを割り当てた割当先コアに関する最小である起動時刻を対象アプリケーションの起動時刻に置き換えることで、プロセッサ通信を行うことなく、割当先を決定するための起動時刻に関する情報を容易に更新することができる。
【００８４】
また、対象アプリケーションの起動時刻に基づいて、複数のＣＰＵのうちの少なくとも一のＣＰＵの動作クロックまたは共有資源へのアクセス頻度に関する情報が変更されることにより、対象アプリケーションの実行性能を向上させることができる。
【００８５】
また、対象アプリケーションを実行するＣＰＵに複数の動作クロックの内で最も周波数の高い動作クロックが供給されることにより、対象アプリケーションの実行性能を向上させることができる。
【００８６】
また、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、複数のＣＰＵへ供給する動作クロックの周波数が同一周波数に変更される。ある一定時間を過ぎると、ユーザがいずれのアプリケーションを使用するかが不明確となる。そこで、各ＣＰＵの性能を共通にすることで、いずれのＣＰＵに割り当てられたアプリケーションがユーザに操作されても応答性に偏りなく実行させることができる。また、複数のＣＰＵへ供給する動作クロックの周波数が供給可能な周波数の中で最も低い周波数に変更されることで、低消費電力化を図ることができる。
【００８７】
また、対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、複数のＣＰＵから共有資源へのアクセス頻度が同一頻度に変更される。ある一定時間を過ぎると、ユーザがいずれのアプリケーションを使用するかが不明確となる。そこで、各ＣＰＵの性能を共通にすることで、いずれのＣＰＵに割り当てられたアプリケーションがユーザに操作されても応答性に偏りなく実行させることができる。
【００８８】
なお、スケジューリング方法は、予め用意されたプログラムをマルチコアプロセッサのうちのいずれかのＣＰＵで実行することにより実現することができる。また、該プログラムは、フラッシュＲＯＭ２１２などのマルチコアプロセッサのいずれかのＣＰＵが読み取り可能な記録媒体に記録され、マルチコアプロセッサのいずれかのＣＰＵによって記録媒体から読み出されることによって実行されてもよい。また、該プログラムは、インターネット等のネットワークを介して配布されてもよい。
【００８９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９０】
（付記１）複数のプロセッサと、
アプリケーションを前記複数のプロセッサに割り当てるスケジューラと、
を含み、
前記スケジューラは、
対象アプリケーションの起動要求がある場合に、前記複数のプロセッサで実行されるアプリケーションの起動時刻に基づいて、前記対象アプリケーションを実行するプロセッサを選択すること
を特徴とするマルチコアプロセッサシステム。
【００９１】
（付記２）前記起動時刻は、前記プロセッサ毎にレジスタに記憶されること
を特徴とする付記１に記載のマルチコアプロセッサシステム。
【００９２】
（付記３）前記スケジューラは、
前記起動時刻が最小であるアプリケーションを実行するプロセッサに前記対象アプリケーションを割り当てること
を特徴とする付記１または２に記載のマルチコアプロセッサシステム。
【００９３】
（付記４）前記スケジューラは、
最小である前記起動時刻を前記対象アプリケーションの起動時刻に置き換えること
を特徴とする付記３に記載のマルチコアプロセッサシステム。
【００９４】
（付記５）前記対象アプリケーションの起動時刻に基づいて、前記複数のプロセッサの内の少なくとも一のプロセッサの動作クロックまたは共有資源へのアクセス頻度に関する情報が変更されること
を特徴とする付記１乃至付記４の何れか一に記載のマルチコアプロセッサシステム。
【００９５】
（付記６）複数の動作クロックを生成するクロック生成回路を含み、
前記対象アプリケーションを実行するプロセッサに前記複数の動作クロックの内で最も周波数の高い動作クロックが供給されること
を特徴とする付記１乃至付記５の何れか一に記載のマルチコアプロセッサシステム。
【００９６】
（付記７）前記対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、前記複数のプロセッサへ供給する動作クロックの周波数が同一周波数に変更されること
を特徴とする付記５または６に記載のマルチコアプロセッサシステム。
【００９７】
（付記８）前記対象アプリケーションの起動から一定時間経過後、他のアプリケーションの起動指示を受け付けなかった場合、前記複数の動作クロックの内で最も周波数の低い動作クロックが前記複数のプロセッサへ供給されること
を特徴とする付記７に記載のマルチコアプロセッサシステム。
【００９８】
（付記９）コンピュータが、
複数のプロセッサで実行される複数のアプリケーションのそれぞれの起動時刻を登録し、
対象アプリケーションの起動指示を受け取り、
前記起動時刻に基づいて前記複数のプロセッサの中から前記対象アプリケーションを実行するプロセッサを選択すること
を特徴とするスケジューリング方法。
【００９９】
（付記１０）前記起動時刻を前記複数のプロセッサのそれぞれに対応して設けられるレジスタに登録すること
を特徴とする付記９に記載のスケジューリング方法。
【０１００】
（付記１１）前記対象アプリケーションを実行するプロセッサに対応するレジスタに登録される起動時刻を前記対象アプリケーションの起動時刻に置き換えること
を特徴とする付記１０に記載のスケジューリング方法。
【０１０１】
（付記１２）前記対象アプリケーションの起動時刻に基づいて、前記複数のプロセッサの内の少なくとも一のプロセッサの動作クロックまたはメモリへのアクセス頻度に関する情報を変更すること
を特徴とする付記９乃至付記１１の何れか一に記載のスケジューリング方法。
【符号の説明】
【０１０２】
２００  マルチコアプロセッサシステム
２０１  アービター
２０２  クロックジェネレータ
２０３  共有メモリ
２３１  スケジューラ
【国際調査報告】
2012095982.tif 000021
2012095982.tif 000022