JP2022145582A - プロセス間通信のための方法、関連するコンピューティングデバイス及び記憶媒体 - Google Patents
プロセス間通信のための方法、関連するコンピューティングデバイス及び記憶媒体 Download PDFInfo
- Publication number
- JP2022145582A JP2022145582A JP2022035834A JP2022035834A JP2022145582A JP 2022145582 A JP2022145582 A JP 2022145582A JP 2022035834 A JP2022035834 A JP 2022035834A JP 2022035834 A JP2022035834 A JP 2022035834A JP 2022145582 A JP2022145582 A JP 2022145582A
- Authority
- JP
- Japan
- Prior art keywords
- shared memory
- memory block
- node
- size
- logical address
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】プロセス間通信のための方法、関連するコンピューティングデバイス及び記憶媒体を提供する。
【解決手段】プロセス間通信のための方法は、第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信し、第1のプロセスによってオペレーティングシステムに第1の数の、第1のサイズ以上の記憶空間を有する共有メモリブロックを申請し、オペレーティングシステムが第1の数の共有メモリブロックを割り当てたことに応答して、第1のプロセスによって第1の連結リストに第1の数の、割り当てられた1つの共有メモリブロックに対応する第1のノードを追加し、第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信する。
【選択図】図4
【解決手段】プロセス間通信のための方法は、第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信し、第1のプロセスによってオペレーティングシステムに第1の数の、第1のサイズ以上の記憶空間を有する共有メモリブロックを申請し、オペレーティングシステムが第1の数の共有メモリブロックを割り当てたことに応答して、第1のプロセスによって第1の連結リストに第1の数の、割り当てられた1つの共有メモリブロックに対応する第1のノードを追加し、第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信する。
【選択図】図4
Description
本開示は、コンピュータ技術分野に関し、特に、プロセス間通信のための方法、関連するコンピューティングデバイス及び記憶媒体に関する。
コンピュータ技術の急速な発展と人々のアプリケーションに対する要求の高まりに伴い、シングルプロセスプログラムは、多くの場合、人々のニーズを満たすことができなくなり、マルチプロセス、マルチスレッドプログラムを作成することは、現代のプログラム設計の重要な特徴の1つとなっている。マルチプロセスプログラム設計において、プロセス間通信がしばしば必要とされる。
本開示は、データのコピー回数を減らし、効率的なプロセス間通信を実現することができる、プロセス間通信のための方法、関連するコンピューティングデバイス及び記憶媒体を提供する。
本開示は、一態様において、
第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信するステップと、
第1のプロセスによってオペレーティングシステムに第1の数の共有メモリブロックを申請するステップであって、各共有メモリブロックの記憶空間は前記第1のサイズ以上であるステップと、
オペレーティングシステムが第1の数の共有メモリブロックを割り当てたことに応答して、第1のプロセスによって第1の連結リストに第1の数の第1のノードを追加するステップであって、各第1のノードは割り当てられた1つの共有メモリブロックに対応するステップと、
第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信するステップと、を含む、プロセス間通信のための方法を提供する。
第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信するステップと、
第1のプロセスによってオペレーティングシステムに第1の数の共有メモリブロックを申請するステップであって、各共有メモリブロックの記憶空間は前記第1のサイズ以上であるステップと、
オペレーティングシステムが第1の数の共有メモリブロックを割り当てたことに応答して、第1のプロセスによって第1の連結リストに第1の数の第1のノードを追加するステップであって、各第1のノードは割り当てられた1つの共有メモリブロックに対応するステップと、
第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信するステップと、を含む、プロセス間通信のための方法を提供する。
本開示は、別の態様において、
1つ又は複数のプロセッサと、
1つ又は複数のプログラムを記憶したメモリと、を含み、前記1つ又は複数のプログラムが前記1つ又は複数のプロセッサによって実行される時、本開示による方法を前記1つ又は複数のプロセッサに実現させる、コンピューティングデバイスを提供する。
1つ又は複数のプロセッサと、
1つ又は複数のプログラムを記憶したメモリと、を含み、前記1つ又は複数のプログラムが前記1つ又は複数のプロセッサによって実行される時、本開示による方法を前記1つ又は複数のプロセッサに実現させる、コンピューティングデバイスを提供する。
本開示は、別の態様において、プログラムが記憶されているコンピュータ読み取り可能な記憶媒体であって、前記プログラムがプロセッサによって実行される時、本開示による方法を実現させる、コンピュータ読み取り可能な記憶媒体を提供する。
本願によれば、共有メモリの方式を採用することによってプロセス間の通信を実現し、プロセスが直接メモリを読み書きすることができるため、データのコピー回数を減らすことができ、これはプロセス間通信(IPC、Inter-Process Communication)の有効なメカニズムであり、効率的なメッセージ伝達を実現することができる。さらに、本願によれば、伝送データ(例えばメッセージ)のサイズを事前に予測する必要がなく、ユーザはメッセージを動的に拡張することができる。このように、異なるプロセスの間で静的メッセージと動的メッセージのどちらを伝送しても、データのコピー回数を減らすことができる。
本発明の実施例又は従来技術における技術的解決手段をより明らかに説明するために、以下、実施例又は従来技術の記述に使用される図面を簡単に紹介するが、無論、当業者にとっては、創造的な工夫せずに、これらの図面に基づいて他の図面を得ることもできる。
以下、図面を参照して、本発明の実施例における技術的解決手段を明確、完全に記述するが、明らかに、記述される実施例は本発明の一部の実施例にすぎず、全ての実施例ではない。本明細書における実施例に基づいて、当業者は、種々の変更及び変形を行うことができ、同等な方法で変形されて得られた全ての技術的解決手段は本発明の保護範囲に属する。
本発明の実施例の技術的解決手段を明確に記述しやすくために、本発明の実施例において、「第1」、「第2」などの文言を採用して機能又は作用が実質的に同一である同一項目又は類似項目を区別したが、当業者であれば、「第1」、「第2」などの文言は数及び実行順序を限定するものではないことが理解できる。
本明細書における「及び/又は」という用語は、関連対象の関連関係を記述するものにすぎず、3種類の関係が存在し得ることを示し、例えば、A及び/又はBは、Aが単独で存在する場合と、A及びBが同時に存在する場合と、Bが単独で存在する場合との3つの状況を示すことができる。また、本明細書における「/」という文字は、一般的に、前後の関連対象が「又は」の関係であることを示す。
本願の実施例は、共有メモリの方式を採用することによってプロセス間通信を実現する方法、関連するコンピューティングデバイス及び記憶媒体を提供し、データのコピー回数を減らし、効率的なプロセス間通信を実現することができる。
さらに、本願の発明者は、静的メッセージ(即ち、プロセスの実行中にメッセージに必要な記憶空間が変化しない)について、メッセージに必要な記憶空間のサイズを事前に予測することができ、初期化の時に共有メモリブロックのサイズを決定することができることに気付いている。しかしながら動的メッセージを伝送する必要がある場合(例えば、プロセスの実行中にメッセージに必要な記憶空間が動的に増加する場合)、共有メモリブロックのサイズが初期化の時に決定される場合、共有メモリブロックは初期化後にサイズを変更することができないので、動的に増加する記憶空間が共有メモリブロックのサイズを超える状況が生じる。
本願のいくつかの実施例によれば、伝送されるメッセージのサイズを事前に予測する必要がなく、ユーザはメッセージを動的に拡張することができる。このように、異なるプロセスの間で静的メッセージと動的メッセージのどちらを伝送しても、データのコピー回数を減らすことができる。
図1は、本願のいくつかの実施例によるプロセス間通信の模式図を示す。図1に示すように、オペレーティングシステム133はメモリ137を管理することを担当し、メモリ137における複数のブロックは、プロセス(例えば、第1のプロセス113及び第2のプロセス123)の間で共有され得、このようなブロックは共有メモリブロックとも呼ばれ、例えば第1の共有メモリブロック138及び第2の共有メモリブロック139である。各共有メモリブロックはメモリにおける連続した記憶空間のセグメントであり得る。
各プロセスは、メモリアロケータと、共有メモリマネージャとを有し得る。例えば、第1のプロセス113はメモリアロケータ115と共有メモリマネージャ116を有する。第2のプロセス123は同様にメモリアロケータ125と共有メモリマネージャ126を有する。第1のプロセス113及び第2のプロセス123の一方は送信プロセスであり得、他方は受信プロセスであり得る。例えば、図1の例において、第1のプロセス113は送信プロセスであり、第2のプロセス123は受信プロセスである。
共有メモリマネージャは連結リストのメンテナンスを担当し、各連結リストは複数のノードを含み、各ノードは1つの共有メモリブロックに対応し、かつ異なる連結リストの相応するノードは同じ共有メモリブロックに対応し得る。本明細書における連結リストは共有メモリ連結リストとも呼ばれる。例えば、共有メモリマネージャ116は連結リスト117をメンテナンスし、連結リスト117は複数のノード、例えば第1のノード118及び第2のノード119を含む。共有メモリマネージャ126は連結リスト127をメンテナンスし、連結リスト127は複数のノード、例えば第1のノード128及び第2のノード129を含む。連結リスト117の第1のノード118及び連結リスト127の第1のノード128は両方とも第1の共有メモリブロック138に対応し得、連結リスト117の第2のノード119及び連結リスト127の第2のノード129は両方とも第2の共有メモリブロック139に対応し得る。
本願のいくつかの実施例において、オペレーティングシステムがあるプロセスに対して共有メモリブロックを割り当てる時、当該プロセスに連結リストが存在しない場合、当該プロセスは連結リストを作成し(例えば共有メモリマネージャによって連結リストを作成することができる)、かつ連結リストに割り当てられた共有メモリブロックに対応するノードを含む。次いて、オペレーティングシステムが当該プロセスに対して新たな共有メモリブロックを割り当てる時、当該プロセスは連結リストに新たなノードを追加し、当該新たなノードは例えば連結リストの末尾に追加することができる。異なるプロセスの共有メモリマネージャの間で連結リストを同期することができる。例えば、オペレーティングシステムが第1のプロセス113に対して新たな共有メモリブロックを割り当てる時、第1のプロセスは連結リスト117の末尾に新たなノードを追加し、第1のプロセス113の共有メモリマネージャ116と第2のプロセス123の共有メモリマネージャ126との間で後に連結リスト117及び連結リスト127を同期する。このように、共有メモリマネージャ116と共有メモリマネージャ126との間の同期により、連結リスト127の末尾にもそれに応じて新たなノードを追加する。連結リスト117の末尾に新たに追加されたノード及び連結リスト127の末尾に新たに追加されたノードは両方とも新たに割り当てられた共有メモリブロックに対応する。
本願のいくつかの実施例において、連結リストのノードは論理アドレスを保持することができ、かつプロセス又はオペレーティングシステムに論理アドレスと共有メモリブロックの物理アドレスとの間のマッピングを記憶することができ、このように当該論理アドレスによって当該ノードに対応する共有メモリブロックをアドレス指定することができる。
同じ共有メモリブロックの物理アドレスに対応する論理アドレスは通常連続しているため、本願のいくつかの実施例において、連結リストのノードは相応する共有メモリブロックの開始物理アドレス(又は開始ポインタ)に対応する開始論理アドレスのみを保持し、このように開始論理アドレスによって相応する共有メモリブロックの開始物理アドレスを決定することができる。連結リストのノードは、長さ値、即ち対応する共有メモリブロックの空間サイズを保持することもでき、当該長さ値は、例えば共有メモリブロックの物理アドレス(又はポインタ)の数と一致することができる。メモリアロケータは開始論理アドレス及び長さ値に基づいて当該共有メモリブロックに対応する全ての論理アドレス、即ち対応する連結リストノードによって表される全ての論理アドレスを計算することができる。
メモリアロケータは共有メモリマネージャの連結リストによって表される各論理アドレスの使用状態情報(即ちメッセージ(子メッセージ又は親メッセージを含む)及び他のデータにこれらの論理アドレスが既に割り当てられているか否か)を保持する。ユーザがメッセージ(子メッセージ又は親メッセージ)に対して記憶空間を申請するリクエストを受信する時、メモリアロケータは使用状態情報に基づいて連結リストによって表される全ての論理アドレスに必要なサイズの未割り当ての論理アドレス空間があるか否かを判断する。いくつかの実施例において、当該未割り当ての論理アドレス空間は連続している必要がある。ノードが共有メモリブロックに対応し、論理アドレスが共有メモリブロックの物理アドレスに対応するので、このようにメモリアロケータは必要なサイズの未割り当ての論理アドレス空間があるか否かを判断することによって、各共有メモリブロックが相応するサイズの未割り当て(又は未使用)の物理アドレス空間を有するか否かを知ることができる。必要なサイズの未割り当ての論理アドレス空間があると判断した場合、メモリアロケータは当該メッセージ(子メッセージ又は親メッセージ)に対して必要なサイズの論理アドレス空間及び対応する抽象ポインタを割り当て、かつ抽象ポインタをユーザに提供する。いくつかの実施例において、抽象ポインタはメモリアロケータによって割り当てられた論理アドレス空間の開始論理アドレスに対応する。必要なサイズの未割り当ての論理アドレス空間がないと判断した場合、メモリアロケータはオペレーティングシステムに申請するメモリブロックのサイズ及び数を決定する。
本願のいくつかの実施例において、プロセスは、ユーザによって提供された抽象ポインタを受信し、共有メモリマネージャに抽象ポインタに対応する論理アドレスを問い合わせることができる。例えば、第1のプロセス113はユーザによって提供された抽象ポインタ114に基づいて、共有メモリマネージャ116に抽象ポインタ114に対応する論理アドレスを問い合わせることができる。前述したように、抽象ポインタは1つのオフセット値を表しており、このようにノードの開始論理アドレスに抽象ポインタ(即ちオフセット値)を加算することにより当該抽象ポインタに対応する論理アドレスを得ることができる。当該抽象ポインタに対応する論理アドレスが分かると、共有メモリブロックにおける相応する物理アドレスに位置決めすることができる。
いくつかの実施例において、抽象ポインタはグローバルポインタであり、つまり、抽象ポインタによって表されるオフセット値は異なるノードを跨ることができ、換言すれば、抽象ポインタによって表されるオフセット値は連結リスト全体に対する、連結リスト全体の最初のノードの最初の論理アドレス(即ち開始論理アドレス)に対するオフセットである。例えば、図2に示すように、第1のプロセスの第1のノードは開始論理アドレス50及び長さ値100を維持し、第1のプロセスの第2のノードは開始論理アドレス500及び長さ値200を維持する。第2のプロセスの第1のノードは開始論理アドレス1000及び長さ値100を維持し、第2のプロセスの第2のノードは開始論理アドレス10及び長さ値200を維持する。第1のプロセスの第1のノードが第2のプロセスの第1のノードに対応するので、同じ長さを有するが、オペレーティングシステムによって異なるプロセスに提供される論理アドレスは通常関連付けられていないので、それらは異なる開始論理アドレスを有する。同様に、第1のプロセスの第2のノードが第2のプロセスの第2のノードに対応するので、同じ長さを有するが、異なる開始論理アドレスを有する。
第1のプロセスの第1のノードの開始論理アドレスは50であり、抽象ポインタが20である場合、即ち第1のノードの開始論理アドレスに対して20オフセットする場合、開始論理アドレス50にオフセット値20を加算すると論理アドレス70が得られ、即ち抽象ポインタ20が第1のプロセスにおいて論理アドレス70に対応する。同様に第2のプロセスにおける抽象ポインタ20に対応する論理アドレス1020が得られる。オペレーティングシステムは論理アドレス70及び論理アドレス1020を共有メモリブロックの同じ物理アドレスにマッピングする。このようにオペレーティングシステムは論理アドレス70及び論理アドレス1020に基づいて共有メモリブロックにおける当該抽象ポインタに対応する物理アドレスを得ることができる。
抽象ポインタが110である場合(即ちオフセット値が110である場合)、当該オフセット値は第1のノードの長さ100よりも大きく、オフセット値110から第1のノードの長さ100を減算すると、10が得られ、即ち第2のノードの開始論理アドレスに対して10オフセットする。第1のプロセスの第2のノードの開始論理アドレスが500である場合、開始論理アドレス500にオフセット値10を加算すると論理アドレス510が得られ、即ち抽象ポインタ110が第1のプロセスにおいて論理アドレス510に対応する。同様に第2のプロセスにおける抽象ポインタ110に対応する論理アドレス20が得られる。オペレーティングシステムは論理アドレス510及び論理アドレス20を共有メモリブロックの同じ物理アドレスにマッピングする。このようにオペレーティングシステムは論理アドレス510及び論理アドレス20に基づいて共有メモリブロックにおける当該抽象ポインタに対応する物理アドレスを得ることができる。
いくつかの実施例において、抽象ポインタを用いてメッセージ(メッセージは親メッセージ及び/又は子メッセージを含み得る)を共有メモリブロックに書き込むか又は共有メモリブロックから読み出すことができる。いくつかの実施例において、抽象ポインタによってメッセージ(親メッセージ又は子メッセージ)が書き込まれるか又は読み出される共有メモリブロックの開始物理アドレスを得ることができる。いくつかの実施例において、メッセージ(親メッセージ又は子メッセージ)は所定の構造を有することができ、例えば所定のサイズ又は終了識別子を有する。送信プロセス及び受信プロセス(即ち第1のプロセス及び第2のプロセス)は共にメッセージの構造に関する情報を有しており、このように、送信プロセス及び受信プロセスはメッセージの構造に基づいてメッセージ(親メッセージ又は子メッセージ)の書き込みと読み取りの終了を知ることができる。
メッセージは親メッセージ及び/又は1つ又は複数の子メッセージを含み得る。図3は、メッセージの一例を示す。図3の例において、当該メッセージはカメラメッセージであり、親メッセージは、焦点距離、画角、及び見本その3つのフィールドを含み、子メッセージはフィールド見本を含む。1つの共有メモリブロックに親メッセージのデータ、例えば焦点距離データ(例えば8mm)、画角データ(例えば40度)及び見本のポインタを記憶することができ、当該ポインタは子メッセージの記憶空間を指す。見本用の画像(即ち子メッセージ)は別の共有メモリブロックに記憶されることができる。この例において、見本のデータが大きすぎて、焦点距離及び画角データと連続して1つの共有メモリブロックに記憶することができないと仮定している。
図4は、本願の例示的な実施例によるプロセス間通信のための方法のフローチャートである。図4に示すように、当該方法は、
第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信するステップ402と、
第1のプロセスによってオペレーティングシステムに第1の数の共有メモリブロックを申請するステップ404であって、各共有メモリブロックの記憶空間は前記第1のサイズ以上であるステップ404と、
オペレーティングシステムが第1の数の共有メモリブロックを割り当てたことに応答して、第1のプロセスによって第1の連結リストに第1の数の第1のノードを追加するステップ406であって、各第1のノードは割り当てられた1つの共有メモリブロックに対応するステップ406と、
第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信するステップ408と、を含む。
第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信するステップ402と、
第1のプロセスによってオペレーティングシステムに第1の数の共有メモリブロックを申請するステップ404であって、各共有メモリブロックの記憶空間は前記第1のサイズ以上であるステップ404と、
オペレーティングシステムが第1の数の共有メモリブロックを割り当てたことに応答して、第1のプロセスによって第1の連結リストに第1の数の第1のノードを追加するステップ406であって、各第1のノードは割り当てられた1つの共有メモリブロックに対応するステップ406と、
第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信するステップ408と、を含む。
いくつかの実施例において、各第1のノードは、前記第1のノードに対応する共有メモリブロックの開始アドレス(即ち開始物理アドレス)に対応する開始論理アドレスと、前記第1のノードに対応する共有メモリブロックの記憶空間のサイズに対応する長さ値と、を含む。
いくつかの実施例において、プロセス間通信のための方法は、第2のプロセスによって前記識別子に基づいて第2の連結リストに第1の数の第2のノードを追加するステップであって、各第2のノードは割り当てられた1つの共有メモリブロックに対応するステップをさらに含む。
いくつかの実施例において、各第2のノードは、前記第2のノードに対応する共有メモリブロックの開始アドレス(即ち開始物理アドレス)に対応する開始論理アドレスと、前記第2のノードに対応する共有メモリブロックの記憶空間のサイズに対応する長さ値と、を含む。
いくつかの実施例において、プロセス間通信のための方法は、第1のプロセスによって前記リクエストに前記第1のサイズの記憶空間を割り当て、かつ割り当てられた記憶空間にアクセスするための抽象ポインタを提供するステップをさらに含む。第1のプロセスは第1の連結リストに追加された各第1のノードによって表される論理アドレス空間において前記リクエストに連続した論理アドレス空間のセグメントを、前記第1のサイズの記憶空間として割り当てることができる。これらの第1のノードの論理アドレスがオペレーティングシステムによって割り当てられた共有メモリブロックの物理アドレスに対応するので、第1のプロセスによって割り当てられた論理アドレスは実質的に共有メモリブロックが割り当てられた物理アドレスに対応する。
いくつかの実施例において、前記抽象ポインタは前記第1の連結リストにおける最初のノードの開始論理アドレスからのオフセットを表す。
いくつかの実施例において、プロセス間通信のための方法は、ユーザがメッセージに値を割り当てる時、第1のプロセスによって前記抽象ポインタに基づいて前記メッセージに用いる論理アドレスを決定するステップをさらに含み、それによって前記メッセージを割り当てられた共有メモリブロックに記憶する。
いくつかの実施例において、プロセス間通信のための方法は、第1のプロセスによって抽象ポインタを第2のプロセスに送信し、第2のプロセスが抽象ポインタに基づいて前記メッセージにアクセスするステップをさらに含む。
いくつかの実施例において、前記第1の数の第1のノードは第1のグループのノードであり、割り当てられた第1の数の共有メモリブロックは第1のグループの共有メモリブロックであり、前記第1の連結リストは第2のグループの共有メモリブロックに対応する第2のグループのノードをさらに含み、そのうち、第1のプロセスによって第1の連結リストに第1の数の第1のノードを追加するステップは、
第1のプロセスによって第1の連結リストに前記第2のグループのノードの後に第1の数の第1のノードを追加するステップを含む。
第1のプロセスによって第1の連結リストに前記第2のグループのノードの後に第1の数の第1のノードを追加するステップを含む。
いくつかの実施例において、第2のグループのノードにおける各ノードは連続した論理アドレスのセグメントを表し、前記論理アドレスは当該ノードに対応する共有メモリブロックの物理アドレスに対応する。
いくつかの実施例において、前記第1のプロセスは前記第2のグループのノードの論理アドレスの使用状態情報を保持し、プロセス間通信のための方法は、
第1のプロセスが前記使用状態情報に基づいて前記第2のグループの共有メモリブロックに連続した前記第1のサイズの記憶空間があるか否かを判断するステップをさらに含む。論理アドレスが共有メモリブロックの物理アドレスに対応するので、第1のプロセスは前記第2のグループのノードによって表される論理アドレス空間に連続した論理アドレス空間のセグメントがあるか否かを判断することによって、前記第2のグループの共有メモリブロックに連続した前記第1のサイズの記憶空間があるか否かを判断する。
第1のプロセスが前記使用状態情報に基づいて前記第2のグループの共有メモリブロックに連続した前記第1のサイズの記憶空間があるか否かを判断するステップをさらに含む。論理アドレスが共有メモリブロックの物理アドレスに対応するので、第1のプロセスは前記第2のグループのノードによって表される論理アドレス空間に連続した論理アドレス空間のセグメントがあるか否かを判断することによって、前記第2のグループの共有メモリブロックに連続した前記第1のサイズの記憶空間があるか否かを判断する。
いくつかの実施例において、第1のプロセスによってオペレーティングシステムに第1の数の共有メモリブロックを申請するステップは、第1のプロセスが前記第2のグループの共有メモリブロックに連続した前記第1のサイズの記憶空間がないと判断したことに応答して、第1のプロセスによってオペレーティングシステムに前記第1の数の共有メモリブロックを申請するステップを含む。
いくつかの実施例において、プロセス間通信のための方法は、第1のプロセスによってユーザがメッセージに対して第2のサイズの記憶空間を申請するリクエストに応答して、オペレーティングシステムに前記第2のグループの共有メモリブロックを申請するステップをさらに含む。
いくつかの実施例において、前記メッセージは複数の子メッセージを含み、そのうち、第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信するステップは、第1のプロセスによって前記複数の子メッセージのうちの少なくとも1つの子メッセージに対して第1のサイズの記憶空間を申請するリクエストを受信するステップを含む。
いくつかの実施例において、前記第1のサイズは前記第2のサイズよりも大きい。
いくつかの実施例において、前記識別子はファイル記述子である。
いくつかの実施例において、第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信するステップは、
第1のプロセスによって第2のプロセスに第1の数の識別子を送信するステップであって、各識別子は割り当てられた1つの共有メモリブロックに関連付けられるステップを含む。
第1のプロセスによって第2のプロセスに第1の数の識別子を送信するステップであって、各識別子は割り当てられた1つの共有メモリブロックに関連付けられるステップを含む。
本願のいくつかの実施例において、子メッセージに対してメモリ空間を動的に申請するとき、必要なメモリ空間が既存の共有メモリブロックにより提供可能なサイズを超える場合、共有メモリマネージャはオペレーティングシステムに新たな共有メモリブロックを申請する。このとき、抽象ポインタは、新たに申請された共有メモリブロックと既存の共有メモリブロックをつなぎ合わせた全体のアドレスオフセット、即ちグローバルアドレスオフセットを保持する。共有メモリブロックは異なるプロセスにおいてマッピングされる論理アドレスが異なるため、各プロセスの共有メモリマネージャは抽象ポインタが異なるプロセスにおいて一貫性を示すように、統一された共有メモリブロックレイアウトをメンテナンスする必要がある。そのため、各プロセスは1つ(又は複数)の連結リスト(即ち共有メモリ連結リスト)をメンテナンスし、送信プロセスが1つの共有メモリブロックを新たに申請する場合、新たに申請した共有メモリブロックに対応するノードを連結リストの末尾に挿入し、かつ新たに申請した共有メモリブロックの識別子(例えばファイル記述子)を受信プロセスに送信し、受信プロセスが受信した後に自身がメンテナンスした連結リストの末尾にも新たなノードを挿入し、当該新たなノードは送信プロセスが新たに申請した共有メモリブロックに対応し、このように2つのプロセスの連結リストレイアウトを一致させる。抽象ポインタによって共有メモリマネージャにアドレスを問い合わせる時、グローバルアドレスオフセットによって抽象ポインタに対応する本プロセスにおける論理アドレスが見つかる。
本願によれば、動的拡張をサポートする共有メモリ管理技術を採用することにより、伝送メッセージを動的に拡張することができ、それにより動的メッセージの伝送を実現し、データのコピー回数を減らし、プロセス間の伝送がより効率的になる。また、本願はグローバルアドレスオフセットを表す抽象ポインタを採用し、このように受信プロセスは当該抽象ポインタに基づいて対応する共有メモリ空間を正確に決定することができる。
図5は、プロセス間通信の一例を示す。図5に示すように、ユーザがプロセス間で新たなメッセージ(例えば図3に示すカメラメッセージ)を伝送すると決定した場合、第1のプロセスのメモリアロケータに新たなメッセージに対して第1のサイズの記憶空間(即ちメモリ空間)を申請する。当該例において、第1のプロセスはメッセージの送信側であるので、第1のプロセスは送信プロセス又は送信側プロセスとも呼ばれ、相応する第1のプロセスのメモリアロケータは送信側メモリアロケータとも呼ばれる。送信側メモリアロケータは当該新たなメッセージに対してメモリ空間をまだ申請していないと確認し、したがって、第1のプロセス共有メモリマネージャ(送信側共有メモリマネージャとも呼ばれる)に第1のサイズを有する第1の数のメモリブロックを申請する(メモリブロックのプロセス間の共有は、メモリアロケータではなく、主に共有メモリマネージャによって担当されるため、本願はメモリアロケータに対して記述する時、共有メモリブロックではなく、メモリブロックという用語を多く使用する)。当該第1の数は例えばデフォルト値であり得、例えば10である(本願は当該デフォルト値の具体的な値を限定することを意図しておらず、当該デフォルト値は1~100の任意の値、好ましくは1~20の任意の値であり得る)。又は当該第1の数は送信側メモリアロケータによって所定の規則に基づいて決定されることができ、例えば、当該第1の数は、送信側メモリアロケータが前回送信側共有メモリマネージャに申請したメモリブロックの数の所定の倍数であり得(送信側メモリアロケータがこの前送信側共有メモリマネージャにメモリブロックを申請した場合)、例えば2倍である(もちろん本願はこれに限定されず、当該倍数は例えば1~100の間の任意の値、好ましくは1~10の間の任意の値であり得る)。
送信側共有メモリマネージャは次にオペレーティングシステムに第1のサイズを有する第1の数の共有メモリブロックを申請する。送信側共有メモリマネージャの申請に基づいて、オペレーティングシステムは第1の数の共有メモリブロックを割り当て、各共有メモリブロックは当該第1のサイズを有し、オペレーティングシステムはさらにこれらの共有メモリブロックに対して論理アドレス(共有メモリブロックの開始物理アドレスに対応する開始論理アドレスを含む)を生成し、送信側共有メモリマネージャに提供する。
送信側共有メモリマネージャは次いて連結リストを生成することができる。連結リストにおける各ノードはオペレーティングシステムによって割り当てられた1つの共有メモリブロックに対応する。
いくつかの実施例において、連結リストにおける各ノードは対応する共有メモリブロックの論理アドレスを含む。いくつかの実施例において、各共有メモリブロックに対応する論理アドレスは連続しており、このように連結リストにおける各ノードは当該共有メモリブロックの開始物理アドレスに対応する開始論理アドレス、及び当該共有メモリブロックの長さ値(即ち当該共有メモリブロックの空間サイズ)だけを含み得る。開始論理アドレス及び長さ値に基づいて簡単に計算すると当該共有メモリブロックに対応する全ての論理アドレスを得ることができる。
送信側共有メモリマネージャは次にオペレーティングシステムにこれらの共有メモリブロックに関連付けられた識別子を申請する(例えば、各共有メモリブロックに対して1つの関連付けられた識別子を申請する)。識別子の一例はファイル記述子であり、各ファイル記述子は例えば非負の整数であり得る。
送信側共有メモリマネージャはこれらの識別子(例えば、ファイル記述子)を第2のプロセスの共有メモリマネージャに送信する。当該例において、第2のプロセスはメッセージの受信側であるので、第2のプロセスは受信プロセス又は受信側プロセスとも呼ばれ、相応する第2のプロセスの共有メモリマネージャは受信側共有メモリマネージャとも呼ばれる。受信側共有メモリマネージャは、これらの識別子(例えば、ファイル記述子)に対応する共有メモリブロック(即ちオペレーティングシステムが第1のプロセスに対して割り当てた共有メモリブロック)を問い合わせるために、これらの識別子(例えば、ファイル記述子)をオペレーティングシステムに送信する。
いくつかの実施例において、オペレーティングシステムはテーブルで識別子(例えば、ファイル記述子)と第1のプロセスに対して割り当てられた共有メモリブロックとの対応関係を保存する。オペレーティングシステムは第2のプロセスからの識別子(例えば、ファイル記述子)を受信するとテーブルを問い合わせ、各識別子(例えば、ファイル記述子)に対応する共有メモリブロックを決定し、かつ第2のプロセスに対してこれらの共有メモリブロックに対応する論理アドレスを生成する。受信側共有メモリマネージャは次いて連結リストを生成することができ、連結リストにおける各ノードは1つの共有メモリブロックに対応する。いくつかの実施例において、連結リストにおける各ノードは対応する共有メモリブロックの論理アドレスを含む。いくつかの実施例において、各共有メモリブロックに対応する論理アドレスは連続しており、このように連結リストにおける各ノードは当該共有メモリブロックの開始物理アドレスに対応する開始論理アドレス、及び当該共有メモリブロックの長さ値(即ち当該共有メモリブロックの空間サイズ)だけを含み得る。開始論理アドレス及び長さ値に基づいて簡単に計算すると当該共有メモリブロックに対応する全ての論理アドレスを得ることができる。
これらの識別子(例えば、ファイル記述子)を第2のプロセスの共有メモリマネージャに送信すると同時に、又はその前又はその後に、送信側共有メモリマネージャは、送信側メモリアロケータにメモリブロックの申請に成功したことを通知するために、送信側メモリアロケータにメモリブロック割り当て情報を返信する。送信側メモリアロケータは次にメッセージに対して論理アドレス空間及び対応する抽象ポインタを割り当て、かつ抽象ポインタをユーザに提供し、そのうち抽象ポインタは送信側メモリアロケータによってメッセージに対して割り当てられた論理アドレス空間の開始論理アドレスに対応する。
前述したようにメッセージは親メッセージと1つ又は複数の子メッセージとを含み得る。ユーザは抽象ポインタを受信するとメッセージに値を割り当てることができ、即ち親メッセージ(例えば図3における親メッセージ)に値を割り当てるか及び/又は子メッセージのうちの一部の子メッセージに値を割り当てることができる。送信側共有メモリマネージャは抽象ポインタを論理アドレスに変換して、抽象ポインタを受信側共有メモリマネージャに送信する。送信側共有メモリマネージャによって変換された論理アドレス(即ち送信側メモリアロケータがメッセージに対して割り当てた論理アドレス空間の開始論理アドレス)に基づいて、対応する共有メモリブロックの物理アドレスを得ることができ、このように第1のプロセスはメッセージを当該共有メモリブロックに記憶する(又は書き込む)ことができる。受信側共有メモリマネージャは抽象ポインタを受信すると抽象ポインタを論理アドレスに変換し、受信側共有メモリマネージャによって変換された論理アドレスに基づいて、対応する共有メモリブロックの物理アドレスを得ることができ、このように第2のプロセスは当該共有メモリブロックから当該メッセージにアクセスすることができる。
ユーザが他の子メッセージに値を割り当てる準備ができているとき、特に、ある子メッセージがより大きな記憶空間を占めることをユーザが発見したとき(区別のため、以下、当該子メッセージは拡張子メッセージとも呼ばれる)、ユーザは送信側メモリアロケータに当該拡張子メッセージ(例えば図3における見本子メッセージ)に対して第2のサイズのメモリ空間(当該第2のサイズのメモリ空間は例えば第1のサイズのメモリ空間よりも大きい)を申請する。送信側メモリアロケータは送信側共有メモリマネージャの連結リストによって表される論理アドレスの使用状態情報(即ちメッセージ(子メッセージ又は親メッセージを含む)及び他のデータにこれらの論理アドレスが既に割り当てられているか否か)を保持し、かつ使用状態情報に基づいて当該拡張子メッセージに用いることが可能な論理アドレス空間があるか否かを判断する。
いくつかの実施例において、メッセージの親メッセージ及び各子メッセージは共有メモリブロックに連続して記憶される必要がある。この場合、送信側メモリアロケータは使用状態情報に基づいて当該拡張子メッセージに用いる連続した論理アドレス空間があるか否かを判断する。
あれば、送信側メモリアロケータは次に拡張子メッセージに用いる論理アドレス空間及び対応する抽象ポインタを決定し、かつ抽象ポインタをユーザに提供する(抽象ポインタは送信側メモリアロケータによって拡張子メッセージに対して割り当てられた論理アドレス空間の開始論理アドレスに対応する)。
なければ、送信側メモリアロケータは送信側共有メモリマネージャに第2のサイズ(第2のサイズは例えばaであり、aは1よりも大きい整数)を有する第2の数(第2の数は例えばsであり、sは1以上の整数)のメモリブロックを申請する。当該第2の数は例えばデフォルト値であり得、例えば10である(本願は当該デフォルト値の具体的な値を限定することを意図しておらず、当該デフォルト値は1~100の任意の値、好ましくは1~20の任意の値であり得る)。又は、当該第2の数は送信側メモリアロケータによって所定の規則に基づいて決定されることができ、例えば、当該第2の数は、送信側メモリアロケータが前回送信側共有メモリマネージャに申請したメモリブロックの数の所定の倍数であり得、例えば2倍である(もちろん本願はこれに限定されず、当該倍数は例えば1~100の間の任意の値、好ましくは1~10の間の任意の値であり得る)。
送信側共有メモリマネージャは次にオペレーティングシステムに第2のサイズを有する第2の数の共有メモリブロックを申請する。送信側共有メモリマネージャの申請に基づいて、オペレーティングシステムは第2の数の共有メモリブロックを割り当て、各共有メモリブロックは当該第2のサイズを有し、オペレーティングシステムはさらにこれらの共有メモリブロックに対して論理アドレス(共有メモリの開始物理アドレスに対応する開始論理アドレスを含む)を生成し、送信側共有メモリマネージャに提供する。
送信側共有メモリマネージャは連結リストの後にノードを追加することができ、各追加されたノードはオペレーティングシステムによって割り当てられた1つの共有メモリブロックに対応する。いくつかの実施例において、連結リストにおける各ノードは対応する共有メモリブロックの論理アドレスを含む。いくつかの実施例において、各共有メモリブロックに対応する論理アドレスは連続しており、このように連結リストにおける各ノードは当該共有メモリブロックの開始物理アドレスに対応する開始論理アドレス、及び当該共有メモリブロックの長さ値(即ち当該共有メモリブロックの空間サイズ)だけを含み得る。開始論理アドレス及び長さ値に基づいて簡単に計算すると当該共有メモリブロックに対応する全ての論理アドレスを得ることができる。送信側共有メモリマネージャは次にオペレーティングシステムにこれらのメモリブロックに関連付けられた識別子(例えば、ファイル記述子)を申請する。
送信側共有メモリマネージャはこれらの識別子(例えば、ファイル記述子)を受信側共有メモリマネージャに送信し、受信側共有メモリマネージャは、これらの識別子(例えば、ファイル記述子)に対応する共有メモリブロック(即ちオペレーティングシステムが第1のプロセスに対して割り当てた共有メモリブロック)を問い合わせるために、これらの識別子(例えば、ファイル記述子)をオペレーティングシステムに送信する。
オペレーティングシステムは第2のプロセスからの識別子(例えば、ファイル記述子)を受信するとテーブルを問い合わせ、各識別子(例えば、ファイル記述子)に対応する共有メモリブロックを決定し、かつ第2のプロセスに対してこれらの共有メモリブロックに対応する論理アドレスを生成する。受信側共有メモリマネージャは連結リストの後にノードを追加することができ、各追加されたノードは1つの共有メモリブロックに対応する。いくつかの実施例において、連結リストにおける各ノードは対応する共有メモリブロックの論理アドレスを含む。いくつかの実施例において、各共有メモリブロックに対応する論理アドレスは連続しており、このように連結リストにおける各ノードは当該共有メモリブロックの開始物理アドレスに対応する開始論理アドレス、及び当該共有メモリブロックの長さ値(即ち当該共有メモリブロックの空間サイズ)だけを含み得る。開始論理アドレス及び長さ値に基づいて簡単に計算すると当該共有メモリブロックに対応する全ての論理アドレスを得ることができる。
これらの識別子(例えば、ファイル記述子)を第2のプロセスの共有メモリマネージャに送信すると同時に、又はその前又はその後に、送信側共有メモリマネージャは、送信側メモリアロケータにメモリブロックの申請に成功したことを通知するために、送信側メモリアロケータにメモリブロック割り当て情報を返信する。送信側メモリアロケータは次に拡張子メッセージに用いる論理アドレス空間及び対応する抽象ポインタを決定し、かつ抽象ポインタをユーザに提供する(抽象ポインタは送信側メモリアロケータによって拡張子メッセージに対して割り当てられた論理アドレス空間の開始論理アドレスに対応する)。
ユーザは抽象ポインタを受信すると拡張子メッセージに値を割り当てることができる。このとき、送信側共有メモリマネージャは抽象ポインタを論理アドレスに変換して、抽象ポインタを受信側共有メモリマネージャに送信する。送信側共有メモリマネージャによって変換された論理アドレス(即ち送信側メモリアロケータが拡張子メッセージに対して割り当てた論理アドレス空間の開始論理アドレス)に基づいて、対応する共有メモリブロックの物理アドレスを得ることができ、このように第1のプロセスは拡張子メッセージを当該共有メモリブロックに記憶する(又は書き込む)ことができる。受信側共有メモリマネージャは抽象ポインタを受信すると抽象ポインタを論理アドレスに変換し、受信側共有メモリマネージャによって変換された論理アドレスに基づいて、対応する共有メモリブロックの物理アドレスを得ることができ、このように第2のプロセスは当該共有メモリブロックから当該拡張子メッセージにアクセスすることができる。
図6は、プロセス間のメッセージ伝送の別の例である。図6の例は、送信側共有メモリマネージャがまずオペレーティングシステムに識別子(例えば、ファイル記述子)を申請し、そしてオペレーティングシステムから識別子(例えば、ファイル記述子)を受信した後、オペレーティングシステムにこれらの識別子(例えば、ファイル記述子)に対応する共有メモリブロックを申請するという点で図5と異なる。
図7は、プロセス間のメッセージ伝送の更なる別の例である。図7の例は、オペレーティングシステムが識別子(例えば、ファイル記述子)を申請するリクエスト及び/又は共有メモリブロックを申請するリクエストを受信すると、オペレーティングシステムが共有メモリブロックを割り当て識別子(例えば、ファイル記述子)及び論理アドレスを共有メモリマネージャに同時に返信するという点で図5又は図6と異なる。当該例において、共有メモリマネージャからオペレーティングシステムへのリクエストに、必要な共有メモリブロックの空間サイズ及び数の情報を担持することができる。
自動運転車両におけるソフトウェアシステムは、一般に、複数のモジュール(即ちプロセス)間でメッセージを互いに送信することによって通信するように設計されている。モジュール化高デカップリングでは、1つのモジュールの故障が他のモジュールに干渉しないため、システムの安定性を高める。自動運転車両においては、安定性に加え、メッセージ伝達の低遅延性を追求し、メッセージが各モジュール間で素早く伝達することを保証して初めて無人車のリアルタイム性を保証し、アルゴリズムモジュールにより多くの計算時間を与え、制御により多くの意思決定時間を与える。
本願の実施例によれば、複数のプロセスが可視である共有メモリを構築することによって、複数のプロセスによる共有メモリへの直接読み書きを実現する。情報を送信するプロセスは、メッセージを共有メモリに直接書き込み、メッセージを受信するプロセスは冗長なコピープロセスなしに、共有メモリからメッセージを直接読み出すことができる。共有メモリを採用してメッセージ伝達を行うことで、無人車におけるメッセージ伝達時間を効果的に低減し、早期警告、早期ブレーキ制動などのためにより多くの時間を他のモジュールに与えることができ、無人車の安全性を高める。
本願の実施例によれば、動的拡張をサポートする共有メモリ管理により、伝送メッセージを動的に拡張することができ、それにより動的メッセージの伝送に冗長なコピープロセスがなく、プロセス間伝送がより効率的になり、異なるプロセス間で静的メッセージと動的メッセージのどちらを伝送してもコピーオーバヘッドを低減することができる。
図8は、コンピューティングデバイス800の例示的な形態の機械の図を示し、当該コンピューティングデバイスにおける命令セットが実行されたときに及び/又は処理論理が起動されたときに、本明細書において記述及び/又は要求される方法のいずれか11種又は複数種を当該機械に実行させることができる。代替実施例において、機械は、独立した装置として動作するか、又は他の機械に接続(例えばネットワーク接続)され得る。ネットワーク接続配置では、機械はサーバ-クライアントネットワーク環境においてサーバ又はクライアント機械のアイデンティティで動作し、またはピアツーピア(又は分散型)ネットワーク環境でピアツーピア機械として動作することができる。機械は、パーソナルコンピュータ(PC)、ラップトップコンピュータ、タブレットコンピューティングシステム、携帯情報端末(PDA)、セルラ電話、スマートフォン、ネットワークアプリケーション、セットトップボックス(STB)、ネットワークルータ、スイッチ又はブリッジ、又は指定される当該機械が取るべき動作を実行する命令セット(逐次的又はその他の方法で)又は処理論理を起動することができる任意の機械であり得る。さらに、単一の機械だけが図示されているが、「機械」という用語はまた、本明細書において記述及び/又は要求される方法のいずれか1種又は複数種を実行するための命令セット(又は複数の命令セット)を個別に又は連携して実行する機械の任意の集合を含むと理解され得る。
例示的なコンピューティングデバイス800は、バス806又は他のデータ伝送システムを介して互いに通信し得るデータプロセッサ802(例えばシステムチップ(SoC)、汎用処理コア、グラフィックスコア、及び任意選択の他の処理論理)及びメモリ804(例えば、メモリ)を含み得る。コンピューティングデバイス800は、タッチスクリーンディスプレイ、オーディオジャック、音声インタフェース、及び任意選択のネットワークインタフェース812などの様々な入力/出力(I/O)デバイス及び/又はインタフェース810も含み得る。例示的な実施例において、ネットワークインタフェース812は、任意の1つ又は複数の標準無線及び/又はセルラプロトコル又はアクセス技術(例えばセルラシステムの第2世代(2G)、2.5世代、第3世代(3G)、第4世代(4G)及び次世代の無線アクセス、グローバル移動体通信システム(GSM)、汎用パケット無線サービス(GPRS)、拡張データGSM環境(EDGE)、広帯域符号分割多元接続(WCDMA)、LTE、CDMA2000、WLAN、無線ルータ(WR)グリッドなど)と構成された1つ又は複数の無線トランシーバを含み得る。ネットワークインタフェース812は、様々な他の有線及び/又は無線通信プロトコル(TCP/IP、UDP、SIP、SMS、RTP、WAP、CDMA、TDMA、UMTS、UWB、WiFi、WiMax、Bluetooth(c)、IEEE802.11xなどを含む)と共に使用するように構成され得る。本質的に、ネットワークインタフェース812は、任意の有線及び/又は無線通信及びデータ処理機構を実質的に含むか又はサポートすることができ、この機構を介して、情報/データはネットワーク814を介してコンピューティングデバイス800と別のコンピューティング又は通信システムとの間で伝播され得る。
メモリ804は、機械読み取り可能な媒体(又はコンピュータ読み取り可能な記憶媒体)を表すことができ、機械読み取り可能な媒体(又はコンピュータ読み取り可能な記憶媒体)において本明細書において記述及び/又は要求される方法又は機能のいずれか1つ又は複数を実施する1つ又は複数の命令セット、ソフトウェア、ファームウェア、又は他の処理論理(例えば論理808)を記憶する。コンピューティングデバイス800によって実行される期間に、論理808又はその一部はまた、プロセッサ802において完全に又は少なくとも部分的に存在し得る。このように、メモリ804及びプロセッサ802は、機械読み取り可能な媒体(又はコンピュータ読み取り可能な記憶媒体)を構成し得る。論理808又はその一部はまた、処理論理又は論理として構成されることもでき、当該処理論理又は論理の少なくとも一部は、ハードウェアにおいて部分的に実現される。論理808又はその一部は、ネットワークインタフェース812を介してネットワーク814によって伝送され又は受信され得る。論理808は例えばオペレーティングシステム、1つ又は複数のアプリケーション、及び他のプログラムモジュールを含み得る。例示的な実施例の機械読み取り可能な媒体(又はコンピュータ読み取り可能な記憶媒体)は単一の媒体であり得るが、「機械読み取り可能な媒体」(又はコンピュータ読み取り可能な記憶媒体)という用語は1つ又は複数の命令セットを記憶する単一の非一時的媒体又は複数の非一時的媒体(例えば、集中型又は分散型データベース及び/又は関連するキャッシュ及びコンピューティングシステム)を含むと理解されるべきである。「機械読み取り可能な媒体」(又はコンピュータ読み取り可能な記憶媒体)という用語はまた、機械が実行し、かつ様々な実施例の方法のうちのいずれか1種又は複数種を機械に実行させるために、命令セットを記憶、符号化、又は担持することができるか、又は、そのような命令セットによって利用されるか又は関連付けられるデータ構造を記憶、符号化、又は担持することができる、任意の非一時的媒体を含むと理解され得る。したがって、「機械読み取り可能な媒体」(又はコンピュータ読み取り可能な記憶媒体)という用語は、固体メモリ、光媒体、及び磁気媒体を含むが、これらに限定されないと理解され得る。
開示された実施例及び他の実施例、モジュール、及び本明細書に記述された機能的動作は、デジタル電子回路システム、又はコンピュータソフトウェア、ファームウェア、又はハードウェア(本明細書に開示された構造及びその構造的等価物を含む)、又はそれらの1つ又は複数の組み合わせにおいて実現され得る。開示された実施例及び他の実施例は、1つ又は複数のコンピュータプログラム製品、つまり、データ処理装置によって実行される又は当該データ処理装置の動作を制御するようにコンピュータ読み取り可能な媒体に符号化されるコンピュータプログラム命令の1つ又は複数のモジュールとして実現され得る。コンピュータ読み取り可能な媒体は、機械読み取り可能な記憶デバイス、機械読み取り可能な記憶基板、メモリデバイス、機械読み取り可能な伝播信号に影響を及ぼす組成物、又はそれらの1つ又は複数の組み合わせであり得る。「データ処理装置」という用語は、例えば、プログラム可能プロセッサ、コンピュータ、又は複数のプロセッサ若しくはコンピュータを含む、データを処理するための全ての装置、デバイス、及び機械をカバーする。ハードウェアに加えて、当該装置は、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、又はそれらの1つ又は複数の組み合わせを構成するコードなど、検討中のコンピュータプログラムに対して実行環境を作成するコードを含み得る。伝播信号は、例えば機械によって生成される電気信号、光信号、又は電磁信号などの人工的に生成される信号であり、当該信号は、適切な受信機装置に伝送される情報を符号化するようにに生成される。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、又はコードとも呼ばれる)は、任意の形態のプログラミング言語(コンパイラ型又はインタプリタ型言語を含む)で書き込まれ得、かつ当該コンピュータプログラムは、独立したプログラムとして配置されるか、又は、モジュール、部材、サブルーチン、若しくはコンピューティング環境での使用に適した別のユニットとして配置されることを含む、任意の形態で配置され得る。コンピュータプログラムは、必ずしもファイルシステムにおけるファイルに対応する必要はない。プログラムは、他のプログラム又はデータ(例えば、マークアップ言語文書に記憶された1つ又は複数のスクリプト)を保持するファイルの一部に記憶され得、又は検討中のプログラム専用の単一のファイルに記憶され得、又は複数の協調ファイル(例えば、1つ又は複数のモジュール、サブプログラム、又は一部のコードを記憶するファイル)に記憶され得る。コンピュータプログラムは、1つのコンピュータにおいて実行されるか、又は1つのサイトに位置決めされ、又は複数のサイトに分散され、かつ通信ネットワークを介して相互接続された複数のコンピュータにおいて実行されるように配置され得る。
本明細書で記述されるプロセス及び論理フローは、入力データを操作し、出力を生成することによって機能を実行するために、1つ又は複数のコンピュータプログラムを実行する1つ又は複数のプログラム可能プロセッサによって実行され得る。プロセス及び論理フローはまた、専用論理回路システム(例えばFPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路))によって実行され得、且つ装置はまた専用論理回路(例えばFPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路))として実現され得る。
コンピュータプログラムを実行するのに適したプロセッサは、例えば、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方、及び任意の種類のデジタルコンピュータの任意の1つ又は複数のプロセッサを含む。一般に、プロセッサは、リードオンリーメモリ又はランダムアクセスメモリ、又はその両方からの命令及びデータを受信する。コンピュータの必須要素は、命令を実行するためのプロセッサ、及び命令及びデータを記憶するための1つ又は複数のメモリデバイスである。通常、コンピュータは、データを記憶するための1つ又は複数の大容量記憶デバイス(例えば、磁気ディスク、光磁気ディスク、又は光ディスク)も含み、又はコンピュータは、当該1つ又は複数の大容量記憶デバイスからのデータを受信するか、又はデータを当該1つ又は複数の大容量記憶デバイスに伝送するか、又はその両方を行うように動作可能に接続される。しかし、コンピュータは、そのようなデバイスを有する必要はない。コンピュータプログラム命令及びデータを記憶するのに適したコンピュータ読み取り可能な媒体は、例えば、EPROM、EEPROM、及びフラッシュメモリデバイスなどの半導体メモリデバイスを含む、全ての形態の不揮発性メモリ、媒体、及びメモリデバイスを含み、例えば、内蔵ハードディスク又はリムーバブルディスクなどの磁気ディスク、光磁気ディスク、及びCD-ROMディスクやDVD-ROMディスクを含む。プロセッサ及びメモリは、専用論理回路に補足され得、又は当該専用論理回路システムに組み込まれ得る。
本開示は多くの詳細を含むが、これらの詳細は、任意の発明又は特許請求される可能な範囲の限定として解釈されるべきではなく、むしろ、特定の発明の特定の実施例の特徴に向けられることが可能である記述として解釈されるべきである。本開示において、別個の実施例の文脈で記述されるある特定の特徴はまた、単一の実施例において組み合わせて実現され得る。逆に、単一の実施例の文脈で記述された様々な特徴は、複数の実施例において、別々に、又は任意の適切なサブ組み合わせで実現され得る。さらに、特徴は、ある組み合わせで機能するものとして上記で説明され、最初に、それらの特徴が同様に特許請求されることさえあるが、特許請求される組み合わせからの1つ又は複数の特徴は、場合によっては、組み合わせから削除され得、特許請求される組み合わせは、サブ組み合わせ又はサブ組み合わせの変形例を対象とし得る。
同様に、動作は特定の順序で図面に図示されているが、そのような動作は、図示された特定の順序で、又は連続した順序で実行されること、又は所望の結果を達成するために、図示された全ての動作が実行されることが必要であると理解されるべきではない。さらに、本開示で記述される実施例における様々なシステム構成要素の分離は、全ての実施例においてそのような分離が必要であると理解されるべきではない。
いくつかの実現及び例だけが記述されており、他の実現、強化、及び変形が、本開示において記述及び図示されるものに基づいて行われ得る。
本明細書に記載された実施例の説明は、様々な実施例の構造の一般的な理解を提供することを意図しており、本明細書に記載された構造を利用し得る部材及びシステムの全ての要素及び特徴の完全な説明として機能することを意図していない。多くの他の実施例は、本明細書で提供される記述を検討すれば、当業者には容易に理解されるであろう。他の実施例を利用する及び得ることができ、それにより、本開示の範囲から逸脱することなく、構造的及び論理的な代替及び変更が行われ得る。本明細書の図面は、代表的なものにすぎず、縮尺通りに描かれていない場合がある。ある縮尺は増加され、他の縮尺は最小化され得る。したがって、明細書及び図面は、限定的なものではなく例示的なものとみなされる。
いくつかの実施例は、関連する制御信号及びデータ信号がモジュールの間にあり、モジュールによって伝達されるか、又は特定用途向け集積回路の一部とする、2つ以上の特定の相互接続されたハードウェアモジュール又は装置において機能を実現する。したがって、例示的なシステムは、ソフトウェア、ファームウェア、及びハードウェアの実現に適している。
図面を参照して本開示の例示的な実施例又は例を記述したが、上記の例示的な記述は、網羅的であること、又は、本発明を開示された具体的な形態に制限することを意図しないと理解すべきである。上記の教示された内容に基づいて、多くの修正や変形が可能である。したがって、開示された主旨は、本明細書に記載の任意の単一の実施例又は例に限定されるべきではなく、添付される特許請求の範囲の幅と範囲に基づいて解釈されるべきである。
Claims (15)
- 第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信するステップと、
第1のプロセスによってオペレーティングシステムに第1の数の共有メモリブロックを申請するステップであって、各共有メモリブロックの記憶空間は前記第1のサイズ以上であるステップと、
オペレーティングシステムが第1の数の共有メモリブロックを割り当てたことに応答して、第1のプロセスによって第1の連結リストに第1の数の第1のノードを追加するステップであって、各第1のノードは割り当てられた1つの共有メモリブロックに対応するステップと、
第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信するステップと、を含む、プロセス間通信のための方法。 - 各第1のノードは、前記第1のノードに対応する共有メモリブロックの開始アドレスに対応する開始論理アドレスと、前記第1のノードに対応する共有メモリブロックの記憶空間のサイズに対応する長さ値と、を含む、請求項1に記載の方法。
- 第2のプロセスによって前記識別子に基づいて第2の連結リストに第1の数の第2のノードを追加するステップであって、各第2のノードは割り当てられた1つの共有メモリブロックに対応するステップをさらに含む、請求項1又は2に記載の方法。
- 各第2のノードは、前記第2のノードに対応する共有メモリブロックの開始アドレスに対応する開始論理アドレスと、前記第2のノードに対応する共有メモリブロックの記憶空間のサイズに対応する長さ値と、を含む、請求項3に記載の方法。
- 第1のプロセスによって前記リクエストに前記第1のサイズの記憶空間を割り当て、かつ割り当てられた記憶空間にアクセスするための抽象ポインタを提供するステップであって、
前記抽象ポインタは前記第1の連結リストにおける最初のノードの開始論理アドレスからのオフセットを表すステップをさらに含む、請求項1~4のいずれか1項に記載の方法。 - ユーザがメッセージに値を割り当てる時、第1のプロセスによって前記抽象ポインタに基づいて前記メッセージに用いる論理アドレスを決定するステップと、
第1のプロセスによって抽象ポインタを第2のプロセスに送信し、第2のプロセスが抽象ポインタに基づいて前記メッセージにアクセスするステップと、をさらに含む、請求項5に記載の方法。 - 前記第1の数の第1のノードは第1のグループのノードであり、割り当てられた第1の数の共有メモリブロックは第1のグループの共有メモリブロックであり、前記第1の連結リストは第2のグループの共有メモリブロックに対応する第2のグループのノードをさらに含み、そのうち、第1のプロセスによって第1の連結リストに第1の数の第1のノードを追加するステップは、
第1のプロセスによって第1の連結リストに前記第2のグループのノードの後に第1の数の第1のノードを追加するステップを含む、請求項1~6のいずれか1項に記載の方法。 - 第2のグループのノードにおける各ノードは連続した論理アドレスのセグメントを表し、前記論理アドレスは当該ノードに対応する共有メモリブロックの物理アドレスに対応する、請求項7に記載の方法。
- 前記第1のプロセスは前記第2のグループのノードによって表される論理アドレスの使用状態情報を保持し、そのうち、前記方法は、
第1のプロセスが前記使用状態情報に基づいて前記第2のグループの共有メモリブロックに連続した前記第1のサイズの記憶空間があるか否かを判断するステップをさらに含む、請求項8に記載の方法。 - 第1のプロセスによってオペレーティングシステムに第1の数の共有メモリブロックを申請するステップは、第1のプロセスが前記第2のグループの共有メモリブロックに連続した前記第1のサイズの記憶空間がないと判断したことに応答して、第1のプロセスによってオペレーティングシステムに前記第1の数の共有メモリブロックを申請するステップを含む、請求項9に記載の方法。
- 第1のプロセスによってユーザがメッセージに対して第2のサイズの記憶空間を申請するリクエストに応答して、オペレーティングシステムに前記第2のグループの共有メモリブロックを申請するステップをさらに含む、請求項7~10のいずれか1項に記載の方法。
- 前記メッセージは複数の子メッセージを含み、そのうち、第1のプロセスによって第1のサイズの記憶空間を申請するリクエストを受信するステップは、第1のプロセスによって前記複数の子メッセージのうちの少なくとも1つの子メッセージに対して第1のサイズの記憶空間を申請するリクエストを受信するステップであって、前記第1のサイズは前記第2のサイズよりも大きいステップを含む、請求項11に記載の方法。
- 第1のプロセスによって第2のプロセスに割り当てられた共有メモリブロックに関連付けられた識別子を送信するステップは、
第1のプロセスによって第2のプロセスに第1の数の識別子を送信するステップであって、各識別子は割り当てられた1つの共有メモリブロックに関連付けられるステップを含む、請求項1~12のいずれか1項に記載の方法。 - 1つ又は複数のプロセッサと、
1つ又は複数のプログラムを記憶したメモリと、を含み、前記1つ又は複数のプログラムが前記1つ又は複数のプロセッサによって実行される時、請求項1~13のいずれか一項に記載の方法を前記1つ又は複数のプロセッサに実現させる、コンピューティングデバイス。 - プログラムが記憶されているコンピュータ読み取り可能な記憶媒体であって、前記プログラムがプロセッサによって実行される時、請求項1~13のいずれか1項に記載の方法を実現する、コンピュータ読み取り可能な記憶媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110294963.7A CN115114038A (zh) | 2021-03-19 | 2021-03-19 | 用于进程间通信的方法、相关的计算设备及存储介质 |
CN202110294963.7 | 2021-03-19 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022145582A true JP2022145582A (ja) | 2022-10-04 |
Family
ID=81325287
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022035834A Pending JP2022145582A (ja) | 2021-03-19 | 2022-03-09 | プロセス間通信のための方法、関連するコンピューティングデバイス及び記憶媒体 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20220300356A1 (ja) |
EP (1) | EP4060497A1 (ja) |
JP (1) | JP2022145582A (ja) |
CN (1) | CN115114038A (ja) |
AU (1) | AU2022201560A1 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12131204B1 (en) * | 2022-08-31 | 2024-10-29 | Zoox, Inc. | Latency mitigation for inter-process communication |
US20240220320A1 (en) * | 2022-12-30 | 2024-07-04 | Advanced Micro Devices, Inc. | Systems and methods for sharing memory across clusters of directly connected nodes |
CN117539636B (zh) * | 2023-12-06 | 2024-11-22 | 摩尔线程智能科技(北京)有限责任公司 | 总线模块的内存管理方法、装置、电子设备和存储介质 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7280957B2 (en) * | 2002-12-16 | 2007-10-09 | Palo Alto Research Center, Incorporated | Method and apparatus for generating overview information for hierarchically related information |
US7716180B2 (en) * | 2005-12-29 | 2010-05-11 | Amazon Technologies, Inc. | Distributed storage system with web services client interface |
CN100403739C (zh) * | 2006-02-14 | 2008-07-16 | 华为技术有限公司 | 基于链表的进程间消息传递方法 |
US7584229B2 (en) * | 2006-10-31 | 2009-09-01 | Sun Microsystems, Inc. | Method and system for priority-based allocation in a storage pool |
US8375062B2 (en) * | 2007-11-19 | 2013-02-12 | Oracle America, Inc. | Simple optimistic skiplist |
US7937378B2 (en) * | 2008-08-13 | 2011-05-03 | Oracle America, Inc. | Concurrent lock-free skiplist with wait-free contains operator |
US8108587B2 (en) * | 2009-05-26 | 2012-01-31 | Microsoft Corporation | Free-space reduction in cached database pages |
US8959309B2 (en) * | 2009-06-18 | 2015-02-17 | Canon Kabushiki Kaisha | Skip list generation |
US8312457B2 (en) * | 2009-12-14 | 2012-11-13 | Microsoft Corporation | Maintaining a count for lock-free linked list structures |
US9448850B2 (en) * | 2010-03-11 | 2016-09-20 | International Business Machines Corporation | Discovering a resource in a distributed computing system |
US8381230B2 (en) * | 2010-04-21 | 2013-02-19 | International Business Machines Corporation | Message passing with queues and channels |
EP2641188B1 (en) * | 2010-11-16 | 2018-07-11 | Tibco Software Inc. | Locking and signaling for implementing messaging transports with shared memory |
US9201806B2 (en) * | 2013-01-04 | 2015-12-01 | International Business Machines Corporation | Anticipatorily loading a page of memory |
US9311011B2 (en) * | 2013-08-07 | 2016-04-12 | Qualcomm Incorporated | Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems |
CN103440203B (zh) * | 2013-08-26 | 2017-07-25 | 上海斐讯数据通信技术有限公司 | 一种共享内存分配方法 |
CN105868028B (zh) * | 2015-01-23 | 2021-05-18 | 深圳市链科网络科技有限公司 | 一种进程间共享数据的方法、装置及终端 |
CN105700968A (zh) * | 2016-01-11 | 2016-06-22 | 厦门雅迅网络股份有限公司 | 一种嵌入式系统中内存泄漏诊断处理的方法和装置 |
US10534719B2 (en) * | 2017-07-14 | 2020-01-14 | Arm Limited | Memory system for a data processing network |
JP6835758B2 (ja) * | 2018-02-13 | 2021-02-24 | 日本電信電話株式会社 | フロー制御装置および方法 |
US20200364100A1 (en) * | 2019-05-14 | 2020-11-19 | Microsoft Technology Licensing, Llc | Memory abstraction for lock-free inter-process communication |
US11385820B2 (en) * | 2020-03-04 | 2022-07-12 | Micron Technology, Inc. | Command batching for a memory sub-system |
US11347648B2 (en) * | 2020-06-26 | 2022-05-31 | Micron Technology, Inc. | Direct cache hit and transfer in a memory sub-system that programs sequentially |
-
2021
- 2021-03-19 CN CN202110294963.7A patent/CN115114038A/zh active Pending
-
2022
- 2022-03-07 AU AU2022201560A patent/AU2022201560A1/en active Pending
- 2022-03-09 JP JP2022035834A patent/JP2022145582A/ja active Pending
- 2022-03-14 EP EP22161977.8A patent/EP4060497A1/en active Pending
- 2022-03-17 US US17/655,359 patent/US20220300356A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
EP4060497A1 (en) | 2022-09-21 |
US20220300356A1 (en) | 2022-09-22 |
CN115114038A (zh) | 2022-09-27 |
AU2022201560A1 (en) | 2022-10-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7092736B2 (ja) | コンテナオーケストレーションサービスを使用した動的ルーティング | |
US11500689B2 (en) | Communication method and apparatus | |
JP2022145582A (ja) | プロセス間通信のための方法、関連するコンピューティングデバイス及び記憶媒体 | |
CN105740048B (zh) | 一种镜像管理方法、装置及系统 | |
CN105933376B (zh) | 一种数据操作方法,服务器及存储系统 | |
Paternò et al. | A logical framework for multi-device user interfaces | |
CN108513657B (zh) | 数据转换方法及备份服务器 | |
EP3361387A1 (en) | Data transmission method, equipment and system | |
US20220413702A1 (en) | Data communication method, communication system and computer-readable storage medium | |
CN111708738B (zh) | 实现hadoop文件系统hdfs与对象存储s3数据互访方法及系统 | |
WO2021232860A1 (zh) | 通信方法、装置及系统 | |
WO2014190700A1 (zh) | 一种内存访问的方法、缓冲调度器和内存模块 | |
CN111107119B (zh) | 基于云存储系统的数据访问方法、装置、系统及存储介质 | |
CN105791370A (zh) | 一种数据处理方法及相关服务器 | |
CN116028677B (zh) | 数据操作方法以及系统 | |
WO2023066245A1 (zh) | 容器引擎和容器引擎的实现方法、电子设备、存储介质 | |
CN117499396A (zh) | 一种基于云原生平台系统的数据处理的方法和装置 | |
CN115525618A (zh) | 存储集群、数据存储方法、系统及存储介质 | |
US11755496B1 (en) | Memory de-duplication using physical memory aliases | |
CN118488101B (zh) | 云网络系统、通信方法、设备、存储介质及程序产品 | |
US12197461B2 (en) | Distributed function data transformation system | |
CN116186457B (zh) | 网页访问和网页开发的方法、装置、电子设备及介质 | |
CN113676530B (zh) | 数据获取方法、装置、服务端、客户端、系统和介质 | |
CN112882820B (zh) | 用于配置资源的方法及装置 | |
CN120371717A (en) | Memory management method, device, electronic equipment, chip and storage medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20231025 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20231025 |