(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
以下、図面に基づいて本発明の実施の形態を説明する。
図1は、本発明の実施の形態における画像形成装置のハードウェア構成例を示す図である。
図1において、画像形成装置10は、コントローラ11、スキャナ12、プリンタ13、モデム14、操作パネル15、ネットワークインタフェース16、及びSDカードスロット17等のハードウェアを有する。
【0011】
コントローラ11は、CPU111、RAM112、ROM113、HDD114、及びNVRAM115等を有する。ROM113には、各種のプログラムやプログラムによって利用されるデータ等が記憶されている。RAM112は、プログラムをロードするための記憶領域や、ロードされたプログラムのワーク領域等として用いられる。CPU111は、RAM112にロードされたプログラムを処理することにより、各種の機能を実現する。HDD114には、プログラムやプログラムが利用する各種のデータ等が記憶される。NVRAM115には、各種の設定情報等が記憶される。
【0012】
スキャナ12は、原稿より画像データを読み取るためのハードウェア(画像読取手段)である。プリンタ13は、印刷データを印刷用紙に印刷するためのハードウェア(印刷手段)である。モデム14は、電話回線に接続するためのハードウェアであり、FAX通信による画像データの送受信を実行するために用いられる。操作パネル15は、ユーザからの入力の受け付けを行うためのボタン等の入力手段や、液晶パネル等の表示手段等を備えたハードウェアである。液晶パネルは、タッチパネル機能を有していてもよい。この場合、当該液晶パネルは、入力手段の機能をも兼ねる。ネットワークインタフェース16は、LAN等のネットワーク(有線又は無線の別は問わない。)に接続するためのハードウェアである。SDカードスロット17は、SDカード80に記憶されたプログラムを読み取るために利用される。すなわち、画像形成装置10では、ROM113に記憶されたプログラムだけでなく、SDカード80に記憶されたプログラムもRAM112にロードされ、実行されうる。なお、他の記録媒体(例えば、CD−ROM又はUSB(Universal Serial Bus)メモリ等)によってSDカード80が代替されてもよい。すなわち、SDカード80の位置付けに相当する記録媒体の種類は、所定のものに限定されない。この場合、SDカードスロット17は、記録媒体の種類に応じたハードウェアによって代替されればよい。
【0013】
図2は、本発明の実施の形態における画像形成装置の機能構成例を示す図である。
図2において、画像形成装置10は、1以上のアプリ120、サービス部130、起動制御部140、及びリソース管理部150等を有する。これら各部は、画像形成装置10にインストールされる1以上のプログラムが、CPU111に実行させる処理により実現される。画像形成装置10は、また、起動処理状態記憶部161、第1の起動履歴記憶部162、及び第2の起動履歴記憶部163等を利用する。これら各記憶部は、例えば、HDD114、又は画像形成装置10にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
【0014】
アプリ120は、アプリケーションプログラムである。各アプリ120は、例えば、画像形成装置10が有するハードウェア資源(ハードウェアリソース)等を利用して、ユーザにとって利便性の高いサービスを提供する。本実施の形態において、アプリ120は、優先アプリ120a、従属アプリ120b、及び一般アプリ120cに分類される。
【0015】
優先アプリ120aは、複数のアプリ120の中で最初に操作パネル15への表示権限を占有する一つのアプリ120である。複数のアプリ120が有る場合、いずれを優先アプリ120aとするかについては、例えば、画像形成装置10の管理者等によって設定される。例えば、NVRAM115又はHDD114等に、優先アプリ120aとするアプリ120の識別情報が記憶されている。
【0016】
従属アプリ120bは、優先アプリ120aと連携して、ユーザにサービスを提供するアプリ120である。例えば、優先アプリ120aが、ユーザからの指示に応じて印刷又はスキャンを実行するアプリ120である場合に、印刷又はスキャンに関する画像処理を実行するアプリ120が、従属アプリ120bであってもよい。優先アプリ120aは、従属アプリ120bの機能を使用するため、優先アプリ120aのサービスをユーザに提供するためには、優先アプリ120aと従属アプリ120bとの双方の起動が完了している必要が有る。なお、従属アプリ120bは、複数のアプリ120であってもよい。また、従属アプリ120b間において従属関係が存在してもよい。
【0017】
一般アプリ120cは、優先アプリ120a及び従属アプリ120bとは依存関係を有さないアプリ120である。すなわち、一般アプリ120cと、優先アプリ120a及び従属アプリ120bとの挙動は相互に独立しており、一方のプロセスは他方のプロセスとの待ち合わせを行うことはない。但し、優先アプリ120a及び従属アプリ120bと一般アプリ120cとは、それぞれの起動時をも含めて、CPU111等のハードウェアリソース(ハードウェア資源)を共有する。なお、一般アプリ120cは、複数のアプリ120であってもよい。また、一般アプリ120cの間において従属関係が存在してもよい。
【0018】
サービス部130は、画像形成装置10を制御するためのインタフェース(API(Application Program Interface))をアプリ120に提供する。サービス部130は、呼び出されたインタフェースに対応する処理を実行する。例えば、サービス部130は、省エネに関するインタフェースや、スキャン、印刷等に関するインタフェース等を有する。サービス部130は複数のプロセスによって構成されてもよい。なお、各アプリ120は、サービス部130の機能を利用するため、サービス部130の起動処理は、各アプリ120の起動処理が完了する前に完了していることが望ましい。
【0019】
起動制御部140は、サービス部130及び各アプリ120等の各部の起動処理の開始、起動処理の停止、及び起動処理の再開等を制御する。起動制御部140は、各部の動作を制御可能なプロセス・スレッドスケジューラのような、OS(Operating System)の一部によって実現されてもよい。また、或る一つのアプリ120が、起動制御部140であってもよい。起動制御部140がアプリ120である場合には、サービス部130及び他の各アプリ120が、自身の起動を停止・再開できるインタフェースを有しており、起動制御部140が、当該インタフェースを介して、各部の動作を制御してもよい。
【0020】
本実施の形態において、起動制御部140は、画像形成装置10の起動時における、サービス部130及び各アプリ120の起動処理に関して、第1の仮起動、第2の仮起動、及び通常起動というモードを有する。第1の仮起動では、サービス部130、優先アプリ120a及び従属アプリ120b、並びに一般アプリ120cのそれぞれのプログラムに関して、直列的に起動処理が実行される。直列的実行されるそれぞれの起動処理において、一定期間ごとのCPU111の使用率(以下、「リソース使用率」という。)を示す履歴情報(リソース使用率の時系列データ)が生成され、生成された履歴情報が第1の起動履歴記憶部162に記憶される。
【0021】
第2の仮起動では、第1の仮起動において第1の起動履歴記憶部162に記憶された履歴情報に基づいて、サービス部130、優先アプリ120a及び従属アプリ120b、並びに一般アプリ120cのそれぞれのプログラムに関して、並列的に起動処理が実行される。但し、起動処理に関して相対的に優先度の低いプログラムは、起動処理に関して相対的に優先度が高いプログラムに対して十分にリソースが割り当てられており、かつ、リソースに空きが有る期間において、起動処理の進行が許可される。相対的に優先度が高いプログラムによるリソース使用率に余裕が有る期間は、第1の仮起動において記憶された履歴情報に基づいて特定される。第2の仮起動では、このような並列処理が行われる過程における一定期間ごとの各プログラムに係るリソース使用率を示す履歴情報が生成され、生成された履歴情報が第2の起動履歴記憶部163に記憶される。なお、本実施の形態において、サービス部130、優先アプリ120a及び従属アプリ120b、並びに一般アプリ120cの中で、起動処理に関して優先度が最も高いのは、サービス部130である。2番目に優先度が高いのは、優先アプリ120a及び従属アプリ120bである。
【0022】
通常起動では、第2の起動履歴記憶部163に記憶された情報に基づいて、第2の仮起動と同様に並列的な起動処理が実行される。通常起動では、履歴情報の生成が行われない点が、第2の仮起動と異なる。
【0023】
なお、第1の仮起動及び第2の仮起動は、サービス部130、優先アプリ120a及び従属アプリ120bの優先度の順で、これらの起動処理をなるべく短時間で終了させるための、優先アプリ120a及び従属アプリ120bと、一般アプリ120cとのそれぞれの起動処理の進行のタイミング(換言すれば、それぞれへのリソースの割り当てのタイミング)を決定するための情報を得るために実行される。斯かるタイミングを求めるために、第1の仮起動及び第2の仮起動は、複数回交互に繰り返される可能性が有る。
【0024】
なお、起動処理とは、プログラムが起動されてから定常状態に至るまでに実行される初期化処理等を含む処理である。定常状態とは、プログラムに係る機能を提供可能な状態である。例えば、何らかの処理の契機となるイベントの発生待ちの状態が定常状態の一例である。
【0025】
リソース管理部150は、画像形成装置10のリソース情報(CPU111の使用率やI/Oバッファの使用率等)を有している。リソース管理部150は、OS(Operating System)の一部によって実現されてもよい。リソース管理部150は、起動制御部140からリソース情報の問い合わせを受けると、直近のサンプリング区間におけるリソース情報を返答する。又は、リソース管理部150が、定期的に、リソース情報を、起動制御部140等に通知してもよい。
【0026】
以下、画像形成装置10が実行する処理手順について説明する。
図3は、画像形成装置の起動時の処理手順の一例を説明するためのフローチャートである。
【0027】
画像形成装置10が起動時において、起動制御部140は、サービス部130及び各アプリ120の起動処理の開始前に、起動処理状態記憶部161を参照して、画像形成装置10の起動処理状態を確認する(S101)。
【0028】
図4は、起動処理状態記憶部の構成例を示す図である。
図4において、起動処理状態記憶部161は、仮起動終了フラグ、第1の仮起動回数、及び第2の仮起動回数等を記憶する。
【0029】
仮起動終了フラグは、第1の仮起動又は第2の仮起動の実行の要否を示すパラメータであり、「0」又は「1」の値を有する。「0」は、第1の仮起動又は第2の仮起動を実行する必要が有ることを示す。「1」は、第1の仮起動及び第2の仮起動の目的が達成され、第1の仮起動及び第2の仮起動のいずれをも実行する必要がないことを示す。第1の仮起動回数は、第1の仮起動の実行回数である。第2の仮起動回数は、第2の仮起動の実行回数である。
【0030】
ステップS101では、仮起動終了フラグの値が1であるか、又は第2の仮起動回数が閾値α以上であるか否かが判定される。閾値αは、第1の仮起動及び第2の仮起動が無限に繰り返されることを回避するための、第1の仮起動及び第2の仮起動の実行回数に対する上限値である。
【0031】
仮起動終了フラグの値が1である場合、又は第2の仮起動回数が閾値α以上である場合には(S101でYes)、起動制御部140は、サービス部130及び各アプリ120に関する起動処理について、通常起動処理を実行する(S102)。仮起動終了フラグの値が1でなく、かつ、第2の仮起動回数が閾値α未満である場合(S101でNo)、起動制御部140は、第2の仮起動回数が、第1の仮起動回数未満であるか否かを判定する(S103)。第1の仮起動と第2の仮起動とは、交互に実行されるところ、ステップS103では、N回目の第1の仮起動に対応する第2の仮起動の実行の有無が判定される。第2の仮起動回数が、第1の仮起動回数未満である場合(S103でYes)、起動制御部140は、サービス部130及び各アプリ120に関する起動処理について、第2の仮起動処理を実行する(S104)。一方、第2の仮起動回数と、第1の仮起動回数とが一致する場合(S103でNo)、起動制御部140は、サービス部130及び各アプリ120に関する起動処理について、第1の仮起動処理を実行する(S105)。
【0032】
続いて、ステップS105の詳細について説明する。
図5は、第1の仮起動処理の処理手順の一例を説明するためのフローチャートである。
【0033】
ステップS201において、起動制御部140は、サービス部130、優先アプリ120a、従属アプリ120b、及び一般アプリ120cのそれぞれのプロセスを生成して、それぞれに関して、起動処理の進行を停止しておく。プロセスの生成は、fork−execを用いて実行されてもよい。また、起動処理の進行の停止は、サービス部130、優先アプリ120a、従属アプリ120b、及び一般アプリ120cのそれぞれのCPU111等の利用権限を取り上けることにより実行されてもよい。又は、サービス部130、優先アプリ120a、従属アプリ120b、及び一般アプリ120c等が、処理の停止及び再開のためのインタフェース(例えば、メソッド)を有している場合には、起動制御部140が停止のためのインタフェースを呼び出すことにより、起動処理の進行の停止が実行されてもよい。
【0034】
続いて、起動制御部140は、変数t1及びt2のそれぞれに対し、0を代入する。変数t1は、サービス部130の起動処理の経過時間を記憶するための変数である。変数t2は、優先アプリ120a及び従属アプリ120bの起動処理の経過時間を記憶するための変数である。なお、第1の仮起動処理では、それぞれの起動処理が直列的に実行されるが、優先アプリ120a及び従属アプリ120bの起動処理については、同時に(並列的に)実行される。優先アプリ120a及び従属アプリ120bは、実質的に一体不可分の関係に有るからである。
【0035】
続いて、起動制御部140は、サービス部130の起動処理を再開させる(S203)。その結果、サービス部130の起動処理が進行を開始する。続いて、起動処理は、サンプリング幅の判定処理を実行する(S204)。サンプリング幅とは、リソース使用率を計測又は観測する一定期間の時間幅をいう。なお、当該一定期間を「サンプリング区間」という。サンプリング幅の判定処理の詳細については後述されるが、1回目の第1の仮起動において、サンプリング幅は、固定的に1000(ミリ秒)である。以下、サンプリング幅を、「Δt」によって表現する。
【0036】
続いて、起動制御部140は、Δt分の時間の経過を待機する(S205)。この間、サービス部130の起動処理は進行する。続いて、起動制御部140は、t1からt1+Δtまでのサンプリング区間における、サービス部130によるリソース使用率をリソース管理部150から取得し、取得されたリソース使用率を第1の起動履歴記憶部162に記憶する(S206)。続いて、サービス部130の起動処理が完了していなければ(S207でNo)、起動制御部140は、t1+Δt1をt1に代入し(S208)、ステップS204以降を繰り返す。ステップS204〜S206、及びS208は、サービス部130の起動処理が完了するまで繰り返される(S207)。その結果、第1の起動履歴記憶部162には、サービス部130の起動処理の期間におけるΔt刻みのリソース使用率が記憶される。なお、サービス部130の起動処理の完了は、サービス部130から発生するイベントを起動制御部140が受信することで検知されてもよい。又は、サービス部130に関して定期的に取得されるリソースの使用率が安定した場合に、起動処理が完了したとみなされてもよい。
【0037】
サービス部130の起動処理が完了すると(S207でYes)、起動制御部140は、優先アプリ120a及び従属アプリ120bの起動処理を再開させる(S209)。続いて、ステップS210〜S214では、優先アプリ120a及び従属アプリ120bが対象とされて、ステップS204〜S208と同様の処理が実行される。なお、1回目の第1の仮起動において、優先アプリ120a及び従属アプリ120bの起動処理に関する各サンプリング区間のサンプリング幅は、サービス部130の起動処理に関するサンプリング幅と同様、固定的に1000(ミリ秒)である。
【0038】
また、ステップS206に対応するステップS212では、t2からt2+Δtまでのサンプリング区間における優先アプリ120a及び従属アプリ120bリソース使用率が取得され、第1の起動履歴記憶部162に記憶される。更に、ステップS208に対応するステップS214では、t2+Δtが、t2に代入される。
【0039】
優先アプリ120a及び従属アプリ120bの双方の起動処理が完了すると(S213でYes)、起動制御部140は、今回の第1の仮起動において、第1の起動履歴記憶部162に記憶された情報を補正する(S215)。補正前において、すなわち、優先アプリ120a及び従属アプリ120bの双方の起動処理が完了した時点(S213でYes)において、第1の起動履歴記憶部162には、例えば、
図6に示されるような情報が記憶されている。
【0040】
図6は、第1の起動履歴記憶部に記憶される補正前の情報の一例を示す図である。
図6において、(1)は、ステップS206において記憶される情報(以下、「サービス部起動履歴情報」という。)の一例である。サービス部起動履歴情報は、t1に基づく各サンプリング区間の開始時期及び終了時期(t1〜t1+Δt)に対応付けて、サービス部130によるリソース使用率を示す情報である。
【0041】
また、(2)は、ステップS212において記憶される情報(以下、「優先アプリ起動履歴情報」という。)の一例である。優先アプリ起動履歴情報は、t2に基づくサンプリング区間の開始時期及び終了時期(t2〜t2+Δt)に対応付けて、優先アプリ120a及び従属アプリ120bによるリソース使用率を示す情報である。
【0042】
なお、第1の仮起動では、サービス部130、優先アプリ120a及び従属アプリ120b、並びに一般アプリ120cの起動処理が直列的に実行されるため、(1)に示される情報は、サービス部130が「必要とする」リソース使用率の時系列の情報であるといえる。また、(2)は、優先アプリ120a及び従属アプリ120bが「必要とする」リソース使用率の時系列の情報であるといえる。
【0043】
ステップS215では、優先アプリ起動履歴情報(
図6の(2))について補正が行われる。具体的には、t1とt2との時間軸が合わせられた状態で、サービス部130のリソース使用率と、優先アプリ120a及び従属アプリ120bのリソース使用率と、コンテキストスイッチによるコスト(リソース使用率)の推定値Cとの合計が、100%を超えるサンプリング区間の有無が判定される。該当するサンプリング区間が有る場合、100%を超えた分が、次のサンプリング区間に持ち越される。持ち越しの結果、次のサンプリング区間の合計が100%を超えてしまう場合、更に、超えた分が次のサンプリング区間に持ち越される。その結果、例えば、
図6に示される情報は、
図7に示されるように補正される。
【0044】
図7は、第1の起動履歴記憶部に記憶される補正後の情報の一例を示す図である。
図7において、コンテキストスイッチのコストの推定値Cの値は、10%である。なお、Cの値は、CPU111の仕様等に基づいて、適切な値が設定されてもよい。
【0045】
図6において、t1=t2=0〜1000のサンプリング区間において、サービス部130に十分なリソースを割り当てた後の残りは、C=10を考慮すると、100−(80+10)=10%である。したがって、
図7の(2)において、t2=0〜1000のサンプリング区間のリソース使用率は、10%に補正されている。但し、
図6の(2)において、t2=0〜1000のサンプリング区間のリソース使用率は60%であるため、60−10=50%の余剰が発生する。
【0046】
次のサンプリング区間(t2=1000〜2000)において、サービス部130に十分なリソースを割り当てた後の残りは、C=10を考慮すると、100−(70+10)=20%である。したがって、
図7の(2)において、t2=1000〜2000のサンプリング区間のリソース使用率は、20%に補正されている。但し、
図6の(2)において、t2=1000〜2000のサンプリング区間のリソース使用率は70%であるため、70−20=50%の余剰が発生する。前のサンプリング区間から持ち越された余剰と合わせると、余剰の合計は、100%である。
【0047】
次のサンプリング区間(t2=2000〜3000)においては、サービス部130の起動処理は終了している。したがって、優先アプリ120a及び従属アプリ120bに対して優先してリソースが割り当てられる。当該サンプリング区間において、優先アプリ120a及び従属アプリ120bが必要とするリソース使用率は、30%である。但し、前のサンプリング区間までの余剰分(100%)と合わせると130%である。なお、当該サンプリング区間では、サービス部130の起動処理は完了しているため、コンテキストスイッチのコストは考慮されなくてよい。したがって、
図7の(2)において、当該サンプリング区間のリソース使用率は、100%に補正されている。ここで、130−100=30%の余剰が発生する。
【0048】
当該余剰分を持ち越すために、t2=3000〜4000のサンプリング区間が追加され、当該サンプリング区間に当該余剰分が割り当てられる。その結果、
図7の(2)において、当該サンプリング区間に、30%が割り当てられている。
【0049】
続いて、起動制御部140は、起動処理状態記憶部161に記憶されている第1の仮起動回数に1を加算する(S216)。続いて、起動制御部140は、一般アプリ120cの起動処理を再開する(S217)。一般アプリ120cについても、サンプリング区間ごとにリソース使用率が取得及び記憶されてもよい。
【0050】
なお、優先アプリ120a及び従属アプリ120bの双方の起動処理が完了した時点において、ユーザは、画像形成装置10において、優先アプリ120a及び従属アプリ120bを利用することができる。すなわち、第1の仮起動は、サービス部130及び各アプリ120の起動処理の実行後における画像形成装置10の動作に対して、特段の影響は及ぼさない。したがって、第1の仮起動が行われた場合であっても、ユーザは、通常通り画像形成装置10を利用することができる。この点は、第2の仮起動についても同様である。
【0051】
続いて、
図3のステップS104の詳細について説明する。
図8は、第2の仮起動処理の処理手順の一例を説明するためのフローチャートである。
【0052】
ステップS301〜S304は、
図5のステップS201〜S204と同様である。但し、ステップS301では、サービス部130のプロセスの優先度が1番目とされ、優先アプリ120a及び従属アプリ120bのプロセスの優先度が2番目とされ、一般アプリ120cのプロセスの優先度を3番目以降とされてもよい。なお、1回目の第2の仮起動のステップS304において判定されるサンプリング幅は、1回目の第1の仮起動と同様に、固定的に1000(ミリ秒)である。
【0053】
ステップS305において、起動制御部140は、t1〜t1+Δtにおけるサービス部130のリソース使用率を、起動処理状態記憶部161のサービス部起動履歴情報(
図7の(1))から取得し、取得された値を変数Rに代入する。t1が0である場合、
図4の(1)の0〜1000に対する「60%」が取得される。
【0054】
続いて、起動制御部140は、R+Cの値が100%未満であるか、又はサービス部130の起動処理が完了済みであるか否かを判定する(S306)。ここで、R+Cの値が100%未満であるかという条件は、優先アプリ120a及び従属アプリ120bの起動処理に対してリソース(CPU111)を割り当てる余裕の有無を判定するための条件である。Cは、
図7において説明した、コンテキストスイッチによるリソース使用率の推定値(C=10%)である。すなわち、優先アプリ120a及び従属アプリ120bの起動処理が再開された場合、CPU111に関してコンテキストスイッチが発生するため、当該コンテキストスイッチのコストを考慮して、上記の余裕の有無が判定される。
【0055】
また、サービス部130の起動処理が完了済みであるか否かが判定されるのは、サービス部130の起動処理が完了済みであれば、R+Cの値に関わらず、リソースは、優先アプリ120a及び従属アプリ120bの起動処理に優先的に割り当てられるべきだからである。
【0056】
R+Cの値が100%未満である場合、又はサービス部130の起動処理が完了済みである場合(S306でYes)、起動制御部140は、優先アプリ120a及び従属アプリ120bの起動処理を再開させる(S307)。この際、起動制御部140は、t1〜t1+Δt1のサンプリング区間において、優先アプリ120a及び従属アプリ120bの起動処理を再開したことを、第1の起動履歴記憶部162に記憶する。なお、直前のサンプリング区間において当該起動処理が再開されている場合、ステップS307は実行されなくてもよい。
【0057】
ここで、サービス部130の起動処理の期間において、ステップS307が実行された場合、サービス部130の起動処理と、優先アプリ120a及び従属アプリ120bの起動処理とは、並列的に実行される。すなわち、第2の仮起動では、サービス部130の起動処理の期間において、リソースに余裕(残量)が有るのであれば、優先アプリ120a及び従属アプリ120bの起動処理が再開されて、リソースが有効活用される。そうすることで、サービス部130の起動処理が開始されてから、優先アプリ120a及び従属アプリ120bの起動が完了するまでの所要時間の短縮が図られる。
【0058】
続いて、起動制御部140は、t2〜t2+Δtのサンプリング区間に関して第1の起動履歴記憶部162に記憶されている優先アプリ起動履歴情報(
図7の(2))に示される、優先アプリ120a及び従属アプリ120bのリソース使用率を変数Rに加算した値を、変数Rに代入する(S308)。ステップS308が最初に実行される場合、0〜1000(ミリ秒)における優先アプリ120a及び従属アプリ120bのリソース使用率が、変数Rに代入される。なお、第1の起動履歴記憶部162に記憶されている情報に関して、第2の仮起動において使用されるのは、補正後の情報である。
【0059】
一方、R+Cが100%以上であり、かつ、サービス部130の起動処理が完了していない場合(S306でNo)、起動制御部140は、優先アプリ120a及び従属アプリ120bの起動処理を停止させる(S309)。この際、起動制御部140は、t1〜t1+Δt1のサンプリング区間において、優先アプリ120a及び従属アプリ120bの起動処理を停止したことを、第2の起動履歴記憶部163に記憶する。なお、直前のサンプリング区間において当該起動処理が停止されている場合、ステップS309は実行されなくてもよい。
【0060】
続いて、Rの値が100%未満であるか、又は優先アプリ120a及び従属アプリ120bの起動処理が完了済みであるか否かを判定する(S310)。ステップS310の判定は、一般アプリ120cの起動処理を再開可能であるか否かの判定である。なお、ステップS310において、100%との比較対象がR+CではなくRであるのは、一般アプリ120cの起動処理が更に追加される場合のコンテキストスイッチのコストは無視できる程度であると考えられるからである。但し、当該コストが無視できない程度であれば、Rに対して当該コストの推定値が加算された結果が、100%と比較されてもよい。
【0061】
Rの値が100%未満である場合、又は優先アプリ120a及び従属アプリ120bの起動処理が完了済みである場合(S310でYes)、起動制御部140は、一般アプリ120cの起動処理を再開させる(S311)。この際、起動制御部140は、t1〜t1+Δt1のサンプリング区間において、一般アプリ120cの起動処理を再開したことを、第2の起動履歴記憶部163に記憶する。なお、直前のサンプリング区間において当該起動処理が再開されている場合、ステップS311は実行されなくてもよい。
【0062】
一方、Rが100%以上であり、かつ、優先アプリ120a及び従属アプリ120bの起動処理が完了していない場合(S310でNo)、起動制御部140は、一般アプリ120cの起動処理を停止させる(S312)。この際、起動制御部140は、t1〜t1+Δt1のサンプリング区間において、一般アプリ120cの起動処理を停止したことを、第2の起動履歴記憶部163に記憶する。なお、直前のサンプリング区間において当該起動処理が再開されている場合、ステップS312は実行されなくてもよい。
【0063】
ステップS311又はS312に続いて、起動制御部140は、Δt分の時間の経過を待機する(S313)。なお、ステップS304〜S312までの処理時間の経過は、便宜上、無視して考える。したがって、ステップS313では、ステップS304の開始時からのΔt分の時間の経過が待機される。
【0064】
続いて、起動制御部140は、t1〜t1+Δtのサンプリング区間における、サービス部130、優先アプリ120a及び従属アプリ120b、並びに一般アプリ120cのそれぞれのリソース使用率を、リソース管理部150から取得し、取得された値を第2の起動履歴記憶部163に記憶する(S314)。続いて、起動制御部140は、t1+Δtをt1に代入する(S315)。続いて、起動制御部140は、t2+Δtをt2に代入する(S316)。
【0065】
続いて、起動制御部140は、サービス部130、並びに優先アプリ120a及び従属アプリ120bの起動処理が完了したか否かを判定する(S317)。サービス部130、又は優先アプリ120a及び従属アプリ120bの起動処理が完了していない場合(S317でNo)、ステップS304以降が繰り返される。サービス部130、並びに優先アプリ120a及び従属アプリ120bの起動処理が完了した場合(S317でYes)、起動制御部140は、ステップS304において、いずれかのサンプリング区間において、サンプリング区間の分割(サンプリング幅の短縮)が行われたか否かを判定する(S(S318)。分割されたサンプリング区間が無い場合(S318でNo)、起動制御部140は、起動処理状態記憶部161に記憶されている起動処理フラグの値を1にする(S319)。したがって、この場合、次回以降における画像形成装置10の起動時には、通常起動処理が実行される。なお、サンプリング区間の分割については、後述される。
【0066】
ステップS318でYesの場合、又はステップS319に続いて、起動制御部140は、起動処理状態記憶部161に記憶されている第2の仮起動回数に1を加算する(S320)。続いて、起動制御部140は、一般アプリ120cの起動処理を再開させる(S321)。但し、既に当該起動処理が再開されている場合、又は一般アプリ120cの起動処理が既に完了している場合には、ステップS321は実行されなくてよい。
【0067】
第2の仮起動の終了時において、第2の起動履歴記憶部163には、例えば、
図9に示されるような情報が記憶される。
【0068】
図9は、第2の起動履歴記憶部に記憶される情報の一例を示す図である。
図9において、(1)及び(2)は、ステップS314において記憶される情報の一例である。(1)には、各サンプリング区間(t1〜t1+Δt)に対応付けられて、サービス部130によるリソース使用率が示されている。また、(2)には、各サンプリング区間に対応付けられて、優先アプリ120a及び従属アプリ120bによるリソース使用率が示されている。なお、(2)において、各サンプリング区間の開始時期及び終了時期については、t1に基づく値と、t2に基づく値とが記憶されている。
【0069】
(3)は、ステップ307、S309、S311、及びS312において記憶される情報の一例である。すなわち、(3)には、サンプリング区間ごとに、優先アプリ120a及び従属アプリ120bと、一般アプリ120cとのそれぞれについて、起動処理を再開したのか又は停止したのかを示す情報が示されている。以下、(3)に示される情報を、「起動制御情報」という。
【0070】
例えば、
図7より、t1に関する0〜1000のサンプリング区間において、サービス部130のリソース使用率は、80である。すなわち、80+C(ここで、C=10)は、100%未満である。したがって、当該サンプリング区間に関しては、ステップS307において、優先アプリ120a及び従属アプリ120bの起動処理は再開される。ここで、t1に関して0〜1000において並列的に実行される優先アプリ120a及び従属アプリ120bの起動処理は、t2=0〜1000に関する起動処理である。
図7より、当該サンプリング区間において、優先アプリ120a及び従属アプリ120bのリソース使用率は、10である。すなわち、80+C+10は、100%以上である。したがって、この場合、ステップS311において、一般アプリ120cの起動処理は停止される。これらの履歴が、
図9の(3)の0〜1000の列に示されている。
【0071】
また、
図7より、t1に関する0〜1000のサンプリング区間において、サービス部130のリソース使用率は、70である。すなわち、70+Cは、100%未満である。したがって、したがって、当該サンプリング区間に関しては、ステップS307において、優先アプリ120a及び従属アプリ120bの起動処理は再開される。ここで、t1に関して1000〜2000において並列的に実行される優先アプリ120a及び従属アプリ120bの起動処理は、t2=1000〜2000に関する起動処理である。
図7より、当該サンプリング区間において、優先アプリ120a及び従属アプリ120bのリソース使用率は、20である。すなわち、70+C+20は、100%以上である。したがって、この場合、ステップS311において、一般アプリ120cの起動処理は停止される。これらの履歴が、
図9の(3)の1000〜2000の列に示されている。
【0072】
続いて、
図5のステップS204及びS210、並びに
図8のステップS304の詳細について説明する。
【0073】
図10は、サンプリング幅の判定処理の処理手順の一例を説明するためのフローチャートである。
【0074】
ステップS401において、起動制御部140は、第1の仮起動であるか否かによって処理を分岐させる。第1の仮起動である場合(S401でYes)、起動制御部140は、起動処理状態記憶部161に記憶されている第1の仮起動回数が1未満であるか否かを判定する(S402)。第1の仮起動回数が1未満である場合(S402でYes)、起動制御部140は、サンプリング幅は1000ミリ秒であると判定する。なお、本実施の形態において、サンプリング幅の初期値は、1000ミリ秒であるが、他の値が、サンプリング幅の初期値とされてもよい。
【0075】
一方、第1の仮起動回数が1以上である場合(S402でNo)、起動制御部140は、対象区間に関する、前回の第1の仮起動時におけるサンプリング幅を、Δtに代入する(S404)。前回の第1の仮起動時とは、第1の仮起動回数が、今回よりも1小さい状態における第1の仮起動時をいう。また、
図5のステップS204から
図10の処理が呼び出される場合、当該呼び出し時点におけるt1を開始時点とするサンプリング区間が、対象区間である、
図5のステップS210から
図10の処理が呼び出される場合、当該呼び出し時点におけるt2を開始時点とするサンプリング区間が対象区間である。
【0076】
続いて、起動制御部140は、対象区間が、サービス部130の起動処理の期間に含まれるか否かを判定する(S405)。
図5のステップS204から
図10の処理が呼び出された場合、呼び出し時点におけるt1の値が、第1の起動履歴記憶部162に記憶されているサービス部起動履歴情報(
図7の(1))を構成する最後のサンプリング区間の開始時点以下であるか否かが判定される。
図7の(1)の例によれば、
図10の処理の呼び出し時におけるt1の値が1000以下であれば、ステップS405の判定は肯定的なものとなる。また、
図5のステップS208から
図10の処理が呼び出された場合、呼び出し時点におけるt2の値が、第1の起動履歴記憶部162に記憶されているサービス部起動履歴情報(
図7の(1))を構成する最後のサンプリング区間の開始時点以下であるか否かが判定される。
図7の(1)の例によれば、
図10の処理の呼び出し時におけるt2の値が、1000以下であれば、ステップS405の判定は肯定的なものとなる。
【0077】
ステップS405の判定が肯定的である場合(S405でYes)、起動制御部140は、前回の第1の仮起動時に関して第1起動状態記憶部に記憶されている、対象区間におけるサービス部130のリソース使用率を変数R11に代入する(S406)。例えば、対象区間がt1=0〜1000であれば、
図7の(1)より、80%がR11に代入される。
【0078】
続いて、起動制御部140は、最後の第2の仮起動時に第2起動状態記憶部に記憶された、サービス部130の対象区間に関するリソース使用率を変数R12に代入する(S407)。例えば、対象区間がt1=0〜1000であれば、
図9の(1)より、75%が取得される。
【0079】
続いて、起動制御部140は、R11>R21であるかを判定する(S408)。R11>R21は、対象区間におけるサービス部130によるリソース使用率が、第1の仮起動時よりも第2の仮起動時の方が小さいか否かの判定である。
【0080】
R11=80、R12=75である場合、R11>R12である(S408でYes)。この場合、起動制御部140は、Δtを2で除することにより得られる値を、サンプリング幅とする(S409)。すなわち、サンプリング区間が分割される。一方、R11≦R12である場合(S408でNo)、起動制御部140は、Δtの値を変更しない。したがって、この場合、前回の対象区間と同じサンプリング幅が、今回の対象区間に対して適用される。
【0081】
一方、ステップS405の判定が否定的である場合(S405でNo)、起動制御部140は、前回の第1の仮起動時に関して第1起動状態記憶部に記憶されている、対象区間における優先アプリ120a及び従属アプリ120bのリソース使用率を変数R21に代入する(S410)。
図7によれば、ステップS405の判定が最初に否定的となるのは、
図5において、t2=2000である場合に、ステップS210が実行されるときである。この際の対象区間は、t2=2000〜3000である。
図7(2)に示されるように、前回の第1の仮起動時の対象区間における優先アプリ120a及び従属アプリ120bのリソース使用率は、100%である。したがって、100が、R21に代入される。
【0082】
続いて、起動制御部140は、最後の第2の仮起動時において第2起動状態記憶部に記憶された、優先アプリ120a及び従属アプリ120bの対象区間に関するリソース使用率を変数R22に代入する(S411)。例えば、対象区間がt2=2000〜3000であれば、
図9の(1)より、100%がR22に代入される。
【0083】
続いて、起動制御部140は、R21>R21であるかを判定する(S412)。R21>R21は、対象区間における優先アプリ120a及び従属アプリ120bによるリソース使用率が、第1の仮起動時よりも第2の仮起動時の方が小さいか否かの判定である。
【0084】
R21>R22である場合(S412でYes)、起動制御部140は、Δtを2で除することにより得られる値を、サンプリング幅とする(S413)。すなわち、サンプリング区間が分割される。一方、R21≦R22である場合(S412でNo)、起動制御部140は、Δtの値を変更しない。したがって、この場合、前回の対象区間と同じサンプリング幅が、今回の対象区間に対して適用される。
【0085】
ステップS408においてサンプリング区間を分割する理由について説明する。R11>R12であるということは、第2の仮起動による並列処理において、サービス部130が対象区間において必要とするリソースが、サービス部130に割り当てられなかった状態であると推測される。
【0086】
第2の仮起動時では、
図8のステップS305及びS306より明らかなように、サービス部130の起動処理の期間において、リソースに空きが有る場合には、優先アプリ120a及び従属アプリ120bの起動処理が並列的に実行される。したがって、サービス部130、優先アプリ120a及び従属アプリ120b、及び一般アプリ120cのそれぞれのプロセスの優先度を、サービス部130>優先アプリ120a及び従属アプリ120b>一般アプリ120cとしておけば、基本的には、サービス部130に対して、所望通りのリソースが割り当てられる可能性が高い。それにも関わらず、サービス部130に対して割り当てられたリソースが、所望の値に満たないということは、原因として次のようなことが考えられる。
【0087】
サンプリング区間ごとのリソース使用率は、当該サンプリング区間における平均値である。すなわち、瞬間的なリソース使用率は、当該サンプリング区間内において変動する。例えば、0〜1000のサンプリング区間において、サービス部130のリソース使用率が80%だとしても、0〜500において70%、500〜1000において90%であるかもしれない。この場合、500〜1000においては、コンテキストスイッチのコストC=10%を考慮すれば、優先アプリ120a及び従属アプリ120bの起動処理を実行する余裕は、本来であれば無かったことになる。それにも関わらず、第2の仮起動においては、当該区間において優先アプリ120a及び従属アプリ120bの起動処理が実行されていたため、サービス部130には十分なリソースが割り当てられなかった可能性が考えられる。すなわち、この場合、500〜1000の区間において、優先アプリ120a及び従属アプリ120bの起動処理を停止できれば、サービス部130には十分なリソースが割り当てられる可能性が有ると考えられる。
【0088】
本実施の形態では、上記のような考えに基づいて、優先アプリ120a及び従属アプリ120bの起動処理の再開及び停止を、更に短い時間幅で制御可能とするために、サンプリング区間の分割が行われるのである。ステップS413についても、同様の考えに基づき、一般アプリ120cの起動処理の再開及び停止を、更に短い時間幅で制御可能とするための処理である。
【0089】
換言すれば、サービス部130の起動処理の期間に含まれるサンプリング区間が分割された場合、前回の第2の仮起動時において、当該サンプリング区間において、優先アプリ120a及び従属アプリ120bの起動処理が再開されていたとしても、いずれかの分割区間(分割期間)においては、当該起動処理が停止される。同様に、サービス部130の起動処理の完了後であって、優先アプリ120a及び従属アプリ120bの動処理の期間に含まれるサンプリング区間が分割された場合、前回の第2の仮起動時において、当該サンプリング区間において、一般アプリ120cの起動処理が再開されていたとしても、いずれかの分割区間においては、当該起動処理が停止される。
【0090】
なお、いずれかのサンプリング区間に関して、ステップS409又はステップS413が実行された場合、
図8のステップS318でNoとなる。
【0091】
一方、第2の仮起動において
図10の処理が実行される場合(S401でNo)、起動制御部140は、直前に実行された第1の仮起動において対象区間に関して判定されたサンプリング幅を、サンプリング幅として判定する(S414)。すなわち、対となる第1の仮起動と第2の仮起動との各サンプリング区間のサンプリング幅は一致する。
【0092】
続いて、
図3のステップS102の詳細について説明する。
図11は、通常起動処理の処理手順の一例を説明するためのフローチャートである。
【0093】
ステップS501〜S503は、
図5のステップS201〜S203又は
図8のステップS301〜S303と同様である。但し、ステップS502において、変数t2は初期化されなくてもよい。
【0094】
続いて、起動制御部140は、第2の起動履歴記憶部163に記憶されている起動制御情報のうち、t1を開始時点とするサンプリング区間(以下、「対象区間」という。)に係る情報を、第2の起動履歴記憶部163から取得する(S504)。ここで、起動制御情報は、仮起動終フラグが1に更新された際に実行された第2の仮起動において記憶された起動制御情報である。仮に、当該起動制御情報が、
図9の(3)に示される通りであり、t1=0である場合、優先アプリ120a及び従属アプリ120bに関して「再開」を示し、一般アプリ120cに関して「停止」を示す情報が取得される。
【0095】
続いて、起動制御部140は、取得された情報に基づいて、優先アプリ120a及び従属アプリ120b、並びに一般アプリ120cの起動処理を再開又は停止させる(S505)。続いて、起動制御部140は、第2の起動履歴記憶部163に記憶されている起動制御情報において、次のサンプリング区間に対応する情報が有るか否かを判定する(S506)。次のサンプリング区間が有る場合(S506でYes)、起動制御部140は、対象区間のサンプリング幅分の時間が経過するのを待機する(S507)。当該時間が経過すると(S507でYes)、起動制御部140は、t1に対して、対象区間のサンプリング幅を加算し(S508)ステップS504以降を繰り返す。
【0096】
一方、ステップS506において、次のサンプリング区間が無い場合(S506でNo)、
図11の処理は終了する。
【0097】
上述したように、本実施の形態によれば、第1の仮起動によって、サービス部130、優先アプリ120a及び従属アプリ120bのそれぞれが、それぞれの起動処理の過程において必要とするリソース使用率の時系列情報が取得される。第2の仮起動においては、当該時系列情報に基づいて、起動処理が完了していないプログラムの中で、優先度が最高であるプログラムに対して、サンプリング区間ごとに、所望のリソース使用率が割り当てられるように、各プログラムの起動処理の再開及び停止が制御されつつ、各プログラムのリソース使用率が計測される。その結果、起動処理を並列化されたことによる影響の有無を確認することができる。例えば、起動処理が完了していないプログラムの中で、優先度が最高であるプログラムに関して、各サンプリング区間において所望のリソース使用率が割り当てられているか否かが確認可能となる。起動処理が並列化されることによる影響が有る場合には、当該影響が発生したサンプリング区間が細分化されて、第1の仮起動及び第2の仮起動が再実行される。
【0098】
以上の処理が繰り返されることで、各プログラムの起動処理を並列化しつつ、優先度が相対的に低いプログラムの起動処理について、優先度が相対的に高いプログラムの起動処理が早期に終了させることができるような再開及び停止のタイミングを特定することができる。その結果、サービス部130又は優先アプリ120a等特定のプログラムの起動時間の遅延の可能性を低減させることができる。
【0099】
なお、第2の仮起動が、通常起動として運用されてもよい。この場合の第2の仮起動では、第2の起動履歴記憶部163への情報の書き込みは行われなくてもよい。また、この場合、第1の仮起動が1回行われれば、通常起動が実行されるようにしてもよい。
【0100】
また、本実施の形態では、第1の仮起動、第2の仮起動、及び通常起動は、それぞれ画像形成装置10の起動時において実行される処理として説明したが、例えば、画像形成装置10としては1回の起動が行われた後において、ソフトウェア群の再起動処理において、第1の仮起動、第2の仮起動、及び通常起動が実行されてもよい。
【0101】
なお、本実施の形態は、CPU111以外のリソースに関して適用されてもよい。例えば、I/Oバッファの使用率や、メモリの使用率に関して本実施の形態が適用されてもよい。
【0102】
また、本実施の形態は、画像形成装置10以外の情報処理装置(例えば、プロジェクタ、テレビ会議システム、電子黒板、デジタルカメラ、PC(Personal Computer)等)に関して適用されてもよい。
【0103】
また、本実施の形態において、使用率は、厳密な意味での使用率でなくてもよい。例えば、使用率の他に、使用の度合い又は使用の頻度等が把握可能な使用情報であってもよい。
【0104】
なお、本実施の形態において、サービス部130、優先アプリ120a及び従属アプリ120b、又はサービス部130並びに優先アプリ120a及び従属アプリ120bは、第1のプログラムの一例である。優先アプリ120a及び従属アプリ120b又は一般アプリ120cは、第2のプログラムの一例である。第1の仮起動は、第1の起動及び第3の起動の一例である。第2の仮起動は、第2の起動及び第3の起動の一例である。第1の履歴情報及び第3の履歴情報は、第1の起動履歴記憶部162に記憶される情報の一例である。第2の履歴情報及び第4の履歴情報は、第2の起動履歴記憶部163に記憶される情報の一例である。
【0105】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。