JP2021533487A - 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法 - Google Patents

障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法 Download PDF

Info

Publication number
JP2021533487A
JP2021533487A JP2021506002A JP2021506002A JP2021533487A JP 2021533487 A JP2021533487 A JP 2021533487A JP 2021506002 A JP2021506002 A JP 2021506002A JP 2021506002 A JP2021506002 A JP 2021506002A JP 2021533487 A JP2021533487 A JP 2021533487A
Authority
JP
Japan
Prior art keywords
program
instrumentation
execution
extension
instruction
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.)
Granted
Application number
JP2021506002A
Other languages
English (en)
Other versions
JP7047969B2 (ja
Inventor
ゴパラクリシュナン アイアー
アミア キャシャニー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Publication of JP2021533487A publication Critical patent/JP2021533487A/ja
Application granted granted Critical
Publication of JP7047969B2 publication Critical patent/JP7047969B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1487Generic software techniques for error detection or fault masking using N-version programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3055Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3616Software analysis for verifying properties of programs using software metrics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

この明細書に記載されるシステム、方法、および他の実施形態は、プログラム障害の検出の改善に関する。一実施形態では、方法は、拡張プログラムおよび計装プログラムを並列に実行することを含む。計装プログラムは、ランタイムチェックを実施するベースラインプログラムの計装バージョンである。拡張プログラムは、実行時間を計装プログラムと一致させるために、ベースラインプログラムのソースコードに意図的な遅延が挿入された、ベースラインプログラムの拡張バージョンである。この方法は、拡張プログラムと計装プログラムとの間の不一致状態の発生を識別するために、計装プログラムの実行状態を監視することを含む。この方法は、関連するデバイスの機能に対するプログラム障害の影響を軽減するために、不一致状態を管理することを含む。

Description

関連出願の相互参照
この出願は、2018年10月18日に出願された米国特許出願第16/164,042号の利益を主張する。上記出願の全開示が、参照によりこの明細書に組み込まれる。
この明細書に記載される主題は、一般に、障害に対するプログラムの回復力を向上させるためのシステムおよび方法、特に、プログラムの別個のバージョンを並列に実行し、プログラム間の不一致状態にしたがって障害を検出するためのシステムおよび方法に関する。
この欄は、必ずしも公知技術に該当しない、本開示に関連する背景情報を提供する。
プログラムが、たとえば、フォーマット、セキュリティ、性能などに関して、様々な規格に適合していることを保証することは、特にプログラムが比較的複雑な場合には、かなりの困難を伴うことがある。言及された規格は、障害/エラー保護プログラムを提供するための業界のベストプラクティス、および/または、特定の実施形態のために確立された安全/信頼性基準に関連する。一般に、開発者は、言及された規格への適合を容易にするために様々なチェックを実行する計装をプログラム内に含めることができる。様々なランタイムチェックは、プログラムの実行中に実行され、ネイティブ(たとえば、プログラムのバグ)および/又は外部の困難(たとえば、悪意のある攻撃)から保護し、それによって、プログラムの障害/故障からの保護を提供する。
しかし、たとえば適切にコード化されていない場合には、計装自体が問題の原因となることがある。その結果、プログラムフローの完全性などの計装によって提供される機能が適切に機能しない場合があり、セキュリティホール、計装自体に直接起因する障害などの問題がさらに発生する虞がある。
この欄は、開示の概要を提供するが、その全範囲またはその全特徴の包括的な開示ではない。
一実施形態では、プログラムの耐障害性(フォールトトレランス)の改善に関連する例示的なシステムおよび方法が開示されている。前述したように、プログラムを計装するプロセスは、プログラムの開発に複雑さをもたらし、その結果、潜在的に計装されていないソースコード、潜在的な障害/エラーをプログラムに追加する計装、および/または、一般に所望の機能を達成しない計装コードが発生する可能性がある。プログラム内でランタイムチェックを提供する際のこのような問題は、機能安全規格(たとえば、ISO26262)への適合をさらに複雑にしてしまう。
したがって、一実施形態では、障害状態の発生を識別するためにプログラムの非計装バージョンを並列に実行することによって、計装プログラムの実行を能動的に監視する監視制御システムが開示される。たとえば、ひとつのアプローチでは、開示された監視制御システムは、最初に、ベースラインプログラムを直接計装することによって、または、別のソースからプログラムの計装バージョンを受信することによって、計装プログラムを取得する。いずれの場合も、計装プログラムは、様々な機能安全規格への適合を達成するための、または、より一般には、様々なリスクに対する保護を提供するためのランタイムチェックを実施するための計装を含むベースラインプログラムの計装バージョンを表す。
さらに、監視制御システムは拡張プログラムを取得する。監視制御システムは、拡張プログラムを直接生成してもよいし、計装プログラムと同様に、二次ソースから拡張プログラムを取得してもよい。いずれの場合も、拡張プログラムは、計装プログラムと実質的に同一のタイムライン上で実行されるように調整されたベースラインプログラムのバージョンである。一実施形態では、監視制御システムは、計装プログラムを分析して、計装などの別個のステートメントに関連付けられた実行サイクルを識別する。監視制御システムは、ひとつのアプローチでは、実行サイクルのカウントを使用して、計装がいつどこで実行されているか、および、どのサイクルが計装に起因するかを決定する。
実行サイクルカウントの知識を用いて、監視制御システムは、一態様において、ベースラインプログラムにNo−Op命令を追加し、ベースラインプログラムの別個のバージョンとして拡張プログラムを生成する。示されているように、拡張プログラムは計装を含まないが、拡張プログラムに追加されたNo−Op命令のために、ほぼ同じサイクルカウントで実行される。そのため、拡張プログラムと計装プログラムは、同じタスクを実行するときにほぼ同じ実行時間を消費する。
したがって、一実施形態では、監視制御システムは、計装プログラムと拡張プログラムとを並列に実行する。ひとつのアプローチでは、プログラムはファームウェアとして別個のコントローラに埋め込まれるため、監視制御システムは別個のコントローラでプログラムを並列に実行する。別のアプローチでは、監視制御システムは、仮想マシン上で拡張プログラムを実行しながら、計装プログラムをコントローラ上の組み込みファームウェアとして実行する。いずれの場合も、拡張プログラムにはNo−Op命令が組み込まれているため、プログラムはロックステップで実行される。
したがって、監視制御システムは、両方のプログラムの実行を監視して、プログラムの障害を識別する。すなわち、監視制御システムは、計装プログラムを監視するための比較ポイントとして拡張プログラムを使用する。拡張プログラムは、様々なプログラム障害をもたらす可能性のある計装を含まないため、ふたつのプログラム間で共有される入力値、中間値、出力値、および、その他の態様の不一致は、計装プログラムの潜在的または実現された障害を示すものと考えられる。したがって、監視制御システムは、一実施形態では、様々な値を監視し、その値を比較してふたつのプログラム間の不一致の実行状態を識別することにより、プログラムの実行を監視する。
一般に、不一致状態の発生は、何らかのエラー、悪意のある攻撃、または他の異常が進行中であり、それがプログラムの障害を引き起こす可能性があるという推論を提供する。したがって、プログラムは、たとえば車両または他のデバイスのいくつかの安全関連の態様を制御するように動作している場合があるため、そのような障害の発生は、望ましくない傷害または他の困難をもたらす可能性がある。したがって、監視制御システムは、ひとつのアプローチにおいて、プログラムを実行するコントローラをリセットすることによって、不一致状態を管理する。その結果、監視制御システムは不一致状態を修正し、プログラムの障害を回避する。このようにして、監視制御システムは、計装プログラムの実行状態をよりよく認識することによってプログラムの機能を改善し、その結果、障害/エラーに対するプログラムの回復力を改善する。
一実施形態では、プログラム障害の検出を改善するための監視制御システムが開示される。監視制御システムは、ひとつ以上のプロセッサと、ひとつ以上のプロセッサに通信可能に結合されたメモリとを含む。メモリは、ひとつ以上のプロセッサによって実行されると、ひとつ以上のプロセッサに拡張プログラムおよび計装プログラムを並列に実行させる命令を含む実行モジュールを格納する。計装プログラムは、ランタイムチェックを実施するベースラインプログラムの計装バージョンである。拡張プログラムは、計装プログラムと実行時間が一致するように、ベースラインプログラムのソースコードに意図的な遅延が挿入されたベースラインプログラムの拡張バージョンである。メモリは、ひとつ以上のプロセッサによって実行されると、ひとつ以上のプロセッサに拡張プログラムと計装プログラムとの間の不一致状態の発生を識別するために計装プログラムの実行状態を監視させる命令を含むウォッチドッグモジュールを格納する。ウォッチドッグモジュールは、関連デバイスの機能に対するプログラム障害の影響を軽減するために、不一致状態を管理させる命令を含む。
一実施形態では、プログラム障害の検出を改善するための非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、ひとつ以上のプロセッサによって実行されると、ひとつ以上のプロセッサに、開示された機能を実行させる命令を格納する。命令は、拡張プログラムと計装プログラムとを並列に実行するための命令を含む。計装プログラムは、ランタイムチェックを実施するベースラインプログラムの計装バージョンである。拡張プログラムは、計装プログラムと実行時間が一致するように、ベースラインプログラムのソースコードに意図的な遅延が挿入されたベースラインプログラムの拡張バージョンである。命令は、拡張プログラムと計装プログラムとの間の不一致状態の発生を識別するために、計装プログラムの実行状態を監視する命令を含む。命令に、関連デバイスの機能に対するプログラム障害の影響を軽減するために、不一致状態を管理する命令を含む。
一実施形態では、プログラム障害の検出を改善するための方法が開示される。この方法は、拡張プログラムと計装プログラムとを並列に実行することを含む。計装プログラムは、ランタイムチェックを実施するベースラインプログラムの計装バージョンである。拡張プログラムは、計装プログラムと実行時間が一致するように、ベースラインプログラムのソースコードに意図的な遅延が挿入されたベースラインプログラムの拡張バージョンである。この方法は、拡張プログラムと計装プログラムとの間の不一致状態の発生を識別するために、計装プログラムの実行状態を監視することを含む。この方法は、関連デバイスの機能に対するプログラム障害の影響を軽減するために、不一致状態を管理することを含む。
この明細書に組み込まれ、その一部を構成する添付図面は、本開示の様々なシステム、方法、および他の実施形態を示している。図中の図示された要素の境界(たとえば、ボックス、ボックスのグループ、または他の形状)は、境界の一実施形態を表すことが理解されるであろう。いくつかの実施形態では、ひとつの要素が複数の要素として設計されてもよく、または複数の要素がひとつの要素として設計されてもよい。いくつかの実施形態では、別の要素の内部コンポーネントとして示される要素は、外部コンポーネントとして実装されてもよく、その逆もあり得る。さらに、要素は縮尺どおりに描かれない場合がある。
計装プログラムにおけるプログラム障害の耐性の改善に関連する監視制御システムの一実施形態を示す。 プログラムのソースコードの一例を示す。 図1のシステムが図2のソースコードから導出する制御フローグラフの一例を示す。 拡張プログラムおよび計装プログラムが実行される実行環境の一実施形態を示す。 ソースコードを自動的に計装することに関連する方法の一実施形態を示す。 計装プログラムの実行を監視することに関連する方法の一実施形態を示す。
プログラムの障害処理の改善に関連するシステム、方法、および他の実施形態が開示されている。前述したように、プログラムを計装するための現在のアプローチは、複雑であることがあり、その結果、プログラムに潜在的な障害/エラーを実際に追加する計装、および/または、一般に所望の機能を達成しない計装コードをもたらす。プログラム内でランタイムチェックを提供する際のこのような問題は、プログラムの信頼性および最終的な認証をさらに複雑にする可能性がある。
したがって、一実施形態では、並列に実行されるプログラムの非計装拡張バージョンの監視された比較を通じて、計装プログラムの実行を能動的に監視する監視制御システムが開示される。たとえば、ひとつのアプローチでは、開示された監視制御システムは、プログラム故障を検出し、管理するために、同じベースラインプログラムのふたつの異なるバージョンを使用する。監視制御システムは、プログラムの計装バージョンと、プログラムの非計装/拡張バージョンを使用する。計装バージョンは、ランタイムチェックを実施する計装を含むように変更されたベースラインプログラムを表す。ランタイムチェックは、プログラムフローの完全性、データの完全性、障害検出(たとえば、メモリの破損)などのチェックの実行など、プログラムをサポートする様々な機能を実行する。
拡張バージョンは、実行時間を調整するための追加命令を含むベースラインプログラムを表す。No−Op命令は、ベースラインプログラムに追加されて拡張プログラムを形成し、実行時間(すなわち、サイクルカウント)を拡張して、計装プログラムと実行時間をほぼ一致させる。したがって、一実施形態では、監視制御システムは、計装プログラムと拡張プログラムを並列に実行する。ひとつのアプローチでは、プログラムは、別個のコントローラ内にファームウェアとして埋め込まれ、したがって、監視制御システムは、別個のコントローラ上のプログラムを並列に実行する。別のアプローチでは、監視制御システムは、仮想マシン上で拡張プログラムを実行しながら、計装プログラムをコントローラ(たとえば、ECU)に組み込まれたファームウェアとして実行する。いずれの場合も、計装プログラムの実行時間と一致する拡張プログラムに埋め込まれたNo−Op命令のために、プログラムはロックステップで実行される。
したがって、監視制御システムは、プログラムの実行を監視して、プログラム障害を識別する。すなわち、監視制御システムは、計装プログラムを監視するための比較ポイントとして拡張プログラムを使用する。拡張プログラムには、様々なプログラム障害を引き起こす可能性のある計装が含まれていないため、拡張プログラムの値は、たとえば、計装に関連した障害/エラーを含まないものとして、信頼性がより高くなる。したがって、ふたつのプログラム間で入力値、中間値、出力値、およびその他のそのような値に相違が生じる場合、監視制御システムは、相違/不一致が、計装プログラムの潜在的または実現された障害を示すものみなすことができる。
したがって、監視制御システムは、一実施形態では、様々な値を監視し、値を比較して、プログラム間の不一致の実行状態を識別することにより、プログラムの実行を監視する。一般に、不一致状態の発生は、何らかのエラー、悪意のある攻撃、または他の異常が進行中であり、それがプログラムの障害を引き起こす可能性があるという推論を提供する。したがって、監視制御システムは、ひとつのアプローチでプログラムをリセットすることにより、不一致状態を管理する。その結果、監視制御システムは、不一致状態を修正し、プログラム障害を回避する。このように、監視制御システムは、実行状態をよりよく認識することにより計装プログラムの機能を改善し、その結果、障害/エラーに対するプログラムの回復力を改善する。
図1を参照すると、監視制御システム100の一実施形態が示されている。この明細書では、監視制御システム100に関する構成について説明するが、実施形態は、図示のような単一システムに限定されない。いくつかの実装形態では、監視制御システム100は、クラウドコンピューティングシステム、クラスタコンピューティングシステム、分散コンピューティングシステム、サービスとしてのSaaSシステムなどとして具現化することができる。SaaSは、software as a serviceの略称である。監視制御システム100は、説明の目的で単一のデバイス(装置)として示され、説明されているが、開示された構成要素が構成され得る全体的な可能な構成を制限するものとして解釈されるべきではない。たとえば、別個のモジュール、メモリ、データベースなどは、様々な組み合わせで様々なコンピューティングシステムに分散されてもよい。
監視制御システム100は、また、様々な要素を含む。様々な実施形態では、監視制御システム100が、図1に示される要素のすべてを有さなくてもよいことが理解される。監視制御システム100は、図1に示される様々な要素の任意の組み合わせを有することができる。さらに、監視制御システム100は、図1に示される様々な要素に対して追加の要素を有することができる。いくつかの構成では、監視制御システム100は、図1に示されるひとつ以上の要素なしで実施されてもよい。さらに、様々な要素は、図1の監視制御システム100内に位置するものとして示されているが、これらの要素のうちのひとつ以上が監視制御システム100の外部に配置できることが理解される。さらに、示された要素は、長い距離で物理的に分離されてもよい。
さらに、図示の単純化および明確化のために、参照番号が適宜、対応するまたは類似する要素を示すために、異なる図面間で繰り返されていることが理解される。さらに、この明細書に記載の実施形態の完全な理解を提供するために、多数の具体的な内容を説明する。しかしながら、当業であれば、この明細書に記載された実施形態は、これらの要素の様々な組み合わせを用いて実施され得ることを理解できる。
いずれの場合も、監視制御システム100は、プログラムに関連する障害検出および処理の改善に関して、この明細書に開示されているような方法、および、他の機能を実行するために実装される。言及された機能と方法は、図のさらなる説明でより明らかになる。さらに、監視制御システム100は、プロセッサ110を備えるものとして示されている。様々な実施形態において、プロセッサ110は、監視制御システム100の一部であってもよく、監視制御システム100は、データバス、または、別の通信経路を介してプロセッサ110にアクセスしてもよく、プロセッサ110は、監視制御システム100によってアクセス可能なリモートコンピューティングリソースであってもよい。いずれの場合も、プロセッサ110は、マイクロプロセッサ、ASIC、グラフィックス処理装置(GPU)、電子制御装置(ECU)、または、他の電子デバイスの制御のために使用され得る様々な電子出力をそこから生成するための機械可読命令を実行することが可能な他のコンピューティングコンポーネント、のような電子デバイスである。
一実施形態では、監視制御システム100は、実行モジュール130と、ウォッチドッグモジュール140と、計装モジュール150を格納するメモリ120を備える。実行モジュール130、ウォッチドッグモジュール140、および計装モジュール150を、モジュール130、140、150と示すことがある。メモリ120は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、ハードディスクドライブ、フラッシュメモリ、または、モジュール130、140、150を格納するための他の適切なメモリである。モジュール130、140、150は、たとえば、プロセッサ110によって実行されると、プロセッサ110に、この明細書に開示される様々な機能を実行させるコンピュータ可読命令である。様々な実施形態では、モジュール130、140、150は、ハードウェアロジック、ASIC、グラフィックス処理装置(GPU)、プロセッサ110のコンポーネント、電子メモリ内に埋め込まれた命令などを含むことができるが、これらに限定されない様々な形態で実装され得る。
監視制御システム100は、一実施形態では、データベース160を備える。データベース160は、一実施形態では、メモリ120、分散メモリ、クラウドベースのメモリ、または、別のデータストアに格納された電子データ構造であり、格納されたデータの分析、格納されたデータの提供、格納されたデータの整理などのためにプロセッサ110によって実行され得るルーチンで構成される。一実施形態では、データベース160は、様々な決定を実行する際にモジュール130、140、150によって使用されるデータを格納する。一実施形態では、データベース160は、制御フローグラフ、計装ポリシー、ベースラインプログラム、拡張プログラム170、計装プログラム180、および/または、開示された機能を実行する際にモジュール130、140、150によって使用され得る他のデータを格納する。
この明細書で使用される場合、「プログラム」という用語は、ソースコードから派生したコンパイルされたマシンコードを指す。したがって、ベースラインプログラムは、一実施形態では、マシンコードであるコンパイルされたプログラムまたはその一部である。この明細書で使用される「マシンコード」という語句は、一般に、たとえばプロセッサ110のような、マイクロプロセッサによって実行され得る機械語命令で表されるプログラムを指す。さらに、マシンコードは、一般に、関連するハードウェアによって実装された命令セットによって定義されるオペコード(たとえば、No−Op命令)で構成されるプリミティブ言語、または、ハードウェア依存言語であると理解される。No−Opは、No−Operationの略称である。さらに、マシンコード自体は、データ値、レジスタアドレス、メモリアドレスなどでさらに構成される。もちろん、プログラムはマシンコードであると説明されているが、さらなる実施形態では、プログラムは、アセンブリコード、または、ソースコードの別の中間表現である。
プログラムのコンパイル元のソースコードは、たとえば、関数、データ構造、オブジェクト、ステートメント(文)などで構成される。ソースコードの一部として含まれる計装は、さらに同じ要素(たとえば、オブジェクト、ステートメントなど)で構成される。一般に、プログラムは、関数のセット(集まり)として構成されている。様々な例では、関数は、サブ関数として相互にネスト(入れ子)になっている場合がある。さらに、関数は、一般に、ステートメントのセット(たとえば、ループ、I/Oステートメントなど)で構成され、通常は特定の機能に焦点を当てている。すなわち、個々の関数は、一般に、識別のタスクを実行するために実装される。したがって、サブ関数は、親関数のより広範な機能をサポートするサブルーチンを実装することができる。いずれの場合も、関数は、関数自体を構成するステートメントを定義し、関数に関連付けられた機能を実装するためのソースコードが含まれる。
ひとつのアプローチでは、モジュール130、140、150は、たとえば、統合開発環境(IDE)に電子的に提供されるコードセグメントを含む電子的な入力および出力ストリームを含むIDEの電子データにアクセスする。モジュール130、140、150は、アクセスを容易にするために、IDEのアプリケーションプログラムインターフェース(API)を活用してもよい。さらに、そのようなアクセスは、モジュール130、140、150によるアクセスを自動化する(たとえば、直接統合アクセスを提供する)アプリケーションフックの形で提供されてもよい。いずれの場合も、システム100、および、モジュール130、140、150は、たとえば、計装プログラム180の実行時間の分析、計装プログラム180の生成、拡張プログラム170の生成などを行うために、IDEと協調的に機能することができる。
データベース160の要素に続いて、拡張プログラム170および計装プログラム180は、データベース160に格納されているものとして示されている。もちろん、アプリケーションでは、拡張プログラム170および計装プログラム180は、実行されると、それぞれのコントローラ(図示せず)のメモリに埋め込まれる。しかしながら、図1に示されるように、説明の便宜上、プログラム170および180は、データベース160に格納されている。さらに、一実施形態では、監視制御システム100は、最初に、拡張プログラム170および計装プログラム180を、データベース160などのローカルメモリ/データストアから格納および分析する。すなわち、後でより詳細に説明するように、一実施形態では、監視制御システム100は、計装プログラム180を生成するためにベースラインプログラムを計装するように構成される。さらに、監視制御システム100はまた、拡張プログラム170を、計装プログラム180に関連する態様にしたがって生成することができる。
たとえば、一実施形態では、データベース160は、ベースラインプログラムを計装し、計装プログラム180を生成するために計装モジュール150によって使用されるグラフを格納する。グラフは、たとえば、ベースラインプログラムの実行パスを表す制御フローグラフである。一実施形態では、計装モジュール150は、ベースラインプログラムのソースコードからグラフを導出する。計装モジュール150は、ひとつのアプローチでは、ノードおよびノード間の有向エッジを使用してグラフを形成する。
ノードはソースコードのブロック/セグメントを表し、ノード間の有向エッジはブロック間の遷移(ジャンプ)を表す。ブロックは、コードの原子セグメント(たとえば、途切れのない)、または、ソースコードの少なくとも一体的に関連するセグメントである。一実施形態では、有向エッジは、ブロック/セグメント間の手順内、および/または、手順間の制御フロー転送を示す。すなわち、エッジは、ハンドオーバ、関数呼び出し、具象関数および/またはシンボリック関数の引数などを表す。一般に、有向エッジは、別個のブロック間のプログラム実行における転送を示す。別の実施形態では、ノードおよび有向エッジは、この明細書に記載されているものとは異なって定義されてもよいことが理解されたい。グラフポリシーは、ノードおよびエッジをそれぞれ形成するブロック/セグメントと遷移を識別するための、テンプレート、例示的なセグメント/条件、および/または、指標(メトリクス)を定義する。したがって、システム100は、別々の実装にしたがってグラフの態様を柔軟に定義するように実装することができる。
例として、図2は、プログラムのソースコード200のサンプルセグメントを示している。また、図3は、制御フローグラフ300の一例を示している。制御フローグラフ300は、実行モジュール130を介して提供される入力からグラフモジュールによって生成され得るグラフの例である。図示しないグラフモジュールは、メモリ120に格納されている。グラフ300は、ソースコード200からのコードのセグメント/ブロックに対応するノード305、310、315、320、325、330、335、340、345を含む。グラフ300は、ソースコード200のセグメント間の関係に対応するノード間の有向エッジをさらに示す。さらに、分離されたノードおよび有向エッジは、たとえば、ソースコードの制御フロー特性にしたがって定義される。すなわち、ソースコードのブロック/セグメントが相互に関連する方法、および、ブロック/セグメント間の区切り自体は、ソースコードの制御フロー特性に従って定義される。後述するように、計装モジュール150は、一般に、プログラムのソースコードから制御フロー特性を識別し、計装の包含に関する決定が導出されるグラフを形成するために、システム100内に定義されたグラフポリシーにしたがって識別することができる。
図1のデータベース160に続いて、一実施形態では、データベース160は、また、計装モジュール150が計装をソースコードに挿入して最終的に計装プログラム180を形成するためのソースコードの様々な条件、および/または、セグメントを定義する計装ポリシーを含む。一般に、計装は、特定の実装に応じて異なる目的を果たすことができる。たとえば、計装は、プログラムフローの制御(たとえば、プログラムが間違った方向に進んでいないことを保証する)、デバッグ、データ引数の検証、I/Oの検証などを提供するために、関数内に統合することができる。プログラムが、道路上で車両がどのように制御されるかを自動的に調整する高度運転支援システム(ADAS)を制御する場合、計装は、プログラムが悪意のある攻撃によって誤った方向に導かれた場合に、乗客に事故や負傷をもたらす可能性があるプログラムフローの悪意のある操作を防止するためのセキュリティ計装を含んでもよい(たとえば、プログラム制御フローの完全性を保証する)。
さらに、計装ポリシーは、ひとつのアプローチでは、計装自体に関連する特性と、計装モジュール150が拡張プログラムを生成するためにベースラインプログラムにNo−Op命令を含める方法に関連する特性を定義する。たとえば、計装ポリシーは、計装ポリシーで定義された様々なテンプレートに含まれる、様々な計装ステートメントのサイクルカウントを示す。したがって、プログラム内にカスタマイズして組み込むためのテンプレートの形で計装を指定するとともに、計装ポリシーは、計装によって消費される実行サイクル数などの計装の特性を示す。このように、後に拡張プログラム170を生成するとき、計装モジュール150は、ひとつのアプローチにおいて、計装ポリシーを参照して、計装に起因する実行サイクル、したがって、計装の実行時間を考慮して拡張プログラム170内に挿入する対応する数のNo−Op命令を決定する。
さらに別の態様では、計装ポリシーは、拡張プログラム170を生成するために、ベースラインプログラムがNo−Op命令によってどのように計装されるかを定義する。すなわち、計測ポリシーは、No−Op命令が挿入されるNo−Op命令の形式、および、実行時間に一致するようにNo−Op命令を使用して拡張プログラム170を形成するためのベースラインプログラムの計装に関する他の詳細を定義する。
さらに、計装ポリシーは、プログラムの計装方法に関連するさらなる態様を定義することもできる。したがって、一実施形態では、計装ポリシーは、計装閾値、または、少なくとも計装閾値を生成するための指標(メトリクス)を定義する。ひとつのアプローチでは、計装ポリシーは、関数の特性が計装で変更されるために関連する計装閾値を満たすように、異なるクラスの関数に対して計装閾値を定義する。たとえば、一実施形態では、計装ポリシーは、開発者によってタグ付けされるか、または、関数内のコードセグメントに関連付けられた定義された指標にしたがって導出され得るセキュリティレベルにしたがって、関数のクラスを定義する。したがって、計装ポリシーは、第1のクラスに対する第1の閾値、第2のクラスに対する第2の閾値、第3のクラスに対する第3の閾値などを示すことができる。一般に、セキュリティレベルのための別個のクラスおよび関連する閾値は、特定の機能の脆弱性(たとえば、操作への暴露)または他の態様に関連してもよい。したがって、計装ポリシーは、計装の包含を最適化するために、セグメントが計装されるべきである異なる閾値を示してもよい。実際には、計装モジュール150は、たとえば、コードセグメントを評価し、計装プログラム180を生成するために、評価にしたがって計装を自動的に含む。
さらに、コードセグメント内に含まれる実際の計装自体は、一実施形態では、計装ポリシー、または、前述したグラフポリシー内のテンプレートとして定義される。たとえば、テンプレートは、プログラムフローの制御、I/Oの検証、追加の関数フックの提供、障害処理の実行、データ整合性のチェックなどに関する様々な機能を実行する、標準化された計装のセットを定義する。さらに、ひとつのアプローチでは、テンプレートは、計装が含まれる特定のコードセグメントにしたがって、たとえば、計装モジュール150によりカスタマイズされる計装テンプレート内の変数をさらに示す。すなわち、計装モジュール150は、一例では、関数のリターンアドレスを検証するための計装を含んでもよい。このように、計装モジュール150は、テンプレートをベースとして使用することによって、関連するソースコードに対応するようにテンプレートから関連する計装ステートメントの変数を修正し、関連するソースコードセグメントにセキュリティまたは他の機能を提供する。計装ポリシーおよび計装モジュール150のさらなる態様については、後述する。
図1を続けると、計装モジュール150は、一実施形態では、プロセッサ110によって実行されると、たとえば計装プログラム180を形成するためにベースラインプログラムを自動的に計装する制御フローグラフをプロセッサに生成させるコンピュータ可読命令を含む。計装モジュール150は、ベースラインプログラムのソースコードの制御フロー特性を識別することによってグラフを形成する。すなわち、計装モジュール150は、ソースコードを(ソースコードが開発されるときにリアルタイムで、または要求に応じて)分析して、制御フロー特性を識別する。一実施形態では、制御フロー特性は、関数呼び出しなどのベースラインプログラムの手順内、および/または、手順間の制御フロー転送、たとえば、関数呼び出し、シンボリック名に沿ったリターンアドレス、具象関数および/またはシンボリック関数の引数および戻り値、呼び出し規約などを含む。より一般には、制御フロー特性は、グラフの形態、および/または、内容に影響を与える任意の態様に関連する。したがって、計装モジュール150は、計装モジュール150がグラフを更新された形式で維持できるように、一実施形態では、制御フロー特性を識別するために言及された監視および分析をリアルタイムで行う。
計装モジュール150は、一般に、ノードおよび有向エッジを表すためのプログラム要素を含む電子データ構造として、グラフを生成することに留意されたい。最初に、ひとつのアプローチでは、計装モジュール150は、ヌル値を含むグラフ、または、ソースコードが開発されるときに計装モジュール150が制御フローグラフを構築するための単なるエントリノードのみを生成する。このように、計装モジュール150は、グラフに対して調整/修正が行われると、グラフをリアルタイムで更新する。したがって、一実施形態では、計装モジュール150は、制御フロー特性を能動的に使用して、制御フローグラフを生成する。したがって、計装モジュール150は、ソースコードによって定義されるベースラインプログラムのリアルタイム評価を提供するために、修正/追加が発生するとグラフを区分的(断片的)に作成する。
さらに、計装モジュール150は、プロセッサによって実行されると、プロセッサ(たとえば、プロセッサ110)に、制御フローグラフにしたがってソースコード内に計装を統合させる命令を含む。たとえば、ひとつアプローチでは、計装モジュール150は、グラフによって参照されるように、ソースコードに計装を追加する。計装モジュール150は、一実施形態では、プログラムフローが保証される計装、および/または、計装がソースコードの特定のコードセグメントに関して別個の機能を提供する計装を含む。
前述したように、計装ポリシーは、ソースコードのどの態様(たとえば、計装の場所およびタイプを識別するための指標または他の条件を介して)を計装するかを識別するための様々なメカニズムを示す。様々な態様において、計装モジュール150に含まれる計装は、プログラムの実行が制御フローグラフにしたがうことを保証することによって、プログラム内でランタイムチェック(実行時チェック)を実施するためのものである。したがって、計装モジュール150は、一般に、プログラムフローを実施するための計装を含める方法を知るために、グラフを介して伝達されるプログラムフローの知識を使用する。さらに、計装モジュール150は、さらなる態様では、グラフを参照して、データフロー、危険な実行パスに沿った潜在的な障害状態、および、プログラム内に計装される他の態様を理解するために、グラフを参照する。このようにして、計装モジュール150は、計装プログラム180内のランタイムチェックを自動的に計装することにより、プログラムのセキュリティを向上する。さらに、計装モジュール150は、一実施形態では、アドレスチェック(たとえば、データおよびプログラムフローのためのメモリアドレス)、変数/関数の戻り値の型チェック、データバインドチェック、オペコードチェック、マッチコール−リターンペア(非単一クラス)など、を実行するための計装を含む。
いずれの構成においても、計装モジュール150は、ソースコードおよび制御フローグラフを分析して、計装をソースコード内に統合する。特に、計装モジュール150は、制御フローグラフとソースコードとの間の相関関係にしたがって計装されるべきソースコードのセグメント、たとえば、グラフ内の有向エッジによって識別されるソースコード内の手続き型遷移を識別する。さらに、計装モジュール150は、ソースコードにしたがってテンプレートの定義された計装をカスタマイズするために、定義された計装のテンプレートを修正することによって、識別(特定)されたセグメントにしたがって、計装を自動的に追加する。このようにして、定義された計装セットを、たとえば、追加された計装が要求どおりに動作することを保証するために、事前にテストして認定することができる。
さらに別の態様では、計装モジュール150は、ソースコードのタグ付け/ラベル付けされたセクションにしたがった計装を含む。たとえば、提供されるラベルは、制御フロー計装で計装されるべき高感度/高価値の関数を示すことができ、さらなる態様では、提供されるラベル/タグは、計装の特性を指定するものではなく、コードの一部が自動的に計装されるように計装モジュール150によって分析されるべきであることを単に示すものであってもよい。計装モジュール150は、ベースラインプログラムから計装プログラム180を自動的に生成するものとして説明されているが、もちろん、別のアプローチでは、計装プログラム180は二次ソースから取得され、したがって事前に計装される。さらに別の態様では、計装モジュール150は、他のセクションが先に含まれている間に、計装の少なくとも一部を計装プログラム180に追加する。
いずれの場合も、計装モジュール150は、様々なステートメントに関連する実行時間を決定するために、計装プログラム180を分析する命令を含む。最初の注記として、この明細書で使用される、サイクルカウント、実行時間、実行サイクル、および、他のそのような関連するフレーズはすべて、特定の命令または命令のセグメントによってプロセッサ、コントローラ、または、他の実行デバイス上で消費される時間の量を指す。一般に、プロセッサ/コントローラは、プロセッサ/コントローラ内で1秒間に実行される処理サイクル数を示す定義された周波数(たとえば、100MHz)で動作する。様々な命令が、プロセッサ/コントローラの命令キャッシュから実行され、その後リタイアされるために、異なる数のサイクルを使用することを理解されたい。ただし、別個の命令は、一般に、命令に関連する特定のタスク(たとえば、ADD、JUMP、STORE、LOAD、BRANCHなど)を実行するために使用されるサイクル数に関連して、プロセッサ/コントローラの帯域幅を消費する。したがって、一般的な問題として、別個の命令が、プログラムの全体的な実行時間に別個に寄与することがさらに理解されるべきである。
前述したように、計装ポリシーは、一実施形態では、サイクルカウントを、テンプレート内の計装の特定セグメントの特性として識別する。したがって、ひとつのアプローチでは、計装モジュール150が計装をプログラムに挿入すると、計装モジュール150は、計装が追加された(たとえば、プログラムフローに関連して)計装プログラム内の位置を、関連するサイクルカウントとともに追跡する。このようにして、計装モジュール150は、計装の個々のセグメントおよび計装が実行されるプログラムフロー内の相対的なポイントについて、予想される追加の実行時間を示すサイクルマッピングを開発する。一実施形態では、計装モジュール150は、計装プログラム内の異なる制御フローポイントで計装を直接参照し、サイクルカウントを示す手段を提供する方法として、制御フローグラフ内にサイクルマッピングを含む。
別の構成では、計装モジュール150は、試験環境で計装プログラム180を実行して、計装に関連する実行サイクルを追跡し、識別する。ひとつのアプローチでは、計装モジュール150は、計装プログラム180とベースラインプログラムとの比較を提供し、そこから、別個の計装命令に起因するプロセッサ/コントローラの実行時間を識別するために、テスト環境の一部としてベースラインプログラムを実行する。その結果、計装モジュール150は、計装に起因する実行時間の量を識別する。
いずれのアプローチが実行されても、計装モジュール150は、その後、実行時間を計装プログラム180と一致させるために拡張プログラム170を生成する。すなわち、計装プログラム180が実行されているとき、拡張プログラム170も、また、ベースラインプログラムに関連するプログラムフロー内の同一または類似のポイントで実行されている。計装プログラム180が計装ステートメントを実行している場合、拡張プログラム170は、No−Op命令を実行するように構成される。No−Op命令は、関連するハードウェア(たとえば、プロセッサまたはコントローラ)によって実装される命令であり、実行サイクルの間、ハードウェアが何もしないようにする。したがって、No−Op命令は、計装プログラム180において計装が実行されている間、拡張プログラム170における実行を効果的に遅延させる。
したがって、計装モジュール150は、拡張プログラム170の実行と計装プログラムの実行とが一致するような方法で、拡張プログラムを生成するために、ベースラインプログラムにNo−Op命令を挿入する。一実施形態では、計装モジュール150は、制御フローグラフ、および/または、サイクルマッピングを使用して、拡張プログラム170を生成するためにベースラインプログラムに挿入されるNo−Op命令の場所、数、および他の特性を決定する。したがって、実行モジュール130が計装プログラム180を拡張プログラム170と並列に実行する場合、ふたつのプログラムは、計装プログラム180が計装を実行しているときに、No−Op命令を実行に代入する拡張プログラムと同期して(ロックステップで)実行される。
したがって、一実施形態では、実行モジュール130は、計装プログラム180および拡張プログラムを並列に実行するように機能する命令を含む。一般に、実行モジュール130は、実行が同時かつ並列であることを保証するために、同時に実行を開始するようにプログラムを制御する。さらに、実行モジュール130は、一態様では、ふたつのプログラムの初期状態も一致させる。したがって、実行モジュール130は、ふたつのプログラムが同様に開始されることを確実にするために、ひとつ以上のメモリ位置を初期化して同じ値を格納することができる。
さらに、前述したように、計装プログラム180および拡張プログラム170は、たとえば、別個のコントローラ、コントローラと仮想マシンとの組み合わせ、または、ウォッチドッグモジュール140が実行を監視できるような別の適切な構成上で実行される。したがって、実行モジュール130は、プログラムがロックステップで(すなわち、ベースラインプログラムに対して同じポイントで一緒に並列に)実行されることを保証するために、コントローラを制御するか、さもなければアクセスすることができる。また、拡張プログラム170がマイクロプロセッサ上の仮想マシン上で実行される場合、実行モジュール130は、ふたつのプログラムの実行が一致するように、仮想マシンがコントローラと同様の特性(たとえば、同じクロック周波数)で構成されることを保証するために、仮想マシンおよび拡張プログラムを制御する。いずれにしても、実行モジュール130は、一般に、計装プログラム180および拡張プログラム170の実行環境の態様が対応していることを保証するように機能し、プログラムは、計装の有無を除いて実行が同一であることを保証するために、実質的に同じ状況内で実行することができる。
したがって、ウォッチドッグモジュール140は、一実施形態では、計装プログラム180および拡張プログラム170の実行を監視するように機能する命令を含む。一般に、ウォッチドッグモジュール140は、不一致または許容可能な既知の範囲外にある値について、プログラムの入力、出力、および内部状態を監視する。たとえば、図4に示すように、計装プログラム180および拡張プログラム170は、実行環境400内で実行される。実行環境400は、プログラム170および180が実行する特定の構成の表現であり、別個のコントローラ、同じコントローラ上の別個のプロセス、離散的なコントローラおよび離散的なプロセッサ上の仮想マシン、または、別の適切な構成を含むことができる。いずれの場合も、実行環境400は、ウォッチドッグモジュール140がプログラムの実行状態を取得するために各プログラムにアクセスできるように構成される。
したがって、ウォッチドッグモジュール140は、一実施形態では、API、実行環境400の構成、または、他の適切な手段を介して、実行状態(たとえば、内部値、入力、出力、メモリアドレスなど)にアクセスする。各プログラムの実行状態とは、プログラムの実行にともなって変化する変数の値を指す。したがって、一実施形態では、実行状態は、入力値、出力値、制御引数値、非制御引数値、プログラム内の中間計算値などの組み合わせを含む。監視される実行状態を形成する値は、特定の実施形態に応じて変化し得るが、一般に、プログラムの実行に関連する値の任意の組み合わせを含み得ることを理解されたい。
ウォッチドッグモジュール140は、一実施形態では、取得された実行状態を比較して、プログラム障害、エラー、または、他の異常が存在するか否かを判断する。ひとつのアプローチでは、ウォッチドッグモジュール140は、実行環境(たとえば、図4に示すような環境400)を介して、計装プログラム180および拡張プログラム170の内部値にアクセスする。そして、ウォッチドッグモジュール140は、たとえば、各実行サイクルにおいて実行状態を形成する値を比較する。
さらに、一態様では、ウォッチドッグモジュール140は、また、少なくとも計装プログラム180からの値を、値の可能な範囲のマップと比較して、値が合理的な範囲内にあるかどうかを決定する。すなわち、たとえば、ウォッチドッグモジュール140、および/または、実行モジュール130は、たとえば、記録された値の履歴に基づいて、異なる実行状態に対する値の範囲を決定する。この履歴を用いて、ウォッチドッグモジュール140は、値を分析し、それらが範囲内にあるか否かを判断する。
したがって、ウォッチドッグモジュール140が、プログラム間の実行状態が不一致である(すなわち、等しくない)、または、値が可能な値の範囲内(許容範囲内)にないと判断した場合、ウォッチドッグモジュール140は、不一致を管理する。ひとつのアプローチでは、ウォッチドッグモジュール140は、問題のあるプログラムのコントローラ(すなわち、計装プログラム180のコントローラ)をリセットすることにより、不一致を管理する。もちろん、リセットが発生すると、ふたつのプログラムが一致した状態で並列に実行され続けることを保証するために、拡張プログラムもリセットされる。さらなるアプローチでは、ウォッチドッグモジュール140は、プログラムをリセットするために、メモリ値(たとえば、入力、内部値、プログラムカウンタなど)をリセットする。このようにして、監視制御システム100は、プログラム障害の処理(取り扱い)を改善するために、計装プログラムを監視および管理する。
図5は、プログラムのソースコードを自動的に計装することに関連する方法500を示している。方法500は、図1の監視制御システム100の観点から説明される。方法500は、監視制御システム100と組み合わせて説明されるが、方法500は、監視制御システム100内で実施されることに限定されず、代わりに、方法500を実施することができるシステムの一例であることを理解されたい。
510で、計装モジュール150は、プログラムのソースコードに追加されるコードセグメントを監視し、定期的に検出する。この明細書で使用されるように、510におけるコードセグメントの追加は、一般に、新しいコードセグメントを追加すること、および、プログラムのソースコード内の既存のコードセグメントを修正することを指すことに留意されたい。さらに、制御フローグラフの生成およびプログラムの計装は、リアルタイムで発生するものとして説明されているが、さらなる態様では、これらの機能は、たとえば、プログラムが完了したとき、および/または、コンパイルの準備ができたときに生成される離散的な要求に応答して発生してもよい。
計装モジュール150は、ソースコードへの変更をともなう入力(たとえば、コード、コマンドなど)について、コンピューティングデバイス内の統合開発環境(IDE)への電子入力ストリームを監視する。したがって、計装モジュール150は、一実施形態では、ソースコードがいつ修正(すなわち、追加または変更)されるかを識別するために、APIを介してIDEへの入力ストリームを継続的に監視する。その結果、言及された修正、または、ソースコードを分析するための離散的な要求を検出すると、実行モジュール130は、ブロック520での制御フロー特性の識別に進む。
520で、計装モジュール150は、ソースコードの制御フロー特性を識別する。一実施形態では、計装モジュール150は、ソースコード内のステートメントをトラバース(走査)するために深さ優先探索を使用して、ベースラインプログラムのソースコードを分析する。さらなる態様では、計装モジュール150は、ソースコードをトラバースし、理解され得るような特性を識別するための他の適切なアプローチを実装する。計装モジュール150がソースコードをトラバースしているとき、計装モジュール150は、ソースコード内のステートメントを解析して、少なくとも関数呼び出し、関数リターンアドレス、具象関数またはシンボリック関数の引数、関数戻り値、および、ステートメント間の関係を制御フロー特性として識別する。
様々な実施形態では、実行モジュール130は、510で検出されたコードセグメント/変更に関連するソースコードの影響を受けた部分を分析し、さらなる態様では、計装モジュール150は、変更に応答して制御フロー特性を識別するために、ソースコード全体を再分析する。一般に、採用されるアプローチは、ソースコードの特性、システム100で定義されたプリファレンス(好み)、および、分析を実行するために利用可能なリソースに関連する。計装モジュール150によって実行されるいずれのアプローチであっても、制御フロー特性を抽出することは、グラフに表されるプログラムの手順内、および/または、手順間の制御フロー転送に関する情報を提供する。一実施形態では、さらなる態様は、非制御データ引数、障害ツリーなどのような制御フロー特性の一部として識別されてもよい。いずれの場合も、実行モジュール130は、グラフに含めるために、制御フロー特性内のプログラムフローに直接的および間接的に関連する態様を含むことができる。
530で、計装モジュール150は、制御フローグラフを更新する。一実施形態では、計装モジュール150は、グラフのノードおよび有向エッジを形成するために、520で識別される制御フロー特性を使用する。制御フローグラフは、一般に、ベースラインプログラムの実行パスを表し、したがって、計装モジュール150は、制御フロー特性を使用して、グラフが形成される異なるコードセグメント(たとえば、ノード)間のパス(たとえば、有向エッジ)を識別する。したがって、計装モジュール150は、コードセグメントに対応するように制御フローグラフの既存のノードおよびエッジを修正しながら、検出されたコードセグメントに対応する制御フロー特性を追加することにより、制御フローグラフを更新する。すなわち、たとえば、既存の有向エッジは、追加ノードを追加しながら再ルーティングされてもよく、既存のノードは修正されてもよく、指示された条件は修正されてもよく、または新たな条件が追加されてもよい。
540で、計装モジュール150は、ソースコードを計装する要求を監視し、検出する。様々な実施形態では、要求は、異なる形式をとることができる。たとえば、ひとつのアプローチでは、要求は、グラフが修正されるソースコードに対する修正と一致する。すなわち、ソースコードの修正に応じてグラフが更新されると、計装モジュール150は、また、追加されたコードセグメントまたは既存のコードセグメントに対する変更のために計装が含まれる場合、修正のためにリアルタイムでソースコードを計装するように機能する。あるいは、計装要求は、離散的な要求にしたがって、ソースコードが完了したとき、または、さらなる態様では、ソースコードがプログラムにコンパイルされるときに、システム100によって生成される。したがって、ソースコードの計装要求は、一実施形態では、IDE内で生成されたソースコードをコンパイルする要求に応答してシステム100によって生成され、コンパイルの前に実行される。
550で、計装モジュール150は、計装されるべきソースコードのコードセグメントを識別する。一実施形態では、計装モジュール150は、ソースコード内のセグメントに配置された既存のタグ、コードセグメントに関連付けられたグラフ内のラベル付けされた特性、制御フローグラフ内で表される識別された制御フロー、および/または、計装ポリシーによって定義されたさらなる指標/特性にしたがって、コードセグメントを識別する。一般に、計装モジュール150は、プログラムフローの完全性、データの完全性、および実行中のプログラムの他の態様、たとえば悪意のあるリダイレクトを防止することを含む、を確保するために、ソースコードを計装する。このように、計装モジュール150は、関数間の制御の転送、プログラムフローアドレスの調整、および、他のそのようなコードセグメントに関与するコードセグメントを識別する。一般に、言及されたコードセグメントは、グラフ内の有向エッジ、または、有向エッジによって具現化される転送に関連する条件に関連付けられる。
560で、計装モジュール150は、計装をベースラインプログラムのソースコード内に統合して、計装プログラム180を形成する。前述したように、一実施形態では、計装モジュール150は、様々な障害および/または攻撃に対するプログラムの回復力を向上させるプログラム内のランタイムチェックを実施するために、制御フローグラフにしたがった計装を含む。すなわち、ソースコードに追加される計装は、グラフで表される実行パスの外部にプログラムがリダイレクトされないこと、プログラムに関連付けられたデータが悪意を持って操作されないこと、などを保証する。
さらに、計装を統合するプロセスは、一実施形態では、計装を受け取るソースコード内のそれぞれの位置にしたがって、定義された計装のテンプレートを修正することにより、計装を自動的に追加する計装モジュール150を含む。前述したように、計装モジュール150は、計装が統合されているコードセグメントに適合するように、テンプレートの可変アスペクトを調整する。したがって、計装モジュール150は、特定の機能を達成するために、含まれる計装をカスタマイズする。このようにして、計装モジュール150は、制御フローグラフを使用して、安全なプログラムフローを保証することにより、最終的に得られるプログラムを改善する追加機能を提供する。しかしながら、追加された計装は、問題が発生する場合があり、プログラムの全体的な実行時間を増加させる。
このように、560での計装統合の一部として、計装モジュール150は、一実施形態では、計装プログラム180を形成するためにベースラインプログラムに追加された計装の位置および実行サイクルカウントを格納するサイクルマッピングを生成することにより、様々な計装命令の統合を追跡する。あるいは、計装モジュール150は、プログラム内の様々な実行ポイントで計装によって消費される可能性が高い実行サイクルについてのその後の分析/予測を提供するために、計装命令の少なくとも場所およびタイプを追跡する。このようにして、計装モジュール150は、前述したように、拡張プログラム170をその後に生成するための追加の手段を提供する。
図6は、プログラム内の潜在的な障害を識別し、処理することに関連する方法600を示している。図5同様、方法600は、図1の監視制御システム100の観点から説明される。方法600は、監視制御システム100と組み合わせて説明されるが、方法600は、監視制御システム100内で実施されることに限定されず、代わりに、方法600を実施することができるシステムの一例であることを理解されたい。
610で、実行モジュール130は、拡張プログラム170および計装プログラム180を並列に実行する。一実施形態では、実行モジュール130は、プログラム170および180を並列に実行するように制御する。すなわち、実行モジュール130は、たとえば、プログラム170および180がロックステップで実行されるように(すなわち、ベースラインプログラムに対して同じポイントで、命令のための命令(instruction for instruction))、プログラム170および180を同時に開始(起動)する。前述したように、拡張プログラム170は、拡張プログラム170が計装プログラム180と同じ数の実行サイクルを消費するように、遅延命令を含むように修正される。したがって、同時に開始され、同じ値のセットを使用する場合、プログラム170、180は、実行において互いに並列に実行される(すなわち、ベースラインプログラムからの同じ共有命令を同時に実行する)。
さらに、実行モジュール130は、別個のデバイス(装置)上でプログラム170および180の実行を制御することができる。すなわち、実行モジュール130は、一実施形態では、計装プログラムを実行するために電子制御ユニット(ECU)と、拡張プログラム170を実行するために仮想マシンを実行する別のECUまたはプロセッサ(たとえば、プロセッサ110)と、を制御する。いずれの構成においても、プログラム170および180は、同時にかつ並列に、実質的に同一の実行時間にしたがって実行される。
620で、ウォッチドッグモジュール140は、プログラム間の実行状態の不一致(ミスマッチ)を識別するために、610における並列実行を監視する。一実施形態では、ウォッチドッグモジュール140は、拡張プログラム170および計装プログラム180に関連付けられた入力値、中間値、および出力値を監視する。さらなる態様では、ウォッチドッグモジュール140は、また、値に対して定義された可能な範囲(所定の許容範囲)にしたがって、実行状態を形成する上記した値を監視する。すなわち、ウォッチドッグモジュール140は、たとえば、プログラムのテスト、検証された実行中のプログラムの追跡などを通じて、様々な実行状態についての期待される/可能な値の範囲を取得する。ウォッチドッグモジュール140は、値の範囲が導出されるこの監視から観測値の履歴ログを生成することができる。
さらに、ウォッチドッグモジュール140によるプログラム170および180の観測値の比較は、一般に、計装プログラム180の値が拡張プログラム170と一致しない場合を識別するために行われる。このような一致の欠如は、一般に、プログラム180の障害の発生、障害の開始、または、プログラム180の障害をもたらす可能性のある別の異常を示す。さらなる態様では、ウォッチドッグモジュール140は、定義された指標(メトリック)にしたがって比較を行うことができる。たとえば、ウォッチドッグモジュール140は、定義されたパーセンテージの変動を、実行状態内の同じ値とみなされるものとして受け入れることができる。パーセンテージは、提供された値に存在するエラー(誤差)または固有の変動のマージンにしたがって定義できる。
620において不一致を識別すると、630で、ウォッチドッグモジュール140は、関連するデバイス(たとえば、コントローラおよび関連するデバイス/システム)の機能に対する関連するプログラム障害の影響を軽減するように、不一致状態を管理する。一実施形態では、ウォッチドッグモジュール140は、プログラム180を実行しているコントローラをリセットすることによって不一致を管理する。一般に、コントローラをリセットすると、実行状態がリセットされ、プログラム障害が解決される。すなわち、リセットは、メモリから不一致状態を効果的にクリアし、プログラム170および180を再起動する。さらに、ウォッチドッグモジュール140は、さらなる実施形態では、後続の分析のために不一致の実行状態をログに記録する、プログラム170および180に関連付けられたメモリ位置をリセットする、および、プログラム180によって提供されるサービスが長期間中断されないようにプログラム170および180を再初期化するなどの追加のアクションを実行する。
さらに、ひとつ以上の実施形態では、監視制御システム100は、ISO26262などの機能安全規格にしたがって、プログラム170および180の並列実行および監視を実施することに留意されたい。
さらに、図1の監視制御システム100は、別個の集積回路、および/または、チップを用いて様々な構成によって構成できることが理解されるべきである。そのような実施形態では、図1の実行モジュール130は、別個の集積回路として具現化される。さらに、ウォッチドッグモジュール140は、個々の集積回路上に具現化される。さらに、計装モジュール150は、別個の集積回路上に具現化される。回路は接続パスを介して接続され、別個の回路間で信号を通信する。もちろん、別個の集積回路が論じられているが、様々な実施形態では、回路は、共通の集積回路基板に統合されてもよい。さらに、集積回路は、より少ない集積回路に組み合わせるか、またはより多くの集積回路に分割することができる。別の実施形態では、モジュール130、140、および150は、別個の特定用途向け集積回路に組み合わされてもよい。さらなる実施形態では、モジュール130、140、および150に関連する機能の一部は、プロセッサによって実行可能であり、非一時的メモリに格納されてもよい。さらなる実施形態では、モジュール130、140、および150は、プロセッサ110のハードウェアコンポーネントとして統合される。
別の実施形態では、説明された方法、および/または、それらの等価物は、コンピュータ実行可能命令で実装されてもよい。このように、一実施形態では、非一時的コンピュータ可読媒体は、機械(たとえば、プロセッサ、コンピュータなど)によって実行されると、機械(および/または、関連するコンポーネント)に方法を実行させる、コンピュータ実行可能命令を記憶した状態で構成される。

説明を簡単にするために、図に示されている方法論は一連のブロックとして示され説明されているが、いくつかのブロックは異なる順序で実行されることがあり、および/または、図示および説明から他のブロックと同時に実行されることがあり、方法論はブロックの順序によって制限されないことが理解されるべきである。さらに、例示的な方法論を実施するために、図示されたすべてのブロックよりも少ない数のブロックが使用されてもよい。ブロックは、複数のコンポーネントに結合、または、分離されることがある。さらに、追加の、および/または、代替の方法論は、図示されていない追加のブロックを使用することができる。
監視制御システム100は、ひとつ以上のプロセッサ110を含むことができる。ひとつ以上の構成では、プロセッサ110は、監視制御システム100のメインプロセッサであり得る。たとえば、プロセッサ110は、電子制御装置(ECU)であり得る。監視制御システム100は、ひとつ以上のタイプのデータを格納するためのひとつ以上のデータストアを含むことができる。データストアは、揮発性、および/または、不揮発性メモリを含むことができる。適切なデータストアの例には、RAM(ランダムアクセスメモリ)、フラッシュメモリ、ROM(リードオンリーメモリ)、PROM(プログラマブルリードオンリーメモリ)、EPROM(消去可能プログラマブルリードオンリーメモリ)、EEPROM(電気的消去可能プログラマブルリードオンリーメモリ)、レジスタ、磁気ディスク、光ディスク、ハードドライブ、分散メモリ、クラウドベースのメモリ、開示されたデータを格納するのに適した他の記憶媒体、または、それらの任意の組み合わせが含まれる。データストアは、プロセッサ110のコンポーネントとすることができ、またはデータストアは、使用のためプロセッサ110に動作可能に接続することができる。この説明全体を通して使用される「動作可能に接続された」という用語は、直接的な物理的接触のない接続を含む、直接または間接の接続を含みえる。
この明細書では詳細な実施形態が開示されている。しかしながら、開示された実施形態は、例としてのみ意図されていることが理解されるべきである。したがって、この明細書に開示される特定の構造的および機能的詳細は、限定事項として解釈されるべきではなく単に請求項の基礎として、および、実質的に任意の適切な詳細な構造でこの明細書の態様を様々に使用することを当業者に教示するための代表的な基礎としてのみ解釈されるべきである。さらに、この明細書で使用される用語および語句は、限定することを意図するものではなく、可能な実装の理解可能な説明を提供することを意図している。種々の実施形態が図1〜図6に示されているが、実施形態は、図示された構造または用途に限定されない。
図中のフローチャート、および、ブロック図は、様々な実施形態による、システム、方法、および、コンピュータプログラム製品の可能な実装のアーキテクチャ、機能、および、動作を示している。これに関して、フローチャート、または、ブロック図の各ブロックは、指定された論理機能を実装するためのひとつ以上の実行可能な命令を構成するコードのモジュール、セグメント、または、部分を表すことができる。また、一部の代替実装では、ブロックに記載されている機能が、図に記載されている順序とは異なる順序で発生する場があることにも注意されるべきである。たとえば、連続して示されたふたつのブロックは、実際には実質的に同時実行されてもよいし、関係する機能に応じて、ブロックが逆の順序で実行されてもよい。
上記のシステム、コンポーネント、および/または、プロセスは、ハードウェア、または、ハードウェアとソフトウェアの組み合わせで実現でき、ひとつの処理システムで集中方式によって、または、複数の相互接続された処理システムに異なる要素が分散している分散方式によって実現することができる。この明細書に記載の方法を実行するように適合されたあらゆる種類の処理システム、または、別の装置が適している。ハードウェアとソフトウェアの組み合わせは、コンピュータで使用可能なプログラムコードを備えた処理システムであり、読み込まれて実行されると、ここで説明する方法を実行するように処理システムを制御する。システム、コンポーネント、および/または、処理は、たとえば、機械によって読み取り可能であって、ここに記述された処理、および、方法を実行するために機械によって実行可能な指令のプログラムに実体的に実装された、コンピュータプログラム製品の記憶装置、または、他のデータプログラムの記憶装置として、コンピュータによって読み取り可能な記憶装置に埋め込むことができる。これらの要素は、この明細書に記載の方法の実施を可能にし、処理システムにロードされたときにこれらの方法を実行できるすべての機能を含むアプリケーション製品に組み込むこともできる。
さらに、この明細書で説明された構成は、たとえば記憶されるなどして、実施されるコンピュータ可読プログラムコードを有するひとつ以上のコンピュータ可読媒体に具現化されるコンピュータプログラム製品の形をとることができる。ひとつ以上のコンピュータ可読媒体の任意の組み合わせが利用されてもよい。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であり得る。「コンピュータ可読記憶媒体」という語句は、非一時的な記憶媒体を意味する。コンピュータ可読媒体は、限定されるものではないが、不揮発性媒体および揮発性媒体を含む、形態をとってもよい。不揮発性媒体には、たとえば、光ディスク、磁気ディスクなどが含まれる。揮発性媒体には、たとえば、半導体メモリ、ダイナミックメモリなどが含まれる。そのようなコンピュータ可読媒体の限定的ではない例には、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、および、その他の磁気媒体、または、ASIC、または、グラフィックス処理装置(GPU)のキャッシュまたは他のメモリ、CD、その他の光学媒体、RAM、ROM、メモリチップまたはメモリカード、メモリスティック、および、コンピュータ、プロセッサ、または、他の電子デバイスが読み取り可能な媒体があげられるが、これらに限定されない。この明細書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、機器、またはデバイス(装置)によって、またはそれに関連して使用するためのプログラムを含むか、または、記憶することができる任意の有形の媒体であり得る。
以下の説明は、この明細書で使用される選択された用語の定義を含んでいる。定義には、用語の範囲に含まれ、様々な実装に使用できるコンポーネントの様々な例や形式が含まれている。例は、制限することを意図したものではない。用語の単数形と複数形の両方が定義内にある場合がある。
「ひとつの実施形態」、「一実施形態」、「ひとつの例」、「一例」などへの言及は、そのように説明された実施形態、または、例が、特定の特徴、構造、特性、内部特性、要素、または、制限を含み得ることを示すが、それらの実施形態、または、例が、必須のものとして、特定の特徴、構造、特性、内部特性、要素、または、制限を含むことを示すものではない。さらに、「一実施形態では」という語句の繰り返しの使用は、同じ実施形態を指す場合があるが、必ずしもそうであるとは限らない。
この明細書で使用される「モジュール」は、コンピュータ、または、電気ハードウェアコンポーネント、ファームウェア、命令を格納する非一時的なコンピュータ可読媒体、および/または、これらのコンポーネントの組み合わせを含み、これらは、機能、または、アクションを実行するか、および/または、別のロジック、方法、および/または、システムに、機能、または、アクションを発揮させるように構成されている。モジュールは、アルゴリズムによって制御されるマイクロプロセッサ、多数の電気素子を含む論理回路(たとえば、ASIC)、アナログ回路、デジタル回路、プログラムされた論理デバイス、実行時にアルゴリズムを実行する命令を含むメモリデバイスなどを含むことができる。モジュールは、ひとつ以上の実施形態では、ひとつ以上のCMOSゲート、ゲートの組み合わせ、または他の回路構成要素を含む。複数のモジュールが説明される場合、ひとつ以上の実施形態は、複数のモジュールをひとつの物理モジュール構成要素に組み込むことを含む。同様に、単一のモジュールが説明される場合、ひとつ以上の実施形態は、複数の物理的構成要素に、単一のモジュールを分配することを含む。
さらに、この明細書で使用されるモジュールには、タスクを実行したりデータ型を実装したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらなる態様では、メモリは、一般に、言及されたモジュールを格納する。モジュールに関連付けられたメモリは、プロセッサ、RAM、ROM、フラッシュメモリ、または、別の適切な電子記憶媒体内に埋め込まれたバッファ、または、キャッシュである場合ある。さらに別の態様では、この開示によって想定されるモジュールは、特定用途向け集積回路(ASIC)、GPU、システムオンチップ(SoC)のハードウェアコンポーネント、プログラマブルロジックアレイ(PLA)、または、開示された機能を実行するための定義された構成セット(たとえば、命令)が組み込まれた別の適切なハードウェアコンポーネントとして実装される。
ひとつ以上の構成では、この明細書で説明されるひとつ以上のモジュールは、人工知能要素、または、計算知能要素、たとえば、ニューラルネットワーク、ファジーロジック、または、他の機械学習アルゴリズムを含むことができる。さらに、ひとつ以上の構成では、ひとつ以上のモジュールを、この明細書で説明する複数のモジュール間で分散させることできる。ひとつ以上の構成では、この明細書で説明されているふたつ以上のモジュールを組み合わせて単一のモジュールにすることができる。
コンピュータ可読媒体上で実施されるプログラムコードは、無線、有線、光ファイバ、ケーブル、RFなど、または、前述要素の任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して送信することができる。この構成の態様の動作を実行するためのコンピュータプログラムコードは、Java(登録商標)、Smalltalk、C++などのオブジェクト指向プログラミング言語、および、Cプログラミング言語、同様のプログラミング言語などを含む従来の手続き型プログラミング言語を含むひとつ以上のプログラミング言語の任意の組み合わせで書くことができる。プログラムコードは、完全にユーザのコンピュータにおいて、一部はユーザのコンピュータにおいて、スタンドアロンソフトウェアパッケージとして、一部はユーザのコンピュータにおいて、残る一部はリモートコンピュータにおいて、または、完全にリモートコンピュータ、または、サーバーで実行することができる。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)、または、ワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または接続は、外部コンピュータ(たとえば、インターネットサービスプロバイダを使用してインターネットを介して)に接続されてもよい。
この明細書で使用される要素の数は、ひとつ、または、ふたつ以上として定義される。この明細書で使用される「複数」という用語は、ふたつ、または、ふたつ以上として定義される。この明細書で使用される「別の」という用語は、少なくとも第2、または、それ以上として定義される。この明細書で使用される「含む」、および/または、「有する」という用語は、「備える」を意味し、すなわち、他の要素の存在を許容する用語として定義される。「・・・と・・・との少なくともひとつ」という表現は、関連付けて列挙された項目のひとつ、または、複数のありとあらゆる可能な組み合わせを指し、それらを包含するものとして解釈されるべきである。一例として、「A、B、および、Cのうちの少なくともひとつ」という語句は、Aのみ、Bのみ、Cのみ、またはそれらの任意の組み合わせ(たとえば、AB、AC、BC、または、ABC)を含む。
この明細書の態様は、その精神、または、本質的な属性から逸脱することなく、他の形態で具体化することができる。したがって、この明細書の範囲を示すために、前述の明細書ではなく、以下の特許請求の範囲を参照する必要がある。

