特許第6054003号(P6054003)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 三菱電機株式会社の特許一覧
特許6054003プログラム実行システムおよび常駐プログラムの起動方法
<>
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000002
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000003
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000004
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000005
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000006
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000007
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000008
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000009
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000010
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000011
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000012
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000013
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000014
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000015
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000016
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000017
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000018
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000019
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000020
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000021
  • 特許6054003-プログラム実行システムおよび常駐プログラムの起動方法 図000022
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6054003
(24)【登録日】2016年12月9日
(45)【発行日】2016年12月27日
(54)【発明の名称】プログラム実行システムおよび常駐プログラムの起動方法
(51)【国際特許分類】
   G06F 9/50 20060101AFI20161219BHJP
   G06F 9/445 20060101ALI20161219BHJP
【FI】
   G06F9/06 640H
   G06F9/06 650Z
   G06F9/06 610J
【請求項の数】16
【全頁数】20
(21)【出願番号】特願2016-539756(P2016-539756)
(86)(22)【出願日】2014年8月7日
(86)【国際出願番号】JP2014070891
(87)【国際公開番号】WO2016021024
(87)【国際公開日】20160211
【審査請求日】2016年9月6日
【早期審査対象出願】
(73)【特許権者】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】100088672
【弁理士】
【氏名又は名称】吉竹 英俊
(74)【代理人】
【識別番号】100088845
【弁理士】
【氏名又は名称】有田 貴弘
(72)【発明者】
【氏名】田中 宏平
(72)【発明者】
【氏名】豊岡 明
(72)【発明者】
【氏名】藤▲崎▼ 哲史
(72)【発明者】
【氏名】下谷 光生
【審査官】 多賀 実
(56)【参考文献】
【文献】 特開2007−148773(JP,A)
【文献】 特開2008−097425(JP,A)
【文献】 米国特許第7702891(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
G06F 9/445
(57)【特許請求の範囲】
【請求項1】
複数の常駐プログラムを含む複数のプログラムを実行するプログラム実行部と、
前記複数の常駐プログラムを起動させる順番を制御する常駐プログラム起動制御部とを備え、
前記プログラム実行部は、システム起動時に、前記複数の常駐プログラムを起動させる順番を規定する情報である起動順序定義に従って、前記複数の常駐プログラムを順次起動させ、
前記常駐プログラム起動制御部は、前記複数の常駐プログラムの起動によってリソース使用量が特定の値を超える場合、次回のシステム起動時における前記起動順序定義を今回のシステム起動時に用いた前記起動順序定義から変更する
ことを特徴とするプログラム実行システム。
【請求項2】
前記プログラム実行部は、リソース使用量が前記特定の値を超える原因となる常駐プログラムを常駐させない
請求項1記載のプログラム実行システム。
【請求項3】
前記起動順序定義における常駐プログラムの順番はループ状に規定されており、
前記常駐プログラム起動制御部は、最初に起動させる常駐プログラムを変更することによって、前記起動順序定義を変更する
請求項1記載のプログラム実行システム。
【請求項4】
前記常駐プログラム起動制御部は、リソース使用量が前記特定の値を超える原因となる常駐プログラムが次回のシステム起動時に最初に起動するように、前記起動順序定義を変更する
請求項3記載のプログラム実行システム。
【請求項5】
前記プログラム実行部は、リソース使用量が前記特定の値を超える原因となる常駐プログラムの順番を飛ばして次の常駐プログラムを常駐させる動作を、前記起動順序定義に従って繰り返し行う
請求項1記載のプログラム実行システム。
【請求項6】
前記起動順序定義における常駐プログラムの順番はループ状に規定されており、
前記常駐プログラム起動制御部は、リソース使用量が前記特定の値を超える1回目の原因となる常駐プログラムが次回のシステム起動時に最初に起動するように、前記起動順序定義を変更する
請求項5記載のプログラム実行システム。
【請求項7】
前記常駐プログラム起動制御部は、前記起動順序定義を変更する際、次回のシステム起動時における前記起動順序定義における常駐プログラムの順番をランダムに決定する
請求項1記載のプログラム実行システム。
【請求項8】
前記常駐プログラム起動制御部は、新たな常駐プログラムが導入されると、前記起動順序定義における常駐プログラムの順番の任意の位置に前記新たな常駐プログラムを追加する
請求項1記載のプログラム実行システム。
【請求項9】
前記常駐プログラム起動制御部は、新たな常駐プログラムを前記起動順序定義に追加するとき、前記新たな常駐プログラムおよびそれを追加する位置の前後の常駐プログラムのリソース使用量の平均値が、前記起動順序定義に含まれる全ての常駐プログラムのリソース使用量の平均値に最も近くなる位置に追加する
請求項8記載のプログラム実行システム。
【請求項10】
前記常駐プログラム起動制御部は、前記起動順序定義を複数管理し、予め定められた条件に従って、使用する前記起動順序定義を切り替える
請求項1記載のプログラム実行システム。
【請求項11】
複数の常駐プログラムのそれぞれには優先度が設定されており、
前記常駐プログラム起動制御部は、前記起動順序定義を優先度ごとに複数管理し、
前記プログラム実行部は、システム起動時に、各常駐プログラムをその優先度に対応する前記起動順序定義に従って順次起動させる
請求項1記載のプログラム実行システム。
【請求項12】
前記プログラム実行部は、各優先度の常駐プログラムが少なくとも1つずつは実行可能なように前記複数の常駐プログラムを起動させる順番を決定する
請求項11記載のプログラム実行システム。
【請求項13】
複数の常駐プログラムのそれぞれに設定される優先度は、予め定められた条件に従って変更される
請求項11記載のプログラム実行システム。
【請求項14】
システム起動後において、前記プログラム実行部は、常駐させる常駐プログラムを前記起動順序定義に従って一定周期で変更する
請求項1記載のプログラム実行システム。
【請求項15】
前記起動順序定義における常駐プログラムの順番はループ状に規定されており、
前記常駐プログラム起動制御部は、システム起動後に常駐プログラムを起動した場合、最後に常駐した常駐プログラムの次の常駐プログラムが次回のシステム起動時に最初に起動するように、前記起動順序定義を変更する
請求項14記載のプログラム実行システム。
【請求項16】
プログラム実行システムのシステム起動時に、プログラム実行部が、複数の常駐プログラムを起動させる順番を規定する情報である起動順序定義に従って常駐プログラムを起動し、
前記プログラム実行部が前記常駐プログラムを起動させる前または後に、リソース監視部が、前記常駐プログラムの起動によってリソース使用量が特定の値を超えるか否かを判断し、
前記常駐プログラムの起動によってリソース使用量が前記特定の値を超えると判断された場合、常駐プログラム起動制御部が、次回のシステム起動時における前記起動順序定義を今回の前記起動順序定義から変更する
ことを特徴とする常駐プログラムの起動方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム実行システムに関し、特に、常駐プログラムの起動方法に関するものである。
【背景技術】
【0002】
例えばスマートフォンやタブレット型端末など、プログラム実行システムを備える装置(プログラム実行装置)として、ユーザが自由にアプリケーションを導入(インストール)できるものが普及している。また、ユーザが導入できるアプリケーションの中には、システム起動時に自動的に起動してシステムに常駐するプログラム(常駐プログラム)を含むアプリケーションがある。常駐プログラムがシステムに常駐することによって、ユーザの操作負担の低減や持続的なサービスが実現される。
【0003】
しかし、ユーザがプログラム実行装置に多数のアプリケーションを導入した場合、それらの常駐プログラムが制限なく起動されると、プログラム実行装置のリソース(メモリ容量やCPU(Central Processing Unit)の処理速度など)が不足し、アプリケーションを正常に実行できなくなることが懸念される。一般的なプログラム実行装置では、その対策として、常駐を許可するアプリケーションの種類を制限したり、メモリの空き容量が少なくなると優先度の低いアプリケーションを強制終了したりすることが行われている。
【0004】
また、下記の特許文献1には、自動的に起動するアプリケーションをシステムが起動した時刻に応じて切り替える技術が開示されている。特許文献2には、各アプリケーションを常駐型または非常駐型(一時型)に分類し、情報端末装置のメモリ不足が生じると非常駐型のアプリケーションを強制終了する技術が開示されている。特許文献3には、各アプリケーションの優先度をその使用頻度に基づいて決定する技術が開示されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2004−157781号公報
【特許文献2】特開2003−15892号公報
【特許文献3】特開2013−246770号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来のプログラム実行装置では、システム起動時に常駐プログラムが起動される順番が毎回同じであるため、常駐プログラムによってリソース不足が生じる場合には、毎回同じ常駐プログラムしか起動しないことになる。逆に言えば、全く起動されない常駐プログラムが生じる。しかし、常駐プログラムの中には、例えばアプリケーションの自動アップデートプログラムなど、定期的に起動させる必要性が高いものがあるので、全く起動されない常駐プログラムが生じるのは好ましくない。
【0007】
本発明は以上のような課題を解決するためになされたものであり、全く起動されない常駐プログラムが生じることを防止することが可能なプログラム実行システムを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明に係るプログラム実行システムは、複数の常駐プログラムを含む複数のプログラムを実行するプログラム実行部と、複数の常駐プログラムを起動させる順番を制御する常駐プログラム起動制御部とを備え、プログラム実行部は、システム起動時に、複数の常駐プログラムを起動させる順番を規定する情報である起動順序定義に従って、複数の常駐プログラムを順次起動させ、常駐プログラム起動制御部は、複数の常駐プログラムの起動によってリソース使用量が特定の値を超える場合、次回のシステム起動時における起動順序定義を今回のシステム起動時に用いた起動順序定義から変更する。
【発明の効果】
【0009】
本発明によれば、常駐プログラムの起動によってリソース使用量が特定の値を超える場合に、次回のシステム起動時における起動順序定義が、今回のシステム起動時に用いた起動順序定義から変更されるため、次回のシステム起動時に複数の常駐プログラムが起動する順番が今回のシステム起動時のものとは異なるようになる。それにより、全く起動されない常駐プログラムが生じることが防止される。
【0010】
本発明の目的、特徴、態様、および利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【0011】
図1】本発明に係るプログラム実行システムの構成図である。
図2】アプリケーションの構成を示す図である。
図3】起動順序定義の例を示す図である。
図4】プログラム実行装置のメモリ容量を説明するための図である。
図5】実施の形態1に係るプログラム実行装置の動作を説明するための図である。
図6図5に示した動作後の起動順序定義を示す図である。
図7】実施の形態1に係るプログラム実行装置の動作を示すフローチャートである。
図8】常駐プログラムのメモリ使用量を予め判断できる場合における、実施の形態1に係るプログラム実行装置の動作を示すフローチャートである。
図9】新たなアプリケーションが導入されるときのプログラム実行装置の動作を説明するための図である。
図10】新たなアプリケーションが導入されるときのプログラム実行装置の動作を説明するための図である。
図11】新たなアプリケーションが導入された後の起動順序定義の例を示す図である。
図12】実施の形態2に係るプログラム実行装置の動作を説明するための図である。
図13】実施の形態2に係るプログラム実行装置の動作を示すフローチャートである。
図14】実施の形態3に係るプログラム実行装置の動作を説明するための図である。
図15】実施の形態3に係るプログラム実行装置の動作を示すフローチャートである。
図16】実施の形態4における起動順序定義の例を示す図である。
図17】実施の形態4における起動順序定義の例を示す図である。
図18】実施の形態4における起動順序定義の例を示す図である。
図19】実施の形態5に係るプログラム実行装置の動作を示すフローチャートである。
図20】常駐プログラムのメモリ使用量を予め判断できる場合における、実施の形態5に係るプログラム実行装置の動作を示すフローチャートである。
図21】実施の形態6に係るプログラム実行装置の動作を説明するための図である。
【発明を実施するための形態】
【0012】
<実施の形態1>
図1は、本発明に係るプログラム実行システムの構成図である。当該プログラム実行システムは、プログラム実行装置10と、それに接続した起動スイッチ21、表示装置22および音声出力装置23を備えている。本発明は、パーソナルコンピュータをはじめとするプログラム実行システムに広く適用可能であるが、製造コストや製品サイズ、消費電力などの理由からリソースが制限される携帯型または小型の装置(例えばスマートフォン、タブレット端末、車載の情報表示装置、ナビゲーション装置など)への適用が特に有効である。
【0013】
起動スイッチ21は、プログラム実行装置10の電源スイッチであり、ユーザが起動スイッチ21を操作してプログラム実行装置10の電源がオンになると、プログラム実行システムが起動する。起動スイッチ21は、プログラム実行装置10を遠隔操作するリモコンでもよいし、プログラム実行装置10に内蔵されていてもよい。また、プログラム実行システムが車載装置に適用される場合、起動スイッチ21は車両の電源スイッチやイグニッションスイッチと連動するように構成してもよい。
【0014】
表示装置22としては、液晶ディスプレイが代表的であるが、画像表示機能を有する任意の装置(例えばスマートフォンやタブレット端末、車両のインストルメントパネルの表示部など)を利用してもよい。また、表示装置22は、ユーザによる操作の入力手段としても機能するタッチパネルであってもよい。音声出力装置23は、スピーカやヘッドフォン等が一般的であるが、これも音声出力機能を有する任意の装置を利用してもよい。
【0015】
プログラム実行装置10は、プログラム実行部11、記憶部12、リソース監視部13および常駐プログラム起動制御部14を備えている。プログラム実行装置10はコンピュータを用いて構成されており、プログラム実行部11、リソース監視部13および常駐プログラム起動制御部14は、コンピュータがプログラムに従って動作することにより実現される。記憶部12は、例えばハードディスク、リムーバブルディスクなど不揮発性の記憶媒体によって構成される。
【0016】
プログラム実行部11は、複数のアプリケーションを複数同時に実行することができる。また、プログラム実行部11は、各アプリケーションの動作に従って、当該アプリケーションの実行結果を表示装置22または音声出力装置23から出力することもできる。
【0017】
一般的に、プログラム実行装置で実行されるアプリケーションは、1以上のプログラムと、当該アプリケーションに関する各種の情報が記載された定義ファイルとを含むパッケージとして構成されている。また、一般的なアプリケーションは、図2に示すように、表示装置22に表示される実行画面を有する表示プログラムと、表示装置22への描画は行わずに常駐する(つまりバックグラウンドで動作する)常駐プログラムと、定義ファイルとを含む構成となる。ただし、表示プログラムを含まずに常駐プログラムと定義ファイルからなるアプリケーションや、常駐プログラムを含まずに表示プログラムと定義ファイルからなるアプリケーションもある。また1つのアプリケーションが、表示プログラム、常駐プログラムまたは定義ファイルを複数有することもある。
【0018】
常駐プログラムの例としては、ナビゲーション用の地図アップデート確認プログラムや、SNS(Social Networking Service)アプリケーションの投稿確認プログラム、ニュースアプリケーションの新着ニュース取得プログラム、音楽アプリケーションのアップデート確認プログラム、天気予報アプリケーションの最新情報取得プログラムなどがある。
【0019】
プログラム実行部11により実行されるアプリケーションは、記憶部12に記憶されている。ここで、記憶部12に記憶されているアプリケーションには、常駐プログラムを含むアプリケーションが複数含まれているものとする。また、プログラム実行部11は、システム起動時に、それら複数のアプリケーションの常駐プログラムを、予め規定された順番で起動させる。プログラム実行部11が複数の常駐プログラムを起動させる順番(常駐プログラム起動順序)を規定する情報である「起動順序定義」は、記憶部12に記憶されており、システム起動時にプログラム実行部11によって読み出される。
【0020】
図3は、記憶部12に記憶される起動順序定義を模式的に示した図である。図3の例では、起動順序定義として、常駐プログラムA〜Eを起動する順番が示されている。本実施の形態では、起動順序定義は、常駐プログラムを起動させる順番をループ状に規定しており、起動対象とする常駐プログラムを示す情報を含んでいるものとする。
【0021】
図3に示す起動順序定義が記憶部12に記憶されていた場合、プログラム実行部11は、起動対象となっている常駐プログラムAを最初に起動し、その後は、起動対象を起動順序定義に従って1つずつ進めながら、起動対象となった常駐プログラムを起動する。つまり、プログラム実行部11は、常駐プログラムA〜Eを、常駐プログラムA,B,C,D、E…の順番で起動することになる。
【0022】
リソース監視部13は、各アプリケーションによるリソースの使用状況を監視する。リソースの使用状況を表す情報としては、メモリ使用量やCPUの使用率などが挙げられるが、本実施の形態では、リソース監視部13がプログラム実行装置10のメモリ使用量を監視するものとする。
【0023】
ここで、プログラム実行部11が実行するプログラムには、ユーザが導入したアプリケーションに含まれるプログラムだけでなく、プログラム実行装置10の基本的な動作を実現するためのプログラム(システムプログラム)も含まれている。システムプログラムは必ず実行する必要があるため、一般的には、図4のようにプログラム実行装置10のメモリ容量の一部がシステムプログラム用の領域として予約され、残りの部分がアプリケーション用の領域として使用される。本明細書でいう「メモリ容量」とは、アプリケーション用の領域の容量を指している。
【0024】
常駐プログラム起動制御部14は、複数の常駐プログラムを起動させる順番(常駐プログラム起動順序)を制御する。具体的には、常駐プログラム起動制御部14は、システム起動時に常駐プログラムが起動されることでメモリ容量が不足することが検出された場合に、次回のシステム起動時における起動順序定義を、今回のシステム起動時に用いた起動順序定義から変更する。すなわち、常駐プログラム起動制御部14は、記憶部12に記憶される起動順序定義の内容を更新する。それによって、次回のシステム起動時における常駐プログラム起動順序が、今回のシステム起動時のものから変更される。
【0025】
次に、図5を用いて、システム起動時におけるプログラム実行装置10の動作を説明する。図5は、記憶部12に図3の起動順序定義が記憶されていると仮定したときの、プログラム実行装置10の動作を示している。ここで、プログラム実行装置10のメモリ容量は80MBであり、常駐プログラムが使用できるメモリ容量の上限(メモリ使用上限)は50MBと規定されているものとする。つまり、常駐プログラムによるメモリ使用量が50MBを超えるとメモリ不足と判断される。また、図3に示すように、常駐プログラムA,B,C,D,Eのメモリ使用量は、それぞれ20MB,10MB,30MB,15MB,25MBであるものとする。
【0026】
起動スイッチ21によってプログラム実行装置10の電源がオンにされ、システムが起動すると、プログラム実行部11は、起動順序定義(図3)に従って、起動対象となっている常駐プログラムAを起動する。図5の(a)のように、常駐プログラムAを起動しただけではメモリ使用量は20MBであり、メモリ使用上限の50MBには達しない。その場合、プログラム実行部11は、起動順序定義に従って起動対象を常駐プログラムBに進め、常駐プログラムBを起動する。図5の(b)のように、常駐プログラムA,Bが起動してもメモリ使用量は30MBであり、メモリ使用上限には達しないので、プログラム実行部11は、さらに起動対象を常駐プログラムCに進め、常駐プログラムCを起動する。
【0027】
図5の(c)のように、常駐プログラムA,B,Cが起動するとメモリ使用量は60MBとなり、メモリ使用上限を超えるため、メモリ不足となる。その場合、プログラム実行部11は、メモリ使用量がメモリ使用上限を超える原因となった(つまり直前に起動させた)常駐プログラムCを終了させて、図5の(d)のようにメモリ不足を解消する。さらに、常駐プログラム起動制御部14は、このとき起動対象となっている常駐プログラムCが、次回のシステム起動時に最初に起動させる常駐プログラムになるように、記憶部12に記憶されている起動順序定義を更新する。つまり、図6のように常駐プログラムCが起動対象となっている起動順序定義を、記憶部12に記憶させる。その結果、次回のシステム起動時には、プログラム実行部11により最初に常駐プログラムCが起動されてから、上記と同様の動作が行われることになる。
【0028】
このように、本実施の形態では、起動順序定義におけるループを変更せずに、最初に起動させる常駐プログラムを変更することによって、起動順序定義の内容を変更している。従って、システムの起動と終了が繰り返されるうちに、どの常駐プログラムにも実行される機会が与えられることになり、全く起動されない常駐プログラムが生じることが防止される。
【0029】
図7は、実施の形態1に係るプログラム実行装置10のシステム起動時の動作を示すフローチャートである。図5を用いて説明した動作は、プログラム実行装置10が当該フローチャートに従った動作を行うことで実現される。
【0030】
起動スイッチ21によってプログラム実行装置10の電源がオンにされ、システムが起動すると、プログラム実行部11は、記憶部12から起動順序定義を取得し(ステップS11)、起動対象となっている常駐プログラムを起動する(ステップS12)。次に、リソース監視部13がプログラム実行装置10のメモリ使用量を監視して、メモリ使用量がメモリ使用上限以下であるか否かを確認する(ステップS13)。メモリ使用量がメモリ使用上限以下であれば(ステップS13でYES)、起動対象を次の常駐プログラムに変更し(ステップS14)、ステップS12へ戻る。
【0031】
メモリ使用量がメモリ使用上限を超えていれば(ステップS13でNO)、プログラム実行部11は、直前に起動させた常駐プログラムを終了させる(ステップS15)。さらに、常駐プログラム起動制御部14が、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定し(ステップS16)、その常駐プログラムが起動対象となっている起動順序定義を、記憶部12に記憶させる(ステップS17)。以上により、システムの起動処理が完了する。
【0032】
なお、上の説明では、実際に常駐プログラムを起動させてから(ステップS12)、メモリ不足となるか否かを判断したが(ステップS13)、各常駐プログラムのメモリ使用量が予め分かっている場合には、常駐プログラムを起動させる前にメモリ不足が生じるか否かを判断してもよい。その場合、メモリ不足が生じないと判断された場合にだけ常駐プログラムを起動して常駐させればよい。
【0033】
例えば、アプリケーションに含まれる定義ファイル(図2)に、常駐プログラムのメモリ使用量の情報が記載されている場合には、当該常駐プログラムのメモリ使用量を予め判断できる。また、定義ファイルに記載されるメモリ使用量の情報は、当該常駐プログラムが過去に起動したときの実測値であってもよい。
【0034】
以下、常駐プログラムのメモリ使用量を予め判断できる場合における、プログラム実行装置10のシステム起動時の動作をより詳細に示す。図8は、その動作を示すフローチャートである。
【0035】
起動スイッチ21によってプログラム実行装置10の電源がオンにされ、システムが起動すると、プログラム実行部11は、記憶部12から起動順序定義を取得する(ステップS21)。次に、プログラム実行部11は、リソース監視部13が検出したプログラム実行装置10の現在のメモリ使用量と、起動対象となっている常駐プログラムのメモリ使用量に基づいて、起動対象となっている常駐プログラムを起動させたときのメモリ使用量を予測し、そのときのメモリ使用量がメモリ使用上限以下に収まるか否かを判断する(ステップS22)。
【0036】
起動対象となっている常駐プログラムを起動させてもメモリ使用量がメモリ使用上限以下に収まると判断されれば(ステップS22でYES)、その常駐プログラムを起動させる(ステップS23)。そして、起動対象を次の常駐プログラムに変更して(ステップS24)、ステップS22へ戻る。
【0037】
一方、起動対象となっている常駐プログラムを起動させるとメモリ使用量がメモリ使用上限を超えると判断されれば(ステップS22でNO)、その常駐プログラムは起動させない。この場合、常駐プログラム起動制御部14が、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定し(ステップS25)、その常駐プログラムが起動対象となっている起動順序定義を、記憶部12に記憶させる(ステップS26)。以上により、システムの起動処理が完了する。
【0038】
なお、ユーザがプログラム実行装置10に新たなアプリケーションを導入した場合、常駐プログラム起動制御部14は、図9のように、新たな常駐プログラム(F)を、記憶部12に記憶されている起動順序定義における常駐プログラムの順番に追加する。起動順序定義に新たなアプリケーションを追加する位置は任意でよいが、例えば、新たな常駐プログラムおよびそれを追加する位置の前後の常駐プログラムのメモリ使用量の平均値が、起動順序定義に含まれる全ての常駐プログラムのメモリ使用量の平均値に最も近くなる位置に追加するとよい。そうすることにより、メモリ使用量が大きなアプリケーションが起動順序定義の特定位置に集中することを防止でき、より多くの常駐プログラムが同時に実行されるようになる。
【0039】
図9に示すように、新たな常駐プログラムFのメモリ使用量が20MBの場合、常駐プログラムFを追加した後の起動順序定義に含まれる全ての常駐プログラムA〜Fのメモリ使用量の平均値は、20.0MBである。また、図10に示すように、新たな常駐プログラムFおよびそれを追加する位置の前後の常駐プログラムのメモリ使用量の平均値は、常駐プログラムFを常駐プログラムA,Bの間に追加すると16.7MB、常駐プログラムFを常駐プログラムB,Cの間に追加すると20.0MB、常駐プログラムFを常駐プログラムC,Dの間に追加すると21.7MB、常駐プログラムFを常駐プログラムD,Eの間に追加すると20.0MB、常駐プログラムFを常駐プログラムE,Aの間に追加すると21.7MBとなる。よって、常駐プログラムFは、常駐プログラムB,Cの間または常駐プログラムD,Eの間に追加するとよい。図11は、常駐プログラムFを、常駐プログラムB,Cの間に追加した場合の起動順序定義を示している。
【0040】
<実施の形態2>
実施の形態1では、起動順序定義における常駐プログラムの順番のループを変更せずに、最初に起動させる常駐プログラムを変更することによって起動順序定義の内容を変更したが、常駐プログラム起動順序の変更方法はこれに限られない。実施の形態2では、常駐プログラム起動制御部14が常駐プログラム起動順序を変更する際、図12に示すように、起動順序定義における常駐プログラムの順番をランダムに決定する。この方法によっても、実施の形態1と同様の効果が得られる。
【0041】
図13は、実施の形態2に係るプログラム実行装置10のシステム起動時の動作を示すフローチャートである。このフローチャートは、図7のフローチャートに対し、次回のシステム起動時の起動対象を決定するステップS16を、次回のシステム起動時における起動順序定義における常駐プログラムの順番をランダムに決定するステップS16aに置き換えただけのものであるため、ここでの説明は省略する。
【0042】
<実施の形態3>
実施の形態1では、常駐プログラムの起動によってメモリ不足が生じた場合、その次以降の常駐プログラムは起動されない。例えば図5の例において、図5の(c)のように常駐プログラムCの起動によりメモリ不足が生じると、図5の(d)の状態でシステム起動の処理が終了し、常駐プログラムD,Eは起動されない。
【0043】
しかし、図5の(d)の状態ではメモリ使用量は30MBであり、メモリ使用上限の50MBまで20MBの余裕があるので、メモリ使用量が15MBの常駐プログラムDを実行可能なはずである。実施の形態3では、このようにメモリ容量を十分に有効活用できていない状態となることを防止する。
【0044】
すなわち、実施の形態3に係るプログラム実行装置10では、プログラム実行部11が、メモリ不足の原因となる常駐プログラムの順番を飛ばして次の常駐プログラムを常駐させる動作を、起動順序定義に従って繰り返し行う。その繰り返しの動作は、起動順序定義内の常駐プログラムを一巡するまで実行される。
【0045】
この動作を、図14を用いて説明する。図14は、図3の起動順序定義に基づく動作を示している。ここでも、プログラム実行装置10のメモリ容量は80MBであり、メモリ使用上限は50MBとする。
【0046】
起動スイッチ21によってプログラム実行装置10の電源がオンにされ、システムが起動すると、プログラム実行部11は、記憶部12に記憶されている起動順序定義(図3)に従って、起動対象となっている常駐プログラムAを起動する。図14の(a)のように、常駐プログラムAを起動しただけではメモリ使用量は20MBであり、メモリ使用上限には達しない。その場合、プログラム実行部11は、起動対象を常駐プログラムBに進め、常駐プログラムBを起動する。図14の(b)のように、常駐プログラムA,Bが起動してもメモリ使用量は30MBでありメモリ使用上限には達しないので、プログラム実行部11は、起動対象を常駐プログラムCに進め、常駐プログラムCを起動する。
【0047】
図14の(c)のように、常駐プログラムA,B,Cが起動するとメモリ使用量は60MBとなり、メモリ使用上限を超えるので、メモリ不足となる。その場合、プログラム実行部11は、メモリ使用量がメモリ使用上限を超える原因となった(つまり直前に起動させた)常駐プログラムCを終了させた上で、起動対象を常駐プログラムDに進め、常駐プログラムDを起動する。図14の(d)のように、常駐プログラムA,B,Dが起動してもメモリ使用量は45MBであり、メモリ不足にはならない。その場合、プログラム実行部11は、起動対象を常駐プログラムEに進め、常駐プログラムEを起動する。
【0048】
図14の(e)のように、常駐プログラムA,B,D,Eが起動するとメモリ使用量は70MBになり、メモリ不足となる。その場合、プログラム実行部11は、メモリ使用量がメモリ使用上限を超える原因となった常駐プログラムEを終了させ、起動対象を常駐プログラムAに進める。これにより起動対象が起動順序定義内の常駐プログラムを一巡するため、常駐プログラムを起動させる処理は終了する。
【0049】
常駐プログラム起動制御部14は、メモリ使用量がメモリ使用上限を超える1回目の原因となった常駐プログラムが次回のシステム起動時に最初に起動するように、起動順序定義を変更する。図14に示した動作では、常駐プログラムCを起動させたときに初めてメモリ不足となったため、次回のシステム起動時に最初に起動させる常駐プログラムは常駐プログラムCに設定される。つまり、図6のように常駐プログラムCが起動対象となっている起動順序定義を、記憶部12に記憶させる。その結果、次回のシステム起動時には、常駐プログラムCが最初に起動されてから、上記と同様の動作が行われることになる。
【0050】
このように、本実施の形態では、常駐プログラムの起動によってメモリ不足が生じた場合、代わりに起動できる常駐プログラムが探索され、そのような常駐プログラムが見つかればそれが起動される。よって、実施の形態1よりも常駐する常駐プログラムの数を多くできる。
【0051】
図15は、実施の形態3に係るプログラム実行装置10のシステム起動時の動作を示すフローチャートである。図14を用いて説明した動作は、プログラム実行装置10が当該フローチャートに従った動作を行うことで実現される。
【0052】
まず、起動スイッチ21によってプログラム実行装置10の電源がオンにされ、システムが起動すると、プログラム実行部11は、記憶部12から起動順序定義を取得し(ステップS31)、起動対象となっている常駐プログラムを起動する(ステップS32)。次に、リソース監視部13がプログラム実行装置10のメモリ使用量を監視して、メモリ使用量がメモリ使用上限以下であるか否かを確認する(ステップS33)。
【0053】
メモリ使用量がメモリ使用上限以下であれば(ステップS33でYES)、起動対象を次の常駐プログラムに変更する(ステップS34)。このとき起動対象が起動順序定義内の常駐プログラムをまだ一巡していなければ(ステップS35でNO)ステップS32へ戻る。
【0054】
一方、ステップS33においてメモリ使用量がメモリ使用上限を超えていれば(ステップS33でNO)、プログラム実行部11は、直前に起動させた常駐プログラムを終了させる(ステップS36)。このとき、メモリ使用量がメモリ使用上限を超えたのが1回目であれば(ステップS37でYES)、常駐プログラム起動制御部14は、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定して(ステップS38)、ステップS34へ移行する。メモリ使用量がメモリ使用上限を超えたのが初めてでなければ(ステップS37でNO)、ステップS38の処理を行わずにステップS34へと移行する。
【0055】
以上の処理が繰り返し行われ、起動対象が起動順序定義内の常駐プログラムを一巡すれば(ステップS35でYES)、次回のシステム起動時の起動対象が決定済みかどうか(つまりステップS38の処理が行われたか否か)を確認する(ステップS39)。次回のシステム起動時の起動対象が決定済みでなければ(ステップS39でNO)、常駐プログラム起動制御部14は、現在起動対象となっている常駐プログラムを、次回のシステム起動時の起動対象に決定し(ステップS40)、そのように規定された起動順序定義を記憶部12に記憶させる(ステップS41)。
【0056】
次回のシステム起動時の起動対象が決定済みであれば(ステップS39でYES)、常駐プログラム起動制御部14は、ステップS40の処理を行わずに、ステップS38で決定したとおりに起動対象が規定された起動順序定義を記憶部12に記憶させる(ステップS41)。以上により、システムの起動処理が完了する。
【0057】
なお、実施の形態3においても、各常駐プログラムのメモリ使用量が予め分かっている場合には、実際に常駐プログラムを起動させることなくメモリ不足が生じるか否かを判断してもよい。
【0058】
実施の形態3では、常駐プログラム起動制御部14は、起動順序定義におけるループは変更せずに、メモリ使用量が特定の値を超える1回目の原因となる常駐プログラムが次回のシステム起動時に最初に起動するように、起動順序定義の内容を変更したが、実施の形態2を適用して、常駐プログラム起動制御部14が起動順序定義を変更する際、起動順序定義における常駐プログラムの順番をランダムに決定してもよい。
【0059】
<実施の形態4>
実施の形態1では、プログラム実行装置10が1つの起動順序定義のみを使用する例を示したが、実施の形態4では、プログラム実行装置10が複数の起動順序定義を使用する例を示す。すなわち、常駐プログラム起動制御部14が、図16のような複数の起動順序定義を複数管理し、予め定められた条件に従って、プログラム実行部11に使用させる起動順序定義を切り替える。その他の動作は実施の形態1(図7)と同様である。
【0060】
例えば、現在位置の条件に応じて複数の起動順序定義を切り替える場合、記憶部12には、現在位置の各条件に対応した複数の起動順序定義が記憶される。常駐プログラム起動制御部14は、プログラム実行装置10の起動時に現在位置を取得し、図7のステップS11において、プログラム実行部11に対し現在位置に応じた起動順序定義を記憶部12から読み出すように指示する。
【0061】
どの起動順序定義を選択するかの判断基準となる条件としては、現在位置の条件の他、天候の条件やユーザの条件などが考えられる。これらの条件を用いる場合のプログラム実行装置10の動作も上記と同様でよく、常駐プログラム起動制御部14が、図7のステップS11において、プログラム実行部11に対し現在の天候やユーザに応じた起動順序定義を記憶部12から読み出すように指示すればよい。
【0062】
実施の形態4によれば、プログラム実行装置10を起動したときの現在位置や天候などに応じて、起動順序定義を使い分けることが可能になる。また、プログラム実行装置10を使用するユーザごとに起動順序定義を切り替えることも可能である。特に、ユーザごとに独立してアプリケーションを導入可能な場合には、図17のように、ユーザごとに導入した常駐プログラム自体が異なることがあるため、ユーザごとに起動順序定義の使い分けができることは非常に有効である。
【0063】
<実施の形態5>
実施の形態5では、複数の常駐プログラムのそれぞれに優先度を規定し、常駐プログラム起動制御部14がそれぞれの優先度に対応した複数の起動順序定義を管理する構成としたプログラム実行装置10を示す。
【0064】
図18は、常駐プログラムを高優先度の常駐プログラムA〜Eと、低優先度の常駐プログラムa〜eとに分けて、優先度ごとに起動順序定義を分けた例である。システム起動時には、プログラム実行部11が、各常駐プログラムをその優先度に対応する起動順序定義に従った順番で起動させる。
【0065】
この場合、低優先度の常駐プログラムは、高優先度の常駐プログラムが全て起動してもメモリ容量に余裕がある場合にだけ起動されるようにしてもよいが、その場合には、低優先度の常駐プログラムが全く起動されなくなることも考えられる。そのため、各優先度の常駐プログラムが少なくとも1つずつは実行可能なように、常駐プログラムを起動させる順番を決定することが好ましい。システム起動時に各優先度の常駐プログラムが少なくとも1つずつ実行されれば、システムの起動と終了が繰り返されるうちに、低優先度の常駐プログラムも全て起動される機会が得られ、全く起動されない常駐プログラムが生じることを防止できる。
【0066】
図19は、実施の形態5に係るプログラム実行装置10のシステム起動時の動作を示すフローチャートである。ここでは、高優先度の常駐プログラムと低優先度の常駐プログラムとが規定されており、プログラム実行装置10が、各優先度の常駐プログラムを少なくとも1つずつは実行する動作を示す。なお、プログラム実行装置10の記憶部12には、図18の例のような、高優先度の常駐プログラム用の起動順序定義と、低優先度の常駐プログラム用の起動順序定義とが記憶されている。
【0067】
起動スイッチ21によってプログラム実行装置10の電源がオンにされ、システムが起動すると、プログラム実行部11は、記憶部12から高優先度の常駐プログラム用の起動順序定義と低優先度の常駐プログラム用の起動順序定義をそれぞれ取得する(ステップS51)。そして、プログラム実行部11は、高優先度の常駐プログラムの起動対象を起動する(ステップS52)。次に、リソース監視部13がプログラム実行装置10のメモリ使用量を監視して、メモリ使用量がメモリ使用上限以下であるか否かを確認する(ステップS53)。メモリ使用量がメモリ使用上限以下であれば(ステップS53でYES)、高優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更し(ステップS54)、ステップS52へ戻る。
【0068】
ステップS52〜S54の処理が繰り返されて、メモリ使用量がメモリ使用上限を超えるようになれば(ステップS53でNO)、プログラム実行部11は、直前に起動させた高優先度の常駐プログラムを終了させる(ステップS55)。ここまでの処理により、メモリ使用量がメモリ使用上限を超えない範囲で、高優先度の常駐プログラムが起動される。
【0069】
続いて、プログラム実行部11は、低優先度の常駐プログラムの起動対象を起動する(ステップS56)。次に、リソース監視部13が、メモリ使用量がメモリ使用上限以下であるか否かを確認する(ステップS57)。メモリ使用量がメモリ使用上限以下であれば(ステップS57でYES)、低優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更し(ステップS58)、ステップS56へ戻る。
【0070】
メモリ使用量がメモリ使用上限を超えていれば(ステップS57でNO)、プログラム実行部11は、低優先度の常駐プログラムが2つ以上起動しているかを確認する(ステップS59)。なお、ステップS59の前にステップS56が実行されるので、ステップS59では、低優先度の常駐プログラムが少なくとも1つは起動している。
【0071】
低優先度の常駐プログラムが1つしか起動していない場合は(ステップS59でNO)、その常駐プログラムの動作を継続させつつメモリ使用量を下げるために、起動している高優先度の常駐プログラムのうち最後に起動させたものを終了させる(ステップS60)。さらに、高優先度の常駐プログラムの起動対象を、現在の起動対象の1つ前のものに変更する(ステップS61)。その結果、高優先度の常駐プログラムの起動対象は、ステップS60で終了させた常駐プログラムになる。その後、リソース監視部13が、メモリ使用量がメモリ使用上限以下であるか否かを再度確認し(ステップS62)、メモリ使用量がメモリ使用上限を超えていれば(ステップS62でNO)ステップS60へ戻る。つまり、ステップS60,S61の処理は、メモリ使用量がメモリ使用上限以下になるまで繰り返し行われる。それにより、起動している唯一の低優先度の常駐プログラムの動作を継続させつつ、メモリ使用量をメモリ使用上限以下まで下げることができる。
【0072】
そして、メモリ使用量がメモリ使用上限以下になれば(ステップS62でYES)、ステップS56へ戻る。それにより、ステップS60の処理で増えたメモリの空き容量が大きい場合に更に低優先度の常駐プログラムを起動させることができ、メモリ容量を有効に活用できる。
【0073】
一方、ステップS59において、低優先度の常駐プログラムが2つ以上起動していた場合には(ステップS59でYES)、高優先度の常駐プログラムの動作を継続させつつメモリ使用量をメモリ使用上限以下にするために、起動している低優先度の常駐プログラムのうち最後に起動させたものを終了させる(ステップS63)。その後、常駐プログラム起動制御部14が、各優先度の常駐プログラムの現在の起動対象を、それぞれ次回のシステム起動時の起動対象に決定した上で(ステップS64)、各優先度の常駐プログラム用の起動順序定義を、記憶部12に記憶させる(ステップS65)。以上により、システムの起動処理が完了する。
【0074】
なお、図19の動作は、実際に常駐プログラムを起動させてから(ステップS52,S56)、メモリ不足となるか否かを判断したが(ステップS53,S57)、各常駐プログラムのメモリ使用量が予め分かっている場合には、常駐プログラムを起動させる前にメモリ不足が生じるか否かを判断してもよい。その場合、メモリ不足が生じないと判断された場合にだけ常駐プログラムを起動して常駐させればよい。
【0075】
以下、常駐プログラムのメモリ使用量を予め判断できる場合における、プログラム実行装置10のシステム起動時の動作を説明する。図20は、その動作を示すフローチャートである。
【0076】
起動スイッチ21によってプログラム実行装置10の電源がオンにされ、システムが起動すると、プログラム実行部11は、記憶部12から高優先度の常駐プログラム用の起動順序定義と低優先度の常駐プログラム用の起動順序定義をそれぞれ取得する(ステップS71)。次に、プログラム実行部11は、リソース監視部13が検出した現在のメモリ使用量と、高優先度の常駐プログラムの起動対象のメモリ使用量と、低優先度の常駐プログラムの起動対象のメモリ使用量とに基づいて、高優先度の常駐プログラムの起動対象と低優先度の常駐プログラムの起動対象を起動させたときのメモリ使用量を予測し、そのときのメモリ使用量がメモリ使用上限以下に収まるか否かを判断する(ステップS72)。
【0077】
高優先度の常駐プログラムの起動対象と低優先度の常駐プログラムの起動対象を起動してもメモリ使用量がメモリ使用上限以下に収まると判断されれば(ステップS72でYES)、高優先度の常駐プログラムの起動対象を起動させる(ステップS73)。そして、高優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更して(ステップS74)、ステップS72へ戻る。ステップS72〜S74の処理により、低優先度の常駐プログラムの起動対象の起動に必要なメモリ容量を残しつつ、メモリ使用量がメモリ使用上限を超えない範囲で、高優先度の常駐プログラムが起動される。
【0078】
その後、高優先度の常駐プログラムの起動対象と低優先度の常駐プログラムの起動対象を起動するとメモリ使用量がメモリ使用上限を超えると判断されるようになると(ステップS72でNO)、プログラム実行部11は、リソース監視部13が検出した現在のメモリ使用量と、低優先度の常駐プログラムの起動対象のメモリ使用量とに基づいて、低優先度の常駐プログラムの起動対象を起動させたときのメモリ使用量を予測し、そのときのメモリ使用量がメモリ使用上限以下に収まるか否かを判断する(ステップS75)。
【0079】
低優先度の常駐プログラムの起動対象を起動してもメモリ使用量がメモリ使用上限以下に収まると判断されれば(ステップS75でYES)、低優先度の常駐プログラムの起動対象を起動させる(ステップS76)。そして、低優先度の常駐プログラムの起動対象を現在の起動対象の次のものに変更して(ステップS77)、ステップS75へ戻る。先に述べたように、ステップS72〜S74では低優先度の常駐プログラムの起動対象の起動に必要なメモリ容量は確保されているので、少なくとも1回はステップS75でYESと判定され、低優先度の常駐プログラムが少なくとも1つ起動することになる。
【0080】
一方、低優先度の常駐プログラムの起動対象を起動するとメモリ使用量がメモリ使用上限を超えると判断されれば(ステップS75でNO)、低優先度の常駐プログラムの更なる起動は行わない。この場合、常駐プログラム起動制御部14が、各優先度の常駐プログラムの現在の起動対象を、それぞれ次回のシステム起動時の起動対象に決定した上で(ステップS78)、各優先度の常駐プログラム用の起動順序定義を、記憶部12に記憶させる(ステップS79)。以上により、システムの起動処理が完了する。
【0081】
なお、各常駐プログラムの優先度は固定されていなくてもよく、例えば、予め定められた条件(現在位置、天候、ユーザなどの条件)に従って、優先度が変更されるようにしてもよい。
【0082】
<実施の形態6>
実施の形態1〜5では、プログラム実行部11が、常駐プログラムをシステム起動時のみに起動させる例を示したが、実施の形態6では、プログラム実行部11が、システム起動後に、常駐させる常駐プログラムを起動順序定義に従って一定周期で変更する。
【0083】
具体的には、プログラム実行部11は、システム起動時に実施の形態1(図7)の処理を実行した後、一定の時間が経過するごとに、常駐している常駐プログラムのうち最も先に起動した常駐プログラムを終了させて、再び、図7の処理を実行する。
【0084】
図21を用いて、その動作を説明する。システム起動時に、図3の起動順序定義に基づいて、図7の処理を実行すると、図21の(a)のように常駐プログラムA,Bが起動される。その後、一定の時間が経過すると、常駐プログラムA,Bのうち最も先に起動した常駐プログラムAを終了させ、再び図7の処理を実行する。すると、常駐プログラムCが起動し、図21の(b)のように常駐プログラムB,Cが常駐した状態になる。一定の周期でこの動作が繰り返されると、図21の(c)のように常駐プログラムC,Dが常駐した状態、図21の(d)のように常駐プログラムD,Eが常駐した状態、図21の(e)のように常駐プログラムE,Aが常駐した状態、と変化して、図21の(a)の状態に戻る。この動作はプログラム実行装置10がオフにされるまで繰り返される。
【0085】
本実施の形態では、システムが動作している間、常駐プログラムが起動順序定義に従って切り替わるため、システムの動作を終了させることなく実施の形態1と同様の効果が得られる。特に、スマートフォンなど、頻繁に電源をオフにしない装置に有効である。なお、図7の処理が繰り返し実行される場合、システムの動作を終了させるときには、最後に常駐した常駐プログラムの次の常駐プログラム、つまりメモリ使用量がメモリ使用上限を超える原因となった常駐プログラムが、次回のシステム起動時に最初に起動するようになる。あるいは、実施の形態2を適用し、次回のシステム起動時に用いる起動順序定義における常駐プログラムの順番をランダムに決定してもよい。
【0086】
また、実施の形態5では、システム起動後に実施の形態1(図7)の処理が一定周期で実行される例を示したが、実施の形態3(図15)の処理が一定周期で実行されるようにしてもよい。
【0087】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【0088】
本発明は詳細に説明されたが、上記した説明は、すべての態様において、例示であって、この発明がそれに限定されるものではない。例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。
【符号の説明】
【0089】
10 プログラム実行装置、11 プログラム実行部、12 記憶部、13 リソース監視部、14 常駐プログラム起動制御部、21 起動スイッチ、22 表示装置、23 音声出力装置。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21