(57)【特許請求の範囲】
【請求項１】
情報処理装置であって、
当該情報処理装置が有する複数のプログラムからなるプログラム群の起動処理を制御する起動制御部を有し、
前記起動制御部は、
前記プログラム群の第１の起動時に、前記プログラム群のうちの第１のプログラムよりも優先度が低い第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとの前記第１のプログラムによるリソースの使用情報の履歴を示す第１の履歴情報を記憶し、
前記第１の起動時の後の前記プログラム群の第２の起動時における前記第１のプログラムの起動処理の期間において、前記第１の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させ、前記第１の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させず、
前記第２の起動時における前記第１のプログラムの起動処理において、前記一定期間ごとの前記第１のプログラムによる前記リソースの使用情報の履歴を示す第２の履歴情報を記憶し、
前記第２の起動時の後の前記プログラム群の第３の起動時において、前記第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとのリソースの使用情報の履歴を示す第３の履歴情報であって、前記第１の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報が、前記第２の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報よりも大きい前記一定期間については、当該一定期間を分割した分割期間ごとに、前記リソースの使用情報を示す前記第３の履歴情報を記憶し、
前記第３の起動時の後の前記プログラム群の第４の起動時における前記第１のプログラムの起動処理の期間において、前記第３の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させ、前記第３の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させない、
ことを特徴とする情報処理装置。
【請求項２】
前記リソースの使用情報は、前記リソースの使用率である、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
情報処理装置が、
当該情報処理装置が有する複数のプログラムからなるプログラム群の第１の起動時に、前記プログラム群のうちの第１のプログラムよりも優先度が低い第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとの前記第１のプログラムによるリソースの使用情報の履歴を示す第１の履歴情報を記憶する第１の手順と、
前記第１の起動時の後の前記プログラム群の第２の起動時における前記第１のプログラムの起動処理の期間において、前記第１の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させ、前記第１の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させない第２の手順と、
を実行し、
前記第２の手順は、前記第２の起動時における前記第１のプログラムの起動処理において、前記一定期間ごとの前記第１のプログラムによる前記リソースの使用情報の履歴を示す第２の履歴情報を記憶し、
前記情報処理装置が、
前記第２の起動時の後の前記プログラム群の第３の起動時において、前記第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとのリソースの使用情報の履歴を示す第３の履歴情報であって、前記第１の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報が、前記第２の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報よりも大きい前記一定期間については、当該一定期間を分割した分割期間ごとに、前記リソースの使用情報を示す前記第３の履歴情報を記憶する第３の手順と、
前記第３の起動時の後の前記プログラム群の第４の起動時における前記第１のプログラムの起動処理の期間において、前記第３の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させ、前記第３の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させない第４の手順と、
を実行することを特徴とする起動処理方法。
【請求項４】
前記リソースの使用情報は、前記リソースの使用率である、
ことを特徴とする請求項３記載の起動処理方法。
【請求項５】
情報処理装置に、
当該情報処理装置が有する複数のプログラムからなるプログラム群の第１の起動時に、前記プログラム群のうちの第１のプログラムよりも優先度が低い第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとの前記第１のプログラムによるリソースの使用情報の履歴を示す第１の履歴情報を記憶する第１の手順と、
前記第１の起動時の後の前記プログラム群の第２の起動時における前記第１のプログラムの起動処理の期間において、前記第１の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させ、前記第１の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させない第２の手順と、
を実行させ、
前記第２の手順は、前記第２の起動時における前記第１のプログラムの起動処理において、前記一定期間ごとの前記第１のプログラムによる前記リソースの使用情報の履歴を示す第２の履歴情報を記憶し、
前記情報処理装置に、
前記第２の起動時の後の前記プログラム群の第３の起動時において、前記第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとのリソースの使用情報の履歴を示す第３の履歴情報であって、前記第１の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報が、前記第２の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報よりも大きい前記一定期間については、当該一定期間を分割した分割期間ごとに、前記リソースの使用情報を示す前記第３の履歴情報を記憶する第３の手順と、
前記第３の起動時の後の前記プログラム群の第４の起動時における前記第１のプログラムの起動処理の期間において、前記第３の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させ、前記第３の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させない第４の手順と、
を実行させることを特徴とする起動処理プログラム。
【請求項６】
前記リソースの使用情報は、前記リソースの使用率である、
ことを特徴とする請求項５記載の起動処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、起動処理方法、及び起動処理プログラムに関する。
【背景技術】
【０００２】
組み込み機器では複数のアプリケーションプログラム（以下、「アプリ」という。）を同時に動作させることができるが、基本的に、操作パネルを占有できるのは一つのアプリである。ユーザは、操作パネルを介して所定の操作を行うことで、利用対象とするアプリを切り替えることができる。
【０００３】
利用頻度が高いアプリを、優先的なアプリ（以下、「優先アプリ」という。）として設定しておくことで、機器の起動直後において、当該アプリに操作パネルを占有させることができる。なお、優先アプリの一例として、ログイン画面を表示するアプリが挙げられる。
【０００４】
優先アプリの起動時間は、機器の起動後において、ユーザが機器を操作可能になるまでの所要時間に影響するため短い方が望ましい。そこで、優先アプリの起動時間を短縮する方法として、優先アプリのプロセスの優先度を起動時に一時的に上げることで、ＣＰＵ等のリソースを優先的に優先アプリのプロセスに割り当てることが考えられる。また、アプリの負荷に応じて、計算機リソースの優先的な割当量を、短時間追従させる方法も知られている。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の方法では、ＣＰＵ等のリソースを１００％使用したい場合でも、優先アプリ以外のアプリのプロセスの存在によって、優先アプリが起動時に必要とするリソースを十分に獲得することができない場合が有る。一般的なプロセス／スレッドのスケジューラは、高い優先度のプロセス又はスレッドに比較的多くのリソースを割り当てるものの、低い優先度のプロセス又はスレッドにも一定のリソースを割り当てるためである。そのため、優先アプリの起動が遅延してしまう問題があった。このような問題は、優先アプリと同時に起動されるアプリの数が多いほど顕著になる。
【０００６】
本発明は、上記の点に鑑みてなされたものであって、特定のプログラムの起動時間の遅延の可能性を低減させることを目的とする。
【課題を解決するための手段】
【０００７】
そこで上記課題を解決するため、情報処理装置は、当該情報処理装置が有する複数のプログラムからなるプログラム群の起動処理を制御する起動制御部を有し、前記起動制御部は、前記プログラム群の第１の起動時に、前記プログラム群のうちの第１のプログラムよりも優先度が低い第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとの前記第１のプログラムによるリソースの使用情報の履歴を示す第１の履歴情報を記憶し、前記第１の起動時の後の前記プログラム群の第２の起動時における前記第１のプログラムの起動処理の期間において、前記第１の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させ、前記第１の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間には、前記第２のプログラムの起動処理を進行させず、前記第２の起動時における前記第１のプログラムの起動処理において、前記一定期間ごとの前記第１のプログラムによる前記リソースの使用情報の履歴を示す第２の履歴情報を記憶し、前記第２の起動時の後の前記プログラム群の第３の起動時において、前記第２のプログラムの起動処理の進行が停止された状態で、前記第１のプログラムの起動処理を進行させ、該起動処理における一定期間ごとのリソースの使用情報の履歴を示す第３の履歴情報であって、前記第１の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報が、前記第２の履歴情報が示す前記第１のプログラムによる前記リソースの使用情報よりも大きい前記一定期間については、当該一定期間を分割した分割期間ごとに、前記リソースの使用情報を示す前記第３の履歴情報を記憶し、前記第３の起動時の後の前記プログラム群の第４の起動時における前記第１のプログラムの起動処理の期間において、前記第３の履歴情報に基づいて、前記リソースの使用情報が所定値に達していないことが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させ、前記第３の履歴情報に基づいて、前記リソースの使用情報が前記所定値に達していることが特定される前記一定期間又は前記分割期間には、前記第２のプログラムの起動処理を進行させない。
【発明の効果】
【０００８】
特定のプログラムの起動時間の遅延の可能性を低減させること。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施の形態における画像形成装置のハードウェア構成例を示す図である。
【図２】本発明の実施の形態における画像形成装置の機能構成例を示す図である。
【図３】画像形成装置の起動時の処理手順の一例を説明するためのフローチャートである。
【図４】起動処理状態記憶部の構成例を示す図である。
【図５】第１の仮起動処理の処理手順の一例を説明するためのフローチャートである。
【図６】第１の起動履歴記憶部に記憶される補正前の情報の一例を示す図である。
【図７】第１の起動履歴記憶部に記憶される補正後の情報の一例を示す図である。
【図８】第２の仮起動処理の処理手順の一例を説明するためのフローチャートである。
【図９】第２の起動履歴記憶部に記憶される情報の一例を示す図である。
【図１０】サンプリング幅の判定処理の処理手順の一例を説明するためのフローチャートである。
【図１１】通常起動処理の処理手順の一例を説明するためのフローチャートである。
【発明を実施するための形態】
【００１０】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における画像形成装置のハードウェア構成例を示す図である。図１において、画像形成装置１０は、コントローラ１１、スキャナ１２、プリンタ１３、モデム１４、操作パネル１５、ネットワークインタフェース１６、及びＳＤカードスロット１７等のハードウェアを有する。
【００１１】
コントローラ１１は、ＣＰＵ１１１、ＲＡＭ１１２、ＲＯＭ１１３、ＨＤＤ１１４、及びＮＶＲＡＭ１１５等を有する。ＲＯＭ１１３には、各種のプログラムやプログラムによって利用されるデータ等が記憶されている。ＲＡＭ１１２は、プログラムをロードするための記憶領域や、ロードされたプログラムのワーク領域等として用いられる。ＣＰＵ１１１は、ＲＡＭ１１２にロードされたプログラムを処理することにより、各種の機能を実現する。ＨＤＤ１１４には、プログラムやプログラムが利用する各種のデータ等が記憶される。ＮＶＲＡＭ１１５には、各種の設定情報等が記憶される。
【００１２】
スキャナ１２は、原稿より画像データを読み取るためのハードウェア（画像読取手段）である。プリンタ１３は、印刷データを印刷用紙に印刷するためのハードウェア（印刷手段）である。モデム１４は、電話回線に接続するためのハードウェアであり、ＦＡＸ通信による画像データの送受信を実行するために用いられる。操作パネル１５は、ユーザからの入力の受け付けを行うためのボタン等の入力手段や、液晶パネル等の表示手段等を備えたハードウェアである。液晶パネルは、タッチパネル機能を有していてもよい。この場合、当該液晶パネルは、入力手段の機能をも兼ねる。ネットワークインタフェース１６は、ＬＡＮ等のネットワーク（有線又は無線の別は問わない。）に接続するためのハードウェアである。ＳＤカードスロット１７は、ＳＤカード８０に記憶されたプログラムを読み取るために利用される。すなわち、画像形成装置１０では、ＲＯＭ１１３に記憶されたプログラムだけでなく、ＳＤカード８０に記憶されたプログラムもＲＡＭ１１２にロードされ、実行されうる。なお、他の記録媒体（例えば、ＣＤ−ＲＯＭ又はＵＳＢ（Universal Serial Bus）メモリ等）によってＳＤカード８０が代替されてもよい。すなわち、ＳＤカード８０の位置付けに相当する記録媒体の種類は、所定のものに限定されない。この場合、ＳＤカードスロット１７は、記録媒体の種類に応じたハードウェアによって代替されればよい。
【００１３】
図２は、本発明の実施の形態における画像形成装置の機能構成例を示す図である。図２において、画像形成装置１０は、１以上のアプリ１２０、サービス部１３０、起動制御部１４０、及びリソース管理部１５０等を有する。これら各部は、画像形成装置１０にインストールされる１以上のプログラムが、ＣＰＵ１１１に実行させる処理により実現される。画像形成装置１０は、また、起動処理状態記憶部１６１、第１の起動履歴記憶部１６２、及び第２の起動履歴記憶部１６３等を利用する。これら各記憶部は、例えば、ＨＤＤ１１４、又は画像形成装置１０にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
【００１４】
アプリ１２０は、アプリケーションプログラムである。各アプリ１２０は、例えば、画像形成装置１０が有するハードウェア資源（ハードウェアリソース）等を利用して、ユーザにとって利便性の高いサービスを提供する。本実施の形態において、アプリ１２０は、優先アプリ１２０ａ、従属アプリ１２０ｂ、及び一般アプリ１２０ｃに分類される。
【００１５】
優先アプリ１２０ａは、複数のアプリ１２０の中で最初に操作パネル１５への表示権限を占有する一つのアプリ１２０である。複数のアプリ１２０が有る場合、いずれを優先アプリ１２０ａとするかについては、例えば、画像形成装置１０の管理者等によって設定される。例えば、ＮＶＲＡＭ１１５又はＨＤＤ１１４等に、優先アプリ１２０ａとするアプリ１２０の識別情報が記憶されている。
【００１６】
従属アプリ１２０ｂは、優先アプリ１２０ａと連携して、ユーザにサービスを提供するアプリ１２０である。例えば、優先アプリ１２０ａが、ユーザからの指示に応じて印刷又はスキャンを実行するアプリ１２０である場合に、印刷又はスキャンに関する画像処理を実行するアプリ１２０が、従属アプリ１２０ｂであってもよい。優先アプリ１２０ａは、従属アプリ１２０ｂの機能を使用するため、優先アプリ１２０ａのサービスをユーザに提供するためには、優先アプリ１２０ａと従属アプリ１２０ｂとの双方の起動が完了している必要が有る。なお、従属アプリ１２０ｂは、複数のアプリ１２０であってもよい。また、従属アプリ１２０ｂ間において従属関係が存在してもよい。
【００１７】
一般アプリ１２０ｃは、優先アプリ１２０ａ及び従属アプリ１２０ｂとは依存関係を有さないアプリ１２０である。すなわち、一般アプリ１２０ｃと、優先アプリ１２０ａ及び従属アプリ１２０ｂとの挙動は相互に独立しており、一方のプロセスは他方のプロセスとの待ち合わせを行うことはない。但し、優先アプリ１２０ａ及び従属アプリ１２０ｂと一般アプリ１２０ｃとは、それぞれの起動時をも含めて、ＣＰＵ１１１等のハードウェアリソース（ハードウェア資源）を共有する。なお、一般アプリ１２０ｃは、複数のアプリ１２０であってもよい。また、一般アプリ１２０ｃの間において従属関係が存在してもよい。
【００１８】
サービス部１３０は、画像形成装置１０を制御するためのインタフェース（ＡＰＩ（Application Program Interface））をアプリ１２０に提供する。サービス部１３０は、呼び出されたインタフェースに対応する処理を実行する。例えば、サービス部１３０は、省エネに関するインタフェースや、スキャン、印刷等に関するインタフェース等を有する。サービス部１３０は複数のプロセスによって構成されてもよい。なお、各アプリ１２０は、サービス部１３０の機能を利用するため、サービス部１３０の起動処理は、各アプリ１２０の起動処理が完了する前に完了していることが望ましい。
【００１９】
起動制御部１４０は、サービス部１３０及び各アプリ１２０等の各部の起動処理の開始、起動処理の停止、及び起動処理の再開等を制御する。起動制御部１４０は、各部の動作を制御可能なプロセス・スレッドスケジューラのような、ＯＳ（Operating System）の一部によって実現されてもよい。また、或る一つのアプリ１２０が、起動制御部１４０であってもよい。起動制御部１４０がアプリ１２０である場合には、サービス部１３０及び他の各アプリ１２０が、自身の起動を停止・再開できるインタフェースを有しており、起動制御部１４０が、当該インタフェースを介して、各部の動作を制御してもよい。
【００２０】
本実施の形態において、起動制御部１４０は、画像形成装置１０の起動時における、サービス部１３０及び各アプリ１２０の起動処理に関して、第１の仮起動、第２の仮起動、及び通常起動というモードを有する。第１の仮起動では、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂ、並びに一般アプリ１２０ｃのそれぞれのプログラムに関して、直列的に起動処理が実行される。直列的実行されるそれぞれの起動処理において、一定期間ごとのＣＰＵ１１１の使用率（以下、「リソース使用率」という。）を示す履歴情報（リソース使用率の時系列データ）が生成され、生成された履歴情報が第１の起動履歴記憶部１６２に記憶される。
【００２１】
第２の仮起動では、第１の仮起動において第１の起動履歴記憶部１６２に記憶された履歴情報に基づいて、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂ、並びに一般アプリ１２０ｃのそれぞれのプログラムに関して、並列的に起動処理が実行される。但し、起動処理に関して相対的に優先度の低いプログラムは、起動処理に関して相対的に優先度が高いプログラムに対して十分にリソースが割り当てられており、かつ、リソースに空きが有る期間において、起動処理の進行が許可される。相対的に優先度が高いプログラムによるリソース使用率に余裕が有る期間は、第１の仮起動において記憶された履歴情報に基づいて特定される。第２の仮起動では、このような並列処理が行われる過程における一定期間ごとの各プログラムに係るリソース使用率を示す履歴情報が生成され、生成された履歴情報が第２の起動履歴記憶部１６３に記憶される。なお、本実施の形態において、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂ、並びに一般アプリ１２０ｃの中で、起動処理に関して優先度が最も高いのは、サービス部１３０である。２番目に優先度が高いのは、優先アプリ１２０ａ及び従属アプリ１２０ｂである。
【００２２】
通常起動では、第２の起動履歴記憶部１６３に記憶された情報に基づいて、第２の仮起動と同様に並列的な起動処理が実行される。通常起動では、履歴情報の生成が行われない点が、第２の仮起動と異なる。
【００２３】
なお、第１の仮起動及び第２の仮起動は、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂの優先度の順で、これらの起動処理をなるべく短時間で終了させるための、優先アプリ１２０ａ及び従属アプリ１２０ｂと、一般アプリ１２０ｃとのそれぞれの起動処理の進行のタイミング（換言すれば、それぞれへのリソースの割り当てのタイミング）を決定するための情報を得るために実行される。斯かるタイミングを求めるために、第１の仮起動及び第２の仮起動は、複数回交互に繰り返される可能性が有る。
【００２４】
なお、起動処理とは、プログラムが起動されてから定常状態に至るまでに実行される初期化処理等を含む処理である。定常状態とは、プログラムに係る機能を提供可能な状態である。例えば、何らかの処理の契機となるイベントの発生待ちの状態が定常状態の一例である。
【００２５】
リソース管理部１５０は、画像形成装置１０のリソース情報（ＣＰＵ１１１の使用率やＩ／Ｏバッファの使用率等）を有している。リソース管理部１５０は、ＯＳ（Operating System）の一部によって実現されてもよい。リソース管理部１５０は、起動制御部１４０からリソース情報の問い合わせを受けると、直近のサンプリング区間におけるリソース情報を返答する。又は、リソース管理部１５０が、定期的に、リソース情報を、起動制御部１４０等に通知してもよい。
【００２６】
以下、画像形成装置１０が実行する処理手順について説明する。図３は、画像形成装置の起動時の処理手順の一例を説明するためのフローチャートである。
【００２７】
画像形成装置１０が起動時において、起動制御部１４０は、サービス部１３０及び各アプリ１２０の起動処理の開始前に、起動処理状態記憶部１６１を参照して、画像形成装置１０の起動処理状態を確認する（Ｓ１０１）。
【００２８】
図４は、起動処理状態記憶部の構成例を示す図である。図４において、起動処理状態記憶部１６１は、仮起動終了フラグ、第１の仮起動回数、及び第２の仮起動回数等を記憶する。
【００２９】
仮起動終了フラグは、第１の仮起動又は第２の仮起動の実行の要否を示すパラメータであり、「０」又は「１」の値を有する。「０」は、第１の仮起動又は第２の仮起動を実行する必要が有ることを示す。「１」は、第１の仮起動及び第２の仮起動の目的が達成され、第１の仮起動及び第２の仮起動のいずれをも実行する必要がないことを示す。第１の仮起動回数は、第１の仮起動の実行回数である。第２の仮起動回数は、第２の仮起動の実行回数である。
【００３０】
ステップＳ１０１では、仮起動終了フラグの値が１であるか、又は第２の仮起動回数が閾値α以上であるか否かが判定される。閾値αは、第１の仮起動及び第２の仮起動が無限に繰り返されることを回避するための、第１の仮起動及び第２の仮起動の実行回数に対する上限値である。
【００３１】
仮起動終了フラグの値が１である場合、又は第２の仮起動回数が閾値α以上である場合には（Ｓ１０１でＹｅｓ）、起動制御部１４０は、サービス部１３０及び各アプリ１２０に関する起動処理について、通常起動処理を実行する（Ｓ１０２）。仮起動終了フラグの値が１でなく、かつ、第２の仮起動回数が閾値α未満である場合（Ｓ１０１でＮｏ）、起動制御部１４０は、第２の仮起動回数が、第１の仮起動回数未満であるか否かを判定する（Ｓ１０３）。第１の仮起動と第２の仮起動とは、交互に実行されるところ、ステップＳ１０３では、Ｎ回目の第１の仮起動に対応する第２の仮起動の実行の有無が判定される。第２の仮起動回数が、第１の仮起動回数未満である場合（Ｓ１０３でＹｅｓ）、起動制御部１４０は、サービス部１３０及び各アプリ１２０に関する起動処理について、第２の仮起動処理を実行する（Ｓ１０４）。一方、第２の仮起動回数と、第１の仮起動回数とが一致する場合（Ｓ１０３でＮｏ）、起動制御部１４０は、サービス部１３０及び各アプリ１２０に関する起動処理について、第１の仮起動処理を実行する（Ｓ１０５）。
【００３２】
続いて、ステップＳ１０５の詳細について説明する。図５は、第１の仮起動処理の処理手順の一例を説明するためのフローチャートである。
【００３３】
ステップＳ２０１において、起動制御部１４０は、サービス部１３０、優先アプリ１２０ａ、従属アプリ１２０ｂ、及び一般アプリ１２０ｃのそれぞれのプロセスを生成して、それぞれに関して、起動処理の進行を停止しておく。プロセスの生成は、ｆｏｒｋ−ｅｘｅｃを用いて実行されてもよい。また、起動処理の進行の停止は、サービス部１３０、優先アプリ１２０ａ、従属アプリ１２０ｂ、及び一般アプリ１２０ｃのそれぞれのＣＰＵ１１１等の利用権限を取り上けることにより実行されてもよい。又は、サービス部１３０、優先アプリ１２０ａ、従属アプリ１２０ｂ、及び一般アプリ１２０ｃ等が、処理の停止及び再開のためのインタフェース（例えば、メソッド）を有している場合には、起動制御部１４０が停止のためのインタフェースを呼び出すことにより、起動処理の進行の停止が実行されてもよい。
【００３４】
続いて、起動制御部１４０は、変数ｔ１及びｔ２のそれぞれに対し、０を代入する。変数ｔ１は、サービス部１３０の起動処理の経過時間を記憶するための変数である。変数ｔ２は、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理の経過時間を記憶するための変数である。なお、第１の仮起動処理では、それぞれの起動処理が直列的に実行されるが、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理については、同時に（並列的に）実行される。優先アプリ１２０ａ及び従属アプリ１２０ｂは、実質的に一体不可分の関係に有るからである。
【００３５】
続いて、起動制御部１４０は、サービス部１３０の起動処理を再開させる（Ｓ２０３）。その結果、サービス部１３０の起動処理が進行を開始する。続いて、起動処理は、サンプリング幅の判定処理を実行する（Ｓ２０４）。サンプリング幅とは、リソース使用率を計測又は観測する一定期間の時間幅をいう。なお、当該一定期間を「サンプリング区間」という。サンプリング幅の判定処理の詳細については後述されるが、１回目の第１の仮起動において、サンプリング幅は、固定的に１０００（ミリ秒）である。以下、サンプリング幅を、「Δｔ」によって表現する。
【００３６】
続いて、起動制御部１４０は、Δｔ分の時間の経過を待機する（Ｓ２０５）。この間、サービス部１３０の起動処理は進行する。続いて、起動制御部１４０は、ｔ１からｔ１＋Δｔまでのサンプリング区間における、サービス部１３０によるリソース使用率をリソース管理部１５０から取得し、取得されたリソース使用率を第１の起動履歴記憶部１６２に記憶する（Ｓ２０６）。続いて、サービス部１３０の起動処理が完了していなければ（Ｓ２０７でＮｏ）、起動制御部１４０は、ｔ１＋Δｔ１をｔ１に代入し（Ｓ２０８）、ステップＳ２０４以降を繰り返す。ステップＳ２０４〜Ｓ２０６、及びＳ２０８は、サービス部１３０の起動処理が完了するまで繰り返される（Ｓ２０７）。その結果、第１の起動履歴記憶部１６２には、サービス部１３０の起動処理の期間におけるΔｔ刻みのリソース使用率が記憶される。なお、サービス部１３０の起動処理の完了は、サービス部１３０から発生するイベントを起動制御部１４０が受信することで検知されてもよい。又は、サービス部１３０に関して定期的に取得されるリソースの使用率が安定した場合に、起動処理が完了したとみなされてもよい。
【００３７】
サービス部１３０の起動処理が完了すると（Ｓ２０７でＹｅｓ）、起動制御部１４０は、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理を再開させる（Ｓ２０９）。続いて、ステップＳ２１０〜Ｓ２１４では、優先アプリ１２０ａ及び従属アプリ１２０ｂが対象とされて、ステップＳ２０４〜Ｓ２０８と同様の処理が実行される。なお、１回目の第１の仮起動において、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理に関する各サンプリング区間のサンプリング幅は、サービス部１３０の起動処理に関するサンプリング幅と同様、固定的に１０００（ミリ秒）である。
【００３８】
また、ステップＳ２０６に対応するステップＳ２１２では、ｔ２からｔ２＋Δｔまでのサンプリング区間における優先アプリ１２０ａ及び従属アプリ１２０ｂリソース使用率が取得され、第１の起動履歴記憶部１６２に記憶される。更に、ステップＳ２０８に対応するステップＳ２１４では、ｔ２＋Δｔが、ｔ２に代入される。
【００３９】
優先アプリ１２０ａ及び従属アプリ１２０ｂの双方の起動処理が完了すると（Ｓ２１３でＹｅｓ）、起動制御部１４０は、今回の第１の仮起動において、第１の起動履歴記憶部１６２に記憶された情報を補正する（Ｓ２１５）。補正前において、すなわち、優先アプリ１２０ａ及び従属アプリ１２０ｂの双方の起動処理が完了した時点（Ｓ２１３でＹｅｓ）において、第１の起動履歴記憶部１６２には、例えば、図６に示されるような情報が記憶されている。
【００４０】
図６は、第１の起動履歴記憶部に記憶される補正前の情報の一例を示す図である。図６において、（１）は、ステップＳ２０６において記憶される情報（以下、「サービス部起動履歴情報」という。）の一例である。サービス部起動履歴情報は、ｔ１に基づく各サンプリング区間の開始時期及び終了時期（ｔ１〜ｔ１＋Δｔ）に対応付けて、サービス部１３０によるリソース使用率を示す情報である。
【００４１】
また、（２）は、ステップＳ２１２において記憶される情報（以下、「優先アプリ起動履歴情報」という。）の一例である。優先アプリ起動履歴情報は、ｔ２に基づくサンプリング区間の開始時期及び終了時期（ｔ２〜ｔ２＋Δｔ）に対応付けて、優先アプリ１２０ａ及び従属アプリ１２０ｂによるリソース使用率を示す情報である。
【００４２】
なお、第１の仮起動では、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂ、並びに一般アプリ１２０ｃの起動処理が直列的に実行されるため、（１）に示される情報は、サービス部１３０が「必要とする」リソース使用率の時系列の情報であるといえる。また、（２）は、優先アプリ１２０ａ及び従属アプリ１２０ｂが「必要とする」リソース使用率の時系列の情報であるといえる。
【００４３】
ステップＳ２１５では、優先アプリ起動履歴情報（図６の（２））について補正が行われる。具体的には、ｔ１とｔ２との時間軸が合わせられた状態で、サービス部１３０のリソース使用率と、優先アプリ１２０ａ及び従属アプリ１２０ｂのリソース使用率と、コンテキストスイッチによるコスト（リソース使用率）の推定値Ｃとの合計が、１００％を超えるサンプリング区間の有無が判定される。該当するサンプリング区間が有る場合、１００％を超えた分が、次のサンプリング区間に持ち越される。持ち越しの結果、次のサンプリング区間の合計が１００％を超えてしまう場合、更に、超えた分が次のサンプリング区間に持ち越される。その結果、例えば、図６に示される情報は、図７に示されるように補正される。
【００４４】
図７は、第１の起動履歴記憶部に記憶される補正後の情報の一例を示す図である。図７において、コンテキストスイッチのコストの推定値Ｃの値は、１０％である。なお、Ｃの値は、ＣＰＵ１１１の仕様等に基づいて、適切な値が設定されてもよい。
【００４５】
図６において、ｔ１＝ｔ２＝０〜１０００のサンプリング区間において、サービス部１３０に十分なリソースを割り当てた後の残りは、Ｃ＝１０を考慮すると、１００−（８０＋１０）＝１０％である。したがって、図７の（２）において、ｔ２＝０〜１０００のサンプリング区間のリソース使用率は、１０％に補正されている。但し、図６の（２）において、ｔ２＝０〜１０００のサンプリング区間のリソース使用率は６０％であるため、６０−１０＝５０％の余剰が発生する。
【００４６】
次のサンプリング区間（ｔ２＝１０００〜２０００）において、サービス部１３０に十分なリソースを割り当てた後の残りは、Ｃ＝１０を考慮すると、１００−（７０＋１０）＝２０％である。したがって、図７の（２）において、ｔ２＝１０００〜２０００のサンプリング区間のリソース使用率は、２０％に補正されている。但し、図６の（２）において、ｔ２＝１０００〜２０００のサンプリング区間のリソース使用率は７０％であるため、７０−２０＝５０％の余剰が発生する。前のサンプリング区間から持ち越された余剰と合わせると、余剰の合計は、１００％である。
【００４７】
次のサンプリング区間（ｔ２＝２０００〜３０００）においては、サービス部１３０の起動処理は終了している。したがって、優先アプリ１２０ａ及び従属アプリ１２０ｂに対して優先してリソースが割り当てられる。当該サンプリング区間において、優先アプリ１２０ａ及び従属アプリ１２０ｂが必要とするリソース使用率は、３０％である。但し、前のサンプリング区間までの余剰分（１００％）と合わせると１３０％である。なお、当該サンプリング区間では、サービス部１３０の起動処理は完了しているため、コンテキストスイッチのコストは考慮されなくてよい。したがって、図７の（２）において、当該サンプリング区間のリソース使用率は、１００％に補正されている。ここで、１３０−１００＝３０％の余剰が発生する。
【００４８】
当該余剰分を持ち越すために、ｔ２＝３０００〜４０００のサンプリング区間が追加され、当該サンプリング区間に当該余剰分が割り当てられる。その結果、図７の（２）において、当該サンプリング区間に、３０％が割り当てられている。
【００４９】
続いて、起動制御部１４０は、起動処理状態記憶部１６１に記憶されている第１の仮起動回数に１を加算する（Ｓ２１６）。続いて、起動制御部１４０は、一般アプリ１２０ｃの起動処理を再開する（Ｓ２１７）。一般アプリ１２０ｃについても、サンプリング区間ごとにリソース使用率が取得及び記憶されてもよい。
【００５０】
なお、優先アプリ１２０ａ及び従属アプリ１２０ｂの双方の起動処理が完了した時点において、ユーザは、画像形成装置１０において、優先アプリ１２０ａ及び従属アプリ１２０ｂを利用することができる。すなわち、第１の仮起動は、サービス部１３０及び各アプリ１２０の起動処理の実行後における画像形成装置１０の動作に対して、特段の影響は及ぼさない。したがって、第１の仮起動が行われた場合であっても、ユーザは、通常通り画像形成装置１０を利用することができる。この点は、第２の仮起動についても同様である。
【００５１】
続いて、図３のステップＳ１０４の詳細について説明する。図８は、第２の仮起動処理の処理手順の一例を説明するためのフローチャートである。
【００５２】
ステップＳ３０１〜Ｓ３０４は、図５のステップＳ２０１〜Ｓ２０４と同様である。但し、ステップＳ３０１では、サービス部１３０のプロセスの優先度が１番目とされ、優先アプリ１２０ａ及び従属アプリ１２０ｂのプロセスの優先度が２番目とされ、一般アプリ１２０ｃのプロセスの優先度を３番目以降とされてもよい。なお、１回目の第２の仮起動のステップＳ３０４において判定されるサンプリング幅は、１回目の第１の仮起動と同様に、固定的に１０００（ミリ秒）である。
【００５３】
ステップＳ３０５において、起動制御部１４０は、ｔ１〜ｔ１＋Δｔにおけるサービス部１３０のリソース使用率を、起動処理状態記憶部１６１のサービス部起動履歴情報（図７の（１））から取得し、取得された値を変数Ｒに代入する。ｔ１が０である場合、図４の（１）の０〜１０００に対する「６０％」が取得される。
【００５４】
続いて、起動制御部１４０は、Ｒ＋Ｃの値が１００％未満であるか、又はサービス部１３０の起動処理が完了済みであるか否かを判定する（Ｓ３０６）。ここで、Ｒ＋Ｃの値が１００％未満であるかという条件は、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理に対してリソース（ＣＰＵ１１１）を割り当てる余裕の有無を判定するための条件である。Ｃは、図７において説明した、コンテキストスイッチによるリソース使用率の推定値（Ｃ＝１０％）である。すなわち、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が再開された場合、ＣＰＵ１１１に関してコンテキストスイッチが発生するため、当該コンテキストスイッチのコストを考慮して、上記の余裕の有無が判定される。
【００５５】
また、サービス部１３０の起動処理が完了済みであるか否かが判定されるのは、サービス部１３０の起動処理が完了済みであれば、Ｒ＋Ｃの値に関わらず、リソースは、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理に優先的に割り当てられるべきだからである。
【００５６】
Ｒ＋Ｃの値が１００％未満である場合、又はサービス部１３０の起動処理が完了済みである場合（Ｓ３０６でＹｅｓ）、起動制御部１４０は、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理を再開させる（Ｓ３０７）。この際、起動制御部１４０は、ｔ１〜ｔ１＋Δｔ１のサンプリング区間において、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理を再開したことを、第１の起動履歴記憶部１６２に記憶する。なお、直前のサンプリング区間において当該起動処理が再開されている場合、ステップＳ３０７は実行されなくてもよい。
【００５７】
ここで、サービス部１３０の起動処理の期間において、ステップＳ３０７が実行された場合、サービス部１３０の起動処理と、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理とは、並列的に実行される。すなわち、第２の仮起動では、サービス部１３０の起動処理の期間において、リソースに余裕（残量）が有るのであれば、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が再開されて、リソースが有効活用される。そうすることで、サービス部１３０の起動処理が開始されてから、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動が完了するまでの所要時間の短縮が図られる。
【００５８】
続いて、起動制御部１４０は、ｔ２〜ｔ２＋Δｔのサンプリング区間に関して第１の起動履歴記憶部１６２に記憶されている優先アプリ起動履歴情報（図７の（２））に示される、優先アプリ１２０ａ及び従属アプリ１２０ｂのリソース使用率を変数Ｒに加算した値を、変数Ｒに代入する（Ｓ３０８）。ステップＳ３０８が最初に実行される場合、０〜１０００（ミリ秒）における優先アプリ１２０ａ及び従属アプリ１２０ｂのリソース使用率が、変数Ｒに代入される。なお、第１の起動履歴記憶部１６２に記憶されている情報に関して、第２の仮起動において使用されるのは、補正後の情報である。
【００５９】
一方、Ｒ＋Ｃが１００％以上であり、かつ、サービス部１３０の起動処理が完了していない場合（Ｓ３０６でＮｏ）、起動制御部１４０は、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理を停止させる（Ｓ３０９）。この際、起動制御部１４０は、ｔ１〜ｔ１＋Δｔ１のサンプリング区間において、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理を停止したことを、第２の起動履歴記憶部１６３に記憶する。なお、直前のサンプリング区間において当該起動処理が停止されている場合、ステップＳ３０９は実行されなくてもよい。
【００６０】
続いて、Ｒの値が１００％未満であるか、又は優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が完了済みであるか否かを判定する（Ｓ３１０）。ステップＳ３１０の判定は、一般アプリ１２０ｃの起動処理を再開可能であるか否かの判定である。なお、ステップＳ３１０において、１００％との比較対象がＲ＋ＣではなくＲであるのは、一般アプリ１２０ｃの起動処理が更に追加される場合のコンテキストスイッチのコストは無視できる程度であると考えられるからである。但し、当該コストが無視できない程度であれば、Ｒに対して当該コストの推定値が加算された結果が、１００％と比較されてもよい。
【００６１】
Ｒの値が１００％未満である場合、又は優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が完了済みである場合（Ｓ３１０でＹｅｓ）、起動制御部１４０は、一般アプリ１２０ｃの起動処理を再開させる（Ｓ３１１）。この際、起動制御部１４０は、ｔ１〜ｔ１＋Δｔ１のサンプリング区間において、一般アプリ１２０ｃの起動処理を再開したことを、第２の起動履歴記憶部１６３に記憶する。なお、直前のサンプリング区間において当該起動処理が再開されている場合、ステップＳ３１１は実行されなくてもよい。
【００６２】
一方、Ｒが１００％以上であり、かつ、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が完了していない場合（Ｓ３１０でＮｏ）、起動制御部１４０は、一般アプリ１２０ｃの起動処理を停止させる（Ｓ３１２）。この際、起動制御部１４０は、ｔ１〜ｔ１＋Δｔ１のサンプリング区間において、一般アプリ１２０ｃの起動処理を停止したことを、第２の起動履歴記憶部１６３に記憶する。なお、直前のサンプリング区間において当該起動処理が再開されている場合、ステップＳ３１２は実行されなくてもよい。
【００６３】
ステップＳ３１１又はＳ３１２に続いて、起動制御部１４０は、Δｔ分の時間の経過を待機する（Ｓ３１３）。なお、ステップＳ３０４〜Ｓ３１２までの処理時間の経過は、便宜上、無視して考える。したがって、ステップＳ３１３では、ステップＳ３０４の開始時からのΔｔ分の時間の経過が待機される。
【００６４】
続いて、起動制御部１４０は、ｔ１〜ｔ１＋Δｔのサンプリング区間における、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂ、並びに一般アプリ１２０ｃのそれぞれのリソース使用率を、リソース管理部１５０から取得し、取得された値を第２の起動履歴記憶部１６３に記憶する（Ｓ３１４）。続いて、起動制御部１４０は、ｔ１＋Δｔをｔ１に代入する（Ｓ３１５）。続いて、起動制御部１４０は、ｔ２＋Δｔをｔ２に代入する（Ｓ３１６）。
【００６５】
続いて、起動制御部１４０は、サービス部１３０、並びに優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が完了したか否かを判定する（Ｓ３１７）。サービス部１３０、又は優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が完了していない場合（Ｓ３１７でＮｏ）、ステップＳ３０４以降が繰り返される。サービス部１３０、並びに優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が完了した場合（Ｓ３１７でＹｅｓ）、起動制御部１４０は、ステップＳ３０４において、いずれかのサンプリング区間において、サンプリング区間の分割（サンプリング幅の短縮）が行われたか否かを判定する（Ｓ（Ｓ３１８）。分割されたサンプリング区間が無い場合（Ｓ３１８でＮｏ）、起動制御部１４０は、起動処理状態記憶部１６１に記憶されている起動処理フラグの値を１にする（Ｓ３１９）。したがって、この場合、次回以降における画像形成装置１０の起動時には、通常起動処理が実行される。なお、サンプリング区間の分割については、後述される。
【００６６】
ステップＳ３１８でＹｅｓの場合、又はステップＳ３１９に続いて、起動制御部１４０は、起動処理状態記憶部１６１に記憶されている第２の仮起動回数に１を加算する（Ｓ３２０）。続いて、起動制御部１４０は、一般アプリ１２０ｃの起動処理を再開させる（Ｓ３２１）。但し、既に当該起動処理が再開されている場合、又は一般アプリ１２０ｃの起動処理が既に完了している場合には、ステップＳ３２１は実行されなくてよい。
【００６７】
第２の仮起動の終了時において、第２の起動履歴記憶部１６３には、例えば、図９に示されるような情報が記憶される。
【００６８】
図９は、第２の起動履歴記憶部に記憶される情報の一例を示す図である。図９において、（１）及び（２）は、ステップＳ３１４において記憶される情報の一例である。（１）には、各サンプリング区間（ｔ１〜ｔ１＋Δｔ）に対応付けられて、サービス部１３０によるリソース使用率が示されている。また、（２）には、各サンプリング区間に対応付けられて、優先アプリ１２０ａ及び従属アプリ１２０ｂによるリソース使用率が示されている。なお、（２）において、各サンプリング区間の開始時期及び終了時期については、ｔ１に基づく値と、ｔ２に基づく値とが記憶されている。
【００６９】
（３）は、ステップ３０７、Ｓ３０９、Ｓ３１１、及びＳ３１２において記憶される情報の一例である。すなわち、（３）には、サンプリング区間ごとに、優先アプリ１２０ａ及び従属アプリ１２０ｂと、一般アプリ１２０ｃとのそれぞれについて、起動処理を再開したのか又は停止したのかを示す情報が示されている。以下、（３）に示される情報を、「起動制御情報」という。
【００７０】
例えば、図７より、ｔ１に関する０〜１０００のサンプリング区間において、サービス部１３０のリソース使用率は、８０である。すなわち、８０＋Ｃ（ここで、Ｃ＝１０）は、１００％未満である。したがって、当該サンプリング区間に関しては、ステップＳ３０７において、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理は再開される。ここで、ｔ１に関して０〜１０００において並列的に実行される優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理は、ｔ２＝０〜１０００に関する起動処理である。図７より、当該サンプリング区間において、優先アプリ１２０ａ及び従属アプリ１２０ｂのリソース使用率は、１０である。すなわち、８０＋Ｃ＋１０は、１００％以上である。したがって、この場合、ステップＳ３１１において、一般アプリ１２０ｃの起動処理は停止される。これらの履歴が、図９の（３）の０〜１０００の列に示されている。
【００７１】
また、図７より、ｔ１に関する０〜１０００のサンプリング区間において、サービス部１３０のリソース使用率は、７０である。すなわち、７０＋Ｃは、１００％未満である。したがって、したがって、当該サンプリング区間に関しては、ステップＳ３０７において、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理は再開される。ここで、ｔ１に関して１０００〜２０００において並列的に実行される優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理は、ｔ２＝１０００〜２０００に関する起動処理である。図７より、当該サンプリング区間において、優先アプリ１２０ａ及び従属アプリ１２０ｂのリソース使用率は、２０である。すなわち、７０＋Ｃ＋２０は、１００％以上である。したがって、この場合、ステップＳ３１１において、一般アプリ１２０ｃの起動処理は停止される。これらの履歴が、図９の（３）の１０００〜２０００の列に示されている。
【００７２】
続いて、図５のステップＳ２０４及びＳ２１０、並びに図８のステップＳ３０４の詳細について説明する。
【００７３】
図１０は、サンプリング幅の判定処理の処理手順の一例を説明するためのフローチャートである。
【００７４】
ステップＳ４０１において、起動制御部１４０は、第１の仮起動であるか否かによって処理を分岐させる。第１の仮起動である場合（Ｓ４０１でＹｅｓ）、起動制御部１４０は、起動処理状態記憶部１６１に記憶されている第１の仮起動回数が１未満であるか否かを判定する（Ｓ４０２）。第１の仮起動回数が１未満である場合（Ｓ４０２でＹｅｓ）、起動制御部１４０は、サンプリング幅は１０００ミリ秒であると判定する。なお、本実施の形態において、サンプリング幅の初期値は、１０００ミリ秒であるが、他の値が、サンプリング幅の初期値とされてもよい。
【００７５】
一方、第１の仮起動回数が１以上である場合（Ｓ４０２でＮｏ）、起動制御部１４０は、対象区間に関する、前回の第１の仮起動時におけるサンプリング幅を、Δｔに代入する（Ｓ４０４）。前回の第１の仮起動時とは、第１の仮起動回数が、今回よりも１小さい状態における第１の仮起動時をいう。また、図５のステップＳ２０４から図１０の処理が呼び出される場合、当該呼び出し時点におけるｔ１を開始時点とするサンプリング区間が、対象区間である、図５のステップＳ２１０から図１０の処理が呼び出される場合、当該呼び出し時点におけるｔ２を開始時点とするサンプリング区間が対象区間である。
【００７６】
続いて、起動制御部１４０は、対象区間が、サービス部１３０の起動処理の期間に含まれるか否かを判定する（Ｓ４０５）。図５のステップＳ２０４から図１０の処理が呼び出された場合、呼び出し時点におけるｔ１の値が、第１の起動履歴記憶部１６２に記憶されているサービス部起動履歴情報（図７の（１））を構成する最後のサンプリング区間の開始時点以下であるか否かが判定される。図７の（１）の例によれば、図１０の処理の呼び出し時におけるｔ１の値が１０００以下であれば、ステップＳ４０５の判定は肯定的なものとなる。また、図５のステップＳ２０８から図１０の処理が呼び出された場合、呼び出し時点におけるｔ２の値が、第１の起動履歴記憶部１６２に記憶されているサービス部起動履歴情報（図７の（１））を構成する最後のサンプリング区間の開始時点以下であるか否かが判定される。図７の（１）の例によれば、図１０の処理の呼び出し時におけるｔ２の値が、１０００以下であれば、ステップＳ４０５の判定は肯定的なものとなる。
【００７７】
ステップＳ４０５の判定が肯定的である場合（Ｓ４０５でＹｅｓ）、起動制御部１４０は、前回の第１の仮起動時に関して第１起動状態記憶部に記憶されている、対象区間におけるサービス部１３０のリソース使用率を変数Ｒ１１に代入する（Ｓ４０６）。例えば、対象区間がｔ１＝０〜１０００であれば、図７の（１）より、８０％がＲ１１に代入される。
【００７８】
続いて、起動制御部１４０は、最後の第２の仮起動時に第２起動状態記憶部に記憶された、サービス部１３０の対象区間に関するリソース使用率を変数Ｒ１２に代入する（Ｓ４０７）。例えば、対象区間がｔ１＝０〜１０００であれば、図９の（１）より、７５％が取得される。
【００７９】
続いて、起動制御部１４０は、Ｒ１１＞Ｒ２１であるかを判定する（Ｓ４０８）。Ｒ１１＞Ｒ２１は、対象区間におけるサービス部１３０によるリソース使用率が、第１の仮起動時よりも第２の仮起動時の方が小さいか否かの判定である。
【００８０】
Ｒ１１＝８０、Ｒ１２＝７５である場合、Ｒ１１＞Ｒ１２である（Ｓ４０８でＹｅｓ）。この場合、起動制御部１４０は、Δｔを２で除することにより得られる値を、サンプリング幅とする（Ｓ４０９）。すなわち、サンプリング区間が分割される。一方、Ｒ１１≦Ｒ１２である場合（Ｓ４０８でＮｏ）、起動制御部１４０は、Δｔの値を変更しない。したがって、この場合、前回の対象区間と同じサンプリング幅が、今回の対象区間に対して適用される。
【００８１】
一方、ステップＳ４０５の判定が否定的である場合（Ｓ４０５でＮｏ）、起動制御部１４０は、前回の第１の仮起動時に関して第１起動状態記憶部に記憶されている、対象区間における優先アプリ１２０ａ及び従属アプリ１２０ｂのリソース使用率を変数Ｒ２１に代入する（Ｓ４１０）。図７によれば、ステップＳ４０５の判定が最初に否定的となるのは、図５において、ｔ２＝２０００である場合に、ステップＳ２１０が実行されるときである。この際の対象区間は、ｔ２＝２０００〜３０００である。図７（２）に示されるように、前回の第１の仮起動時の対象区間における優先アプリ１２０ａ及び従属アプリ１２０ｂのリソース使用率は、１００％である。したがって、１００が、Ｒ２１に代入される。
【００８２】
続いて、起動制御部１４０は、最後の第２の仮起動時において第２起動状態記憶部に記憶された、優先アプリ１２０ａ及び従属アプリ１２０ｂの対象区間に関するリソース使用率を変数Ｒ２２に代入する（Ｓ４１１）。例えば、対象区間がｔ２＝２０００〜３０００であれば、図９の（１）より、１００％がＲ２２に代入される。
【００８３】
続いて、起動制御部１４０は、Ｒ２１＞Ｒ２１であるかを判定する（Ｓ４１２）。Ｒ２１＞Ｒ２１は、対象区間における優先アプリ１２０ａ及び従属アプリ１２０ｂによるリソース使用率が、第１の仮起動時よりも第２の仮起動時の方が小さいか否かの判定である。
【００８４】
Ｒ２１＞Ｒ２２である場合（Ｓ４１２でＹｅｓ）、起動制御部１４０は、Δｔを２で除することにより得られる値を、サンプリング幅とする（Ｓ４１３）。すなわち、サンプリング区間が分割される。一方、Ｒ２１≦Ｒ２２である場合（Ｓ４１２でＮｏ）、起動制御部１４０は、Δｔの値を変更しない。したがって、この場合、前回の対象区間と同じサンプリング幅が、今回の対象区間に対して適用される。
【００８５】
ステップＳ４０８においてサンプリング区間を分割する理由について説明する。Ｒ１１＞Ｒ１２であるということは、第２の仮起動による並列処理において、サービス部１３０が対象区間において必要とするリソースが、サービス部１３０に割り当てられなかった状態であると推測される。
【００８６】
第２の仮起動時では、図８のステップＳ３０５及びＳ３０６より明らかなように、サービス部１３０の起動処理の期間において、リソースに空きが有る場合には、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が並列的に実行される。したがって、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂ、及び一般アプリ１２０ｃのそれぞれのプロセスの優先度を、サービス部１３０＞優先アプリ１２０ａ及び従属アプリ１２０ｂ＞一般アプリ１２０ｃとしておけば、基本的には、サービス部１３０に対して、所望通りのリソースが割り当てられる可能性が高い。それにも関わらず、サービス部１３０に対して割り当てられたリソースが、所望の値に満たないということは、原因として次のようなことが考えられる。
【００８７】
サンプリング区間ごとのリソース使用率は、当該サンプリング区間における平均値である。すなわち、瞬間的なリソース使用率は、当該サンプリング区間内において変動する。例えば、０〜１０００のサンプリング区間において、サービス部１３０のリソース使用率が８０％だとしても、０〜５００において７０％、５００〜１０００において９０％であるかもしれない。この場合、５００〜１０００においては、コンテキストスイッチのコストＣ＝１０％を考慮すれば、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理を実行する余裕は、本来であれば無かったことになる。それにも関わらず、第２の仮起動においては、当該区間において優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が実行されていたため、サービス部１３０には十分なリソースが割り当てられなかった可能性が考えられる。すなわち、この場合、５００〜１０００の区間において、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理を停止できれば、サービス部１３０には十分なリソースが割り当てられる可能性が有ると考えられる。
【００８８】
本実施の形態では、上記のような考えに基づいて、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理の再開及び停止を、更に短い時間幅で制御可能とするために、サンプリング区間の分割が行われるのである。ステップＳ４１３についても、同様の考えに基づき、一般アプリ１２０ｃの起動処理の再開及び停止を、更に短い時間幅で制御可能とするための処理である。
【００８９】
換言すれば、サービス部１３０の起動処理の期間に含まれるサンプリング区間が分割された場合、前回の第２の仮起動時において、当該サンプリング区間において、優先アプリ１２０ａ及び従属アプリ１２０ｂの起動処理が再開されていたとしても、いずれかの分割区間（分割期間）においては、当該起動処理が停止される。同様に、サービス部１３０の起動処理の完了後であって、優先アプリ１２０ａ及び従属アプリ１２０ｂの動処理の期間に含まれるサンプリング区間が分割された場合、前回の第２の仮起動時において、当該サンプリング区間において、一般アプリ１２０ｃの起動処理が再開されていたとしても、いずれかの分割区間においては、当該起動処理が停止される。
【００９０】
なお、いずれかのサンプリング区間に関して、ステップＳ４０９又はステップＳ４１３が実行された場合、図８のステップＳ３１８でＮｏとなる。
【００９１】
一方、第２の仮起動において図１０の処理が実行される場合（Ｓ４０１でＮｏ）、起動制御部１４０は、直前に実行された第１の仮起動において対象区間に関して判定されたサンプリング幅を、サンプリング幅として判定する（Ｓ４１４）。すなわち、対となる第１の仮起動と第２の仮起動との各サンプリング区間のサンプリング幅は一致する。
【００９２】
続いて、図３のステップＳ１０２の詳細について説明する。図１１は、通常起動処理の処理手順の一例を説明するためのフローチャートである。
【００９３】
ステップＳ５０１〜Ｓ５０３は、図５のステップＳ２０１〜Ｓ２０３又は図８のステップＳ３０１〜Ｓ３０３と同様である。但し、ステップＳ５０２において、変数ｔ２は初期化されなくてもよい。
【００９４】
続いて、起動制御部１４０は、第２の起動履歴記憶部１６３に記憶されている起動制御情報のうち、ｔ１を開始時点とするサンプリング区間（以下、「対象区間」という。）に係る情報を、第２の起動履歴記憶部１６３から取得する（Ｓ５０４）。ここで、起動制御情報は、仮起動終フラグが１に更新された際に実行された第２の仮起動において記憶された起動制御情報である。仮に、当該起動制御情報が、図９の（３）に示される通りであり、ｔ１＝０である場合、優先アプリ１２０ａ及び従属アプリ１２０ｂに関して「再開」を示し、一般アプリ１２０ｃに関して「停止」を示す情報が取得される。
【００９５】
続いて、起動制御部１４０は、取得された情報に基づいて、優先アプリ１２０ａ及び従属アプリ１２０ｂ、並びに一般アプリ１２０ｃの起動処理を再開又は停止させる（Ｓ５０５）。続いて、起動制御部１４０は、第２の起動履歴記憶部１６３に記憶されている起動制御情報において、次のサンプリング区間に対応する情報が有るか否かを判定する（Ｓ５０６）。次のサンプリング区間が有る場合（Ｓ５０６でＹｅｓ）、起動制御部１４０は、対象区間のサンプリング幅分の時間が経過するのを待機する（Ｓ５０７）。当該時間が経過すると（Ｓ５０７でＹｅｓ）、起動制御部１４０は、ｔ１に対して、対象区間のサンプリング幅を加算し（Ｓ５０８）ステップＳ５０４以降を繰り返す。
【００９６】
一方、ステップＳ５０６において、次のサンプリング区間が無い場合（Ｓ５０６でＮｏ）、図１１の処理は終了する。
【００９７】
上述したように、本実施の形態によれば、第１の仮起動によって、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂのそれぞれが、それぞれの起動処理の過程において必要とするリソース使用率の時系列情報が取得される。第２の仮起動においては、当該時系列情報に基づいて、起動処理が完了していないプログラムの中で、優先度が最高であるプログラムに対して、サンプリング区間ごとに、所望のリソース使用率が割り当てられるように、各プログラムの起動処理の再開及び停止が制御されつつ、各プログラムのリソース使用率が計測される。その結果、起動処理を並列化されたことによる影響の有無を確認することができる。例えば、起動処理が完了していないプログラムの中で、優先度が最高であるプログラムに関して、各サンプリング区間において所望のリソース使用率が割り当てられているか否かが確認可能となる。起動処理が並列化されることによる影響が有る場合には、当該影響が発生したサンプリング区間が細分化されて、第１の仮起動及び第２の仮起動が再実行される。
【００９８】
以上の処理が繰り返されることで、各プログラムの起動処理を並列化しつつ、優先度が相対的に低いプログラムの起動処理について、優先度が相対的に高いプログラムの起動処理が早期に終了させることができるような再開及び停止のタイミングを特定することができる。その結果、サービス部１３０又は優先アプリ１２０ａ等特定のプログラムの起動時間の遅延の可能性を低減させることができる。
【００９９】
なお、第２の仮起動が、通常起動として運用されてもよい。この場合の第２の仮起動では、第２の起動履歴記憶部１６３への情報の書き込みは行われなくてもよい。また、この場合、第１の仮起動が１回行われれば、通常起動が実行されるようにしてもよい。
【０１００】
また、本実施の形態では、第１の仮起動、第２の仮起動、及び通常起動は、それぞれ画像形成装置１０の起動時において実行される処理として説明したが、例えば、画像形成装置１０としては１回の起動が行われた後において、ソフトウェア群の再起動処理において、第１の仮起動、第２の仮起動、及び通常起動が実行されてもよい。
【０１０１】
なお、本実施の形態は、ＣＰＵ１１１以外のリソースに関して適用されてもよい。例えば、Ｉ／Ｏバッファの使用率や、メモリの使用率に関して本実施の形態が適用されてもよい。
【０１０２】
また、本実施の形態は、画像形成装置１０以外の情報処理装置（例えば、プロジェクタ、テレビ会議システム、電子黒板、デジタルカメラ、ＰＣ（Personal Computer）等）に関して適用されてもよい。
【０１０３】
また、本実施の形態において、使用率は、厳密な意味での使用率でなくてもよい。例えば、使用率の他に、使用の度合い又は使用の頻度等が把握可能な使用情報であってもよい。
【０１０４】
なお、本実施の形態において、サービス部１３０、優先アプリ１２０ａ及び従属アプリ１２０ｂ、又はサービス部１３０並びに優先アプリ１２０ａ及び従属アプリ１２０ｂは、第１のプログラムの一例である。優先アプリ１２０ａ及び従属アプリ１２０ｂ又は一般アプリ１２０ｃは、第２のプログラムの一例である。第１の仮起動は、第１の起動及び第３の起動の一例である。第２の仮起動は、第２の起動及び第３の起動の一例である。第１の履歴情報及び第３の履歴情報は、第１の起動履歴記憶部１６２に記憶される情報の一例である。第２の履歴情報及び第４の履歴情報は、第２の起動履歴記憶部１６３に記憶される情報の一例である。
【０１０５】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【０１０６】
１０          画像形成装置
１１          コントローラ
１２          スキャナ
１３          プリンタ
１４          モデム
１５          操作パネル
１６          ネットワークインタフェース
１７          ＳＤカードスロット
８０          ＳＤカード
１１１        ＣＰＵ
１１２        ＲＡＭ
１１３        ＲＯＭ
１１４        ＨＤＤ
１１５        ＮＶＲＡＭ
１２０        アプリ
１２０ａ      優先アプリ
１２０ｂ      従属アプリ
１２０ｃ      一般アプリ
１３０        サービス部
１４０        起動制御部
１５０        リソース管理部
１６１        起動処理状態記憶部
１６２        第１の起動履歴記憶部
１６３        第２の起動履歴記憶部
【先行技術文献】
【特許文献】
【０１０７】
【特許文献１】特開２０１４−１６４７１５号公報
【特許文献２】特開２０１０−７４３０３号公報
【図１】
0006435911.tif 000002
【図２】
0006435911.tif 000003
【図３】
0006435911.tif 000004
【図４】
0006435911.tif 000005
【図５】
0006435911.tif 000006
【図６】
0006435911.tif 000007
【図７】
0006435911.tif 000008
【図８】
0006435911.tif 000009
【図９】
0006435911.tif 000010
【図１０】
0006435911.tif 000011
【図１１】
0006435911.tif 000012