Claims (20)

  1. プログラム障害の検出を改善するための監視制御システムであって、
    ひとつ以上のプロセッサ(110)と、
    ひとつ以上の前記プロセッサに通信可能に結合されたメモリ(120)と、
    前記メモリに格納された実行モジュール(130)およびウォッチドッグモジュール(140)と、を備え、
    前記実行モジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、拡張プログラムおよび計装プログラムを並列に実行させる命令を含み、
    前記計装プログラムは、ランタイムチェックを実施するベースラインプログラムの計装バージョンであり、
    前記拡張プログラムは、実行時間を前記計装プログラムと一致させるために前記ベースラインプログラムのソースコードに意図的な遅延が挿入された、前記ベースラインプログラムの拡張バージョンであり、
    前記ウォッチドッグモジュールは、ひとつ以上の前記プロセッサによって実行されると、ひとつ以上の前記プロセッサに、前記拡張プログラムと前記計装プログラムとの間の不一致状態の発生を識別するために、前記計装プログラムの実行状態を監視させる命令を含み、
    前記ウォッチドッグモジュールは、関連デバイスの機能に対するプログラム障害の影響を軽減するために、不一致状態を管理させる命令を含む、監視制御システム。
  2. 前記ウォッチドッグモジュールは、前記不一致状態を管理する命令として、前記拡張プログラムおよび前記計装プログラムが実行されている前記関連デバイスのコントローラをリセットする命令を含み、前記ウォッチドッグモジュールは、前記プログラム障害を解決するために前記実行状態をリセットすることによって前記コントローラをリセットする命令を含む、請求項1に記載の監視制御システム。
  3. 前記ウォッチドッグモジュールは、前記計装プログラムおよび前記拡張プログラムの実行状態を監視する命令として、前記拡張プログラムおよび前記計装プログラムの実行中に、前記拡張プログラムおよび前記計装プログラムに関連付けられた入力値、中間値、および出力値を監視する命令を含む、請求項1に記載の監視制御システム。
  4. 前記ウォッチドッグモジュールは、前記実行状態を監視する命令として、前記不一致状態として報告される差分を識別するために、前記拡張プログラムと前記計装プログラムとの間で前記入力値、前記中間値、および前記出力値を比較する命令を含む、請求項3に記載の監視制御システム。
  5. 前記ウォッチドッグモジュールは、前記実行状態を監視する命令として、前記不一致状態を識別するために、前記入力値、前記中間値、および前記出力値を、所定の許容範囲の値と比較する命令を含む、請求項3に記載の監視制御システム。
  6. 前記実行モジュールは、前記拡張プログラムおよび前記計装プログラムを並列に実行する命令として、前記拡張プログラムおよび前記計装プログラムを別々のデバイス上で実行する命令を含む、請求項1〜5のいずれか1項に記載の監視制御システム。
  7. 前記拡張プログラムは、前記計装プログラム内の計装によって消費される実行サイクルを説明するために、所定のサイクル数の間、前記関連デバイスが何もしないようにするNo−Op命令である意図的な遅延を含み、
    前記ランタイムチェックは、前記計装プログラムを作成するための前記ベースラインプログラムのソースコードに計装を含めることによって、前記計装プログラム内に実装され、
    前記ランタイムチェックは、前記計装プログラムに関連する少なくともメモリの破損を防止する、請求項1〜6のいずれか1項に記載の監視制御システム。
  8. 前記実行モジュールは、第1のコントローラ上で前記拡張プログラムを実行する命令と、第2のコントローラ上で前記計装プログラムを実行する命令とを含み、前記第1のコントローラおよび前記第2のコントローラは、前記関連デバイス内に埋め込まれている、請求項1〜5のいずれか1項に記載の監視制御システム。
  9. プログラム障害の検出を改善するための命令を格納する非一時的コンピュータ可読媒体であって、
    ひとつ以上のプロセッサ(110)によって実行されると、ひとつ以上の前記プロセッサに、
    拡張プログラムおよび計装プログラムを並列に実行させる命令と、
    前記拡張プログラムと前記計装プログラムとの間の不一致状態の発生を識別するために、前記計装プログラムの実行状態を監視させる命令と、
    関連デバイスの機能に対するプログラム障害の影響を軽減するために、前記不一致状態を管理させる命令と、を含み、
    前記計装プログラムは、ランタイムチェックを実施するベースラインプログラムの計装バージョンであり、前記拡張プログラムは、実行時間を計装プログラムと一致させるためにベースラインプログラムのソースコードに意図的な遅延が挿入された、前記ベースラインプログラムの拡張バージョンである、非一時的コンピュータ可読媒体。
  10. 前記不一致状態を管理する命令は、前記拡張プログラムおよび前記計装プログラムが実行されている前記関連デバイスのコントローラをリセットする命令を含み、
    前記コントローラをリセットする命令は、前記プログラム障害を解決するために前記実行状態をリセットする命令を含む、請求項9に記載の非一時的コンピュータ可読媒体。
  11. 前記計装プログラムおよび前記拡張プログラムの実行状態を監視する命令は、前記拡張プログラムおよび前記計装プログラムの実行中に、前記拡張プログラムおよび前記計装プログラムに関連付けられた入力値、中間値、および出力値を監視する命令を含む、請求項9に記載の非一時的コンピュータ可読媒体。
  12. 前記実行状態を監視する命令は、前記不一致状態として報告される差を識別するために、前記拡張プログラムと前記計装プログラムとの間の前記入力値、前記中間値、および前記出力値を比較する命令を含む、請求項11に記載の非一時的コンピュータ可読媒体。
  13. 前記拡張プログラムおよび前記計装プログラムを並列に実行する命令は、前記拡張プログラムおよび前記計装プログラムを別々のデバイス上で実行する命令を含む、請求項11に記載の非一時的コンピュータ可読媒体。
  14. プログラム障害の検出を改善するための方法であって、
    拡張プログラムおよび計装プログラムを並列に実行すること、
    前記拡張プログラムと前記計装プログラムとの間の不一致状態の発生を識別するために、前記計装プログラムの実行状態を監視すること、
    関連デバイスの機能に対するプログラム障害の影響を軽減するために、前記不一致状態を管理すること、を含み、
    前記計装プログラムは、ランタイムチェックを実施するベースラインプログラムの計装バージョンであり、前記拡張プログラムは、実行時間を計装プログラムと一致させるためにベースラインプログラムのソースコードに意図的な遅延が挿入された、前記ベースラインプログラムの拡張バージョンである、方法。
  15. 前記不一致状態を管理することは、前記拡張プログラムおよび前記計装プログラムが実行されている前記関連デバイスのコントローラをリセットすることを含み、
    前記コントローラをリセットすることは、前記プログラム障害を解決するために前記実行状態をリセットすることを含む、請求項14に記載の方法。
  16. 前記計装プログラムおよび前記拡張プログラムの実行状態を監視することは、前記拡張プログラムおよび前記計装プログラムに関連づけられた入力値、中間値、および出力値を監視することを含む、請求項14に記載の方法。
  17. 前記実行状態を監視することは、前記不一致状態として報告される差を識別するために、前記拡張プログラムと前記計装プログラムとの間の前記入力値、前記中間値、および前記出力値を比較することを含む、請求項16に記載の方法。
  18. 前記実行状態を監視することは、前記不一致状態を識別するために、前記入力値、前記中間値、および前記出力値を、所定の許容範囲の値と比較することを含む、請求項16に記載の方法。
  19. 前記拡張プログラムおよび前記計装プログラムを並列に実行することは、前記拡張プログラムおよび前記計装プログラムを別々のデバイス上で実行することを含む、請求項14に記載の方法。
  20. 前記拡張プログラムは、前記計装プログラム内の計装によって消費される実行サイクルを説明するために、所定のサイクル数の間、前記関連デバイスが何もしないようにするNo−Op命令である意図的な遅延を含み、
    前記ランタイムチェックは、前記計装プログラムを作成するための前記ベースラインプログラムのソースコードに計装を含めることによって、前記計装プログラム内に実装され、
    前記ランタイムチェックは、前記計装プログラムに関連する少なくともメモリの破損を防止する、請求項14〜19のいずれか1項に記載の方法。
