JP6637398B2 - 判定装置及び判定方法 - Google Patents
判定装置及び判定方法 Download PDFInfo
- Publication number
- JP6637398B2 JP6637398B2 JP2016185274A JP2016185274A JP6637398B2 JP 6637398 B2 JP6637398 B2 JP 6637398B2 JP 2016185274 A JP2016185274 A JP 2016185274A JP 2016185274 A JP2016185274 A JP 2016185274A JP 6637398 B2 JP6637398 B2 JP 6637398B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- code
- difference
- update
- expression
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/76—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in application-specific integrated circuits [ASIC] or field-programmable devices, e.g. field-programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Description
P:更新前プログラム、
P':更新後プログラム、
P(s0):Pの初期状態
P(sk):Pの初期状態から有限回のステップ実行で到達可能な状態
P'(t0):P'の初期状態
P'(tl):P'の初期状態から有限回のステップ実行で到達可能な状態
T:更新前プログラムから更新後プログラムへの動的変更
そして、上記条件満たす場合、即ち、P(sk)にて動的プログラム更新が実施され、その後の有限回のステップ実行でP'(tl)に到達する実行例を示している。
まず、特許文献1では、組込み機器で基準アドレスと相対アドレスから実アドレスを算出する事で、更新プログラムの動的なアドレス解決が可能である事を前提としている。そのため、組込み機器が前記動的アドレス解決機能を有さない場合、直接適用する事ができない。また、特許文献1の実施例ではLinux(登録商標)など動的アドレス変換機構を伴う高機能OS(Operating System)搭載が前提となっている。よって、特許文献1にかかる技術は、そのような機構がない組込みOSのみが搭載されている場合や、OS自体が搭載されていない場合に適用する事が出来ない。また、モジュール単位での端末機器での動的更新を対象としているため、差分コードのみを用いた更なるメモリ削減が達成できない。
本実施の形態による解決手段は、差分バイナリを用いて、システム再起動を伴わないプログラム更新が可能かの十分条件と、前記十分条件を差分バイナリが満たすか否かを、開発環境で更新前プログラムと更新後プログラムから差分プログラムを生成する際に検証する方法及び装置といえる。また、前記差分プログラムを用いた組込み機器での動的プログラム更新手法も含む。
第1のプログラムのうち第2のプログラムと異なるコード片の集合を示す第1の差分コードと、前記第2のプログラムのうち前記第1のプログラムと異なるコード片の集合を示す第2の差分コードとを生成する差分コード生成部と、
前記第1の差分コードから所定の変換により第1の論理式を導出し、前記第2の差分コードから前記所定の変換により第2の論理式を導出する論理式導出部と、
前記第2の論理式が前記第1の論理式を含むか否かにより、所定の組込み機器における前記第1のプログラムから前記第2のプログラムへの動的更新の可否を判定する判定部と、
を備える。
前記所定の変換として、前記第1の差分コードから第1のSMT(Satisfiability Modulo Theories)式を前記第1の論理式として導出し、前記第2の差分コードから第2のSMT式を前記第2の論理式として導出する。
前記第1の差分コード及び前記第2の差分コードがループ記述を含む場合に、前記所定の変換として、前記第1の差分コードから第1のEFSM(Extended Finite State Machine)を構築し、前記第2の差分コードから第2のEFSMを構築し、当該第1のEFSMから前記第1のSMT式を前記第1の論理式として導出し、当該第2のEFSMから前記第2のSMT式を前記第2の論理式として導出する。
深さ優先探索を実施しつつ、当該深さ優先探索で辿る状態遷移毎に付加された遷移条件と実行文からなる論理積を構成し、分岐パスは論理和で結合し、得られた式全体で論理積を構成することにより、前記第1のEFSMから前記第1のSMT式及び前記第2のEFSMから前記第2のSMT式を導出する。
前記第1の論理式及び前記第2の論理式を用いて模倣(Simulation)関係判定により前記第2の論理式が前記第1の論理式を含むか否か、及び双模倣(Bisimulation)等価性判定により、前記第1の論理式と前記第2の論理式が等価であるか否かを判定する。
前記第1の差分コード及び前記第2の差分コードを簡略化して前記所定の変換を行う。
前記簡略化として、前記第1の差分コード及び前記第2の差分コードを積極的コード移動、不到達式削除及び冗長式削除の順に実施して前記所定の変換を行う。
前記第1のプログラムと前記第2のプログラムとの差分のコードからアドレス解決を行ったオブジェクトコードを前記第1の差分コード及び前記第2の差分コードとして生成する。
関数呼び出し構造を維持するように前記第1のプログラムと前記第2のプログラムとの差分を取ることにより、前記第1の差分コード及び前記第2の差分コードを生成する。
各タスクが構成されているプログラム関数群を定義したタスク分割情報を入力し、
前記タスク分割情報を用いて、前記第1のプログラムの各タスクが更新対象の定数群の演算結果を戻り値として返すか、タスク間データ出力を行うかを識別し、前記第2のプログラムの各タスクが当該戻り値や当該タスク間データ出力を受け取るかを識別し、当該識別した情報を出力する。
第1のプログラムのうち第2のプログラムと異なるコード片の集合を示す第1の差分コードと、前記第2のプログラムのうち前記第1のプログラムと異なるコード片の集合を示す第2の差分コードとを生成し、
前記第1の差分コードから所定の変換により第1の論理式を導出し、前記第2の差分コードから前記所定の変換により第2の論理式を導出し、
前記第2の論理式が前記第1の論理式を含むか否かにより、所定の組込み機器における前記第1のプログラムから前記第2のプログラムへの動的更新の可否を判定する。
(1)組込み機器が動的アドレス解決機能を有さない場合であっても、差分コードを用いた動的プログラム更新が可能か判定可能であり可能な場合、実施可能である。
(2)プログラムの実行に必要な各種情報として動的に格納されるプログラムコンテキスト情報に関して、タスク間でのデータ引渡しとして利用される出力結果の有無を表す情報を除いて、プログラム実行中にトレースする機能を伴う事なくプログラム更新が可能であり、実行時オーバーヘッドが従来手法に比べて大幅に軽減可能である。
(3)モジュール単位での更新に比べ、差分コードのみを用いた更なるメモリ削減が達成可能である。
(4)フラッシュメモリの書込み及び消去をより細かい単位で実施可能となるため、モジュール単位での更新手法に比べ、フラッシュメモリの長寿命化が達成可能となる。
(5)更新での異常検知時や外部からの指示に基づく更新前プログラムへの動的ロールバックが可能か判定可能で、可能な場合、動的ロールバックが実施可能となる。
まず、本実施の形態における前提を説明する。本実施の形態では、ある一定以上の品質が要求されるプログラムを対象として成されたものであり、ISO26262 ASIL-AまたはIEC61508 SIL1相当のMISRA-C規約相当を満たすプログラム記述などを対象とする。具体的には本実施の形態が対象とするプログラム記述は、言語の指定は特にないが、到達不能変数や未使用変数が記述に含まれず、静的コード解析で下記が可能であると仮定する。下記が満たされる場合、プログラムから到達不能変数や未使用変数を自動で削除可能となるため、本実施の形態が対象とするプログラムは下記条件のみを満たせば良い事となる。
(1)関数間の依存関係を表すCall Graphが構築可能
(2)データフローグラフが構築可能
(3)制御フローグラフが構築可能
(4)再帰記述は繰返し記述に変換可能
(5)構造化されており、ソースコードレベルでのジャンプ記述は非存在
以下、再帰記述は全て繰返し処理記述に変換されているものとする。また、大域変数は用いられていないものとする。
(1)動的配置前のプロセッサレジスタの値を退避し、切り替え直前にプロセッサレジスタ値を復旧すること
(2)差分プログラムや更新プログラムをプログラムメモリへ格納する際に使用するメモリ領域は、(1)同様、退避及び復旧を行うか、プログラム実行領域と異なる領域を利用し、動的配置がプログラム実行に影響しないよう管理すること
本実施の形態は、更新前プログラムと更新後プログラム、及びユーザ指定更新可能変数情報を受け付け、動的更新可能かの十分条件判定を実施し、判定結果を返す手段及びシステムである。当該手段又はシステムは差分プログラムを生成しても良い。本実施の形態1にかかるシステム構成を図2に示す。また、組込み機器での動的プログラム更新を、プロセッサ上の全タスクが実行を完了し、全てアイドル状態となったときのみに実施する手段を含む。
条件1. Pにおける有効なプログラム実行トレースを、有効なプログラム実行トレースとしてP'が全て含む。
条件2. プロセッサレジスタ以外のI/Oを含むレジスタなど変数が{V2−dep(V2, V1)}∪Λに含まれる場合、それら変数のプログラム更新での値設定を許可する。
P :更新前プログラム
P':更新後プログラム
Var(P) :Pで使用される全変数の集合
Var(P'):P'で使用される全変数の集合
V1=Var(P)∩Var(P')
:PとP'の全共通変数の集合
V2=Var(P')−V1
:P'で使用される全変数の集合からPとP'の全共通変数を除
いた変数の集合
dep(V2, V1)
:P'においてV1に含まれる変数を用いて定義されており、V1に含まれる変数の定義で参照されている、V2に含まれる変数の集合
Λ={ユーザ指定更新可能変数}∪{固定定数変数}
:ユーザが指定した更新可能変数、及び固定定数変数を加えた変数の集合
固定定数変数は、大域変数が存在しないとの前提から関数内で宣言されており、プログラム実行での変更がない定数変数の事である。例えば、フィルタ処理での固定フィルタ定数係数などが該当する。
図2に本実施の形態1にかかるシステム構成を示す。判定装置104は、更新前プログラム101、更新後プログラム102、及びユーザ指定更新可能変数103を入力し、動的更新可能かの十分判定処理を行い、判定結果106及び差分プログラム105を出力する。ここで、ユーザ指定更新可能変数103は、動的プログラム更新で変更可能であるとユーザが指定した変数群を指定した情報である。ユーザ指定更新可能変数103は、例えば、設定済みのペリフェラルI/Oレジスタである。ユーザは、当該レジスタ値の動的更新がプログラム全体の動作に対して影響しない場合に、当該レジスタに対応する変数をユーザ指定更新可能変数103に指定する。尚、更新前プログラム101は、第1のプログラムの一例であり、更新後プログラム102は、第2のプログラムの一例である。
更新前プログラムと更新後プログラム全体で条件1を満たすか否かの判定は、プログラム記述へ課した仮定から計算可能であるが、現実的な時間で処理を終える事は一般に困難であると考えられる。そこで、下記2つの重要な性質に着目する。
性質1. 2つのプログラムで異なっているのは差分コード部のみ
性質2. プログラムは実行順に関して自然な半順序を持つ
性質2から、更新前後で差異がある部分が条件1を満たすか否かの判定処理実行順を、図3の更新前の差異部間のグラフ構造301と更新後の差異部のグラフ構造302に示すように、トポロジカルソートを行う事で定義可能である。従って、以下のような記号定義が矛盾なく実施可能となる。
orig i:更新前後で差異が生じる更新前プログラムのi番目の差異部
update i:更新前後で差異が生じる更新後プログラムのi番目の差異部
:orig iとupdate iで条件1が満たされる
この場合、再び性質1と2とから、更新前プログラムの先頭からorig k+1直前に至るまでの全プログラムパスと、更新後プログラムの先頭からupdate k+1直前に至るまでの全プログラムパスとで条件1が満たされる。ここで、kは任意であったため、全ての差異部で条件1が満たされれば、更新前後でプログラムが条件1を満たす事となる。従って、各kに対して、式(2)が成立している事を示せば良い。残る問題は、orig k、update kの構築手法と、式(2)の判定手法である。
Var(orig k) :orig kに含まれる変数全体の集合
Var(update k):update kに含まれる変数全体の集合
を求め、各変数のDef-use解析を更新前プログラム、更新後プログラム夫々で実施し、
InVar(orig k)
:P−orig kでdefされた後、orig kでuseされている変数
OutVar(orig k)
:orig kでdefされた後、P−orig kでuseされている変数
InVar(update k)
:P’−update kでdefされた後、update kでuseされている変数
OutVar(update k)
:update kでdefされた後、P’−update kでuseされている変数
を求める。ここで、
P−orig k :更新前プログラムPからorig kを除いたプログラム
P'−update k:更新後プログラムP'からupdate kを除いたプログラム
である。尚、def-use解析に関しては非特許文献5に開示されている。
Δorig k=Var(orig k)−Var(update k)−(Var(P)−(Λ∪V1)−dep(V3, V1))
Δupdate k=Var(update k)−Var(orig k)−(Var(P')−(Λ∪V1)−dep(V2, V1))
V3=Var(P)−V1
:Pで使用される全変数の集合からPとP'の全共通変数を除いた変数の集合
dep(V3, V1)
:PにおいてV1に含まれる変数を用いて定義されており、V1に含まれる変数の定義で参照されている、V3に含まれる変数の集合
LastDefStmt(Δorig k)
:各Δorig kの変数に対する、P−orig kでdefされた後、orig kでuseされている変数への代入文であって、P−org kでorig kに至る前に最も最後に代入実行されている代入文の集合
FirstUseStmt(Δorig k)
:各Δorig kの変数に対する、orig kでdefされた後、P−orig kでuseされている変数を参照する文であって、orig k以降のP−orig k内最初の文の集合
LastDefStmt(Δupdate k)
:各Δorig kの変数に対する、P−update kでdefされた後、update kでuseされている変数への代入文であって、P−org kでupdate kに至る前に最も最後に代入実行されている代入文の集合
FirstUseStmt(Δupdate k)
:各Δorig kの変数に対する、update kでdefされた後、P−update kでuseされている変数を参照する文であって、update k以降のP−update k内最初の文の集合
1)LastDefStmt(Δorig k)≠φなら、LastDefStmt(Δorig k)に含まれる文を含むBasic Block集合を求め、それらBasic Block集合を包含するHyperBlock集合を求める。HyperBlock集合及びHyperBlock集合からorig kに至るプログラムパスをorig kに加えたものを、新たにorig kとする。ここで、これらorig kに加えたコードの中で元々のorig kに到達しないコードを削除しても良い。
2)FirstUseStmt(Δorig k)≠φなら、FirstUseStmt(Δorig k)に含まれる文を含むBasic Block集合を求め、それらBasic Block集合を包含するHyperBlock集合を求める。HyperBlock集合及びorig kからHyperBlock集合に至るプログラムパスをorig kに加えたものを、新たにorig kとする。ここで、これらorig kに加えたコードの中で求めたHyperBlock集合に到達しないコードとorig k内の変数からのデータ依存関係のないHyperBlock集合内のコードを削除しても良い。
3)LastDefStmt(Δupdate k)≠φなら、LastDefStmt(Δupdate k)に含まれる文を含むBasic Block集合を求め、それらBasic Block集合を包含するHyperBlock集合を求める。HyperBlock集合及びHyperBlock集合からupdate kに至るプログラムパスをupdate kに加えたものを、新たにupdate kとする。ここで、これらupdate kに加えたコードの中で元々のupdate kに到達しないコードを削除しても良い。
4)FirstUseStmt(Δupdate k)≠φなら、FirstUseStmt(Δupdate k)に含まれる文を含むBasic Block集合を求め、それらBasic Block集合を包含するHyperBlock集合を求める。HyperBlock集合及びupdate kからHyperBlock集合に至るプログラムパスをupdate kに加えたものを、新たにupdate kとする。update kとする。ここで、これらupdate kに加えたコードの中で求めたHyperBlock集合に到達しないコードorig k内の変数からのデータ依存関係のないHyperBlock集合内のコードを削除しても良い。
ここで、orig k=φの場合は、P'で構築したLastDefStmt(Δupdate k)とFirstUseStmt(Δupdate k)に対応するP内の文を識別し、P上で上記3)と4)を実施し得られたHyperBlockをorig kとする。
図5に、動的更新可能かの十分条件判定処理の全体フローの一例を示す。
(1)S1で、差分コード生成部1041は、V2−dep(V3,V1)=φか否か判定し、不成立の場合、条件1を満たさないとして判定処理を終了する。成立した場合、差分コード生成部1041は、更新前プログラムと更新後プログラムの差分部の対応を取り、{(orig k, update k)|0<=k<=N}を作成する。ここで、Nは差分があった箇所の総数である。差分部の対応は、UNIX(登録商標)コマンドvimdiffでの出力と同様に図6に示す形で得られるものとする。図6では、更新前プログラム601と更新後プログラム602が与えられており、一致箇所と変更箇所の対応が示されている。例えば、左辺変数が一致しているが、右辺が異なる場合や、分岐文で条件判定式が一部変更されている場合などで、変更前1と変更後1のような対応関係が得られ、加えて文の追加が行われている場合などで、変更前2と変更後2のような対応関係が得られる。図示していないが、文の削除を伴う場合でも、変更前後の関係が得られる。
(3)S3で、論理式導出部1042は、各kに対して、簡約化後のorig k、update k夫々のコードから拡張有限状態機(EFSM:Extended Finite State Machine)を構築する。
(4)S4で、コードがループ記述を含む場合、論理式導出部1042は、各kに対して、orig k、update k夫々から構築したEFSMからSMT(Satisfiability Modulo Theories)式への変換を実施する。尚、ループ記述を含まない場合、論理式導出部1042は、S2で簡約化されたコードから直接、SMT式への変換を実施する。尚、S2、S3及びS4は、所定の変換の一例である。
(5)S5で、判定部1043は、各kに対して、orig k、update k夫々から構成したSMT式を用いて模倣判定を実施する。
図7に関数階層を考慮した差分コード生成処理フローの一例を示す。
(1)S1−1で、差分コード生成部1041は、関数の呼び出し関係をグラフ表現したコールグラフを対象として、更新前後での差分情報を取得する。
(2)S1−2で、差分コード生成部1041は、固定定数変数データの差分を生成する。
(3)更新前後での差異が現れる関数は一般に複数存在し得るため、その数に対して上限Nがある場合、S1−3で、差分コード生成部1041は、差異のある関数の数がNを越えるか否か判定する。差異のある関数の数がNを超える場合は、S1−4で、差分コード生成部1041は、対象となる関数の配置アドレスを考慮しつつ関数の数がN以下となるよう関数のマージを実施する。例えば、アドレスが連続になるように関数を連結する。差異のある関数の数がNを越えない場合、処理をS1−5へ移行する。上限Nがない場合は、処理せずS1−5へ処理を移行する。
(5)更新前後での差異が現れるコード塊(以下、差分コード片)は一般に複数存在し得るため、その数に対して上限Nがある場合、S1−6で、差分コード生成部1041は、関数内での差分コード片のマージ処理を実施する。尚、図7の右下にS1−6により解かれる最適化問題を示す。但し、S1−6の詳細は後述する。上限Nがない場合は、処理せずS1−7へ処理を移行する。
(6)S1−7で、差分コード生成部1041は、差分SSAを用いた差分オブジェクトコードを生成する。
(8)S1−9で、差分コード生成部1041は、アドレス解決を行うためのリンカスクリプトを生成する。
(9)S1−10で、差分コード生成部1041は、差分コード、それ以外のアドレス解決済みオブジェクトコード、及びリンカスクリプトを用いて、差分コードのオブジェクトコード(差分バイナリ)を生成する。
Org={f,g,h,i}
Upd={f,g,h,i,j}
となり、差分は
(Org−Upd)∪(Upd−Org)={j}
として得られる。一般に関数は、複数箇所から呼び出される傾向にあるため、501に含まれず502に含まれる関数jをInlineして扱うのは非効率であると考えられる。そのため、Inlineせずにコールグラフでの差分を識別する必要がある。この実現では、DAG構造のコールグラフの葉ノードからDAGの始点ノードに向かって、更新前コールグラフと更新後コールグラフの違いを識別する事が一つの方法となる。
Org'={f,g,h,i,j}
Upd'={f,h,i,j,k}
となり、差分は
(Org'−Upd')∪(Upd'−Org')={g,k}
として得られる。関数を展開する事なく差分を識別する場合、差分として識別された関数を呼び出す関数も、前記呼び出しが少なくとも差分となるため、同時に識別する必要がある。更新前後それぞれのコールグラフのノードに対してトポロジカルソートを実施し、逆順に比較を実施しつつ差分関数ノードを識別し、コールグラフで差分関数への出力エッジを持つ関数ノードを更新で呼び出し関数が増加した関数としてマークしている例を506に示す。
get_prev_node(Call Graph cg, node n)
を、コールグラフcgにおいて、cgのノードnへの出力エッジを持つcg上のノード全てを返す関数とする。
(2)S1−1−2で、差分コード生成部1041は、Oldをトポロジカルソートして逆順の順番ラベルをOldの各ノードに与えたものをtp_sort_old_func、Newをトポロジカルソートして逆順の順番ラベルをNewの各ノードに与えたものをtp_sort_new_func、とする。
(3)S1−1−3で、差分コード生成部1041は、順番を付けたコールグラフ間のノードの差集合を下記で算出する。
diff_func1
=tp_sort_old_funcの全ノード − tp_sort_new_funcの全ノード
diff_func2
=tp_sort_new_funcの全ノード − tp_sort_old_funcの全ノード
(5)S1−1−5で、差分コード生成部1041は、diff_func1に含まれるノードを取り出し、全ノードが取り出されるまで順次S1−1−6を実施する。ここで、取り出したノードをoとして表す。
(6)S1−1−6で、差分コード生成部1041は、下記演算を行う事で差分関数呼び出し関数を識別する。
C1 := C1 ∪ {get_prev_node(Old,o)}
(8)S1−1−8で、差分コード生成部1041は、diff_func2に含まれるノードを取り出し、全ノードが取り出されるまで順次S1−1−9を実施。ここで、取り出したノードをnとして表す。
(9)S1−1−9で、差分コード生成部1041は、下記演算を行う事で差分関数呼び出し関数を識別する。
C2 := C2 ∪ {get_prev_node(New,o)}
(10)S1−1−10で、差分コード生成部1041は、C1、C2、diff_func2を処理結果として返し、処理を終了する。
まず、更新前プログラムと差分プログラムの間のプログラム実行遷移について説明する。図31は、更新前プログラムと差分プログラムの間のプログラム実行遷移の様子を示す模式図である。ここではメモリ空間Aに更新前プログラムのオブジェクトコードが配置されている。メモリ空間Aにおいて、Const変数及び列挙型値などのテキストセグメントに配置される定数変数とその値がメモリ領域802に、関数fがメモリ領域803に、関数gがメモリ領域804に、関数hがメモリ領域805に、初期値付き変数がメモリ領域806に、初期値なし変数がメモリ領域807に、スタックなどをメモリ領域808に配置した例を示している。またメモリ空間Bに、更新差分プログラムのオブジェクトコードが配置されている。パッチ809は、関数fの一部に対応する更新差分プログラムオブジェクトコード、パッチ810は、関数gの一部に対応する更新差分プログラムオブジェクトコード、パッチ811は、関数hの一部に対応する更新差分プログラムオブジェクトコード、に夫々対応しているものとする。図31に記載のコード間のプログラム実行遷移例を以下に示す。
(1)S1−2−1で、差分コード生成部1041は、更新前プログラムと更新後プログラムの両方で用いられている関数からなる、同じ順番で並べたリストを下記演算で構成する。
new_func
= tp_sort_new_funcのトポロジカルソートの逆順に配置されたノードのリスト − diff_func2
old_func
= tp_sort_old_funcのトポロジカルソートの逆順に配置されたノードのリスト − diff_func1
(2)S1−2−2で、差分コード生成部1041は、集合Lをφ(空集合)として初期化する。
(3)S1−2−3で、差分コード生成部1041は、new_funcに含まれるノードを取り出し、全ノードが取り出されるまで順次S1−2−4からS1−2−8を実施する。ここで、取り出したノードをf_newとして表す。
(5)S1−2−5で、差分コード生成部1041は、f_newにテキストセグメントが含まれるか確認し、含まれる場合、S1−2−6へ処理を移行し、そうでない場合、(3)での繰返し処理を1つ進めて継続する。
(6)S1−2−6で、差分コード生成部1041は、f_oldにテキストセグメントが含まれるか確認する。f_oldにテキストセグメントが含まれる場合、S1−2−7へ処理を移行する。f_oldにテキストセグメントが含まれない場合、S1−2−8へ処理を移行する。
last_addr_o=head_adder+size_o
として算出する。同様に、差分コード生成部1041は、f_newのセグメントサイズをsize_nとして、最終アドレスを
last_addr_n=head_adder+size_o
として算出する。差分コード生成部1041は、集合Lを下記で更新する。
L = L∪{(f_new,head_addr,size_n,last_addr_n),
(f_old,head_addr,size_o,last_addr_o)}
(8)S1−2−8で、差分コード生成部1041は、f_newのテキストセグメント、即ち固定定数変数を更新面に配置するものとして、具体的なアドレス決定は図7での処理S1−9で行うものとする。
(9)S1−2−9で、差分コード生成部1041は、Lをhead_addrをキーとしてソートし、それを新たにLとする
(11)S1−2−11で、差分コード生成部1041は、リストLに含まれる連続したノード2つを取り出し、1個づつずらしながら順次2ノードを全て取り出すまで、順次S1−2−12、S1−2−13を繰返し実施する。ここで、取り出した2つのノードを{a,b}として表す。例えば、L={a,b,c,d}なら、順次実施される2ノードの取り出しでは{a,b}{b,c}{c,d}となる。
(12)S1−2−12で、差分コード生成部1041は、aのテキストセグメントの最終アドレスと、その後段に配置されるべきbのテキストセグメントの先頭アドレスを以下の式(3)のブール式として比較する。
結果が真ならS1−2−13へ処理を移行する。結果が偽なら、(11)での繰返し処理を継続する。
offset = last_addr(a,f_new)-head_addr(b,f_new)
L = L − {b}
b_new = b + offset
L = L + {b_new}
M = M ∪ {b_new}
ここで、b_new = b + offsetは、下記の略記である。
(f_new,head_addr_new,size,last_addr_new)
= (f_new,head_addr+offset,size,last_addr+offset)
(14)S1−2−14で、差分コード生成部1041は、結果得られた集合Mを返す。
(15)S1−2−15で、差分コード生成部1041は、集合Nをφ(空集合)として初期化する。
(17)S1−2−17で、差分コード生成部1041は、更新前後で互いに対応する関数であるf_oldとf_newに対して、夫々含まれるテキストセグメントを比較して、f_oldのテキストセグメントがf_newのテキストセグメント先頭から完全一致する場合であって、夫々の終アドレスを
last_addr(a,f_old) < last_addr(a,f_new)
なるブール式として比較する。結果が真ならS1−2−18へ処理を移行する。結果が偽なら、(16)での繰返し処理を継続する。
(18)S1−2−18で、差分コード生成部1041は、a'として下記を算出する。
a’ = last_addr(a,f_old) 〜 last_addr(a,f_new)
具体的には、差分コード生成部1041は、下記を算出する。
a' =(f_new, last_adder_o, size_n−size_o, last_adde_n)
ここで、f_oldのテキストセグメントが
(f_old, head_adder, size_o, last_adde_o)
f_newのテキストセグメントが
(f_new, head_adder, size_n, last_adde_n)
であるとする。
N = N ∪ {a’}
M = M − {a}
(20)S1−2−20で、差分コード生成部1041は、M∪Nを構築し、テキストが配置されていないアドレス空間を識別し、その空間移行に配置された各テキストセグメントの先頭アドレスと最終アドレスに当該空間のサイズをオフセットとして加える処理を、アドレスの若い順に、テキストが配置されていない空間に対して実施する。
(1)S1−5−1で、差分コード生成部1041は、集合XとYをそれぞれφ(空集合)として初期化する。
(2)S1−5−2で、差分コード生成部1041は、リストnew_funcの各元f_newに対して、S1−5−3からS1−5−12を繰り返し実施する。ここで、new_funcとold_funcは、図11のS1−2−1で構成したリストである。具体的には、下記で構成したリストである。
new_func
= tp_sort_new_funcのトポロジカルソートの逆順に配置されたノードのリスト − diff_func2
old_func
= tp_sort_old_funcのトポロジカルソートの逆順に配置されたノードのリスト − diff_func1
(3)S1−5−3で、差分コード生成部1041は、f_newと対応するold_funcの元f_oldを取り出す。
f_new_asm
= f_newのプログラム記述を、アドレス割当てやレジスタ割当てを 実施せずコンパイルして得られた、リロケータブルなアセンブリ記述
f_old_asm
= 組込み機器で動作中のオブジェクトコード内の関数f_oldに対応するアセンブリ記述
(5)S1−5−5で、差分コード生成部1041は、変数の区別を型の区別として抽象化してf_new_asm'、 f_old_asm'とし、f_new_asmとf_new_asm'、f_old_asmとf_old_asm'、各々での対応関係を保持する。この処理を<1>とする。
(8)S1−5−8で、差分コード生成部1041は、f_new_asm'への対象組込み機器搭載プロセッサに搭載されているCPUレジスタ数を考慮したレジスタ割当てを実施する。
(9)S1−5−9で、差分コード生成部1041は、<1>、<2>及び<3>を再度実施する。但し、変数名割当て時は対象組込み機器搭載プロセッサに搭載されているCPUレジスタ数を仮定する。必要に応じてスピルコードの挿入を実施し、差分が最小化されるようf_new_asmのアセンブリコードを生成する。
d = {(差分コード,head_addr,size,last_addr)}
として格納する。
(11)S1−5−11で、差分コード生成部1041は、これまでの構成で識別しているf_new_asmとf_old_asmの差分情報を、vimdiff形式で
Vimdiff(d)={((f_new,差分コード,head_addr,size_n,last_addr_n), (f_old,対応するコード,head_addr,size_o,last_addr_o))}
として格納する。
(12)S1−5−12で、差分コード生成部1041は、集合X、Yを次式で更新する。
X = X∪{d}
Y = Y∪{vimdiff(d)}
(13)S1−5−13で、差分コード生成部1041は、集合X、Yを処理結果として返し、処理を終了する。
(1)S1−6−1で、差分コード生成部1041は、集合X、Yを図14及び図15のフローチャートの出力結果として、下記を満たすd1及びd2を選び、d' = merge(d1, d2)とする。
・ コード片d1とコード片d2は同一関数内
・ distance(d1, d2) が最小
・ (sizeof(d1)+sizeof(d2)) が最小
ここで、distance()、sizeof()、merge()は以下で定義される操作である。
distance(d1, d2)
:701に示すようにd1、d2間の一致箇所のコードサイズ
sizeof(d1)
:d1のコードサイズ
merge(d1, d2)
:701から702へのvimdiff結果の変更に示すように、d1とd2をd1、d2間の一致箇所を含めて結合する処理であり、結果として結合したコードを出力する。
X = X − d1 − d2 + d’
Y = Y − vimdiff + vimdiff’
ここで、vimdiff'は702に示すように、変更後のd1,d2結合だけでなくd1,d2に対応する変更前コード(それぞれを、pd1,pd2とする)に対してmerge(pd1,pd2)を適用して得られた結合コードを利用して示される、更新前関数コードと更新後関数コードそれぞれの結合処理後のvimdiff結果を表す。
(3)S1−6−3で、差分コード生成部1041は、n = X に含まれるコード片の個数とする。
(4)S1−6−4で、差分コード生成部1041は、nが指定個数以下となったか否か確認し、そうなら処理を終了し、そうでない場合は処理をS1−6−1へ移行する。
(1)S1−8−1で、差分コード生成部1041は、集合X、Yを図14及び図15のフローチャートの出力結果、または図16のフローチャートを実施した場合はその出力結果として、Xの各元dに対して、S1−8−2からS1−8−7を繰り返し実施する。ここで、dと対応するYの元をpdとする。
(2)S1−8−2で、差分コード生成部1041は、差分コードdのサイズが、差分コード配置メモリ空間のセグメントサイズを越えるか否か判定し、超える場合S1−8−4へ、越えない場合S1−8−3へ処理を移行する。
(3)S1−8−3で、差分コード生成部1041は、差分コードdのサイズが、対応する修正前コード部pdのサイズを越えるか否か判定し、超える場合S1−8−4へ処理を移行する。
(5)S1−8−5で、差分コード生成部1041は、差分コードに対応するコードの先頭アドレスを計算するコードを生成し、(4)で追加した退避コード直後に追加する。
(6)S1−8−6で、差分コード生成部1041は、CPUレジスタの復旧コードを生成し、(5)で追加した先頭アドレス計算コードの直後に追加する。
(7)S1−8−7で、差分コード生成部1041は、算出結果の先頭アドレスへ分岐するJump命令を生成し、(6)で追加したCPUレジスタ復旧コード直後に追加する。
(1)S1−9−1で、差分コード生成部1041は、集合Xを図14及び図15のフローチャートの出力結果、または図18のフローチャートを実施した場合はその出力結果として、Xの各元dに対して、S1−9−2からS1−9−4を繰り返し実施する。
(2)S1−9−2で、差分コード生成部1041は、dをメモリ配置する際の先頭アドレス指定やアドレス解決済みsymbol tableを読込んでアドレス解決を実施するためのリンカスクリプトを生成する。
(3)S1−9−3で、差分コード生成部1041は、Symbol table中のアドレス未解決のsymbolを解決するためのリンカスクリプトを生成する。
(4)S1−9−4で、差分コード生成部1041は、dのコード見積りサイズからdの配置領域サイズを例えばセグメントサイズの整数倍などとして決定し、アセンブリコード各行のアドレスを決定するためのリンカスクリプトを生成する。
(5)S1−9−5で、差分コード生成部1041は、これまで生成されたリンカスクリプトをマージし、一つのリンカスクリプトとして生成する。
(1)S1−10−1で、差分コード生成部1041は、差分以外の部分をインラインassembly化し、最適化抑止pragrmaを付加し、図19の処理結果であるリンカスクリプトを用いてコンパイルを実行し、差分バイナリを得る。
図5のS2での処理に対応する処理の具体例の一例を図21に示す。処理手順に関しては、コンパイラの既存技術で実現できる事は、これら具体例から明らかであるため詳細は割愛する。図21には、(1)積極的コード移動(Eager Code Motion)、(2)不到達式削除(Dead code elimination)、及び(3)冗長削除(Redundancy Elimination)の具体例を示している。以下、夫々について説明する。ここで、以下の説明に先立って上述したorig k、update kの構築手法や条件1の式(2)の判定までの実施がなされているものとする。
本例では、一般的なEager Code Motionを、コード移動対象文の数が増加しない場合にのみ行うものとする。801では、コード移動前後で
t=a+b
が2文から1文になっており、実施対象となる。一方、802では、コード移動前後で、1文が2文となるため実施対象とならない。
本例では803に示す通り、Write after Writeの消去のみを実施する。また、前提として不到達コードは含まれていないものとしているため、一般的な到達不能式削除の実施は不要であり、(1)の処理で現れた場合に本処理を実施する。
本例では、一般的な冗長式削除を新たな中間変数導入を一切行わない制限の下で実施する。804では、冗長式削除で中間変数導入が発生しないコピー伝搬による冗長式削除を実施した例を示している。共通部分式削除や部分冗長式削除でも、新たな中間変数導入が一切不要な場合は実施するものとする。尚、各差分コードへの上記(1)(2)及び(3)の適用は、この順に実施するものとする。これら処理により、後段のSMT導出処理や模倣(Simulation)判定、双模倣(Bisimulation)判定処理での計算負荷が軽減される事は、本明細書の中で明らかとなる。
(2)S1−11−2で、差分コード生成部1041は、差分関数の元である関数fに対して、S1−11−2からS1−11−5を繰り返し実施する。
(3)S1−11−3で、差分コード生成部1041は、関数fをinline展開して差分コードを構築する。
(4)S1−11−4で、差分コード生成部1041は、差分コードサイズが減少したか否かを判定し、減少した場合S1−11−5へ処理を移行する。
(5)S1−11−5で、差分コード生成部1041は、Inline_Func={f}∪Inline_Funcを実施し、関数fを集合Inline_Funcに追加する。
図23に、図5のS3でのEFSM構成手法の具体例の一例を示す。プラグラムコードから変換される制御フローグラフは一般的に知られており、制御フローグラフから変換されるEFSMの構成は、非特許文献8にて構成すれば実現できるため、詳細を割愛する。
図22で求めた集合Inline_Funcに含まれない差分関数は、更新後差分コードからのSMT式導出に先立って更新後差分コード内でInline展開されているものとする。
そして、全体の論理積を構成し、1002に示す式(6)を構成している。
(1)S4−1で、論理式導出部1042は、出力辺が2つ以上ある状態に論理和を取る状態である事をマーキングする。
(2)S4−2で、論理式導出部1042は、次のループバック状態や自身のループバック状態に至るまで深さ優先探索を実施し、探索で辿る状態遷移毎に付加された遷移条件と実行文からなる論理積を構成し、分岐パスの場合は論理和を構成し、得られた式全体で論理積を構成する。ここで、次のループバック状態を仮論理変数として配置する。
(3)S4−3で、論理式導出部1042は、次のループバック状態から、その次のループバック状態か自身のループバック状態か、既に探索した状態遷移を表すエッジに至るまで深さ優先探索を実施し、探索で辿る状態遷移毎に付加された遷移条件と実行文からなる論理積を構成し、分岐パスでは論理和を構成し、得られた式全体で論理積を構成する。ここで、既に探索した状態遷移は式に含めない。次のループバック状態を仮論理変数として配置する。先のステップで配置した仮論理変数に得られた式を展開する。
(4)S4−4で、論理式導出部1042は、探索で全パスを覆ったか否か確認し、そうならS4−5へ、そうでないなら処理をS4−3へ移行する。
(5)S4−5で、論理式導出部1042は、得られた複数のSMT式を対象に共通部分式の削除と簡約化を実施する。
式(8)を(S3)に代入して以下の式(9)を得る。
これを簡略化して以下の式(10)を得る。
1103に対しても同様な処理から、以下の式(11)を得る。
図27に、導出したSMT式を用いた模倣関係判定と双模倣等価性判定の具体例の一例を示す。1201が更新前差分コードから構築したEFSMとそこから導出したSMT式(12)であり、SMT式をAとする。
一方、1202は更新後差分コードから構築したEFSMとそこから導出したSMT式(13)であり、SMT式をBとする。
模倣関係判定は1203に示す通り、以下の式(14)を示す事となる。
しかし、A及びBがSMT式である事から、これは、以下の式(15)と等価である。
即ち式(15)の左辺が充足不能である事、従って、以下の式(16)が充足可能である事と等価である。
従って、以下の式(17)のSAT/SMT Solverを用いた充足可能性判定を実施すれば良い。
充足されれば、模倣関係が成立し、充足されなければ成立しない、となる。
しかし、A及びBがSMT式である事から、これは、以下の式(19)と等価である。
即ち式(19)の左辺が充足不能である事、従って以下の式(20)が充足可能である事と等価である。
それ故、以下の式(21)のSAT/SMT Solverを用いた充足可能性判定を実施すれば良い。
充足されれば、双模倣等価性が成立し、充足されなければ成立しない、となる。
以上のことから、本実施の形態は、次のような効果を奏する。
(1)独立に動作可能な冗長多重構成を伴うプロセッサではなく、しかもタスクディスパッチャのみが搭載された安価な組込み機器で、動的プログラム更新が可能か判定可能で、可能な場合動的プログラム更新を実現できる。
(2)更新プログラムが、更新前プログラムに対して、動作意味を保存した修正、機能追加、固定定数値の変更、これら高々3つの変更であれば、動的プログラム更新が可能である。
(3)従来技術では必須となるプログラムコンテキストのトレースを、全タスクがアイドル状態になっているか否かの判定のみと出来るため、動的切り替えでのオーバーヘッドを極小化可能である。
尚、組込み機器においてはリアルタイム性が求められるため、プログラムを変更する際に、サイクルに影響するようなループ構造の変更は取りえない。それ故、上述した手法による解析が有効といえる。
上記実施の形態1では、全タスクがアイドル状態になったときのみ動的プログラム更新が可能であった。切り替えオーバーヘッドは極小化されている一方、更新タイミング(全タスクがアイドル状態になったときのみ)の制約が大きいと云える。そこで、実施の形態2では、動的なプログラムコンテキストのトレース解析を行う事なく、タスクディスパッチャで実現可能な静的なコンテキスト解析のみで、各タスクがアイドル、wait、suspend、readyの何れかの状態となったときに、動的プログラム更新を可能とする手法を以下に開示する。本手法により、従来より大幅にオーバーヘッドを低減しつつ、実施の形態1より柔軟な動的プログラム更新が可能となる。
図28に本実施の形態2にかかるシステム構成を示す。判定装置204は、更新前プログラム101、更新後プログラム102、ユーザ指定更新可能変数103、及びプログラムのタスク分割情報203を入力し、動的更新可能かの十分判定処理を行い、判定結果106、差分プログラム105、及び各タスクでの(ユーザ指定更新可能変数を除く)定数変数利用演算結果の入力・出力の有無207を出力する。ここで、ユーザ指定更新可能変数103は、実施の形態1の図2と同じであり、動的プログラム更新で変更可能であるとユーザが指定した変数群を指定した情報である。また、プログラムのタスク分割情報203は、各タスクがどのプログラム関数群から構成されているのかのタスク定義情報である。判定装置204は、差分コード生成部2041と、論理式導出部1042と、判定部1043とを備える。
実施の形態1と同様である。
実施の形態1と同様である。
差分コード生成部2041は、実施の形態1の差分コード生成部1041の処理に加えて、更新前プログラム及び更新後プログラム夫々に対して、手続き間データフロー解析を実施し、先ず各関数が定数配列演算結果を戻り値として返すか、タスク間データ出力を行うか、及び、当該戻り値や当該タスク間データ出力を受け取るかを識別する。次いで、差分コード生成部2041は、各タスクを構成する関数群の情報を示すプログラムのタスク分割情報203を用いて、更新前の各タスクが更新対象の定数群の演算結果を戻り値として返すか、タスク間データ出力を行うかを識別し、更新後の各タスクが当該戻り値や当該タスク間データ出力を受け取るかを識別する。差分コード生成部2041は、これら識別情報を、各タスクでの(ユーザ指定更新可能変数を除く)定数変数利用演算結果の入力・出力の有無結果207として出力する。
実施の形態1と同様である。
実施の形態1と同様である。
実施の形態1と同様である。
実施の形態1と同様である。
動的なプログラムコンテキストのトレース解析を行う事なく、タスクディスパッチャで実現可能な静的なコンテキスト解析のみで、各タスクがアイドル、wait、suspend、readyの何れかの状態となったときに、動的プログラム更新が可能となる。
本実施の形態3は、組込み機器での更新差分プログラムのセキュアな動的配置と、セキュアな動的更新動作とを行うものである。本実施の形態3は、上記実施の形態1及び2と組み合わせて実施することが可能である。そこで、組込み機器での更新差分プログラムのセキュアな動的配置と、セキュアな動的更新動作について以下に説明する。
まず、組込み機器40におけるプログラムの動的な配置動作について説明する。図36は、組込み機器40におけるプログラムの動的な配置動作の一例を説明する模式図である。なお、ここでは、組込み機器40のSRAM406は、起動時に固定割り付けされるプログラム更新作業領域442を有する。また、CPU401は、汎用割込みベクタテーブル440と専用割込みベクタテーブル441を具備するものとする。また、専用割込みベクタテーブル441は、動的なプログラム配置で用いられる割込みベクタテーブルであり、物理的には、汎用割込みベクタテーブル440の一部として実装されていても良い。プログラムの動的な配置動作例は下記の通りである。
(2)CPU401は専用割込みベクタテーブル441を参照し、対応する割込みハンドラが実行される。これにより、CPU401またはDMAコントローラ405の制御の下、CANインターフェース409からSRAM406に更新情報がデータ転送される。ここで、更新情報に含まれるインジェクションコードはプログラム更新作業領域442に配置される。また、受信した各データには予め署名が付加されており、プログラム更新作業領域442の予め定められたアドレスを先頭アドレスとして格納されるものとする。
(3)CANインターフェース409から更新情報の転送の区切りを示す割込みを割込みコントローラ403が受けてCPU401が割込みを受け付けるまで、上記(1)と(2)が繰り返される。
(4)CANインターフェース409から更新情報の転送の区切りを示す割込みを割込みコントローラ403が受け、CPU401が割込みを受ける。
(5)CPU401は専用割込みベクタテーブル441を参照し、対応する割込みハンドラが実行される。これにより、プログラム更新作業領域442に配置されたインジェクションコードが実行される。インジェクションコードは、その種類に応じて、CPU401がアクセスしていないプログラムROM407/データROM408に対する更新データテーブル(すなわち更新差分コードに含まれる初期値付き局所変数と大域変数)の配置、CPU401がアクセスしていないプログラムROM407に対する更新差分バイナリの配置、並びに現在実行中にないデータROM408に対するアドレス変換テーブルの配置を実施する。
(6)CANインターフェース409から更新情報の転送の終了を示す割込みを割込みコントローラ403が受けてCPU401が割込みを受け付けるまで、上記(1)〜(5)が繰り返される。
(7)CANインターフェース409から更新情報の転送の終了を示す割込みを割込みコントローラ403が受け、CPU401が割込みを受け付ける。
(8)CPU401は専用割込みベクタテーブル441を参照し、対応する割込みハンドラが実行される。これにより、プログラムROM407/データROM408に配置したデータテーブルや差分コードの署名検証、アドレス変換器402やデータROM408に配置したアドレス変換テーブルの署名検証が実施される。ここで、組込み機器40は、署名検証をパスした場合、差分コードの署名(ハッシュ値)をデータROM408に格納するとともに、CANインターフェース409から完了通知を外部へ出力する。また、組込み機器40は、再起動後に差分コード配置面の切り替えを実施する旨、フラグ設定を実施する。組込み機器40は、署名検証で不一致となった場合は、プログラムROM407/データROM408に配置したデータテーブルや差分コードの消去、アドレス変換器やデータROMに配置したアドレス変換テーブルの消去を実施するとともに、CANインターフェース409から署名検証不一致の通知を外部へ出力する。
プログラムROM407/データROM408が2面の場合、まず、デフォルトプログラムの切り替えを実施する。当該切り替えは、本実施の形態1にかかる判定にて動的更新が可能と判定されている場合、全てのタスクがsleep状態となったことを検知して、アドレス変換テーブルをオフとすることで実現できる。その後、上述した3面の場合の差分コードの動的配置を実施する。
本実施の形態では、プログラムROM407/データROM408への書込みの前に署名検証が行われる。そして、プログラムROM407/データROM408への書込みの前に署名検証が行われたか否かをハードウェアにて管理する事で、より堅牢な更新情報の動的な配置を可能とする。図37は、ROMへの書込みの許否を制御する制御回路450の一例を示す模式図である。
ステップ6100(S6100)で、実施の形態1又は実施の形態2で説明した更新動作に従い、更新差分プログラムがSRAM406へ転送される。
ステップ6101(S6101)で、転送完了後、CPU401は、「f1」ビットを設定する。ここで、CPU401は、転送が正常終了した場合‘1’を設定し、そうでない場合、‘0’を設定する。
ステップ6102(S6102)で、暗号処理ユニット404(署名検証部)が、更新差分プログラムの署名検証を実施する。
ステップ6103(S6103)で、署名検証完了後、CPU401は、「f2」ビットを設定する。CPU401は、署名検証結果が正常な場合、‘1’を設定し、そうでない場合、‘0’を設定する。
ステップ6104(S6104)で、「許可」ビットが‘1’か否かが確認され、‘1’の場合、処理はステップ6105へ移行し、そうでない場合、処理はステップ6106へ移行する。
ステップ6105(S6105)で、「f1」ビットが‘1’でかつ「f2」ビットが‘1’であるか否かが確認され、双方ともに‘1’の場合、処理はステップ6106へ移行し、そうでない場合、処理はステップ6108へ移行する。
ステップ6106(S6106)で、プログラムROM407/データROM408の書込みコントローラに対し書込み許可を設定し、「r」ビットに‘1’が設定される。
ステップ6107(S6107)で、CPU401は、更新制御レジスタ451を必ず読み出す。読み出す事で、「f1」ビット、「f2」ビット、及び「r」ビットの内容を確認する。また、これら3つのビットが‘0’にクリアされ、そして、処理が終了する。なお、ステップ6107において、書込み処理が完了した場合に、CPU401は、「r」ビットの確認を行うことで、書き込み処理が行われた際に書込みコントローラへのイネーブル信号値が実際に1であったか否かを確認することができる。また、許可ビット以外の全ビットが‘0’にクリアされるため、次の更新差分プログラムのプログラム/データROMへの書込みで、署名検証や転送完了が正常に行われているかのチェックが必須となり、これらチェックをスキップする事での攻撃を排除可能となる。
ステップ6108(S6108)で、「r」ビットに‘0’が設定され、処理はステップ6107へ移行する。
プログラムROM407及びデータROM408の面数が3である場合の更新手順は、例えば以下のようになる。図39は、プログラム更新手順の一例を示すフローチャートである。
ステップ3700(S3700)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新プログラムのロード可否を問合せる。ロードが許可されると、処理はステップ3701へ移行し、許可されない場合、処理はステップ3705へ移行する。
ステップ3701(S3701)で、管理サーバ30は、更新プログラムの動的ロード、即ちプログラムROM407及びデータROM408への更新プログラムの動的な配置を開始する。なお、動的な配置とは、プログラムの動作を停止させることなく、当該プログラムに対する差分をROMに配置することをいう。
ステップ3702(S3702)で、管理サーバ30は、更新プログラムの動的な配置の完了を確認する。
ステップ3703(S3703)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新可否を問合せる。更新が許可されると、処理はステップ3704へ移行し、許可されない場合、処理はステップ3706へ移行する。
ステップ3704(S3704)で、タスクディスパッチャは、全タスクがアイドル状態であることを確認し、差分コードの更新を実施する。
ステップ3705(S3705)では、所定の待機時間が経過した後、ステップ3700へ処理が移行する。同様に、ステップ3706(S3706)でも、所定の待機時間が経過した後、ステップ3703へ処理が移行する。
プログラムROM407及びデータROM408の面数が2である場合の更新手順は、例えば以下のようになる。図40は、プログラム更新手順の一例を示すフローチャートである。
ステップ4900(S4900)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新プログラムのロード可否を問合せる。ロードが許可されると、処理はステップ4901へ移行し、許可されない場合、処理はステップ4906へ移行する。
ステップ4901(S4901)で、アドレス変換テーブルの不許可設定など、デフォルトプログラムの実行状態とするために必要な設定が完了した後、組込み機器40がリセットされ、組込み機器40が再起動される。そして、再起動後に組込み機器40は、デフォルトプログラムの実行状態へと遷移する。
ステップ4902(S4902)で、管理サーバ30は、更新プログラムの動的ロード、即ちプログラムROM407及びデータROM408への更新プログラムの動的な配置を開始する。
ステップ4903(S4903)で、管理サーバ30は、更新プログラムの動的な配置の完了を確認する。
ステップ4904(S4904)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新可否を問合せる。更新が許可されると、処理はステップ4905へ移行し、許可されない場合、処理はステップ4907へ移行する。
ステップ4905(S4905)で、タスクディスパッチャは、全タスクがアイドル状態であることを確認し、差分コードの更新を実施する。
ステップ4906(S4906)では、所定の待機時間が経過した後、ステップ4900へ処理が移行する。同様に、ステップ4907(S4907)で、所定の待機時間が経過した後、ステップ4904へ処理が移行する。
ここで、本実施の形態における、組込み機器での更新動作について説明する。本実施の形態をプログラムROM407及びデータROM408の面数が3である組込み機器40に適用した場合の更新動作は、図39と同様であるが、以下の点で異なる。また、本実施の形態をプログラムROM407及びデータROM408の面数が2である組込み機器40に適用した場合の更新動作は、図40と同様であるが、以下の点で異なる。すなわち、本実施の形態が適用された場合、図39に示したステップ3701及び図40に示したステップ4902では、管理サーバは、更新プログラムのセキュアな動的ロード、即ち本実施の形態で述べたセキュア対応を考慮した、プログラムROM407及びデータROM408への更新プログラムの動的な配置を開始する。尚、動的配置を行わない場合、プログラムROM407/データROM408が1面であっても、動的更新動作は可能である。
(1)独立に動作可能な冗長多重構成を伴うプロセッサではなく、しかもタスクディスパッチャのみが搭載された安価な組込み機器で、動的プログラム更新が可能か判定可能で、可能な場合、動的プログラム更新をセキュアに実現できる。
(2)更新プログラムが、更新前プログラムに対して、動作意味を保存した修正、機能追加、固定定数値の変更、これら高々3つの変更であれば、動的プログラム更新がセキュアに可能である。
(3)従来技術では必須となるプログラムコンテキストのトレースを、全タスクがアイドル状態になっているか否かの判定のみと出来るため、動的切り替えでのオーバーヘッドを極小化がセキュアに可能となる。
(4)動的なプログラムコンテキストのトレース解析を行う事なく、タスクディスパッチャで実現可能な静的なコンテキスト解析のみで、各タスクがアイドル、wait、suspend、readyの何れかの状態となったときに、動的プログラム更新がセキュアに可能となる。
本実施の形態4は、組込み機器の更新での異常検知時や外部からの指示に基づく指定ポイントやデフォルトプログラムへの動的ロールバック(又はフォールバック)後のプログラムに対してロールバック前後のプログラムが条件1、条件2を満たす場合、全タスクがアイドルとなったときの動的ロールバックを実施するものである。非特許文献1より、前記動的ロールバックがその実施条件の下で動的プログラム更新可能条件を満たす事も明らかである。本実施の形態4は、上記実施の形態1と組み合わせて実施することが可能である。そこで、組込み機器での動的ロールバックについて、以下に説明する。
組込み機器の更新での異常検知時や外部からの指示に基づくデフォルトプログラムへのロールバック指示に基づき、タスクが全てSleep状態となったときに、図29のアドレス変換器をオフとする事で、差分プログラム実行を不可、即ちデフォルトのプログラムのみ実行可能とする事で実現する。
組込み機器の更新での異常検知時や外部からの指示に基づく指定ポイントへのロールバック指示に基づき、タスクが全てSleep状態となったときに、図29のアドレス変換器を先ずオフとし、デフォルトプログラムへ遷移後、データROMなどに保存しておいた指定ポイントに対応するプログラム実行を可能とする差分コード実行に対応するアドレス変換テーブルを読出し、アドレス変換器に設定、その後、実施例1の動的切り替えタイミング、即ちタスクが全てSleep状態となったときにアドレス変換器をオンとする事で、指定ポイントに対応するプログラムの実行を可能とする事で実現する。ここで、指定ポイントのプログラム実行に必要となる差分プログラムをデータROMから読出しコードROMへ上書きを実施しても良い。特に、更新差分コードを書き込む際に、既にコードROM上に存在する差分コードをデータROMに読出して書込みを実施するものとしても良い。
組込み機器において動作実行中のプログラムのフォールバックやロールバックが可能となる。
組込み機器の更新での異常検知時や外部からの指示に基づく指定ポイントやデフォルトプログラムへの動的ロールバック後のプログラムに対してロールバック前後のプログラムが条件1、条件2を満たす場合、全タスクがアイドルまたはwait、ready、suspendとなったときの動的ロールバックが、上記実施の形態3又は4と実施の形態2との組合せにより実現可能である。
102 更新後プログラム
103 ユーザ指定更新可能変数
104 判定装置
1041 差分コード生成部
1042 論理式導出部
1043 判定部
105 差分プログラム
106 判定結果
203 プログラムのタスク分割情報
204 判定装置
2041 差分コード生成部
207 各タスクでの定数変数利用演算結果の入力・出力の有無
Claims (11)
- 第1のプログラムのうち第2のプログラムと異なるコード片の集合を示す第1の差分コードと、前記第2のプログラムのうち前記第1のプログラムと異なるコード片の集合を示す第2の差分コードとを生成する差分コード生成部と、
前記第1の差分コードから所定の変換により第1の論理式を導出し、前記第2の差分コードから前記所定の変換により第2の論理式を導出する論理式導出部と、
前記第2の論理式が前記第1の論理式を含むか否かにより、所定の組込み機器における前記第1のプログラムから前記第2のプログラムへの動的更新の可否を判定する判定部と、
を備える判定装置。 - 前記論理式導出部は、
前記所定の変換として、前記第1の差分コードから第1のSMT(Satisfiability Modulo Theories)式を前記第1の論理式として導出し、前記第2の差分コードから第2のSMT式を前記第2の論理式として導出する
請求項1に記載の判定装置。 - 前記論理式導出部は、
前記第1の差分コード及び前記第2の差分コードがループ記述を含む場合に、前記所定の変換として、前記第1の差分コードから第1のEFSM(Extended Finite State Machine)を構築し、前記第2の差分コードから第2のEFSMを構築し、当該第1のEFSMから前記第1のSMT式を前記第1の論理式として導出し、当該第2のEFSMから前記第2のSMT式を前記第2の論理式として導出する
請求項2に記載の判定装置。 - 前記論理式導出部は、
深さ優先探索を実施しつつ、当該深さ優先探索で辿る状態遷移毎に付加された遷移条件と実行文からなる論理積を構成し、分岐パスは論理和で結合し、得られた式全体で論理積を構成することにより、前記第1のEFSMから前記第1のSMT式及び前記第2のEFSMから前記第2のSMT式を導出する
請求項3に記載の判定装置。 - 前記判定部は、
前記第1の論理式及び前記第2の論理式を用いて模倣(Simulation)関係判定により前記第2の論理式が前記第1の論理式を含むか否か、及び双模倣(Bisimulation)等価性判定により、前記第1の論理式と前記第2の論理式が等価であるか否かを判定する
請求項1に記載の判定装置。 - 前記論理式導出部は、
前記第1の差分コード及び前記第2の差分コードを簡略化して前記所定の変換を行う
請求項1に記載の判定装置。 - 前記論理式導出部は、
前記簡略化として、前記第1の差分コード及び前記第2の差分コードを積極的コード移動、不到達式削除及び冗長式削除の順に実施して前記所定の変換を行う
請求項6に記載の判定装置。 - 前記差分コード生成部は、
前記第1のプログラムと前記第2のプログラムとの差分のコードからアドレス解決を行ったオブジェクトコードを前記第1の差分コード及び前記第2の差分コードとして生成する
請求項1に記載の判定装置。 - 前記差分コード生成部は、
関数呼び出し構造を維持するように前記第1のプログラムと前記第2のプログラムとの差分を取ることにより、前記第1の差分コード及び前記第2の差分コードを生成する
請求項1に記載の判定装置。 - 前記差分コード生成部は、
各タスクが構成されているプログラム関数群を定義したタスク分割情報を入力し、
前記タスク分割情報を用いて、前記第1のプログラムの各タスクが更新対象の定数群の演算結果を戻り値として返すか、タスク間データ出力を行うかを識別し、前記第2のプログラムの各タスクが当該戻り値や当該タスク間データ出力を受け取るかを識別し、当該識別した情報を出力する
請求項1に記載の判定装置。 - 第1のプログラムのうち第2のプログラムと異なるコード片の集合を示す第1の差分コードと、前記第2のプログラムのうち前記第1のプログラムと異なるコード片の集合を示す第2の差分コードとを生成し、
前記第1の差分コードから所定の変換により第1の論理式を導出し、前記第2の差分コードから前記所定の変換により第2の論理式を導出し、
前記第2の論理式が前記第1の論理式を含むか否かにより、所定の組込み機器における前記第1のプログラムから前記第2のプログラムへの動的更新の可否を判定する、
判定方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016185274A JP6637398B2 (ja) | 2016-09-23 | 2016-09-23 | 判定装置及び判定方法 |
US15/656,893 US10642607B2 (en) | 2016-09-23 | 2017-07-21 | Determination apparatus and determination method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016185274A JP6637398B2 (ja) | 2016-09-23 | 2016-09-23 | 判定装置及び判定方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2018049506A JP2018049506A (ja) | 2018-03-29 |
JP6637398B2 true JP6637398B2 (ja) | 2020-01-29 |
Family
ID=61686173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016185274A Active JP6637398B2 (ja) | 2016-09-23 | 2016-09-23 | 判定装置及び判定方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10642607B2 (ja) |
JP (1) | JP6637398B2 (ja) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11593342B2 (en) | 2016-02-01 | 2023-02-28 | Smartshift Technologies, Inc. | Systems and methods for database orientation transformation |
US10585655B2 (en) | 2016-05-25 | 2020-03-10 | Smartshift Technologies, Inc. | Systems and methods for automated retrofitting of customized code objects |
US10089103B2 (en) | 2016-08-03 | 2018-10-02 | Smartshift Technologies, Inc. | Systems and methods for transformation of reporting schema |
US10496469B2 (en) | 2017-07-25 | 2019-12-03 | Aurora Labs Ltd. | Orchestrator reporting of probability of downtime from machine learning process |
US10698674B2 (en) | 2018-02-06 | 2020-06-30 | Smartshift Technologies, Inc. | Systems and methods for entry point-based code analysis and transformation |
US10528343B2 (en) | 2018-02-06 | 2020-01-07 | Smartshift Technologies, Inc. | Systems and methods for code analysis heat map interfaces |
US10740075B2 (en) * | 2018-02-06 | 2020-08-11 | Smartshift Technologies, Inc. | Systems and methods for code clustering analysis and transformation |
US10834206B2 (en) * | 2018-02-27 | 2020-11-10 | Excelfore Corporation | Broker-based bus protocol and multi-client architecture |
US10853183B2 (en) | 2018-04-27 | 2020-12-01 | EMC IP Holding Company LLC | Serverless application operational recovery and manifest creation |
CN109582344A (zh) * | 2018-11-27 | 2019-04-05 | 北京车和家信息技术有限公司 | 增量更新方法、装置、云服务器及计算机可读存储介质 |
KR20220028879A (ko) * | 2020-08-31 | 2022-03-08 | 현대자동차주식회사 | 차량의 ecu 업데이트 관리 장치 및 그 방법 |
DE102021201212A1 (de) * | 2021-02-09 | 2022-08-11 | Robert Bosch Gesellschaft mit beschränkter Haftung | Verfahren zum Steuern einer Mehrzahl an Fahrfunktionen in einem automatisierten oder autonomen Fahrzeug |
US11789421B2 (en) * | 2021-08-19 | 2023-10-17 | Rockwell Automation Technologies, Inc. | Efficient client updates using patience difference algorithm in a unidirectional data flow architecture for industrial automation design |
US20230115149A1 (en) * | 2021-09-24 | 2023-04-13 | Insitro, Inc. | System, devices and/or processes for updating call graphs |
CN114139189B (zh) * | 2021-12-08 | 2023-03-24 | 广西民族大学 | 一种基于互模拟等价的数据安全处理方法和装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1992016905A1 (en) * | 1991-03-18 | 1992-10-01 | Echelon Corporation | Programming language structures for use in a network for communicating, sensing and controlling information |
US7020850B2 (en) * | 2001-05-02 | 2006-03-28 | The Mathworks, Inc. | Event-based temporal logic |
JP4302970B2 (ja) * | 2002-12-16 | 2009-07-29 | 富士通株式会社 | 差分更新方法、プログラム及び装置 |
US8468516B1 (en) * | 2008-12-19 | 2013-06-18 | Juniper Networks, Inc. | Creating hot patches for embedded systems |
JP5297848B2 (ja) | 2009-03-18 | 2013-09-25 | 株式会社日立ソリューションズ | プログラム動的更新システム、管理サーバ、組込み機器及びプログラム |
JP5893954B2 (ja) * | 2012-02-24 | 2016-03-23 | ルネサスエレクトロニクス株式会社 | 等価性検証方法、等価性検証プログラム及び等価性検証装置 |
US9910660B2 (en) | 2013-08-05 | 2018-03-06 | Harman International Industries, Incorporated | Operating system replacement for in-vehicle computing system |
-
2016
- 2016-09-23 JP JP2016185274A patent/JP6637398B2/ja active Active
-
2017
- 2017-07-21 US US15/656,893 patent/US10642607B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US10642607B2 (en) | 2020-05-05 |
JP2018049506A (ja) | 2018-03-29 |
US20180088936A1 (en) | 2018-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6637398B2 (ja) | 判定装置及び判定方法 | |
JP7090657B2 (ja) | アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体 | |
US8954939B2 (en) | Extending a development environment | |
US6427234B1 (en) | System and method for performing selective dynamic compilation using run-time information | |
US11579852B2 (en) | Device profiling in GPU accelerators by using host-device coordination | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
Blom et al. | Correct program parallelisations | |
CN107408054B (zh) | 设备中的流控制的方法和计算机可读介质 | |
Liu et al. | Exploring missed optimizations in webassembly optimizers | |
JP6481515B2 (ja) | 情報処理装置、コンパイル方法、及びコンパイラプログラム | |
Cousot | Syntactic and semantic soundness of structural dataflow analysis | |
Larus et al. | Using tracing and dynamic slicing to tune compilers | |
CN112199110B (zh) | 一种免重启运维升级方法、***、装置和介质 | |
Sewell et al. | Cakes that bake cakes: Dynamic computation in CakeML | |
CN111796832B (zh) | 热补丁文件生成方法、装置、设备及存储介质 | |
Doerfert et al. | Polyhedral expression propagation | |
Weidendorfer et al. | The case for binary rewriting at runtime for efficient implementation of high-level programming models in HPC | |
Mpeis et al. | Iterative compilation on mobile devices | |
Campbell et al. | Improving the GP 2 compiler | |
Zhang et al. | Towards re-engineering legacy systems for assured dynamic adaptation | |
Li et al. | Compiler-based multiple instruction retry | |
van der Spek et al. | Automatic restructuring of linked data structures | |
Hashimoto | A method of safety analysis for runtime code update | |
JP2002082811A (ja) | コンパイル方法および記録媒体 | |
Dolev et al. | Self-stabilization preserving compiler |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190207 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20191127 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20191210 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20191220 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6637398 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |