(57)【特許請求の範囲】
【請求項１】
複数のプロセッサコアとプロセッサコアごとのキャッシュとを有するマルチコアプロセッサで複数のスレッドを実行するプログラム処理装置であって、
生成されたスレッドの識別子を記憶するスレッド管理手段と、
所定の動作状態においては、生成した所定のプログラムのスレッドを１つのプロセッサコアに固定的に割り当てる割当手段と、
前記所定の動作状態が解消されたことを検出すると、前記スレッド管理手段で管理している識別子のスレッドの前記１つのプロセッサコアへの固定的な前記割り当てを解除する手段と
を有し、
前記所定の動作状態とは、前記所定のプログラムが起動処理中であることを特徴とするプログラム処理装置。
【請求項２】
前記所定のプログラムは、アプリケーションプログラムを実行する仮想マシンであり、
前記所定のプログラムが起動処理中であるとは、前記所定のプログラムが前記アプリケーションプログラムの起動を開始してから、対象となるアプリケーションプログラムすべてについて起動を完了するまでの状態であることを特徴とする請求項１に記載のプログラム処理装置。
【請求項３】
前記割当手段は、前記所定の動作状態ではない場合には、生成した前記スレッドを前記１つのプロセッサコアには割り当てず、前記１つのプロセッサコアに割り当てられていないスレッドについては、オペレーティングシステムによりプロセッサコアの割り当てが行われることを特徴とする請求項１乃至２のいずれか一項に記載のプログラム処理装置。
【請求項４】
前記１つのプロセッサコアは、前記複数のプロセッサコアのうちの特定のひとつであることを特徴とする請求項１に記載のプログラム処理装置
【請求項５】
前記仮想マシンはＪａｖａ仮想マシンであり、前記アプリケーションプログラムはＪａｖａアプリケーションであることを特徴とする請求項２に記載のプログラム処理装置
【請求項６】
請求項１乃至５のいずれか一項に記載のプログラム処理装置と、
画像を読み取るスキャナと、
画像を印刷するプリンタと、
前記プログラム処理装置により実行されるアプリケーションプログラムと前記スキャナおよび前記プリンタとのインターフェースを提供する制御部と
を有することを特徴とする画像形成装置。
【請求項７】
請求項１乃至５のいずれか一項に記載のプログラム処理装置としてコンピュータを機能させるためのプログラム。
【請求項８】
複数のプロセッサコアとプロセッサコアごとのキャッシュとを有するマルチコアプロセッサにより複数のスレッドを実行するプログラム処理方法であって、
生成されたスレッドの識別子を記憶するスレッド管理工程と、
所定の動作状態においては、生成した所定のプログラムのスレッドを１つのプロセッサコアに固定的に割り当てる割当工程と、
前記所定の動作状態が解消されたことを検出すると、前記スレッド管理工程により管理している識別子のスレッドの前記１つのプロセッサコアへの固定的な前記割り当てを解除する工程と
を有し、
前記所定の動作状態とは、前記所定のプログラムが起動処理中であることを特徴とするプログラム処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサ上でマルチスレッドプログラムを実行する際に、当該プログラムのスレッドへの動作コアの割り当てを動的に変更するための技術に関する。
【背景技術】
【０００２】
近年、一つのプロセッサの中に複数のコア（演算処理を行う部分）を待つプロセッサが主流になっている。このような構成のプロセッサはマルチコアプロセッサと呼ばれ、それぞれのプロセッサコアによって複数のスレッド（処理の実行単位）を同時に実行することが可能になっている。マルチコアプロセッサは、デスクトップPCやサーバ装置だけでなく、画像形成装置などの組み込み機器においても搭載されるようになっている。画像形成装置にマルチコアプロセッサを搭載する場合、コア毎にキャッシュを持ちRAMを共有する構成が利用されることが多い。このような構成の場合、キャッシュ・コヒーレンシを保つ（コア毎のキャッシュとＲＡＭの間の一貫性を保つ）ための処理により、動作させるプログラムによってはキャッシュのミスヒットが頻発することがある。具体的には、複数のコアに同一データを示すキャッシュがある場合、一方のコアがそのデータを変更すると、別のコアにキャッシュされたデータは無効になりキャッシュのミスヒットが起こりやすくなる。この問題はフォルス・シェアリングとして一般に知られている。フォルス・シェアリングが頻発した場合、キャッシュを同期させるためのオーバーヘッドが非常に大きくなるため、シングルコアプロセッサで動作させた時よりもパフォーマンスが大幅に低下する。
【０００３】
このような問題を解決するために特定のコアに特定のスレッドを固定的に割り当てることでキャッシュのミスヒットの頻度を減らして効率的にプログラムを実行する技術が知られている（例えば、特許文献１の段落００７５〜００７６等参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2012-133682号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、フォルス・シェアリングによるパフォーマンスの低下が特定のスレッドの特定処理の実行時のみに限定されている場合、そのスレッドを動作させるコアを常に固定してしまうと特定処理実行時以外のパフォーマンスを低下させることになる。例えば、画像形成装置において、特定プログラムの起動処理中だけフォルス・シェアリングによりパフォーマンスが低下するような場合に、その特定プログラムのスレッドの動作コアを固定したままにしてしまうと、起動時の性能低下は防げても起動後にユーザが画像形成装置の機能を利用する際のパフォーマンスが悪くなるおそれがある。これでは本来達成できていたはずのパフォーマンスで製品を提供できなくなり、ユーザの利便性を損なうことになる。
【０００６】
本発明は上記従来例に鑑みて成されたもので、特定の処理を実行中はスレッドの動作コアを固定し、当該処理完了後に関連スレッドの動作コアの設定を戻すように構成することで、特定処理実行中と特定処理完了後の動作パフォーマンスを両立させることを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本発明は以下の構成を有する。
【０００８】
複数のプロセッサコアとプロセッサコアごとのキャッシュとを有するマルチコアプロセッサで複数のスレッドを実行するプログラム処理装置であって、
生成されたスレッドの識別子を記憶するスレッド管理手段と、
所定の動作状態においては、生成した所定のプログラムのスレッドを１つのプロセッサコアに固定的に割り当てる割当手段と、
前記所定の動作状態が解消されたことを検出すると、前記スレッド管理手段で管理している識別子のスレッドの前記１つのプロセッサコアへの固定的な前記割り当てを解除する手段と
を有し、
前記所定の動作状態とは、前記所定のプログラムが起動処理中であることを特徴とするプログラム処理装置が提供される。
【発明の効果】
【０００９】
本発明によれば、特定の処理を実行中はスレッドの動作コアを固定し、当該処理完了後に関連スレッドの動作コアの設定を戻すように構成したことで、特定処理実行中と特定処理完了後の動作パフォーマンスを両立できるようになりユーザ利便性が向上する。
【図面の簡単な説明】
【００１０】
【図１】画像形成装置のハードウェア構成を示すブロック図である。
【図２】画像形成装置のソフトウェア構成を示すブロック図である。
【図３】本発明のソフトウェアが備える特徴的な機能を示すブロック図である。
【図４】スレッド生成制御部を利用して生成したスレッドの処理のフローチャートである。
【図５】Ｊａｖａ（登録商標）アプリケーション管理部の起動処理のフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して本発明の実施の形態を詳しく説明する。なお、以下の実施の形態は特許請求の範囲に係る発明を限定するものでなく、また実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。また本実施形態に登場するＪａｖａは登録商標であるが、ここにその旨を明示して以下の説明においては省略する。
【００１２】
＜第１の実施形態＞
図１に、本発明が適用されるプログラム処理装置の一例としての画像形成装置のハードウェア構成を示すブロック図を示す。図１において画像形成装置は、操作部１３１、画像入力装置であるスキャナ部１３２、画像出力装置であるプリンタ部１３３および画像形成装置の制御を司るコントローラ１００で構成される。操作部１３１は、タッチパネルディスプレイなどからなり、ユーザに対して情報の表示や入力を受け付ける機能を持つ。スキャナ部１３２は、置かれた原稿上の画像の読み取り動作を行い、画像データを作成する。プリンタ部１３３は、コントローラ１００から受け取った画像データを用紙上に印刷画像として形成する。コントローラ１００は、操作部１３１、スキャナ部１３２、プリンタ部１３３と電気的に接続されている一方、LAN１４０にもネットワークＩ／Ｆ１０６を介して接続されており、外部機器からの印刷ジョブを受信することが可能になっている。
【００１３】
ＣＰＵ１０１は、ＲＯＭ１０３に記憶された制御プログラム等に基づいてコントローラ１００内部で行われる各種処理について統括的に制御する。
【００１４】
また、マルチコアプロセッサであるＣＰＵ１０１は内部に２つのプロセッサコア（コア０  １２１とコア１  １２２）と、それぞれのプロセッサコアに対応するキャッシュメモリ（キャッシュメモリ０  １２４、キャッシュメモリ１  １２５）と、キャッシュメモリを制御するキャッシュ制御部１２３を含む。
【００１５】
コア０  １２１およびコア１  １２２は、プロセッサの中核をなす部分であり、実際の演算処理を行う。キャッシュメモリは、プログラムが使用するＲＡＭ１０２上のデータをキャッシュするための高速なメモリである。キャッシュメモリ０  １２４はコア０が扱うデータをキャッシュし、キャッシュメモリ１  １２５はコア１  １２２が扱うデータをキャッシュする。なお、通常はＲＡＭ１０２とキャッシュメモリの速度差は非常に大きいため、速度差を緩衝するために２次キャッシュや３次キャッシュを搭載することが多いが本実施形態では説明を簡便化するため１次キャッシュのみを備える例で説明している。
【００１６】
キャッシュ制御部１２３は、キャッシュメモリ０  １２４及びキャッシュメモリ１  １２５上のデータの制御を行う。また、キャッシュ・コヒーレンシ（ＲＡＭ１０２とキャッシュメモリ上のデータの一貫性）を保つ制御も行う。例えば、同一のデータを両方のキャッシュメモリにキャッシュしている場合、コア０  １２１がキャッシュメモリ０  １２４にキャッシュされたデータを変更すると、キャッシュメモリ１  １２５にキャッシュされたデータの内容は不正となる。そのため、キャッシュ制御部１２３はキャッシュメモリ１  １２５にキャッシュされたデータを無効にして不正なキャッシュが使われないように制御する。この場合、コア１  １２２が同じデータを参照しようとしてもキャッシュミスとなり、ＲＡＭ１０２からデータを読み直す必要がでてくるため速度が遅くなる。
【００１７】
ＲＡＭ１０２は、ＣＰＵ１０１が動作する際に使われるシステムワークメモリであり、かつ画像データを一時記憶するためのメモリでもある。ＲＯＭ１０３には装置のブートプログラムが格納されている。ＨＤＤ１０４はハードディスクドライブであり、システムソフトウェアや画像データを格納することが可能となっている。また、本実施形態の画像形成装置では、アプリケーションプログラムであるＪａｖａアプリケーションを後からインストールして画像形成装置の機能を拡張することも可能になっており、インストールされたＪａｖａアプリケーションもこのＨＤＤ１０４に格納される。操作部Ｉ／Ｆ１０５は、システムバス１１０と操作部１３１とを接続するためのインターフェース部である。操作部Ｉ／Ｆ１０５は、操作部１３１に表示するための画像データをシステムバス１１０から受け取り操作部１３１に出力すると共に、操作部１３１から入力された情報をシステムバス１１０へと出力する。ネットワークＩ／Ｆ１０６はＬＡＮ１４０及びシステムバス１１０に接続し、情報の入出力を行う。スキャナＩ／Ｆ１０７は、スキャナ部１３２から受け取った画像データに対して、補正、加工、及び編集を行う。なお、スキャナＩ／Ｆ１０７は、受け取った画像データがカラー原稿か白黒原稿か、文字原稿か写真原稿かなどを判定する機能を持つ。画像形成部１０８は画像データの方向変換、画像圧縮、伸張処理などをおこなう。プリンタＩ／Ｆ１０９は、画像形成部１０８から送られた画像データを受け取り、この画像データに付随させられている属性データを参照しながら画像データに画像形成を施す。画像形成後の画像データは、プリンタ部１３３に出力される。
【００１８】
＜ソフトウェア構成＞
図２に、画像形成装置のソフトウェア構成を示すブロック図を示す。このソフトウェアは、ＨＤＤ１０４に保存されており、ＲＯＭ１０３のブートプログラムによって、ＲＡＭ１０２に読みだされた後、ＣＰＵ１０１にて実行される。
【００１９】
ＯＳ２０１は、対称型マルチプロセッシング（SMP: Symmetric multi-processing）型のオペレーションシステムであり、各種プログラムの処理単位（スレッド）を生成する。そしてＯＳ２０１は、各スレッドを各コアに割り当てて実行する。通常、スレッドは全てのコアで動作可能な状態になっており、ＯＳ２０１が所定のアルゴリズムに従ってどのコアで動作させるかを決定する。また、プログラム上からスレッドが動作可能なコアを設定することも可能になっており、例えば、特定のスレッドの動作可能コアをコア１のみに設定ことで、その特定のスレッドをコア１のみで動作させることも可能である。
【００２０】
メイン制御部２０２は、本実施形態における画像形成装置において、Ｎａｔｉｖｅアプリケーション２０３やＪａｖａＶＭ起動制御部２０４の起動制御、および画像形成装置の主要機能であるコピーやスキャンやプリント等の各種ジョブの管理や実行制御を行う。また、メイン制御部２０２は、Ｊａｖａアプリケーションから画像形成装置が提供する機能を利用するためのインターフェースを提供する。Ｎａｔｉｖｅアプリケーション２０３は、画像形成装置の主要機能であるコピーやスキャンを実行指示するためのＵＩを操作部１３１に表示し、ユーザからの操作指示を受けて各種ジョブを投入するアプリケーションである。また、Ｎａｔｉｖｅアプリケーション２０３は、ＯＳ２０１の機能を利用してスレッドを生成してアプリケーション処理を実行する。生成されたスレッドは、動作可能なコアが設定されていないため、ＯＳ２０１の決定に基づいてコア０もしくはコア１のどちらかで実行される。よって、複数のスレッドが同時に動作できマルチコアの性能を活かして処理される。
【００２１】
メイン制御部２０２によって起動されたＪａｖａＶＭ起動制御部２０４は、ＪａｖａＶＭ（Ｊａｖａ仮想マシン）２０５の起動を制御する。またＪａｖａＶＭ起動制御部２０４は、ＪａｖａＶＭ２０５からスレッド生成の要求を受けると、ＯＳ２０１にスレッド生成を依頼し、それによって生成されたスレッドの管理を行う機能を備える。
【００２２】
ＪａｖａＶＭ２０５は、Ｊａｖａ言語で記述されたプログラム（Ｊａｖａプログラム、あるいは特定プログラムとも言う）を実行するための仮想マシンである。なお、ＪａｖａＶＭ２０５がＪａｖａアプリケーション２０７を起動する際に複数のスレッドが生成されて特定のメモリ領域へのアクセスが頻発する構成になっている。そのため、Ｊａｖａプログラムの実行において生成されるスレッドのコアを固定せずに起動するとフォルス・シェアリングが頻発して大幅なパフォーマンス低下を引き起こす。起動完了後は、各Ｊａｖａアプリケーション２０７の各スレッドが並列に実行される頻度が少なくなるため、スレッドを特定のコアに固定しなくともフォルス・シェアリングが発生する頻度が少なくなる。
【００２３】
Ｊａｖａアプリケーション管理部２０６は、ＪａｖａＶＭ２０５が起動されると最初に実行されるＪａｖａのプログラムであり、各種Ｊａｖａアプリケーション２０７の管理(インストール・アンインストール・起動・停止制御)を行う。また、Ｊａｖａアプリケーション管理部２０６は、Ｊａｖａアプリケーション２０７の起動状態（開始もしくは停止）も管理するため、Ｊａｖａアプリケーション２０７全体の起動処理が完了したことを把握することが可能である。さらに後述する特定処理状態管理部３０６と通信し、Ｊａｖａアプリケーション群の起動処理が完了したことを通知する機能も持つ。
【００２４】
Ｊａｖａアプリケーション２０７は、認証機能追加、操作性のカスタマイズ、外部装置との連携動作など画像形成装置の機能を拡張するためのアプリケーションである。本実施形態の画像形成装置では複数のＪａｖａアプリケーション２０７をインストールして同時に動作させることが可能になっている。
【００２５】
＜機能のブロック＞
図３は、図２で示したＯＳ２０１およびＪａｖａＶＭ起動制御部２０４の各々のソフトウェア階層において提供される本実施形態における特徴的な機能のブロック図である。
【００２６】
スレッド生成部３０１は、ＯＳ２０１に含まれる機能であり、上位層のプログラムからの要求に従ってスレッドを生成する。この時、上位層のプログラムからはエントリポイント関数およびそのエントリポイント関数への引数の情報が渡される。エントリポイント関数とは、スレッドが開始された際にそのスレッドが最初に実行する関数のことであり、そのスレッドの処理内容に相当するものである。また、スレッド生成部３０１はスレッドを生成するとそのスレッドを一意に識別するための識別子（スレッドＩＤ）を生成して管理している。
【００２７】
コア割当制御部３０２は、ＯＳ２０１に含まれる機能であり、上位層のプログラムからの要求に従って、スレッドが動作可能なコアを設定する。この時、上位層のプログラムからはそのスレッドを動作させたいコアの集合が指定される。ＯＳ２０１は、ここで指定されたコアの範囲内で実際にどのコアでスレッドを動作させるかを決定する。よって、特定のコアを一つだけを指定すれば、指定したコアだけでスレッドを動作させるように制御可能となる。動作可能コアを複数指定可能なため３つ以上のコアを持つプロセッサであれば、特定の２コアだけで処理を実行させるといった制御も可能である。
【００２８】
スレッド生成制御部３０３は、ＪａｖａＶＭ起動制御部２０４に含まれる機能であり、ＪａｖａＶＭ２０５からの要求に応じてスレッドを生成する。その要求の中にはＪａｖａプログラムの処理内容であるエントリポイント関数とエントリポイント関数への引数が含まれる。スレッド生成制御部３０３は、スレッドを生成する際に、スレッド生成機能３０１に対して、図４で後述する処理を行うエントリポイント関数を指定する。また、引数としては、ＪａｖａＶＭ２０５から渡されたエントリポイント関数およびその引数をひとまとめにしたものを指定する。
【００２９】
動的コア割当制御部３０４は、ＪａｖａＶＭ２０５上で動作するプログラム（例えばＪａｖａアプリケーション２０７）の動作状態に応じて生成スレッドの動作コアの制御を行う。具体的には、プログラムが起動処理中である場合はスレッドにコア１だけで動作するようにコアの割り当てを行い、起動中でなければコア０およびコア１の両方で動作可能なようにコアの割り当てを行う。すなわち、動的コア割当制御部３０４は、Ｊａｖａアプリケーション２０７の動作状態が所定の動作状態である場合に、そのＪａｖａアプリケーション２０７のスレッドを所定のコアに固定的に割り当てる。そして動的コア割当制御部３０４は、Ｊａｖａアプリケーション２０７の動作状態が所定の動作状態から抜けた場合に、そのＪａｖａアプリケーション２０７のスレッドの固定的な割り当てを解消する。それによって、このＪａｖａアプリケーション２０７のスレッドは、上述のＯＳ２０１の所定のアルゴリズムに従って流動的に複数コアのどれかに割り当てられるようになる。この時、プログラムの動作状態は特定処理状態管理部３０６から取得する。また、特定処理状態管理部３０６からの要求に応じて特定処理スレッド管理部３０５で管理しているスレッドの動作コアの割り当てを動的に変更する。
【００３０】
特定処理スレッド管理部３０５は、スレッド生成制御部３０３を介して生成されたスレッドの管理を行う。具体的には、スレッド管理リストを保持し、リスト内には、スレッド生成制御部３０３を介して生成されたスレッドのうち、まだ生存中のスレッドのスレッドＩＤを保持する。スレッドＩＤは、前述したスレッド生成部３０１がスレッドを生成した際に、そのスレッドを識別するために割り振られる識別子である。
【００３１】
特定処理状態管理部３０６は、ＪａｖａＶＭ２０５上で動作するプログラムの動作状態情報（起動処理中状態／起動処理完了状態）を保持する。特定処理状態管理部３０６が保持する動作状態情報はＪａｖａアプリケーション管理部２０６からの通知を受けて変更される。
【００３２】
＜スレッドの処理のフローチャート＞
図４は、スレッド生成制御部３０３がスレッド生成部３０１を使ってスレッドを生成する際に指定するエントリポイント関数、すなわち、スレッド生成制御部３０３を介して生成されたスレッドの処理の流れを示すフローチャートである。
【００３３】
スレッド生成制御部３０３によって生成されたスレッドは、まずステップＳ４０１で自分のスレッドのスレッドＩＤをＯＳ２０１から取得する。
【００３４】
次にステップＳ４０２に進み、スレッドは、特定処理スレッド管理部３０５で保持されるスレッド管理リストにステップＳ４０１で取得したスレッドＩＤを追加する。
【００３５】
次にステップＳ４０３に進み、スレッドは、特定処理状態管理部３０６からプログラムの動作状態情報を取得し、動作状態が所定の動作状態すなわち「起動処理中」状態であるかを判定する。特定処理状態管理部３０６が保持するプログラム動作状態の情報は、Ｊａｖａアプリケーション管理部２０６から設定される（図５で後述する）。ステップＳ４０３で、「起動処理中」状態であると判定した場合はステップＳ４０４に進み、「起動処理中」状態でないと判定した場合はステップＳ４０５に進む。
【００３６】
ステップＳ４０４では、スレッドは、コア割当制御部３０４を利用して自スレッドが動作するコアをコア１に固定する。これにより、Ｊａｖａプログラムのスレッドはコア１だけで動作するようになり、コア０とコア１で同じＲＡＭの領域にアクセスする頻度が少なくなり、フォルス・シェアリングが発生しづらくなる。もちろんコア１とするのは一例であって、マルチコアのうちどのプロセッサコアであっても、特定のひとつに固定すればよい。スレッドを実行するプロセッサコアを指定することはオペレーティングシステムの機能として用意されており、ステップＳ４０４ではその機能を用いてプロセッサコアを指定する。指定されたプロセッサコアが現在スレッドを実行しているプロセッサコアではない場合には、当該スレッドを実行するプロセッサコアは、指定されたプロセッサコアに切り替えられる。
【００３７】
ステップＳ４０５では、ＪａｖａＶＭ２０５から指定されたエントリポイント関数（Ｊａｖａスレッドの実処理）を実行する。
【００３８】
次にステップＳ４０６で、スレッドは特定処理スレッド管理部３０５で保持されるスレッド管理リストからステップＳ４０１で取得したスレッドＩＤを削除する。そしてこのスレッドは終了する。
【００３９】
ステップＳ４０１〜ステップＳ４０６のステップを実行することにより、起動処理中だけＪａｖａＶＭに関するスレッドの実行コアを１つのコアに固定することが可能になり、ＪａｖａＶＭ上のプログラムの起動パフォーマンスを向上することが可能になる。また、ＪａｖａＶＭに関する生存スレッドの管理も可能になるため、後述するステップを実行することにより関連する動作中のスレッドの動作コアの割り当てを後から動的に変更可能になる。
【００４０】
＜Ｊａｖａアプリケーション管理部起動時のフローチャート＞
図５は、Ｊａｖａアプリケーション管理部２０６の起動時の処理の流れを示すフローチャートである。
【００４１】
ＪａｖａＶＭ２０５により起動をかけられたＪａｖａアプリケーション管理部２０６は、ステップＳ５０１にてＪａｖａアプリケーション管理部２０６の特定処理状態管理部３０６が保持している状態を「起動処理中」状態に設定する。これにより、図４のＳ４０３の判定で「起動処理中」であると判定されるようになるため、この後にスレッド生成制御部３０３で生成したスレッド（および生成済みであっても処理がステップＳ４０３まで達していないスレッド）の動作コアはコア１に固定されるようになる。
【００４２】
次にステップＳ５０２に進み、Ｊａｖａアプリケーション管理部２０６は、インストールされているＪａｖａアプリケーション群の中から起動すべき対象であるＪａｖａアプリケーションがあるかどうかを判定する。もし起動すべきＪａｖａアプリケーションが存在すると判定された場合はステップＳ５０３に進む。
【００４３】
ステップＳ５０３では、Ｊａｖａアプリケーション管理部２０６は、起動すべきと判定されたＪａｖａアプリケーション群のうち先頭のＪａｖａアプリケーションの起動を行う。なお、ステップＳ５０３での起動処理の中で生成されるスレッドは、スレッド生成制御部３０３を介して生成され、特定処理スレッド管理部３０５によって管理される。したがってここで生成されるスレッドの処理は図４の手順で進行する。ステップＳ５０３にて起動処理が完了するとステップＳ５０２に戻り、起動すべきＪａｖａアプリケーションが無くなるまでステップＳ５０２，Ｓ５０３を繰り返す。ステップＳ５０２で起動すべきアプリケーションがないと判定された場合（起動すべきＪａｖａアプリケーションを全て起動し終わった場合）、ステップＳ５０４に進む。
【００４４】
ステップＳ５０４では、Ｊａｖａアプリケーション管理部２０６は、特定状態管理部３０６が保持している動作状態を「起動処理完了」状態に変更する。ステップＳ５０２で検出された、起動すべきＪａｖａアプリケーションがない状態とは、「起動処理中」状態が解消された状態であるので、ステップＳ５０４では、所定の動作状態を「起動処理中」から「起動処理完了」に変更している。これにより、図４のＳ４０３の判定で「起動処理中」でないと判定されるようになるため、これ以降にスレッド生成制御部３０３で生成されたスレッドは、コア０とコア１のどちらのコアでも動作可能となる。
【００４５】
次に、ステップＳ５０５に進み、動的コア割当制御部３０４は、特定処理スレッド管理部３０５内に保持されているスレッドＩＤに対応するスレッドの各々に対して、動作可能なプロセッサコアの設定をコア０およびコア１の両方で動作可能なように変更する。もちろん、プロセッサコアの数が２よりも多ければ、そのすべてで動作可能に設定を変更することができる。ステップＳ５０５は、たとえばステップＳ４０４と同様の機能を用いて行われる。動作可能なプロセッサコアの設定が変えられて設定を解除されたスレッドは、オペレーティングシステムの管理下で、新たな設定に従ったプロセッサコアで実行される。したがって、そのままのプロセッサコアで実行されることもあれば、他のプロセッサコアに切り替えられることもあり得る。
【００４６】
なお、説明を簡便化するため上記フローチャートでは詳細を省いたが、スレッド生成時や終了時のスレッド管理リスト操作（Ｓ４０２、Ｓ４０６）とステップＳ５０５の処理は排他処理になっている。これによりコア割り当ての変更処理中にスレッド管理リストが変更されないようにしている。
【００４７】
以上の動作により、ＪａｖａＶＭ２０５上で動作するプログラムの起動処理中はＪａｖａＶＭ関連スレッドの動作コアをコア１に固定することができるためフォルス・シェアリングの頻度を抑えることができ、パフォーマンスが向上する。また、ＪａｖａＶＭ２０５上で動作するプログラムの起動処理完了後は、全てのＪａｖａＶＭ関連スレッドはコア０、コア１のどちらででも動作可能にできるため、起動後のパフォーマンスも維持できる。これにより起動時のパフォーマンスと通常処理時のパフォーマンスの両立が可能になりユーザ利便性が向上する。
【００４８】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。第１の実施形態では、スレッド生成制御部３０３は、起動処理中に生成されたスレッドの中で毎回コアの設定を行うような構成になっていた。しかし、子スレッド（生成される側のスレッド）が親スレッド（生成する側のスレッド）の属性を引き継ぐ場合は、ＪａｖａＶＭの起動処理を行うためのスレッドであって、起動されるＪａｖａアプリケーションのスレッドを生成する親スレッドのコアの設定を特定のコアに変更するようにして、各Ｊａｖａアプリケーションのスレッドについてコアの設定を行わない構成にしてもよい。この場合には図４の手順で処理すべきは親スレッドだけであり、子スレッドについてはステップＳ４０３、Ｓ４０４は実行されない。ただし、図５のステップＳ５０５におけるコア割り当ての変更は、その時点で存在しているスレッドの各々について行う必要がある。
【００４９】
また、特定プログラムの特定処理の一例として、Ｊａｖａプログラムの起動処理が遅い場合の例を示した。しかしながら、本実施形態に係る発明はこれに限定されるものではなく、その他のプログラムのその他の処理においてもフォルス・シェアリングが原因でパフォーマンスが問題になる処理全般について適用できることはいうまでもない。
【００５０】
［その他の実施例］
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５１】
１０１  CPU、１０２  RAM、１２１  コア、１２２  キャッシュメモリ、１２３  キャッシュ制御部、３０３  スレッド生成制御部、３０４  動的コア割当制御部、３０５  特定処理スレッド管理部、３０６  特定処理状態管理部
【図１】
0006518087.tif 000002
【図２】
0006518087.tif 000003
【図３】
0006518087.tif 000004
【図４】
0006518087.tif 000005
【図５】
0006518087.tif 000006