JP2021506002A 2018-10-18 2019-10-18 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法 Active JP7047969B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/164,042 2018-10-18
US16/164,042 US10545850B1 (en) 2018-10-18 2018-10-18 System and methods for parallel execution and comparison of related processes for fault protection
PCT/JP2019/041071 WO2020080515A1 (en) 2018-10-18 2019-10-18 Systems and methods for parallel execution and comparison of related processes for fault protection

Publications (2)

Publication Number Publication Date
JP2021533487A true JP2021533487A (ja) 2021-12-02
JP7047969B2 JP7047969B2 (ja) 2022-04-05

Family

ID=68426775

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021506002A Active JP7047969B2 (ja) 2018-10-18 2019-10-18 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法

Country Status (3)

Country Link
US (1) US10545850B1 (ja)
JP (1) JP7047969B2 (ja)
WO (1) WO2020080515A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113220407B (zh) * 2020-02-04 2023-09-26 北京京东振世信息技术有限公司 故障演练的方法和装置
US11379346B2 (en) 2020-05-12 2022-07-05 Lightrun Platform LTD Systems and methods for debugging and application development
FR3116356B1 (fr) * 2020-11-13 2024-01-05 Stmicroelectronics Grand Ouest Sas Procédé de compilation d’un code source
KR20230089448A (ko) * 2021-12-13 2023-06-20 현대자동차주식회사 차량용 임베디드 제어기의 리셋 원인 결정 방법 및 그 방법이 적용된 차량용 임베디드 제어기
US20240061766A1 (en) * 2022-08-18 2024-02-22 Snap Inc. Contextual test code generation

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02297637A (ja) * 1989-05-12 1990-12-10 Japan Electron Control Syst Co Ltd コントロールユニット検査装置
US6161196A (en) * 1998-06-19 2000-12-12 Lucent Technologies Inc. Fault tolerance via N-modular software redundancy using indirect instrumentation

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7594111B2 (en) 2002-12-19 2009-09-22 Massachusetts Institute Of Technology Secure execution of a computer program
US7587709B2 (en) * 2003-10-24 2009-09-08 Microsoft Corporation Adaptive instrumentation runtime monitoring and analysis
US7577992B2 (en) 2005-01-14 2009-08-18 Microsoft Corporation Software security based on control flow integrity
WO2007008919A2 (en) 2005-07-11 2007-01-18 University Of Virginia Patent Foundation Method and system for software protection using binary encoding
EP1870829B1 (en) 2006-06-23 2014-12-03 Microsoft Corporation Securing software by enforcing data flow integrity
US7849359B2 (en) * 2007-11-20 2010-12-07 The Mathworks, Inc. Parallel programming error constructs
US8434064B2 (en) 2008-03-28 2013-04-30 Microsoft Corporation Detecting memory errors using write integrity testing
US8468592B2 (en) 2009-07-31 2013-06-18 Google Inc. Native code module security for 64-bit instruction set architectures
CN104335218B (zh) 2012-03-30 2017-08-11 爱迪德技术有限公司 使用基函数编码来保护可访问的系统
US11003464B2 (en) 2012-04-19 2021-05-11 Microsoft Technology Licensing, Llc Control flow integrity enforcement at scale
JP6019995B2 (ja) * 2012-09-24 2016-11-02 日本電気株式会社 分散システム、サーバ計算機、及び障害発生防止方法
US9846717B2 (en) 2012-10-23 2017-12-19 Galois, Inc. Software security via control flow integrity checking
US9471461B2 (en) 2013-03-27 2016-10-18 Nec Corporation Guarding a monitoring scope and interpreting partial control flow context
US20140372983A1 (en) * 2013-06-14 2014-12-18 Microsoft Corporation Identifying the introduction of a software failure
EP3069254B1 (en) 2013-11-12 2020-07-29 RunSafe Security, Inc. Improved control flow integrity system and method
US9361102B2 (en) 2014-06-09 2016-06-07 Lehigh University Methods for enforcing control flow of a computer program
US9767272B2 (en) 2014-10-20 2017-09-19 Intel Corporation Attack Protection for valid gadget control transfers
US9569613B2 (en) 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
US10452370B2 (en) 2015-01-09 2019-10-22 University Of Virginia Patent Foundation System, method and computer readable medium for space-efficient binary rewriting
CA2982867A1 (en) 2015-04-07 2016-10-13 RunSafe Security, Inc. System and method of obfuscation through binary and memory diversity
EP3121749B1 (en) 2015-07-22 2019-06-26 Nxp B.V. Method and apparatus for ensuring control flow integrity
US9767292B2 (en) 2015-10-11 2017-09-19 Unexploitable Holdings Llc Systems and methods to identify security exploits by generating a type based self-assembling indirect control flow graph
US10289842B2 (en) 2015-11-12 2019-05-14 Samsung Electronics Co., Ltd. Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10628589B2 (en) 2016-01-22 2020-04-21 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for preventing code reuse attacks
US10657253B2 (en) 2016-05-18 2020-05-19 The Governing Council Of The University Of Toronto System and method for determining correspondence and accountability between binary code and source code
EP3526673A4 (en) * 2016-10-11 2020-06-17 Green Hills Software, LLC SYSTEMS, METHODS AND DEVICES FOR VERTICALLY INTEGRATED INSTRUMENTATION AND TRACE RECONSTITUTION
WO2019021064A1 (en) * 2017-07-25 2019-01-31 Aurora Labs Ltd CONSTRUCTION OF SOFTWARE DELTA UPDATES FOR VEHICLE ECU SOFTWARE AND TOOL-BASED ANOMALY DETECTION
US11204750B2 (en) * 2018-03-30 2021-12-21 Intel Corporation Systems, methods and apparatus for distributed software/firmware update and software versioning system for automated vehicles

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02297637A (ja) * 1989-05-12 1990-12-10 Japan Electron Control Syst Co Ltd コントロールユニット検査装置
US6161196A (en) * 1998-06-19 2000-12-12 Lucent Technologies Inc. Fault tolerance via N-modular software redundancy using indirect instrumentation

