(57)【要約】本開示は、いくつかの態様では、不正に引き起こされる破壊からシステムおよびデータを保護することに関する。潜在的な攻撃を検出するおよび防ぐためにデータをモニタリングすることによって、データインテグリティが維持される。データが汚染されているかどうかをトラッキングするためのメカニズムが、データフローコンピュータアーキテクチャまたは何らかの他の適切なアーキテクチャにおいてインプリメントされる。いくつかの態様では、汚染チェッキングメカニズムは、そのようなアーキテクチャのレジスタファイル、メモリ管理、および命令セット内でインプリメントされる。これを達成するために、所与の物理メモリ位置に記憶されたデータが汚染されているかどうかのインジケーションが、物理メモリ位置とともに記憶される。例えば、レジスタは、対応する汚染フラグのためのビットを含むことができ、メモリページは、対応する汚染フラグのためのビットを含むことができ、入力／出力（Ｉ／Ｏ）ポートは、対応する汚染フラグのためのビットを含むことができる。
2018508883.tif 000002
【特許請求の範囲】
【請求項１】
データ管理のための方法であって、
第１の物理メモリ位置から第１のデータを受け取ることと、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を備える、方法。
【請求項２】
前記方法は、データフローコンピュータアーキテクチャにおいてインプリメントされる、請求項１に記載の方法。
【請求項３】
前記データフローコンピュータアーキテクチャは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャである、請求項２に記載の方法。
【請求項４】
前記第２のデータは、前記第１のデータと同じ値を有する、または前記第２のデータは、前記第１のデータに応じて生成される、請求項１に記載の方法。
【請求項５】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項１に記載の方法。
【請求項６】
前記第１のデータが汚染されているかどうか決定するための命令を呼び出すことをさらに備える、請求項１に記載の方法。
【請求項７】
前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すことをさらに備える、請求項１に記載の方法。
【請求項８】
前記方法は、コンピュータ命令によって実施され、
前記第１のデータは、前記コンピュータ命令のための第１のオペランドを備え、
前記第２のデータは、前記コンピュータ命令の出力を備える、請求項１に記載の方法。
【請求項９】
第３の物理メモリ位置から、前記コンピュータ命令のための第２のオペランドを受け取ることと、
前記第２のオペランドが汚染されているかどうか決定することと、ここにおいて、前記第２のオペランドが汚染されているかどうかの前記決定は、前記第３の物理メモリ位置についての記憶された第３のインジケーションに基づく、
前記第１のおよび第２のオペランドのうちの少なくとも１つが汚染されている場合、前記第２のデータが汚染されていると決定することと、
をさらに備える、請求項８に記載の方法。
【請求項１０】
前記第２のデータを受け取ることと、
前記第２のデータが汚染されていると決定することと、
前記第２のデータが汚染されているという前記決定の結果として、例外を呼び出すことと、
をさらに備える、請求項１に記載の方法。
【請求項１１】
前記第２のデータを受け取ることと、
前記第２のデータが汚染されているかどうか決定するための動作を実施することと、
前記動作が、前記第２のデータは汚染されていないと決定する場合、前記第２のデータについての汚染インジケーションをクリアするための命令を呼び出すことと、
をさらに備える、請求項１に記載の方法。
【請求項１２】
データ管理のための装置であって、
少なくとも１つのメモリ回路と、
前記少なくとも１つのメモリ回路に結合された処理回路と、
を備え、前記処理回路は、
前記少なくとも１つのメモリ回路の第１の物理メモリ位置から第１のデータを受け取ることと、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、前記少なくとも１つのメモリ回路の第２の物理メモリ位置に記憶することと、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を行うように構成される、装置。
【請求項１３】
前記装置は、データフローコンピュータアーキテクチャにおいてインプリメントされる、請求項１２に記載の装置。
【請求項１４】
前記データフローコンピュータアーキテクチャは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャである、請求項１３に記載の装置。
【請求項１５】
前記第２のデータは、前記第１のデータと同じ値を有する、または前記第２のデータは、前記第１のデータに応じて生成される、請求項１２に記載の装置。
【請求項１６】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項１２に記載の装置。
【請求項１７】
前記処理回路は、前記第１のデータが汚染されているかどうか決定するための命令を呼び出すようにさらに構成される、請求項１２に記載の装置。
【請求項１８】
前記処理回路は、前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すようにさらに構成される、請求項１２に記載の装置。
【請求項１９】
前記処理回路は、コンピュータ命令を実行するようにさらに構成され、
前記第１のデータは、前記コンピュータ命令のためのオペランドを備え、
前記第２のデータは、前記コンピュータ命令の出力を備える、請求項１２に記載の装置。
【請求項２０】
前記処理回路は、
前記第２のデータを受け取ることと、
前記第２のデータが汚染されていると決定することと、
前記第２のデータが汚染されているという前記決定の結果として、例外を呼び出すことと、
を行うようにさらに構成される、請求項１２に記載の装置。
【請求項２１】
前記処理回路は、
前記第２のデータを受け取ることと、
前記第２のデータが汚染されているかどうか決定するための動作を実施することと、
前記動作が、前記第２のデータは汚染されていないと決定する場合、前記第２のデータについての汚染インジケーションをクリアするための命令を呼び出すことと、
を行うようにさらに構成される、請求項１２に記載の装置。
【請求項２２】
データ管理のための装置であって、
第１の物理メモリ位置から第１のデータを受け取るための手段と、
前記第１のデータが汚染されているかどうか決定するための手段と、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶するための手段と、
前記第２の物理メモリ位置についての第２のインジケーションを記憶するための手段と、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を備える、装置。
【請求項２３】
前記装置は、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャにおいてインプリメントされる、請求項２２に記載の装置。
【請求項２４】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項２２に記載の装置。
【請求項２５】
前記第１のデータが汚染されているかどうか決定するための命令を呼び出すための手段をさらに備える、請求項２２に記載の装置。
【請求項２６】
前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すための手段をさらに備える、請求項２２に記載の装置。
【請求項２７】
コンピュータ実行可能コードを記憶する非一時的なコンピュータ読み取り可能な媒体であって、前記コードは、
第１の物理メモリ位置から第１のデータを受け取ることと、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を行うためのコードを含む、コンピュータ読み取り可能な媒体。
【請求項２８】
前記コードは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャのためのものである、請求項２７に記載のコンピュータ読み取り可能な媒体。
【請求項２９】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項２７に記載のコンピュータ読み取り可能な媒体。
【請求項３０】
前記第１のデータが汚染されているかどうか決定するための命令を呼び出すためのコードをさらに備える、請求項２７に記載のコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
[0001]  本出願は、２０１５年２月５日に米国特許商標庁に出願された非仮出願第１４／６１５，３２１に対する優先権およびその利益を主張し、その全内容は、参照によってここに組み込まれる。
【技術分野】
【０００２】
[0002]  本開示の態様は、一般にデータ管理に関し、より具体的には、これに限られるわけではないが、汚染されているデータ（tainted data）をトラッキングすることに関する。
【背景技術】
【０００３】
[0003]  コンピュータアーキテクチャにおいては、コンピュータによって使用されるデータが（例えば、ハッカー、不正なプログラム等によって）損なわれない（not compromised）ことを確実にする必要がある。保護されるべきデータは、メモリおよびレジスタに記憶されたデータを含む。
【０００４】
[0004]  ＥＤＧＥ（Explicit Data Graph Execution）アーキテクチャのようなデータフローコンピュータアーキテクチャは、機械語命令（machine instructions）で演算（operations）間のデータ依存関係（data dependencies）を明示的に符号化し得る。ＥＤＧＥアーキテクチャ（マイクロソフト（登録商標）Ｅ２のような）は、命令を（例えば）１２８個までの命令の実行ブロックにグループ化する。レジスタからのストアおよびロード（Stores and loads）は、典型的には、異なる実行ブロック間で値を通信するために使用される。
【０００５】
[0005]  不正確に検査された（incorrectly vetted）外部の入力を信用することに代表されるセキュリティ脆弱性の大きな分類（a large class）が存在し、それは意図しない機能性に攻撃者がアクセスすることを許す。汚染トラッキング（Taint tracking）は、コードを通じた信用できないデータの経路に関わらず、信用できないデータのインスタンスを動的に捕えるための既知の技法である。従来、汚染トラッキングは、例えばシミュレーションの間に、オフラインで実行される。
【発明の概要】
【０００６】
[0006]  以下は、本開示のいくつかの態様の基本的な理解を提供するために、そのような態様の簡略化された概要を提示する。この概要は、本開示の考慮されるすべての特徴の広範な概観ではなく、そして本開示のすべての態様の主要または重要な要素を特定するようにも、本開示の任意またはすべての態様の範囲を詳細に叙述するようにも、意図されていない。その唯一の目的は、後に提示されるより詳細な説明への前置きとして、簡略化された形式で本開示のいくつかの態様の様々な概念を提示することである。
【０００７】
[0007]  本開示の様々な態様は、データが汚染されているかどうかトラッキングするためのメカニズムを提供する。いくつかの態様では、これらメカニズムは、データフローコンピュータアーキテクチャ（例えば、ＥＤＧＥアーキテクチャ）においてインプリメントされる（implemented）。いくつかの態様では、汚染チェッキングメカニズムは、そのようなアーキテクチャのレジスタファイル、メモリ管理、および命令セットを用いてインプリメントされる。
【０００８】
[0008]  所与の物理メモリ位置に記憶されたデータが汚染されているかどうかのインジケーションが、物理メモリ位置とともに記憶される。例えば、汚染ビットは、レジスタ、メモリページ、およびＩ／Ｏポートに関連し得る。より具体的、しかし非排他的な例としては、レジスタは、対応する汚染フラグのためのビットを含むことができ、メモリページは、対応する汚染フラグのためのビットを含むことができ、入力／出力（Ｉ／Ｏ）ポートは、対応する汚染フラグのためのビットを含むことができる。
【０００９】
[0009]  これらの汚染フラグの使用を通じて、データ（またはそのデータから導出された他のデータ）が汚染されているかどうかのインジケーションが、コンピュータのための命令実行フロー中そのデータ（または導出されたデータ）に後続することができる。これを達成するために、汚染されているデータが物理メモリ位置に記憶されるたびに、物理メモリ位置について対応する汚染フラグが設定される。逆に、データが物理メモリ位置から読み出されるたびに、データが汚染されているかどうか決定するためにチェックが実施される。実際には、物理メモリ位置のあるページについて汚染されているデータを示すために、単一の汚染フラグが使用されることができる。
【００１０】
[0010]  重要な実行動作（execution operation）（例えば、システムコール）はこのようにして、汚染されているデータがその動作に渡されて（passed to）いるかどうか容易に決定し得る。もしもそうである場合、動作は、汚染されているデータがその動作を破損させることを防ぐために、例外を発生させ（raise an exception）得る。
【００１１】
[0011]  一態様では、本開示は、第１の物理メモリ位置から第１のデータを受け取ることと、第１のデータが汚染されているかどうか決定することであって、ここにおいて、決定は、第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、決定することと、第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、第２の物理メモリ位置についての第２のインジケーションを記憶することであって、ここにおいて、第２のインジケーションは、第２のデータが汚染されているかどうかを示す、記憶することと、を含むデータ管理のための方法を提供する。
【００１２】
[0012]  本開示の別の態様は、少なくとも１つのメモリ回路と、少なくとも１つのメモリ回路に結合された処理回路とを含むデータ管理のために構成された装置を提供する。処理回路は、少なくとも１つのメモリ回路の第１の物理メモリ位置から第１のデータを受け取ることと、第１のデータが汚染されているかどうか決定することであって、ここにおいて、決定は、第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、決定することと、第１のデータに基づく第２のデータを、少なくとも１つのメモリ回路の第２の物理メモリ位置に記憶することと、第２の物理メモリ位置についての第２のインジケーションを記憶することであって、ここにおいて、第２のインジケーションは、第２のデータが汚染されているかどうかを示す、記憶することと、を行うように構成される。
【００１３】
[0013]  本開示の別の態様は、データ管理のために構成された装置を提供する。装置は、第１の物理メモリ位置から第１のデータを受け取るための手段と、第１のデータが汚染されているかどうか決定するための手段であって、ここにおいて、決定は、第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、決定するための手段と、第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶するための手段と、第２の物理メモリ位置についての第２のインジケーションを記憶するための手段であって、ここにおいて、第２のインジケーションは、第２のデータが汚染されているかどうかを示す、記憶するための手段と、を含む。
【００１４】
[0014]  本開示の別の態様は、第１の物理メモリ位置から第１のデータを受け取ることと、第１のデータが汚染されているかどうか決定することであって、ここにおいて、決定は、第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、決定することと、第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、第２の物理メモリ位置についての第２のインジケーションを記憶することであって、ここにおいて、第２のインジケーションは、第２のデータが汚染されているかどうかを示す、記憶することと、を行うためのコードを含む、コンピュータ実行可能コードを記憶するコンピュータ読み取り可能な媒体を提供する。
【００１５】
[0015]  本開示のこれらのおよび他の態様は、以下の詳細な説明を検討すると、より完全に理解されるようになる。本開示の他の態様、特徴、およびインプリメンテーション（implementation）は、添付の図と併せて本開示の特定のインプリメンテーションの以下の説明を検討すると、当業者には明らかとなる。本開示の特徴は、ある特定のインプリメンテーションおよび図に関連して以下で説明され得るが、本開示のすべてのインプリメンテーションは、本明細書に説明される有利な特徴の１つまたは複数を含むことができる。言い換えれば、１つまたは複数のインプリメンテーションが、ある特定の有利な特徴を有するものとして説明され得るが、そのような特徴のうちの１つまたは複数はまた、ここで説明された本開示の様々なインプリメンテーションに従って使用され得る。同様の方法で、ある特定のインプリメンテーションは、デバイス、システム、または方法のインプリメンテーションとして以下で説明され得るが、そのようなインプリメンテーションは、様々なデバイス、システム、および方法でインプリメントされることができることは理解されるべきである。
【図面の簡単な説明】
【００１６】
【図１】[0016]  図１は、本開示の１つまたは複数の態様が応用され得るデータフローコンピュータアーキテクチャのある特定の態様を例示する。
【図２】[0017]  図２は、本開示の１つまたは複数の態様が応用され得るデータフローコンピュータアーキテクチャにおける命令実行の例を例示する。
【図３】[0018]  図３は、本開示の１つまたは複数の態様が応用され得るデータフローコンピュータアーキテクチャにおける命令実行の別の例を例示する。
【図４】[0019]  図４は、本開示のいくつかの態様によるコンピュータアーキテクチャの例を例示する。
【図５】[0020]  図５は、本開示のいくつかの態様による、汚染されているものとしてデータをフラグ付けすることの例を例示する。
【図６】[0021]  図６は、本開示のいくつかの態様による、汚染されているデータをトレース（tracing）することの例を例示する。
【図７】[0022]  図７は、本開示のいくつかの態様による、汚染トラッキング処理の例を例示する。
【図８】[0023]  図８は、本開示のいくつかの態様による、例外処理（exception handling）の例を例示する。
【図９】[0024]  図９は、本開示のいくつかの態様による、汚染フラグをクリアするための処理の例を例示する。
【図１０】[0025]  図１０は、本開示のいくつかの態様による、データトラッキングをサポートする電子デバイスについての例示的なハードウェアインプリメンテーションのブロック図を例示する。
【図１１】[0026]  図１１は、本開示のいくつかの態様による、データトラッキング処理の例を例示する。
【図１２】[0027]  図１２は、本開示のいくつかの態様による、図１１のデータトラッキング処理の追加的な態様の例を例示する。
【図１３】[0028]  図１３は、本開示のいくつかの態様による、図１１のデータトラッキング処理の追加的な態様の例を例示する。
【図１４】[0029]  図１４は、本開示のいくつかの態様による、図１１のデータトラッキング処理の追加的な態様の例を例示する。
【詳細な説明】
【００１７】
[0030]  添付図面に関連して以下に記載される詳細な説明は、様々な構成の説明として意図されており、ここに説明される概念が実施され得るのはこれらの構成においてのみであることを表すようには意図されていない。詳細な説明は、様々な概念の徹底的な理解を提供することを目的として特定の詳細を含む。しかしながら、これらの概念がこれらの特定の詳細なしに実施され得ることは、当業者に明らかとなる。いくつかの事例では、そのような概念をあいまいにすることを避けるために、周知の構造およびコンポーネントは、ブロック図の形式で示される。
【００１８】
[0031]  本開示は、いくつかの態様では、プログラムによって値が操作されるときに、潜在的に信用できないソース（例えば、外部のソース）からの値をトラッキングすることに関する。安全なおよび安全でないデータソースおよびシンクが、メモリページおよびレジスタを適切にマーキングすることによって、定義され得る。例えば、信用できないソースからの（例えば、Ｉ／Ｏデバイスからの）データを記憶する各ストレージ位置（storage location）は、汚染されているものとしてフラグ付けされる。このフラグ付けは、データが１つの命令または動作から別のものに渡される際に持続する（continues）。したがって、実行処理全体にわたるデータのいかなるインスタンスのストレージ位置も、汚染されているものとしてマーキングされることになる。
【００１９】
[0032]  安全でない方法で汚染されている値を使用するいかなる試みも、実行フローを中断する例外条件を生成する。例えば、カーネルは、汚染されていないメモリページまたはレジスタにおいてパラメータが渡されることを要求することによって、汚染されていない値のみがシステムコールに渡されることを確実にすることができる。
【００２０】
[0033]  例示のために、本開示の様々な態様は、データフローコンピュータアーキテクチャ（例えば、ＥＤＧＥアーキテクチャ）の文脈において説明されることになる。しかしながら、本明細書における教示は、そのようなインプリメンテーションに限定されないこと、および本明細書における教示は他のコンピュータアーキテクチャで使用される可能性があることは、理解されるべきである。
【００２１】
［データフローアーキテクチャ］
[0034]  図１は、セントラルプロセシングユニット（ＣＰＵ）１０８による実行のために、コンパイラ１０２がコードをメモリ１０６に記憶されている実行ブロック１０４のセットにコンパイルする、データフローコンピュータアーキテクチャ１００の簡略化された例である。示されるように、各実行ブロックは、いくつかの命令を含む。例えば、ＥＤＧＥアーキテクチャは、命令を１２８個またはそれ以上の命令の実行ブロックにグループ化し得る。
【００２２】
[0035]  データフローコンピュータアーキテクチャは、命令を並行して実行し、それにより所与の命令がその命令のための入力が用意できるたびに実行される。実際のシステムでは、データフローコンピュータアーキテクチャは、多数の並列実行（例えば、１００以上）をサポートし得る。そのようなアーキテクチャの使用を通じて、処理効率の改善が達成され得、それによりシステムパフォーマンスが改善する、および／またはシステム電力消費が減少する。
【００２３】
[0036]  図２は、命令が、それらのそれぞれの入力（例えば、オペランド）が用意できるたびに実行されることを例示する簡略化された実行ツリー２００を例示する。この例では、命令１は、入力２０２を命令２に、および入力２０４を命令３に提供する。したがって、命令３は、それが入力２０４を受け取るとすぐに実行され得る。対照的に、命令２は、それが命令３からそれの他の入力２０６を受け取るまで実行されない。命令４は、それが命令２から入力２０８を受け取るとすぐに実行する。同様に、命令６は、それが命令５から入力２１０を受け取るとすぐに実行され得、一方で命令８は、それが命令６からの入力２１２と、命令７からのそれの他の入力２１６との両方を受け取るまで実行されない。しかしながら、命令７は、入力２１４が命令３から受け取られるまで、入力２１６を提供しない。
【００２４】
[0037]  そのような実行アプローチをサポートするために、データフローコンピュータアーキテクチャは、各実行ブロックについて比較的多数のレジスタを用いる。例えば、一対のレジスタが、実行ブロックにおける各命令について一時的に割り振られ得る。このような方法で、一旦命令のためのオペランドが利用可能になると、それは、その命令のための任意の他のオペランドが利用可能になるまで、記憶され得る。各命令に割り振られたレジスタの使用を通じて、オペランドは、他の命令（ひいては他のブロック）に影響を与えることなく記憶されることができる。
【００２５】
[0038]  したがって、データフローコンピュータアーキテクチャは、機械語命令で演算間のデータ依存関係を明示的に符号化し得る。例えば、マイクロソフトのＥ２のようなＥＤＧＥアーキテクチャは、２つの値を加算（add）するために、図３に例示される（疑似）命令を使用する可能性がある。
【００２６】
[0039]  第１の命令３０２、ｉ０は、メモリ中のアドレス１から値を読み出し、その結果を、第１のオペランドとして第３の命令３０６、ｉ２にディスパッチ（dispatches）する。同様に、第２の命令３０４、ｉ１は、アドレス２から値を読み出し、その結果を第２のオペランドとして命令ｉ２にディスパッチする。両方のオペランドが到着するとき、命令ｉ２は、加算演算（add operation）を実施し得、そして（このケースでは）その結果を第４の命令３０８、ｉ３に送る。
【００２７】
[0040]  特定の命令に値を送ることに加えて、ＥＤＧＥアーキテクチャはしばしば、オペランドを受け取るために複数の命令によって使用され得る１つまたは複数のブロードキャストチャネルを定義する。レジスタからのストアおよびロードは、典型的には、異なる実行ブロック間で値を通信するために使用される。したがって、ＥＤＧＥアーキテクチャは、レジスタ、ならびにメモリページを介して、実行ブロック間でデータを渡すことになる。
【００２８】
［汚染チェッキングメカニズム］
[0041]  本開示は、いくつかの態様では、ＥＤＧＥアーキテクチャのようなデータフローアーキテクチャのレジスタファイル、命令セット、およびメモリ管理内でインプリメントされる汚染チェッキングメカニズムに関する。命令は、例えば、１２８個までの命令の原子ブロックにまとめられる。命令は、０、１、２、またはそれより多くのオペランドを有し、明示的に、それらの結果を、０、１、２、またはそれより多くの送り先（destinations）に送る。送り先は、制限なく、汎用レジスタ、ブロードキャストチャネル、または同じ実行ブロックにおける他の命令のオペランドを含み得る。
【００２９】
[0042]  各送り先は、タイプに関わらず、それが受け取る値を、それがすべての潜在的な消費命令（potential consuming instructions）によって使用されるまで、記憶する。これは、各送り先（指名されたレジスタを含む）を、レジスタファイル中の物理レジスタに、インプリメンテーションに依存する方法で（in an implementation dependent way）マッピングすることによって、達成される。
【００３０】
[0043]  図４は、そのようなアーキテクチャをインプリメントするシステム４００の簡略化された例を例示する。システム４００は、ＣＰＵ４０２、多数の物理レジスタを含むレジスタファイル４０４、いくつかの定義されたメモリページを含む物理メモリ４０８を管理するメモリ管理ユニット（ＭＭＵ）４０６、および物理入力／出力（Ｉ／Ｏ）ポート４１０を含む。
【００３１】
[0044]  システムのコンポーネント間で情報を通信するための様々なチャネルもまた、図４に例示される。例えば、チャネル（例えば、シグナリングバス）４２０が、ＣＰＵ４０２と、レジスタファイル４０４と、ＭＭＵ４０６（および、よってメモリ４０８）と、Ｉ／Ｏポート４１０との間で情報を通信するために使用される。また、ブロードキャストチャネル４２２が、このチャネルをインプリメントするレジスタから、および、このチャネルをインプリメントするレジスタに、情報を通信するために用いられることができる。
【００３２】
[0045]  本明細書における教示によれば、いくつかのインプリメンテーションでは、マシン（machine）のレジスタファイル中のあらゆる物理レジスタに汚染フラグが追加される。例えば、汚染フラグ４１２（例えば、１ビット）が、レジスタ４１４のうちの１つについて示される。加えて、いくつかのインプリメンテーションでは、ＣＰＵ４０２によって実行されるあらゆる命令の論理は、任意のオペランドがそれの汚染フラグセットを有する場合、汚染フラグがその送り先に設定されるように、修正される。
【００３３】
[0046]  また本明細書における教示によれば、いくつかのインプリメンテーションでは、汚染フラグはまた、メモリ管理ユニットハードウェア（典型的にはＴＬＢ（translation look-aside buffer）における）によって管理される各ページ表項目（page table entry）に追加（added）される。例えば、汚染フラグ４１６（例えば、１ビット）が、メモリページ４１８のうちの１つについて示される。メモリ読み出し命令が、汚染フラグセットを有するページを横切る（intersects）アドレスにアクセスする場合、汚染フラグがそれの送り先に設定される。
【００３４】
[0047]  汚染フラグが、メモリ記憶命令（a memory store instruction）へのオペランドに設定され、そしてメモリアドレスが汚染されていないページを横切る場合、そのページは、汚染されているものとしてマーキングされる。代替的に、トラップ命令が実行され得る。そのようなトラップは、動作環境（operating environment）によって処理（handled by）され得るセキュリティ例外を示す。
【００３５】
[0048]  アーキテクチャが特定のＩ／Ｏ命令をサポートする場合、すべての入力命令の送り先が、汚染されているものとしてフラグ付けされる。この場合もやはり、汚染されているオペランドを有する出力命令により、トラップが実行され得る。
【００３６】
[0049]  本明細書における教示によれば、いくつかの命令が、汚染トラッキングをサポートするために定義されることができる。例えば、２つのユーザモード命令、ＴＡＩＮＴおよびＵＮＴＡＩＮＴが、定義されることができる。ＴＡＩＮＴは、オペランドを、０、１、２、等の送り先にコピーし、さらにそれらの汚染フラグを設定する。ＵＮＴＡＩＮＴは、同様に動作するが、送り先の汚染フラグの設定をオフにする（unsets）。
【００３７】
[0050]  加えて、追加的なユーザモード命令、ＴＡＩＮＴＥＤが定義されることができる。この命令は、ブール演算の結果（Boolean result）、つまりオペランドが汚染されている場合のＴＲＵＥと、そうでない場合のＦＡＬＳＥと、を生成する。
【００３８】
[0051]  汚染されている値は、直接アドレシングモードと間接アドレシングモード（direct and indirect addressing modes）との両方でトラッキングされ得る。間接アドレシングモードでは、レジスタまたはメモリ中の値は、メモリ中の別の値のアドレスとして使用されることができる。汚染されている値がそのようなモードでメモリを読み出すために使用されるとき、読み出される値は、（ソースページ表項目が汚染されていない場合であっても）汚染されているものとしてマーキングされる。メモリを書き出すために使用されるとき、送り先ページ表項目は、汚染されているものとしてマーキングされる。
【００３９】
[0052]  ＴＬＢおよびページ表における汚染フラグの操作は、すべての他のＭＭＵ操作に関してはスーパーバイザモード（supervisor mode）で実施され得る。
【００４０】
[0053]  開示された汚染トラッキングメカニズムの使用を通じて、外部、およびそれ故に潜在的に信用できないソース、からの値は、それらがプログラムによって操作されるとき、トラッキングされることができる。安全でない方法で汚染されている値を使用するいかなる試みも、実行フローを中断する例外的な条件を生成する。安全なおよび安全でないデータソースおよびシンクが、メモリページを適切にマーキングすることによって、定義され得る。例えば、カーネルは、汚染されていないメモリページまたはレジスタにおいてパラメータが渡されることを要求することによって、汚染されていない値のみがシステムコールに渡されることを確実にすることができる。
【００４１】
[0054]  図５は、汚染されている値を識別することの例を例示する。ここで、命令５０４のためのオペランド５０２が、Ｉ／Ｏポート５０６から読み出される。命令５０４は、オペランド５０２に基づいて出力５０８を生成する。Ｉ／Ｏポート５０６からのデータは本質的に信用されていないので、出力５０８が記憶されるレジスタまたはメモリページ５１０についての汚染フラグＴが、記憶された値が汚染されていることを示すために設定される５１２。
【００４２】
[0055]  図６は、汚染されている値をトラッキングすることの例を例示する。ここで、命令６０４のためのオペランド６０２がレジスタまたはメモリページ６０６から読み出される。レジスタまたはメモリページ６０６についての（設定されたと見なされる）汚染フラグＴもまた読み出される６０８。命令６０４は、オペランド６０２に基づいて出力６１０を生成し、別のレジスタまたはメモリページ６１２に出力６１０を記憶する。加えて、レジスタまたはメモリページ６１２についての汚染フラグＴが、記憶された値が汚染されていることを示すために設定される６１４。
【００４３】
[0056]  上記内容を念頭に置いた上で、本明細書における教示に従って用いられ得る動作のいくつかの例が、これより図７〜図９を参照して説明される。例示のために、図７〜図９の動作（または、本明細書において説明または教示される任意の他の動作）は、特定のコンポーネントによって実施されるものとして説明され得る。しかしながら、これらの動作は、他のインプリメンテーションでは、他のタイプのコンポーネントによって実施され得、および異なる数のコンポーネントを使用して実施され得る。また、ここに説明される動作のうちの１つまたは複数は、所与のインプリメンテーションにおいては用いられない可能性があることは認識されるべきである。例えば、１つのエンティティは、動作のサブセットを実施し得、それらの動作の結果を、別のエンティティに渡し得る。
【００４４】
[0057]  図７は、データが汚染されているかどうかをトラッキングするために実施され得るいくつかの動作７００を例示する。
【００４５】
[0058]  ブロック７０２において、命令のためのオペランド（例えば、唯一のオペランドまたは最後のオペランド）が用意できた状態となる。例えば、オペランドは、別の命令によって出力されたものである可能性がある。
【００４６】
[0059]  ブロック７０４において、それのオペランドの各々が利用可能であるので、命令が呼び出される（invoked）。
【００４７】
[0060]  ブロック７０６において、命令は、オペランドを取り出す（retrieves）（またはさもなければ獲得する）。
【００４８】
[0061]  ブロック７０８において、命令は、オペランドが汚染されているかどうか決定するために、別の命令（ＴＡＩＮＴＥＤ命令）をコールする。
【００４９】
[0062]  ブロック７１０において、ＴＡＩＮＴＥＤ命令は、オペランドが汚染されているかどうかのインジケーションを、コールしている命令へ返す。
【００５０】
[0063]  ブロック７１２において、命令演算（the instruction operation）が実施され（例えば、ＡＤＤ演算または何らかの他の指定された演算）、そして、出力が生成される。
【００５１】
[0064]  ブロック７１４において、命令は、出力をメモリに（例えば、レジスタに、またはメモリページにおけるある位置に）コピーするために、別の命令（ＴＡＩＮＴ命令またはＵＮＴＡＩＮＴ命令）をコールし、対応する汚染フラグを適した値に設定する（例えば、設定するか、または設定しない）。
【００５２】
[0065]  命令がいくつかの入力（オペランド）を有する状況では、図７に説明されたものと同様の動作が、各オペランドについて実施されることができる。この場合、これらのオペランドのうちの最後のものが用意できたとき（ブロック７０２）、命令が呼び出され（ブロック７０４）、するとすぐに、命令はこれらのオペランドの各々を取り出す（ブロック７０６）。各オペランドについて、「ＴＡＩＮＴＥＤ」命令が、オペランドが汚染されているかどうか決定するためにコールされる（ブロック７０８）。その結果、各オペランドについて、そのオペランドが汚染されているかどうかのインジケーションが受け取られる（ブロック７１０）。次いで命令演算が実施され、出力が生成される（ブロック７１２）。この出力がメモリにコピーされ、対応する汚染フラグが適した値に設定される（ブロック７１４）。この状況では、ブロック７１０において、オペランドのうちの１つでも汚染されていると示される場合は、出力は汚染されていると判断される（deemed tainted）。
【００５３】
[0066]  図８は、汚染されているデータを受け取った際に、ある機能（a function）または他の動作によって実施され得るいくつかの動作８００を例示する。例えば、動作８００は、汚染されているオペランドに関連するシステムコールを処理（handles）するカーネルによって実施され得る。
【００５４】
[0067]  ブロック８０２において、データが受け取られる。
【００５５】
[0068]  ブロック８０４において、データが汚染されていると示されているとの決定が成される。例えば、データを記憶するレジスタの汚染フラグが設定され得る。
【００５６】
[0069]  ブロック８０６において、例外が呼び出される。例えば、汚染されているデータに関連するいかなる命令の実行も防ぐために、トラップが実行され得る。
【００５７】
[0070]  図９は、データについての汚染インジケーションを削除するために、ある機能または他の動作によって実施され得るいくつかの動作９００を例示する。例えば、動作９００は、データが実際に汚染されているかどうか決定することができる処理によって実施され得る。
【００５８】
[0071]  ブロック９０２において、データが受け取られる。
【００５９】
[0072]  ブロック９０４において、データが汚染されていると示されているとの決定が成される。例えば、データを記憶するレジスタの汚染フラグが設定され得る。
【００６０】
[0073]  ブロック９０６において、データが実際に汚染されているかどうか決定するために、データが処理される。
【００６１】
[0074]  ブロック９０８において、データが汚染されていない場合、データについての汚染フラグがクリアされる。
【００６２】
［例示的な電子デバイス］
[0075]  図１０は、本開示の１つまたは複数の態様に従って、データトラッキング動作をサポートするように構成される装置１０００の例示である。装置１０００は、通信インタフェース１００２、記憶媒体１００４、ユーザインタフェース１００６、メモリデバイス１００８、および処理回路１０１０を含む。
【００６３】
[0076]  これらのコンポーネントは、図１０において概して接続線によって表されるシグナリングバスまたは他の好適なコンポーネントを介して、互いに電気的通信状態に置かれる、および／または、互いに結合されることができる。シグナリングバスは、処理回路１０１０の特定の用途および全体的な設計制約に応じて、相互接続バスおよびブリッジをいくつでも含み得る。シグナリングバスは、通信インタフェース１００２、記憶媒体１００４、ユーザインタフェース１００６、およびメモリデバイス１００８の各々が、処理回路１０１０と電気的通信状態に置かれる、および／または、処理回路１０１０に結合されるように、様々な回路を共にリンクする。シグナリングバスはまた、タイミングソース、周辺機器、電圧レギュレータ、および電力管理回路のような、様々な他の回路（示されていない）もリンクさせ得るが、これらは当該技術で周知であるため、これ以上説明されることはない。
【００６４】
[0077]  通信インタフェース１００２は、装置１０００のワイヤレスまたは非ワイヤレス通信を容易にするように適合され得る。例えば、通信インタフェース１００２は、ネットワーク内の１つまたは複数の通信デバイスに関して双方向に情報の通信を容易にするように適合される回路構成および／またはプログラミングを含み得る。通信インタフェース１００２は、ワイヤレス通信システム内でのワイヤレス通信のための１つまたは複数のオプションのアンテナ１０１２に結合され得る。通信インタフェース１００２は、１つまたは複数のスタンドアロンの受信機および／または送信機、ならびに１つまたは複数のトランシーバを用いて構成されることができる。例示された例では、通信インタフェース１００２は、送信機１０１４および受信機１０１６を含む。
【００６５】
[0078]  メモリデバイス１００８は、１つまたは複数のメモリデバイスを表し得る。示されるように、メモリデバイス１００８は、装置１０００によって使用される他の情報とともに汚染情報１０１８を維持し得る。いくつかのインプリメンテーションでは、メモリデバイス１００８および記憶媒体１００４は、共通のメモリコンポーネントとしてインプリメントされる。メモリデバイス１００８はまた、処理回路１０１０または装置１０００の何らかの他のコンポーネントによって操作されるデータを記憶するために使用され得る。
【００６６】
[0079]  記憶媒体１００４は、プロセッサ実行可能コードまたは命令（例えば、ソフトウェア、ファームウェア）、電子データ、データベース、または他のデジタル情報のようなプログラミングを記憶するための、１つまたは複数のコンピュータ読み取り可能な、機械読み取り可能な、および／またはプロセッサ読み取り可能なデバイスを表し得る。記憶媒体１００４はまた、プログラミングを実行するときに処理回路１０１０によって操作されるデータを記憶するために使用され得る。記憶媒体１００４は、ポータブルまたは固定記憶デバイス、光学記憶デバイス、および、プログラミングを記憶するか、含むか、または搬送することができる様々な他の媒体を含む、汎用または専用プロセッサによってアクセスされることができるいかなる利用可能な媒体でもあり得る。
【００６７】
[0080]  限定ではなく例として、記憶媒体１００４は、磁気記憶デバイス（例えば、ハードディスク、フロッピー（登録商標）ディスク、磁気ストリップ）、光学ディスク（例えば、コンパクトディスク（ＣＤ）またはデジタル多目的ディスク（ＤＶＤ））、スマートカード、フラッシュメモリデバイス（例えば、カード、スティック、またはキードライブ）、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、プログラム可能なＲＯＭ（ＰＲＯＭ）、消去可能なＰＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なＰＲＯＭ（ＥＥＰＲＯＭ（登録商標））、レジスタ、リムーバルディスク、およびコンピュータによってアクセスされ得るおよび読み出され得る命令および／またはソフトウェアを記憶するためのいかなる他の好適な媒体も含み得る。記憶媒体１００４は、製品（例えば、コンピュータプログラム製品）において具現化され得る。例として、コンピュータプログラム製品は、パッケージング材料におけるコンピュータ読み取り可能な媒体を含み得る。上記を考慮して、いくつかのインプリメンテーションでは、記憶媒体１００４は、非一時的な（例えば、有形の）記憶媒体であり得る。
【００６８】
[0081]  記憶媒体１００４は、処理回路１０１０が記憶媒体１００４から情報を読み出すおよび記憶媒体１００４に情報を書き込むことができるように、処理回路１０１０に結合され得る。つまり、記憶媒体１００４は、少なくとも１つの記憶媒体が処理回路１０１０に統合された例、および／または少なくとも１つの記憶媒体が処理回路１０１０から分離された例（例えば、装置１０００に常駐する、装置１０００の外部にある、複数のエンティティにわたって分散される等）を含んで、記憶媒体１００４が処理回路１０１０によって少なくともアクセス可能であるように、処理回路１０１０に結合されることができる。
【００６９】
[0082]  記憶媒体１００４によって記憶されるプログラミングは、処理回路１０１０によって実行されると、処理回路１０１０に、ここに説明される様々な機能および／または処理動作のうちの１つまたは複数を実施させる。例えば、記憶媒体１００４は、処理回路１０１０の１つまたは複数のハードウェアブロックにおける動作を調節（regulating）するために、ならびに、それらのそれぞれの通信プロトコルを利用してワイヤレス通信のための通信インタフェース１００２を利用するように、構成された動作を含み得る。
【００７０】
[0083]  処理回路１０１０は一般に、記憶媒体１００４上に記憶されたそのようなプログラミングの実行を含む処理のために適合される。ここで使用される場合、「プログラミング」という用語は、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはその他の呼称に関わらず、制限なく、命令、命令セット、データ、コード、コードセグメント、プログラムコード、プログラム、サブプログラム、ソフトウェアモジュール、アプリケーション、ソフトウェアアプリケーション、ソフトウェアパッケージ、ルーチン、サブルーチン、オブジェクト、実行可能ファイル、実行スレッド、プロシージャ、関数（functions）等を含むように広く解釈されるべきである。
【００７１】
[0084]  処理回路１０１０は、データを取得する、処理するおよび／または送る、データアクセスおよびストレージを制御する、コマンドを発行する、および他の所望の動作を制御するように配列される。処理回路１０１０は、少なくとも１つの例においては、適した媒体によって提供される所望のプログラミングをインプリメントするように構成される回路構成を含み得る。例えば、処理回路１０１０は、１つまたは複数のプロセッサ、１つまたは複数のコントローラ、および／または実行可能なプログラミングを実行するように構成される他の構造としてインプリメントされ得る。処理回路１０１０の例は、汎用プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、または他のプログラム可能な論理コンポーネント、ディスクリートゲートまたはトランジスタ論理、ディスクリートハードウェアコンポーネント、またはここに説明された機能を実施するように設計されたそれらの任意の組合せを含み得る。汎用プロセッサは、マイクロプロセッサ、ならびにいかなる従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンも含み得る。処理回路１０１０はまた、計算コンポーネントの組合せ、例えば、ＤＳＰとマイクロプロセッサの組合せ、いくつかのマイクロプロセッサ、ＤＳＰコアと連結した１つまたは複数のマイクロプロセッサ、ＡＳＩＣおよびマイクロプロセッサ、またはその他の様々な構成（any other number of varying configurations）としてもインプリメントされ得る。処理回路１０１０のこれらの例は、例示のためのものであり、本開示の範囲内の他の好適な構成もまた考慮されている。
【００７２】
[0085]  本開示の１つまたは複数の態様に従って、処理回路１０１０は、ここに説明される装置の任意のものまたはすべてについての、特徴、処理、機能、動作および／またはルーチンの任意のものまたはすべてを実施するように適合され得る。ここで使用される場合、処理回路１０１０に関する「適合される」という用語は、処理回路１０１０が、ここに説明される様々な特徴に従って、特定の処理、機能、動作および／またはルーチンを実施するように構成されること、そのために用いられること、インプリメントされること、および／またはプログラムされること、のうちの１つまたは複数を指し得る。
【００７３】
[0086]  装置１０００の少なくとも１つの例によれば、処理回路１０１０は、データを受け取るためのモジュール１０２０、データが汚染されているかどうか決定するためのモジュール１０２２、記憶するためのモジュール１０２４、命令を呼び出すためのモジュール１０２６、例外を呼び出すためのモジュール１０２８、および動作を実施するためのモジュールのうちの１つまたは複数を含み得る。
【００７４】
[0087]  データを受け取るためのモジュール１０２０は、例えば、物理メモリ位置からデータを受け取ることに関係するいくつかの機能を実施するように適合される回路構成および／またはプログラミング（例えば、記憶媒体１００４に記憶されたデータを受け取るためのコード１０３２）を含み得る。いくつかのインプリメンテーションでは、データを受け取るためのモジュール１０２０は、メモリデバイス１００８における値のメモリ位置を識別し、その位置の読み出しを呼び出す（invokes a read）。データを受け取るためのモジュール１０２０は、受け取られるデータを、例えば、装置のコンポーネント（例えば、受信機１０１６、メモリデバイス１００８、または何らかの他のコンポーネント）から直接的にこのデータを取得することによって取得する。いくつかのインプリメンテーションでは、データを受け取るためのモジュール１０２０は、受け取られた情報を処理する。データを受け取るためのモジュール１０２０は次いで、受け取られた情報を出力する（例えば、メモリデバイス１００８にその情報を記憶する、または、装置１０００の別のコンポーネントにその情報を送る）。
【００７５】
[0088]  データが汚染されているかどうか決定するためのモジュール１０２２は、例えば、物理データメモリ内に記憶された値に関連する汚染フラグ（または何らかの他のインジケータ）を読み出すことに関係するいくつかの機能を実施するように適合される回路構成および／またはプログラミング（例えば、記憶媒体１００４上に記憶されたデータが汚染されているかどうか決定するためのコード１０３４）を含み得る。フラグまたはインジケータを取得すると、データが汚染されているかどうか決定するためのモジュール１０２２は、対応するインジケーションを装置１０００の別のコンポーネントに送る。
【００７６】
[0089]  記憶するためのモジュール１０２４は、例えば、物理メモリ位置内の汚染インジケーションおよび／またはデータを記憶することに関係するいくつかの機能を実施するように適合される回路構成および／またはプログラミング（例えば、記憶媒体１００４上に記憶された記憶するためのコード１０３６）を含み得る。データまたはインジケーション（例えば、命令によって生成された）を取得すると、記憶するためのモジュール１０２４は、情報を装置１０００の別のコンポーネントに渡す（例えば、メモリデバイス１００８にインジケーションを記憶する）。
【００７７】
[0090]  命令を呼び出すためのモジュール１０２６は、例えば、データが汚染されているかどうか決定するための命令を呼び出す（例えば、ＴＡＩＮＴＥＤ命令を呼び出す）こと、あるいは、データおよびインジケーションを記憶するための命令を呼び出す（例えば、ＴＡＩＮＴ命令またはＵＮＴＡＩＮＴ命令を呼び出す）ことに関係するいくつかの機能を実施するように適合される回路構成および／またはプログラミング（例えば、記憶媒体１００４上に記憶された命令を呼び出すためのコード１０３８）を含み得る。命令を呼び出すためのモジュール１０２６は、どの命令が呼び出されるかと、その命令のための任意の対応するオペランドとを決定する。命令を呼び出すためのモジュール１０２６は次いで、命令が実行されるようにする（例えば、カーネルがシステムコールを呼び出し得る）。
【００７８】
[0091]  例外を呼び出すためのモジュール１０２８は、例えば、汚染されている値に関連する実行を停止するために例外を呼び出すことに関係するいくつかの機能を実施するように適合される回路構成および／またはプログラミング（例えば、記憶媒体１００４上に記憶された例外を呼び出すためのコード１０４０）を含み得る。例外を呼び出すためのモジュール１０２８は、受け取られた値が汚染されていると決定する。例外を呼び出すためのモジュール１０２８は次いで、例外を引き起こすために命令が呼び出されるべきかどうかと、該当する場合にはその命令のための任意の対応するオペランドとを、決定する。例外を呼び出すためのモジュール１０２８は続いて、（例えば、トラップを設定すること、または中断信号（an interrupt signal）を生成することによって）例外が呼び出されるようにする。
【００７９】
[0092]  動作を実施するためのモジュール１０３０は、例えば、データが汚染されているかどうか決定するための動作を実施することに関係するいくつかの機能を実施するように適合される回路構成および／またはプログラミング（例えば、記憶媒体１００４上に記憶された動作を実施するためのコード１０４２）を含み得る。いくつかのインプリメンテーションでは、動作を実施するためのモジュール１０３０は、データのソースを識別し、そのソースが信用に値するかどうか決定する。動作を実施するためのモジュール１０３０は次いで、データが汚染されているかどうかのインジケーションを生成し、そのインジケーションを出力する（例えば、メモリデバイス１００８にその値を記憶する、または装置１０００の別のコンポーネントにそのインジケーションを送る）。
【００８０】
[0093]  上述したように、記憶媒体１００４によって記憶されたプログラミングは、処理回路１０１０によって実行されると、処理回路１０１０に、ここに説明される様々な機能および／または処理動作のうちの１つまたは複数を実施させる。例えば、記憶媒体１００４は、データを受け取るためのコード１０３２、データが汚染されているかどうか決定するためのコード１０３４、記憶するためのコード１０３６、命令を呼び出すためのコード１０３８、例外を呼び出すためのコード１０４０、および動作を実施するためのコード１０４２のうちの１つまたは複数を含み得る。
【００８１】
［例示的な処理］
[0094]  図１１は、本開示のいくつかの態様によるデータトラッキングのための処理１１００を例示する。処理１１００は、電子デバイスまたは何らかの他の適切な装置に位置し得る処理回路（例えば、図１０の処理回路１０１０）内で行われ得る。言うまでもなく、本開示の範囲内の様々な態様において、処理１１００は、データトラッキング動作をサポートすることができる任意の適切な装置によってインプリメントされ得る。いくつかの態様では、本方法は、データフローコンピュータアーキテクチャ（例えば、ＥＤＧＥアーキテクチャ）においてインプリメントされる。
【００８２】
[0095]  ブロック１１０２において、第１のデータが第１のメモリ位置から受け取られる。いくつかの態様では、第１の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートである。
【００８３】
[0096]  ブロック１１０４において、第１のデータが汚染されているかどうかについての決定が成される。この決定は、第１の物理メモリ位置についての記憶された第１のインジケーション（例えば、汚染フラグ）に基づき得る。
【００８４】
[0097]  ブロック１１０６において、第１のデータに基づく第２のデータが、第２の物理メモリ位置に記憶される。いくつかの態様では、第２のデータは、第１のデータと同じ値を有する。いくつかの態様では、第２のデータは、第１のデータに応じて（as a function of）生成される。
【００８５】
[0098]  ブロック１１０８において、第２の物理メモリ位置についての第２のインジケーションが記憶される。第２のインジケーションは、第２のデータが汚染されているかどうかを示す。
【００８６】
[0099]  いくつかの態様では、この方法は、コンピュータ命令によって実施される。この場合、第１のデータは、コンピュータ命令のためのオペランドであり得、第２のデータは、コンピュータ命令の出力であり得る。加えて、いくつかの態様では、処理１１００はさらに、第３の物理メモリ位置から、コンピュータ命令のための第２のオペランドを受け取ることと、第２のオペランドが汚染されているかどうか決定することであって、ここにおいて、第２のオペランドが汚染されているかどうかの決定は、第３の物理メモリ位置についての記憶された第３のインジケーションに基づく、決定することと、第１のおよび第２のオペランドのうちの少なくとも１つが汚染されている場合、第２のデータが汚染されていると決定することと、を含む。
【００８７】
[00100]  図１２は、本開示のいくつかの態様によるデータトラッキングのための処理１２００を例示する。処理１２００は、電子デバイスまたは何らかの他の適切な装置に位置し得る処理回路（例えば、図１０の処理回路１０１０）内で行われ得る。言うまでもなく、本開示の範囲内の様々な態様において、処理１２００は、データトラッキング動作をサポートすることができる任意の適切な装置によってインプリメントされ得る。
【００８８】
[00101]  ブロック１２０２において、第１の命令が、メモリ位置から第１のデータを受け取る。いくつかの態様では、ブロック１２０２の動作は、図１１のブロック１１０２の動作に対応し得る。
【００８９】
[00102]  ブロック１２０４において、第２の命令が、第１のデータが汚染されているかどうか決定するために呼び出される。例えば、ＴＡＩＮＴＥＤ命令が呼び出され得る。いくつかの態様では、ブロック１２０４の動作は、図１１のブロック１１０４の動作に対応し得る。
【００９０】
[00103]  ブロック１２０６において、第１の命令の実行により、第２のデータが生成される。例えば、第１の命令は、別の命令のためのオペランドを生成し得る。
【００９１】
[00104]  ブロック１２０８において、第３の命令が、第２のデータおよび第２のデータが汚染されているかどうかのインジケーションを記憶するために呼び出される。例えば、ＴＡＩＮＴ命令またはＵＮＴＡＩＮＴ命令が呼び出され得る。いくつかの態様では、ブロック１２０８の動作は、図１１のブロック１１０６および１１０８の動作に対応し得る。
【００９２】
[00105]  図１３は、本開示のいくつかの態様によるデータトラッキングのための処理１３００を例示する。処理１３００は、電子デバイスまたは何らかの他の適切な装置に位置し得る処理回路（例えば、図１０の処理回路１０１０）内で行われ得る。言うまでもなく、本開示の範囲内の様々な態様において、処理１３００は、データトラッキング動作をサポートすることができる任意の適切な装置によってインプリメントされ得る。
【００９３】
[00106]  ブロック１３０２において、第２のデータがメモリ位置から受け取られる。いくつかの態様では、ブロック１３０２の動作は、図１１のブロック１１０２の動作に対応し得る。
【００９４】
[00107]  ブロック１３０４において、第２のデータが汚染されているかどうかについての決定が成される。例えば、ＴＡＩＮＴＥＤ命令が呼び出され得る。いくつかの態様では、ブロック１３０４の動作は、図１１のブロック１１０４の動作に対応し得る。
【００９５】
[00108]  ブロック１３０６において、第２のデータが汚染されているという決定の結果として、例外が呼び出される。例えば、トラップが実行され得る。
【００９６】
[00109]  図１４は、本開示のいくつかの態様によるデータトラッキングのための処理１４００を例示する。処理１４００は、電子デバイスまたは何らかの他の適切な装置に位置し得る処理回路（例えば、図１０の処理回路１０１０）内で行われ得る。言うまでもなく、本開示の範囲内の様々な態様において、処理１４００は、データトラッキング動作をサポートすることができる任意の適切な装置によってインプリメントされ得る。
【００９７】
[00110]  ブロック１４０２において、第２のデータがメモリ位置から受け取られる。いくつかの態様では、ブロック１４０２の動作は、図１１のブロック１１０２の動作に対応し得る。
【００９８】
[00111]  ブロック１４０４において、第２のデータが汚染されているかどうか決定するための動作が実施される。例えば、上述したものと同様な汚染検証動作（taint verification operations）が、ここで実施され得る。
【００９９】
[00112]  ブロック１４０６において、ブロック１４０４の動作が第２のデータは汚染されていないと決定する場合、第２のデータについての汚染インジケーション（例えば、フラグ）をクリアするための命令が呼び出される。
【０１００】
［結論］
[00113]  図に例示されるコンポーネント、ステップ、特徴、および／または機能のうちの１つまたは複数は、単一のコンポーネント、ステップ、特徴、または機能に再配列され得るおよび／または組み合わせられ得るか、または、いくつかのコンポーネント、ステップ、または機能において具現化され得る。追加的な要素、コンポーネント、ステップ、および／または機能もまた、ここに開示された新規の特徴から逸脱することなく、追加され得る。図に例示される装置、デバイス、および／またはコンポーネントは、ここに説明される方法、特徴、または、ステップのうちの１つまたは複数を実施するように構成され得る。ここに説明される新規のアルゴリズムはまた、効率的に、ソフトウェアにおいてインプリメントされ得る、および／またはハードウェアに埋め込まれ得る。
【０１０１】
[00114]  開示された方法におけるステップの固有の順序または階層は、例示的な処理の例示であることは理解されるべきである。設計選好に基づいて、方法におけるステップの固有の順序または階層は、再配列され得ることは理解される。附随の方法の請求項は、サンプルの順序で様々なステップの要素を提示しているのであり、そこに具体的に記載されていない限り、提示された固有の順序または階層に限定されることを意味するものではない。追加的な要素、コンポーネント、ステップ、および／または機能がまた、本開示から逸脱することなく追加され得る、または利用されない可能性がある。
【０１０２】
[00115]  本開示の特徴は、ある特定のインプリメンテーションおよび図に関連して説明されている可能性があるが、本開示のすべてのインプリメンテーションは、本明細書に説明される有利な特徴の１つまたは複数を含むことができる。言い換えれば、１つまたは複数のインプリメンテーションは、ある特定の有利な特徴を有するものとして説明されている可能性があるが、そのような特徴のうちの１つまたは複数はまた、ここで説明された様々なインプリメンテーションのうちのいずれに従っても使用され得る。同様の方法で、例示的なインプリメンテーションが、デバイス、システム、または方法のインプリメンテーションとしてここで説明されている可能性があるが、そのような例示的なインプリメンテーションは、様々なデバイス、システム、および方法においてインプリメントされることができることは理解されるべきである。
【０１０３】
[00116]  また、少なくともいくつかのインプリメンテーションは、フローチャート、フローダイアグラム、構造図、またはブロック図として表される処理として説明されていることに留意されたい。フローチャートは、動作を連続的な処理として説明し得るが、動作の多くのは、並行してまたはコンカレントに実施されることができる。加えて、動作の順序は、再配列され得る。処理は、それの動作が完了するとき、終了する。いくつかの態様では、処理は、方法、関数、プロシージャ、サブルーチン、サブプログラム等に対応し得る。処理が関数に対応するとき、それの終了は、コーリング関数（the calling function）またはメイン関数（the main function）へのその関数の戻りに対応する。ここに説明された様々な方法のうちの１つまたは複数は、機械読み取り可能な、コンピュータ読み取り可能な、および／またはプロセッサ読み取り可能な記憶媒体に記憶され得、１つまたは複数のプロセッサ、機械（machines）および／またはデバイスによって実行され得るプログラミング（例えば、命令および／またはデータ）によって部分的にまたは完全にインプリメントされ得る。
【０１０４】
[00117]  当業者は、ここに開示されたインプリメンテーションに関連して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの任意の組合せとしてインプリメントされ得ることをさらに認識するだろう。この互換性を明確に例示するために、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップは、一般にそれらの機能性の観点から上述されている。そのような機能性が、ハードウェアとしてインプリメントされるかまたはソフトウェアとしてインプリメントされるかは、特定のアプリケーションおよびシステム全体に課せられる設計制約に依存する。
【０１０５】
[00118]  本開示内では、「例示的な（exemplary）」という用語は、「例、事例、または例示としての役割を果たす」という意味で使用される。「例示的」であるとここで説明されたいずれのインプリメンテーションまたは態様も、必ずしも、本開示の他の態様よりも好ましいまたは有利であると解釈されるべきではない。同様に、「態様（aspects）」という用語は、本開示のすべての態様が、説明された特徴、利点または動作のモードを含むことを要求しない。「結合された（coupled）」という用語は、２つのオブジェクト間の直接的なまたは間接的な結合を指すようにここで使用される。例えば、オブジェクトＡが物理的にオブジェクトＢに接触しており、そしてオブジェクトＢがオブジェクトＣに接触している場合、オブジェクトＡおよびＣは、それらが直接的には物理的に互いに接触していなくても、互いに結合されていると考えられ得る。例えば、第１のダイは、第１のダイが直接的には少しも第２のダイと物理的に接触していなくても、パッケージ内の第２のダイに結合され得る。「回路（circuit）」および「回路構成（circuitry）」という用語は、大まかに使用されており（used broadly）、電子回路のタイプに関して限定されることなく、接続および構成されるとき、本開示に説明された機能のパフォーマンスをイネーブルする電気的なデバイスおよびコンダクタのハードウェアインプリメンテーション、ならびに、プロセッサによって実行されるとき、本開示に説明された機能のパフォーマンスをイネーブルする情報および命令のソフトウェアインプリメンテーションの両方を含むように意図されている。
【０１０６】
[00119]  ここで使用される場合、「決定すること（determining）」という用語は、多種多様なアクションを包含する。例えば、「決定すること」は、算出すること（calculating）、計算すること（computing）、処理すること（processing）、導出すること（deriving）、調査すること（investigating）、調べること（looking up）（例えば、表、データベース、または別のデータ構造を調べること）、確かめること（ascertaining）等を含み得る。また、「決定すること」は、受け取ること（receiving）（例えば、情報を受け取ること）、アクセスすること（accessing）（例えば、メモリ内のデータにアクセスすること）等を含み得る。また、「決定すること」は、解決すること（resolving）、選択すること（selecting）、選ぶこと（choosing）、確立すること（establishing）等を含み得る。
【０１０７】
[00120]  先の説明は、当業者が、ここに説明された様々な態様を実施することができるように提供されている。これらの態様に対する様々な変更は、当業者に容易に理解されるものであり、ここに定義された一般的な原理は、他の態様に適用され得る。したがって、特許請求の範囲は、ここに示される態様に限定されるようには意図されておらず、請求項の文言と一致する最大の範囲を認められるべきであり、ここで、ある要素への単数形での言及は、そのように明確に述べられていない限りは、「１つおよび１つのみ」を意味するのではなく、「１つまたは複数」を意味するように意図されている。そうでないとの明確な記載がない限り、「いくつかの（some）」という用語は、１つまたは複数を意味する。複数の項目のリスト「のうちの少なくとも１つ」に言及する表現は、単一のメンバ（single members）を含む、それらの項目のいかなる組合せも指す。例として、「ａ、ｂ、またはｃのうちの少なくとも１つ」は、ａ、ｂ、ｃ、ａおよびｂ、ａおよびｃ、ｂおよびｃ、ならびにａ、ｂおよびｃをカバーするように意図されている。当業者に知られている、あるいは後に知られることになる本開示全体にわたって説明された様々な態様の要素に対するすべての構造的および機能的な同等物は、参照によってここに明確に組み込まれ、特許請求の範囲に包含されるように意図されている。さらに、本明細書におけるいかなる開示も、そのような開示が特許請求の範囲に明確に記載されているか否かに関わらず、公に捧げられることを意図したものではない。特許請求の範囲のいずれの要素も、その要素が「〜のための手段（means for）」という表現を使用して明示的に記載されていない限り、または、方法の請求項の場合には、この要素が「〜のためのステップ（step for）」という表現を使用して記載されていない限り、米国特許法第１１２条６項の規定の下で解釈されるべきではない。
【０１０８】
[00121]  したがって、ここに説明されたおよび添付の図面に示された例に関連する様々な特徴は、本開示の範囲から逸脱することなく異なる例およびインプリメンテーションにおいてインプリメントされることができる。故に、ある特定の具体的な構造（construction）および配列が説明されているおよび添付の図面に示されているが、説明されたインプリメンテーションへの様々な他の追加および修正、ならびにそれらからの削除は当業者に明らかとなるので、そのようなインプリメンテーションは、単に例示的なものであり、本開示の範囲を制限するものではない。したがって、本開示の範囲は、以下の特許請求の範囲のリテラルな言語および法的な同等物によってのみ決定される。
【図１】
2018508883.tif 000003
【図２】
2018508883.tif 000004
【図３】
2018508883.tif 000005
【図４】
2018508883.tif 000006
【図５】
2018508883.tif 000007
【図６】
2018508883.tif 000008
【図７】
2018508883.tif 000009
【図８】
2018508883.tif 000010
【図９】
2018508883.tif 000011
【図１０】
2018508883.tif 000012
【図１１】
2018508883.tif 000013
【図１２】
2018508883.tif 000014
【図１３】
2018508883.tif 000015
【図１４】
2018508883.tif 000016
【手続補正書】
【提出日】平成29年10月6日(2017.10.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ管理のための方法であって、
第１の物理メモリ位置から第１のデータを受け取ることと、ここにおいて、前記第１のデータは、コンピュータ命令のためのオペランドを備え、前記第１のデータは、前記コンピュータ命令のための実行フローの間に受け取られる、
前記第１のデータが汚染されているかどうか決定し、前記第１のデータが信用できないことを示すことと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、ここにおいて、前記第２のデータは、前記コンピュータ命令の出力を備える、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示し、前記第２のデータが信用できないことを示す、
を備える、方法。
【請求項２】
前記方法は、データフローコンピュータアーキテクチャにおいてインプリメントされる、請求項１に記載の方法。
【請求項３】
前記データフローコンピュータアーキテクチャは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャである、請求項２に記載の方法。
【請求項４】
前記第２のデータは、前記第１のデータと同じ値を有する、または前記第２のデータは、前記第１のデータに応じて生成される、請求項１に記載の方法。
【請求項５】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項１に記載の方法。
【請求項６】
前記第１のデータが汚染されているかどうか決定するための命令を呼び出すことをさらに備える、請求項１に記載の方法。
【請求項７】
前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すことをさらに備える、請求項１に記載の方法。
【請求項８】
第３の物理メモリ位置から、前記コンピュータ命令のための第２のオペランドを受け取ることと、
前記第２のオペランドが汚染されているかどうか決定することと、ここにおいて、前記第２のオペランドが汚染されているかどうかの前記決定は、前記第３の物理メモリ位置についての記憶された第３のインジケーションに基づく、
前記第１のおよび第２のオペランドのうちの少なくとも１つが汚染されている場合、前記第２のデータが汚染されていると決定することと、
をさらに備える、請求項１に記載の方法。
【請求項９】
前記第２のデータを受け取ることと、
前記第２のデータが汚染されていると決定することと、
前記第２のデータが汚染されているという前記決定の結果として、例外を呼び出すことと、
をさらに備える、請求項１に記載の方法。
【請求項１０】
前記第２のデータを受け取ることと、
前記第２のデータが汚染されているかどうか決定するための動作を実施することと、
前記動作が、前記第２のデータは汚染されていないと決定する場合、前記第２のデータについての汚染インジケーションをクリアするための命令を呼び出すことと、
をさらに備える、請求項１に記載の方法。
【請求項１１】
データ管理のための装置であって、
少なくとも１つのメモリ回路と、
前記少なくとも１つのメモリ回路に結合された処理回路と、
を備え、前記処理回路は、
前記少なくとも１つのメモリ回路の第１の物理メモリ位置から第１のデータを受け取ることと、ここにおいて、前記第１のデータは、コンピュータ命令のためのオペランドを備え、前記第１のデータは、前記命令のための実行フローの間に受け取られる、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、前記少なくとも１つのメモリ回路の第２の物理メモリ位置に記憶することと、ここにおいて、前記第２のデータは、前記コンピュータ命令の出力を備える、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示し、前記第２のデータが信用できないことを示す、
を行うように構成される、装置。
【請求項１２】
前記装置は、データフローコンピュータアーキテクチャにおいてインプリメントされる、請求項１１に記載の装置。
【請求項１３】
前記データフローコンピュータアーキテクチャは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャである、請求項１２に記載の装置。
【請求項１４】
前記第２のデータは、前記第１のデータと同じ値を有する、または前記第２のデータは、前記第１のデータに応じて生成される、請求項１１に記載の装置。
【請求項１５】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項１１に記載の装置。
【請求項１６】
前記処理回路は、前記第１のデータが汚染されているかどうか決定するための命令を呼び出すようにさらに構成される、請求項１１に記載の装置。
【請求項１７】
前記処理回路は、前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すようにさらに構成される、請求項１１に記載の装置。
【請求項１８】
前記処理回路は、
前記第２のデータを受け取ることと、
前記第２のデータが汚染されていると決定することと、
前記第２のデータが汚染されているという前記決定の結果として、例外を呼び出すことと、
を行うようにさらに構成される、請求項１１に記載の装置。
【請求項１９】
前記処理回路は、
前記第２のデータを受け取ることと、
前記第２のデータが汚染されているかどうか決定するための動作を実施することと、
前記動作が、前記第２のデータは汚染されていないと決定する場合、前記第２のデータについての汚染インジケーションをクリアするための命令を呼び出すことと、
を行うようにさらに構成される、請求項１１に記載の装置。
【請求項２０】
データ管理のための装置であって、
第１の物理メモリ位置から第１のデータを受け取るための手段と、ここにおいて、前記第１のデータは、命令のためのオペランドを備え、前記第１のデータは、前記命令のための実行フローの間に受け取られる、
前記第１のデータが汚染されているかどうか決定するための手段と、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶するための手段と、ここにおいて、前記第２のデータは、前記コンピュータ命令の出力を備える、
前記第２の物理メモリ位置についての第２のインジケーションを記憶するための手段と、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示し、前記第２のデータが信用できないことを示す、
を備える、装置。
【請求項２１】
前記装置は、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャにおいてインプリメントされる、請求項２０に記載の装置。
【請求項２２】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項２０に記載の装置。
【請求項２３】
前記第１のデータが汚染されているかどうか決定するための命令を呼び出すための手段をさらに備える、請求項２０に記載の装置。
【請求項２４】
前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すための手段をさらに備える、請求項２０に記載の装置。
【請求項２５】
コンピュータ実行可能コードを記憶する非一時的なコンピュータ読み取り可能な媒体であって、前記コードは、
第１の物理メモリ位置から第１のデータを受け取ることと、ここにおいて、前記第１のデータは、命令のためのオペランドを備え、前記第１のデータは、前記命令のための実行フローの間に受け取られる、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、ここにおいて、前記第２のデータは、前記コンピュータ命令の出力を備える、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示し、前記第２のデータが信用できないことを示す、
を行うためのコードを含む、コンピュータ読み取り可能な媒体。
【請求項２６】
前記コードは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャのためのものである、請求項２５に記載のコンピュータ読み取り可能な媒体。
【請求項２７】
前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、請求項２５に記載のコンピュータ読み取り可能な媒体。
【請求項２８】
前記第１のデータが汚染されているかどうか決定するための命令を呼び出すためのコードをさらに備える、請求項２５に記載のコンピュータ読み取り可能な媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１０８
【補正方法】変更
【補正の内容】
【０１０８】
[00121]  したがって、ここに説明されたおよび添付の図面に示された例に関連する様々な特徴は、本開示の範囲から逸脱することなく異なる例およびインプリメンテーションにおいてインプリメントされることができる。故に、ある特定の具体的な構造（construction）および配列が説明されているおよび添付の図面に示されているが、説明されたインプリメンテーションへの様々な他の追加および修正、ならびにそれらからの削除は当業者に明らかとなるので、そのようなインプリメンテーションは、単に例示的なものであり、本開示の範囲を制限するものではない。したがって、本開示の範囲は、以下の特許請求の範囲のリテラルな言語および法的な同等物によってのみ決定される。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[Ｃ１]  データ管理のための方法であって、
第１の物理メモリ位置から第１のデータを受け取ることと、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を備える、方法。
[Ｃ２]  前記方法は、データフローコンピュータアーキテクチャにおいてインプリメントされる、Ｃ１に記載の方法。
[Ｃ３]  前記データフローコンピュータアーキテクチャは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャである、Ｃ２に記載の方法。
[Ｃ４]  前記第２のデータは、前記第１のデータと同じ値を有する、または前記第２のデータは、前記第１のデータに応じて生成される、Ｃ１に記載の方法。
[Ｃ５]  前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、Ｃ１に記載の方法。
[Ｃ６]  前記第１のデータが汚染されているかどうか決定するための命令を呼び出すことをさらに備える、Ｃ１に記載の方法。
[Ｃ７]  前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すことをさらに備える、Ｃ１に記載の方法。
[Ｃ８]  前記方法は、コンピュータ命令によって実施され、
前記第１のデータは、前記コンピュータ命令のための第１のオペランドを備え、
前記第２のデータは、前記コンピュータ命令の出力を備える、Ｃ１に記載の方法。
[Ｃ９]  第３の物理メモリ位置から、前記コンピュータ命令のための第２のオペランドを受け取ることと、
前記第２のオペランドが汚染されているかどうか決定することと、ここにおいて、前記第２のオペランドが汚染されているかどうかの前記決定は、前記第３の物理メモリ位置についての記憶された第３のインジケーションに基づく、
前記第１のおよび第２のオペランドのうちの少なくとも１つが汚染されている場合、前記第２のデータが汚染されていると決定することと、
をさらに備える、Ｃ８に記載の方法。
[Ｃ１０]  前記第２のデータを受け取ることと、
前記第２のデータが汚染されていると決定することと、
前記第２のデータが汚染されているという前記決定の結果として、例外を呼び出すことと、
をさらに備える、Ｃ１に記載の方法。
[Ｃ１１]  前記第２のデータを受け取ることと、
前記第２のデータが汚染されているかどうか決定するための動作を実施することと、
前記動作が、前記第２のデータは汚染されていないと決定する場合、前記第２のデータについての汚染インジケーションをクリアするための命令を呼び出すことと、
をさらに備える、Ｃ１に記載の方法。
[Ｃ１２]  データ管理のための装置であって、
少なくとも１つのメモリ回路と、
前記少なくとも１つのメモリ回路に結合された処理回路と、
を備え、前記処理回路は、
前記少なくとも１つのメモリ回路の第１の物理メモリ位置から第１のデータを受け取ることと、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、前記少なくとも１つのメモリ回路の第２の物理メモリ位置に記憶することと、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を行うように構成される、装置。
[Ｃ１３]  前記装置は、データフローコンピュータアーキテクチャにおいてインプリメントされる、Ｃ１２に記載の装置。
[Ｃ１４]  前記データフローコンピュータアーキテクチャは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャである、Ｃ１３に記載の装置。
[Ｃ１５]  前記第２のデータは、前記第１のデータと同じ値を有する、または前記第２のデータは、前記第１のデータに応じて生成される、Ｃ１２に記載の装置。
[Ｃ１６]  前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、Ｃ１２に記載の装置。
[Ｃ１７]  前記処理回路は、前記第１のデータが汚染されているかどうか決定するための命令を呼び出すようにさらに構成される、Ｃ１２に記載の装置。
[Ｃ１８]  前記処理回路は、前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すようにさらに構成される、Ｃ１２に記載の装置。
[Ｃ１９]  前記処理回路は、コンピュータ命令を実行するようにさらに構成され、
前記第１のデータは、前記コンピュータ命令のためのオペランドを備え、
前記第２のデータは、前記コンピュータ命令の出力を備える、Ｃ１２に記載の装置。
[Ｃ２０]  前記処理回路は、
前記第２のデータを受け取ることと、
前記第２のデータが汚染されていると決定することと、
前記第２のデータが汚染されているという前記決定の結果として、例外を呼び出すことと、
を行うようにさらに構成される、Ｃ１２に記載の装置。
[Ｃ２１]  前記処理回路は、
前記第２のデータを受け取ることと、
前記第２のデータが汚染されているかどうか決定するための動作を実施することと、
前記動作が、前記第２のデータは汚染されていないと決定する場合、前記第２のデータについての汚染インジケーションをクリアするための命令を呼び出すことと、
を行うようにさらに構成される、Ｃ１２に記載の装置。
[Ｃ２２]  データ管理のための装置であって、
第１の物理メモリ位置から第１のデータを受け取るための手段と、
前記第１のデータが汚染されているかどうか決定するための手段と、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶するための手段と、
前記第２の物理メモリ位置についての第２のインジケーションを記憶するための手段と、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を備える、装置。
[Ｃ２３]  前記装置は、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャにおいてインプリメントされる、Ｃ２２に記載の装置。
[Ｃ２４]  前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、Ｃ２２に記載の装置。
[Ｃ２５]  前記第１のデータが汚染されているかどうか決定するための命令を呼び出すための手段をさらに備える、Ｃ２２に記載の装置。
[Ｃ２６]  前記第２のデータおよび前記第２のインジケーションを記憶するための命令を呼び出すための手段をさらに備える、Ｃ２２に記載の装置。
[Ｃ２７]  コンピュータ実行可能コードを記憶する非一時的なコンピュータ読み取り可能な媒体であって、前記コードは、
第１の物理メモリ位置から第１のデータを受け取ることと、
前記第１のデータが汚染されているかどうか決定することと、ここにおいて、前記決定は、前記第１の物理メモリ位置についての記憶された第１のインジケーションに基づく、
前記第１のデータに基づく第２のデータを、第２の物理メモリ位置に記憶することと、
前記第２の物理メモリ位置についての第２のインジケーションを記憶することと、ここにおいて、前記第２のインジケーションは、前記第２のデータが汚染されているかどうかを示す、
を行うためのコードを含む、コンピュータ読み取り可能な媒体。
[Ｃ２８]  前記コードは、ＥＤＧＥ（Ｅｘｐｌｉｃｉｔ  Ｄａｔａ  Ｇｒａｐｈ  Ｅｘｅｃｕｔｉｏｎ）アーキテクチャのためのものである、Ｃ２７に記載のコンピュータ読み取り可能な媒体。
[Ｃ２９]  前記第１のおよび第２の物理メモリ位置は、物理レジスタ、物理メモリのページ、または物理入力／出力（Ｉ／Ｏ）ポートのうちの少なくとも１つを備える、Ｃ２７に記載のコンピュータ読み取り可能な媒体。
[Ｃ３０]  前記第１のデータが汚染されているかどうか決定するための命令を呼び出すためのコードをさらに備える、Ｃ２７に記載のコンピュータ読み取り可能な媒体。
【国際調査報告】
2018508883.tif 000017
2018508883.tif 000018
2018508883.tif 000019