(57)【特許請求の範囲】
【請求項１】
起動中のソフトウェアと実行中のソフトウェアとが同一の共用リソースにアクセス中であるか否かを判断する判断手段と、
前記判断手段によってアクセス中であると判断された場合、前記同一の共用リソースの種別がメモリであれば前記実行中のソフトウェアの実行優先度を低下させるように制御し、前記同一の共用リソースの種別が前記メモリよりアクセス速度が低速なデバイスであれば前記実行中のソフトウェアを一時停止するように制御する制御手段と、
を備えることを特徴とするソフトウェア制御装置。
【請求項２】
前記起動中のソフトウェアが、起動開始から所定の起動時間を経過しても起動を完了していないことを検出する検出手段をさらに備え、
前記制御手段は、
さらに、前記検出手段によって起動を完了していないことが検出され、かつ、前記同一の共用リソースが前記メモリであった場合、前記実行中のソフトウェアの実行優先度を低下させるように制御することを特徴とする請求項１に記載のソフトウェア制御装置。
【請求項３】
任意のソフトウェアの非競合状態における起動時間と任意のソフトウェアどうしの競合状態における性能劣化を示す係数とを記憶するデータベースから、前記起動中のソフトウェアの非競合状態における起動時間と前記起動中のソフトウェアと前記実行中のソフトウェアとの競合状態における性能劣化を示す係数とを抽出する抽出手段と、
前記抽出手段によって抽出された起動時間と前記抽出手段によって抽出された係数とに基づいて、前記起動中のソフトウェアの競合状態における起動予測時間を算出する算出手段と、をさらに備え、
前記検出手段は、
さらに、前記算出手段によって算出された前記起動中のソフトウェアの競合状態における起動予測時間が前記所定の起動時間を超えることを検出し、
前記制御手段は、
さらに、前記検出手段によって前記起動予測時間が前記所定の起動時間を超えることが検出された場合、前記実行中のソフトウェアの実行優先度を低下させるように制御することを特徴とする請求項２に記載のソフトウェア制御装置。
【請求項４】
前記起動中のソフトウェアが起動完了した後に、前記制御手段によって制御された実行中のソフトウェアを一時停止する制御を解除する、または前記実行中のソフトウェアの実行優先度を低下させる制御を解除する解除手段をさらに備えることを特徴とする請求項１〜３のいずれか一つに記載のソフトウェア制御装置。
【請求項５】
判断手段と、制御手段とを備えるコンピュータが、
前記判断手段により、起動中のソフトウェアと実行中のソフトウェアとが同一の共用リソースにアクセス中であるか否かを判断する判断工程と、
前記制御手段により、前記判断工程によってアクセス中であると判断された場合、前記同一の共用リソースの種別がメモリであれば前記実行中のソフトウェアの実行優先度を低下させるように制御し、前記同一の共用リソースの種別が前記メモリよりアクセス速度が低速なデバイスであれば前記実行中のソフトウェアを一時停止するように制御する制御工程と、
を実行することを特徴とするソフトウェア制御方法。
【請求項６】
コンピュータを、
起動中のソフトウェアと実行中のソフトウェアとが同一の共用リソースにアクセス中であるか否かを判断する判断手段、
前記判断手段によってアクセス中であると判断された場合、前記同一の共用リソースの種別がメモリであれば前記実行中のソフトウェアの実行優先度を低下させるように制御し、前記同一の共用リソースの種別が前記メモリよりアクセス速度が低速なデバイスであれば前記実行中のソフトウェアを一時停止するように制御する制御手段、
として機能させることを特徴とするソフトウェア制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを制御するソフトウェア制御装置、ソフトウェア制御方法、およびソフトウェア制御プログラムに関する。
【背景技術】
【０００２】
従来から、ソフトウェアを高速に起動する技術が開発されてきた。ソフトウェアの起動中は、ユーザの操作を受け付けることができないため、ユーザがフラストレーションを募らせる原因となる。ソフトウェアを高速に起動する技術として、たとえば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の割り当てルールを格納するテーブルを持ち、特定のＣＰＵまたはＣＰＵグループに対して優先的に処理を行わせるという技術が開示されている（たとえば、下記特許文献１を参照。）。【０００３】
また、各ＣＰＵに命令を送る技術として、キャッシュコヒーレンス要求を各ＣＰＵへブロードキャスト送信するという技術が開示されている（たとえば、下記特許文献２を参照。）。また、優先度の高い新規ソフトウェアを起動する場合、特許文献１の技術以外に、再キューイング、スワップ・退避、マイグレートという３つの技術が開示されている。【０００４】
再キューイングとは、新規ソフトウェアの優先度が高い場合、ソフトウェアの割り当てを管理するＯＳ（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）などが、動作していたソフトウェアをソフトウェアの実行キューに戻す技術である。ＣＰＵ資源に空きができた状態で、ＯＳが実行キューに戻したソフトウェアを再び実行する。【０００５】
スワップ・退避とは、新規ソフトウェアの優先度が高い場合、ＯＳが動作していたソフトウェアをストレージに退避する技術である。退避する内容としては、ソフトウェアが確保していたメモリコンテキスト情報、レジスタ情報など、ソフトウェアの動作に必要なあらゆる情報を退避する。再キューイングと同様に、ＣＰＵ資源に空きができた状態で、ＯＳが退避させていたソフトウェアを再び実行する。【０００６】
マイグレートとは、新規ソフトウェアが投入されることにより、ＣＰＵ全体の負荷バランスが変わるため、各ＣＰＵのスケジューラによってＣＰＵに割り当てられているソフトウェアの再配置を行う技術である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−３１６７１０号公報
【特許文献２】特開２００５−１４１６０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来技術において、特許文献１に特許文献２の技術を組み合わせ、特定のＣＰＵの処理を優先的に行うように他のＣＰＵにブロードキャスト送信したとしても、制御する必要のないソフトウェアまで制御を受けてしまうという問題があった。具体的には、新規ソフトウェアの実行優先度を高くさせるため、新規ソフトウェアと実行中のソフトウェアの相関性がなく制御する必要のないソフトウェアも、相対的に実行優先度が低くなってしまうという問題があった。また、再キューイング、スワップ・退避、マイグレートは、処理が重く、組み込み環境等のＣＰＵの処理能力が高くない環境では不適当であるという問題があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、必要なソフトウェアの起動時間を短縮できるソフトウェア制御装置、ソフトウェア制御方法、およびソフトウェア制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示のソフトウェア制御装置は、起動中のソフトウェアと実行中のソフトウェアとが同一の共用リソースにアクセス中であるか否かを判断し、アクセス中であると判断された場合、実行中のソフトウェアを一時停止するように制御することを要件とする。
【発明の効果】
【００１１】
本ソフトウェア制御装置、ソフトウェア制御方法、およびソフトウェア制御プログラムによれば、起動中のソフトウェアが共用リソースにアクセスする割合を相対的に増やし、ソフトウェアの起動時間を短縮できるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】実施の形態にかかるソフトウェア制御装置のハードウェア構成を示すブロック図である。
【図２】ソフトウェア制御装置１００のハードウェア構成の一部とソフトウェア構成を示すブロック図である。
【図３】ソフトウェア制御装置１００の機能的構成を示すブロック図である。
【図４】共用リソースデータベース２０２の記憶内容の一例を示す説明図である。
【図５】競合特性テーブル３０１の記憶内容の一例を示す説明図である。
【図６】起動応答時間テーブル３０２の記憶内容の一例を示す説明図である。
【図７−１】ソフトウェア起動時の制御の様子を示す説明図（その１）である。
【図７−２】ソフトウェア起動時の制御の様子を示す説明図（その２）である。
【図８】共用リソースデータベース２０２の生成処理のフローチャートである。
【図９−１】ソフトウェア制御処理のフローチャート（その１）である。
【図９−２】ソフトウェア制御処理のフローチャート（その２）である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかるソフトウェア制御装置、ソフトウェア制御方法、およびソフトウェア制御プログラムの好適な実施の形態を詳細に説明する。
【００１４】
（ソフトウェア制御装置のハードウェア構成）
図１は、実施の形態にかかるソフトウェア制御装置のハードウェア構成を示すブロック図である。図１において、ソフトウェア制御装置１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を備えている。また、ソフトウェア制御装置１００は、フラッシュＲＯＭ１０４と、フラッシュＲＯＭコントローラ１０５と、フラッシュＲＯＭ１０６と、を備えている。また、ソフトウェア制御装置１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０８と、キーボード１０９と、を備えている。また、各構成部はバス１１０によってそれぞれ接続されている。
【００１５】
ここで、ＣＰＵｓ１０１は、ソフトウェア制御装置１００の全体の制御を司る。ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。ＣＰＵｓ１０１の詳細は、図２にて後述する。前述のように、本実施の形態にかかるハードウェア構成は、複数のコアを搭載するマルチコアプロセッサシステムである。
【００１６】
マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサであるＣＰＵが並列されているプロセッサ群を例にあげて説明する。また、本実施の形態ではマルチコアプロセッサシステムにて説明を行うが、複数のソフトウェアが平行して実行されるマルチプログラミングの機能を持つシングルコアプロセッサであってもよい。
【００１７】
ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。フラッシュＲＯＭ１０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、ソフトウェア制御装置１００は、Ｉ／Ｆ１０８によって新しいＯＳを受信し、フラッシュＲＯＭ１０４に格納されている古いＯＳを受信した新しいＯＳに更新する。
【００１８】
フラッシュＲＯＭコントローラ１０５は、ＣＰＵｓ１０１の制御に従ってフラッシュＲＯＭ１０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０６は、フラッシュＲＯＭコントローラ１０５の制御で書き込まれたデータを記憶する。データの具体例としては、ソフトウェア制御装置１００のユーザがＩ／Ｆ１０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００１９】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２０】
Ｉ／Ｆ１０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１１に接続され、ネットワーク１１１を介して他の装置に接続される。そして、Ｉ／Ｆ１０８は、ネットワーク１１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２１】
キーボード１０９は、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、キーボード１０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２２】
図２は、ソフトウェア制御装置１００のハードウェア構成の一部とソフトウェア構成を示すブロック図である。図２では、後述するソフトウェア構成を説明するために必要なハードウェア構成として、ＣＰＵｓ１０１とメモリ２０１を図示している。本実施の形態にかかるＣＰＵｓ１０１は、複数のＣＰＵとしてＣＰＵ＃０、ＣＰＵ＃１、ＣＰＵ＃２、ＣＰＵ＃３で構成される。ＣＰＵｓ１０１は１つのＣＰＵで構成してもよいし、２つ以上のＣＰＵで構成してもよい。各ＣＰＵとメモリ２０１はバス１１０によってそれぞれ接続されている。メモリ２０１は、ＣＰＵｓ１０１から直接アクセスするアクセス速度が高速な主記憶装置であり、ＲＯＭ１０２とＲＡＭ１０３とフラッシュＲＯＭ１０４に相当する。
【００２３】
各ＣＰＵは、前述のハードウェア構成により、共用リソースデータベース２０２を参照し、後述するソフトウェアＡ〜ソフトウェアＧを実行する。共用リソースデータベース２０２は、ソフトウェアがアクセスする共用リソースの使用情報を記述する。共用リソースとは、ソフトウェアがアクセスするデバイスや、メモリ２０１である。共用リソースデータベース２０２の詳細は、図４にて後述する。
【００２４】
デバイスとはフラッシュＲＯＭ１０６などのアクセス速度が低速な補助記憶装置である。また、図１には図示していないが、その他の記憶装置があればそれらの記憶装置もデバイスに含める。また、Ｉ／Ｆ１０８によってスキャナ、印刷機などの入出力機能を有する装置が存在する場合も、デバイスに含める。ソフトウェア制御装置１００は、Ｉ／Ｆ１０８に接続された装置に搭載されたＲＡＭなどにアクセスする。
【００２５】
各ＣＰＵは、ＯＳの機能であるスケジューラを実行することで、複数のソフトウェアを順次実行する。具体的には、ＣＰＵ＃０は、スケジューラ＃０によってソフトウェアＦを実行している。同様に、ＣＰＵ＃１は、スケジューラ＃１によってソフトウェアＢを実行している。ＣＰＵ＃２は、スケジューラ＃２によってソフトウェアＣとソフトウェアＧを実行している。ＣＰＵ＃３は、スケジューラ＃３によってソフトウェアＤとソフトウェアＥを実行している。
【００２６】
この状態で、新規にソフトウェアＡを実行する場合、ＣＰＵ＃０は、ソフトウェアＡの起動を開始するとともに、ＣＰＵ＃０〜ＣＰＵ＃３に対してソフトウェアＡが起動された旨を示すメッセージをブロードキャスト送信する。
【００２７】
（ソフトウェア制御装置１００の機能的構成）
次に、ソフトウェア制御装置１００の機能的構成について説明する。図３は、ソフトウェア制御装置１００の機能的構成を示すブロック図である。ソフトウェア制御装置１００は、制御指示部３０３と、検出部３０４と、解除指示部３０５と、判断部３０６と、制御部３０７と、解除部３０８と、抽出部３０９と、算出部３１０と、検出部３１１と、を含む構成である。この制御部となる機能（制御指示部３０３〜検出部３１１）は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶装置に記憶されたプログラムをＣＰＵｓ１０１が実行することにより、その機能を実現する。または、Ｉ／Ｆ１０８を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００２８】
また、ソフトウェア制御装置１００は、共用リソースデータベース２０２、競合特性テーブル３０１、起動応答時間テーブル３０２にアクセス可能である。共用リソースデータベース２０２は、共用リソースの使用状況を格納する。共用リソースとは、前述したようにメモリ２０１やデバイスのことである。共用リソースデータベース２０２の詳細は、図４にて後述する。
【００２９】
また、共用リソースデータベース２０２、競合特性テーブル３０１、起動応答時間テーブル３０２は、メモリ２０１内に図示されているが、メモリ２０１に格納されていてもよい。または、メモリ２０１以外の記憶装置として、たとえば、フラッシュＲＯＭ１０６に格納されており、ソフトウェア制御装置１００は、必要となった情報のみをメモリ２０１に転送してもよい。
【００３０】
競合特性テーブル３０１は、任意のソフトウェアどうしの競合状態における性能劣化を示す係数である競合特性σを格納するテーブルである。競合特性テーブル３０１の詳細は、図５にて後述する。起動応答時間テーブル３０２は、各ソフトウェアにおける仕様上のワーストケースの起動時間を格納するテーブルである。起動応答時間テーブル３０２の詳細は、図６にて後述する。
【００３１】
また、図３に示す制御指示部３０３〜解除指示部３０５は、マスタカーネルとなるＣＰＵ＃０にて実行される。同様に、判断部３０６〜検出部３１１は、スレーブカーネルとなるＣＰＵ＃１〜ＣＰＵ＃３で実行されるほか、ＣＰＵ＃０でも実行される。したがって、ＣＰＵ＃０は制御指示部３０３〜検出部３１１の機能を含む。
【００３２】
制御指示部３０３は、実行中のソフトウェアを一時停止するようにスレーブカーネルへデバイス抑止制御要求を送信することで制御指示をする機能を有する。また、制御指示部３０３は、実行中のソフトウェアの実行優先度を低下させるように実行優先度低下制御要求を送信することで制御指示してもよい。また、制御指示部３０３は、検出部３０４によって起動中のソフトウェアが起動を完了していないことが検出され、起動中のソフトウェアがアクセス中の共用リソースが特定の共用リソースであった場合に、実行優先度低下の制御指示をしてもよい。ここでの特定の共用リソースは、メモリ２０１を示す。また、デバイス抑止制御要求と実行優先度低下制御要求には、起動中のソフトウェアがアクセスする共用リソースの識別情報が含まれる。
【００３３】
具体的には、たとえば、ソフトウェア制御装置１００が、制御指示部３０３によって、実行中のソフトウェアを一時停止するようスレーブカーネルに制御指示を通知する。なお、通知されたデータは、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００３４】
検出部３０４は、起動中のソフトウェアが、起動開始から所定の起動時間を経過しても起動を完了していないことを検出する機能を有する。ここでの所定の起動時間とは、起動応答時間テーブル３０２に格納されている仕様の起動時間Ｔとなる。具体的には、たとえば、ソフトウェア制御装置１００は、起動中のソフトウェアの仕様の起動時間Ｔが１［秒］であって、起動開始から１［秒］たっても起動を完了していないソフトウェアを検出する。なお、検出したソフトウェアの情報は、制御指示部３０３へ送信されるほか、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００３５】
解除指示部３０５は、起動中のソフトウェアが起動完了した後に、制御指示部３０３によって制御指示された実行中のソフトウェアに対して制御解除要求を送信することで解除指示する機能を有する。具体的には、たとえば、ソフトウェア制御装置１００は、解除指示部３０５によって、一時停止した実行中のソフトウェアの停止を解除する制御解除要求を送信する。なお、送信した制御解除要求は、解除部３０８に送信されるほか、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００３６】
判断部３０６は、制御指示部３０３によって通知された起動中のソフトウェアの識別情報を用いて、起動中のソフトウェアと実行中のソフトウェアとが同一の共用リソースにアクセス中であるか否かを判断する機能を有する。
【００３７】
具体的には、たとえば、ソフトウェア制御装置１００は、制御指示部３０３によって起動中のソフトウェアによってアクセスされるフラッシュＲＯＭ１０６の識別情報を送信した場合を想定する。この時、実行中のソフトウェアもフラッシュＲＯＭ１０６にアクセスしている場合、ソフトウェア制御装置１００は、判断部３０６によって、同一の共用リソースにアクセス中であると判断する。なお、判断結果は、制御部３０７へ送信されるほか、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００３８】
制御部３０７は、制御指示部３０３からデバイス抑止制御要求を受信し、判断部３０６によってアクセス中であると判断された場合、実行中のソフトウェアを一時停止するように制御する機能を有する。また、制御部３０７は、制御指示部３０３から実行優先度低下制御要求を受信した場合には、実行中のソフトウェアの実行優先度を低下させるよう制御してもよい。また、制御部３０７は、実行優先度低下制御要求を受信し、検出部３１１によって起動中のソフトウェアの起動予測時間が所定の起動時間を超えたことが検出された場合に、実行中のソフトウェアの実行優先度を低下させるように制御してもよい。
【００３９】
具体的には、たとえば、ソフトウェア制御装置１００は、制御指示部３０３からデバイス抑止制御要求を受信し、判断部３０６によってアクセス中であると判断された場合に、実行中のソフトウェアを一時停止するように制御する。なお、一時停止したソフトウェア、または、実行優先度を低下させたソフトウェアの情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４０】
解除部３０８は、起動中のソフトウェアが起動完了したことを示す解除指示部３０５からの制御解除要求を受信した後に、制御部３０７によって制御された実行中のソフトウェアの制御を解除する機能を有する。具体的には、たとえば、ソフトウェア制御装置１００は、解除指示部３０５からの制御解除要求を受信し、一時停止したソフトウェア、または、実行優先度を低下させたソフトウェアの情報に基づいて、制御を解除する。なお、解除したソフトウェアの情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶されてもよい。
【００４１】
抽出部３０９は、起動中のソフトウェアの非競合状態における起動時間と起動中のソフトウェアと実行中のソフトウェアとの競合状態における性能劣化を示す係数を抽出する機能を有する。起動中のソフトウェアの非競合状態における起動時間に関しては、任意のソフトウェアの非競合状態における起動時間を含めて記憶している共用リソースデータベース２０２に格納されている。任意のソフトウェアどうしの競合状態における性能劣化を示す係数に関しては、競合特性テーブル３０１に格納されている。
【００４２】
具体的には、たとえば、ソフトウェア制御装置１００は、起動中のソフトウェアＡについて、共用リソースデータベース２０２から、非競合状態における起動時間ｔを抽出する。続けて、ソフトウェア制御装置１００は、起動中のソフトウェアＡとスレーブカーネル上にて実行中のソフトウェアとの競合状態における性能劣化を示す競合特性σを、競合特性テーブル３０１から抽出する。なお、抽出されたデータは、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４３】
算出部３１０は、抽出部３０９によって抽出された起動時間と抽出部３０９によって抽出された係数に基づいて、起動中のソフトウェアの競合状態における起動予測時間を算出する機能を有する。抽出された起動時間とは、非競合状態における起動時間ｔであり、抽出された係数とは起動中のソフトウェアと実行中のソフトウェアとの競合状態における性能劣化を示す競合特性σである。
【００４４】
具体的には、たとえば、起動時間が１０［ミリ秒］で、抽出された係数が１２０であった場合、ソフトウェア制御装置１００は、起動中のソフトウェアの競合状態における起動予測時間を、起動時間×係数＝１０×１２０＝１．２［秒］と算出する。なお算出されたデータは、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４５】
検出部３１１は、起動中のソフトウェアが、算出部３１０によって算出された競合状態における起動予測時間が所定の起動時間を超えることを検出する機能を有する。所定の起動時間とは、起動応答時間テーブル３０２に格納されている仕様の起動時間Ｔとなる。また、検出部３１１は、検出部３０４によって起動を完了していないことが検出され、制御指示部３０３から制御部３０７に処理が移行してきた際に実行される。
【００４６】
具体的には、たとえば、ソフトウェア制御装置１００は、算出部３１０によって起動中のソフトウェアの競合状態における起動予測時間σｔが１．２［秒］で、仕様の起動時間Ｔが１［秒］であった場合、Ｔ＜σｔとなり、制御部３０７に検出結果を通知する。なお、検出された結果は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４７】
前述したように、各機能部はマスタカーネルとスレーブカーネルにて分担されており、おもに起動中のソフトウェアについて処理を行うのがマスタカーネル、実行中のソフトウェアについて処理を行うのがスレーブカーネルとなっている。ここで、ソフトウェア制御装置１００は、スレーブカーネルにて、起動中のソフトウェアの情報を取得し、すべての機能をスレーブカーネルで行ってもよい。
【００４８】
図４は、共用リソースデータベース２０２の記憶内容の一例を示す説明図である。符号４０１に示す図は、共用リソースデータベース２０２の記憶内容の一例であり、符号４０２で示す図は、共用リソースデータベース２０２の記憶内容をブロック化して表したブロック図である。符号４０３で示す領域では、ソフトウェアの名称と、実行優先度、初期化するデバイス名が記述されている。符号４０４で示す領域では、各スレッドの情報が記述されている。符号４０５で示す領域では、メインスレッドの情報が記述されており、符号４０６で示す領域では、サブスレッドであるＦｕｎｃＡスレッドの情報が記述されている。
【００４９】
次に、符号４０５にて示す領域に存在する各プロパティについて説明する。Ｔａｇプロパティは、対象となるスレッドの名称を示している。Ｃｏｎｔｅｘｔ＿ａｌｌｏｃａｔｅプロパティは、対象となるスレッドによってメモリ２０１から確保されたメモリコンテキストである。確保されたメモリコンテキストは、たとえば、スレッド実行に必要なスタック領域として使用される。スタック領域には、関数の呼び出し情報や、関数のローカル変数の値などが格納される。
【００５０】
ＩＯｐｒｏｆｉｌｅ＿ｗｒｉｔｅ＿ａｃｃｅｓｓプロパティとＩＯｐｒｏｆｉｌｅ＿ｒｅａｄ＿ａｃｃｅｓｓプロパティは、対象となるスレッドがメモリ２０１にアクセスするサイズを示している。ＩＯｐｒｏｆｉｌｅ＿ｗｒｉｔｅ＿ａｃｃｅｓｓプロパティは対象となるスレッドが書き込みを行ったサイズ、ＩＯｐｒｏｆｉｌｅ＿ｒｅａｄ＿ａｃｃｅｓｓプロパティは対象となるスレッドが読み込みを行うサイズを示している。
【００５１】
ｅｌａｐｓｅ＿ｔｉｍｅプロパティは、対象となるスレッドが起動開始時点からＣｏｎｔｅｘｔ＿ａｌｌｏｃａｔｅプロパティで示したメモリコンテキストの確保時刻を示している。ｅｌａｐｓｅ＿ｔｉｍｅプロパティで示した値が、非競合状態における起動時間ｔとなる。Ｓｙｓ＿ｒｅｓｏｕｒｃｅプロパティは、対象となるスレッドが呼び出したシステムコールを示している。
【００５２】
符号４０２で示すブロック図は、共用リソースデータベース２０２の記憶内容をブロック化して表したブロック図である。ソフトウェアＡは、デバイスＡとデバイスＢにアクセスし、メモリ２０１に対して１２８［キロバイト］のメモリコンテキスト４０７を確保し、１０２４［キロバイト］の書き出しと、５１２［キロバイト］の読み込みを行う。ソフトウェアＡ子スレッドは、メモリ２０１に対して２５６［キロバイト］のメモリコンテキスト４０８を確保し、１２８［キロバイト］の書き出しと、１２８［キロバイト］の読み込みを行う。
【００５３】
デバイスＡ、デバイスＢの具体例としては、フラッシュＲＯＭ１０６である。また、図１には図示していないが、Ｉ／Ｆ１０８によって外部記憶装置に接続している場合は、その装置も含まれる。また、記憶装置以外にも、たとえば、ソフトウェア制御装置１００が印刷装置に接続されており、あるスレッドが印刷を行う場合、印刷装置内部にあるＲＡＭに書き込む結果となるため、記憶装置に含める。
【００５４】
図５は、競合特性テーブル３０１の記憶内容の一例を示す説明図である。競合特性テーブル３０１は、ソフトウェアどうしの競合状態における性能劣化を示す係数である競合特性σを記憶する。競合特性テーブル３０１の競合特性σは、符号５０１で示す実行中のソフトウェアに対して、符号５０２で示すソフトウェアが起動した場合の性能劣化の数値を示している。
【００５５】
競合特性σは、非競合状態における処理時間を１とした時の、競合状態における処理時間となり、値が大きいほどより性能劣化することを示している。競合特性σは、ソフトウェア制御装置１００をシミュレートできる装置にて、ソフトウェアごとに繰り返し実行することで求められる。また、ソフトウェア制御装置１００にて競合特性σを求められる環境があれば、ソフトウェア制御装置１００にて競合特性を求めてもよい。
【００５６】
具体的には、たとえば、ソフトウェアＡをＷｅｂブラウザ、ソフトウェアＢをメールソフトウェア、ソフトウェアＤを電話帳呼び出しであると想定する。ここで、ソフトウェア制御装置１００が、ソフトウェアＡを実行中にソフトウェアＢを起動した場合の競合特性σは、図６で示すように“１２０”となる。同様に、ソフトウェア制御装置１００が、ソフトウェアＡを実行中にソフトウェアＤを起動した場合の競合特性σは、“１．１”となる。
【００５７】
前述のように競合特性σが大きく異なる理由として、Ｗｅｂブラウザとメールソフトウェアは、Ｉ／Ｆ１０８を通して、たとえば、同一のＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）にアクセスしネットワーク１１１から情報を取得する。結果、両ソフトウェアは、同一のデバイスにアクセスすることになり、競合を起こしやすい。さらに両ソフトウェアは、取得されたデータをＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）に従って処理をする。したがって、両ソフトウェアは、ＴＣＰ／ＩＰを処理するシステムリソースを使用することになり、競合を起こしやすい。
【００５８】
それに対しＷｅｂブラウザと電話帳呼び出しは、競合を起こす可能性として、メモリ２０１へのアクセスのみであり、競合を起こしにくい。以上より、ソフトウェアどうしが使用する共用リソースによって競合特性σは大きく異なることになる。
【００５９】
また、ソフトウェアＡのように、ソフトウェアの同時起動を仕様上許す場合、シミュレーション装置は、図５で示すように競合特性σを計測する。同様に、ソフトウェアＢ、ソフトウェアＤのように、ソフトウェアの同時起動を仕様上許さないのであれば、シミュレーション装置は、特に計測しなくてもよい。
【００６０】
また、計測した結果、ほとんどのソフトウェアどうしの競合特性σが等しい値になる場合、ソフトウェア制御装置１００は、その項目を用意してもよい。たとえば、符号５０３、符号５０４で示す“デフォルト”を用意する。そして、ソフトウェア制御装置１００が、ソフトウェアＡを実行中に、符号５０２で示す列に記載のないソフトウェアを起動した場合を想定する。この場合の競合特性σは、符号５０４で示す“デフォルト”列から、符号５０５で示すセルを参照し、“１．１”となる。
【００６１】
図６は、起動応答時間テーブル３０２の記憶内容の一例を示す説明図である。起動応答時間テーブル３０２は、ソフトウェア名称と、仕様の起動時間Ｔという２つのフィールドで構成される。ソフトウェア名称フィールドは、対象となるソフトウェアの名称を格納する。仕様の起動時間Ｔフィールドは、各ソフトウェアにおける仕様上のワーストケースの起動時間を格納する。
【００６２】
具体的には、図６にて示すようにソフトウェアＡの起動時間が３秒、ソフトウェアＤの起動時間が０．５秒といったように設定をする。すべてのソフトウェアについて設定を行ってもよいが、ほとんどのソフトウェアの起動時間が等しいのであれば、その項目を用意してもよい。具体的な設定方法としては、ソフトウェア制御装置１００は、符号６０１で示す“デフォルト”行を用意し、起動時間の設定がされていないすべてのソフトウェアの起動時間とする。
【００６３】
設定方法として、たとえば、ソフトウェアＡがＷｅｂブラウザである場合を想定すると、Ｗｅｂブラウザは一般的にプログラム量が多いソフトウェアであり、起動開始を行う頻度が少ないため、デフォルトの値である１秒より長い３秒に設定する。同様に、ソフトウェアＤが電話帳呼び出しである場合を想定すると、電話帳呼び出しは頻繁に呼び出され、ユーザが待たされる時間を短くしたいため、デフォルトの値である１秒より短い０．５秒に設定する。
【００６４】
図７−１、図７−２は、ソフトウェア起動時の制御の様子を示す説明図である。図７−１での符号７０１で示した状態は、ソフトウェア制御装置１００が、新規に起動するソフトウェアとしてソフトウェアＡを起動する直前の状態である。ソフトウェア制御装置１００は、メッセージ７０７にて、各ＣＰＵの負荷情報を集約し、最適なＣＰＵへの負荷分散割り当てを行う。本実施の形態にかかるソフトウェア制御装置１００は、ソフトウェアＡのメインスレッドをＣＰＵ＃０に割り当て、ソフトウェアＡから起動される子スレッドをＣＰＵ＃１に割り当てることとする。
【００６５】
次に、図７−１での符号７０２で示した状態は、ソフトウェア制御装置１００が、ソフトウェアＡのメインスレッドをＣＰＵ＃０に割り当てた状態である。割り当て後、ソフトウェア制御装置１００は、ソフトウェアＡがデバイスＡとデバイスＢにアクセスするため、デバイスＡとデバイスＢにアクセスする旨のメッセージ７０８をＣＰＵ＃０〜ＣＰＵ＃３へブロードキャスト送信する。
【００６６】
ＣＰＵ＃０〜ＣＰＵ＃３はメッセージ７０８を受信する。ＣＰＵ＃０とＣＰＵ＃１は、デバイスＡとデバイスＢにアクセスしているソフトウェアが存在しないため、特に処理を行わない。ＣＰＵ＃２は、アクセス経路７０９で示した通り、ソフトウェアＣによってデバイスＡにアクセスしているため、ソフトウェアＣの実行を一時停止する。ＣＰＵ＃３も同様に、アクセス経路７１０で示した通り、ソフトウェアＤによってデバイスＢにアクセスしているため、ソフトウェアＤの実行を一時停止する。
【００６７】
図７−１での符号７０３で示した状態は、ソフトウェア制御装置１００が、デバイスにアクセスするソフトウェアの一時停止を行った状態である。続けて、ソフトウェア制御装置１００は、ソフトウェアＡがシステムリソースまたはライブラリリソースにアクセスするため、前述したリソースにアクセスする旨のメッセージ７１１をＣＰＵ＃０〜ＣＰＵ＃３へブロードキャスト送信する。
【００６８】
ＣＰＵ＃０〜ＣＰＵ＃３はメッセージ７１１を受信する。ＣＰＵ＃０は、アクセス経路７１２で示した通り、ソフトウェアＦによってシステムリソースにアクセスしているため、ソフトウェアＦの実行優先度を低下させる。ＣＰＵ＃１とＣＰＵ＃２は、システムリソースまたはライブラリリソースにアクセスしているソフトウェアが存在しないため、特に処理を行わない。ＣＰＵ＃３は、アクセス経路７１３で示した通り、ソフトウェアＥによってシステムリソースにアクセスしているため、ソフトウェアＥの実行優先度を低下させる。
【００６９】
なお、デバイスが競合せず、システムリソースが競合する具体例として、たとえば、ソフトウェアＡがＷｅｂブラウザで、ソフトウェアＥがブックマーク編集ソフトウェアである場合を想定する。また、ブックマークのファイル形式がｘｍｌ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）形式であることを想定する。
【００７０】
このとき、ソフトウェアＥはネットワーク１１１を使用しないため、デバイスの競合は発生しない。しかし、ソフトウェアＥはブックマークを読み取るためにｘｍｌをパースする必要があり、ｘｍｌパースを行えるシステムリソースにアクセスする。同様にソフトウェアＡも、ｘｍｌ形式のＷｅｂページを読み込むことがありえるため、ｘｍｌパースを行えるシステムリソースにアクセスする。結果、ソフトウェアＡとソフトウェアＥは、デバイスでは競合しないが、システムリソースにて競合を起こす。
【００７１】
図７−２での符号７０４で示した状態は、ソフトウェア制御装置１００が、システムリソースまたはライブラリリソースにアクセスするソフトウェアの実行優先度を低下させた状態である。続けて、ソフトウェア制御装置１００は、ソフトウェアＡがメモリ２０１にアクセスするため、メモリ２０１にアクセスする旨のメッセージ７１４をＣＰＵ＃０〜ＣＰＵ＃３へブロードキャスト送信する。
【００７２】
ＣＰＵ＃０〜ＣＰＵ＃３はメッセージ７１４を受信する。ＣＰＵ＃０は、アクセス経路７１５で示した通り、ソフトウェアＦによってメモリ２０１にアクセスしているため、ソフトウェアＦの実行優先度を低下させる。ＣＰＵ＃１とＣＰＵ＃２は、メモリ２０１にアクセスしているソフトウェアが存在しないため、特に処理を行わない。ＣＰＵ＃３は、アクセス経路７１６で示した通り、ソフトウェアＥによってメモリ２０１にアクセスしているため、ソフトウェアＥの実行優先度を低下させる。
【００７３】
図７−２での符号７０５で示した状態は、ソフトウェア制御装置１００が、メモリ２０１にアクセスするソフトウェアの実行優先度を低下させた後、ソフトウェアＡの初期化処理を行い、子スレッドを起動した状態である。ソフトウェアＡの処理としては、アクセス経路７１７で示すデバイスＡ、デバイスＢへの初期化処理と、メモリコンテキスト４０７の確保である。また、ソフトウェアＡによって、ソフトウェアＡ子スレッドが起動され、ＣＰＵ＃１に割り当てられる。ＣＰＵ＃０は、ソフトウェアＡ子スレッドが起動される旨のメッセージ７１８をＣＰＵ＃０〜ＣＰＵ＃３へブロードキャスト送信する。
【００７４】
ＣＰＵ＃０〜ＣＰＵ＃３はメッセージ７１８を受信する。ＣＰＵ＃０とＣＰＵ＃１とＣＰＵ＃３は、ソフトウェアＡ子スレッドによってアクセスされる共用リソースにアクセスしているソフトウェアが存在しないため、特に処理を行わない。ＣＰＵ＃２は、アクセス経路７１９で示した通り、ソフトウェアＧによってメモリ２０１にアクセスしているため、ソフトウェアＧの実行優先度を低下させる。また、ソフトウェアＡ子スレッドは、メモリコンテキスト４０８を確保する。
【００７５】
ここまでで、ソフトウェアＡが起動するまでは、ソフトウェアＡが最優先で実行されることになる。ソフトウェアＢのように、ソフトウェアＡによってアクセスされる共用リソースへアクセスせず、競合しないソフトウェアについては、一時停止もされないし、実行優先度も低下させられることもなく、通常通りに実行される。
【００７６】
図７−２での符号７０６で示した状態は、ソフトウェア制御装置１００がソフトウェアＡの起動を完了した状態を示している。起動を完了した時点は、ソフトウェアＡによるデバイスの初期化とメモリコンテキストの確保が終了した時点である。ソフトウェアＡの起動を完了すると、ＣＰＵ＃０は、ソフトウェアＡの起動を完了した旨のメッセージ７２０をブロードキャスト送信する。
【００７７】
ＣＰＵ＃０〜ＣＰＵ＃３はメッセージ７２０を受信する。各ＣＰＵは、一時停止中のソフトウェアと、実行優先度を低下させられたソフトウェアに対し、制御を解除する。具体的には、ＣＰＵ＃０は、ソフトウェアＦの実行優先度を初期値に戻させる。ＣＰＵ＃１では、一時停止中のソフトウェア、または、実行優先度を低下させられたソフトウェアが存在しないため、何も処理をしない。ＣＰＵ＃２は、ソフトウェアＣの一時停止を解除し、ソフトウェアＧの実行優先度を初期値に戻させる。ＣＰＵ＃３は、ソフトウェアＤの一時停止を解除し、ソフトウェアＥの実行優先度を初期値に戻させる。
【００７８】
図８は、共用リソースデータベース２０２の生成処理のフローチャートである。本実施の形態にかかる生成処理は、ソフトウェア制御装置１００にて実行されることとして説明を行うが、ソフトウェア制御装置１００をシミュレートできる装置にて実行してもよい。生成処理の準備として、生成処理の対象となるソフトウェアは、プロファイルタグ付きの実行コードにてコンパイルされていることとする。
【００７９】
ソフトウェア制御装置１００は、試験対象となるソフトウェアを実行し、実行ログを取得する（ステップＳ８０１）。以降の処理は、実行ログを先頭から参照して処理を行う。したがって、以降の処理を行う装置は、実行ログを参照するためのデータ入出力が行える、汎用的な演算装置であってもよい。次にソフトウェア制御装置１００は、実行ログを参照し、デバイスを起動していたかを確認する（ステップＳ８０２）。デバイスを起動していた場合（ステップＳ８０２：Ｙｅｓ）、ソフトウェア制御装置１００は、初期化デバイス情報を取得し（ステップＳ８０８）、共用リソースデータベース２０２に格納する。格納される箇所は、符号４０３で示した領域のＵｓｅＤｅｖｉｃｅプロパティである。
【００８０】
格納後、ソフトウェア制御装置１００は、ＵＩにかかわるシステムコールを利用していたかを確認する（ステップＳ８１０）。利用していた場合（ステップＳ８１０：Ｙｅｓ）、ソフトウェア制御装置１００は、処理を終了する。また、実行ログを最後まで読み取り終えた場合にも、ソフトウェア制御装置１００は処理を終了する。または、実行ログ上にて、割り込みハンドラによるユーザ入力待ちである状態に遷移したことが判断できれば、ソフトウェア制御装置１００はその時点でも終了してもよい。
【００８１】
ＵＩにかかわるシステムコールとは、ディスプレイ１０７上でのユーザによるマウス入力情報や、キーボード１０９によるキーボード入力情報を取得するシステムコールである。ステップＳ８１０の処理では、システムコールが呼ばれた場合に試験対象となるソフトウェアの起動を完了し、ユーザからの指示に対処する状態に遷移していることを示しているため、ソフトウェアの起動を完了したと判断している。ＵＩにかかわるシステムコールを利用していない場合（ステップＳ８１０：Ｎｏ）、ソフトウェア制御装置１００は、再びステップＳ８０２の処理に移行する。
【００８２】
デバイスを起動していない場合（ステップＳ８０２：Ｎｏ）、ソフトウェア制御装置１００は、スレッド処理であったかを確認する（ステップＳ８０３）。ステップＳ８０３の処理により、ソフトウェア制御装置１００は、スレッドごとに処理を行うことになる。スレッド処理でない場合（ステップＳ８０３：Ｎｏ）、ソフトウェア制御装置１００は、ステップＳ８０２の処理に移行する。スレッド処理である場合（ステップＳ８０３：Ｙｅｓ）、ソフトウェア制御装置１００は続けて、システムリソースを利用していたかを確認する（ステップＳ８０４）。
【００８３】
ステップＳ８０４の処理は、システムリソースの代わりにライブラリリソースを使用していたとしても、ステップＳ８０４：Ｙｅｓとして処理をしてもよい。図８、図９−１、図９−２で示すフローチャートでは、ライブラリリソースもシステムリソースの一部とする。システムリソースを利用していた場合（ステップＳ８０４：Ｙｅｓ）、ソフトウェア制御装置１００は、システムリソース利用情報を取得し（ステップＳ８０９）、共用リソースデータベース２０２に格納する。設定される箇所は、図４で示したＳｙｓ＿ｒｅｓｏｕｒｃｅプロパティとなる。その後、ソフトウェア制御装置１００は、ステップＳ８１０の処理に移行する。
【００８４】
システムリソースを利用していない場合（ステップＳ８０４：Ｎｏ）、ソフトウェア制御装置１００は、メモリコンテキストを初期化していたかを確認する（ステップＳ８０５）。メモリコンテキストを初期化していた場合（ステップＳ８０５：Ｙｅｓ）、ソフトウェア制御装置１００は、メモリコンテキスト初期化時刻情報ｔを取得し（ステップＳ８０６）、共用リソースデータベース２０２に格納する。設定される箇所は、図４で示したｅｌａｐｓｅ＿ｔｉｍｅプロパティとなる。その後、ソフトウェア制御装置１００は、ステップＳ８１０の処理に移行する。
【００８５】
メモリコンテキストを初期化していない場合（ステップＳ８０５：Ｎｏ）、ソフトウェア制御装置１００は、メモリ２０１へのアクセスであるＩ／Ｏ情報を取得し（ステップＳ８０７）、共用リソースデータベース２０２に格納する。設定される箇所は、図４で示したＩＯｐｒｏｆｉｌｅ＿ｗｒｉｔｅ＿ａｃｃｅｓｓプロパティとＩＯｐｒｏｆｉｌｅ＿ｒｅａｄ＿ａｃｃｅｓｓプロパティとなる。
【００８６】
その後、ソフトウェア制御装置１００は、ステップＳ８１０の処理に移行する。ステップＳ８１０の終了後、ソフトウェア制御装置１００は、すべてのスレッドのｅｌａｐｓｅ＿ｔｉｍｅプロパティから、最大の値をメインスレッドのｅｌａｐｓｅ＿ｔｉｍｅプロパティに設定する。メインスレッドのｅｌａｐｓｅ＿ｔｉｍｅがソフトウェアの非競合状態における起動時間ｔとなる。
【００８７】
図９−１、図９−２は、ソフトウェア制御処理のフローチャートである。図９−１は、マスタカーネルにて、メッセージ送信を行う処理を示している。本実施の形態では、マスタカーネルはＣＰＵ＃０とする。ＣＰＵ＃０は、スケジューラを起動する（ステップＳ９０１）。具体的には、たとえば、ＣＰＵ＃０はスケジューラ＃０を起動する。また、ＣＰＵ＃０は、ＣＰＵ＃１〜ＣＰＵ＃３からメッセージを受信し、ＣＰＵの負荷情報を集約する。
【００８８】
続けて、ＣＰＵ＃０は、集約された負荷情報を基に、新規ソフトウェアの割り当てを行うＣＰＵを確定する（ステップＳ９０２）。確定されたＣＰＵは、新規ソフトウェアに対して起動を開始する（ステップＳ９０３）とともに、ＣＰＵ＃０は、共用リソースデータベース２０２の新規ソフトウェアに関するレコードを読み込む（ステップＳ９０４）。
【００８９】
読み込み後、ＣＰＵ＃０は、共用リソースデータベース２０２を参照して、新規ソフトウェアが起動するデバイスが存在するかを確認する（ステップＳ９０５）。存在する場合（ステップＳ９０５：Ｙｅｓ）、ＣＰＵ＃０は、デバイス抑止制御要求をＣＰＵ＃０〜ＣＰＵ＃３に対してブロードキャスト送信する（ステップＳ９０６）。起動デバイスが存在しない場合（ステップＳ９０５：Ｎｏ）、または、ステップＳ９０６の処理後、ＣＰＵ＃０は、新規ソフトウェアが起動を完了したかを確認する（ステップＳ９０７）。
【００９０】
起動が完了していない場合（ステップＳ９０７：Ｎｏ）、ＣＰＵ＃０は続けて、新規ソフトウェアの起動開始から仕様の起動時間Ｔを経過したかを確認する（ステップＳ９０８）。経過していない場合（ステップＳ９０８：Ｎｏ）、ＣＰＵ＃０は、一定時間待機し（ステップＳ９０９）、ステップＳ９０７の処理に移行する。
【００９１】
経過している場合（ステップＳ９０８：Ｙｅｓ）、ＣＰＵ＃０は続けて、起動中のソフトウェアがシステムリソース、またはメモリ２０１にアクセスするかを確認する（ステップＳ９１０）。システムリソース、またはメモリ２０１にアクセスする場合（ステップＳ９１０：Ｙｅｓ）、ＣＰＵ＃０は、実行優先度低下制御要求をＣＰＵ＃０〜ＣＰＵ＃３に対してブロードキャスト送信する（ステップＳ９１１）。
【００９２】
また、実行優先度低下制御要求には、起動中のソフトウェアの情報か、または、仕様の起動時間Ｔと非競合状態における起動時間ｔかが含まれる。なお、一般的なソフトウェア、特にアプリケーションソフトウェアなどのソフトウェアは、システムリソースまたはメモリ２０１にアクセスすることが一般的である。したがって、ソフトウェア制御装置１００は、ステップＳ９１０の処理を常にＹｅｓとして、ステップＳ９１０の処理を省くことにより処理を簡略化してもよい。
【００９３】
ブロードキャスト送信後、または、システムリソース、またはメモリ２０１を利用しない場合（ステップＳ９１０：Ｎｏ）、ＣＰＵ＃０は再び、新規ソフトウェアが起動を完了したかを確認する（ステップＳ９１２）。起動を完了していない場合（ステップＳ９１２：Ｎｏ）、ＣＰＵ＃０は、一定時間待機し（ステップＳ９１３）、再度ステップＳ９１２の処理に移行する。新規ソフトウェアが起動を完了した場合（ステップＳ９０７：Ｙｅｓ、ステップＳ９１２：Ｙｅｓ）、ＣＰＵ＃０は、制御解除要求をＣＰＵ＃０〜ＣＰＵ＃３に対してブロードキャスト送信する（ステップＳ９１４）。
【００９４】
図９−２は、メッセージ受信処理を示している。メッセージ受信処理は、メッセージを受信したスレーブカーネルとなるすべてのＣＰＵ、本実施の形態ではＣＰＵ＃０〜ＣＰＵ＃３にて実行される。下記記述では、実行主体をＣＰＵ＃１として説明を行う。
【００９５】
ＣＰＵ＃１は、マスタカーネルからメッセージを受信したかを確認する（ステップＳ９１５）。メッセージは、ステップＳ９０６、ステップＳ９１１、ステップＳ９１４にて、マスタカーネルより送信されたメッセージである。メッセージを受信していない場合（ステップＳ９１５：Ｎｏ）、ＣＰＵ＃１は、一定時間待機をし（ステップＳ９１６）、再びステップＳ９１５の処理に移行する。
【００９６】
メッセージを受信した場合（ステップＳ９１５：Ｙｅｓ）、ＣＰＵ＃１は、デバイス抑止制御要求を受信したかを確認する（ステップＳ９１７）。デバイス抑止制御要求を受信した場合（ステップＳ９１７：Ｙｅｓ）、ＣＰＵ＃１は、デバイスにアクセスするソフトウェアを一時停止するように制御する（ステップＳ９１８）。
【００９７】
デバイス抑止制御要求を受信していない場合（ステップＳ９１７：Ｎｏ）、ＣＰＵ＃１は続けて、実行優先度低下制御要求を受信したかを確認する（ステップＳ９１９）。受信していた場合（ステップＳ９１９：Ｙｅｓ）、ＣＰＵ＃１は、システムリソース、またはメモリ２０１にアクセスするソフトウェアを取得する（ステップＳ９２０）。実行優先度低下制御要求のメッセージの中には、起動中のソフトウェアの情報か、または、仕様の起動時間Ｔと非競合状態における起動時間ｔかが含まれてもよい。起動中のソフトウェアの情報であれば、ＣＰＵ＃１は、起動中のソフトウェアの情報に基づいて、仕様の起動時間Ｔと非競合状態における起動時間ｔをそれぞれ取得する。
【００９８】
取得後、ＣＰＵ＃１は、新規ソフトウェアと取得したソフトウェアとの競合特性σを、競合特性テーブル３０１より取得する（ステップＳ９２１）。取得後、ＣＰＵ＃１は、仕様の起動時間Ｔが競合状態における起動予測時間σｔより小さいかを確認する（ステップＳ９２２）。小さい場合（ステップＳ９２２：Ｙｅｓ）、ＣＰＵ＃１は、取得したソフトウェアの実行優先度を低下させるように制御する（ステップＳ９２３）。
【００９９】
なお、ステップＳ９２２の処理では、Ｔとσｔを用いて判断を行ったが、共用リソースデータベース２０２にある、他のプロパティを使用して判断を行ってもよい。たとえば、ソフトウェア制御装置１００は、ＩＯｐｒｏｆｉｌｅ＿ｗｒｉｔｅ＿ａｃｃｅｓｓプロパティとＩＯｐｒｏｆｉｌｅ＿ｒｅａｄ＿ａｃｃｅｓｓプロパティの合計値を求める。続けて、ソフトウェア制御装置１００は、合計値と非競合状態における起動時間ｔで除法を行うことで、メモリ２０１に対するアクセス速度を求めることができる。ソフトウェア制御装置１００は、取得したアクセス速度と、スレーブカーネルの現在のメモリアクセス速度を比較し、取得したアクセス速度が大きい場合、スレーブカーネルにて競合が起きているとし、実行優先度を低下させるよう制御してもよい。
【０１００】
ステップＳ９２３の処理後、または、Ｔがσｔ以上の場合（ステップＳ９２２：Ｎｏ）、ＣＰＵ＃１は、取得したソフトウェアがシステムリソース、またはメモリ２０１にアクセスする末尾のソフトウェアかを確認する（ステップＳ９２４）。末尾のソフトウェアでない場合（ステップＳ９２４：Ｎｏ）、ＣＰＵ＃１は、システムリソース、またはメモリ２０１にアクセスする次のソフトウェアを取得し（ステップＳ９２５）、ステップＳ９２１の処理へ移行する。末尾のソフトウェアである場合（ステップＳ９２４：Ｙｅｓ）、ＣＰＵ＃１は、ステップＳ９１５の処理に移行する。
【０１０１】
実行優先度低下制御要求を受信していない場合（ステップＳ９１９：Ｎｏ）、制御解除要求を受信したことになるため、ＣＰＵ＃１は、一時停止したソフトウェア、また、実行優先度を低下させたソフトウェアの制御を解除する（ステップＳ９２６）。解除後、ＣＰＵ＃１は、ステップＳ９１５の処理に移行する。
【０１０２】
以上説明したように、ソフトウェア制御装置、ソフトウェア制御方法、およびソフトウェア制御プログラムによれば、起動中のソフトウェアによってアクセスされる共用リソースにアクセス中であるソフトウェアを一定期間停止する。これにより、起動中のソフトウェアが共用リソースにアクセスする割合を増やし、起動中のソフトウェアの起動時間を短縮することができる。
【０１０３】
また、ソフトウェア制御装置は、共用リソースにアクセス中である実行中のソフトウェアの実行優先度を低下させてもよい。これにより、起動中のソフトウェアの起動時間を短縮することができ、実行中のソフトウェアも処理を行うことができる。
【０１０４】
また、ソフトウェア制御装置は、起動中のソフトウェアが起動開始から所定の起動時間を経過しても起動を完了していないことを検出する。続けて、起動中のソフトウェアと実行中のソフトウェアがアクセス中の同一の共用リソースが特定の共用リソースであった場合に、実行中のソフトウェアの実行優先度を低下させるように制御してもよい。これにより、起動中のソフトウェアの起動時間を短縮することができ、また、より競合特性の小さいソフトウェアを所定の起動時間後に制御することになるため、競合への影響の少ないソフトウェアに関しては、そのまま処理を続けさせることができる。
【０１０５】
また、ソフトウェア制御装置は、実行中のソフトウェアと起動中のソフトウェアの競合状態の起動予測時間を算出し、所定の起動時間を超えた場合に、実行中のソフトウェアの実行優先度を低下させるように制御してもよい。これにより、起動中のソフトウェアの起動時間を短縮することができる。また、より競合特性の小さいソフトウェアの中から、起動中のソフトウェアに大きく影響を与えるソフトウェアのみ制御することになるため、大きく影響を与えないソフトウェアに関しては、そのまま処理を続けさせることができる。
【０１０６】
また、携帯端末ではディスプレイの表示領域が狭く、たとえば、３２０×２４０ピクセルであるＱＶＧＡ（Ｑｕａｒｔｅｒ  Ｖｉｄｅｏ  Ｇｒａｐｈｉｃｓ  Ａｒｒａｙ）という構成の場合もある。このように狭い画面では、新しいソフトウェアが起動すると今まで実行されていたソフトウェアはバックグラウンドとなり、すべて隠れてしまうことがある。すべて隠れてしまったソフトウェアはユーザから見えなくなるため処理量を減らし、その分起動中のソフトウェアに処理能力を回すことができる。
【０１０７】
具体的には、たとえば、動画再生ソフトウェアを起動中に、メールソフトウェアが起動した場合を想定する。動画再生ソフトウェアはバックグラウンドになり、処理量を減らした結果、動画がスムーズに再生できずコマ落ちとなるが、ユーザから見えないため問題ない。ソフトウェア制御装置は、動画再生ソフトウェアの処理量を減らした分、メールソフトウェアの起動に処理能力を回すことができ、メールソフトウェアの起動を高速に行うことができる。
【０１０８】
なお、本実施の形態で説明したソフトウェア制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ソフトウェア制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ソフトウェア制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１０９】
２０１  メモリ
２０２  共用リソースデータベース
３０１  競合特性テーブル
３０２  起動応答時間テーブル
３０３  制御指示部
３０４  検出部
３０５  解除指示部
３０６  判断部
３０７  制御部
３０８  解除部
３０９  抽出部
３１０  算出部
３１１  検出部
【図１】
0005590114.tif 000002
【図２】
0005590114.tif 000003
【図３】
0005590114.tif 000004
【図４】
0005590114.tif 000005
【図５】
0005590114.tif 000006
【図６】
0005590114.tif 000007
【図７−１】
0005590114.tif 000008
【図７−２】
0005590114.tif 000009
【図８】
0005590114.tif 000010
【図９−１】
0005590114.tif 000011
【図９−２】
0005590114.tif 000012