Also Published As

Publication number Publication date
WO2020080515A1 (en) 2020-04-23
US10545850B1 (en) 2020-01-28
JP7047969B2 (ja) 2022-04-05

Similar Documents

Publication Publication Date Title
JP7164017B2 (ja) フォールトツリー分析を使用して機能安全のため制御フローグラフを最適化するシステム及び方法
JP7047969B2 (ja) 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法
JP7201078B2 (ja) データ引数を動的に識別し、ソースコードを計装するためのシステムと方法
Altekar et al. OPUS: Online Patches and Updates for Security.
US20180232523A1 (en) Method, system and product for using a predictive model to predict if inputs reach a vulnerability of a program
JP7218793B2 (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
Eceiza et al. Fuzzing the internet of things: A review on the techniques and challenges for efficient vulnerability discovery in embedded systems
US20180060224A1 (en) Distinguishing Public and Private Code in Testing Environments
US20220207144A1 (en) Behavioral threat detection definition and compilation
US20230252135A1 (en) Behavioral threat detection definition and compilation
US20180060584A1 (en) Securing Code Execution in a Network Environment
JP2021533486A (ja) 人工知能プログラムの実行を管理するための監視制御システム、その方法、および非一時的コンピュータ可読媒体
US20100218171A1 (en) Computer bus monitoring for the adaptive control of executing software processes
KR102118236B1 (ko) 컨트랙트에 대한 운영 체제 지원 기법
US20210004470A1 (en) Automatic Generation Of Patches For Security Violations
Olesen et al. Coccinelle: tool support for automated cert c secure coding standard certification
Saha et al. Finding resource-release omission faults in linux
Alshnakat Automatic verification of embedded systems using horn clause solvers
Chabrol et al. A spatial and temporal partitioning approach for dependable automotive systems
Chockler et al. Validation of evolving software
Beckschulze et al. Analyzing Embedded Systems Code for Mixed-Critical Systems using Hybrid Memory Representations
Kowshik et al. Static analysis to enforce safe value flow in embedded control systems
Sugaya et al. Online Kernel Log analysis for robotics application
Anderson Software Failures Reduction with Static Analysis Tools
Wang et al. A Dynamic Verification Model based on Information Flow Constraint

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210203

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: 20220222

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220307

R151 Written notification of patent or utility model registration

Ref document number: 7047969

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151