(57)【特許請求の範囲】
【請求項１】
複数の常駐プログラムを含む複数のプログラムを実行するプログラム実行部と、
前記複数の常駐プログラムを起動させる順番を制御する常駐プログラム起動制御部とを備え、
前記プログラム実行部は、システム起動時に、前記複数の常駐プログラムを起動させる順番を規定する情報である起動順序定義に従って、前記複数の常駐プログラムを順次起動させ、
前記常駐プログラム起動制御部は、前記複数の常駐プログラムの起動によってリソース使用量が特定の値を超える場合、次回のシステム起動時における前記起動順序定義を今回のシステム起動時に用いた前記起動順序定義から変更する
ことを特徴とするプログラム実行システム。
【請求項２】
前記プログラム実行部は、リソース使用量が前記特定の値を超える原因となる常駐プログラムを常駐させない
請求項１記載のプログラム実行システム。
【請求項３】
前記起動順序定義における常駐プログラムの順番はループ状に規定されており、
前記常駐プログラム起動制御部は、最初に起動させる常駐プログラムを変更することによって、前記起動順序定義を変更する
請求項１記載のプログラム実行システム。
【請求項４】
前記常駐プログラム起動制御部は、リソース使用量が前記特定の値を超える原因となる常駐プログラムが次回のシステム起動時に最初に起動するように、前記起動順序定義を変更する
請求項３記載のプログラム実行システム。
【請求項５】
前記プログラム実行部は、リソース使用量が前記特定の値を超える原因となる常駐プログラムの順番を飛ばして次の常駐プログラムを常駐させる動作を、前記起動順序定義に従って繰り返し行う
請求項１記載のプログラム実行システム。
【請求項６】
前記起動順序定義における常駐プログラムの順番はループ状に規定されており、
前記常駐プログラム起動制御部は、リソース使用量が前記特定の値を超える１回目の原因となる常駐プログラムが次回のシステム起動時に最初に起動するように、前記起動順序定義を変更する
請求項５記載のプログラム実行システム。
【請求項７】
前記常駐プログラム起動制御部は、前記起動順序定義を変更する際、次回のシステム起動時における前記起動順序定義における常駐プログラムの順番をランダムに決定する
請求項１記載のプログラム実行システム。
【請求項８】
前記常駐プログラム起動制御部は、新たな常駐プログラムが導入されると、前記起動順序定義における常駐プログラムの順番の任意の位置に前記新たな常駐プログラムを追加する
請求項１記載のプログラム実行システム。
【請求項９】
前記常駐プログラム起動制御部は、新たな常駐プログラムを前記起動順序定義に追加するとき、前記新たな常駐プログラムおよびそれを追加する位置の前後の常駐プログラムのリソース使用量の平均値が、前記起動順序定義に含まれる全ての常駐プログラムのリソース使用量の平均値に最も近くなる位置に追加する
請求項８記載のプログラム実行システム。
【請求項１０】
前記常駐プログラム起動制御部は、前記起動順序定義を複数管理し、予め定められた条件に従って、使用する前記起動順序定義を切り替える
請求項１記載のプログラム実行システム。
【請求項１１】
複数の常駐プログラムのそれぞれには優先度が設定されており、
前記常駐プログラム起動制御部は、前記起動順序定義を優先度ごとに複数管理し、
前記プログラム実行部は、システム起動時に、各常駐プログラムをその優先度に対応する前記起動順序定義に従って順次起動させる
請求項１記載のプログラム実行システム。
【請求項１２】
前記プログラム実行部は、各優先度の常駐プログラムが少なくとも１つずつは実行可能なように前記複数の常駐プログラムを起動させる順番を決定する
請求項１１記載のプログラム実行システム。
【請求項１３】
複数の常駐プログラムのそれぞれに設定される優先度は、予め定められた条件に従って変更される
請求項１１記載のプログラム実行システム。
【請求項１４】
システム起動後において、前記プログラム実行部は、常駐させる常駐プログラムを前記起動順序定義に従って一定周期で変更する
請求項１記載のプログラム実行システム。
【請求項１５】
前記起動順序定義における常駐プログラムの順番はループ状に規定されており、
前記常駐プログラム起動制御部は、システム起動後に常駐プログラムを起動した場合、最後に常駐した常駐プログラムの次の常駐プログラムが次回のシステム起動時に最初に起動するように、前記起動順序定義を変更する
請求項１４記載のプログラム実行システム。
【請求項１６】
プログラム実行システムのシステム起動時に、プログラム実行部が、複数の常駐プログラムを起動させる順番を規定する情報である起動順序定義に従って常駐プログラムを起動し、
前記プログラム実行部が前記常駐プログラムを起動させる前または後に、リソース監視部が、前記常駐プログラムの起動によってリソース使用量が特定の値を超えるか否かを判断し、
前記常駐プログラムの起動によってリソース使用量が前記特定の値を超えると判断された場合、常駐プログラム起動制御部が、次回のシステム起動時における前記起動順序定義を今回の前記起動順序定義から変更する
ことを特徴とする常駐プログラムの起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行システムに関し、特に、常駐プログラムの起動方法に関するものである。
【背景技術】
【０００２】
例えばスマートフォンやタブレット型端末など、プログラム実行システムを備える装置（プログラム実行装置）として、ユーザが自由にアプリケーションを導入（インストール）できるものが普及している。また、ユーザが導入できるアプリケーションの中には、システム起動時に自動的に起動してシステムに常駐するプログラム（常駐プログラム）を含むアプリケーションがある。常駐プログラムがシステムに常駐することによって、ユーザの操作負担の低減や持続的なサービスが実現される。【０００３】
しかし、ユーザがプログラム実行装置に多数のアプリケーションを導入した場合、それらの常駐プログラムが制限なく起動されると、プログラム実行装置のリソース（メモリ容量やＣＰＵ（Central Processing Unit）の処理速度など）が不足し、アプリケーションを正常に実行できなくなることが懸念される。一般的なプログラム実行装置では、その対策として、常駐を許可するアプリケーションの種類を制限したり、メモリの空き容量が少なくなると優先度の低いアプリケーションを強制終了したりすることが行われている。【０００４】
また、下記の特許文献１には、自動的に起動するアプリケーションをシステムが起動した時刻に応じて切り替える技術が開示されている。特許文献２には、各アプリケーションを常駐型または非常駐型（一時型）に分類し、情報端末装置のメモリ不足が生じると非常駐型のアプリケーションを強制終了する技術が開示されている。特許文献３には、各アプリケーションの優先度をその使用頻度に基づいて決定する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−１５７７８１号公報
【特許文献２】特開２００３−１５８９２号公報
【特許文献３】特開２０１３−２４６７７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のプログラム実行装置では、システム起動時に常駐プログラムが起動される順番が毎回同じであるため、常駐プログラムによってリソース不足が生じる場合には、毎回同じ常駐プログラムしか起動しないことになる。逆に言えば、全く起動されない常駐プログラムが生じる。しかし、常駐プログラムの中には、例えばアプリケーションの自動アップデートプログラムなど、定期的に起動させる必要性が高いものがあるので、全く起動されない常駐プログラムが生じるのは好ましくない。【０００７】
本発明は以上のような課題を解決するためになされたものであり、全く起動されない常駐プログラムが生じることを防止することが可能なプログラム実行システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係るプログラム実行システムは、複数の常駐プログラムを含む複数のプログラムを実行するプログラム実行部と、複数の常駐プログラムを起動させる順番を制御する常駐プログラム起動制御部とを備え、プログラム実行部は、システム起動時に、複数の常駐プログラムを起動させる順番を規定する情報である起動順序定義に従って、複数の常駐プログラムを順次起動させ、常駐プログラム起動制御部は、複数の常駐プログラムの起動によってリソース使用量が特定の値を超える場合、次回のシステム起動時における起動順序定義を今回のシステム起動時に用いた起動順序定義から変更する。
【発明の効果】
【０００９】
本発明によれば、常駐プログラムの起動によってリソース使用量が特定の値を超える場合に、次回のシステム起動時における起動順序定義が、今回のシステム起動時に用いた起動順序定義から変更されるため、次回のシステム起動時に複数の常駐プログラムが起動する順番が今回のシステム起動時のものとは異なるようになる。それにより、全く起動されない常駐プログラムが生じることが防止される。【００１０】
本発明の目的、特徴、態様、および利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００１１】
【図１】本発明に係るプログラム実行システムの構成図である。
【図２】アプリケーションの構成を示す図である。
【図３】起動順序定義の例を示す図である。
【図４】プログラム実行装置のメモリ容量を説明するための図である。
【図５】実施の形態１に係るプログラム実行装置の動作を説明するための図である。
【図６】図５に示した動作後の起動順序定義を示す図である。
【図７】実施の形態１に係るプログラム実行装置の動作を示すフローチャートである。
【図８】常駐プログラムのメモリ使用量を予め判断できる場合における、実施の形態１に係るプログラム実行装置の動作を示すフローチャートである。
【図９】新たなアプリケーションが導入されるときのプログラム実行装置の動作を説明するための図である。
【図１０】新たなアプリケーションが導入されるときのプログラム実行装置の動作を説明するための図である。
【図１１】新たなアプリケーションが導入された後の起動順序定義の例を示す図である。
【図１２】実施の形態２に係るプログラム実行装置の動作を説明するための図である。
【図１３】実施の形態２に係るプログラム実行装置の動作を示すフローチャートである。
【図１４】実施の形態３に係るプログラム実行装置の動作を説明するための図である。
【図１５】実施の形態３に係るプログラム実行装置の動作を示すフローチャートである。
【図１６】実施の形態４における起動順序定義の例を示す図である。
【図１７】実施の形態４における起動順序定義の例を示す図である。
【図１８】実施の形態４における起動順序定義の例を示す図である。
【図１９】実施の形態５に係るプログラム実行装置の動作を示すフローチャートである。
【図２０】常駐プログラムのメモリ使用量を予め判断できる場合における、実施の形態５に係るプログラム実行装置の動作を示すフローチャートである。
【図２１】実施の形態６に係るプログラム実行装置の動作を説明するための図である。
【発明を実施するための形態】
【００１２】
＜実施の形態１＞
図１は、本発明に係るプログラム実行システムの構成図である。当該プログラム実行システムは、プログラム実行装置１０と、それに接続した起動スイッチ２１、表示装置２２および音声出力装置２３を備えている。本発明は、パーソナルコンピュータをはじめとするプログラム実行システムに広く適用可能であるが、製造コストや製品サイズ、消費電力などの理由からリソースが制限される携帯型または小型の装置（例えばスマートフォン、タブレット端末、車載の情報表示装置、ナビゲーション装置など）への適用が特に有効である。
【００１３】
起動スイッチ２１は、プログラム実行装置１０の電源スイッチであり、ユーザが起動スイッチ２１を操作してプログラム実行装置１０の電源がオンになると、プログラム実行システムが起動する。起動スイッチ２１は、プログラム実行装置１０を遠隔操作するリモコンでもよいし、プログラム実行装置１０に内蔵されていてもよい。また、プログラム実行システムが車載装置に適用される場合、起動スイッチ２１は車両の電源スイッチやイグニッションスイッチと連動するように構成してもよい。
【００１４】
表示装置２２としては、液晶ディスプレイが代表的であるが、画像表示機能を有する任意の装置（例えばスマートフォンやタブレット端末、車両のインストルメントパネルの表示部など）を利用してもよい。また、表示装置２２は、ユーザによる操作の入力手段としても機能するタッチパネルであってもよい。音声出力装置２３は、スピーカやヘッドフォン等が一般的であるが、これも音声出力機能を有する任意の装置を利用してもよい。
【００１５】
プログラム実行装置１０は、プログラム実行部１１、記憶部１２、リソース監視部１３および常駐プログラム起動制御部１４を備えている。プログラム実行装置１０はコンピュータを用いて構成されており、プログラム実行部１１、リソース監視部１３および常駐プログラム起動制御部１４は、コンピュータがプログラムに従って動作することにより実現される。記憶部１２は、例えばハードディスク、リムーバブルディスクなど不揮発性の記憶媒体によって構成される。
【００１６】
プログラム実行部１１は、複数のアプリケーションを複数同時に実行することができる。また、プログラム実行部１１は、各アプリケーションの動作に従って、当該アプリケーションの実行結果を表示装置２２または音声出力装置２３から出力することもできる。
【００１７】
一般的に、プログラム実行装置で実行されるアプリケーションは、１以上のプログラムと、当該アプリケーションに関する各種の情報が記載された定義ファイルとを含むパッケージとして構成されている。また、一般的なアプリケーションは、図２に示すように、表示装置２２に表示される実行画面を有する表示プログラムと、表示装置２２への描画は行わずに常駐する（つまりバックグラウンドで動作する）常駐プログラムと、定義ファイルとを含む構成となる。ただし、表示プログラムを含まずに常駐プログラムと定義ファイルからなるアプリケーションや、常駐プログラムを含まずに表示プログラムと定義ファイルからなるアプリケーションもある。また１つのアプリケーションが、表示プログラム、常駐プログラムまたは定義ファイルを複数有することもある。
【００１８】
常駐プログラムの例としては、ナビゲーション用の地図アップデート確認プログラムや、ＳＮＳ（Social Networking Service）アプリケーションの投稿確認プログラム、ニュースアプリケーションの新着ニュース取得プログラム、音楽アプリケーションのアップデート確認プログラム、天気予報アプリケーションの最新情報取得プログラムなどがある。
【００１９】
プログラム実行部１１により実行されるアプリケーションは、記憶部１２に記憶されている。ここで、記憶部１２に記憶されているアプリケーションには、常駐プログラムを含むアプリケーションが複数含まれているものとする。また、プログラム実行部１１は、システム起動時に、それら複数のアプリケーションの常駐プログラムを、予め規定された順番で起動させる。プログラム実行部１１が複数の常駐プログラムを起動させる順番（常駐プログラム起動順序）を規定する情報である「起動順序定義」は、記憶部１２に記憶されており、システム起動時にプログラム実行部１１によって読み出される。
【００２０】
図３は、記憶部１２に記憶される起動順序定義を模式的に示した図である。図３の例では、起動順序定義として、常駐プログラムＡ〜Ｅを起動する順番が示されている。本実施の形態では、起動順序定義は、常駐プログラムを起動させる順番をループ状に規定しており、起動対象とする常駐プログラムを示す情報を含んでいるものとする。
【００２１】
図３に示す起動順序定義が記憶部１２に記憶されていた場合、プログラム実行部１１は、起動対象となっている常駐プログラムＡを最初に起動し、その後は、起動対象を起動順序定義に従って１つずつ進めながら、起動対象となった常駐プログラムを起動する。つまり、プログラム実行部１１は、常駐プログラムＡ〜Ｅを、常駐プログラムＡ，Ｂ，Ｃ，Ｄ、Ｅ…の順番で起動することになる。
【００２２】
リソース監視部１３は、各アプリケーションによるリソースの使用状況を監視する。リソースの使用状況を表す情報としては、メモリ使用量やＣＰＵの使用率などが挙げられるが、本実施の形態では、リソース監視部１３がプログラム実行装置１０のメモリ使用量を監視するものとする。
【００２３】
ここで、プログラム実行部１１が実行するプログラムには、ユーザが導入したアプリケーションに含まれるプログラムだけでなく、プログラム実行装置１０の基本的な動作を実現するためのプログラム（システムプログラム）も含まれている。システムプログラムは必ず実行する必要があるため、一般的には、図４のようにプログラム実行装置１０のメモリ容量の一部がシステムプログラム用の領域として予約され、残りの部分がアプリケーション用の領域として使用される。本明細書でいう「メモリ容量」とは、アプリケーション用の領域の容量を指している。
【００２４】
常駐プログラム起動制御部１４は、複数の常駐プログラムを起動させる順番（常駐プログラム起動順序）を制御する。具体的には、常駐プログラム起動制御部１４は、システム起動時に常駐プログラムが起動されることでメモリ容量が不足することが検出された場合に、次回のシステム起動時における起動順序定義を、今回のシステム起動時に用いた起動順序定義から変更する。すなわち、常駐プログラム起動制御部１４は、記憶部１２に記憶される起動順序定義の内容を更新する。それによって、次回のシステム起動時における常駐プログラム起動順序が、今回のシステム起動時のものから変更される。
【００２５】
次に、図５を用いて、システム起動時におけるプログラム実行装置１０の動作を説明する。図５は、記憶部１２に図３の起動順序定義が記憶されていると仮定したときの、プログラム実行装置１０の動作を示している。ここで、プログラム実行装置１０のメモリ容量は８０ＭＢであり、常駐プログラムが使用できるメモリ容量の上限（メモリ使用上限）は５０ＭＢと規定されているものとする。つまり、常駐プログラムによるメモリ使用量が５０ＭＢを超えるとメモリ不足と判断される。また、図３に示すように、常駐プログラムＡ，Ｂ，Ｃ，Ｄ，Ｅのメモリ使用量は、それぞれ２０ＭＢ，１０ＭＢ，３０ＭＢ，１５ＭＢ，２５ＭＢであるものとする。
【００２６】
起動スイッチ２１によってプログラム実行装置１０の電源がオンにされ、システムが起動すると、プログラム実行部１１は、起動順序定義（図３）に従って、起動対象となっている常駐プログラムＡを起動する。図５の（ａ）のように、常駐プログラムＡを起動しただけではメモリ使用量は２０ＭＢであり、メモリ使用上限の５０ＭＢには達しない。その場合、プログラム実行部１１は、起動順序定義に従って起動対象を常駐プログラムＢに進め、常駐プログラムＢを起動する。図５の（ｂ）のように、常駐プログラムＡ，Ｂが起動してもメモリ使用量は３０ＭＢであり、メモリ使用上限には達しないので、プログラム実行部１１は、さらに起動対象を常駐プログラムＣに進め、常駐プログラムＣを起動する。
【００２７】
図５の（ｃ）のように、常駐プログラムＡ，Ｂ，Ｃが起動するとメモリ使用量は６０ＭＢとなり、メモリ使用上限を超えるため、メモリ不足となる。その場合、プログラム実行部１１は、メモリ使用量がメモリ使用上限を超える原因となった（つまり直前に起動させた）常駐プログラムＣを終了させて、図５の（ｄ）のようにメモリ不足を解消する。さらに、常駐プログラム起動制御部１４は、このとき起動対象となっている常駐プログラムＣが、次回のシステム起動時に最初に起動させる常駐プログラムになるように、記憶部１２に記憶されている起動順序定義を更新する。つまり、図６のように常駐プログラムＣが起動対象となっている起動順序定義を、記憶部１２に記憶させる。その結果、次回のシステム起動時には、プログラム実行部１１により最初に常駐プログラムＣが起動されてから、上記と同様の動作が行われることになる。
【００２８】
このように、本実施の形態では、起動順序定義におけるループを変更せずに、最初に起動させる常駐プログラムを変更することによって、起動順序定義の内容を変更している。従って、システムの起動と終了が繰り返されるうちに、どの常駐プログラムにも実行される機会が与えられることになり、全く起動されない常駐プログラムが生じることが防止される。
【００２９】
図７は、実施の形態１に係るプログラム実行装置１０のシステム起動時の動作を示すフローチャートである。図５を用いて説明した動作は、プログラム実行装置１０が当該フローチャートに従った動作を行うことで実現される。
【００３０】
起動スイッチ２１によってプログラム実行装置１０の電源がオンにされ、システムが起動すると、プログラム実行部１１は、記憶部１２から起動順序定義を取得し（ステップＳ１１）、起動対象となっている常駐プログラムを起動する（ステップＳ１２）。次に、リソース監視部１３がプログラム実行装置１０のメモリ使用量を監視して、メモリ使用量がメモリ使用上限以下であるか否かを確認する（ステップＳ１３）。メモリ使用量がメモリ使用上限以下であれば（ステップＳ１３でＹＥＳ）、起動対象を次の常駐プログラムに変更し（ステップＳ１４）、ステップＳ１２へ戻る。
【００３１】
メモリ使用量がメモリ使用上限を超えていれば（ステップＳ１３でＮＯ）、プログラム実行部１１は、直前に起動させた常駐プログラムを終了させる（ステップＳ１５）。さらに、常駐プログラム起動制御部１４が、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定し（ステップＳ１６）、その常駐プログラムが起動対象となっている起動順序定義を、記憶部１２に記憶させる（ステップＳ１７）。以上により、システムの起動処理が完了する。
【００３２】
なお、上の説明では、実際に常駐プログラムを起動させてから（ステップＳ１２）、メモリ不足となるか否かを判断したが（ステップＳ１３）、各常駐プログラムのメモリ使用量が予め分かっている場合には、常駐プログラムを起動させる前にメモリ不足が生じるか否かを判断してもよい。その場合、メモリ不足が生じないと判断された場合にだけ常駐プログラムを起動して常駐させればよい。
【００３３】
例えば、アプリケーションに含まれる定義ファイル（図２）に、常駐プログラムのメモリ使用量の情報が記載されている場合には、当該常駐プログラムのメモリ使用量を予め判断できる。また、定義ファイルに記載されるメモリ使用量の情報は、当該常駐プログラムが過去に起動したときの実測値であってもよい。
【００３４】
以下、常駐プログラムのメモリ使用量を予め判断できる場合における、プログラム実行装置１０のシステム起動時の動作をより詳細に示す。図８は、その動作を示すフローチャートである。
【００３５】
起動スイッチ２１によってプログラム実行装置１０の電源がオンにされ、システムが起動すると、プログラム実行部１１は、記憶部１２から起動順序定義を取得する（ステップＳ２１）。次に、プログラム実行部１１は、リソース監視部１３が検出したプログラム実行装置１０の現在のメモリ使用量と、起動対象となっている常駐プログラムのメモリ使用量に基づいて、起動対象となっている常駐プログラムを起動させたときのメモリ使用量を予測し、そのときのメモリ使用量がメモリ使用上限以下に収まるか否かを判断する（ステップＳ２２）。
【００３６】
起動対象となっている常駐プログラムを起動させてもメモリ使用量がメモリ使用上限以下に収まると判断されれば（ステップＳ２２でＹＥＳ）、その常駐プログラムを起動させる（ステップＳ２３）。そして、起動対象を次の常駐プログラムに変更して（ステップＳ２４）、ステップＳ２２へ戻る。
【００３７】
一方、起動対象となっている常駐プログラムを起動させるとメモリ使用量がメモリ使用上限を超えると判断されれば（ステップＳ２２でＮＯ）、その常駐プログラムは起動させない。この場合、常駐プログラム起動制御部１４が、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定し（ステップＳ２５）、その常駐プログラムが起動対象となっている起動順序定義を、記憶部１２に記憶させる（ステップＳ２６）。以上により、システムの起動処理が完了する。
【００３８】
なお、ユーザがプログラム実行装置１０に新たなアプリケーションを導入した場合、常駐プログラム起動制御部１４は、図９のように、新たな常駐プログラム（Ｆ）を、記憶部１２に記憶されている起動順序定義における常駐プログラムの順番に追加する。起動順序定義に新たなアプリケーションを追加する位置は任意でよいが、例えば、新たな常駐プログラムおよびそれを追加する位置の前後の常駐プログラムのメモリ使用量の平均値が、起動順序定義に含まれる全ての常駐プログラムのメモリ使用量の平均値に最も近くなる位置に追加するとよい。そうすることにより、メモリ使用量が大きなアプリケーションが起動順序定義の特定位置に集中することを防止でき、より多くの常駐プログラムが同時に実行されるようになる。
【００３９】
図９に示すように、新たな常駐プログラムＦのメモリ使用量が２０ＭＢの場合、常駐プログラムＦを追加した後の起動順序定義に含まれる全ての常駐プログラムＡ〜Ｆのメモリ使用量の平均値は、２０．０ＭＢである。また、図１０に示すように、新たな常駐プログラムＦおよびそれを追加する位置の前後の常駐プログラムのメモリ使用量の平均値は、常駐プログラムＦを常駐プログラムＡ，Ｂの間に追加すると１６．７ＭＢ、常駐プログラムＦを常駐プログラムＢ，Ｃの間に追加すると２０．０ＭＢ、常駐プログラムＦを常駐プログラムＣ，Ｄの間に追加すると２１．７ＭＢ、常駐プログラムＦを常駐プログラムＤ，Ｅの間に追加すると２０．０ＭＢ、常駐プログラムＦを常駐プログラムＥ，Ａの間に追加すると２１．７ＭＢとなる。よって、常駐プログラムＦは、常駐プログラムＢ，Ｃの間または常駐プログラムＤ，Ｅの間に追加するとよい。図１１は、常駐プログラムＦを、常駐プログラムＢ，Ｃの間に追加した場合の起動順序定義を示している。
【００４０】
＜実施の形態２＞
実施の形態１では、起動順序定義における常駐プログラムの順番のループを変更せずに、最初に起動させる常駐プログラムを変更することによって起動順序定義の内容を変更したが、常駐プログラム起動順序の変更方法はこれに限られない。実施の形態２では、常駐プログラム起動制御部１４が常駐プログラム起動順序を変更する際、図１２に示すように、起動順序定義における常駐プログラムの順番をランダムに決定する。この方法によっても、実施の形態１と同様の効果が得られる。
【００４１】
図１３は、実施の形態２に係るプログラム実行装置１０のシステム起動時の動作を示すフローチャートである。このフローチャートは、図７のフローチャートに対し、次回のシステム起動時の起動対象を決定するステップＳ１６を、次回のシステム起動時における起動順序定義における常駐プログラムの順番をランダムに決定するステップＳ１６ａに置き換えただけのものであるため、ここでの説明は省略する。
【００４２】
＜実施の形態３＞
実施の形態１では、常駐プログラムの起動によってメモリ不足が生じた場合、その次以降の常駐プログラムは起動されない。例えば図５の例において、図５の（ｃ）のように常駐プログラムＣの起動によりメモリ不足が生じると、図５の（ｄ）の状態でシステム起動の処理が終了し、常駐プログラムＤ，Ｅは起動されない。
【００４３】
しかし、図５の（ｄ）の状態ではメモリ使用量は３０ＭＢであり、メモリ使用上限の５０ＭＢまで２０ＭＢの余裕があるので、メモリ使用量が１５ＭＢの常駐プログラムＤを実行可能なはずである。実施の形態３では、このようにメモリ容量を十分に有効活用できていない状態となることを防止する。
【００４４】
すなわち、実施の形態３に係るプログラム実行装置１０では、プログラム実行部１１が、メモリ不足の原因となる常駐プログラムの順番を飛ばして次の常駐プログラムを常駐させる動作を、起動順序定義に従って繰り返し行う。その繰り返しの動作は、起動順序定義内の常駐プログラムを一巡するまで実行される。
【００４５】
この動作を、図１４を用いて説明する。図１４は、図３の起動順序定義に基づく動作を示している。ここでも、プログラム実行装置１０のメモリ容量は８０ＭＢであり、メモリ使用上限は５０ＭＢとする。
【００４６】
起動スイッチ２１によってプログラム実行装置１０の電源がオンにされ、システムが起動すると、プログラム実行部１１は、記憶部１２に記憶されている起動順序定義（図３）に従って、起動対象となっている常駐プログラムＡを起動する。図１４の（ａ）のように、常駐プログラムＡを起動しただけではメモリ使用量は２０ＭＢであり、メモリ使用上限には達しない。その場合、プログラム実行部１１は、起動対象を常駐プログラムＢに進め、常駐プログラムＢを起動する。図１４の（ｂ）のように、常駐プログラムＡ，Ｂが起動してもメモリ使用量は３０ＭＢでありメモリ使用上限には達しないので、プログラム実行部１１は、起動対象を常駐プログラムＣに進め、常駐プログラムＣを起動する。
【００４７】
図１４の（ｃ）のように、常駐プログラムＡ，Ｂ，Ｃが起動するとメモリ使用量は６０ＭＢとなり、メモリ使用上限を超えるので、メモリ不足となる。その場合、プログラム実行部１１は、メモリ使用量がメモリ使用上限を超える原因となった（つまり直前に起動させた）常駐プログラムＣを終了させた上で、起動対象を常駐プログラムＤに進め、常駐プログラムＤを起動する。図１４の（ｄ）のように、常駐プログラムＡ，Ｂ，Ｄが起動してもメモリ使用量は４５ＭＢであり、メモリ不足にはならない。その場合、プログラム実行部１１は、起動対象を常駐プログラムＥに進め、常駐プログラムＥを起動する。
【００４８】
図１４の（ｅ）のように、常駐プログラムＡ，Ｂ，Ｄ，Ｅが起動するとメモリ使用量は７０ＭＢになり、メモリ不足となる。その場合、プログラム実行部１１は、メモリ使用量がメモリ使用上限を超える原因となった常駐プログラムＥを終了させ、起動対象を常駐プログラムＡに進める。これにより起動対象が起動順序定義内の常駐プログラムを一巡するため、常駐プログラムを起動させる処理は終了する。
【００４９】
常駐プログラム起動制御部１４は、メモリ使用量がメモリ使用上限を超える１回目の原因となった常駐プログラムが次回のシステム起動時に最初に起動するように、起動順序定義を変更する。図１４に示した動作では、常駐プログラムＣを起動させたときに初めてメモリ不足となったため、次回のシステム起動時に最初に起動させる常駐プログラムは常駐プログラムＣに設定される。つまり、図６のように常駐プログラムＣが起動対象となっている起動順序定義を、記憶部１２に記憶させる。その結果、次回のシステム起動時には、常駐プログラムＣが最初に起動されてから、上記と同様の動作が行われることになる。
【００５０】
このように、本実施の形態では、常駐プログラムの起動によってメモリ不足が生じた場合、代わりに起動できる常駐プログラムが探索され、そのような常駐プログラムが見つかればそれが起動される。よって、実施の形態１よりも常駐する常駐プログラムの数を多くできる。
【００５１】
図１５は、実施の形態３に係るプログラム実行装置１０のシステム起動時の動作を示すフローチャートである。図１４を用いて説明した動作は、プログラム実行装置１０が当該フローチャートに従った動作を行うことで実現される。
【００５２】
まず、起動スイッチ２１によってプログラム実行装置１０の電源がオンにされ、システムが起動すると、プログラム実行部１１は、記憶部１２から起動順序定義を取得し（ステップＳ３１）、起動対象となっている常駐プログラムを起動する（ステップＳ３２）。次に、リソース監視部１３がプログラム実行装置１０のメモリ使用量を監視して、メモリ使用量がメモリ使用上限以下であるか否かを確認する（ステップＳ３３）。
【００５３】
メモリ使用量がメモリ使用上限以下であれば（ステップＳ３３でＹＥＳ）、起動対象を次の常駐プログラムに変更する（ステップＳ３４）。このとき起動対象が起動順序定義内の常駐プログラムをまだ一巡していなければ（ステップＳ３５でＮＯ）ステップＳ３２へ戻る。
【００５４】
一方、ステップＳ３３においてメモリ使用量がメモリ使用上限を超えていれば（ステップＳ３３でＮＯ）、プログラム実行部１１は、直前に起動させた常駐プログラムを終了させる（ステップＳ３６）。このとき、メモリ使用量がメモリ使用上限を超えたのが１回目であれば（ステップＳ３７でＹＥＳ）、常駐プログラム起動制御部１４は、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定して（ステップＳ３８）、ステップＳ３４へ移行する。メモリ使用量がメモリ使用上限を超えたのが初めてでなければ（ステップＳ３７でＮＯ）、ステップＳ３８の処理を行わずにステップＳ３４へと移行する。
【００５５】
以上の処理が繰り返し行われ、起動対象が起動順序定義内の常駐プログラムを一巡すれば（ステップＳ３５でＹＥＳ）、次回のシステム起動時の起動対象が決定済みかどうか（つまりステップＳ３８の処理が行われたか否か）を確認する（ステップＳ３９）。次回のシステム起動時の起動対象が決定済みでなければ（ステップＳ３９でＮＯ）、常駐プログラム起動制御部１４は、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定し（ステップＳ４０）、そのように規定された起動順序定義を記憶部１２に記憶させる（ステップＳ４１）。
【００５６】
次回のシステム起動時の起動対象が決定済みであれば（ステップＳ３９でＹＥＳ）、常駐プログラム起動制御部１４は、ステップＳ４０の処理を行わずに、ステップＳ３８で決定したとおりに起動対象が規定された起動順序定義を記憶部１２に記憶させる（ステップＳ４１）。以上により、システムの起動処理が完了する。
【００５７】
なお、実施の形態３においても、各常駐プログラムのメモリ使用量が予め分かっている場合には、実際に常駐プログラムを起動させることなくメモリ不足が生じるか否かを判断してもよい。
【００５８】
実施の形態３では、常駐プログラム起動制御部１４は、起動順序定義におけるループは変更せずに、メモリ使用量が特定の値を超える１回目の原因となる常駐プログラムが次回のシステム起動時に最初に起動するように、起動順序定義の内容を変更したが、実施の形態２を適用して、常駐プログラム起動制御部１４が起動順序定義を変更する際、起動順序定義における常駐プログラムの順番をランダムに決定してもよい。
【００５９】
＜実施の形態４＞
実施の形態１では、プログラム実行装置１０が１つの起動順序定義のみを使用する例を示したが、実施の形態４では、プログラム実行装置１０が複数の起動順序定義を使用する例を示す。すなわち、常駐プログラム起動制御部１４が、図１６のような複数の起動順序定義を複数管理し、予め定められた条件に従って、プログラム実行部１１に使用させる起動順序定義を切り替える。その他の動作は実施の形態１（図７）と同様である。
【００６０】
例えば、現在位置の条件に応じて複数の起動順序定義を切り替える場合、記憶部１２には、現在位置の各条件に対応した複数の起動順序定義が記憶される。常駐プログラム起動制御部１４は、プログラム実行装置１０の起動時に現在位置を取得し、図７のステップＳ１１において、プログラム実行部１１に対し現在位置に応じた起動順序定義を記憶部１２から読み出すように指示する。
【００６１】
どの起動順序定義を選択するかの判断基準となる条件としては、現在位置の条件の他、天候の条件やユーザの条件などが考えられる。これらの条件を用いる場合のプログラム実行装置１０の動作も上記と同様でよく、常駐プログラム起動制御部１４が、図７のステップＳ１１において、プログラム実行部１１に対し現在の天候やユーザに応じた起動順序定義を記憶部１２から読み出すように指示すればよい。
【００６２】
実施の形態４によれば、プログラム実行装置１０を起動したときの現在位置や天候などに応じて、起動順序定義を使い分けることが可能になる。また、プログラム実行装置１０を使用するユーザごとに起動順序定義を切り替えることも可能である。特に、ユーザごとに独立してアプリケーションを導入可能な場合には、図１７のように、ユーザごとに導入した常駐プログラム自体が異なることがあるため、ユーザごとに起動順序定義の使い分けができることは非常に有効である。
【００６３】
＜実施の形態５＞
実施の形態５では、複数の常駐プログラムのそれぞれに優先度を規定し、常駐プログラム起動制御部１４がそれぞれの優先度に対応した複数の起動順序定義を管理する構成としたプログラム実行装置１０を示す。
【００６４】
図１８は、常駐プログラムを高優先度の常駐プログラムＡ〜Ｅと、低優先度の常駐プログラムａ〜ｅとに分けて、優先度ごとに起動順序定義を分けた例である。システム起動時には、プログラム実行部１１が、各常駐プログラムをその優先度に対応する起動順序定義に従った順番で起動させる。
【００６５】
この場合、低優先度の常駐プログラムは、高優先度の常駐プログラムが全て起動してもメモリ容量に余裕がある場合にだけ起動されるようにしてもよいが、その場合には、低優先度の常駐プログラムが全く起動されなくなることも考えられる。そのため、各優先度の常駐プログラムが少なくとも１つずつは実行可能なように、常駐プログラムを起動させる順番を決定することが好ましい。システム起動時に各優先度の常駐プログラムが少なくとも１つずつ実行されれば、システムの起動と終了が繰り返されるうちに、低優先度の常駐プログラムも全て起動される機会が得られ、全く起動されない常駐プログラムが生じることを防止できる。
【００６６】
図１９は、実施の形態５に係るプログラム実行装置１０のシステム起動時の動作を示すフローチャートである。ここでは、高優先度の常駐プログラムと低優先度の常駐プログラムとが規定されており、プログラム実行装置１０が、各優先度の常駐プログラムを少なくとも１つずつは実行する動作を示す。なお、プログラム実行装置１０の記憶部１２には、図１８の例のような、高優先度の常駐プログラム用の起動順序定義と、低優先度の常駐プログラム用の起動順序定義とが記憶されている。
【００６７】
起動スイッチ２１によってプログラム実行装置１０の電源がオンにされ、システムが起動すると、プログラム実行部１１は、記憶部１２から高優先度の常駐プログラム用の起動順序定義と低優先度の常駐プログラム用の起動順序定義をそれぞれ取得する（ステップＳ５１）。そして、プログラム実行部１１は、高優先度の常駐プログラムの起動対象を起動する（ステップＳ５２）。次に、リソース監視部１３がプログラム実行装置１０のメモリ使用量を監視して、メモリ使用量がメモリ使用上限以下であるか否かを確認する（ステップＳ５３）。メモリ使用量がメモリ使用上限以下であれば（ステップＳ５３でＹＥＳ）、高優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更し（ステップＳ５４）、ステップＳ５２へ戻る。
【００６８】
ステップＳ５２〜Ｓ５４の処理が繰り返されて、メモリ使用量がメモリ使用上限を超えるようになれば（ステップＳ５３でＮＯ）、プログラム実行部１１は、直前に起動させた高優先度の常駐プログラムを終了させる（ステップＳ５５）。ここまでの処理により、メモリ使用量がメモリ使用上限を超えない範囲で、高優先度の常駐プログラムが起動される。
【００６９】
続いて、プログラム実行部１１は、低優先度の常駐プログラムの起動対象を起動する（ステップＳ５６）。次に、リソース監視部１３が、メモリ使用量がメモリ使用上限以下であるか否かを確認する（ステップＳ５７）。メモリ使用量がメモリ使用上限以下であれば（ステップＳ５７でＹＥＳ）、低優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更し（ステップＳ５８）、ステップＳ５６へ戻る。
【００７０】
メモリ使用量がメモリ使用上限を超えていれば（ステップＳ５７でＮＯ）、プログラム実行部１１は、低優先度の常駐プログラムが２つ以上起動しているかを確認する（ステップＳ５９）。なお、ステップＳ５９の前にステップＳ５６が実行されるので、ステップＳ５９では、低優先度の常駐プログラムが少なくとも１つは起動している。
【００７１】
低優先度の常駐プログラムが１つしか起動していない場合は（ステップＳ５９でＮＯ）、その常駐プログラムの動作を継続させつつメモリ使用量を下げるために、起動している高優先度の常駐プログラムのうち最後に起動させたものを終了させる（ステップＳ６０）。さらに、高優先度の常駐プログラムの起動対象を、現在の起動対象の１つ前のものに変更する（ステップＳ６１）。その結果、高優先度の常駐プログラムの起動対象は、ステップＳ６０で終了させた常駐プログラムになる。その後、リソース監視部１３が、メモリ使用量がメモリ使用上限以下であるか否かを再度確認し（ステップＳ６２）、メモリ使用量がメモリ使用上限を超えていれば（ステップＳ６２でＮＯ）ステップＳ６０へ戻る。つまり、ステップＳ６０，Ｓ６１の処理は、メモリ使用量がメモリ使用上限以下になるまで繰り返し行われる。それにより、起動している唯一の低優先度の常駐プログラムの動作を継続させつつ、メモリ使用量をメモリ使用上限以下まで下げることができる。
【００７２】
そして、メモリ使用量がメモリ使用上限以下になれば（ステップＳ６２でＹＥＳ）、ステップＳ５６へ戻る。それにより、ステップＳ６０の処理で増えたメモリの空き容量が大きい場合に更に低優先度の常駐プログラムを起動させることができ、メモリ容量を有効に活用できる。
【００７３】
一方、ステップＳ５９において、低優先度の常駐プログラムが２つ以上起動していた場合には（ステップＳ５９でＹＥＳ）、高優先度の常駐プログラムの動作を継続させつつメモリ使用量をメモリ使用上限以下にするために、起動している低優先度の常駐プログラムのうち最後に起動させたものを終了させる（ステップＳ６３）。その後、常駐プログラム起動制御部１４が、各優先度の常駐プログラムの現在の起動対象を、それぞれ次回のシステム起動時の起動対象に決定した上で（ステップＳ６４）、各優先度の常駐プログラム用の起動順序定義を、記憶部１２に記憶させる（ステップＳ６５）。以上により、システムの起動処理が完了する。
【００７４】
なお、図１９の動作は、実際に常駐プログラムを起動させてから（ステップＳ５２，Ｓ５６）、メモリ不足となるか否かを判断したが（ステップＳ５３，Ｓ５７）、各常駐プログラムのメモリ使用量が予め分かっている場合には、常駐プログラムを起動させる前にメモリ不足が生じるか否かを判断してもよい。その場合、メモリ不足が生じないと判断された場合にだけ常駐プログラムを起動して常駐させればよい。
【００７５】
以下、常駐プログラムのメモリ使用量を予め判断できる場合における、プログラム実行装置１０のシステム起動時の動作を説明する。図２０は、その動作を示すフローチャートである。
【００７６】
起動スイッチ２１によってプログラム実行装置１０の電源がオンにされ、システムが起動すると、プログラム実行部１１は、記憶部１２から高優先度の常駐プログラム用の起動順序定義と低優先度の常駐プログラム用の起動順序定義をそれぞれ取得する（ステップＳ７１）。次に、プログラム実行部１１は、リソース監視部１３が検出した現在のメモリ使用量と、高優先度の常駐プログラムの起動対象のメモリ使用量と、低優先度の常駐プログラムの起動対象のメモリ使用量とに基づいて、高優先度の常駐プログラムの起動対象と低優先度の常駐プログラムの起動対象を起動させたときのメモリ使用量を予測し、そのときのメモリ使用量がメモリ使用上限以下に収まるか否かを判断する（ステップＳ７２）。
【００７７】
高優先度の常駐プログラムの起動対象と低優先度の常駐プログラムの起動対象を起動してもメモリ使用量がメモリ使用上限以下に収まると判断されれば（ステップＳ７２でＹＥＳ）、高優先度の常駐プログラムの起動対象を起動させる（ステップＳ７３）。そして、高優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更して（ステップＳ７４）、ステップＳ７２へ戻る。ステップＳ７２〜Ｓ７４の処理により、低優先度の常駐プログラムの起動対象の起動に必要なメモリ容量を残しつつ、メモリ使用量がメモリ使用上限を超えない範囲で、高優先度の常駐プログラムが起動される。
【００７８】
その後、高優先度の常駐プログラムの起動対象と低優先度の常駐プログラムの起動対象を起動するとメモリ使用量がメモリ使用上限を超えると判断されるようになると（ステップＳ７２でＮＯ）、プログラム実行部１１は、リソース監視部１３が検出した現在のメモリ使用量と、低優先度の常駐プログラムの起動対象のメモリ使用量とに基づいて、低優先度の常駐プログラムの起動対象を起動させたときのメモリ使用量を予測し、そのときのメモリ使用量がメモリ使用上限以下に収まるか否かを判断する（ステップＳ７５）。
【００７９】
低優先度の常駐プログラムの起動対象を起動してもメモリ使用量がメモリ使用上限以下に収まると判断されれば（ステップＳ７５でＹＥＳ）、低優先度の常駐プログラムの起動対象を起動させる（ステップＳ７６）。そして、低優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更して（ステップＳ７７）、ステップＳ７５へ戻る。先に述べたように、ステップＳ７２〜Ｓ７４では低優先度の常駐プログラムの起動対象の起動に必要なメモリ容量は確保されているので、少なくとも１回はステップＳ７５でＹＥＳと判定され、低優先度の常駐プログラムが少なくとも１つ起動することになる。
【００８０】
一方、低優先度の常駐プログラムの起動対象を起動するとメモリ使用量がメモリ使用上限を超えると判断されれば（ステップＳ７５でＮＯ）、低優先度の常駐プログラムの更なる起動は行わない。この場合、常駐プログラム起動制御部１４が、各優先度の常駐プログラムの現在の起動対象を、それぞれ次回のシステム起動時の起動対象に決定した上で（ステップＳ７８）、各優先度の常駐プログラム用の起動順序定義を、記憶部１２に記憶させる（ステップＳ７９）。以上により、システムの起動処理が完了する。
【００８１】
なお、各常駐プログラムの優先度は固定されていなくてもよく、例えば、予め定められた条件（現在位置、天候、ユーザなどの条件）に従って、優先度が変更されるようにしてもよい。
【００８２】
＜実施の形態６＞
実施の形態１〜５では、プログラム実行部１１が、常駐プログラムをシステム起動時のみに起動させる例を示したが、実施の形態６では、プログラム実行部１１が、システム起動後に、常駐させる常駐プログラムを起動順序定義に従って一定周期で変更する。
【００８３】
具体的には、プログラム実行部１１は、システム起動時に実施の形態１（図７）の処理を実行した後、一定の時間が経過するごとに、常駐している常駐プログラムのうち最も先に起動した常駐プログラムを終了させて、再び、図７の処理を実行する。
【００８４】
図２１を用いて、その動作を説明する。システム起動時に、図３の起動順序定義に基づいて、図７の処理を実行すると、図２１の（ａ）のように常駐プログラムＡ，Ｂが起動される。その後、一定の時間が経過すると、常駐プログラムＡ，Ｂのうち最も先に起動した常駐プログラムＡを終了させ、再び図７の処理を実行する。すると、常駐プログラムＣが起動し、図２１の（ｂ）のように常駐プログラムＢ，Ｃが常駐した状態になる。一定の周期でこの動作が繰り返されると、図２１の（ｃ）のように常駐プログラムＣ，Ｄが常駐した状態、図２１の（ｄ）のように常駐プログラムＤ，Ｅが常駐した状態、図２１の（ｅ）のように常駐プログラムＥ，Ａが常駐した状態、と変化して、図２１の（ａ）の状態に戻る。この動作はプログラム実行装置１０がオフにされるまで繰り返される。
【００８５】
本実施の形態では、システムが動作している間、常駐プログラムが起動順序定義に従って切り替わるため、システムの動作を終了させることなく実施の形態１と同様の効果が得られる。特に、スマートフォンなど、頻繁に電源をオフにしない装置に有効である。なお、図７の処理が繰り返し実行される場合、システムの動作を終了させるときには、最後に常駐した常駐プログラムの次の常駐プログラム、つまりメモリ使用量がメモリ使用上限を超える原因となった常駐プログラムが、次回のシステム起動時に最初に起動するようになる。あるいは、実施の形態２を適用し、次回のシステム起動時に用いる起動順序定義における常駐プログラムの順番をランダムに決定してもよい。
【００８６】
また、実施の形態５では、システム起動後に実施の形態１（図７）の処理が一定周期で実行される例を示したが、実施の形態３（図１５）の処理が一定周期で実行されるようにしてもよい。
【００８７】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【００８８】
本発明は詳細に説明されたが、上記した説明は、すべての態様において、例示であって、この発明がそれに限定されるものではない。例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。
【符号の説明】
【００８９】
１０  プログラム実行装置、１１  プログラム実行部、１２  記憶部、１３  リソース監視部、１４  常駐プログラム起動制御部、２１  起動スイッチ、２２  表示装置、２３  音声出力装置。
【図１】
0006054003.tif 000002
【図２】
0006054003.tif 000003
【図３】
0006054003.tif 000004
【図４】
0006054003.tif 000005
【図５】
0006054003.tif 000006
【図６】
0006054003.tif 000007
【図７】
0006054003.tif 000008
【図８】
0006054003.tif 000009
【図９】
0006054003.tif 000010
【図１０】
0006054003.tif 000011
【図１１】
0006054003.tif 000012
【図１２】
0006054003.tif 000013
【図１３】
0006054003.tif 000014
【図１４】
0006054003.tif 000015
【図１５】
0006054003.tif 000016
【図１６】
0006054003.tif 000017
【図１７】
0006054003.tif 000018
【図１８】
0006054003.tif 000019
【図１９】
0006054003.tif 000020
【図２０】
0006054003.tif 000021
【図２１】
0006054003.tif 000022