IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ロベルト・ボッシュ・ゲゼルシャフト・ミト・ベシュレンクテル・ハフツングの特許一覧

特開2024-86659コンピュータ実装データ構造、電子記憶媒体、およびデータ交換方法
<>
  • 特開-コンピュータ実装データ構造、電子記憶媒体、およびデータ交換方法 図1
  • 特開-コンピュータ実装データ構造、電子記憶媒体、およびデータ交換方法 図2a
  • 特開-コンピュータ実装データ構造、電子記憶媒体、およびデータ交換方法 図2b
  • 特開-コンピュータ実装データ構造、電子記憶媒体、およびデータ交換方法 図3a
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024086659
(43)【公開日】2024-06-27
(54)【発明の名称】コンピュータ実装データ構造、電子記憶媒体、およびデータ交換方法
(51)【国際特許分類】
   G06F 16/176 20190101AFI20240620BHJP
【FI】
G06F16/176
【審査請求】未請求
【請求項の数】8
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023210792
(22)【出願日】2023-12-14
(31)【優先権主張番号】10 2022 004 779.9
(32)【優先日】2022-12-16
(33)【優先権主張国・地域又は機関】DE
(71)【出願人】
【識別番号】591245473
【氏名又は名称】ロベルト・ボッシュ・ゲゼルシャフト・ミト・ベシュレンクテル・ハフツング
【氏名又は名称原語表記】ROBERT BOSCH GMBH
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100196508
【弁理士】
【氏名又は名称】松尾 淳一
(74)【代理人】
【識別番号】100161908
【弁理士】
【氏名又は名称】藤木 依子
(72)【発明者】
【氏名】リチャード・ファビアン
(72)【発明者】
【氏名】ティルマン・ジーニング
(57)【要約】
【課題】コンピュータ実装データ構造、電子記憶媒体、およびデータ交換方法を提供すること。
【解決手段】書き込みプロセス(11)と少なくとも1つの読み出しプロセス(12)との間でデータ交換を行うための単一リンクリスト(30)用のコンピュータ実装データ構造であって、第1のポインタデータ構造(21)が、リスト(30)内の最も古い要素を指し、第2のポインタデータ構造(22)が、リスト(30)内の次の書き込み可能な要素を指し、さらに、第3のポインタデータ構造(23)、第4のポインタデータ構造(24)、および第5のポインタデータ構造(25)を備え、第3のポインタデータ構造(23)が、対応する第1のカウンタ(33)を有し、第4のポインタデータ構造(24)が、対応する第2のカウンタ(34)を有し、第5のポインタデータ構造(25)が、対応するカウンタ(35)を有する、コンピュータ実装データ構造。
【選択図】図1
【特許請求の範囲】
【請求項1】
書き込みプロセス(11)と少なくとも1つの読み出しプロセス(12)との間でデータ交換を行うための単一リンクリスト(30)用のコンピュータ実装データ構造であって、第1のポインタデータ構造(21)と第2のポインタデータ構造(22)とを備え、前記第1のポインタデータ構造(21)が、前記リスト(30)内の最も古い要素を指し、前記第2のポインタデータ構造(22)が、前記リスト(30)内の次の書き込み可能な要素を指す、コンピュータ実装データ構造において、
第3のポインタデータ構造(23)、第4のポインタデータ構造(24)、および第5のポインタデータ構造(25)を備え、前記第3のポインタデータ構造(23)が、対応する第1のカウンタ(33)を有し、前記第4のポインタデータ構造(24)が、対応する第2のカウンタ(34)を有し、前記第5のポインタデータ構造(25)が、対応する第3のカウンタ(35)を有する
ことを特徴とするコンピュータ実装データ構造。
【請求項2】
前記第3のポインタデータ構造(23)、前記第4のポインタデータ構造(24)、および前記第5のポインタデータ構造(25)が、常に、前記第1のポインタデータ構造(21)もしくは前記第2のポインタデータ構造(22)が指す前記リスト(30)の前記要素を指し、または前記第1のポインタデータ構造(21)と前記第2のポインタデータ構造(22)との間の要素を指す、請求項1に記載のコンピュータ実装データ構造。
【請求項3】
前記第3のポインタデータ構造(23)が、前記書き込みプロセス(11)のみによって変更可能である、請求項1または2に記載のコンピュータ実装データ構造。
【請求項4】
前記第1のポインタデータ構造(21)および前記第2のポインタデータ構造(22)が、前記書き込みプロセス(11)のみによって変更可能である、請求項1から3のいずれか一項に記載のコンピュータ実装データ構造。
【請求項5】
前記第4のポインタデータ構造(24)および前記第5のポインタデータ構造(25)が、前記少なくとも1つの読み出しプロセス(12)のうちの1つのみによって変更可能である、請求項1から4のいずれか一項に記載のコンピュータ実装データ構造。
【請求項6】
前記リスト(30)の前記要素が、前記書き込みプロセス(11)のみによって変更可能である、請求項1から5のいずれか一項に記載のコンピュータ実装データ構造。
【請求項7】
請求項1から6のいずれか一項に記載のコンピュータ実装データ構造が記憶された記憶媒体。
【請求項8】
請求項7に記載の記憶媒体を備える装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、書き込みプロセス(「送信側」または「書き込み側」とも呼ばれる)と、少なくとも1つの読み出しプロセス(「受信側」または「読み出し側」とも呼ばれる)との間でデータを交換するためのコンピュータ実装データ構造に関する。さらに、本発明は、対応する電子記憶媒体および対応する装置に関する。
【背景技術】
【0002】
インフォマティクスでは、「先入れ先出し」または「FIFO」という通信方式が知られている。2つの同時プロセス、例えば1つの書き込みプロセスと1つまたは複数の読み出しプロセスとの間での通信スキームの実現は送信リストを用いて行われ、送信リストにおいて、書き込みプロセスが新たなデータを継続的に書き込むことができると同時に、少なくとも1つの読み出しプロセスが継続的に最も古いデータを読み出すことができる。送信リストに関するデータ構造としては、単一リンクリストが適している。
【発明の概要】
【0003】
本発明は、書き込みプロセス(送信側/書き込み側)と少なくとも1つの読み出しプロセス(受信側/読み出し側)との間でデータ交換を行うための単一リンクリスト用のコンピュータ実装データ構造であって、第1のポインタデータ構造と第2のポインタデータ構造とを備え、第1のポインタデータ構造が、リスト内の最も古い要素を指し、第2のポインタデータ構造が、リスト内の次の書き込み可能な要素を指す、コンピュータ実装データ構造を提供する。
【0004】
本発明は、第3のポインタデータ構造、第4のポインタデータ構造、および第5のポインタデータ構造を備え、第3のポインタデータ構造が、対応する第1のカウンタを有し、第4のポインタデータ構造が、対応する第2のカウンタを有し、第5のポインタデータ構造が、対応する第3のカウンタを有することを特徴とする。
【0005】
「単一リンクリスト」とは、本明細書では、データ構造の要素が、データを記憶するデータフィールドに加えて、リストの次の要素へのポインタデータ構造を含むデータ構造を意味することがある。リストの最後の要素のポインタデータ構造は、いわゆるヌル要素(「ヌルポインタ」とも呼ばれる)を指す。
【0006】
「ポインタデータ構造」(「ポインタ」とも呼ばれる)とは、本明細書では、データではなく、データが保存されている(物理)メモリ領域への参照を含むデータ構造を意味することがある。
【0007】
「対応するカウンタ」とは、条件に応じて、またはイベントの発生時もしくは発生後に増分もしくは減分するように、または所定の値に設定されるもしくは初期値にリセットされるように設計されたデータフィールドを意味することがある。典型的には、そのようなデータフィールドには、いわゆる整数データ型(「integer型」または「double型」とも呼ばれる)が使用される。予想されるカウンタのサイズに応じて、対応する量のビットまたはバイトをデータフィールドに提供することができる。
【0008】
本発明によれば、第3のポインタデータ構造、第4のポインタデータ構造、および第5のポインタデータ構造はそれぞれ、データ構造のリストの次の読み出し対象の要素を指す。
【0009】
このデータ構造を用いると、読み出しプロセスのうちの1つによってまだ読み出されていないときでも、また読み出しプロセスが同時に同じ要素を読み出すことを試みるときでも、既に書き込まれた要素をデータ構造からいつでも抜き取ることができるので、書き込みプロセスがいつでも新たなデータをデータ構造に書き込むことができる。
【0010】
さらに、読み出しプロセスは、書き込みプロセスと競合することなく、データ構造内の未読要素をいつでも読み出すことができる。
本発明の一実施形態によれば、第3のポインタデータ構造、第4のポインタデータ構造、および第5のポインタデータ構造が、常に、第1のポインタデータ構造もしくは第2のポインタデータ構造が指すリストの要素を指し、または第1のポインタデータ構造と第2のポインタデータ構造との間の要素を指す。
【0011】
「第1のポインタデータ構造が指す要素と第2のデータ構造が指す要素との間の要素」とは、第1のポインタデータ構造が指す要素から始めて、第2のデータ構造が指す要素までリストが進められるときに通過される要素を意味する。ここで、この通過は、前の要素のポインタデータ構造が次に指す要素が、リスト内の次の要素とみなされるように行うことができる。
【0012】
本発明の一実施形態によれば、第3のポインタデータ構造および第4のポインタデータ構造は、少なくとも1つの読み出しプロセスのうちの1つのみによって変更することができる。
【0013】
これは、例えば、第3のポインタデータ構造が、少なくとも1つの読み出しプロセスのうちの1つのみに割り当てられたメモリ領域にあることによって達成することができる。
本発明の一実施形態によれば、書き込みプロセスのみで第1および第2のポインタデータ構造を変更することができる。
【0014】
これは、例えば、書き込みプロセスのみに割り当てられるメモリ領域に第1および第2のポインタデータ構造があることによって達成することができる。
本発明の一実施形態によれば、リストの要素は、書き込みプロセスのみによって変更することができる。
【0015】
本発明のさらなる態様は、本発明によるコンピュータ実装データ構造が記憶される電子記憶媒体である。
本発明のさらなる態様は、本発明による電子記憶媒体を含む装置である。
【0016】
以下、本発明の態様のさらなる特徴および利点を、図面を参照して実施形態に基づいて説明する。
【図面の簡単な説明】
【0017】
図1】本発明によるデータ構造の概略図である。
図2a】少なくとも1つの読み出しプロセスのうちの1つによって未読要素を読み出す過程のフローチャートである。
図2b】次の要素を読み出すときの本発明によるデータ構造の概略図を示す
図3a】既に書き込まれている(未読の)要素を上書きする過程のフローチャートである。
【発明を実施するための形態】
【0018】
図1は、本発明によるデータ構造の概略図を示す。図1の図示には、第1のポインタデータ構造21、第2のポインタデータ構造22、第3のポインタデータ構造23、第4のポインタデータ構造24、および第5のポインタデータ構造25が示されている。
【0019】
第3のポインタデータ構造23、第4のポインタデータ構造24、および第5のポインタデータ構造25は、それぞれ対応する第1のカウンタ33、第2のカウンタ34、および第3のカウンタ35を備える。
【0020】
第1のポインタデータ構造21、第2のポインタデータ構造22、および第5のポインタデータ構造25の下には、単一リンクリスト30の概略図がある。
リスト30の各要素は、インデックス(ここでは0~6)、リスト30での次の要素を指すポインタデータ構造n(「次のポインタ」とも呼ばれる)と、データフィールド(ここではそれぞれ記号「r」、「u」、「-」を有する)とで構成される。記号「r」は、データフィールドでのデータが既に読み出されたことを表す(「既読」)。記号「u」は、データフィールドでのデータがまだ読み出されていないことを表す(「未読」)。記号「-」は、データフィールドにデータがないか、または無効なデータがあることを表し、したがって、リスト30の要素が空いている、すなわち書き込み可能であることを表す。
【0021】
第1のポインタデータ構造21(「最も古い」とも呼ばれる)は、リスト内の最も古い要素を指すために使用される。第2のポインタデータ構造22(「次の空き」とも呼ばれる)は、リスト内の次の空き要素を指すために使用される。ここで、空き要素とは、新たなデータを書き込むことができる要素を意味する。これは、要素が空であることを必ずしも意味しない。
【0022】
第3のポインタデータ構造23(「現在の次の未読」とも呼ばれる)は、リスト30内の現時点で次の未読要素を指すために使用される。したがって、これは、読み出しプロセスによって現時点で次に読み出すことができる、または読み出すべき要素を指す。
【0023】
第3のポインタデータ構造23により、リストが2つの部分に分割される。すなわち、リスト30の既読要素すべてを含む第1の部分と、リスト30の未読要素を含む第2の部分とに分割される。
【0024】
第4のポインタデータ構造24(「意図された次の未読」とも呼ばれる)は、リスト30の将来的に次の未読要素を指すために使用される。このポインタは、少なくとも1つの読み出しプロセスに関して、読み出し試行中に、それと競合するリスト30の更新が書き込みプロセスによって実行されたかどうかをチェックするために重要である。
【0025】
第5のポインタデータ構造25(「次の未読」とも呼ばれる)は、リスト30内の現時点で次の未読要素を指すために使用される。したがって、これは、読み出しプロセスによって現時点で次に読み出すことができる、または読み出すべき要素を指す。
【0026】
第5のポインタデータ構造25により、リスト30が2つの部分に分割される。すなわち、リスト30の既読要素すべてを含む第1の部分と、リスト30の未読要素を含む第2の部分とに分割される。
【0027】
第3のポインタデータ構造23による分割は、第5のポインタデータ構造25による分割と必ずしも同一である必要はないことに留意されたい。すなわち、書き込みプロセスまたは読み出しプロセスに関して、分割のしかたが異なるリスト30が存在し得る。どのような分割が現時点で適正な分割であるかは、それぞれ対応するカウンタの値によって決まる。重要なのは、対応するカウンタがより高い値を有するポインタデータ構造である。値が同じである場合には、第3のポインタデータ構造23による分割が適用される。
【0028】
図2aは、少なくとも1つの読み出しプロセスのうちの1つによって未読要素を読み出す過程のフローチャートを示す。
方法は、ステップ200で始まる。
【0029】
ステップ201で、第3のポインタデータ構造、第4のポインタデータ構造、および第5のポインタデータ構造がそれぞれ、それらの対応するカウンタと共にロードされる。このステップは、アトミックに実行することができる。「ステップのアトミックな実行」とは、本明細書では、個々の操作のまとまりが論理単位とみなされ、全体としてのみ成功または失敗し、他の操作によって中断することができないことを意味することがある。
【0030】
ステップ202で、次の未読要素が決定される。これは、それぞれ対応するカウンタの値に応じて行われる。第3、第4、または第5のポインタデータ構造に対する各操作において、対応するカウンタは適宜適合されるので、対応するカウンタが最大値を有するポインタデータ構造が指す要素が次の未読要素である。値が同じである場合には、その要素は、第3のポインタデータ構造23が指す次の未読要素とみなされる。
【0031】
ステップ203で、リスト30に未読要素があるかどうかがチェックされる。これは、ステップ202で決定されたポインタデータ構造が第2のポインタデータ構造と比較されることによって行うことができる。2つのポインタデータ構造がリスト30の同じ要素を指している場合、その時点でリスト30に未読要素はない。方法は終了する。
【0032】
ステップ204では、第4のポインタデータ構造が更新される。これは、第4のポインタデータ構造が、ステップ202で決定された要素に続く要素を指すことによって行うことができる。ここで、第4のポインタデータ構造の対応するカウンタが、ステップ202で決定されたポインタデータ構造の値に設定され、増分される。
【0033】
その後、書き込みプロセスと少なくとも1つの読み出しプロセスのうちの1つとの間で、いわゆる「競合状態」が生じているどうかがチェックされる。これは、第5のポインタデータ構造およびその対応するカウンタが新たにロードされ(ステップ205)、その間に、対応するカウンタの値が増加したかどうかがチェックされる(ステップ206)ことによって行うことができる。これが当てはまる場合には、いわゆる「競合状態」が生じている。そこで、この方法は、このステップで中断され、ステップ210で先に進められる。
【0034】
ステップ207で、次の未読要素が読み取られる。
ステップ208で、第3および第5のポインタデータ構造と対応するカウンタとが更新される。
【0035】
ステップ209で、さらなる未読要素があるかどうかがチェックされる。これは、ステップ201~203で述べたのと同様に行うことができる。
図2bは、次の要素を読み出すときの本発明によるデータ構造の概略図を示す。
【0036】
時点t0で、第3および第4のポインタデータ構造の対応するカウンタが最も高い値を有する。2つのポインタデータ構造は、リスト30の要素2を指す。したがって、要素2が次の未読要素である。
【0037】
時点t1で、第4のポインタデータ構造24が更新され、要素2に続く要素、図示の状況では要素3を指す。ここで、第4のポインタデータ構造24の対応するカウンタ34が増分される。
【0038】
時点t2で、要素2のデータフィールドが読み出される。それに対応して、データフィールドでの記号が、時点t1の「u」=「未読」(ドイツ語:ungelesen)から「r」=「既読」(ドイツ語:gelesen)に変わる。
【0039】
時点t3で、第3のポインタデータ構造23が更新され、第4のポインタデータ構造24の要素を指す。ここで、対応するカウンタ33が増分される。
図3aは、既に書き込まれている(未読の)要素を上書きする過程のフローチャートを示す。
【0040】
この方法はステップ300で始まり、本発明による書き込みプロセスによってデータ構造に新たなデータが書き込まれる。
ステップ301で、まず、リストのスキップされた要素および呼び戻された要素がすべてクリーンアップされる。これは、書き込みプロセスが、第1のポインタデータ構造が指す要素から始めて、既読部分のすべての要素を通過し、スキップされた要素および呼び戻された要素を識別して削除することによって行うことができる。
【0041】
ステップ302では、本発明によるデータ構造のリスト30が満杯であるかどうかがチェックされる。これは、例えば、第2のポインタデータ構造が指す要素のポインタデータ構造nが有効なターゲットを指しているかどうかをチェックすることによって行うことができる。有効なターゲットを指している場合、リスト30は満杯ではない。
【0042】
リスト30が満杯でない場合には、要素の上書きは必要ない。方法は、ステップ310に直接ジャンプする。
リスト30が満杯である場合には、ステップ303で、最新の次の未読要素の決定が続く。これは、第3、第4、および第5のポインタデータ構造の対応するカウンタの値を比較することによって行うことができる。対応するカウンタが最大値を有するポインタデータ構造が、最新の次の未読要素を指す。
【0043】
ステップ304で、削除することができる未読要素があるかどうかがチェックされる。
削除することができる未読要素がない場合、方法はステップ305で中断する。上書きによる新たなデータの書き込みは失敗に終わる。
【0044】
削除することができる未読要素がある場合、方法は、ステップ306で、削除対象として次の未読要素をマークするステップに進む。ステップ307で、その間に、書き込みプロセスと少なくとも1つの読み出しプロセスのうちの1つとの間でいわゆる「競合状態」が生じているかどうかがチェックされる。
【0045】
競合状態が生じている場合、方法はステップ311で中断する。
競合状態が生じていない場合、方法は、ステップ309に進められ、削除対象としてマークされた要素が削除される。
【0046】
ステップ310で、書き込むべき要素が次の空き要素のデータフィールドに書き込まれる。
【符号の説明】
【0047】
11 書き込みプロセス
12 読み出しプロセス
21 第1のポインタデータ構造
22 第2のポインタデータ構造
23 第3のポインタデータ構造
24 第4のポインタデータ構造
25 第5のポインタデータ構造
30 単一リンクリスト
33 第1のカウンタ
34 第2のカウンタ
35 第3のカウンタ
図1
図2a
図2b
図3a
【手続補正書】
【提出日】2024-04-12
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
書き込みプロセス(11)と少なくとも1つの読み出しプロセス(12)との間でデータ交換を行うための単一リンクリスト(30)用のコンピュータ実装データ構造であって、第1のポインタデータ構造(21)と第2のポインタデータ構造(22)とを備え、前記第1のポインタデータ構造(21)が、前記リスト(30)内の最も古い要素を指し、前記第2のポインタデータ構造(22)が、前記リスト(30)内の次の書き込み可能な要素を指す、コンピュータ実装データ構造において、
第3のポインタデータ構造(23)、第4のポインタデータ構造(24)、および第5のポインタデータ構造(25)を備え、前記第3のポインタデータ構造(23)が、対応する第1のカウンタ(33)を有し、前記第4のポインタデータ構造(24)が、対応する第2のカウンタ(34)を有し、前記第5のポインタデータ構造(25)が、対応する第3のカウンタ(35)を有する
ことを特徴とするコンピュータ実装データ構造。
【請求項2】
前記第3のポインタデータ構造(23)、前記第4のポインタデータ構造(24)、および前記第5のポインタデータ構造(25)が、常に、前記第1のポインタデータ構造(21)もしくは前記第2のポインタデータ構造(22)が指す前記リスト(30)の前記要素を指し、または前記第1のポインタデータ構造(21)と前記第2のポインタデータ構造(22)との間の要素を指す、請求項1に記載のコンピュータ実装データ構造。
【請求項3】
前記第3のポインタデータ構造(23)が、前記書き込みプロセス(11)のみによって変更可能である、請求項に記載のコンピュータ実装データ構造。
【請求項4】
前記第1のポインタデータ構造(21)および前記第2のポインタデータ構造(22)が、前記書き込みプロセス(11)のみによって変更可能である、請求項に記載のコンピュータ実装データ構造。
【請求項5】
前記第4のポインタデータ構造(24)および前記第5のポインタデータ構造(25)が、前記少なくとも1つの読み出しプロセス(12)のうちの1つのみによって変更可能である、請求項に記載のコンピュータ実装データ構造。
【請求項6】
前記リスト(30)の前記要素が、前記書き込みプロセス(11)のみによって変更可能である、請求項に記載のコンピュータ実装データ構造。
【請求項7】
請求項1から6のいずれか一項に記載のコンピュータ実装データ構造が記憶された記憶媒体。
【請求項8】
請求項7に記載の記憶媒体を備える装置。
【外国語明細書】