(57)【要約】【課題】端末装置での作業領域のサイズを抑えつつパッチサイズを小さくすること。【解決手段】パッチ命令の書き込み先が複数のブロックにまたがる場合に、分割部２１ａが、複数のブロックにまたがらないようにパッチ命令を分割する。そして、グループ化部２１ｂが、書き込み先ブロックが同じであるパッチ命令をグループ化する。そして、特定部２２ａが、グループ間の依存関係を特定し、解決部２２ｂが、グループ間の依存関係を解決してグループの並び替えを行う。【選択図】図２
2018195046.tif 000002
【特許請求の範囲】
【請求項１】
更新前プログラム及び更新後プログラムを複数のブロックに分割し、更新前プログラムを更新後プログラムに更新する第１更新命令群のうちの更新命令が更新後プログラムにおいて複数のブロックにまたがる更新を行う場合に該更新がブロック毎に行われるよう該更新命令を分割して第２更新命令群を得る分割部と、
前記分割部による分割により得られた第２更新命令群を更新後プログラムのブロック毎にグループ化するグループ化部と、
前記グループ化部によるグループ化により得られた各グループと各グループが更新前プログラムのブロックのなかで依存するブロックとの関係を依存関係として特定する特定部と、
前記特定部により特定された依存関係を解決し、前記第２更新命令群を実行する際のグループの順番を決定する解決部と
を有することを特徴とするプログラム更新装置。
【請求項２】
前記解決部は、前記依存関係に基づいてグループ間の木構造を依存先を依存元の上位階層として作成し、作成した木構造の下位層から上位層に向けた順番でグループの順番を決定することを特徴とする請求項１に記載のプログラム更新装置。
【請求項３】
コンピュータが、
更新前プログラム及び更新後プログラムを複数のブロックに分割し、更新前プログラムを更新後プログラムに更新する第１更新命令群のうちの更新命令が更新後プログラムにおいて複数のブロックにまたがる更新を行う場合に該更新がブロック毎に行われるよう該更新命令を分割して第２更新命令群を得て、
前記第２更新命令群を更新後プログラムのブロック毎にグループ化し、
グループ化により得た各グループと各グループが更新前プログラムのブロックのなかで依存するブロックとの関係を依存関係として特定し、
前記依存関係を解決し、前記第２更新命令群を実行する際のグループの順番を決定
する処理を実行することを特徴とするプログラム更新方法。
【請求項４】
コンピュータに、
更新前プログラム及び更新後プログラムを複数のブロックに分割し、更新前プログラムを更新後プログラムに更新する第１更新命令群のうちの更新命令が更新後プログラムにおいて複数のブロックにまたがる更新を行う場合に該更新がブロック毎に行われるよう該更新命令を分割して第２更新命令群を得て、
前記第２更新命令群を更新後プログラムのブロック毎にグループ化し、
グループ化により得た各グループと各グループが更新前プログラムのブロックのなかで依存するブロックとの関係を依存関係として特定し、
前記依存関係を解決し、前記第２更新命令群を実行する際のグループの順番を決定
する処理を実行させることを特徴とするプログラム更新プログラム。
【請求項５】
端末装置と該端末装置の更新プログラムを作成するプログラム更新装置とを有するプログラム更新システムにおいて、
前記プログラム更新装置は、
更新前プログラム及び更新後プログラムを複数のブロックに分割し、更新前プログラムを更新後プログラムに更新する第１更新命令群のうちの更新命令が更新後プログラムにおいて複数のブロックにまたがる更新を行う場合に該更新がブロック毎に行われるよう該更新命令を分割して第２更新命令群を得る分割部と、
前記分割部による分割により得られた第２更新命令群を更新後プログラムのブロック毎にグループ化するグループ化部と、
前記グループ化部によるグループ化により得られた各グループと各グループが更新前プログラムのブロックのなかで依存するブロックとの関係を依存関係として特定する特定部と、
前記特定部により特定された依存関係を解決し、前記第２更新命令群を実行する際のグループの順番を決定する解決部と
を有し、
前記端末装置は、
前記解決部により決定されたグループ順に第２更新命令群を実行することでプログラムを更新する更新部
を有することを特徴とするプログラム更新システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム更新装置、プログラム更新方法、プログラム更新プログラム及びプログラム更新システムに関する。
【背景技術】
【０００２】
ＩｏＴ（Internet  of  Things）等で広域に配備される端末のファームウェアを更新する場合、現地に作業員を派遣することは困難であるため、広域網を利用した自動更新が行われる。図１２は、ＩｏＴシステムにおけるファームアップデートを説明するための図である。ここで、「ファーム」はファームウェアを表す。
【０００３】
図１２に示すように、プログラム更新装置９２は、バグ修正、機能追加、セキュリティ対策等を目的として、広域網４を介してセンサ端末９３に更新版ファームを送信してファームアップデートを行う。ただし、更新にあたっては、センサ端末９３の必要資源（メモリ、ストレージ等）をできるだけ少なくすること、通信によるセンサ端末９３の電力消費をできるだけ少なくすることが重要となる。このため、更新前後の差分情報だけがパッチとしてセンサ端末９３に配布され、センサ端末９３が更新前ファームとパッチから更新後ファームを作成し、ファームを更新する。
【０００４】
図１３は、センサ端末９３におけるファームアップデートを説明するための図である。図１３に示すように、センサ端末９３は、ＭＣＵ（Micro  Control  Unit）９０と、ストレージ９５と、ＥＥＰＲＯＭ９６とを有する。
【０００５】
ＭＣＵ９０は、ＥＥＰＲＯＭ９６からプログラムを読み出して実行する演算処理装置である。ストレージ９５は、フラッシュメモリ等の不揮発性記憶装置である。ＥＥＰＲＯＭ９６は、ＭＣＵ９０で実行されるプログラムを記憶する不揮発性記憶装置であり、ファーム本体９６１、ファーム更新プログラム９６２及びブートローダ９６３を記憶する。なお、ＥＥＰＲＯＭは、Electrically  Erasable  Programmable  Read-Only  Memoryを表す。
【０００６】
ファーム本体９６１は、更新されるプログラムである。ファーム更新プログラム９６２は、パッチ９４を用いてファーム本体９６１を更新するプログラムである。ブートローダ９６３は、センサ端末９３が起動されると実行され、ファーム本体９６１又はファーム更新プログラム９６２を起動するプログラムである。
【０００７】
プログラム更新装置９２は、パッチ９４を作成してセンサ端末９３に送信する。そして、センサ端末９３は、パッチ９４を受信してストレージ９５に格納する。そして、ファーム更新プログラム９６２は、パッチ９４を用いて更新版ファームを作業領域９７に作成し、ファーム本体９６１を更新する。
【０００８】
図１３に示したファームアップデートでは、パッチ９４の受信に消費される電力をできるだけ少なくすることが重要である。また、ストレージ９５の容量をできるだけ小さくすることが重要である。したがって、パッチ９４と作業領域９７のサイズをできるだけ小さくすることが重要となる。
【０００９】
図１４は、作業領域９７のサイズを説明するための図である。図１４において、「ファイル」は、更新前ファーム（旧版）を記憶するファイル及び更新後ファーム（新版）を記憶するファイルを表す。図１４では、パッチ９４には４つのパッチ命令が含まれる。パッチ命令＃１は、新版のａ−ｂ’を置換する命令であり、パッチ命令＃２は、ｂ−ｃをｂ’に移動する命令であり、パッチ命令＃３は、新版のｃ’−ｄ’を置換する命令であり、パッチ命令＃４は、ｄ−ｅをｄ’に移動する命令である。なお、読み込み元は、旧版での番地（スタート番地、終了番地）を示し、処理内容は、パッチ命令の種類を示す。
【００１０】
パッチ９４を実行するために必要な作業領域９７のサイズは、パッチ９４の内容によって決定される。作業領域９７の理論上の最大値は、１パッチ命令の書き込み先の理論上の最大サイズ、すなわち、ファイルサイズの理論上の最大値、すなわち、センサ端末９３のファーム本体９６１のサイズである。
【００１１】
作業領域９７を小さくする技術として、ファーム本体９６１を複数のブロックに分割し、ブロック単位でパッチを適用する技術がある。図１５は、ブロック単位でのパッチ適用を説明するための図である。図１５は、ファーム本体９６１が４つのブロックに分割され、ブロック＃０とブロック＃１が新版に置き換えられ、ブロック＃２にパッチ９４が適用されている状況を示す。図１５に示すように、作業領域９８には、ブロック＃２用作業版９９が記憶される。したがって、作業領域９８のサイズは１ブロックのサイズである。
【００１２】
なお、旧ファイルの新ファイルへの更新にパッチ適用を行う場合に、新ファイルに含まれるブロックが旧ファイルのブロックに循環して互いに依存する場合に依存関係のループを切断してパッチ適用の順番を決定する技術がある。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特表２０１３−５１７５６５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
図１５に示したブロック単位でのパッチ適用には、パッチのサイズが大きくなるという問題がある。図１６は、ブロック単位でのパッチ適用の問題点を説明するための図である。図１６に示すように、ブロック＃１へのパッチ適用では、ｂ−ｃ’を置換するパッチ命令が実行された後、ｃ−ｄをｃ’に移動するパッチ命令が実行され、次に、ｄ’−ｅ’を置換するパッチ命令が実行される。そして、ブロック＃２へのパッチ適用では、ｅ−ｆをｅ’に移動するパッチ命令が実行され、次に、ｆ’−ｇ’を置換するパッチ命令が実行される。
【００１５】
すなわち、ブロック分割が行われていなければｃ−ｆをｃ’に移動する１つのパッチ命令が、ｃ−ｄをｃ’に移動するパッチ命令と、ｄ’−ｅ’を置換するパッチ命令と、ｅ−ｆをｅ’に移動するパッチ命令とに分割される。その理由は、ブロック単位でのパッチ適用では、旧版の１ブロック分のデータしかないためである。ブロック＃１のパッチ適用では、旧版のｃ−ｄは作業領域９８にあるため新版へ移動することができるが、旧版のｄ−ｅは作業領域９８にないため、ｄ’−ｅ’は置換となる。また、ブロック＃２のパッチ適用では、旧版のｅ−ｆは作業領域９８にあるため新版へ移動することができる。
【００１６】
このように、ブロック単位でのパッチ適用では、ブロックをまたぐ移動が一部置換に変化する。一般に、パッチ命令では、置換命令と追加命令は移動命令よりサイズが大きくなる。図１７は、パッチ命令の種類とパッチサイズへの影響を説明するための図である。図１７に示すように、移動命令には、移動元アドレスと移動先アドレスが含まれるが添付データは含まれない。一方、置換命令及び追加命令の場合には、書き換えデータを示す添付データが含まれる。
【００１７】
したがって、ブロックをまたぐ移動が一部置換に変化すると、パッチサイズは大きくなる。なお、追加命令は、置換命令で実現されるので、図１７では、追加命令の添付データが書き換えデータと表されている。
【００１８】
また、図１６において、ｇ−ｈのデータはｆ’−ｇ’の置換により上書きされるため、ｆ’−ｇ’の置換よりも前にｇ−ｈのｈ’への移動が行われる必要がある。すなわち、旧版と新版の間のデータの依存関係に基づいてパッチ適用は行われる必要がある。
【００１９】
本発明は、１つの側面では、作業領域のサイズを抑えつつパッチサイズを抑えることを目的とする。
【課題を解決するための手段】
【００２０】
１つの態様では、プログラム更新装置は、分割部と、グループ化部と、特定部と、解決部とを有する。分割部は、更新前プログラム及び更新後プログラムを複数のブロックに分割する。そして、分割部は、更新前プログラムを更新後プログラムに更新する第１更新命令群のうちの更新命令が更新後プログラムにおいて複数のブロックにまたがる更新を行う場合に該更新がブロック毎に行われるよう該更新命令を分割して第２更新命令群を得る。グループ化部は、分割で得られた第２更新命令群を更新後プログラムのブロック毎にグループ化する。特定部は、グループ化で得られた各グループと各グループが更新前プログラムのブロックのなかで依存するブロックとの関係を依存関係として特定する。解決部は、特定された依存関係を解決し、第２更新命令群を実行する際のグループの順番を決定する。
【発明の効果】
【００２１】
１つの側面では、本発明は、作業領域のサイズを抑えつつパッチサイズを抑えることができる。
【図面の簡単な説明】
【００２２】
【図１Ａ】図１Ａは、パッチ作成を説明するための図である。
【図１Ｂ】図１Ｂは、パッチ分割を説明するための図である。
【図１Ｃ】図１Ｃは、パッチ命令のグループ分けを説明するための図である。
【図１Ｄ】図１Ｄは、グループ分け後のパッチを示す図である。
【図１Ｅ】図１Ｅは、グループ間の依存関係を説明するための図である。
【図１Ｆ】図１Ｆは、依存関係の解決を説明するための図である。
【図２】図２は、実施例１に係るプログラム更新システムの構成を示す図である。
【図３】図３は、配布パッチ作成処理のフローを示すフローチャートである。
【図４】図４は、分割再構成処理のフローを示すフローチャートである。
【図５】図５は、依存関係解決処理のフローを示すフローチャートである。
【図６】図６は、作業領域のサイズに関する効果を説明するための図である。
【図７】図７は、パッチサイズに関する効果を説明するための図である。
【図８】図８は、実施例１に係るプログラム更新プログラムを実行するコンピュータのハードウェア構成を示す図である。
【図９】図９は、実施例２に係るセンサ端末による再起動対策を説明するための図である。
【図１０】図１０は、ブートローダによる処理のフローを示すフローチャートである。
【図１１】図１１は、ファーム更新プログラムによる処理のフローを示すフローチャートである。
【図１２】図１２は、ＩｏＴシステムにおけるファームアップデートを説明するための図である。
【図１３】図１３は、センサ端末におけるファームアップデートを説明するための図である。
【図１４】図１４は、作業領域のサイズを説明するための図である。
【図１５】図１５は、ブロック単位でのパッチ適用を説明するための図である。
【図１６】図１６は、ブロック単位でのパッチ適用の問題点を説明するための図である。
【図１７】図１７は、パッチ命令の種類とパッチサイズへの影響を説明するための図である。
【発明を実施するための形態】
【００２３】
以下に、本願の開示するプログラム更新装置、プログラム更新方法、プログラム更新プログラム及びプログラム更新システムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例１】
【００２４】
まず、実施例１に係るプログラム更新装置によるパッチ分割再構成について図１Ａ〜図１Ｆを用いて説明する。図１Ａは、パッチ作成を説明するための図である。図１Ａに示すように、実施例１に係るプログラム更新装置は、ブロック分割がない場合と同様に、パッチを作成する。すなわち、実施例１に係るプログラム更新装置は、新版のａ−ｂ’を置換するパッチ命令、旧版のｂ−ｃを新版のｂ’に移動するパッチ命令、新版のｃ’−ｄ’を置換するパッチ命令及び旧版のｄ−ｅを新版のｄ’に移動するパッチ命令を含むパッチを作成する。
【００２５】
そして、実施例１に係るプログラム更新装置は、新版に関してブロックにまたがるパッチ命令をブロックをまたがらないように分割する。図１Ｂは、パッチ分割を説明するための図である。図１Ｂに示すように、ｂ−ｃをｂ’に移動するパッチ命令は、新版に関してブロック＃１とブロック＃２をまたがるので、２つの移動に分割され、旧版のｃ−ｄを置換するパッチ命令は、新版に関してブロック＃２とブロック＃３をまたがるので、置換と追加に分割される。
【００２６】
そして、実施例１に係るプログラム更新装置は、新版のブロック番号でパッチ命令をグループ分けする。図１Ｃは、パッチ命令のグループ分けを説明するための図である。図１Ｃに示すように、パッチ命令＃１とパッチ命令＃２は、新版のブロック＃１に関するパッチ命令であるので１つのグループにまとめられ、パッチ命令＃３とパッチ命令＃４は、新版のブロック＃２に関するパッチ命令であるので１つのグループにまとめられる。また、パッチ命令＃５とパッチ命令＃６は、新版のブロック＃３に関するパッチ命令であるので１つのグループにまとめられる。
【００２７】
そして、実施例１に係るプログラム更新装置は、グループ分け後のパッチについて、読み込み元ブロック番号と書き込み先ブロック番号を特定する。ここで、書き込み先ブロック番号は新版でのブロック番号であり、グループ番号と同じである。
【００２８】
図１Ｄは、グループ分け後のパッチを示す図である。図１Ｄに示すように、グループ＃１には、パッチ命令＃１とパッチ命令＃２が含まれ、読み込み元ブロック番号は１と２であり、書き込み先ブロック番号は１である。また、グループ＃２には、パッチ命令＃３とパッチ命令＃４が含まれ、読み込み元ブロック番号は２であり、書き込み先ブロック番号は２である。また、グループ＃３には、パッチ命令＃５とパッチ命令＃６が含まれ、読み込み元ブロック番号は２と３であり、書き込み先ブロック番号は３である。
【００２９】
そして、実施例１に係るプログラム更新装置は、読み込み元ブロック番号と書き込み先ブロック番号に基づいてグループ間の依存関係を抽出する。図１Ｅは、グループ間の依存関係を説明するための図である。図１Ｅに示すように、グループ＃１（書き込み先ブロック番号は１）の読み込み元ブロック番号は１と２であるので、グループ＃１は、グループ＃１とグループ＃２に依存する。
【００３０】
同様に、グループ＃２（書き込み先ブロック番号は２）の読み込み元ブロック番号は２であるので、グループ＃２は、グループ＃２に依存する。また、グループ＃３（書き込み先ブロック番号は３）の読み込み元ブロック番号は２と３であるので、グループ＃３は、グループ＃２とグループ＃３に依存する。そして、実施例１に係るプログラム更新装置は、自己ループを削除し、グループ間の依存関係を表すグラフを作成する。図１Ｅでは、グループ＃１とグループ＃３がグループ＃２に依存する。
【００３１】
そして、実施例１に係るプログラム更新装置は、グループ間の依存関係を木構造に変換し、依存関係を解決する。図１Ｆは、依存関係の解決を説明するための図である。図１Ｆに示すように、実施例１に係るプログラム更新装置は、依存されるグループを上位層とし依存するグループを下位層としてグループ間の依存関係を木構造に変換する。そして、実施例１に係るプログラム更新装置は、木構造のリーフから順にグループを並べることで依存関係を解決する。
【００３２】
図１Ｆでは、グループ＃１→グループ＃３→グループ＃２の順でパッチ適用を行うことで旧版と新版との間のグループ間の依存関係が解決される。すなわち、図１Ｄのグループ＃３に含まれるパッチ命令＃５をグループ＃２に含まれるパッチ命令＃４より先に実行することで、旧版でｅからブロック＃２の終わりまでのデータがパッチ命令＃４により上書きされる前に新版のブロック＃３の先頭に移動される。
【００３３】
次に、実施例１に係るプログラム更新システムの構成について説明する。図２は、実施例１に係るプログラム更新システムの構成を示す図である。図２に示すように、実施例１に係るプログラム更新システム１は、プログラム更新装置２とセンサ端末３を有する。センサ端末３は、広域網４を介してプログラム更新装置２に接続される。なお、図２では、説明の便宜上、１台のセンサ端末３のみが広域網４に接続されるが、広域網４にはより多くのセンサ端末３が接続される。
【００３４】
プログラム更新装置２は、パッチを作成して分割再構成、依存関係の解決を行い、依存関係の解決を行ったパッチを広域網４を介してセンサ端末３に配布する。プログラム更新装置２は、分割再構成部２１と、依存関係解決部２２と、送信部２３と、記憶部２４とを有する。
【００３５】
分割再構成部２１は、パッチを作成して分割再構成を行う。分割再構成部２１は、分割部２１ａと、グループ化部２１ｂとを有する。分割部２１ａは、図１Ｂに示したように、パッチ命令の書き込み先が複数のブロックにまたがる場合に、複数のブロックにまたがらないようにパッチ命令を分割する。グループ化部２１ｂは、図１Ｃに示したように、パッチ命令群を書き込み先ブロック番号に基づいてグループ分けする。
【００３６】
依存関係解決部２２は、グループ間の依存関係を解決し、パッチ命令が正しい順序で実行されるようにグループの並び替えを行う。依存関係解決部２２は、特定部２２ａと、解決部２２ｂとを有する。
【００３７】
特定部２２ａは、図１Ｄに示したように、各グループの読み込み元ブロック番号と書き込み先ブロック番号を特定する。そして、特定部２２ａは、図１Ｅに示したように、グループ間の依存関係を特定する。
【００３８】
解決部２２ｂは、グループ間の依存関係を解決し、グループの並び替えを行う。すなわち、解決部２２ｂは、図１Ｆに示したように、グループ間の依存関係を木構造に変換し、リーフから順番にグループを並べることで、グループの並び替えを行う。そして、解決部２２ｂは、グループの順番に基づいてパッチ命令群を並び替え、センサ端末３に配布されるパッチを作成する。
【００３９】
送信部２３は、解決部２２ｂにより作成されたパッチを広域網４を介してセンサ端末３に送信する。記憶部２４は、分割再構成部２１により作成されたパッチ、分割再構成されたパッチ、センサ端末３に配布されるパッチ、一時的なデータ等を記憶する。
【００４０】
センサ端末３は、センサが測定したセンサデータを広域網４を介してセンサデータ収集装置に送信する。センサデータ収集装置は、プログラム更新装置２と同一であってもよい。センサ端末３は、受信部３１と、記憶部３２と、更新部３３とを有する。
【００４１】
受信部３１は、プログラム更新装置２が広域網４を介して送信したパッチを受信し、記憶部３２に格納する。記憶部３２は、パッチを記憶するパッチ領域３２ａと、更新中のブロックのデータを記憶する作業領域３２ｂを有する。更新部３３は、パッチに含まれるパッチ命令を作業領域３２ｂを用いて実行することでセンサ端末３のファームを更新する。
【００４２】
なお、更新部３３は、ＥＥＰＲＯＭに格納されたファーム更新プログラムがＭＣＵで実行されることによって実現される。記憶部３２は、フラッシュメモリにより実現される。すなわち、センサ端末３は、ＭＣＵとＥＥＰＲＯＭとフラッシュメモリとを有する。
【００４３】
次に、配布パッチ作成処理のフローについて説明する。ここで、配布パッチ作成処理とは、プログラム更新装置２が、パッチを作成し、分割再構成及び依存関係解決を行って、センサ端末３に配布するパッチを作成する処理である。
【００４４】
図３は、配布パッチ作成処理のフローを示すフローチャートである。図３に示すように、プログラム更新装置２は、パッチの作成、分割及びグループ化を行う分割再構成処理を実行する（ステップＳ１）。そして、プログラム更新装置２は、グループ間の依存関係を特定して解決する依存関係解決処理を実行する（ステップＳ２）。
【００４５】
図４は、分割再構成処理のフローを示すフローチャートである。図４に示すように、分割再構成部２１は、旧版と新版に基づいて、パッチを作成する（ステップＳ１１）。そして、分割再構成部２１は、パッチの終端まで処理を完了したか否かを判定し（ステップＳ１２）、パッチの終端まで処理を完了した場合には、ステップＳ１７へ進む。
【００４６】
一方、パッチの終端まで処理を完了していない場合には、分割再構成部２１は、パッチから１パッチ命令を取り出し（ステップＳ１３）、パッチ命令の書き込み先が複数のブロックにわたるか否かを判定する（ステップＳ１４）。そして、分割再構成部２１は、パッチ命令の書き込み先が複数のブロックにわたる場合には、パッチ命令の書き込み先がブロック単位となるようパッチ命令を分割する（ステップＳ１５）。
【００４７】
そして、分割再構成部２１は、パッチ命令を第１ワークエリアに書き出し（ステップＳ１６）、ステップＳ１２に戻る。ここで、第１ワークエリアは、記憶部２４の領域である。また、分割再構成部２１は、ステップＳ１２においてパッチの終端まで処理を完了した場合には、第１ワークエリアの終端まで処理を完了したか否かを判定し（ステップＳ１７）、第１ワークエリアの終端まで処理を完了した場合には、ステップＳ２２へ進む。
【００４８】
一方、第１ワークエリアの終端まで処理を完了していない場合には、分割再構成部２１は、第１ワークエリアから１パッチ命令を取り出し（ステップＳ１８）、パッチ命令の書き込み先ブロックが前のパッチ命令と同じであるか否かを判定する（ステップＳ１９）。そして、パッチ命令の書き込み先ブロックが前のパッチ命令と同じでない場合には、分割再構成部２１は、第２ワークエリアのパッチ命令を１つのグループとして新しいパッチの末尾に書き出す（ステップＳ２０）。ここで、第２ワークエリアは、記憶部２４の領域である。
【００４９】
そして、分割再構成部２１は、パッチ命令を第２ワークエリアの末尾に追加し（ステップＳ２１）、ステップＳ１７に戻る。また、分割再構成部２１は、ステップＳ１７において第１ワークエリアの終端まで処理を完了した場合には、第２ワークエリアのパッチ命令を１つのグループとして新しいパッチの末尾に書き出す（ステップＳ２２）。
【００５０】
このように、分割再構成部２１は、パッチを作成した後、パッチ命令の書き込み先が複数のブロックにわたる場合に、当該パッチ命令を分割することで、置換命令を減らすことができる。
【００５１】
図５は、依存関係解決処理のフローを示すフローチャートである。図５に示すように、依存関係解決部２２は、分割再構成したパッチの終端まで処理を完了したか否かを判定し（ステップＳ３１）、分割再構成したパッチの終端まで処理を完了した場合には、ステップＳ３４へ進む。ここで、分割再構成したパッチとは、ステップＳ２０の新しいパッチである。
【００５２】
一方、分割再構成したパッチの終端まで処理を完了していない場合には、依存関係解決部２２は、分割再構成したパッチから１グループを読み出す（ステップＳ３２）。そして、依存関係解決部２２は、読み出したグループが書き込む先のブロック番号とデータの読み出し元のブロック番号のリストを組み合わせた表を作成し（ステップＳ３３）、ステップＳ３１に戻る。
【００５３】
また、依存関係解決部２２は、ステップＳ３１において分割再構成したパッチの終端まで処理を完了した場合には、作成した表に基づいてブロック（グループ）間の依存関係を示す木を作成する（ステップＳ３４）。そして、依存関係解決部２２は、木のリーフ層から上位層に向けて順番に階層単位でブロック番号を列に並べる（ステップＳ３５）。
【００５４】
そして、依存関係解決部２２は、列の先頭から１つブロック番号を読み出し（ステップＳ３６）、列の最後まで処理を終了したか否かを判定する（ステップＳ３７）。そして、列の最後まで処理を終了した場合には、依存関係解決部２２は、依存関係解決処理を終了する。
【００５５】
一方、列の最後まで処理を終了していない場合には、依存関係解決部２２は、ブロック番号に対応するグループを読み出し（ステップＳ３８）、読み出したグループを配布パッチエリアの末尾に書き出す（ステップＳ３９）。ここで、グループを配布パッチエリアに書き出すとは、グループ毎にグループ番号、グループに属するパッチ命令を書き出すことである。また、配布パッチエリアは、記憶部２４の領域である。そして、依存関係解決部２２は、ステップＳ３６に戻る。
【００５６】
このように、依存関係解決部２２がブロック間の依存関係を解決することで、センサ端末３は、パッチ適用の際に、旧版のデータのうち新版に移動されるデータを上書きされる前に新版に移動することができる。
【００５７】
次に、プログラム更新装置２の効果について図６及び図７を用いて説明する。図６は、作業領域のサイズに関する効果を説明するための図である。図６において、「加工」とは、パッチを分割、グループ化し依存関係を解決することである。図６に示すように、プログラム更新装置２により加工されたパッチ命令は、新版のブロック単位で更新を行う。したがって、必要な作業領域のサイズは１ブロックのサイズであり、プログラム更新装置２は作業領域を小さくすることができる。また、センサ端末３はパッチを先頭から実行すれば良く、センサ端末３の処理能力は少なくて良い。
【００５８】
図７は、パッチサイズに関する効果を説明するための図である。図７に示すように、パッチ命令の数は加工後に増加する。また、加工後のパッチにはグループ番号が含まれる。したがって、加工後のパッチに含まれるヘッダ情報は増加する。しかしながら、従来のブロック単位でのパッチ適用と比較すると、置換命令や追加命令のデータサイズが小さくなる。そして、増加したヘッダ情報の総和は、置換命令や追加命令のデータサイズよりはるかに小さい。したがって、プログラム更新装置２は、従来のブロック単位でのパッチ適用と比較すると、パッチサイズを小さくすることができる。
【００５９】
上述してきたように、実施例１では、パッチ命令の書き込み先が複数のブロックにまたがる場合に、分割部２１ａが、複数のブロックにまたがらないようにパッチ命令を分割する。そして、グループ化部２１ｂが、書き込み先ブロックが同じであるパッチ命令をグループ化する。そして、特定部２２ａが、グループ間の依存関係を特定し、解決部２２ｂが、グループ間の依存関係を解決してグループの並び替えを行う。したがって、プログラム更新装置２は、センサ端末３での作業領域のサイズを抑えつつパッチサイズを抑えることができる。
【００６０】
また、実施例１では、解決部２２ｂは、グループ間の依存関係を表す木を依存先を依存元の上位階層として作成し、作成した木の下位層から上位層に向けた順番でグループの順番を決定する。したがって、解決部２２ｂは、グループ間の依存関係を解決し、グループを正しく順番付けすることができる。
【００６１】
なお、実施例１では、プログラム更新装置２がパッチを加工する場合について説明したが、本発明はこれに限定されるものではなく、センサ端末３がパッチの加工を行う場合にも同様に適用することができる。
【００６２】
また、実施例１では、センサ端末３のファームを更新する場合について説明したが、本発明はこれに限定されるものではなく、情報処理装置、情報処理機器、携帯電話、スマートフォン等の他の装置のプログラムを更新する場合にも同様に適用することができる。
【００６３】
また、実施例１では、プログラム更新装置２が加工されたパッチをそのまま送信する場合について説明したが、本発明はこれに限定されるものではなく、プログラム更新装置２が加工されたパッチを圧縮して送る場合にも同様に適用することができる。
【００６４】
また、実施例１では、プログラム更新装置２について説明したが、プログラム更新装置２が有する構成をソフトウェアによって実現することで、同様の機能を有するプログラム更新プログラムを得ることができる。そこで、プログラム更新プログラムを実行するコンピュータについて説明する。
【００６５】
図８は、実施例１に係るプログラム更新プログラムを実行するコンピュータのハードウェア構成を示す図である。図８に示すように、コンピュータ４０は、メインメモリ４１と、ＣＰＵ（Central  Processing  Unit）４２と、ＬＡＮ（Local  Area  Network）インタフェース４３と、ＨＤＤ（Hard  Disk  Drive）４４とを有する。また、コンピュータ４０は、スーパーＩＯ（Input  Output）４５と、ＤＶＩ（Digital  Visual  Interface）４６と、ＯＤＤ（Optical  Disk  Drive）４７とを有する。
【００６６】
メインメモリ４１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ４２は、メインメモリ４１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ４２は、メモリコントローラを有するチップセットを含む。
【００６７】
ＬＡＮインタフェース４３は、コンピュータ４０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ４４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ４５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ４６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ４７は、ＤＶＤの読み書きを行う装置である。
【００６８】
ＬＡＮインタフェース４３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ４２に接続され、ＨＤＤ４４及びＯＤＤ４７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ４２に接続される。スーパーＩＯ４５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ４２に接続される。
【００６９】
そして、コンピュータ４０において実行されるプログラム更新プログラムは、ＤＶＤに記憶され、ＯＤＤ４７によってＤＶＤから読み出されてコンピュータ４０にインストールされる。あるいは、プログラム更新プログラムは、ＬＡＮインタフェース４３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ４０にインストールされる。そして、インストールされたプログラム更新プログラムは、ＨＤＤ４４に記憶され、メインメモリ４１に読み出されてＣＰＵ４２によって実行される。
【実施例２】
【００７０】
ところで、パッチを適用中にセンサ端末が電力不足や何らかの不具合等で再起動することがある。そこで、実施例２では、再起動時にパッチを継続して実行するセンサ端末について説明する。
【００７１】
図９は、実施例２に係るセンサ端末による再起動対策を説明するための図である。図９に示すように、実施例に係るセンサ端末３ａは、ＭＣＵ１０と、ストレージ５ａと、ＥＥＰＲＯＭ６ａとを有する。
【００７２】
ＭＣＵ１０は、ＥＥＰＲＯＭ６ａからプログラムを読み出して実行する演算処理装置である。ストレージ５ａは、フラッシュメモリ等の不揮発性記憶装置である。ＥＥＰＲＯＭ６ａは、ＭＣＵ１０で実行されるプログラムを記憶する不揮発性記憶装置であり、ファーム本体６１、ファーム更新プログラム６２及びブートローダ６３を記憶する。
【００７３】
ファーム本体６１は、更新されるプログラムである。ファーム更新プログラム６２は、パッチを用いてファーム本体６１を更新するプログラムである。ブートローダ６３は、センサ端末３ａが起動されると実行され、ファーム本体６１又はファーム更新プログラム６２を起動するプログラムである。
【００７４】
ストレージ５ａは、ブロック番号領域５１と、パッチ領域５２と、作業領域５３とを有する。ブロック番号領域５１は、更新作業中のブロックの番号を記憶する領域である。ブロック番号領域５１は、更新作業中でない場合には、負の数を記憶する。パッチ領域５２は、加工済みパッチを記憶する領域である。作業領域５３は、更新作業に使われる領域である。
【００７５】
ファーム更新プログラム６２は、作業中のブロックの番号をブロック番号領域５１に保存した後、作業領域５３に更新対象ブロックの新しいバイナリコードを作成する。ブートローダ６３は、動作開始時にブロック番号領域５１を参照し、非負の整数が格納されていた場合は、パッチ適用中に再起動されたと判断し、ファーム本体６１ではなく、ファーム更新プログラム６２を起動する。起動されたファーム更新プログラム６２は、ブロック番号領域５１を参照し、ブロック番号領域５１に格納された番号のブロックに対するパッチグループの適用から処理を再開する。
【００７６】
図１０は、ブートローダ６３による処理のフローを示すフローチャートである。図１０に示すように、ブートローダ６３は、ストレージ５ａのブロック番号領域５１を参照し（ステップＳ４１）、ブロック番号の値が負であるか否かを判定する（ステップＳ４２）。
【００７７】
そして、ブートローダ６３は、ブロック番号の値が負である場合には、ファーム本体６１を起動し（ステップＳ４３）、ブロック番号の値が負でない場合には、ファーム更新プログラム６２を起動する（ステップＳ４４）。
【００７８】
図１１は、ファーム更新プログラム６２による処理のフローを示すフローチャートである。図１１に示すように、ファーム更新プログラム６２は、ストレージ５ａのブロック番号領域５１を参照し（ステップＳ５１）、ブロック番号の値が負であるか否かを判定する（ステップＳ５２）。
【００７９】
そして、ファーム更新プログラム６２は、ブロック番号の値が負である場合には、パッチの先頭グループを読み出し（ステップＳ５３）、負でない場合には、ブロック番号領域５１に格納された番号のグループを読み出す（ステップＳ５４）。
【００８０】
そして、ファーム更新プログラム６２は、読み出したグループの各パッチ命令を処理し（ステップＳ５５）、ストレージ５ａのブロック番号領域５１を更新する（ステップＳ５６）。そして、ファーム更新プログラム６２は、パッチの末尾まで処理を完了したか否かを判定し（ステップＳ５７）、完了していない場合には、ステップＳ５１に戻り、完了した場合には、ブロック番号領域５１に−１を書き込む（ステップＳ５８）。
【００８１】
上述してきたように、実施例２では、ブロック番号領域５１に作業中のブロック番号を記憶し、ファーム更新プログラム６２は、起動されると、ブロック番号領域５１に記憶された番号のブロックから処理を再開する。したがって、センサ端末３ａは、パッチ適用中に予期しない再起動が発生した場合にも、継続してパッチ適用を行うことができる。
【符号の説明】
【００８２】
１    プログラム更新システム
２    プログラム更新装置
３，３ａ    センサ端末
４    広域網
５ａ，９５    ストレージ
６ａ，９６    ＥＥＰＲＯＭ
１０    ＭＣＵ
２１    分割再構成部
２１ａ    分割部
２１ｂ    グループ化部
２２    依存関係解決部
２２ａ    特定部
２２ｂ    解決部
２３    送信部
３１    受信部
３２    記憶部
３２ａ，５２    パッチ領域
３２ｂ，５３，９７，９８    作業領域
３３    更新部
４０    コンピュータ
４１    メインメモリ
４２    ＣＰＵ
４３    ＬＡＮインタフェース
４４    ＨＤＤ
４５    スーパーＩＯ
４６    ＤＶＩ
４７    ＯＤＤ
５１    ブロック番号領域
６１，９６１    ファーム本体
６２，９６２    ファーム更新プログラム
６３，９６３    ブートローダ
９４    パッチ
９９    プロック＃２用作業版
【図１Ａ】
2018195046.tif 000003
【図１Ｂ】
2018195046.tif 000004
【図１Ｃ】
2018195046.tif 000005
【図１Ｄ】
2018195046.tif 000006
【図１Ｅ】
2018195046.tif 000007
【図１Ｆ】
2018195046.tif 000008
【図２】
2018195046.tif 000009
【図３】
2018195046.tif 000010
【図４】
2018195046.tif 000011
【図５】
2018195046.tif 000012
【図６】
2018195046.tif 000013
【図７】
2018195046.tif 000014
【図８】
2018195046.tif 000015
【図９】
2018195046.tif 000016
【図１０】
2018195046.tif 000017
【図１１】
2018195046.tif 000018
【図１２】
2018195046.tif 000019
【図１３】
2018195046.tif 000020
【図１４】
2018195046.tif 000021
【図１５】
2018195046.tif 000022
【図１６】
2018195046.tif 000023
【図１７】
2018195046.tif 000024