JP5128484B2 - 静的に検証可能なプロセス間通信の分離プロセス - Google Patents

静的に検証可能なプロセス間通信の分離プロセス Download PDF

Info

Publication number
JP5128484B2
JP5128484B2 JP2008537768A JP2008537768A JP5128484B2 JP 5128484 B2 JP5128484 B2 JP 5128484B2 JP 2008537768 A JP2008537768 A JP 2008537768A JP 2008537768 A JP2008537768 A JP 2008537768A JP 5128484 B2 JP5128484 B2 JP 5128484B2
Authority
JP
Japan
Prior art keywords
channel
endpoint
message
communication channel
ownership
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.)
Expired - Fee Related
Application number
JP2008537768A
Other languages
English (en)
Other versions
JP2009514098A (ja
JP2009514098A5 (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009514098A publication Critical patent/JP2009514098A/ja
Publication of JP2009514098A5 publication Critical patent/JP2009514098A5/ja
Application granted granted Critical
Publication of JP5128484B2 publication Critical patent/JP5128484B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer And Data Communications (AREA)
  • Stored Programmes (AREA)
  • Hardware Redundancy (AREA)

Description

本発明は、静的に検証可能なプロセス間通信の分離プロセスに関する。
一部のオペレーティングシステム(OS)は、プロセス分離(process isolation)およびプロセス間通信(inter-process communication)を提供する。OSは、あるプロセスが、データまたは別のプロセスの実行命令にアクセスまたは破壊できないように、そのプロセスを分離しようとする。加えて、分離により、他のプロセスからの協力なしに、プロセスを終了させてそのリソースを再利用するための明確な境界が提供される。プロセス間通信により、プロセスは、データを交換し、シグナル通知をすることができる。
しかし、プロセス間の分離と通信の間には自然の引張(natural tension)がある。典型的に、プロセスが互いからより分離されるほど、プロセスが互いに通信することは、より複雑で高価になる可能性がある。逆に、プロセスが互いからあまり分離されないほど、プロセスが互いに通信することはより簡単になる。
例えば、メモリを共有するプロセスは、低い程度の分離であるとみなすことができる。共有メモリプロセスは典型的に、共有メモリを直接読み書きすることによる、明らかに単純な方法で通信することができる。他方、プロセスがメモリを共有することをOSが許可しない場合、OSは典型的に、プロセスが情報を交換するための何らかのメカニズムを提供する。
パフォーマンスの考慮を尊重すると、分離と通信との間のトレードオフは、従来、分離の利点を犠牲にする手法で解決される。特に、従来のOSは、プロセス間でメモリの共有を可能にすることが多い。したがって、OSはさらに、同じプロセスの内にコンポーネントを同一場所に配置して、通信を最大化する。このように同一場所に配置されるものの例には、デバイスドライバ、ブラウザ拡張、およびウェブサービスプラグインがある。このようなコンポーネントに対するアクセスの容易さのためにプロセス分離を避けることは、障害分離および明確なリソース管理などの分離の利点の多くを、複雑にし、または損なう可能性がある。あるコンポーネントに障害が起こると、その障害は、共有メモリを、残りのコンポーネントを動作不能な状態にする可能性のある、矛盾または破損した状態のままにすることが多い。
反対に、真に分離したプロセスは当然、分離の利点を享受する。しかし、そのような分離プロセスは従来、プロセス間通信が困難であった。
本明細書では、静的に検証可能な、分離プロセス間のプロセス間通信を提供するオペレーティングシステムの1つまたは複数の実装を説明する。また、本明細書では、静的に検証可能な、プロセス間通信を有する分離プロセスの開発を促進するプログラミングツールの1つまたは複数の実装を説明する。
本要約は、以下の「発明を実施するための最良の形態」でさらに説明される概念の選択を、簡略化した形式で紹介するために提供される。本要約は、特許請求される主題の主要な特徴または本質的な特徴を特定することは意図されておらず、特許請求される主題の範囲を定めるための助けとして使用されることも意図されていない。
同じ参照番号は、図面通じて、同様の要素または特徴を指すのに使用される。
以下の記述は、プロセス間通信のための機能を有する分離プロセスを提供するOSについて説明する。説明されるOSの分離プロセスの分離は、静的に検証可能である。分離プロセスの実行可能命令を、コンパイル時か実行時、またはその両方で検証することができる。また、静的に検証可能な分離プロセス間のプロセス間通信の開発を促進する1つまたは複数のプログラミング言語ツールを、本明細書で説明する。
静的に検証可能なプロセスとは、実際にそのプロセスの命令を実行することなく自己の実行可能命令を分析することができるソフトウェアプロセスである。その分析により、プロセスが、許可されない振舞いをしないこと、および/または他のプロセスもしくはオペレーティングシステム自体の操作を妨害しないことが保証される。
本明細書で説明される1つまたは複数の実装は、ソフトウェアがより良く構築される可能性が高く、プログラムの振舞いの検証が容易であり、実行時の障害を抑制し軽減することができる環境を作るために、プログラミング言語ツールを使用する。本明細書で説明される1つまたは複数の実装の特徴の一部は、以下を含む(しかし、これらに限定されるものではない)。
・データは、各チャネルが厳密に2つのエンドポイントから成る双方向チャネル上で、交換される。任意の時点で、各チャネルエンドポイントは、単一のスレッドによって所有される(すなわち、単一のプロセスが所有する)。
・バッファおよび他のメモリデータ構造は、そのバッファ内およびメモリデータ構造内に含まれるデータをコピーすることによってではなく、ポインタによって転送される。これらの転送は、メモリブロックの所有権(ownership)を渡す。
・チャネル通信は、メッセージ、メッセージの引数の型、および有効なメッセージインタラクションのシーケンスを、セッション型と類似の有限状態マシンとして記述する、静的に検証可能なチャネル規約(channel contracts)によって規定される。
・チャネルエンドポイントを、メッセージでチャネルを介して送信することができる。したがって、通信ネットワークは、動的に発展することがある。
・チャネル上の送受信は、メモリ割り当てを必要としない。
・送信は、ノンブロッキングかつノンフェーリング(non-failing)である。ノンブロッキングは、送信側は通信の成功を待たないことを意味する。ノンフェーリングは、通信は、常に最終的には成功することを意味する。本実装では、定義によってこれを達成する。すなわち、送信操作は、結果を待つことなく完了する。(しかし、「チャネル」は失敗する可能性があり、チャネル上で受信するときにこれを監視することができる)。
(例示的なオペレーティングシステムおよびプログラミングツール)
図1は、静的に検証可能なプロセス間通信ソフトウェア分離プロセス(SIP:Software-Isolated Process)と、そのような静的に検証可能なプロセス間通信SIPのプログラミングを促進するプログラミングツールの使用とをサポートする例示的な動作シナリオを示す。
図1は、コンピュータ120のメモリ110内に格納されるおよび/またはコンピュータ120のメモリ110内で実行中の、オペレーティングシステム100およびプログラミングツール160を示す。コンピュータ120は典型的に、(メモリ110を含め)様々なプロセッサ読み取り可能な媒体を含む。このような媒体は、コンピュータ120によってアクセス可能な任意の利用可能な媒体とすることができ、揮発性および不揮発性媒体、取り外し可能および取り外し不能媒体の両方を含む。
コンピュータ120は、ロードモジュールのセット124と、(メモリ110の一部、またはメモリ110とは別個にすることができる)作業メモリ130とを格納するコンピュータストレージデバイス122(例えば、ハードドライブ、RAIDシステムなど)を含む。
作業メモリ130は、(作業メモリ130内の位置へのポインタなどの)情報を保持するのに使用されるバッファである、交換ヒープ132も含む。本明細書では、交換ヒープは、「バッファ」、「共有交換バッファ」、またはこれらと同等の何かと呼ばれることがある。(ブロック134によって示されるように)ヒープは、複数のアドレス可能なメモリブロックを含む。交換ヒープ132は全体として、複数のプロセスによってアクセス可能であるが、個々のブロックそれぞれは、(そのブロックが使用中のとき)同時に1つのプロセスによって所有される。しかし、メモリブロックの所有権は、別のアクティブなプロセスと交換されることがある。したがって、このように、交換ヒープ132は、SIPに、データを交換するためのメカニズムを提供する。
示されるように、オペレーティングシステム100は、プロセスコンストラクタ(process constructor)150モジュールを備える。プロセスコンストラクタは、オペレーティングシステム100のカーネルの一部とすることができる。プロセスコンストラクタ150は、典型的にコンピュータストレージに格納されたロードモジュールセットとして明示される構成コンポーネント(constituent components)の動的なセットから、コンピュータの作業メモリ内のプロセスを構築する。
図1における例では、プロセスコンストラクタ150は、作業メモリ130に格納されるプロセス140を構築する。ここで示されるように、プロセス140は、プロセスの拡張コンポーネントによって編集されるプロセスの構成コンポーネントの明示(manifestation)であるロードモジュール124から、構築される。
プロセス140は、プロセス140のコンテンツ、プロセスの許可された振る舞い、およびプロセスの他の可能性のある特性(properties)を定義する、プロセスマニフェスト(process manifest)142を有する。ここで示されるように、プロセスマニフェスト142は、プロセスマニフェスト142がその構成を記述する(プロセス140などの)プロセスと直接関連付けられる。
プログラミングツール160は、モジュールおよびデータ構造を備える。これらとともに、プログラミングツール160は、静的変数と、定義および制限されたプロセスのプロセス間通信を有する分離プロセスとの作成において、プロセスを開発する者を助ける。プログラミングツール160は、コンパイル時、実行時、または両方の時点で施行される強い不変条件(strong invariants)を使用することによって本開発を促進する。強い不変条件について、「検証」の節で後述する。
プログラミングツール160は、プログラマが、時間のかかるテストおよびデバッグをせずに、プロセス間通信のエラーを発見、修正、および/または回避することを助ける、静的分析ツールを提供する。決定論的な静的事前計算分析ツール(deterministic static pre-computation analysis tool)の効率性および適用性を向上させることによって、プログラミングツール160は、プログラマまたはプログラマ集団が、プロセス間通信関連のエラーがないプログラムまたはプログラムのセットを作成する可能性をさらに向上させ、そのようなプログラムまたはプログラムのセットを作成するのに必要とされる、テストおよびデバッグする労力をさらに減少させる。
説明されたプログラミングツール(例えば、図1のプログラミングツール160)は、(本明細書で説明されるように)開発者のSIPの使用および生成を促進するプログラミング構成およびアプローチを使用する。説明されたプログラミングツールを使用して、SIP通信を静的に検証することができる。
(ソフトウェア分離プロセス)
コンピュータ科学の分野、より詳細にはオペレーティングシステムの分野では、「ソフトウェアプロセス」(または、より単純には「プロセス」)という用語は、よく知られている。アプリケーションは、1つまたは複数のプロセスから成ることが多い。OSは、コンピュータ上で実行中の1つまたは複数の別個のプロセスを認識し、実際には、管理および監視することがある。
本明細書では、SIP抽象化モデル(SIP abstraction model)を提供および/またはサポートするOSモデル内で動作する、1つまたは複数の実装を説明する。SIPは、プログラムまたはシステムの部分をカプセル化し、情報の隠蔽、障害の分離、および強いインタフェースを提供する。SIPは、説明される実装にしたがって、OSおよびアプリケーションソフトウェアを通じて使用される。
SIPでは、カーネルの外部の実行可能コードは、あるSIP内で実行して、強く型付けされた通信チャネルを通して通信する。SIPは、データ共有または動的なコードローディングを許容しない、閉じた環境である。SIPは、従来のOSのプロセスとは多くの点で異なる。以下は、SIPが従来のOSのプロセスと異なる点の例である。
・SIPは、閉じたオブジェクト空間であり、アドレス空間ではない。2つのSIPは、同時にオブジェクトにアクセスすることができない。プロセス間の通信は、排他的なデータ所有権を転送する。
・SIPは、閉じたコード空間でもある。プロセスは、動的にコードをロードまたは生成しない。
・SIPは、分離に関してメモリ管理ハードウェアに依拠せず、したがって、複数のSIPは、物理または仮想アドレス空間内に存在することができる。
・SIP間の通信は、双方向であり強く型付けされた高次のチャネルを通して行われる。チャネルの型は、チャネルの通信プロトコル、ならびにチャネルが転送する値を記述し、両方の態様が検証される。
・SIPは、作成が安価であり、SIP間の通信が受けるオーバヘッドは低い。この低コストにより、SIPを、細かい分離および拡張メカニズムとして使用することが現実的になる。
・SIPは、オペレーティングシステムによって作成および管理され、その結果、終了時にSIPのリソースを、効率的に再利用することができる。
・SIPは、異なるデータレイアウト、ランタイムシステム、およびガーベジコレクタを有する範囲にいたるまで、独立した実行環境を有する。他の安全な言語システムは、1つの実行環境をサポートする。
「ソフトウェア分離プロセス」または「SIP」という用語は、本明細書では便宜上使用される。この用語は、本概念の範囲を限定することは意図されていない。実際、本概念を、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せで実装することができる。
(プロセス間通信)
図2は、SIP間の予期せぬインタラクション(unanticipated interaction)なしにプロセス間通信を促進する例示的なプロセス間通信(IPC:inter-process communication)アーキテクチャ200を示す。プロセスの間の通信を提供することに加えて、例示的なIPCアークテクチャ200は、プロセスとオペレーティングシステムのカーネルとの間の通信を提供することができる。
例示的なIPCアーキテクチャ200により、SIPは、双方向であり2つのプロセスの間で振舞いから型付けされた接続(behaviorally typed connection)であるチャネル上で、メッセージを送信することによって、排他的に通信する。メッセージは、送信側から受信プロセスに転送される、(上記の図1の交換ヒープ132などの)「交換ヒープ」内の値またはメッセージブロックのタグ付けされたコレクションである。チャネルは、チャネルに沿ったメッセージのフォーマットと有効なメッセージシーケンスとを指定する規約によって型付けされる。
図2に示されるように、例示的なIPCアーキテクチャ200は、メモリ210(例えば、揮発性、不揮発性、取り外し可能、取り外し不能など)で構成されるコンピュータ202上に実装される。OS212は、メモリ210内に格納され、コンピュータ202上で実行されるように示される。
OS212は、カーネル220を有する。OSのカーネル220は、IPCファシリテータ(facilitator)222を組み込む。OSのカーネル220は、1つまたは複数のプロセスを構築することができる。図2は、例えばメモリ210内で実行中の3つのアクティブなプロセス(230、240、および250)を示す。
IPCファシリテータ222は、(プロセス230、240、および250などの)アクティブなプロセス間の通信を促進する。図2は、IPCファシリテータ222を実装するOSのカーネル220を図示するが、他の実装は、OSのカーネルの外部にあるIPCファシリテータを有することができる。その場合、それぞれが協調して動作し、および/またはOSと連携して動作するであろう。
メモリ210は、複数のメモリブロック292を有する交換ヒープ290も含む。交換ヒープ290は、(プロセス230、240、および250などの)複数のアクティブなプロセスによってアクセス可能である。交換ヒープ290は、SIPに、データを交換するためのメカニズムを提供する。
“Inter-Process Communications Employing Bi-directional Message Conduits”は、本明細書で説明した1つまたは複数の実装に適する、例示的なIPCアーキテクチャ200に関するさらなる詳細を開示している。
(交換ヒープ)
各SIPは、自己の独立した専用のヒープを維持する。SIPは、互いにメモリを共有しない。したがって、データが、あるSIPから別のSIPに渡されるとき、その渡されたデータは、プロセスの専用ヒープ(private heap)からは来ない。代わりに、そのデータは、プロセス間で移動可能なデータの保持に使用される別個のヒープから来る。その別個のヒープは、図1に示される交換ヒープ132または図2に示される交換ヒープ290などの、交換ヒープである。
SIPは、自己の専用ヒープへのポインタを含むことができる。加えて、SIPは、共用交換ヒープ(public exchange heap)へのポインタを有することができる。少なくとも1つの説明された実施形態では、交換ヒープは、交換ヒープ自身へのポインタを含むのみである。各SIPは、交換ヒープへの複数のポインタを保持することができる。しかし、交換ヒープ内の各メモリブロックは、システムの実行の間の任意の時点において、多くても1つのSIPによって所有される(すなわち、アクセス可能である)。
静的検証を実施するとき、プログラミングツール160は、交換ヒープ内のメモリブロックの所有権を追跡することができるが、各ブロックが、任意の時点で多くても1つのプロセスによって所有されるためである。交換ヒープ内の各ブロックが任意の時点で単一のプロセスによってアクセス可能であるという事実は、有用な相互排他の保証(mutual exclusion guarantee)も提供する。
(チャネル)
IPCアーキテクチャ200では、チャネルは、厳密に2つのエンドポイントから成る双方向のメッセージコンジット(message conduit)である。エンドポイントは、チャネルピアと呼ばれることもある。チャネルは、損失を少なく(loss-lessly)かつ順番にメッセージを送達する。また、メッセージは典型的に、送信された順序で取り出される。意味的に、各エンドポイントは、受信キューを有し、エンドポイント上の送信側は、ピアのキュー上のメッセージを待ち行列に入れる。
チャネルは、チャネル規約によって記述される。換言すると、各チャネルの規約は、そのチャネル上でプロセス間通信の制約を指定する。例えば、規約は、プロセスが通信できる他のプロセスと、そのような通信が発生する方法とを指定することができる。チャネルの2つのエンドは、典型的に対称ではない。説明の目的で本明細書では、一方のエンドポイントをインポーティングエンド(Imp)と呼び、他方をエクスポーティングエンド(Exp)と呼ぶ。これらを、それぞれ、型C.ImpおよびC.Expを使用して型レベルで区別するが、Cは、インタラクションを規定するチャネル規約である。
図2は、チャネルを、電気プラグ、コード、およびコンセントとして比喩的に図示する。少なくとも1つの説明された実装では、チャネルは、厳密に2つのみのエンドポイントを有し、各エンドポイントは、多くても1つのプロセスによって所有される。示されるように、チャネル260は、プロセス230とOSのカーネル220を連結(link)し、2つのエンドポイント262および264のみを有する。チャネル270は、プロセス240とプロセス250とを連結し、2つのエンドポイント272および274のみを有する。チャネル280は、最初にプロセス250を自身に連結するが、それでも2つのエンドポイント282および284を有するのみである、新規に形成されたチャネルである。
これらのチャネルは、厳密に2つの(エンドポイントを表す)「プラグ」を有する「電気コード」のグラフィックメタファによって表される。電気を通すのではなく、これらの「コード」は、「コード」が差し込まれる場合に、各参加者(participant)によって(「双方的に」)送受信されるメッセージを通す。この双方向のメッセージパッシングは、チャネル270の隣にある方向を示す封筒(directional envelope)によって図示されている。
IPCアーキテクチャ200は、メッセージパッシングIPC通信メカニズムを提供する。(一部の従来のアプローチにあるように)何らかの共有メモリの適時な読み書きを使用する代わりに、IPCアーキテクチャ200は、プロセス間通信をメッセージの送受信に制限する。
従来的なOSのメッセージパッシングのアプローチは、1つの送信側と複数の受信側、または複数の送信側と1つの受信側のいずれかを有することが多い一方向のメカニズムである。これらの従来的なアプローチと異なり、IPCアーキテクチャ200のチャネルは、厳密に2つのエンドポイントと多くても2つの参加者とを有する二方向のメカニズムである。
このことは、図2のチャネル260およびチャネル270によって図示されている。チャネル260は、プロセス230とOSのカーネル220を連結し、これら2つを連結するのみである。チャネル270は、プロセス240とプロセス250を連結し、これら2つを連結するのみである。
図2に図示されるように、双方向IPCチャネルのそれぞれは、厳密に2つのチャネルエンドポイントを有する。各チャネルエンドポイントは、同時に多くても1つのプロセスによって所有される。例えば、一方のチャネルエンドポイントは、あるプロセスによって所有され、他方のチャネルエンドポイントは、別のプロセスによって所有されるか、またはオペレーティングシステムのカーネルによって所有される。エンドポイントは、チャネル上で転送されることがある。それを行う際、これらのエンドポイントの所有権が転送される。
IPCファシリテータ222は、各メッセージおよび各メッセージのカプセル化が、任意の瞬間に、多くても1つのプロセスによって所有されることを保証する。チャネルレベルの抽象化を各チャネルに使用することによって、このことを実現することができる。さらに、チャネルの抽象化レベルでは、メッセージは、任意の瞬間に多くても1つのプロセスのアクセス可能なメモリ内に存在する。通信プロセス(communicating process)の観点からすると、メッセージ内部に含まれる状態またはメッセージからアクセス可能な状態が、共有されることはない。少なくとも1つの説明した実装では、メッセージは、送信されるまではメッセージ作成者のみによってアクセス可能である。少なくとも1つの説明した実装では、メッセージは、受信された後にメッセージ受信者のみによってアクセス可能である。
(所有権)
チャネル上で転送されるエンドポイントと他のデータとのメモリ分離は、コンパイル時に交換ヒープ内の全てのブロックを追跡することによって保証される。特に静的チェックは、これらのリソースがリソースを所有するプログラムポイントで発生し、方法がこれらのリソースの所有権をリークしないようにアクセスを実施する。追跡されたリソースは、正確な所有権モデルを有する。
各リソースは、任意の時点で、多くても1つのプロセスによって所有される。例えば、エンドポイントが、スレッドT1からスレッドT2にメッセージで送信されると、エンドポイントの所有権は、メッセージの受信時に、T1からそのメッセージに変わり、次いでT2に変わる。
従来のアプローチでは、プロセスは、データのコピーを作成してそのデータを転送する。結果として、そのデータは複数のプロセスによって所有される。データを送信したプロセスは、なおそのデータのコピーに作用することができる。
少なくとも1つの説明した実装では、データの所有権は、特定のSIPに関連付けられる。データの所有権は、渡されているデータとともに転送される。したがって、送信SIPは、データを一旦渡すと、このデータに対するアクセスをもはや有さず、このデータのコピーを作成しなかったので、このデータに作用することができない。本明細書で説明される1つまたは複数の実装では、データは1つのSIPによって所有され、チャネル上でデータが一旦送信されるとその所有権はデータとともに転送される。
同様に、チャネルの各エンドポイントは、ちょうど1つのSIPによって所有される。エンドポイントの所有権は、エンドポイントの転送とともに別のSIPに渡る。一旦送信されると、送信SIPは、ちょうど送信したチャネルのエンドポイントに対するアクセスはもはや有さない。
この(エンドポイントおよびデータの)所有権の転送は、図1に示される交換ヒープ132または図2に示される交換ヒープ290などの交換ヒープを介して達成される。より詳細には、交換ヒープ内のメモリブロックは、(対象データまたは対象エンドポイントのいずれかのメモリ位置への)ポインタを含む。チャネルに渡って別のプロセスと交換するとき、送信プロセスは、交換ヒープ内のメモリブロックへのポインタを、受信プロセスに転送する。
この手法では、送信プロセスは、効果的に対象データを受信プロセスに転送するが、自身のためのコピーを作成または維持せずにそれを行う。さらに、送信プロセスは、効果的に対象エンドポイントの所有権を、所有権を維持せずに受信プロセスに転送する。所有権の転送は、メッセージの送信側が、メッセージへのポインタを受信側のエンドポイントに格納することによって、メッセージ交換プロトコルの現在の状態によって決定される位置で所有権を渡すとして、説明されることもある。
コピーされるデータがないこれらの交換を、「ゼロコピー」アプローチと呼ぶことができる。このようなアプローチを使用すると、ディスクバッファおよびネットワークパケットを、送信されるデータをコピーまたはいずれも保存することなく、複数のチャネルにわたって、プロトコルスタックを通してアプリケーションプロセス内に転送することができる。
(チャネル規約)
チャネル規約は、プロセス分離アーキテクチャを促進するために、本明細書で説明される実装によって使用される。チャネル規約(およびプロセス間通信の他の態様)は、“Inter-Process Communications Employing Bi-directional Message Conduits”でも説明されている。
チャネル上の単純なインタラクションを記述する規約の例を以下に示す。
contract C1{
in message Request (int x) requires x>0;
out message Reply (int y);
out message Error ();

state start: Request?
-> (Reply! Or Error!)
-> Start;
}
この例では、Contract C1は、3つのメッセージ、すなわち、Request、Reply、およびErrorを宣言する。各メッセージ宣言は、そのメッセージに含まれる引数の型を指定する。例えば、RequestおよびReplyの両方は、単一の整数値を含み、一方、Errorは、いかなる値も持たない。さらに、各メッセージは、Spec#が引数をさらに制限する節(clauses)を要求することを指定することができる。
メッセージに、方向(direction)をタグ付けすることもできる。規約は、エクスポータ(exporter)の観点から書かれている。したがって、本例では、Requestは、インポータ(importer)によってエクスポータに送信することができるメッセージであり、一方、ReplyおよびErrorは、エクスポータからインポータに送信される。修飾詞なしで、メッセージは両方向に移動することができる。
メッセージ宣言の後、規約は、送受信動作によって駆動される状態マシンを介して、許容メッセージインタラクション(allowable message interaction)を指定する。宣言された第1の状態は、インタラクションの初期状態とみなされる。例示の規約 C1は、Startと呼ばれる単一の状態を宣言する。状態名の後の、アクションのRequestは、Start状態においてチャネルのエクスポート側がRequestメッセージを受信する意思があることを示す。これに続いて、構文(Reply! or Error!)は、エクスポータがReplyまたはErrorメッセージのいずれかを送信(!)することを指定する。最後の部分(−>Start)は、インタラクションがその後Start状態に続き、それにより無限にループすることを指定する。
もう少し関連する例は、ネットワークスタックに対する規約の一部分である。
public contract TcpConnectionContract{
// Request(要求)
in message connect (uint dstIP, ushort dstPort);

out message Ready ();

// Initial state(初期状態)
state Start : Ready! -> ReadyState;

state ReadyState : one {
Connect? -> ConnectResult;
BindLocalEndpoint? -> BindResult;
Close? -> Closed;
}

// Binding to a local endpoint(ローカルエンドポイントにバインド)
state BindResult : one {
OK! -> Bound;
InvalidEndPoint! -> ReadyState;
}

in message Listen ();

state Bound : one {
Listen? -> ListenResult;
Connect? -> ConnectResult;
Close? -> Closed;
}
・・・
規約内のプロトコル仕様は、いくつかの目的を果たす。そのプロトコル仕様は、実行時または静的分析ツールを通してのいずれかで、プログラミングエラーの検出を助けることができる。ランタイムモニタリングは、チャネル上で交換されたメッセージに応じて、規約の状態マシンを駆動し、誤った遷移(transition)を監視する。それ自体により、ランタイムモニタリング技術は、1つのプログラム実行におけるエラーを検出するが、非終了(non-termination)などの「活性(liveness)」エラーを検出することができない。活性特性(liveness properties)は、「何か良いことが最終的に発生する」形態、例えば「最終的にプログラムがメッセージを送信する」形態の特性である。静的プログラム分析は、プロセスが、全てのプログラム実行において正しく、スタックフリーであるという強い保証を提供することができる。一般に、静的分析は、発生時に1つの実行をモニタリングすることに限定されない。静的分析は、例えば、プロセスが最終的に何かを行うか否かを判定するために、プロセスの命令を調べることに依拠することがある。これは常に機能するわけではないことを示す基本的結果が論理内に存在するが、多数の場合では、これは十分に良く機能することができる。
一実装では、ランタイムモニタリングと静的検証の組合せを使用する。チャネル上の全てのメッセージは、正確性を検出するが活性の問題は検出しないチャネルの規約とチェックされる。本明細書で説明される実装は、安全性の特性を検証する静的チェッカを有する。
加えて、コンパイラは、チャネル上で未完了(outstanding)の可能性があるメッセージの最大数を判定する規約を使用し、その規約により、コンパイラがチャネルエンドポイント内のバッファを静的に割り当てることが可能となる。静的に割り当てられたバッファは、通信のパフォーマンスを改善する。
(エンドポイント)
チャネルは、そのチャネルのインポート側およびエクスポート側を表すエンドポイントの対として明示される。各エンドポイントは、チャネルが順守する規約を指定する型を有する。エンドポイント型は、各規約内で暗黙的に宣言される。規約C1は、クラスとして表され、エンドポイント型は、以下のようにそのクラス内部のネストされた型である。
・ C1.Imp −規約C1でのチャネルのインポートエンドポイントの型
・ C1.Exp −規約C1でのチャネルのエクスポートエンドポイントの型
(送受信メソッド)
各規約クラスは、その規約内で宣言したメッセージを送受信するためのメソッドを含む。例として、以下のメソッドを与える。
C1.Imp {
void SendRequest (int x);
void RecvReply (out int y);
void RecvError ();
}

C1.Exp {
void RecvRequest (out int x);
void SendReply (int y);
void SendError ();
}
Sendメソッドの意味は、それらがメッセージを非同期的に送信することである。受信メソッドは、所与のメッセージが到着するまでブロックされる。異なるメッセージが最初に到着するとエラーが発生する。そのようなエラーは、プログラムが規約検証チェックを通る場合は、発生することはない。受信者が次に要求するメッセージを正確に知らなければ、これらのメソッドは適切ではない。
(方法の実装)
図3は、静的に検証可能なSIPのための効率的なプロセス間通信を促進する方法300および400を示す。これらの方法300および400は、図1および図2に示される様々なコンポーネントの1つまたは複数によって実施される。さらに、これらの方法300および400を、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せで実施することができる。
図3のブロック302で、OSは、コンピュータオペレーティングシステム環境における1つまたは複数のSIPの実行を提供する。
ブロック304で、OSは、特定のデータセットの所有権を第1のSIPに関連付ける。このデータセットは、図1に示される交換ヒープ132または図2に示される交換ヒープ290などの、交換ヒープ内のメモリブロックとすることができる。このデータセットは、メッセージとすることができる。このデータセットは、データ、あるいはデータを含むメモリ位置への1つまたは複数のポインタを含むことができる。また、このデータセットは、チャネルエンドポイントへの1つまたは複数のポインタを含むことができる。
ブロック306で、OSは、特定のデータセットを第1のSIPから第2のSIPに送信する。ここでの送信は、(交換ヒープ内の)データセットへのポインタを、第2のSIPに提供することから成ることがある。代替として、送信は、第2のSIPに接続されたチャネルのエンドポイントにメッセージを書き込むことから成ることがある。
ブロック308で、OSは、特定のデータセットの所有権を第1のSIPから第2のSIPに転送する。メッセージがチャネル上で送信されると、所有権は、送信SIPから受信SIPに渡る。送信SIPは、もはやメッセージに対する参照を保持しない。実質的に、送信SIPは、もはや送信メッセージに対するアクセスを有さない。
送信306および転送308の間、送信された情報のコピーは、保持されない。実際、送信された情報のコピーは、作成されない。データセットへのポインタ(またはより正確には、データまたはポインタを格納しているメモリブロックへのポインタ)だけが転送されるので、コピーは、作成および送信されない。
この所有権の不変条件は、(プログラミングツール160およびOS100などの)プログラミングツールおよびオペレーティングシステムによって施行される。この所有権の不変条件は、少なくとも3つの目的を果たす。1つめは、プロセス間の共有を回避することである。2つめは、メッセージのポインタエイリアス(pointer aliasing)を排除することによって、静的プログラム分析を促進することである。3つめは、コピーまたはポインタを渡すこと(pointer passing)により実装することができるメッセージパッシングの意味(semantics)を提供することによって、実装の柔軟性を許容することである。
図4に示されるように、402で、オペレーティングシステムは、コンピュータオペレーティングシステム環境における1つまたは複数のSIPの実行を提供する。
ブロック404で、OSは、特定のプロセス間通信チャネルの特定のエンドポイントの所有権を、第1のSIPに関連付ける。このデータセットは、図1に示される交換ヒープ132または図2に示される交換ヒープ290などの、交換ヒープ内のメモリブロックとすることができる。このデータセットは、メッセージとすることができる。このデータセットは、1つまたは複数のポインタを含むことができる。このデータセットは、1つまたは複数のポインタを含むメモリ位置への1つまたは複数のポインタを含むことができる。また、このデータセットは、チャネルエンドポイントへの1つまたは複数のポインタを含むことができる。
ブロック406で、OSは、特定のプロセス間通信チャネルの特定のエンドポイントを、第1のSIPから第2のSIPに送信する。ここでの送信は、(交換ヒープ内の)特定のエンドポイントへのポインタを、第2のSIPに提供することから成ることがある。代替として、送信は、第2のSIPに接続されたチャネルのエンドポイントにメッセージを書き込むことから成ることがある。
ブロック408で、OSは、特定のプロセス間通信チャネルの特定のエンドポイントの所有権を、第1のSIPから第2のSIPに転送する。エンドポイントの所有権が、送信SIPから受信SIPに渡ると、送信SIPは、もはやメッセージに対する参照を保持しない。実質的に、送信SIPは、もはや送信されたデータに対するアクセスを有さない。
さらに、エンドポイント所有権のこの転送は、「コピー」を生成および転送することなく発生する。エンドポイントへのポインタ(または、エンドポイントへのポインタを格納しているメモリブロックへのポインタ)だけが転送されるので、コピーは、作成および送信されない。
(検証)
プログラミングツール160は、1つまたは複数のSIPのプログラミングを検証することができる。プログラミングツール160は、実行されるコードがタイプセーフであることを検証し、コンパイラによる強い不変条件の使用、および実行時の強い不変条件の使用の実施を検証する。このような強い不変条件は、(限定ではなく例として)以下を含む。
・ 交換ヒープ内の各ブロックは、任意の時点で、多くても1つの所有スレッド(すなわち、プロセス)を有する。
・ 交換ヒープ内のブロックは、そのブロックの所有者によってアクセスされるのみである。したがって、ブロックが解放された後、または所有権の転送後、アクセスはない。
・ チャネル規約の実施形態は、プロセス間の通信(例えば、そのチャネル規約に対応するチャネルにおいて観察されたメッセージのシーケンス)を定義し、制限する。
(検証の方法の実装)
図5は、分離プロセスの検証方法500を示す。この方法500は、図1および図2に示される様々なコンポーネントの1つまたは複数によって実施される。さらに、この方法500を、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せで実施することができる。
図5のブロック502で、1つまたは複数のSIPのための実行可能コードを、SIPをサポートするコンピュータオペレーティングシステム環境でコンパイルする。
ブロック504で、コンパイル時間の間に、プログラミングツール160は、交換ヒープ内の各メモリブロックが、任意の時点において多くても1つの所有プロセスを有することを、確認する。これは、任意の一時点において1つのSIPのみが、任意の特定のメモリブロックを所有することを意味する。
ブロック506で、コンパイル時間の間に、プログラミングツール160は、交換ヒープ内の各メモリブロックが、その正当な所有者(例えば、SIP)によってアクセスされるのみであることを確認する。
ブロック508で、コンパイル時間の間に、プログラミングツール160は、チャネルの規約条件(contract term)が守られていることを確認する。例えば、ツールは、コントロール内で定義されたメッセージシーケンスが順守されていることを確認する。
プログラミングツール160は、このような確認の結果を、ユーザ、プログラムモジュール、および/またはオペレーティングシステムに報告することができる。プログラミングツール160は、その検証をコンパイル中に実施することができる。加えて、プログラミングツール160は、生成された中間言語コード上でこれらの同じ特性を検証することもできる。さらに、プログラミングツール160は、型付けされたアセンブリ言語についての結果として生じる形態を再度検証することができる。
(結論)
本明細書で説明される技術を、1つまたは複数のコンピュータネットワークの一部、あるいはそれらの組合せとして、プログラムモジュール、汎用および専用のコンピューティングシステム、ネットワークサーバおよび装置、専用電子回路およびハードウェア、ファームウェアを含む(がこれらに限らない)多くの方法で実装することができる。
本明細書で説明される1つまたは複数の実装を、限定ではないがPC、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能な家庭用電化製品、無線電話および装置、汎用および専用の装置、ASIC、ネットワークPC、シンクライアント、シッククライアント、セットトップボックス、ミニコンピュータ、メインフレームコンピュータ、上記システムまたは装置の任意のものを含む分散コンピューティング環境などを含む、使用に適した多くのよく知られたコンピューティングシステム、環境、および/または構成を通して、実装することができる。
1つまたは複数の上述の実装を、構造的特徴および/または方法のステップに特有の言葉で説明してきたが、他の実装を、本明細書で説明される特定の例示的な特徴またはステップなしに実施することができることを理解されたい。むしろ、その特定の例示的な特徴およびステップは、1つまたは複数の実装の好ましい形態として開示されている。一部の例では、例示的な実装の説明を明確にするため、公知の特徴は、省略または簡略化されていることもある。さらに、理解を容易にするために、ある方法のステップを別々のステップとして区別してある。しかし、これらの別々に区別されたステップを、それらのパフォーマンスに依存する順序として必ずしも解釈すべきではない。
本明細書で説明される1つまたは複数の実装をサポートする、オペレーティングシステムアーキテクチャに関する動作シナリオの図である。 本明細書で説明される1つまたは複数の実装をサポートする、オペレーティングシステムアーキテクチャに関する別の動作シナリオの図である。 本明細書で説明される1つまたは複数の実装をサポートする、オペレーティングシステムアーキテクチャのブロック図である。 本明細書で説明される、別の方法の実装についてのフローチャートである。 本明細書で説明される、別の方法の実装についてのフローチャートである。

Claims (9)

  1. コンピュータにおいて実行される方法であって、
    前記コンピュータのオペレーションシステムが、特定のデータセットの所有権を第1のプロセスに関連付けることと、
    前記オペレーティングシステムが、前記第1のプロセスによって所有される第1のエンドポイントと、第2のプロセスによって所有される第2のエンドポイントとを含む2つのエンドポイントのみを有するプロセス間通信チャネルを介して、該プロセス間通信チャネルに関連付けられた静的に検証可能なチャネル規約に従って、前記特定のデータセットを前記第1のプロセスから前記第2のプロセスに送信することと
    を含み、前記チャネル規約は、前記第1のプロセスが通信すべきプロセスと、前記プロセス間通信チャネルにおける通信方法とを指定し、および前記プロセス間通信チャネルの前記2つのエンドポイントの各々が一度に1つのプロセスのみによって所有されることを規定しており、前記チャネル規約が順守されているかどうかを、前記特定のデータセットの送信の前に検証し、
    前記特定のデータセットを送信することによって、前記特定のデータセットの前記所有権が前記第1のプロセスから前記第2のプロセスに転送され、前記所有権を転送した後、前記第1のプロセスによる前記特定のデータセットに対するアクセスは制限されることを特徴とする方法。
  2. 前記特定のデータセットは、メッセージを含み、
    前記チャネル規約は、さらに前記プロセス間通信チャネルにおけるメッセージのシーケンスを定義することを特徴とする請求項1に記載の方法。
  3. 前記特定のデータセットは、割り当てられたメモリ内のアドレス可能な位置に格納され、前記割り当てられたメモリの前記アドレス可能な位置に対するアクセスは、一度に1つのプロセスのみに制限されることを特徴とする請求項1に記載の方法。
  4. 請求項1に記載の方法をコンピュータに実行させるためのプログラム。
  5. コンピュータにおいて実行される方法であって、
    前記コンピュータのオペレーティングシステムが、2つのエンドポイントのみを有するプロセス間通信チャネルの特定のエンドポイントの所有権を、第1のプロセスに関連付けることと、
    前記オペレーティングシステムが、前記プロセス間通信チャネルを介して、前記プロセス間通信チャネルに関連付けられた静的に検証可能なチャネル規約に従って、前記特定のエンドポイントを前記第1のプロセスから第2のプロセスに送信することと
    を含み、前記チャネル規約は、前記第1のプロセスが通信すべきプロセスと、前記プロセス間通信チャネルにおける通信方法とを指定し、および前記プロセス間通信チャネルの前記2つのエンドポイントの各々が一度に1つのプロセスのみによって所有されることを規定しており、前記チャネル規約が順守されているかどうかを、前記特定のエンドポイントの送信の前に検証し、
    前記特定のエンドポイントを送信することによって、前記特定のエンドポイントの所有権が、前記第1のプロセスから前記第2のプロセスに転送され、前記所有権を転送した後、前記第1のプロセスによる前記特定のエンドポイントへのアクセスは制限されることを特徴とする方法。
  6. 前記特定のエンドポイントを送信することは、前記特定のエンドポイントが格納されているアドレス可能な位置へのポインタを送信することを含むことを特徴とする請求項に記載の方法。
  7. 請求項に記載の方法をコンピュータに実行させるためのプログラム。
  8. コンピュータにおいて実行される方法であって、
    前記コンピュータのオペレーティングシステムが、独立の実行環境を有する複数の分離ソフトウェアプロセスを構築することと、
    前記コンピュータの共有交換ヒープ内の複数のメモリブロックが、それぞれ、前記複数の分離ソフトウェアプロセスのうち2つ以上の分離ソフトウェアプロセスによって同時に所有されていないことを確認することと、
    前記オペレーティングシステムが、第1のエンドポイントと第2のエンドポイントとからなる2つのエンドポイントのみを有するプロセス間通信チャネルを介して、該プロセス間通信チャネルに関連付けられたチャネル規約に従って、前記複数の分離ソフトウェアプロセスのうち前記第1のエンドポイントを有する送信側の分離ソフトウェアプロセスから、前記第2のエンドポイントを有する受信側の分離ソフトウェアプロセスにメッセージを送信することと
    を含み、前記チャネル規約は、前記送信側の分離ソフトウェアプロセスが通信すべき受信側の分離ソフトウェアプロセスと、前記プロセス間通信チャネルにおける通信方法とを指定し、および前記プロセス間通信チャネルの前記2つのエンドポイントの各々が一度に1つのプロセスのみによって所有されることを規定しており、前記チャネル規約が順守されているかどうかを、前記メッセージの送信の前に検証し、
    前記メッセージを送信することによって、前記メッセージに対する所有権が、前記送信側の分離ソフトウェアプロセスから前記受信側の分離ソフトウェアプロセスに転送され、前記所有権を転送した後、前記メッセージによって示される前記共有交換ヒープ内の特定のメモリブロックに対する前記送信側の分離ソフトウェアプロセスのアクセスは制限されることを特徴とする方法。
  9. 前記メッセージを送信する前に、前記特定のメモリブロックが前記送信側の分離ソフトウェアプロセス以外の別の分離ソフトウェアプロセスによってアクセスされていないかどうかを判定することと、
    前記判定の結果を提示することと
    をさらに含むことを特徴とする請求項に記載の方法。
JP2008537768A 2005-10-26 2006-10-16 静的に検証可能なプロセス間通信の分離プロセス Expired - Fee Related JP5128484B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US73054605P 2005-10-26 2005-10-26
US60/730,546 2005-10-26
US11/428,162 2006-06-30
US11/428,162 US20070094495A1 (en) 2005-10-26 2006-06-30 Statically Verifiable Inter-Process-Communicative Isolated Processes
PCT/US2006/040527 WO2007050363A1 (en) 2005-10-26 2006-10-16 Statically verifiable inter-process-communicative isolated processes

Publications (3)

Publication Number Publication Date
JP2009514098A JP2009514098A (ja) 2009-04-02
JP2009514098A5 JP2009514098A5 (ja) 2009-12-03
JP5128484B2 true JP5128484B2 (ja) 2013-01-23

Family

ID=37968123

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008537768A Expired - Fee Related JP5128484B2 (ja) 2005-10-26 2006-10-16 静的に検証可能なプロセス間通信の分離プロセス

Country Status (7)

Country Link
US (1) US20070094495A1 (ja)
EP (1) EP1941372A1 (ja)
JP (1) JP5128484B2 (ja)
KR (1) KR20080069586A (ja)
BR (1) BRPI0617788A2 (ja)
RU (1) RU2429526C2 (ja)
WO (1) WO2007050363A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8849968B2 (en) * 2005-06-20 2014-09-30 Microsoft Corporation Secure and stable hosting of third-party extensions to web services
US8074231B2 (en) 2005-10-26 2011-12-06 Microsoft Corporation Configuration of isolated extensions and device drivers
US8032898B2 (en) 2006-06-30 2011-10-04 Microsoft Corporation Kernel interface with categorized kernel objects
US20080086603A1 (en) * 2006-10-05 2008-04-10 Vesa Lahtinen Memory management method and system
US8327327B2 (en) * 2007-03-21 2012-12-04 Carnegie Mellon University Method for statically checking an object-oriented computer program module
US8789063B2 (en) 2007-03-30 2014-07-22 Microsoft Corporation Master and subordinate operating system kernels for heterogeneous multiprocessor systems
US20090183155A1 (en) * 2008-01-15 2009-07-16 Microsoft Corporation Isolation of Content by Processes in an Application
US8230180B2 (en) 2008-06-11 2012-07-24 Samsung Electronics Co., Ltd. Shared memory burst communications
US8539456B2 (en) * 2009-06-30 2013-09-17 Intel Corporation Automatic conversion of MPI source code programs into MPI thread-based programs
US10242182B2 (en) 2009-10-23 2019-03-26 Secure Vector, Llc Computer security system and method
US9454652B2 (en) * 2009-10-23 2016-09-27 Secure Vector, Llc Computer security system and method
CN102137123A (zh) * 2010-01-25 2011-07-27 腾讯科技(北京)有限公司 实现移动终端上不同应用程序的进程之间通信的装置和方法
RU2610582C2 (ru) * 2014-09-30 2017-02-13 Общество С Ограниченной Ответственностью "Яндекс" Способ передачи и способ получения объекта от первого процесса второму процессу, машиночитаемый носитель (2 варианта)
RU2592383C1 (ru) * 2015-06-30 2016-07-20 Закрытое акционерное общество "Лаборатория Касперского" Способ формирования антивирусной записи при обнаружении вредоносного кода в оперативной памяти
US10958480B2 (en) * 2018-07-19 2021-03-23 Vmware, Inc. Per-app virtual private network tunnel for multiple processes
CN110287089B (zh) * 2019-05-07 2023-02-17 华东师范大学 一种基于中间格式及smt技术的微内核ipc验证方法

Family Cites Families (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4916637A (en) * 1987-11-18 1990-04-10 International Business Machines Corporation Customized instruction generator
US5031089A (en) * 1988-12-30 1991-07-09 United States Of America As Represented By The Administrator, National Aeronautics And Space Administration Dynamic resource allocation scheme for distributed heterogeneous computer systems
US5057996A (en) * 1989-06-29 1991-10-15 Digital Equipment Corporation Waitable object creation system and method in an object based computer operating system
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
EP0490636B1 (en) * 1990-12-14 1998-09-09 Sun Microsystems, Inc. Method and apparatus for interprocess message switching
US5317568A (en) * 1991-04-11 1994-05-31 Galileo International Partnership Method and apparatus for managing and facilitating communications in a distributed hetergeneous network
US5469571A (en) * 1991-07-15 1995-11-21 Lynx Real-Time Systems, Inc. Operating system architecture using multiple priority light weight kernel task based interrupt handling
DE69230462T2 (de) * 1991-11-19 2000-08-03 Sun Microsystems, Inc. Arbitrierung des Multiprozessorzugriffs zu gemeinsamen Mitteln
US5349682A (en) * 1992-01-31 1994-09-20 Parallel Pcs, Inc. Dynamic fault-tolerant parallel processing system for performing an application function with increased efficiency using heterogeneous processors
JPH05224956A (ja) * 1992-02-14 1993-09-03 Nippon Telegr & Teleph Corp <Ntt> プロセス間メッセージ通信方法
US5329619A (en) * 1992-10-30 1994-07-12 Software Ag Cooperative processing interface and communication broker for heterogeneous computing environments
US5481717A (en) * 1993-04-12 1996-01-02 Kabushiki Kaisha Toshiba Logic program comparison method for verifying a computer program in relation to a system specification
US5455951A (en) * 1993-07-19 1995-10-03 Taligent, Inc. Method and apparatus for running an object-oriented program on a host computer with a procedural operating system
DE69505717T2 (de) * 1994-03-08 1999-06-24 Digital Equipment Corp., Maynard, Mass. Verfahren und Vorrichtung zur Feststellung und Durchführung von kreuzweisen Unterprogrammanrufen
US6115819A (en) * 1994-05-26 2000-09-05 The Commonwealth Of Australia Secure computer architecture
US5551051A (en) * 1994-09-20 1996-08-27 Motorola, Inc. Isolated multiprocessing system having tracking circuit for verifyng only that the processor is executing set of entry instructions upon initiation of the system controller program
US5794052A (en) * 1995-02-27 1998-08-11 Ast Research, Inc. Method of software installation and setup
US5752032A (en) * 1995-11-21 1998-05-12 Diamond Multimedia Systems, Inc. Adaptive device driver using controller hardware sub-element identifier
US5754776A (en) * 1995-12-28 1998-05-19 Intel Corporation Re-prioritizing background data transfers in multipoint conferencing
US6292941B1 (en) * 1996-04-30 2001-09-18 Sun Microsystems, Inc. Operating system installation
US5944821A (en) * 1996-07-11 1999-08-31 Compaq Computer Corporation Secure software registration and integrity assessment in a computer system
US5958050A (en) * 1996-09-24 1999-09-28 Electric Communities Trusted delegation system
US5974572A (en) * 1996-10-15 1999-10-26 Mercury Interactive Corporation Software system and methods for generating a load test using a server access log
US5923878A (en) * 1996-11-13 1999-07-13 Sun Microsystems, Inc. System, method and apparatus of directly executing an architecture-independent binary program
US5878408A (en) * 1996-12-06 1999-03-02 International Business Machines Corporation Data management system and process
US5884018A (en) * 1997-01-28 1999-03-16 Tandem Computers Incorporated Method and apparatus for distributed agreement on processor membership in a multi-processor system
US6038399A (en) * 1997-07-22 2000-03-14 Compaq Computer Corporation Computer manufacturing architecture with two data-loading processes
US6247128B1 (en) * 1997-07-22 2001-06-12 Compaq Computer Corporation Computer manufacturing with smart configuration methods
US6078744A (en) * 1997-08-01 2000-06-20 Sun Microsystems Method and apparatus for improving compiler performance during subsequent compilations of a source program
US5963743A (en) * 1997-08-29 1999-10-05 Dell Usa, L.P. Database for facilitating software installation and testing for a build-to-order computer system
US6072953A (en) * 1997-09-30 2000-06-06 International Business Machines Corporation Apparatus and method for dynamically modifying class files during loading for execution
US6542926B2 (en) * 1998-06-10 2003-04-01 Compaq Information Technologies Group, L.P. Software partitioned multi-processor system with flexible resource sharing levels
US6351850B1 (en) * 1997-11-14 2002-02-26 Frank Van Gilluwe Computer operating system installation
US6182275B1 (en) * 1998-01-26 2001-01-30 Dell Usa, L.P. Generation of a compatible order for a computer system
US6912692B1 (en) * 1998-04-13 2005-06-28 Adobe Systems Incorporated Copying a sequence of commands to a macro
US6092189A (en) * 1998-04-30 2000-07-18 Compaq Computer Corporation Channel configuration program server architecture
US6080207A (en) * 1998-06-04 2000-06-27 Gateway 2000, Inc. System and method of creating and delivering software
US6381742B2 (en) * 1998-06-19 2002-04-30 Microsoft Corporation Software package management
US6434694B1 (en) * 1998-06-29 2002-08-13 Sun Microsystems, Inc. Security for platform-independent device drivers
US6202147B1 (en) * 1998-06-29 2001-03-13 Sun Microsystems, Inc. Platform-independent device drivers
DE19837871C2 (de) * 1998-08-20 2000-06-08 Manfred Broy Verfahren zum automatischen Erzeugen eines Programms
US6066182A (en) * 1998-11-05 2000-05-23 Platinum Technology Ip, Inc. Method and apparatus for operating system personalization during installation
US6842782B1 (en) * 1998-12-08 2005-01-11 Yodlee.Com, Inc. Method and apparatus for tracking functional states of a web-site and reporting results to web developers
US6341371B1 (en) * 1999-02-23 2002-01-22 International Business Machines Corporation System and method for optimizing program execution in a computer system
US6442754B1 (en) * 1999-03-29 2002-08-27 International Business Machines Corporation System, method, and program for checking dependencies of installed software components during installation or uninstallation of software
US6782541B1 (en) * 1999-05-28 2004-08-24 Avaya Technology Corp. System and method of exchanging information between software modules
WO2001025932A1 (en) * 1999-10-01 2001-04-12 Infraworks Corporation Back-channeling in a memory vault system
US6715144B2 (en) * 1999-12-30 2004-03-30 International Business Machines Corporation Request based automation of software installation, customization and activation
US7047534B2 (en) * 2000-03-17 2006-05-16 Microsoft Corporation Simplified device drivers for hardware devices of a computer system
US7310801B2 (en) * 2000-04-27 2007-12-18 Microsoft Corporation Servicing a component-based software product throughout the software product lifecycle
US7260845B2 (en) * 2001-01-09 2007-08-21 Gabriel Kedma Sensor for detecting and eliminating inter-process memory breaches in multitasking operating systems
US7613930B2 (en) * 2001-01-19 2009-11-03 Trustware International Limited Method for protecting computer programs and data from hostile code
JP3610915B2 (ja) * 2001-03-19 2005-01-19 株式会社デンソー 処理実行装置及びプログラム
US7233998B2 (en) * 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US6617013B2 (en) * 2001-05-10 2003-09-09 Siemens Westinghouse Power Corporation Ceramic matrix composite having improved interlaminar strength
US20030031404A1 (en) * 2001-08-07 2003-02-13 Corvis Corporation Optical transmission systems including optical components and optical filters and methods of use therein
GB2381336B (en) * 2001-08-21 2005-09-28 Silicon Infusion Ltd Object orientated heterogeneous multi-processor platform
US6988261B2 (en) * 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
CA2404552C (en) * 2001-09-21 2008-12-09 Corel Corporation System and method for secure communication
US20030061401A1 (en) * 2001-09-25 2003-03-27 Luciani Luis E. Input device virtualization with a programmable logic device of a server
US6978018B2 (en) * 2001-09-28 2005-12-20 Intel Corporation Technique to support co-location and certification of executable content from a pre-boot space into an operating system runtime environment
KR20040058261A (ko) * 2001-10-30 2004-07-03 코닌클리케 필립스 일렉트로닉스 엔.브이. 분산 소프트웨어 컴포넌트들을 구성하는 방법
WO2003062988A2 (en) * 2002-01-24 2003-07-31 Koninklijke Philips Electronics N.V. Executing processes in a multiprocessing environment
US6880149B2 (en) * 2002-04-01 2005-04-12 Pace Anti-Piracy Method for runtime code integrity validation using code block checksums
US7136924B2 (en) * 2002-04-16 2006-11-14 Dean Dauger Method and system for parallel operation and control of legacy computer clusters
US7103914B2 (en) * 2002-06-17 2006-09-05 Bae Systems Information Technology Llc Trusted computer system
DE10235455B9 (de) * 2002-08-02 2008-01-24 Leo Elektronenmikroskopie Gmbh Teilchenoptische Vorrichtung und Verfahren zum Betrieb derselben
US7832011B2 (en) * 2002-08-30 2010-11-09 Symantec Corporation Method and apparatus for detecting malicious code in an information handling system
ATE516537T1 (de) * 2002-10-01 2011-07-15 Sap Ag Prüfung von skriptsprachen mit schnittstellen mittels annotationen in xml
US6944754B2 (en) * 2002-10-02 2005-09-13 Wisconsin Alumni Research Foundation Method and apparatus for parallel execution of computer software using a distilled program
US7000092B2 (en) * 2002-12-12 2006-02-14 Lsi Logic Corporation Heterogeneous multi-processor reference design
EP1431873A1 (en) * 2002-12-19 2004-06-23 Hewlett-Packard Company, A Delaware Corporation Computer programming
CN1270229C (zh) * 2002-12-31 2006-08-16 上海科泰世纪科技有限公司 基于动态内核实现跨地址空间创建构件对象的方法
US6963960B2 (en) * 2003-03-25 2005-11-08 Microsoft Corporation System and method for kernel mode memory management having movable kernel objects
US8136155B2 (en) * 2003-04-01 2012-03-13 Check Point Software Technologies, Inc. Security system with methodology for interprocess communication control
US8020163B2 (en) * 2003-06-02 2011-09-13 Interuniversitair Microelektronica Centrum (Imec) Heterogeneous multiprocessor network on chip devices, methods and operating systems for control thereof
US20050005261A1 (en) * 2003-07-02 2005-01-06 Severin William B. Component integration engine
US7533103B2 (en) * 2003-07-22 2009-05-12 Sap Ag Self-describing business objects
US7403956B2 (en) * 2003-08-29 2008-07-22 Microsoft Corporation Relational schema format
US20050060687A1 (en) * 2003-09-15 2005-03-17 Ghazaleh David Abu Method and apparatus for documenting and describing object oriented programming logic
US7516456B2 (en) * 2003-09-25 2009-04-07 International Business Machines Corporation Asymmetric heterogeneous multi-threaded operating system
US20050071828A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for compiling source code for multi-processor environments
US20050091658A1 (en) * 2003-10-24 2005-04-28 Microsoft Corporation Operating system resource protection
US7565653B2 (en) * 2004-02-20 2009-07-21 Sony Computer Entertainment Inc. Methods and apparatus for processor task migration in a multi-processor system
US8190863B2 (en) * 2004-07-02 2012-05-29 Intel Corporation Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction
TWI391860B (zh) * 2004-08-04 2013-04-01 Osa Technologies Inc 用於為硬體裝置產生固定大小韌體形象化描述之方法
US7240137B2 (en) * 2004-08-26 2007-07-03 International Business Machines Corporation System and method for message delivery across a plurality of processors
US20060123401A1 (en) * 2004-12-02 2006-06-08 International Business Machines Corporation Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system
US7882317B2 (en) * 2004-12-06 2011-02-01 Microsoft Corporation Process isolation using protection domains
US8020141B2 (en) * 2004-12-06 2011-09-13 Microsoft Corporation Operating-system process construction
US8849968B2 (en) * 2005-06-20 2014-09-30 Microsoft Corporation Secure and stable hosting of third-party extensions to web services
US20070033592A1 (en) * 2005-08-04 2007-02-08 International Business Machines Corporation Method, apparatus, and computer program product for adaptive process dispatch in a computer system having a plurality of processors
US7500039B2 (en) * 2005-08-19 2009-03-03 International Business Machines Corporation Method for communicating with a processor event facility
US8074231B2 (en) * 2005-10-26 2011-12-06 Microsoft Corporation Configuration of isolated extensions and device drivers
US8032898B2 (en) * 2006-06-30 2011-10-04 Microsoft Corporation Kernel interface with categorized kernel objects
US8132169B2 (en) * 2006-07-21 2012-03-06 International Business Machines Corporation System and method for dynamically partitioning an application across multiple processing elements in a heterogeneous processing environment
US20080244507A1 (en) * 2007-03-30 2008-10-02 Microsoft Corporation Homogeneous Programming For Heterogeneous Multiprocessor Systems
US8789063B2 (en) * 2007-03-30 2014-07-22 Microsoft Corporation Master and subordinate operating system kernels for heterogeneous multiprocessor systems

Also Published As

Publication number Publication date
RU2429526C2 (ru) 2011-09-20
RU2008116715A (ru) 2009-10-27
KR20080069586A (ko) 2008-07-28
BRPI0617788A2 (pt) 2009-12-01
WO2007050363A1 (en) 2007-05-03
US20070094495A1 (en) 2007-04-26
EP1941372A1 (en) 2008-07-09
JP2009514098A (ja) 2009-04-02

Similar Documents

Publication Publication Date Title
JP5128484B2 (ja) 静的に検証可能なプロセス間通信の分離プロセス
Hayden The ensemble system
Schmidt et al. C++ Network Programming, Volume I: Mastering Complexity with ACE and Patterns
Fähndrich et al. Language support for fast and reliable message-based communication in Singularity OS
CN101297277B (zh) 静态可验证进程间通信隔离进程
Henning et al. Distributed programming with ice
Jose et al. Unifying UPC and MPI runtimes: experience with MVAPICH
US20050081220A1 (en) Systems and methods for dynamically linking application software into a running operating system kernel
US7600232B2 (en) Inter-process communications employing bi-directional message conduits
Barlas et al. NetStub: A framework for verification of distributed Java applications
Sharma et al. Getting Started with Istio Service Mesh: Manage Microservices in Kubernetes
Denis et al. Portable parallel CORBA objects: an approach to combine parallel and distributed programming for grid computing
Scherfke aiomas Documentation
Soule Autonomics development: a domain-specific aspect language approach
Sharma et al. Getting Started with Istio Service Mesh
Dantam et al. Unix philosophy and the real world: Control software for humanoid robots
Basanta‐Val et al. Fine tuning of the multiplexing facilities of Java's Remote Method Invocation
Govindaraju et al. XCAT-C++: Design and performance of a distributed CCA framework
Herrera et al. Communication Management Through Sockets Developed In Java
US7702764B1 (en) System and method for testing network protocols
MX2008005402A (en) Statically verifiable inter-process-communicative isolated processes
Sharma et al. Introduction to the Service Mesh
Chanda Network Programming with Rust: Build fast and resilient network servers and clients by leveraging Rust's memory-safety and concurrency features
Chiu An architecture for concurrent, peer-to-peer components
Baker et al. A status report: Early experiences with the implementation of a message passing system using Java NIO

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091016

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091016

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120301

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120330

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120730

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20120731

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120731

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20120821

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121031

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5128484

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151109

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees