(57)【要約】  ハイパーバイザ（１３１）が存在通知を受けると、ノードの参照対象を拡張設定し（Ｓ４０３）、旧ノード（Ｎ１）を生成し（Ｓ４０４）、ダウンローダ（１３５）に対してダウンロード開始を通知する（Ｓ４０５）。リンカ（１３４）からチェック結果通知（不使用）を受けると、対象ライブラリ（ａ．ｄｌｌ）の呼出禁止を設定する（Ｓ４１０）。呼出禁止を設定すると、ハイパーバイザ（１３１）は、旧ａ．ｄｌｌの消去指示をダウンローダ（１３５）に通知する（Ｓ４１１）。ハイパーバイザ（１３１）は、消去完了の通知を受けると、旧ノード（Ｎ１）の識別ビットを「０」から「１」に書き換える（Ｓ４１４）。そして、対象ライブラリ（ａ．ｄｌｌ）の呼出禁止を解除する（Ｓ４１５）。これにより、システム規模や費用の低減化を図りつつ、無停止アップデートを実現する。
2011104825.tif 000002
【特許請求の範囲】
【請求項１】
ＯＳ内のライブラリ群の中の対象ライブラリに関する新バージョンのファイルのダウンロードと前記対象ライブラリに関する旧バージョンのファイルの消去を実行するプロセッサが、
前記新バージョンのファイルの存在を検出する検出工程と、
前記検出工程によって検出された場合、前記旧バージョンのファイルの保存領域を指定する第１のノードとは異なる保存領域を指定する第２のノードを生成する生成工程と、
前記生成工程によって生成された第２のノードにより指定された保存領域に前記新バージョンのファイルがダウンロードされた場合、前記旧バージョンのファイルが使用中であるか否かを判断する判断工程と、
前記判断工程によって使用中でないと判断された場合、前記旧バージョンのファイルおよび前記第１のノードの消去指示を通知する通知工程と、
を実行することを特徴とする更新方法。
【請求項２】
前記判断工程は、
前記判断工程によって使用中であると判断された場合、前記旧バージョンのファイルを使用しているプロセスが終了したか否かを判断し、
前記通知工程は、
前記判断工程によって前記プロセスが終了したと判断された場合、前記旧バージョンのファイルおよび前記第１のノードの消去指示を通知することを特徴とする請求項１に記載の更新方法。
【請求項３】
前記対象ライブラリの呼出要求があった場合、前記旧バージョンのファイルが使用中でかつ前記新バージョンのファイルがダウンロード済みである場合、前記新バージョンのファイルを呼出対象に決定する決定工程を実行し、
前記通知工程は、
前記決定工程によって決定された呼出対象を、前記呼出要求をしたプロセスに通知することを特徴とする請求項１または２に記載の更新方法。
【請求項４】
前記旧バージョンのファイルが使用中でない場合、前記旧バージョンのファイルおよび前記第１のノードの消去指示の通知に先立って、前記対象ライブラリの呼出を禁止設定し、前記旧バージョンのファイルおよび前記第１のノードが消去された場合、前記禁止設定を解除する禁止／解除設定工程を実行することを特徴とする請求項１または２に記載の更新方法。
【請求項５】
前記検出工程によって検出された場合、前記ＯＳに含まれている各ライブラリの保存領域を指定する各ノードの参照対象を、前記ノードの一部の指定領域から前記ノードの全領域に切り替える第１の切替工程と、
前記旧バージョンのファイルおよび前記第１のノードが消去された場合、前記各ライブラリの保存領域を指定するノードの参照対象を、前記ノードの全領域から前記ノードの一部の指定領域に切り替える第２の切替工程と、を実行し、
前記生成工程は、
前記第１のノードの前記一部の指定領域の値と同一値を前記第２のノードの前記一部の指定領域に割り当てるとともに、前記第１のノードの前記一部の指定領域以外の残余の領域の値と異なる値を前記第２のノードの前記一部の指定領域以外の残余の領域の値に割り当てることにより、前記第２のノードを生成することを特徴とする請求項１または２に記載の更新方法。
【請求項６】
前記旧バージョンのファイルおよび前記第１のノードが消去された場合、前記第２のノードの前記残余の領域の値を、前記第１のノードの前記残余の領域の値と同一値に書き換える書換工程を実行することを特徴とする請求項５に記載の更新方法。
【請求項７】
ＯＳ内のライブラリ群の中の対象ライブラリに関する新バージョンのファイルのダウンロードと前記対象ライブラリに関する旧バージョンのファイルの消去を実行する更新装置であって、
前記新バージョンのファイルの存在を検出する検出手段と、
前記検出手段によって検出された場合、前記旧バージョンのファイルの保存領域を指定する第１のノードとは異なる保存領域を指定する第２のノードを生成する生成手段と、
前記生成手段によって生成された第２のノードにより指定された保存領域に前記新バージョンのファイルがダウンロードされた場合、前記旧バージョンのファイルが使用中であるか否かを判断する判断手段と、
前記判断手段によって使用中でないと判断された場合、前記旧バージョンのファイルおよび前記第１のノードの消去指示を通知する通知手段と、
を備えることを特徴とする更新装置。
【請求項８】
ＯＳ内のライブラリ群の中の対象ライブラリに関する新バージョンのファイルのダウンロードと前記対象ライブラリに関する旧バージョンのファイルの消去を実行するプロセッサに、
前記新バージョンのファイルの存在を検出する検出工程と、
前記検出工程によって検出された場合、前記旧バージョンのファイルの保存領域を指定する第１のノードとは異なる保存領域を指定する第２のノードを生成する生成工程と、
前記生成工程によって生成された第２のノードにより指定された保存領域に前記新バージョンのファイルがダウンロードされた場合、前記旧バージョンのファイルが使用中であるか否かを判断する判断工程と、
前記判断工程によって使用中でないと判断された場合、前記旧バージョンのファイルおよび前記第１のノードの消去指示を通知する通知工程と、
を実行させることを特徴とする更新プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ライブラリを更新する更新方法、更新装置、および更新プログラムに関する。
【背景技術】
【０００２】
従来の携帯型端末では、ライブラリのアップデートに当たり、更新期間中には機能を停止させる必要があった。このため、更新期間中には、利用者は機能を利用することができない。しかし、汎用計算機とは異なり、携帯型端末などの組み込みシステムは２４時間３６５日動かし続けることを想定しており、機能を停止させなければならないことが問題となっていた。【０００３】
従来技術として、サーバ分野において無停止でアップデートを行う手法が提案されている。主に、主系統の他に待機系統を用意し、主系統のアップデート中には待機系統で処理をおこなうものである（たとえば、下記特許文献１を参照。）。【０００４】
また、システム全体の待機系統を用意するのではなく、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のみを複数搭載することで、無停止でアップデートをおこなう手法が提案されている（たとえば、下記特許文献２〜４を参照。）。【０００５】
下記特許文献１では、複数のＯＳを搭載したシステムにおいて、保守対象ではないシステムによって、保守対象のシステムの機能を補完する。たとえば、システム全体を複数のサブシステムに分割し、それぞれにＯＳ(ローカルＯＳ)を搭載する。また、各ＯＳの機能をすべて持つＯＳ(グローバルＯＳ)を用意し、ローカルＯＳの１つが更新処理を行う場合には、そのＯＳの機能をグローバルＯＳが代行することで、システムを止めずにアップデートを行っている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−３４２１０２号公報
【特許文献２】特開昭５４−１０６１４６号公報
【特許文献３】特開２００５−６３０５０号公報
【特許文献４】特開２００６−３１３１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術において、主系統の他に待機系統を用意し、主系統のアップデート中には待機系統で処理をおこなう場合、組み込みシステムにおいては、システム規模や費用の増加を招くという問題があった。【０００８】
また、特許文献１では、グローバルＯＳが代行することで、システムを止めずにアップデートをおこなっているため、組み込みシステムにおいては、システム規模や費用の増加を招くという問題があった。【０００９】
一方、待機系統やグローバルＯＳがない（たとえば、シングルＯＳ）場合、アップデートを代行することができないため、アップデートの際にシステムを停止しなければならないという問題があった。【００１０】
このように、携帯型端末などの組み込みシステムは２４時間３６５日動かし続けることを想定しており、上述した従来技術では、更新期間中には、利用者は機能を利用することができず、また、機能を停止させなければならないことが問題となっていた。【００１１】
本発明は、上述した従来技術による問題点を解消するため、システム規模や費用の低減化を図りつつ、無停止アップデートを実現することができる更新方法、更新装置、および更新プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、本更新方法、更新装置、および更新プログラムは、ＯＳ内のライブラリ群の中の対象ライブラリに関する新バージョンのファイルのダウンロードと前記対象ライブラリに関する旧バージョンのファイルの消去を実行する更新プログラム、更新装置、および更新方法において、前記新バージョンのファイルの存在を検出し、検出された場合、前記旧バージョンのファイルの保存領域を指定する第１のノードとは異なる保存領域を指定する第２のノードを生成し、生成された第２のノードにより指定された保存領域に前記新バージョンのファイルがダウンロードされた場合、前記旧バージョンのファイルが使用中であるか否かを判断し、使用中でないと判断された場合、前記旧バージョンのファイルおよび前記第１のノードの消去指示を通知することを要件とする。
【発明の効果】
【００１３】
本更新方法、更新装置、および更新プログラムによれば、システム規模や費用の低減化を図りつつ、無停止アップデートを実現することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態にかかる更新装置のハードウェア構成を示すブロック図である。
【図２】ハイパーバイザによるファイルシステムの制御を示す説明図である。
【図３】プロセステーブル、リンクテーブル、およびステータステーブルの参照関係を示す説明図である。
【図４】アップデートモードのシーケンス図（その１）である。
【図５】アップデートモードのシーケンス図（その２）である。
【図６】アップデートモードのシーケンス図（その３）である。
【図７】本実施の形態にかかるライブラリ更新処理手順を示すフローチャートである。
【図８】図７に示したアップデート処理の詳細な処理手順を示すフローチャートである。
【図９】ハイパーバイザによるステータステーブルの更新処理を示すフローチャートである。
【図１０】ハイパーバイザによるライブラリの読み出し処理を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照して、この発明にかかる更新方法、更新装置、および更新プログラムの好適な実施の形態を詳細に説明する。
【００１６】
（更新装置のハードウェア構成）
図１は、本実施の形態にかかる更新装置のハードウェア構成を示すブロック図である。更新装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０２と、メモリ１０３と、有する。ＣＰＵ１０１とＩ／Ｆ１０２とメモリ１０３は、バス１０４により接続されている。
【００１７】
ここで、ＣＰＵ１０１は、更新装置１００の全体の制御を司るプロセッサである。Ｉ／Ｆ１０２は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１０５に、たとえば無線で接続され、このネットワーク１０５を介してダウンロード元のサーバ１０６に接続される。そして、Ｉ／Ｆ１０２は、ネットワーク１０５と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。
【００１８】
メモリ１０３は、各種情報を記憶したり、ＣＰＵ１０１のワークエリアとして使用される。メモリ１０３は、具体的には、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ハードディスクドライブなどの記憶装置である。
【００１９】
メモリ１０３には、ハイパーバイザ１３１、ＯＳ１３２、ファイルシステム１３３、リンカ１３４、ダウンローダ１３５、アプリケーションプログラム１３６が記憶されている。メモリ１０３に記憶されているプログラムは、ＣＰＵ１０１にロードされることで、コーディングされている処理をＣＰＵ１０１に実行させることとなる。
【００２０】
ハイパーバイザ１３１は、ＣＰＵ１０１などのハードウェア上で直接動作するプログラムである。ハイパーバイザ１３１は、ＣＰＵ１０１内のレジスタを直接参照したり、ＣＰＵ１０１内のレジスタの情報を読み出したり、ＣＰＵ１０１内のレジスタの情報を書き換えたりする特権命令を実行することができる。また、ハイパーバイザ１３１は、ファイルシステム１３３に直接アクセスする。
【００２１】
ハイパーバイザ１３１は、通常は上述した処理を実行する通常モードのほか、アップデートモードも有する。アップデートモードでは、ハイパーバイザ１３１が特殊な処理を実行することで、ＯＳ１３２が停止することなく、ライブラリを更新することができる。アップデートモード以外のときは、通常モードである。
【００２２】
また、ハイパーバイザ１３１は、アップデートモード時において、メモリ１０３内にステータステーブル１５１を作成する。ＣＰＵ１０１内の空きレジスタに割り当ててもよい。ステータステーブル１５１は、ライブラリが実行中であるか否か、ダウンロード済みであるか否かといったステータスを管理するテーブルである。
【００２３】
ＯＳ１３２は、ハイパーバイザ１３１上で動作するソフトウェアである。ＯＳ１３２は、カーネル１４１とライブラリ群１４２とを有する。カーネル１４１は、ＣＰＵ管理、タスク管理、メモリ管理、ファイル管理といった処理を実行する。たとえば、タスク管理においては、カーネル１４１は、現在実行されている一または複数のアプリケーションプログラム１３６などのプロセスをプロセステーブル１５２に登録する。
【００２４】
これにより、どのアプリケーションプログラム１３６が実行中であり、どのアプリケーションプログラム１３６が実行終了したかを監視することができる。また、ファイル管理においては、ＯＳ１３２は、ファイルシステム１３３にアクセスすることで、メモリ１０３内に記憶されているファイルにアクセスすることができる。
【００２５】
ライブラリ群１４２は、ライブラリの集合である。ライブラリとは、汎用性の高い複数のプログラム部品をファイル化したプログラムであり、アプリケーションプログラム１３６などＯＳ１３２上で動作する他のプログラムの一部として動作する。ライブラリ単独では実行することはできない。たとえば、ダイナミックリンクライブラリは、アプリケーションプログラム１３６などの実行中に、メモリ１０３から呼び出されて利用される。
【００２６】
ファイルシステム１３３は、メモリ１０３内に保存されているファイルを管理する。ファイルシステム１３３は、メモリ１０３内のファイルの保存領域を指定するノード（ノードＩＤ、ｉノードともいう）を有する。１つのノードは、所定幅のビット列であり、ビット列の値により、ファイルの保存領域を指定する。
【００２７】
リンカ１３４は、アプリケーションプログラム１３６とそのアプリケーションプログラム１３６で利用されるライブラリをリンクさせるプログラムである。リンカ１３４は、現在実行中のアプリケーションプログラム１３６により呼び出されたライブラリをリンクテーブル１５３に登録する。これにより、現在実行中のアプリケーションプログラム１３６がどのライブラリを呼び出したかを監視することができる。
【００２８】
アプリケーションプログラム１３６は、ＯＳ１３２上で動作するプログラムであり、必要に応じてライブラリを呼び出して処理を実行する。ダウンローダ１３５は、更新すべきライブラリを検出し、サーバ１０６から新しいライブラリをダウンロードし、旧ライブラリを消去するアプリケーションプログラム１３６である。
【００２９】
（ハイパーバイザ１３１によるファイルシステム１３３の制御）
図２は、ハイパーバイザ１３１によるファイルシステム１３３の制御を示す説明図である。以降、例として、ライブラリ名「ａ．ｄｌｌ」のライブラリを更新対象のライブラリとする。なお、便宜上、対象ライブラリａ．ｄｌｌのうち、更新前のメモリ１０３に記憶されている旧バージョンのファイルａ．ｄｌｌを「旧ａ．ｄｌｌ」と称し、ダウンロードされてくる新バージョンのファイルａ．ｄｌｌを「新ａ．ｄｌｌ」と称す。
【００３０】
同様に、旧ａ．ｄｌｌのノードを旧ノード、新ａ．ｄｌｌのノードを新ノードと称す。また、ノードのビット数を便宜上６ビットとし、旧ａ．ｄｌｌのノードを「０１００１０」とする。また、ハイパーバイザ１３１は、（Ａ）および（Ｅ）では、通常モードであり、（Ｂ）〜（Ｄ）では、アップデートモードである。
【００３１】
（Ａ）は、ダウンロード前の通常モードでの旧ノードとライブラリとの関係を示している。旧ノードＮ１のうち先頭ビットは、識別ビットである。識別ビットは、対象となっているライブラリが更新中（アップデートモード）であるか非更新中（通常モード）であるかを識別するビットである。更新中であれば「１」、非更新中であれば「０」である。
【００３２】
また、通常モードでは、ハイパーバイザ１３１は、識別ビットをマスクして、残余のビット列を参照対象とする。たとえば、（Ａ）の場合、旧ノードＮ１のうち２ビット目以降の「１００１０」で指定された保存領域に旧ａ．ｄｌｌが保存されている。したがって、（Ａ）のような通常モード時では、参照対象となる残余のビット列によりライブラリの保存領域を指定することとなる。
【００３３】
（Ｂ）は、通常モードからアップデートモードに移行したときの状態を示している。アップデートモードに移行すると、ハイパーバイザ１３１は、旧ノードＮ１の参照対象を識別ビットにまで拡張する。たとえば、旧ａ．ｄｌｌの場合、旧ノードＮ１内の参照対象が「１００１０」から「０１００１０」に拡張される。
【００３４】
そして、ハイパーバイザ１３１は、新ノードＮ２を生成する。ハイパーバイザ１３１は、更新対象である旧ａ．ｄｌｌの旧ノードＮ１の残余ビット列「１００１０」をコピーし、識別ビットを「１」にした新ノードＮ２「１１００１０」を生成する。この旧ノードＮ１により指定される保存領域には、新ａ．ｄｌｌが保存されることになる。このように、旧ノードＮ１と新ノードＮ２は、識別ビットのみ異なるビット列になる。
【００３５】
（Ｃ）は、新ａ．ｄｌｌのダウンロードと旧ａ．ｄｌｌおよびその旧ノードＮ１を消去した状態（点線で表記）を示している。新ａ．ｄｌｌは、新ノードＮ２で指定された保存領域に保存される。したがって、旧ａ．ｄｌｌは新ａ．ｄｌｌによって上書きされない。旧ａ．ｄｌｌは、ダウンローダ１３５によりその旧ノードＮ１とともに消去される。
【００３６】
（Ｄ）は、アップデートモードの完了状態を示している。（Ｃ）において新ａ．ｄｌｌのダウンロードが完了しているので、ハイパーバイザ１３１は、新ノードＮ２の識別ビットを「１」から「０」に書き換える。そして、参照対象を全ビットから識別ビットを除く残余ビット列に戻すことで、アップデートモードが終了する。
【００３７】
（Ｅ）は、アップデートモードから通常モードに移行された状態を示している。識別ビットがマスクされ残余ビット列が参照対象となっているため、この通常モードでは、（Ａ）と同様、残余ビット列「１００１０」を指定することで新ａ．ｄｌｌを呼び出すことができる。この新ａ．ｄｌｌに対し、あらたに更新ファイルが存在する場合、新ａ．ｄｌｌを旧ａ．ｄｌｌとして（Ｂ）以降の処理を実行すればよい。
【００３８】
このように、通常モードに戻れば、新ａ．ｄｌｌは旧ａ．ｄｌｌと同じ残余ビット列「１００１０」で保存領域が指定される。ａ．ｄｌｌを呼び出すアプリケーションプログラム１３６から見れば、通常モード時では、新旧を意識することなく、更新前後において同一ノード「１００１０」でａ．ｄｌｌを呼び出すことができることとなる。
【００３９】
なお、上述した例では、識別ビットを先頭の１ビットとしたが、どの位置に識別ビットがあるかをあらかじめ決めておけば、識別ビットを他のビットに設定することとしてもよい。また、ノード内のビットの一部をこのように識別ビットとして割り当てても、残余ビット列で他のファイルを十分指定することができるため、問題はない。
【００４０】
図３は、プロセステーブル１５２、リンクテーブル１５３、およびステータステーブル１５１の参照関係を示す説明図である。プロセステーブル１５２は、実行中のプロセスを管理しており、リンクテーブル１５３はプロセステーブル１５２中のプロセス毎にリンクしているファイルのノードを管理している。同じアプリケーションプログラム１３６でもプロセスが異なれば、異なるリンクテーブル１５３（１５３−０，１５３−１）が存在する。各リンクテーブル１５３−０，１５３−１で管理するライブラリのノードもプロセスの起動時期とダウンロード完了の前後関係によって異なる。
【００４１】
ステータステーブル１５１は、更新対象のライブラリ毎に用意される。ステータステーブル１５１は、ライブラリのダウンロード処理が終了したか否か、および、各リンクテーブル１５３中のノードを基にダウンロード処理が終了した後に古いバージョンのライブラリを使用しているプロセスがあるかを識別するためのテーブルである。ハイパーバイザ１３１は、ステータステーブル１５１を参照して、ファイルの切替指示をおこなう。
【００４２】
たとえば、対象となるライブラリにおいて、新しいバージョンのファイルがダウンロード済みで、かつ、古いバージョンのファイルがアプリケーションプログラム１３６（Ａｐｐｌｉ♯０）により実行中である場合、アプリケーションプログラム１３６（Ａｐｐｌｉ♯１）が起動されると、ハイパーバイザ１３１は、新しいバージョンのファイルの呼び出しを指示する。それ以外の組み合わせの場合、古いバージョンのファイルの呼び出しを指示することとなる。
【００４３】
（アップデートモードのシーケンス）
つぎに、アップデートモード時におけるシーケンスについて図４〜図６を用いて説明する。
【００４４】
図４は、アップデートモードのシーケンス図（その１）である。図４では、更新対象となるライブラリ（旧ａ．ｄｌｌ）が使用されていない状態でのシーケンスを示している。まず、ダウンローダ１３５がａ．ｄｌｌの更新の存在を検出すると（ステップＳ４０１）、存在通知をハイパーバイザ１３１に送る（ステップＳ４０２）。ハイパーバイザ１３１は、存在通知を受けると、通常モードからアップデートモードに移行して、図２の（Ｂ）に示したように、ノードの参照対象の拡張設定をする（ステップＳ４０３）。
【００４５】
そして、ハイパーバイザ１３１は、図２の（Ｂ）に示したように、旧ノードＮ１を生成して（ステップＳ４０４）、ファイルシステム１３３に旧ノードＮ１を設定する。このあと、ハイパーバイザ１３１は、ダウンローダ１３５に対してダウンロード開始を通知する（ステップＳ４０５）。
【００４６】
ダウンローダ１３５は、ダウンロード開始をハイパーバイザ１３１から通知されると、新ａ．ｄｌｌをサーバ１０６からダウンロードし、新ノードＮ２で指定された保存領域に新ａ．ｄｌｌを保存する（ステップＳ４０６）。そして、ダウンローダ１３５は，ダウンロード完了をハイパーバイザ１３１およびリンカ１３４に通知する（ステップＳ４０７）。
【００４７】
ここで、リンカ１３４はダウンロード完了の通知を受けると、リンクテーブル１５３を参照して、旧ａ．ｄｌｌの使用をチェックする（ステップＳ４０８）。リンクテーブル１５３には現在呼び出されて実行されているライブラリが登録されているため、リンクテーブル１５３を参照することで、旧ａ．ｄｌｌが使用されていないことがわかる。そして、図３の例では、使用されていないため、リンカ１３４はチェック結果通知（不使用）をハイパーバイザ１３１に通知する（ステップＳ４０９）。
【００４８】
ハイパーバイザ１３１は、リンカ１３４からチェック結果通知（不使用）を受けると、対象ライブラリａ．ｄｌｌの呼出禁止を設定する（ステップＳ４１０）。具体的には、たとえば、ハイパーバイザ１３１は、ＯＳ１３２に対しアプリケーションプログラム１３６の起動を一時的に禁止する。
【００４９】
たとえば、ＯＳ１３２のスケジューラに対し、起動しようとするアプリケーションプログラム１３６をキューイングだけ許可してディスパッチを禁止する。この段階では、旧ａ．ｄｌｌと新ａ．ｄｌｌがともに存在し、呼び出しを許可すると消去対象である旧ａ．ｄｌｌが呼び出されてしまうため、呼出禁止を設定することとなる。
【００５０】
呼出禁止を設定すると、ハイパーバイザ１３１は、旧ａ．ｄｌｌの消去指示をダウンローダ１３５に通知する（ステップＳ４１１）。消去指示には、旧ａ．ｄｌｌの旧ノードＮ１が含まれている。ダウンローダ１３５は、ハイパーバイザ１３１から旧ａ．ｄｌｌの消去指示を受けると、旧ノードＮ１を手がかりにしてファイルシステム１３３にアクセスし、旧ａ．ｄｌｌおよび旧ノードＮ１をメモリ１０３から消去する（ステップＳ４１２）。そして、ダウンローダ１３５は、消去完了をハイパーバイザ１３１に通知する（ステップＳ４１３）。
【００５１】
ハイパーバイザ１３１は、消去完了の通知を受けると、図２の（Ｄ）に示したように、新ノードＮ２の識別ビットを「１」から「０」に書き換える（ステップＳ４１４）。そして、ハイパーバイザ１３１は、ａ．ｄｌｌの呼出禁止を解除する（ステップＳ４１５）。具体的には、たとえば、ハイパーバイザ１３１は、ＯＳ１３２のスケジューラによりキューイングされたアプリケーションプログラム１３６のディスパッチを許可する。これにより、解除後は、新ファイルであるａ．ｄｌｌが呼び出されることとなる。
【００５２】
最後に、図２の（Ｅ）に示したように、新ノードＮ２の参照対象を、拡張設定（Ｓ４０３）前の状態に復帰（マスク設定）させることで（ステップＳ４１６）、アップデートモードから通常モードに移行することとなる。
【００５３】
図５は、アップデートモードのシーケンス図（その２）である。図５では、更新対象となるライブラリ（旧ａ．ｄｌｌ）がアプリケーションプログラム１３６（Ａｐｐｌｉ＃０）により使用されている状態でのシーケンスを示している。なお、図４に示した処理と同一処理については同一ステップ番号を付し、その説明を省略する。
【００５４】
ステップＳ４０８において、リンカ１３４が旧ａ．ｄｌｌの使用チェックをおこなうと、リンクテーブル１５３に現在呼び出されている旧ａ．ｄｌｌが登録されているため、リンカ１３４はハイパーバイザ１３１およびファイルシステム１３８に対し、チェック結果通知（使用中）を送る（ステップＳ５０１）。
【００５５】
ハイパーバイザ１３１は、リンカ１３４からチェック結果通知（使用中）を受けると、チェックスレッドを生成する（ステップＳ５０２）。プロセステーブル１５２には，現在実行中のプロセスが登録されているため、生成されたチェックスレッドは、プロセステーブル１５２を参照して、旧ａ．ｄｌｌを使用中のアプリケーションプログラム１３６（Ａｐｐｌｉ＃０）が終了するのをチェックする（ステップＳ５０３）。
【００５６】
チェックスレッドがアプリケーションプログラム１３６（Ａｐｐｌｉ＃０）の終了を検出すると、終了通知をハイパーバイザ１３１に送る（ステップＳ５０４）。ハイパーバイザ１３１は、終了通知を受けると、ａ．ｄｌｌの呼出禁止を設定することとなる（ステップＳ４１０）。
【００５７】
このように、旧ａ．ｄｌｌの使用中にアップデートモードに移行した場合でも、ＯＳ１３２やアプリケーションプログラム１３６（Ａｐｐｌｉ＃０）を停止することなく、ライブラリのアップデートを実行することができる。
【００５８】
図６は、アップデートモードのシーケンス図（その３）である。図６では、更新対象となるライブラリ（旧ａ．ｄｌｌ）の使用と更新後のライブラリ（新ａ．ｄｌｌ）の使用が混在する場合のシーケンスである。なお、図４および図５に示した処理と同一処理については同一ステップ番号を付し、その説明を省略する。
【００５９】
ステップＳ５０３において、チェックスレッドによりプロセステーブル１５２のチェック中において、アプリケーションプログラム１３６（Ａｐｐｌｉ＃１）が起動されてａ．ｄｌｌの呼出を要求すると（ステップＳ６０１）、ハイパーバイザ１３１は、ステータステーブル１５１をチェックする（ステップＳ６０２）。ハイパーバイザ１３１は、ステータステーブル１５１参照することで、旧ａ．ｄｌｌが実行中か否か、新ａ．ｄｌｌがダウンロード済みか否かを特定することができる。
【００６０】
この場合、旧ａ．ｄｌｌが使用中であり、新ａ．ｄｌｌがダウンロード済みであるため、ハイパーバイザ１３１は、ファイルシステム１３３に対し、呼出対象が新ａ．ｄｌｌである旨を通知し（ステップＳ６０３）、新ａ．ｄｌｌがファイルシステム１３３から呼び出されることとなる（ステップＳ６０４）。これにより、旧ａ．ｄｌｌの使用と新ａ．ｄｌｌの使用が混在していても、ＯＳ１３２やアプリケーションプログラム１３６を停止させることなく、アップデート処理を実行することができる。
【００６１】
（ライブラリ更新処理手順）
つぎに、本実施の形態にかかるライブラリ更新処理手順について図７〜図１０を用いて説明する。
【００６２】
図７は、本実施の形態にかかるライブラリ更新処理手順を示すフローチャートである。まず、ハイパーバイザ１３１は、ダウンローダ１３５からの更新の存在通知を待ち受け（ステップＳ７０１）、更新通知がない場合（ステップＳ７０１：Ｎｏ）、ハイパーバイザ１３１は通常モードによる通常処理を実行する（ステップＳ７０２）。一方、更新通知があった場合（ステップＳ７０１：Ｙｅｓ）、ハイパーバイザ１３１は、アップデートモードによるアップデート処理を実行する（ステップＳ７０３）。
【００６３】
図８は、図７に示したアップデート処理の詳細な処理手順を示すフローチャートである。まず、ハイパーバイザ１３１は、ノードの参照対象の拡張設定する（ステップＳ８０１）。つぎに、ハイパーバイザ１３１は、新ａ．ｄｌｌの新ノードＮ２を生成してファイルシステム１３３に設定する（ステップＳ８０２）。そして、ハイパーバイザ１３１は、ダウンローダ１３５に対してダウンロードの開始指示を通知することで（ステップＳ８０３）、新ａ．ｄｌｌが旧ノードＮ１で指定された保存領域に保存される。
【００６４】
そして、ハイパーバイザ１３１は、旧ａ．ｄｌｌが使用中であるか否かを判断する（ステップＳ８０４）。使用中である場合（ステップＳ８０４：Ｙｅｓ）、ハイパーバイザ１３１は、チェックスレッドを生成し（ステップＳ８０５）、旧ａ．ｄｌｌを使用するアプリケーションプログラム１３６が終了するのをチェックする（ステップＳ８０６：Ｎｏ）。旧ａ．ｄｌｌを使用するアプリケーションプログラム１３６が終了した場合（ステップＳ８０６：Ｙｅｓ），ステップＳ８０７に移行する。
【００６５】
また、ステップＳ８０４において、旧ａ．ｄｌｌが使用中でない場合（ステップＳ８０４：Ｎｏ）、ハイパーバイザ１３１は、ライブラリの呼出禁止を設定し（ステップＳ８０７）、旧ａ．ｄｌｌの消去指示をダウンローダ１３５に通知する（ステップＳ８０８）。そして、ハイパーバイザ１３１は、ダウンローダ１３５からの消去通知を待ち受ける（ステップＳ８０９：Ｎｏ）。
【００６６】
消去完了の通知を受けた場合（ステップＳ８０９：Ｙｅｓ）、ハイパーバイザ１３１は、新ノードＮ２の識別ビットを書き換える（ステップＳ８１０）。そして、ハイパーバイザ１３１は、ライブラリの呼出禁止の解除を設定し（ステップＳ８１１）、ノードのマスク設定をすることで、通常モードに戻る（ステップＳ８１２）。
【００６７】
図９は、ハイパーバイザ１３１によるステータステーブル１５１の更新処理を示すフローチャートである。まず、ハイパーバイザ１３１は、ステータステーブル１５１を初期化する（ステップＳ９０１）。そして、ハイパーバイザ１３１は、旧ａ．ｄｌｌが使用中であるか否かを判断し（ステップＳ９０２）、使用中である場合（ステップＳ９０２：Ｙｅｓ）、使用中フラグＦｅをＦｅ＝１（使用中）にして（ステップＳ９０３）、ステップＳ９０５に移行する。一方、旧ａ．ｄｌｌが使用中でない場合（ステップＳ９０２：Ｎｏ）、ハイパーバイザ１３１は、使用中フラグＦｅをＦｅ＝０（不使用）にして（ステップＳ９０４）、ステップＳ９０５に移行する。
【００６８】
また、ステップＳ９０５において、ハイパーバイザ１３１は、新ａ．ｄｌｌがダウンロード済みであるか否かを判断する（ステップＳ９０５）。ダウンロード済みである場合（ステップＳ９０５：Ｙｅｓ）、ハイパーバイザ１３１は、ダウンロードフラグＦｄをＦｄ＝１（ダウンロード済み）に設定して（ステップＳ９０６）、ステップＳ９０８に移行する。
【００６９】
一方、ステップＳ９０５において、ダウンロード済みでない場合（ステップＳ９０５：Ｎｏ）、ハイパーバイザ１３１は、ダウンロードフラグＦｄをＦｄ＝０（未ダウンロード）に設定して（ステップＳ９０７）、ステップＳ９０８に移行する。ステップＳ９０８では、ハイパーバイザ１３１は、アップデートモード終了であるか否かを判断し（ステップＳ９０８）、終了していない場合（ステップＳ９０８：Ｎｏ）、ステップＳ９０２に戻る。一方、終了である場合（ステップＳ９０８：Ｙｅｓ）、ステータステーブル１５１の更新処理を終了する。
【００７０】
図１０は、ハイパーバイザ１３１によるライブラリの読み出し処理を示すフローチャートである。まず、ハイパーバイザ１３１は、アプリケーションプログラム１３６からアクセスイベント（呼出要求）があるのを待ち受ける（ステップＳ１００１：Ｎｏ）。そして、アクセスイベントがあった場合（ステップＳ１００１：Ｙｅｓ）、ハイパーバイザ１３１は、ステータステーブル１５１のステータスを判断する（ステップＳ１００２）。ステータスが「１１」である場合（ステップＳ１００２：１１）、すなわち、旧ａ．ｄｌｌが使用中であり、かつ、新ａ．ｄｌｌがダウンロード済みである場合、ハイパーバイザ１３１は、新ａ．ｄｌｌを呼出対象に決定して（ステップＳ１００３）、ステップＳ１００５に移行する。
【００７１】
一方、ステータスが「１１」以外である場合（ステップＳ１００２：１１以外）、ハイパーバイザ１３１は、旧ａ．ｄｌｌを呼出対象に決定して（ステップＳ１００４）、ステップＳ１００４に移行する。ステップＳ１００５では、ハイパーバイザ１３１は、呼出対象の呼出指示をファイルシステム１３３に通知する（ステップＳ１００５）。これにより、ファイルシステム１３３は、呼出対象のライブラリを、アクセスイベントを要求したアプリケーションプログラム１３６に引き渡すことで、アプリケーションがライブラリを使用することができる。
【００７２】
以上説明したように、本実施の形態では、ＣＰＵ１０１は、対象ライブラリａ．ｄｌｌに関する新バージョンのファイル（新ａ．ｄｌｌ）のダウンロードと対象ライブラリａ．ｄｌｌに関する旧バージョンのファイル（旧ａ．ｄｌｌ）の消去を実行する。この場合、ハイパーバイザ１３１は、まず、新バージョンのファイル（新ａ．ｄｌｌ）の存在をＣＰＵ１０１に検出させる。検出されると、ハイパーバイザ１３１は、旧バージョンのファイル（旧ａ．ｄｌｌ）の保存領域を指定する第１のノード（旧ノードＮ１）とは異なる保存領域を指定する第２のノード（新ノードＮ２）を生成する。
【００７３】
つぎに、生成された第２のノード（新ノードＮ２）により指定された保存領域に新バージョンのファイル（新ａ．ｄｌｌ）がダウンロードされた場合、ハイパーバイザ１３１は、旧バージョンのファイル（旧ａ．ｄｌｌ）が使用中であるか否かを判断する。そして、使用中でないと判断された場合、ハイパーバイザ１３１は、旧バージョンのファイル（旧ａ．ｄｌｌ）の消去指示を通知する。
【００７４】
これにより、新バージョンのファイル（新ａ．ｄｌｌ）の存在の検出後（アップデートモード時）は、新バージョンのファイル（新ａ．ｄｌｌ）が第２のノード（新ノードＮ２）で指定された保存領域に保存されるため、旧バージョンのファイル（旧ａ．ｄｌｌ）は上書きされない。したがって、アップデートモード時に旧バージョンのファイル（旧ａ．ｄｌｌ）を使用するアプリケーションプログラム１３６が実行中であっても、ＯＳ１３２やアプリケーションプログラム１３６を停止することなく、アップデート処理を実行することができる。
【００７５】
また、旧バージョンのファイル（旧ａ．ｄｌｌ）が使用されなくなったときに、旧バージョンのファイル（旧ａ．ｄｌｌ）と旧ノードＮ１の消去通知をするため、旧バージョンのファイル（旧ａ．ｄｌｌ）の使用中には消去されない。これにより、アップデートモード時に旧バージョンのファイル（旧ａ．ｄｌｌ）を使用するアプリケーションプログラム１３６が実行中であっても、また、旧バージョンのファイル（旧ａ．ｄｌｌ）の消去中であっても、ＯＳ１３２やアプリケーションプログラム１３６を停止することなく、アップデート処理を実行することができる。
【００７６】
また、旧バージョンのファイル（旧ａ．ｄｌｌ）が使用中である場合、ハイパーバイザ１３１は、旧バージョンのファイル（旧ａ．ｄｌｌ）を使用しているプロセスが終了したか否かを判断する。そして、プロセスが終了したと判断された場合、旧バージョンのファイル（旧ａ．ｄｌｌ）および第１のノード（旧ノードＮ１）の消去指示を通知する。
【００７７】
このように、旧バージョンのファイル（旧ａ．ｄｌｌ）を呼び出しているプロセスを監視することで、旧バージョンのファイル（旧ａ．ｄｌｌ）が使用されなくなるか否かを確認することができる。すなわち、プロセスが終了すれば、旧バージョンのファイル（旧ａ．ｄｌｌ）は呼び出されなくなるため、プロセス終了後に旧バージョンのファイル（旧ａ．ｄｌｌ）を消去しても、ＯＳ１３２やアプリケーションプログラム１３６を停止することなく、アップデート処理を実行することができる。
【００７８】
対象ライブラリａ．ｄｌｌの呼出要求があったとき、旧バージョンのファイル（旧ａ．ｄｌｌ）が使用中でかつ新バージョンのファイル（新ａ．ｄｌｌ）がダウンロード済みである場合、ハイパーバイザ１３１は、新バージョンのファイル（新ａ．ｄｌｌ）を呼出対象に決定する。
【００７９】
このようなステータスの場合、旧バージョンのファイル（旧ａ．ｄｌｌ）を呼出対象から外すことで、旧バージョンのファイル（旧ａ．ｄｌｌ）の消去処理が遅れるのを防止する。また、旧バージョンのファイル（旧ａ．ｄｌｌ）を呼出対象から外しても、新バージョンのファイル（新ａ．ｄｌｌ）がダウンロード済みであるため、対象ライブラリａ．ｄｌｌの呼出要求をしたプロセスにとっても最新バージョンを呼び出せるため、効率的である。したがって、このような決定をすることで、ＯＳ１３２やアプリケーションプログラム１３６を停止することなく、アップデート処理を実行することができる。
【００８０】
また、旧バージョンのファイル（旧ａ．ｄｌｌ）が使用中でない場合、旧バージョンのファイル（旧ａ．ｄｌｌ）および第１のノード（旧ノードＮ１）の消去指示の通知に先立って、ハイパーバイザ１３１は、対象ライブラリａ．ｄｌｌの呼出を禁止設定する。そして、旧バージョンのファイル（旧ａ．ｄｌｌ）および第１のノード（旧ノードＮ１）が消去された場合、ハイパーバイザ１３１は、禁止設定を解除する。
【００８１】
これにより、消去前は、新旧両バージョンのファイルの呼出が禁止され、消去後は、新バージョンのファイル（新ａ．ｄｌｌ）の呼出が禁止される。そして、呼出禁止が解除されることで、新バージョンのファイル（新ａ．ｄｌｌ）を使用することができる。したがって、ＯＳ１３２やアプリケーションプログラム１３６を停止することなく、アップデート処理を実行することができる。
【００８２】
また、ハイパーバイザ１３１は、ＯＳ１３２に含まれている各ライブラリの保存領域を指定する各ノードの参照対象を、ノードの一部の指定領域（残余ビット）からノードの全領域に切り替える。また、旧バージョンのファイル（旧ａ．ｄｌｌ）および第１のノード（旧ノードＮ１）が消去された場合、各ライブラリの保存領域を指定するノードの参照対象を、ノードの全領域からノードの一部の指定領域（残余ビット）に切り替える。
【００８３】
そして、ハイパーバイザ１３１は、第１のノード（旧ノードＮ１）の一部の指定領域（残余ビット）の値と同一値を第２のノード（新ノードＮ２）の一部の指定領域（残余ビット）に割り当てる。また、第１のノード（旧ノードＮ１）の一部の指定領域（残余ビット）以外の残余の領域（識別ビット）の値と異なる値を第２のノード（新ノードＮ２）の一部の指定領域（残余ビット）以外の残余の領域（識別ビット）の値に割り当てる。
【００８４】
すなわち、ノードの一部に識別ビットを割り当てて、アップデートモードと通常モードとを識別するようにし、かつ、ノードの残余ビットを新旧ライブラリで同一とした。そして、参照対象をアップデートモードでは、識別ビットを含む全ビットとし、通常モードでは識別ビットを除く残余ビットとして切替自在とした。
【００８５】
さらに、アップデート完了後は、ノードの参照対象をアップデートモード前の状態、すなわち、識別ビットを除く残余ビットに復帰することで、識別ビットがマスクされる。これにより、通常、対象ライブラリａ．ｄｌｌを呼び出す場合は、残余ビットを手がかりにしてアプリケーションプログラム１３６は呼出を実行する。
【００８６】
ここで、残余ビットは、でも新ノードＮ２でも旧ノードＮ１でも同じ値であるため、アプリケーションプログラム１３６からみれば、アップデートの前後において、残余ビットで特定されるノードで指定された保存領域にアクセスすれば、新バージョンのファイル（新ａ．ｄｌｌ）を呼び出すことができる。したがって、通常モードに悪影響を与えることなく、アプリケーションプログラム１３６を実行することができる。
【００８７】
以上のように、更新プログラム、本更新装置、および更新方法は、携帯電話などのネットワークを介したアップデート処理を行う携帯型端末において、適用が可能である。
【符号の説明】
【００８８】
１００  更新装置
１３１  ハイパーバイザ
１３３  ファイルシステム
１３４  リンカ
１３５  ダウンローダ
１３６  アプリケーションプログラム
１４１  カーネル
１４２  ライブラリ群
１５１  ステータステーブル
１５２  プロセステーブル
１５３  リンクテーブル
Ｎ１  旧ノード
Ｎ２  新ノード
【図１】
2011104825.tif 000003
【図２】
2011104825.tif 000004
【図３】
2011104825.tif 000005
【図４】
2011104825.tif 000006
【図５】
2011104825.tif 000007
【図６】
2011104825.tif 000008
【図７】
2011104825.tif 000009
【図８】
2011104825.tif 000010
【図９】
2011104825.tif 000011
【図１０】
2011104825.tif 000012
【国際調査報告】
2011104825.tif 000013
2011104825.tif 000014
2011104825.tif 000015
2011104825.tif 000016