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

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

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特表2022-552077強化された同時並行性ガーベッジ収集スタック走査
<>
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図1
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図2
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図3
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図4
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図5
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図6
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図7
  • 特表-強化された同時並行性ガーベッジ収集スタック走査 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-15
(54)【発明の名称】強化された同時並行性ガーベッジ収集スタック走査
(51)【国際特許分類】
   G06F 12/00 20060101AFI20221208BHJP
   G06F 12/02 20060101ALI20221208BHJP
【FI】
G06F12/00 591
G06F12/00 594
G06F12/02 530E
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022514970
(86)(22)【出願日】2020-10-08
(85)【翻訳文提出日】2022-04-21
(86)【国際出願番号】 US2020054650
(87)【国際公開番号】W WO2021076378
(87)【国際公開日】2021-04-22
(31)【優先権主張番号】16/656,522
(32)【優先日】2019-10-17
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(74)【代理人】
【識別番号】100108213
【弁理士】
【氏名又は名称】阿部 豊隆
(72)【発明者】
【氏名】マンダリーカ,アディティア
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA10
5B160AA14
5B160AC07
(57)【要約】
コンピューティングシステム内のメモリを再要求するガーベッジ収集(GC)は、実行スタックを走査するためにアプリケーション、ウェブサービス及び他のミューテータプログラムを時に一時中断して、応答性を低下させる。しかし、一時中断時間は、ミューテータ実行とGCスタック走査との同時並行性を増加するビヘイビア駆動型スタック走査最適化(BDSSO)機能により低減される。BDSSOは、実行スタックフレーム発生データを取得し、フレーム実行尤度を決定し、この尤度に基づきスタック走査深さを選択し、及び選択された深さに走査戻り障壁を設置する。次に、GCは、ミューテータが実行されている間に走査戻り障壁の下の実行スタックを走査し、こうして同時並行性を増加し及びミューテータ応答性を改善する。選択された障壁位置は実際のスタック活動に従って変化し、柔軟性が無い手法を障壁配置に対し使用する代わりに最適化済み同時並行性を提供する。既存プロファイラサンプル又は仮想マシンインターフェースがBDSSOにより再使用され得る。プロファイラパフォーマンスデータを欠くスキニーサンプルも使用され得る。
【特許請求の範囲】
【請求項1】
プログラムの実行スタックであって、関心期間にわたり実行フレームを含む、実行スタックと、
前記実行スタックにより構成され、またビヘイビア駆動型スタック走査最適化(BDSSO)ソフトウェアによっても構成される、メモリと、
前記メモリと作動可能通信状態にあるプロセッサであって、BDSSO工程を行うために前記BDSSOソフトウェアを実行するように構成されたプロセッサとを含む、同時並行性強化型システムであって、前記BDSSO工程が(a)実行スタックフレーム発生データを取得すること、(b)前記実行スタックフレーム発生データからそれぞれのフレーム実行尤度を複数の実行フレームの実効フレーム毎に決定すること、(c)前記フレーム実行尤度に少なくとも部分的に基づきスタック走査深さを選択することであって、前記選択されたスタック走査深さは前記実行スタック全体の全深さ未満である、選択すること、(d)ガーベッジ収集走査戻り障壁を前記選択されたスタック走査深さに設置すること、及び次に(e)前記プログラムが実行されている間に、追跡ガーベッジ収集器が前記走査戻り障壁の下の前記実行スタックを走査することを可能にすることを含み、
前記BDSSO工程を行うことによりシステム同時並行性が増加され、その理由は、前記プログラムが前記走査戻り障壁に達するフレーム戻り操作を実行しない限り、前記走査戻り障壁の下の前記実行スタックを走査する間に、前記プログラムが前記ガーベッジ収集器と同時に実行されるからである、
同時並行性強化型システム。
【請求項2】
前記プログラムの実行中にプロファイラツールにより生成された実行サンプルをさらに含み、前記BDSSOソフトウェアが、前記実行サンプルを少なくとも部分的に解析することにより前記実行スタックフレーム発生データを取得する、請求項1に記載のシステム。
【請求項3】
管理された実行時間をさらに含み、前記BDSSOソフトウェアが、前記管理された実行時間を利用して、ガーベッジ収集セーフポイントにおいてスタックデータを少なくとも部分的に集めることにより、前記実行スタックフレーム発生データを取得する、請求項1に記載のシステム。
【請求項4】
以下のやり方:
前記ガーベッジ収集走査戻り障壁が、前記実行スタックの少なくとも2つのフレームの下に設置されるか、
前記システムが複数のプログラムを有し、前記選択されたスタック走査深さがプログラム間で変化するか、又は、
前記選択されたスタック走査深さが、所与のプログラムの実行中に前記所与のプログラムの様々な関心期間の間で変化するか
のうち少なくとも1つで固定深さスタック走査システムと差別化することによりさらに特徴付けられる、請求項1に記載のシステム。
【請求項5】
前記プロセッサがN個のコアを含み、ここでNは少なくとも2であり、前記プログラムがM個のスレッドを含み、ここで2<=M<=Nであり、各スレッドがそれぞれの実行スタックを有し、前記BDSSOソフトウェアが前記M個のスレッドのそれぞれのスレッドのスレッド毎ベースで前記BDSSO工程を行う、請求項1に記載のシステム。
【請求項6】
前記実行スタックフレーム発生データが戻りアドレスを含み、及び以下のそれぞれ:経過実行時間を明示するデータ及びプロセッササイクルカウントを明示するデータがない、請求項1に記載のシステム。
【請求項7】
ガーベッジ収集のための実行スタック追跡を最適化する同時並行性強化方法であって、前記方法は、
実行スタックのための実行スタックフレーム発生データを取得することと、
前記実行スタックフレーム発生データから、それぞれのフレーム実行尤度を複数の実行フレームの実効フレーム毎に自動的に決定することと、
前記フレーム実行尤度に少なくとも部分的に基づきスタック走査深さを自動的に選択することであって、前記選択されたスタック走査深さは前記実行スタック全体の全深さ未満である、選択することと、
ガーベッジ収集走査戻り障壁を前記選択されたスタック走査深さに自動的に設置することと、
前記追跡ガーベッジ収集器が前記実行スタックを前記選択されたスタック走査深さまでだけ追跡することを許容することと
を含み、
ミューテータソフトウェアの実行と同時に発生するガーベッジ収集器スタック走査ソフトウェアの実行により前記方法を行うことにより、前記方法を行うことなくガーベッジ収集のために前記実行スタックを走査することと比較して、同時並行性が増加される、方法。
【請求項8】
前記実行スタックフレーム発生データが、プログラムの実行中の様々なポイントのスタックフレームスナップショットを含み、
フレーム実行尤度を決定することが、特定組の実行フレームが一組のスタックフレームスナップショット内に何回発生するかを勘定することを含む、請求項7に記載の方法。
【請求項9】
フレーム実行尤度を決定することが、ルーチンの部分的実行のための経過実行時間と前記ルーチンの完全実行のための推定実行時間とを比較することか、又は前記ルーチンの実行を完了するための推定完了時間を決定することか、の少なくとも1つを含む、請求項7に記載の方法。
【請求項10】
実行スタックフレーム発生データを取得することが、プログラムの実行中に前記実行スタックを定期的にサンプリングすることを含む、請求項7に記載の方法。
【請求項11】
前記実行スタックフレーム発生データが、プログラムの実行中の様々なポイントのスタックフレームスナップショットを含み、前記スナップショットの大多数がそれぞれ、少なくとも100フレームのスタック深さを示し、前記選択されたスタック走査深さが2以上10未満である、請求項7に記載の方法。
【請求項12】
前記フレーム実行尤度を決定すること及び前記スタック走査深さを選択することが、以下:
任意のスタックフレームの経過実行時間を明示するデータ、
任意のスタックフレームのプロセッササイクルカウントを明示するデータ、又は
任意のスタックフレームのメモリ消費量を明示するデータ
のうちのいかなるものも読み出すことなく、又はそれに依存することなく行われる、請求項7に記載の方法。
【請求項13】
実行スタックフレーム発生データを取得することが、
プロファイラツールにより生成された実行サンプルを取得することか、又は
ガーベッジ収集セーフポイントにおけるプロファイリングの管理された実行時間を利用することか、
の少なくとも1つを含む、請求項7に記載の方法。
【請求項14】
前記ミューテータソフトウェアが前記走査戻り障壁に到達する、請求項7に記載の方法であって、前記方法がさらに、
前記走査戻り障壁を除去することと、
異なるスタック走査深さを自動的に選択することと、
前記異なるスタック走査深さに前記走査戻り障壁を自動的に設置することと
を含む、方法。
【請求項15】
以下のやり方のうちの少なくとも1つ:
前記ミューテータソフトウェアがアプリケーションプログラムを含み、前記方法が、
前記アプリケーションプログラムの少なくとも2つのスレッドのスレッド毎ベースでそれぞれのスレッドの複数の実行スタックの各実行スタックにより、少なくとも取得すること、決定すること、選択すること、及び設置することを行うことを含むか、
前記実行スタックが前記プログラムのスレッドに対応し、前記方法が、
前記スレッドの実行中に、及び前記ガーベッジ収集走査戻り障壁が前記実行スタックの少なくとも2つのフレームの下に設置されるたびに、様々な時刻に様々なスタック走査深さで、前記選択すること及び設置することを反復するか、
又は
前記実行スタックフレーム発生データが、前記プログラムの実行中の様々なポイントのスタックフレームスナップショットを含み、前記スナップショットの少なくとも80%はそれぞれ少なくとも80フレームのスタック深さを示し、前記選択されたスタック走査深さは9未満であること
をさらに特徴とする、請求項7に記載の方法。
【発明の詳細な説明】
【背景技術】
【0001】
[0001] コンピュータプログラムの実行中、ガーベッジ収集活動は自動メモリ管理の提供を助ける。「ガーベッジ」とは、プログラムが使用するために割り振られたメモリ空間であり、そのプログラムでは最早必要とされないが、他のプログラムで使用するためには未だ利用可能でないメモリ空間である。ガーベッジ収集器(garbage collector)は、メモリのこのような領域を識別するように設計されたソフトウェアであるので、このような領域は、後続の再割り振りのために再要求(reclaim)され得る。
【0002】
[0002] ガーベッジ収集は、最早必要とされないデータオブジェクトを手動で解放する必要性からプログラマを解放し得、プログラミングをより容易にする。ガーベッジ収集はまた、いくつかの実行時エラーの防止を支援し得、これによりデータの完全性及び可用性を改善することにより、サイバーセキュリティを強化する。多くのプログラミング言語は、ガーベッジ収集を必要とするか、又はガーベッジ収集を選択肢として許容するかのいずれかである。いくつかのソフトウェア開発環境は、所与のプログラムの実行中に、自動ガーベッジ収集及び手動メモリ管理の両方を許容する。
【0003】
[0003] ガーベッジ収集の効率的実装は、ガーベッジ収集器が頻繁に実行し得る又は予測不能時刻に実行し得る又はその両方であるので高優先であり得、ガーベッジ収集はアプリケーションプログラム実行を著しくスローダウンし得る。実際、すべてではないにしてもほとんどのガーベッジ収集器は、アプリケーションプログラムがガーベッジ収集器と同時に実行されるのを防止するストップ・ザ・ワールド(stop-the-world)手法を利用することがある。プログラムはこのようにして停止されている間は入力に応答しないので、アプリケーションプログラムの測定された効率と、ユーザにより認識されるその応答性との両方は、ガーベッジ収集により低減され得る。しかし、ガーベッジ収集に費やされる処理時間の量を単に低減することはまた、再要求されるメモリの量を低減し、アプリケーションプログラムのパフォーマンスを他のやり方で(例えば揮発性メモリデバイスと不揮発性メモリデバイスとの間でデータを交換するのに費やされる時間が増加することにより)妨害し得る。
【発明の概要】
【課題を解決するための手段】
【0004】
[0004] 本明細書において説明されるいくつかの実施形態は、コンピューティングシステムにおける改善されたガーベッジ収集(GC:garbage collection)を提供する。特に、いくつかの実施形態は、ビヘイビア駆動型スタック走査最適化(BDSSO:behavior-driven stack scan optimization)機能をシステム内に埋め込む。BDSSO機能は、アプリケーションプログラム実行とガーベッジ収集器のスタック走査活動との同時並行性を増加することにより、ストップ・ザ・ワールド時間を低減する。アプリケーションプログラムは依然として、GCスタック走査の一部の間停止され得るが、BDSSOは、アプリケーションの実行スタックの(少なくとも予測スタック走査時間に関して)明らかに一定の部分がGCのために走査されている間に、アプリケーションプログラムが安全且つ効率的に実行し続けることを可能にする。
【0005】
[0005] 本明細書において説明されるいくつかの強化された同時並行性実施形態は、メモリ及びプロセッサを含むか又はこれらと作動可能通信状態にある。メモリはプログラムの実行スタックにより構成され、実行スタックは関心期間にわたるプログラムの実行フレームを含む。メモリはまた、ビヘイビア駆動型スタック走査最適化(BDSSO)ソフトウェアにより構成される。プロセッサは、メモリと作動可能通信状態にあり、及びBDSSO工程を行うためにBDSSOソフトウェアを実行するように構成される。BDSSO工程は、(a)実行スタックフレーム発生データを取得すること、(b)実行スタックフレーム発生データからそれぞれのフレーム実行尤度を複数の実行フレームの実効フレーム毎に決定すること、(c)フレーム実行尤度に少なくとも部分的に基づきスタック走査深さを選択することであって、選択されたスタック走査深さは実行スタック全体の全深さ未満である、選択すること、(d)ガーベッジ収集走査戻り障壁(garbage collection scan return barrier)を、選択されたスタック走査深さに設置すること、及び次に(e)プログラムがまた実行されている間に、追跡ガーベッジ収集器(tracing garbage collector)が走査戻り障壁の下の実行スタックを走査することを可能にすること
を含む。
【0006】
[0006] これらの実施形態のうちのいくつかでは、走査戻り障壁配置は、ガーベッジ収集器が実行スタックを走査している間にプログラムが走査戻り障壁に達するリスクを低減するように選択される。したがって、同時並行性は、走査戻り障壁に達するフレーム戻り操作をプログラムが実行しない限り、ガーベッジ収集器が走査戻り障壁の下の実行スタックを走査する間にプログラムはガーベッジ収集器と同時に実行するので、BDSSO工程を行うことにより増加される。この場合、プログラム実行は、ガーベッジ収集器が、走査中に一定であると仮定された実行スタックの一部分内へのプログラムの移動に応答する間は一時中断される。
【0007】
[0007] 本明細書の教示に関係のある他の技術的活動及び特徴もまた当業者に明白である。与えられる例は単に例示的である。この「発明の概要」は、請求される主題の重要な特徴又は必須の特徴を特定することを意図せず、請求される主題の範囲を制限するために使用されることも意図するものでもない。むしろ、この「発明の概要」は、以下の「発明を実施するための形態」においてさらに説明されるいくつかの技術的概念を単純化した形式で紹介するために提供される。本発明は、正しく理解される請求項により定義され、及びこの「発明の概要」が特許請求の範囲と矛盾する限りにおいて、特許請求の範囲が優先する。
【0008】
図面の簡単な説明
[0008] より具体的な説明は添付図面を参照して与えられる。これらの図面は、選択された態様だけを示し、したがって対象範囲を完全に決定するものではない。
【図面の簡単な説明】
【0009】
図1】[0009]コンピュータシステムを一般的に示し、及び構成済みストレージ媒体もまた一般的に示すブロック図である。
図2】[0010]ハードウェアを含むと共にガーベッジ収集器及び他のソフトウェアも含むコンピューティングシステムを示すブロック図である。
図3】[0011]ガーベッジ収集のための走査実行スタックのいくつかの態様を示すブロック図である。
図4】[0012]同時並行性強化機能により構成されるシステムの態様を示すブロック図である。
図5】[0013]いくつかのフレーム発生データのいくつかの態様を示すブロック図である。
図6】[0014]いくつかの実行スタックスナップショットのいくつかの態様を示す図である。
図7】[0015]いくつかの同時並行性強化方法における工程を示すフローチャートである。
図8】[0016]いくつかの同時並行性強化方法における工程をさらに示すフローチャートである。
【発明を実施するための形態】
【0010】
[0017]概要
[0018] 本発明はそれらの起源を越えて拡張し得るが、本発明の起源を理解することは本発明をより十分に理解するのを助け得る。この場合、本明細書において説明されるいくつかの教示は、マイクロソフト管理実行時提示(Microsoft managed runtime offerings)のパフォーマンスを改善するために働いていたマイクロソフト革新者が直面した技術的挑戦により動機付けられた。このような提示は、例えばMicrosoft Windows(登録商標)、様々なLinux(登録商標)及び他の*nixのための管理されたソフトウェアフレームワーク、並びにApple macOS(登録商標)オペレーティングシステム環境だけでなく、いくつかのJava(登録商標)及びJavaScript(登録商標)仮想マシン環境提示、並びにAzure(登録商標)及び他のクラウド環境内の多くの提示(Microsoft Corporation、Linus Torvalds、Apple Inc.、Oracle America,Inc.、Oracle America,Inc.及びMicrosoft Corporationの標章)をそれぞれ含む。
【0011】
[0019] 特に、技術的挑戦は、ガーベッジ収集中に一時停止されるプログラムの応答性をどのようにして改善するかであった。新たな挑戦は、ガーベッジ収集器により管理されているメモリを使用するアプリケーションプログラム又は他のソフトウェアの実行により走査ガーベッジ収集スタックの同時並行性をどのように増加するかであった。このようなプログラムは、それらのオブジェクトグラフを時間と共に修正し得、したがって、ガーベッジ収集用語法では「ミューテータ(mutator)」と呼ばれる。スタックは、ほとんどすべての現代プログラムの基本ビルディングブロックである機能の使用を追跡するためにコンピュータプログラムにより使用されるデジタルアーティファクトである。プログラムは1つ又は複数のスタックを有し得、例えば、コンピューティングシステムの各プロセッサコアは、それ自身のそれぞれのスレッドスタックを有する別個のスレッドを実行し得る。
【0012】
[0020] ガーベッジ収集器は、再要求可能(reclaimable)であり得るメモリの断片を識別するためにミューテータプログラムスタックを走査するので、このような識別活動中にスタックにおいてなされる変更は、データ破損、プログラムクラッシュ及び他の望ましくない結果に到り得る。具体的には、追跡ガーベッジ収集器は、どのオブジェクトが生きているかを識別するためにルート走査の一部としてスタックを使用し、次に、オブジェクトの残りを再要求可能なものとして処理する。したがって、最も安全な手法は、スタックが走査されている間(すなわち、スタックがルート走査中に追跡ガーベッジ収集器により使用されている間)及び潜在的に再要求可能なメモリが識別されている間にガーベッジ収集器以外のすべてものの実行を一時中断することであろう。しかし、この素朴な手法はミューテータをいくつかの状況において必要であるより長く一時中断するので、他の手法がその代りに時に使用される。特に、いくつかの手法は、ミューテータが一時中断されている間に走査されるスタックの量を低減することにより、ミューテータに課せられるストップ・ザ・ワールド時間を低減しようとする。
【0013】
[0021] 1つの手法は例えば、ミューテータのスタックの最上位(すなわち、第1の、最新の)実行フレームが走査されている間だけミューテータを一時中断する。次に、ミューテータは、最上位フレームが走査された後にガーベッジ収集スタック走査器と同時に実行される。走査戻り障壁は、ミューテータが最上位フレームの下のいずれかのフレームを変更しようとすればガーベッジ収集器が排他的制御を再び得るように最上位フレームの下に置かれる。ミューテータを停止することに伴うオーバーヘッドなどの要因とどれほど頻繁にミューテータが最上位フレームの下のフレームにアクセスすることに依存して、このトップ・フレーム・オンリー(top-frame-only)ストップ・ザ・ワールド手法は必ずしもミューテータのパフォーマンスを改善せず、及びミューテータのパフォーマンスを時に劣化させ得る。
【0014】
[0022] 本明細書において説明されるいくつかの実施形態は、コンピューティングシステムのスタック活動データを取得し、及びこのデータから、スタックが走査されている間にスタックの最上位近くの特定フレームが変化することがどれだけあり得るかを決定する。走査戻り障壁がそれに応じてスタック内に置かれる。ミューテータは、変化する可能性が最も高いフレームが走査されている間一時中断され、次にミューテータ及びスタック走査器は、ミューテータが走査戻り障壁の下のスタックにアクセスしようとしない限り、スタックの残りが走査される間に同時に実行する。この事象では、ミューテータは再び一時中断され、フレームが走査される。走査障壁は、再位置決めされ得る、同じ位置に再設置され得る、又は完全に除去され得る。初期の走査障壁配置が、そのフレームがスタック走査中に不変なままである正しい予測でなくても、走査障壁を固定位置に常に置く代わりに本明細書において教示されるように走査障壁をスタック活動に基づき置くことはシステムの同時並行性を増加する傾向がある。
【0015】
[0023] 本明細書において説明されるいくつかの実施形態は、一部の人からより広い文脈において捉えられ得る。例えば、アクセス、同時並行性、実行、管理、メモリ、再要求及び一時中断などの概念は、特定の実施形態に関連すると考えられ得る。しかし、これは、抽象的観念の独占権が本明細書において求められている(実際は求められていない)という広範な文脈の可用性から得られない。むしろ、本開示は、その技術的効果が十分に又は部分的に特定技術的問題(例えば、どのようにコンピューティングシステムにおけるミューテータとスタック走査器との同時実行の機会を増加するか)を解決する適切に具体的な実施形態を提供することに焦点が当てられている。アクセス、同時並行性、実行、管理、メモリ、再要求又は一時中断に関わる他の構成済みストレージ媒体、システム、及び処理は本主題の範囲外にある。したがって、曖昧さ、単なる抽象性、技術的特徴の欠如、及びこれに伴う証明問題もまた本開示の適切な理解の元に回避される。
【0016】
[0024] より一般的には、本開示のあらゆる部分又は本開示内のいかなる特定詳細も、使用可能性、書面による明細、又は最良モードなどの法的決定基準を満足するために必ずしも必要とされるとは限らないことを当業者は理解する。また、実施形態は、特定動機付け例、管理されたメモリ環境、オペレーティングシステム、プログラミング言語、ソフトウェア処理、開発ツール、識別子、データ構造、表記法、制御流れ、擬似コード、命名規約又は本明細書において説明される他の実施選択に限定されない。いかなる他の特許情報開示とのいかなる明白な矛盾(本発明の所有者に起因するものすら)も、本特許情報開示において提示された特許請求の範囲を解釈する際に何ら役割を有しない。
【0017】
[0025]
技術的特徴
[0026] 本明細書において説明される実施形態の技術的特徴は、当業者に明白になり、及びまた広範囲の注意深い読者にとっていくつかのやり方で明白になる。いくつかの実施形態は、それぞれがコンピューティング技術に深く根ざす活動であるプログラムの実行スタックを走査すること、ソフトウェアの実行を一時中断すること、ソフトウェア機能戻り操作を方向転換すること、及び走査戻り障壁を実行スタック内に設置することなどの技術的活動に対処する。論述される技術的機構のいくつかは例えば走査戻り障壁、実行スタック、ガーベッジ収集セーフポイント、プログラムプロファイリングサンプル及び同時並行性強化を含む。論述される技術的効果のいくつかは、例えばミューテータとスタック走査器とが互いに同時に実行されるという増加された尤度、及びメモリ管理環境において実行するプログラムの改善された応答性を含む。したがって、純粋に精神的な過程は明確に除外される。本教示の技術的特徴に基づく他の利点もまた、提供される明細書から当業者に明白になる。
【0018】
[0027]
頭文字語、略称、名称及びシンボル
[0028] いくつかの頭文字語、略称、名称及びシンボルが以下に定義される。他のものは、本明細書の他のどこかで定義される、又は当業者により理解されるために本明細書における定義を必要としない。
[0029] ALU:算術論理ユニット
[0030] API:アプリケーションプログラムインターフェース
[0031] BIO:基本入出力システム
[0032] CD:コンパクトディスク
[0033] CPU:中央処理ユニット
[0034] DVD:デジタル多用途ディスク又はデジタルビデオディスク
[0035] FPGA:フィールドプログラマブルゲートアレイ
[0036] FPU:浮動小数点演算ユニット
[0037] GPU:グラフィック処理ユニット
[0038] GUI:グラフィックユーザインターフェース
[0039] IaaS又はIAA:サービスとしてのインフラストラクチャ(infrastructure-as-a-service)
[0040] ID:識別又は識別子
[0041] IoT:モノのインターネット(internet of things)
[0042] LAN:ローカルエリアネットワーク
[0043] OS:オペレーティングシステム
[0044] PaaS又はPAAS:サービスとしてのプラットホーム(platform-as-a-service)
[0045] RAM:ランダムアクセスメモリ
[0046] ROM:読み出し専用メモリ
[0047] UEFI:統一された拡張可能ファームウェアインターフェース(Unified Extensible Firmware Interface)
[0048] VM:仮想マシン
[0049] WAN:広域ネットワーク
【0019】
[0050]
いくつかの追加用語
[0051] 本明細書では添付図面に示すような例示的実施形態を参照し、及び特定言語がこれらを説明するために本明細書において使用される。しかし、当業者が思い付くであろう及び本開示の所有権を有する、本明細書に示される特徴の代替形態及びさらなる修正形態、並びに本明細書において特定の実施形態により示される抽象的原理の追加技術的応用は、特許請求の範囲に入ると考えるべきである。
【0020】
[0052] 用語の意味は本開示において明確にされるので、特許請求の範囲はこれらの明確化に対する注意深い配慮でもって読まれるべきである。具体例が与えられるが、当業者は、他の例もまた、使用される用語の意味の範囲内及び1つ又は複数の請求項の範囲内に入り得るということを理解する。用語は、一般的使用(特に非技術的使用)において、又は特定産業の使用において、又は特定辞書又は一組の辞書において有する同じ意味を本明細書では必ずしも有しない。参照符号は用語の幅を示すのを助けるために様々なフレージングと共に使用され得る。所与のテキストからの参照符号の省略は、図の内容が当該テキストにより論述されていないということを必ずしも意味しない。本発明者は、特定の及び選択された辞書編集に対する権限を主張し且つ行使する。引用された用語は明示的に定義されているが、用語はまた、引用符を使用すること無く暗黙的に定義され得る。用語は「本明細書の詳細な説明」において及び/又は出願ファイル内の他のどこかで明示的又は暗黙的のいずれかで定義され得る。
【0021】
[0053] 本明細書で使用されるように、「コンピュータシステム」(別名「コンピューティングシステム」)は、例えば1つ又は複数のサーバ、マザーボード、処理ノード、ラップトップ、タブレット、パーソナルコンピュータ(ポータブル又はポータブルでない)、パーソナルデジタルアシスタント、スマートフォン、スマートウォッチ、スマートバンド、セルフォン又はモバイルフォン、少なくとも1つのプロセッサ及びメモリを有する他のモバイルデバイス、ビデオゲームシステム、拡張現実システム、ホログラフィック投影システム、テレビ、装着可能コンピューティングシステム、及び/又は指令により少なくとも部分的に制御される1つ又は複数のプロセッサを提供する他のデバイスを含み得る。指令は、メモリ及び/又は特定回路構成のファームウェア又は他のソフトウェアの形式であり得る。
【0022】
[0054] 「マルチスレッド」コンピュータシステムは複数の実行スレッドを支援するコンピュータシステムである。用語「スレッド」は、スケジューリングすることができるコード又はスケジューリングされるコード、及び恐らく同期されるコードを含むものと理解されるべきである。スレッドはまた、本開示外では例えば「タスク」、「プロセス」又は「コルーチン」などの別名により知られ得る。しかし、スレッド及びプロセス間の区別は、スレッドがプロセス内部の実行経路を定義するという意味で本明細書においてなされる。また、プロセスのスレッドが所与のアドレス空間を共有する一方で、様々なプロセスは様々なそれぞれのアドレス空間を有する。プロセスのスレッドは、並列に、順に、又は並列実行と順次実行との組み合わせ(例えばタイムスライス(time-sliced))で実行し得る。
【0023】
[0055] 「プロセッサ」は、同時マルチスレッディング実装形態におけるコアなどのスレッド処理ユニットである。プロセッサはハードウェアを含む。所与のチップは1つ又は複数のプロセッサを保持し得る。プロセッサは、汎用であり得る、又はベクトル処理、グラフィック処理、信号処理、浮動小数点演算処理を、暗号化、I/O処理、機械学習等々などの特定使用に合わせて製作され得る。
【0024】
[0056] 「カーネル」はオペレーティングシステム、ハイパーバイザ、仮想マシン、BIOS又は、UEFIコード、及び同様なハードウェアインタフェースソフトウェアを含む。
【0025】
[0057] 「コード」は、プロセッサ指令、データ(定数、変数及びデータ構造を含む)、又は指令及びデータの両方を意味する。「コード」及び「ソフトウェア」は本明細書にでは交換可能に使用される。実行可能コード、解釈済みコード及びファームウェアはコードのいくつかの例である。
【0026】
[0058] 「プログラム」は、アプリケーション、カーネル、ドライバ、割り込みハンドラ、ファームウェア、ステートマシン、ライブラリ、及びプログラマ(開発者とも呼ばれる)により書かれた及び/又は自動的に生成された他のコードを含むように本明細書では広義に使用される。
【0027】
[0059] 「ルーチン」は、ルーチンが呼び出されたプログラム実行における時点直後に制御を通常は指令に戻す呼出し可能コードである。使用される用語に依存して、「関数」と「手順」との区別は他のどこかで時になされる:すなわち、関数は値を通常は戻すが手順は戻さない。本明細書で使用されるように、「ルーチン」は関数及び手順の両方を含む。ルーチンは、値を戻すコード(例えばsin(x))を有し得る、又は値を提供することなく単に戻し得る(例えばボイド関数)。
【0028】
[0060] 「サービス」は、資源を複数のプログラムへ提供する又は複数のプログラムへのアクセスを提供するクラウドコンピューティング環境又は他のネットワーク又はコンピューティングシステム環境における消費可能プログラム提示を意味する。
【0029】
[0061] 「クラウド」は、測られたオンディマンドサービスのために弾力的に利用可能であるコンピューティング、ストレージ及びネットワーキングのためのプール済み資源を意味する。クラウドは私的、公的、コミュニティ、またハイブリッドであり得、及びクラウドサービスは、サービスとしてのインフラストラクチャ(IaaS)、サービスとしてのプラットホーム(PaaS)、サービスとしてのソフトウェア(SaaS:software as a service)、又は別のサービスの形式で提示され得る。特記しない限り、ファイルから読み出す又はファイルへ書き込むいかなる論述も、ローカルファイルを読み出すこと/書き込むこと、又はクラウドネットワーク又は他のネットワークであり得るネットワーク上で読み出すこと/書き込むこと、又は両方(ローカル読み出し/書き込み及びネットワーク読み出し/書き込み)を行うことを含む。
【0030】
[0062] 「IoT」すなわち「モノのインターネット」はアドレス可能埋め込みコンピューティングノードの任意のネットワーク集合を意味する。このようなノードは、本明細書で定義されるようなコンピュータシステムの例であるが、また以下の特徴の少なくとも2つを有する:(a)ローカル人間可読(human-readable)ディスプレイ無し、(b)ローカルキーボード無し:(c)入力の一次資源は非言語データの資源を追跡するセンサである、(d)ローカル回転ディスクストレージ無し-RAMチップ又はROMチップはローカルメモリだけを提供する、(e)CD又はDVDドライブ無し、(f)家庭用器具又は家庭用備品内への埋め込み、(g)インプラントされた医療デバイス又は装着可能医療デバイス内への埋め込み、(h)車両内への埋め込み、(i)プロセスオートメーション制御システム内への埋め込み、又は(j)以下のうちの1つに焦点を当てた設計:環境モニタリング、市民インフラストラクチャ監視、工業計器監視、エネルギー使用監視、人又は動物健康監視、物理的セキュリティ、若しくは物理的交通システム監視。IoTストレージは、クラウドを介した、別のネットワークを介した、又は直接ローカルアクセス試みを介したかのいずれかによる不正アクセスの標的であり得る。
【0031】
[0063] コンピュータ的資源への「アクセス」は、資源を読み出す、資源を修正する、資源に書き込む、資源を実行する、又はそうでなければ資源を利用するための許可又は他の能力の使用を含む。アクセスの試みは、実際のアクセスとは明示的に区別され得るが、修飾子「試みられた」の無い「アクセス」は、試みられたアクセスと実際に行われた又は提供されたアクセスとの両方を含む。
【0032】
[0064] 本明細書で使用されるように、「含む(include)」は、特に明記しない限り追加要素を許容する(すなわち、includeはcompriseを意味する)。
【0033】
[0065] 「最適化する」は、必ずしも完全なものにすることではなく改善することを意味する。例えば、最適化されたプログラム又はアルゴリズムにおけるさらなる改善を行うことが可能であり得る。
【0034】
[0066] 「プロセス」は、コンピューティング科学技術の用語として本明細書において時に使用され、ここでは、技術的意味は、例えばコルーチン、スレッド、タスク、割り込みハンドラ、アプリケーション処理、カーネルプロセス、手順又はオブジェクト方法も含み得る又はそのようにも呼ばれることがあるコンピュータ的資源ユーザを包含する。実際問題として、「プロセス」は、Windows(登録商標)Task Manager、Linux(登録商標)ps、又は他のオペレーティングシステム環境(Microsoft Corporation、Linus Torvaldsそれぞれの商標)内の同様なユーティリィティなどのシステムユーティリティにより識別されるコンピュータ的実体である。「プロセス」はまた、本明細書では、特許法専門用語として使用される(例えばシステム請求項又は製造品(構成済みストレージ媒体)請求項とは対照的に方法請求項(process claim)を説明する際に)。同様に、「方法」は、本明細書ではコンピューティング科学技術における専門用語(一種の「ルーチン」)としてまた特許法専門用語(「プロセス」)として時に使用される。特許法という意味における「プロセス」及び「方法」は本明細書では交換可能に使用される。当業者はどちらの意味が特定事例において意図されているかを理解することになり、当業者はまた、所与の請求されたプロセス又は方法(特許法という意味における)が1つ又は複数のプロセス又は方法を使用することにより時に実施され得る(コンピューティング科学という意味で)ということを理解する。
【0035】
[0067] 「自動的に」は、自動化無しとは対照的に、「自動化(例えば本明細書で論述される特定操作及び技術的効果のためにソフトウェアにより構成された汎用コンピューティングハードウェア)を用いて」を意味する。特に、「自動的に」行われる工程は、紙上で手によって又は人間の心の中では行われないが、人間により開始され得るか又は人間により対話的に誘導され得る。自動工程は、このように提供される技術的相互作用無しには実現されないであろう1つ又は複数の技術的効果を取得するために、機械により行われる。自動的に行われる工程は、能動的に行われる少なくとも1つの動作を含むものと想定される。
【0036】
[0068] 当業者は、技術的効果が技術的実施形態の仮定の目的であるということを理解する。計算が例えば一実施形態に関与するということ及びいくつかの計算がまた技術的部品無しに行われ得る(例えば紙と鉛筆により又はさらには精神的工程として)ということとの単純な事実は技術的効果の存在を除去しない又は実施形態の具体的且つ技術的性質を修正しない。スタックフレーム実行尤度を決定すること、走査戻り障壁を設置すること、及び本明細書で論述される多くの他の操作などの同時並行性強化操作は本質的にデジタルであると理解される。人間の心は、本明細書において教示される同時並行性強化工程を行うために必要データを読み出し書き込むためにCPU若しくは他のプロセッサと、又はRAM若しくは他のデジタルストレージと直接インターフェースし得ない。これはすべて、本開示の観点で当業者によりよく理解されるであろうが、他の人間は時に、このことについて通知又は喚起される必要があり得る。
【0037】
[0069] 「コンピュータ的に」は同様に、コンピューティングデバイス(少なくともプロセッサ+メモリ)が使用されるということを意味し、及び人間の思考だけによる結果又は単に人間行為だけによる結果を取得することを除外する。例えば、紙と鉛筆により算術を行うことは本明細書において理解されるように算術をコンピュータ的に行うことではない。コンピュータ的結果は、より高速、より広範、より深い、より精確、より一貫し、より包括的である、及び/又はそうでなければ人間によるパフォーマンス単独の範囲を越えた技術的効果を提供する。「コンピュータ的工程」はコンピュータ的に行われる工程である。「自動的に」も「コンピュータ的に」も「直ちに」を必ずしも意味しない。「コンピュータ的に」及び「自動的に」は、本明細書では交換可能に使用される。
【0038】
[0070] 「能動的に」は、ユーザからの直接要求が無いことを意味する。実際、ユーザは「一実施形態による能動的工程が、同工程の結果がユーザに提示されるまでに可能だった」ということを理解すらしない可能性がある。別途述べない限り、本明細書において説明されるいかなるコンピュータ的及び/又は自動的工程も能動的に行われ得る。
【0039】
[0071] 本明細書を通して、任意選択的な複数形「(s)」「(es)」又は「(ies)」の使用は、示された特徴のうちの1つ又は複数が存在するということを意味する。例えば、「processor (s)」は「1つ又は複数のプロセッサ」又は等価的に「少なくとも1つのプロセッサ」を意味する。
【0040】
[0072] 合衆国法及びその実務の目的のために、本明細書における、特許請求の範囲における、又は他のどこかにおける単語「工程」の使用は、ミーンズプラスファンクション(means-plus-function)及びステッププラスファンクション(step-plus-function)、すなわち35合衆国法典112の/112(f)の請求項解釈に依拠することを意図していない。この効果に対するいかなる推測も、これによって明示的に反駁される。
【0041】
[0073] 合衆国法及びその実務の目的のために、請求項は、語句「means for」を使用しない限り、ミーンズプラスファンクション解釈に依拠するように意図されていない。ミーンズプラスファンクション言語として解釈されるように意図された請求項言語(あれば)は、語句「~の手段(means for)」を使用することにより、その意図を明示的に唱える。「means for」の使用による及び/又は請求項言語の裁判所の法的構築の使用によるかにかかわらずミーンズプラスファンクション解釈が当てはまる場合、所与の名詞又は所与の動詞の本明細書に記載される手段は、以下のうちの任意のもののおかげで本明細書では請求項言語へリンクされ及び連結されるものと理解されるべきである:添付図面のブロック図の同じブロック内の外観、同じ又は同様な名前による表示、同じ参照符号による表示、添付図面のうちの任意のものにおいて描写される機能的関係、本開示のテキストで言及される機能的関係。例えば、請求項の制限が「zac widget」について述べ、及びこの請求項の制限がミーンズプラスファンクション解釈を受ければ、最低限、「zac widget」に言及する任意の図ブロック、段落、若しくは実施例における明細書内のどこかで識別されるか、又はzac widgetへ割り当てられた任意の参照符号により一緒に結び付けられた、又はzac widgetの構造若しくは動作と機能的関係を有するとして開示されたすべての構造は、zac widgetのアプリケーションにおいて識別される構造の一部分と見なされ、及びzac widget構造の一組の等価物を定義することを助けるであろう。
【0042】
[0074] 当業者は、本発明の開示が様々なデータ値及びデータ構造について論述するということを認識し、並びにこのような項目がメモリ(RAM、ディスクなど)内に常駐し及びこれによりメモリを構成することを認識する。当業者はまた、以下のことを認識する:本発明の開示が、所与の実装形態において実行可能コードで具現化される様々なアルゴリズム的工程について論述するということ、このようなコードもまたメモリ内に常駐するということ、及びこのようなコードは、このようなコードを実行する任意の汎用プロセッサを効果的に構成し、それにより、この汎用プロセッサを、機能的に専用ハードウェアである専用プロセッサへ変換するということ。
【0043】
[0075] したがって、当業者は(a)請求項に記載のメモリと(b)請求項に記載のデータ構造、データ値又はコードとを重複しない項目として処理する誤りを犯すことはないであろう。データ構造、データ値及びコードは、言及されたそれぞれの及びあらゆるデータ構造、データ値又はコードの常駐性が請求項に明示的に記載されない場合も、メモリ内に常駐するものと理解される。したがって、このような常駐への明示的言及は必要とされない。しかし禁止されてもいないため、1つ又は2つの選択された記載は、これにより常駐からすべての他のデータ値及びデータ構造及びコードを除外すること無く、強調のために存在し得る。同様に、請求項に記載のコード機能は、品質を構成するものが請求項に明示的に記載されるかどうかにかかわらず、プロセッサを構成するものと理解される。
【0044】
[0076] 本明細書を通して、明示的に述べられない限り、プロセスにおける工程への任意の参照は、工程が、当事者により直接行われ得る及び/又は介在機構及び/又は介在実体を介して当事者により間接的に行われ得、及び工程の範囲内に依然として入り得るということを仮定する。すなわち、当事者による工程の直接実行は、明示された必要要件でない限り、直接実行は必要とされない。例えば、当事者による工程関与行為、例えば、送付先又は他の対象に対し、解析すること、比較すること、計算すること、生成すること、決定すること、表示すること、強化すること、実行すること、収集すること、生成すること、指示すること、設置すること、定位すること、維持すること、緩和すること、修正すること、取得すること、操作すること、行うこと、予測すること、提供すること、読み出すこと、受信すること、低減すること、除去すること、置換すること、実行すること、サンプリングすること、走査すること、選択すること、格納すること、勘定すること、使用すること、利用すること、変更すること、書き込むこと(及び解析する、解析された、比較する、比較された等)は、或る他の参加者による、転送すること、複写すること、アップロードすること、ダウンロードすること、符号化すること、復号すること、圧縮すること、圧縮解除すること、暗号化すること、解読すること、認証すること、喚起すること、等の介在行為に関与し得、これらの行為には、本明細書に記載の任意の行為であって当事者により直接行われたものと依然として理解される行為を含む。
【0045】
[0077] 参照がデータ又は指令に対してなされるときはいつでも、これらの項目は、例えば紙上に、人間の心の中に、又は有線で伝播する単なる信号として単に存在することとは対照的に、コンピュータ可読メモリ及び/又はコンピュータ可読ストレージ媒体を構成し、これによりそれを特定物へ変換するということが理解される。合衆国における特許権保護の目的のために、メモリ又は他のコンピュータ可読ストレージ媒体は、In re Nuijten案件の米国特許商標庁(USPTO:United States Patent and Trademark Office)解釈下の特許可能対象の範囲外の伝播信号又は搬送波又は単なるエネルギーではない。いかなる請求項も合衆国では信号自体又は単なるエネルギーをカバーせず、本開示という観点でそうではないと主張するいかなる請求項解釈も不合理であることは自明である。合衆国外で付与された請求項においては、明示的にそうではないと述べられていない限り、請求項は信号自体又は単なるエネルギーをカバーしない。
【0046】
[0078] さらに、本明細書の他のどこかにおいて明らかに矛盾するいかなるものにもかかわらず、一方で(a)コンピュータ可読ストレージ媒体及びコンピュータ可読メモリと他方で(b)信号媒体とも呼ばれる伝送媒体との間の明確な区別が理解されるべきである。伝送媒体は伝播信号又は搬送波コンピュータ可読媒体である。対照的に、コンピュータ可読ストレージ媒体及びコンピュータ可読メモリは信号又は搬送波コンピュータ可読体を伝播しない。請求項において明示的に述べられない限り、「コンピュータ可読媒体」は、伝播信号自体でもなく単なるエネルギーでもなくコンピュータ可読ストレージ媒体を意味する。
【0047】
[0079] 本明細書における「実施形態」は一例である。用語「実施形態」は「本発明」とは交換可能ではない。いくつかの実施形態は、態様の結果組み合わせそれ自体が本明細書において明示的に説明されなくても、他の実施形態を生成するために態様を自由に共有し得る又は借り得る(結果が操作可能であると仮定して)。明示的に且つ個々に説明されるそれぞれ及びあらゆる許容された組み合わせを要求とすることは、当業者にとって不要であり、及び特許明細書が、当業者である読者のために書かれているということを認識する方針に反するであろう。少数の組み合わせ可能な特徴からも生じる多くの可能な組み合わせに関する、公式の組み合わせ計算及び非公式の共通直観はまた、本明細書において説明される態様の多数の態様組み合わせが存在するということも示す。したがって、それぞれ及びあらゆる組み合わせの明示的記載を必要とすることは、特許明細書が簡潔であることと読者が当該技術分野において知識豊富であるということとを要求する方針に反するであろう。
【0048】
[0080]
符号の説明
[0081] 以下のリストは、利便性のために及び作図を支援して、並びに本明細書のテキストの一部として提供され、複数の項目への参照により本発明を説明する。ここで列挙されない項目はそれにもかかわらず、所与の実施形態の一部分であり得る。テキストをより読みやすくするために、本文中で参照された項目のうち、すべてではないがいくつかには所与の参照符号が付与される。同じ参照符号は、所与の項目の様々な例又は様々な事例を参照して使用され得る。参照符号のリストは以下のとおりである:
【0049】
[0082] 100 動作環境(コンピューティング環境とも呼ばれる)
[0083] 102 コンピュータシステム(コンピュータ的システム又はコンピューティングシステムとも呼ばれる)
[0084] 104 ユーザ
[0085] 106 周辺機器
[0086] 108 ネットワーキング全般(例えばLAN、WAN、ソフトウェア定義ネットワーク、クラウド、他の有線又は無線ネットワークを含む)
[0087] 110 プロセッサ
[0088] 112 コンピュータ可読ストレージ媒体(例えばRAM、ハードディスク)
[0089] 114 着脱可能構成済みコンピュータ可読ストレージ媒体
[0090] 116 プロセッサにより実行可能な指令、着脱可能ストレージ媒体上に又は他のメモリ(揮発性又は不揮発性、又は両方)内に存在し得る
[0091] 118 データ
[0092] 120 カーネル、例えばオペレーティングシステム、BIOS、UEFI、デバイスドライバ
[0093] 122 ツール:例えばアンチウイルスソフトウェア、ファイアウォール、パケット・スナイファ・ソフトウェア、侵入検出システム、侵入防止システム、デバッガ、プロファイラ、コンパイラ、インタープリータ、逆コンパイラ、アセンブラ、逆アセンブラ、ソースコードエディタ、自動補完ソフトウェア、シミュレータ、ファザー(fuzzer)、レポジトリアクセスツール、バージョン管理ツール、オプティマイザ、共同作業ツール、ソフトウェア開発支援ツール及びツール一式(例えば統合開発環境を含む)、ハードウェア開発ツール及びツール一式、診断など。
[0094] 124 アプリケーション:例えばワードプロセッサ、ウェブブラウザ、スプレッドシート、ゲーム、電子メールツール、命令
[0095] 126 表示スクリーン:「ディスプレイ」とも呼ばれる
[0096] 128 参照符号106、108、110、112、114に関連付けられていないコンピューティングハードウェア
[0097] 202 コンピューティングハードウェア全般:参照符号106、108、110、112、114、126、128、424のうちの1つ又は複数に関連付けられたハードウェアを含む
[0098] 204 実行スタック、単に「スタック」とも呼ばれることがある
[0099] 206 実行スタックフレーム、「スタックフレーム」又は単に「フレーム」とも呼ばれることがある
[00100] 208 システムソフトウェア(例えばカーネル120)
[00101] 210 ユーザソフトウェア(例えばアプリケーション124)
[00102] 212 ミューテータソフトウェア:すなわちスタックの一部を突然変異させ得るソフトウェア、ミューテータソフトウェアはシステムソフトウェア又はユーザソフトウェアであり得る。
[00103] 214 ガーベッジ収集器ソフトウェア、「ガーベッジ収集器」又は「GC」とも呼ばれることがある。
[00104] 216 スレッド:すなわちコンピュータプログラム内の実行スレッド
[00105] 300 ガーベッジ収集のための走査実行スタックの態様
[00106] 302 ガーベッジ収集のための走査実行スタック、「スタック走査」又は単に「走査」とも呼ばれることがあり、実行スタック走査とも呼ぶ
[00107] 304 フレーム発生データ:すなわちフレームの発生を指示するデータ
[00108] 306 ガーベッジ収集セーフポイント、単に「セーフポイント」とも呼ばれることがある
[00109] 308 実際の走査深さ:例えばフレームのストップ・ザ・ワールド走査が実際に追求されるスタックの深さ
[00110] 310 フレーム深さ全般:例えばスタックの最上位は深さ零にあり、スタックの最上位の下の1つのフレームは深さ1にある等々:この例は零指標付けを使用するが他の例はスタックフレームの最上位が深さ1にあり、次のフレームが深さ2にある等々となるように1指標付けを使用し得るという了解の下で。
[00111] 312 フレーム戻りアドレス、「戻りアドレス」とも呼ばれることがある、戻りアドレスを含むフレームに対応する機能又は他のルーチンが実行を完了しており、且つシステムがフレームをスタックからはじき出す準備ができている場合に、処理制御が転送されるアドレスを指示する
[00112] 314 ミューテータのスタックがGC走査されている間にフレームがミューテータによりアクセスされるフレーム実行尤度:すなわち確率、又は計算された尤度を指示する他の値(例えば、Boolean isLikely又はisNotLikely)、「実行尤度」とも呼ばれることがある
[00113] 316 走査戻り障壁、走査戻り障壁は例えばフレーム戻りアドレスをハイジャックすることにより実装され得る:すなわち、実施形態は、戻りアドレスを保存し、フレーム内でそれを(例えばスタック走査を行う)GC走査戻り障壁コードのアドレスにより置換し、及び走査戻り障壁コードが終了すると、それ自身のアドレスをフレームから除去し、及び回復された戻りアドレスに従って転送を制御させる、走査戻り障壁操作は、例えば、「何が書き込まれるか及びどこに」をログ記録するために主として書き込みを阻止するように動作する書き込み障壁と対照をなし、及び例えば変数の値が読み出される前にスレッドが変数を更新したい場合に読み出しを主として阻止するように動作する読み出し障壁とも好対照をなす、但し、ログ記録又は更新又は両方はまた、走査戻り障壁コードにより行われ得る
[00114] 318 設置された走査戻り障壁のスタック深さ、特に明記しない限り、本明細書における「走査深さ」は実際の走査深さ308とは対照的にこの予測走査深さ318を指す
[00115] 320 関心期間
[00116] 322 GC実行(特にスタック走査を含む)と他のソフトウェア(特にミューテータソフトウェア)の実行との同時並行性
[00117] 324 スタック全深さ:例えば所与のスタック内の合計フレーム(走査戻り障壁の上のフレームを含み及び走査戻り障壁の下のフレームも含む)の数
[00118] 326 実行サンプル:例えば特定時点におけるスタックに関するデータを含む
[00119] 328 スタック成長方向、便宜のために、特許請求の範囲を含む本明細書における論述はスタックの最上位の又はその近くの最近のフレーム及びスタックの最下部における又はその近くの最も古いフレームを有するメモリ内の上方向に成長するスタックに関し表現されるが、当業者は、いくつかのスタック実装形態はそれらのスタックが下方向に成長するという点で反転されるということを認識することとなる、本明細書における教示は、どの方向(例えば上方向、下方向、又は横方向)に成長するスタックにも適用する
[00120] 330 フレーム戻り操作:例えば戻りアドレスにある指令へ処理制御を転送する
[00121] 400 同時並行性強化機能を備えたシステム
[00122] 402 ビヘイビア駆動型スタック走査最適化(BDSSO)ソフトウェア:例えば、方法700又は方法800を行うソフトウェア、又はそうでなければミューテータスタック活動に基づき多様なスタック深さにおいて走査戻り障壁を採用するソフトウェア
[00123] 404 プロファイラツール:「パフォーマンスプロファイラ」又は単に「プロファイラ」と呼ばれることがある
[00124] 406 管理された実行時間:すなわち自動ガーベッジ収集を使用することによりメモリ管理を提供する実行時間
[00125] 408 インターフェース:例えば管理された実行時間へのAPI
[00126] 410 スタックデータ全般
[00127] 412 ルーチンの完全実行のための推定実行時間又はルーチンの実行を完了するための推定実行時間
[00128] 414 ルーチンを実行するために費やされた経過時間
[00129] 416 ルーチン(例えば関数)
[00130] 418 フレーム実行確率:例えばフレームがスタック走査中に実行される計算確率を表す0~1の範囲内の浮動小数点数値
[00131] 420 フレーム実行確率閾値:管理者又は他のユーザにより設定され得る、又は例えば機械学習推論又は統計的モデリングにより選択され得る
[00132] 422 実行スタック走査器:本目的のためには、この走査器はガーベッジ収集器214の一部と考えられるが、他の文脈では、GCコードとスタック走査器コードとの間の区別がなされ得る。
[00133] 424 プロセッサコア
[00134] 426 I/Oを許容するシステム400へのインターフェースを形成するソフトウェア又はハードウェア又は両方
[00135] 500 フレーム発生データの態様又は特徴
[00136] 502 所与のソフトウェア又はプログラム実行の所与の部分の経過実行時間
[00137] 504 プロセッサ又はプロセッサコアサイクルカウント
[00138] 506 メモリ消費量、又はメモリ消費量が計算可能である(例えば対の隣接フレームの位置間の差を計算することにより)データ
[00139] 508 プログラムの実行における特定時点におけるフレーム発生データを含むスナップショット
[00140] 510 プログラムの実行における特定時点:例えば最近実行された機械語指令の位置として、又はサイクルカウントとして、又はプログラム実行の別の測度により、表され得る
[00141] 602 スタックの最上位スタック
[00142] 604 走査戻り障壁の上のフレーム
[00143] 700 フローチャート:図7フローチャートにより示されるか又はそれに準拠する、同時並行性強化方法も指す
[00144] 702 スタックフレーム発生データを取得すること
[00145] 704 GCスタック走査中に実行するスタックフレームの尤度を決定すること
[00146] 706 スタック走査深さを選択すること:すなわち走査戻り障壁が設置されるスタック内の位置を選択すること
[00147] 708 走査戻り障壁を設置すること:例えば、保存された戻りアドレスにおける指令へ制御を転送する前にフレームの現在の戻りアドレスを保存することにより、及びミューテータを一時中断してフレームを走査するGCソフトウェアのアドレスにより置換することにより
[00148] 710 ミューテータ実行と同時に(少なくとも部分的に)完了されるようにスタック走査を行うことを許容すること
[00149] 800 フローチャート:図8のフローチャート(図7の工程を取り込む)により示される又はこれに準拠する同時並行性強化方法も指す
[00150] 802 予測スタック活動に基づきスタック深さを選択し及び走査戻り障壁を設置することによりスタック走査同時並行性を最適化すること
[00151] 804 同時実行する:例えばミューテータ及びスタック走査器を同時に実行すること
[00152] 806 スタックデータを集めること
[00153] 808 管理された実行時間を利用すること:例えば管理された実行時間インターフェース408との相互作用を介し
[00154] 810 実行サンプルを生成すること
[00155] 812 実行サンプルをコンピュータ的に解析すること
[00156] 814 2つ以上のスレッドの同時並行性強化工程をスレッド毎に行うこと
[00157] 816 選択された走査深さ(すなわち走査戻り障壁位置)をプログラム間で変更する又はこのような変化を生じる指令を行うこと
[00158] 818 選択された走査深さ(すなわち走査戻り障壁位置)を所与のプログラムの実行間で変更する又はこのような変化を生じる指令を行うこと:走査深さをプログラム間で変更すること816及び又は所与のプログラムの実行間の走査深さを変更すること818に加えて、いくつかの実施形態では、単一プログラムの単一実行の過程にわたって各スレッドの走査深さは決定及び調整される
[00159] 820 走査戻り障壁位置を選択する706際、プロファイル化されたパフォーマンスデータに対する依存を回避すること
[00160] 822 スタックのスナップショット内のフレームを勘定すること
[00161] 824 ルーチンの経過された部分的実行時間と推定完了実行時間とを比較する又はルーチンの完了までの推定時間を使用すること
[00162] 826 実行スタックを一定間隔でサンプリングすること:これは、例えばMicrosoft Windows(登録商標)環境内のEvent Tracing for Windows(ETW)により、又はperf in Linux(登録商標)環境により、又は実行時間不可知論的である他のツールによりサンプリングすることなどオペレーティングシステムレベルサンプリングを使用することにより、行われ得る、又はサンプリングは、例えばJava(登録商標)又は他の仮想マシン(Microsoft Corporation、Linus Torvalds、Oracle America Inc.の標識)をそれぞれ介し、特定実行時間にわたって行われ得る
[00163] 828 設置された走査戻り障壁を除去すること:例えば障壁が置換した戻りアドレスによりこれを置換することにより
[00164] 830 フレーム実行確率と確率閾値とを比較すること
[00165] 832 ソフトウェアを実行すること:実行一般だけでなく本明細書において提供されるソフトウェア実行の任意特定例も指す
[00166] 834 ソフトウェア実行を一時中断すること:例えばガーベッジ収集のストップ・ザ・ワールド部分中に
[00167] 836 ルーチンの実行を完了するための推定完了時間を得ること:例えば、戻りアドレスの前の残りの指令の数又はルーチンの実行時間502の測定の履歴に基づき
[00168] 838 他のいくつかの参照符号が割り当てられていない本開示において論述される任意の工程
【0050】
[00169]
動作環境
[00170] 図1を参照すると、実施形態の動作環境100は少なくとも1つのコンピュータシステム102を含む。コンピュータシステム102はマルチプロセッサコンピュータシステムであり得る。動作環境は、クラウド内でクラスタ化され得る、クライアントサーバネットワーク化され得る及び/又はピア・ツー・ピアネットワーク化され得る1つ又は複数の機械を所与のコンピュータシステム内に含み得る。個々の機械はコンピュータシステムであり、及び共働する機械のグループもまたコンピュータシステムである。所与のコンピュータシステム102は、例えば管理者のためのアプリケーションにより、サーバとして、分散処理ノードとして、及び/又は他のやり方で、エンドユーザ用に構成され得る。
【0051】
[00171] 人間ユーザ104は、タイプされるテキスト、タッチ、音声、運動、コンピュータビジョン、ジェスチャ、及び/又はI/Oの他の形式を介しディスプレイ、キーボード及び他の周辺機器106を使用することによりコンピュータシステム102と相互作用し得る。スクリーン126は、着脱可能周辺機器106であり得る又はシステム102の不可欠部分であり得る。ユーザインターフェースは、実施形態と1又は複数の人間ユーザとの間の相互作用を支援し得る。ユーザインターフェースは、別個の選択肢として提示され得る又は一体化され得る命令ラインインターフェース提示、グラフィックユーザインターフェース(GUI)提示、自然ユーザインターフェース(NUI)提示、音声命令インターフェース提示、及び/又は他のユーザインターフェース(UI)提示を含み得る。
【0052】
[00172] システム管理者、ネットワーク管理者、クラウド管理者、セキュリティ解析及び他のセキュリティ要員、業務職員、開発者、試験者、エンジニア、会計監査員及びエンドユーザはそれぞれ特定タイプのユーザ104である。例えばシステム102を試験することを容易にするために自動化エージェント、スクリプト、再生ソフトウェア、デバイス、及び1又は複数の人に代わって働くものもユーザ104であり得る。ストレージデバイス及び/又はネットワークデバイスは、プロセッサ110からのそれらの着脱可能性に依存していくつかの実施形態では周辺機器及び他の実施形態ではシステム102の一部と考えられ得る。図1に示さない他のコンピュータシステムは、例えばネットワークインターフェース機器を介しネットワーク108への1つ又は複数の接続を使用することによりコンピュータシステム102と又は別のシステム実施形態といくつかの技術的やり方で相互作用し得る。
【0053】
[00173] 各コンピュータシステム102は少なくとも1つのプロセッサ110を含む。コンピュータシステム102は他の好適なシステムのようにまた、1つ又は複数のコンピュータ可読ストレージ媒体112を含む。ストレージ媒体112は様々な物理的タイプのものであり得る。ストレージ媒体112は、揮発性メモリ、不揮発性メモリ、適所固定媒体、着脱可能媒体、磁気媒体、光媒体、固体媒体、及び/又は他のタイプの物理的恒久性ストレージ媒体であり得る(単なる伝播信号又は単なるエネルギーとは対照的に)。特に、ポータブル(すなわち、外部)ハードドライブ、CD、DVD、メモリスティック、又は他の着脱可能不揮発性メモリ媒体などの構成済みストレージ媒体114は、挿入される又はそうでなければ設置されると機能的にコンピュータシステムの技術的部分になり得、その内容をプロセッサ110との相互作用とプロセッサ110による使用とのためにアクセス可能にする。着脱可能構成済みストレージ媒体114はコンピュータ可読ストレージ媒体112の一例である。コンピュータ可読ストレージ媒体112の他のいくつかの例は、内蔵RAM(ROM)、ハードディスク、及びユーザ104により容易に着脱可能でない他のメモリストレージデバイスを含む。現在の合衆国特許要件との遵守性のために、コンピュータ可読媒体もコンピュータ可読ストレージ媒体もコンピュータ可読メモリも、合衆国において未決である又は付与される任意の請求項下では信号自体又は単なるエネルギーではない。
【0054】
[00174] ストレージ媒体114はプロセッサ110により実行可能であるバイナリ指令116により構成され、「実行ファイル」は、例えばマシンコード、解釈可能コード、バイトコード、及び/又は仮想マシン上で実行するコードを含むように本明細書では広い意味で使用される。ストレージ媒体114はまた、指令116の実行による技術的効果のために生成、修正、参照、及び/又はそうでなければ使用されるデータ118により構成される。指令116及びデータ118は、これらが常駐するメモリ又は他のストレージ媒体114を構成し、メモリ又は他のコンピュータ可読ストレージ媒体が所与のコンピュータシステムの機能部品である場合、指令116及びデータ118はまた、コンピュータシステムを構成する。いくつかの実施形態では、データ118の一部は、製品特性、インベントリ、物理的測定結果、セッティング、撮像、測定値、標的、ボリュームなどの現実世界項目を表す。このようなデータはまた、バックアップ操作、回復操作、委託操作、中止操作、再フォーマッティング操作、及び/又は他の技術的操作により変換される。
【0055】
[00175] 実施形態はコンピューティングデバイス(例えば汎用コンピュータ、サーバ、又はクラスタ)内の1つ又は複数のプロセッサにより実行されるソフトウェア指令として実装されるとして説明され得るが、このような説明は全ての可能な実施形態を論じ尽くすことを意味しない。当業者は、同じ又は同様な機能がまた、同じ又は同様な技術的効果を提供するために全体的又は部分的に、ハードウェア論理で直接にしばしば実装され得るということを理解する。代替的に、又はソフトウェア実装に加えて、本明細書において説明される技術的機能は1つ又は複数のハードウェア論理部品により少なくとも部分的に行われ得る。例えば、及び他の実装形態を除外すること無く、実施形態は、フィールドプログラマブルゲートアレイ(FPGA:Field-Programmable Gate Array)、特定用途向け集積回路(ASIC:Application-Specific Integrated Circuit)、特定用途向け標準製品(ASSP:Application-Specific Standard Product)、システムオンチップ部品(SOC:System-on-a-Chip component)、コンプレックスプログラマブル論理デバイス(CPLD:Complex Programmable Logic Device)及び同様な部品などのハードウェア論理部品110、128を含み得る。実施形態の部品は、例えばそれらの入力、出力、及び/又はそれらの技術的効果に基づき、相互作用機能モジュールへグループ分けされ得る。
【0056】
[00176] プロセッサ110(例えばCPU、ALU、FPU、及び/又はGPU)、メモリ/ストレージ媒体112及びディスプレイ126に加えて、動作環境はまた、例えば電池、バス、電源、有線及び無線ネットワークインターフェースカードなどの他のハードウェア128を含み得る。名詞「スクリーン」及び「ディスプレイ」は本明細書では交換可能に使用される。ディスプレイ126は、1つ又は複数のタッチスクリーン、ペン又はタブレットからの入力に応答するスクリーン、又はもっぱら出力のために動作するスクリーンを含み得る。いくつかの実施形態では、人間ユーザ入出力装置(例えばスクリーン、キーボード、マウス、タブレット、マイクロホン、スピーカ、運動センサなど)としての周辺機器106は、1つ又は複数のプロセッサ110及びメモリと作動可能通信状態で存在する。
【0057】
[00177] いくつかの実施形態では、システムは、有線及び/又は無線ネットワーク108により接続される複数のコンピュータを含む。ネットワークインターフェース機器128は、所与のコンピュータシステム内に存在し得る例えばパケット交換網インターフェースカード、無線送受信器又は電話ネットワークインターフェースなどのネットワーク部品を使用することによりネットワーク108へのアクセスを提供し得る。ネットワークインターフェース機器、及びスイッチ又はルータ又はファイアウォールなどの他のネットワーク部品の仮想化もまた、例えばソフトウェア定義ネットワーク、又はサンドボックス、又は他のセキュアクラウドコンピューティング環境内に存在し得る。所与の実施形態はまた、技術データ及び/又は技術指示を、直接的メモリアクセス、着脱可能非揮発性ストレージ媒体、又は他の情報ストレージ検索及び/又は送信手法を介し伝達し得る。
【0058】
[00178] 当業者は、「動作環境」の元に本明細書に提示される前述の態様及び他の態様が所与の実施形態の一部を形成し得るということを理解するようになる。本明細書の標題は特徴の厳密な分類を実施形態及び非実施形態特徴セット内へ提供するように意図されていない。
【0059】
[00179] 1つ又は複数の項目は、これらが必ずしも図示の動作環境又はすべての実施形態の一部ではないということを強調するために添付図面内に輪郭形式で示される又は括弧内に列挙されるが、本明細書において論述される動作環境又はいくつかの実施形態における項目と相互動作し得る。輪郭形式又は括弧形式でない項目が任意の図又は任意の実施形態において必ず必要とされるということにはならない。特に、図1は利便性のために提供され、図1内の項目の包含は、項目又は項目の使用の説明が現在の発明に先立って知られていたということを意味しない。
【0060】
[00180]
システムの詳細
[00181] いくつかの実施形態は、本明細書において教示されるように強化された例示的システム400又は別のシステム102などの同時並行性強化型ステムを使用又は提供する。同時並行性強化型システムは、プログラム212の実行スタック204を含む。実行スタックは関心期間320にわたる実行フレーム206を含む。同時並行性強化型システムのメモリ112は、実行スタックにより構成され、メモリ112はまた、ビヘイビア駆動型スタック走査最適化(BDSSO)ソフトウェア402により構成される。同時並行性強化型システムのプロセッサ110はメモリと作動可能通信状態にある。プロセッサ110はBDSSO工程を行うためにBDSSOソフトウェア402を実行するように構成される。BDSSO工程は、(a)実行スタックフレーム発生データ304を取得すること、(b)実行スタックフレーム発生データからそれぞれのフレーム実行尤度314を複数の実行フレーム206の実効フレーム毎に決定すること、(c)フレーム実行尤度に少なくとも部分的に基づきスタック走査深さ318を選択することであって、選択されたスタック走査深さは実行スタック全体の全深さ未満324である、選択すること、(d)選択されたスタック走査深さにガーベッジ収集走査戻り障壁316を設置すること、及び次に(e)プログラム212が実行されている間に追跡ガーベッジ収集器214が走査戻り障壁の下の実行スタックを走査することを可能にすることを含む。システム同時並行性はBDSSO工程を行うことにより増加するが、その理由は、走査戻り障壁に達するフレーム戻り操作330をプログラム212が実行しない限り、ガーベッジ収集器214が走査戻り障壁の下の実行スタックを走査する間に、プログラム212がガーベッジ収集器214と同時に実行されるからである。
【0061】
[00182] 例えば、いくつかの実施形態では、戻り障壁316の上のフレーム206はアプリケーションスレッド216が停止されている間に走査されるが、スタックの残りはアプリケーション124が実行されている間に走査され得る。マルチスレッドアプリケーションはミューテータプログラム212の一例である。戻り障壁は、スタック変更が走査中に検知されずにいるリスクを招くこと無く、実施形態において障壁の下のスタックの一部分を同時に走査することを可能にする。全スタックはBDSSOソフトウェアの有無にかかわらず走査されるであろうが、BDSSOにより、走査のほとんどはスレッド216が停止されている間は行われない。
【0062】
[00183] スタックフレーム発生データを取得する1つのやり方は、既存プロファイラサンプルを使用して同サンプルに2つの任務を行わせることである。したがって、いくつかの実施形態は、プログラム212の実行中にパフォーマンスプロファイラツール404により生成される実行サンプル326を含む。パフォーマンスプロファイラツール404は、パフォーマンス報告のためにサンプルを生成するように設計されるが、いくつかの実施形態では、BDSSOソフトウェア402は、実行サンプルを少なくとも部分的に解析することにより実行スタックフレーム発生データを取得する。特に、サンプルは戻りアドレス312と共にフレーム206を含む。しかし、プロファイラサンプルは、ガーベッジ収集同時並行性強化とは対照的に、プログラムパフォーマンスプロファイリング用に設計されるので、サンプル326は、ガーベッジ収集同時並行性強化のために使用されないパフォーマンスデータ(例えばプロセッササイクルカウント504又は他の実行時間測定結果502、及びメモリ消費量データ506又はそのコンピュータ的根拠)をしばしば含む。
【0063】
[00184] スタックフレーム発生データ304を取得する別のやり方は、管理された実行時間406を利用することである。例えば、いくつかの実施形態は、Java(登録商標)Virtual Machine Tool Interface(JVMTI)(Oracle America, Inc.の標識)を介しスタックフレームデータ410を取得する。設計により、このインターフェース408は、ガーベッジ収集セーフポイント306において取得されたプロファイリングサンプルを含むスタックデータを取得するために使用され得る。これは、セーフポイントが、プログラム実行中に一定間隔で配置されない可能性があるか、又は望まれる精細粒度で配置されない可能性があるので、パフォーマンスプロファイリング(サンプルの意図された目的)にはいくぶん不利であり得る。しかし、セーフポイントにおけるサンプリングは、ガーベッジ収集セーフポイントにおけるスタックの振る舞いは、ガーベッジ収集器がスタックを走査している間にスタックのどの部分が安定なままである可能性が高いかを予測することに高度に関連するので、本明細書において教示されるように同時並行性強化のために実際に有用である。
【0064】
[00185] したがって、いくつかの強化された同時並行性システム実施形態は管理された実行時間406を含み、BDSSOソフトウェア402は、管理された実行時間を利用してガーベッジ収集セーフポイント306においてスタックデータ410を少なくとも部分的に集めること806により、実行スタックフレーム発生データ304を取得する。
【0065】
[00186] 既に述べたように、1つの馴染みの手法は、走査戻り障壁の少なくとも初期位置決めとして、最上位フレームだけを走査する間にミューテータ212を一時中断すること834であった。本明細書の教示の利点により、この手法は、どのプログラム212が関与されるかにかかわらず及びプログラムの1つの実行から別の実行へのプログラム振る舞いのいかなる変動にかかわらずスタックの第1のフレームの下に走査戻り障壁を常に設定する手法と見なされ得る。対照的に、本明細書において教示されるいくつかの実施形態では、強化されたシステムは、以下のやり方の少なくとも1つのやり方で固定深さスタック走査システムと差別化することにより特徴付けられる:ガーベッジ収集走査戻り障壁316は実行スタックの少なくとも2つのフレームの下に設置される、システムは複数のプログラム212を有し、選択されたスタック走査深さ318はプログラム間で変化するか、又は、選択されたスタック走査深さ318は所与のプログラムの単一実行内であっても所与のプログラム212の様々な関心期間320の間に変化する。
【0066】
[00187] いくつかの実施形態では、強化されたシステム、はGCスタック走査と複数のスレッドを含まないミューテータとの間の同時並行性を改善する。しかし、他の実施形態は、本明細書の教示をマルチスレッドプログラム212へ適用する。特に、いくつかの実施形態では、プログラム212を実行するプロセッサはN個のコア424を有し、ここでNは少なくとも2であり、及びプログラム212はM個のスレッド216を有し、ここで2<=M<=N。各スレッド216はそれぞれの実行スタック204を有し、BDSSOソフトウェア402はM個のスレッドのそれぞれのスレッドのスレッド毎ベースでBDSSO工程を行う(814)。すなわち、BDSSOソフトウェアは、ガーベッジ収集されたスレッドの代わりに、ガーベッジ収集のためにスレッド毎に1つの走査戻り障壁を設置し、及び様々なガーベッジ収集されたスレッドは、様々なそれぞれの走査戻り障壁深さ318を有し得る。所与のプログラム212のいくつかのスレッドはガーベッジ収集され得る一方で、同プログラムの他のスレッドは収集されない。
【0067】
[00188] 既に述べたように、プロファイラサンプルは選択的及び適応的走査戻り障壁配置による同時並行性強化のためのフレーム発生データ304を取得するために使用(又は再使用)され得るが、いくつかの実施形態はまた、プロファイラが依存するものより少ないサンプルデータで好適に働く。例えば、いくつかの実施形態では、実行スタックフレーム発生データ304は戻りアドレス312を含み、及び実行スタックフレーム発生データ304は以下のもののそれぞれが無い:経過実行時間を明示するデータ502、プロセッササイクルカウントを明示するデータ504、及びメモリ消費量を明示する又はメモリ消費量の計算の基礎をなすデータ506。いくつかの実施形態では、データ502、504、506は、BDSSOソフトウェア402にとって利用可能であるが、フレーム実行尤度314を決定する際に又は走査戻り障壁位置318を選択する際に、BDSSOソフトウェアにより依存されないか又はBDSSOソフトウェアにより計算されない。いくつかの実施形態では、スタックフレーム発生データ304には、データ502だけでなくデータ504も無い。
【0068】
[00189] 他のシステム実施形態はまた、説明されたプロセス又は構成済み媒体のいくつかのシステムバージョン(コンピューティングハードウェアについての本明細書における広汎な論述により通知される)として直接に又はその派生としてのいずれかで本明細書において説明される。
【0069】
[00190] 特定アーキテクチャ例が添付図面に示されるが、実施形態はそれらの例から逸脱し得る。例えば、様々な図において示される項目は一実施形態に一緒に含まれ得る、或る図に示される項目は省略され得る、様々な項目において示される機能はより少ない項目又は単一項目へ合成され得る、項目は改名され得る、又は項目は異なるやり方で互いに接続され得る。
【0070】
[00191] 技術態様を示すことを助けるために、例が本開示において提供されるが、本明細書に与えられる例は、可能な実施形態のすべてを説明するとは限らない。実施形態は、本明細書に提供される部品名、最適化、アルゴリズム的選択、サンプル326内容、スタック実装形態、手法、又はシナリオの具体例に限定されない。所与の実施形態は、例えば追加の又は異なる技術的特徴、機構、シーケンス、データ構造又は機能を含み得る、そうでなければ本明細書に提供される例から逸脱し得る。
【0071】
[00192]プロセス(別名、方法)
[00193] 図7は、本明細書において教示されるシステム400又は別の同時並行性強化型システムなどの強化されたシステムにより行われ得る又は支援され得る方法の一例である方法700を示す。図8はさらに、システム400又は本明細書において教示された革新的機能を有する他のシステムの動作中の使用に好適である同時並行性強化方法(用語の法的意味で「プロセス」とも呼ばれることがある)を示す。図8図7に示す工程のいくつかの精緻化、補足又は文脈的行為を含む。図8はまた図7に示す工程を取り込む。添付図面に示される又はそうでなければ開示される技術的プロセスは、別途示さない限り、例えば強化されたガーベッジ収集器214により自動的に行われる。プロセスはまた、人間管理者又は他の人間による行為が関与される程度に、部分的に自動的に且つ部分的に手動で行われ得、例えば、いくつかの実施形態では、人間管理者はフレーム実行確率閾値420を規定し得る。本明細書において革新的と考えられるいかなるプロセスも完全手動ではない。所与の実施形態では、プロセスの零以上の示された工程は、恐らく、影響する様々なパラメータ又はデータと共に反復され得る。一実施形態における工程はまた、図7、8においてレイアウトされる上から下への順番と異なる順番で行われ得る。いくつかの工程は、連続的に、部分的に重畳するやり方で、又は完全に並列に行われ得る。特に、フローチャート700行為項目又はフローチャート800行為項目が、プロセス中に行われる工程を指示するために横断される順番は、プロセスの1つのパフォーマンスから別のパフォーマンスにわたって変化し得る。フローチャート横断順番はまた、1つのプロセス実施形態から別のプロセス実施形態にわたって変化し得る。工程はまた、行われるプロセスが作動可能であり且つ少なくとも1つの請求項に準拠するという前提で、1つ又は複数のマシン上で省略、合成、改名、再グループ化され、行われ得る、又はそうでなければ示されたフローから逸脱し得る。
【0072】
[00194] いくつかの実施形態は、ガーベッジ収集のための実行スタック追跡を最適化する同時並行性強化方法を使用又は提供する。本方法は、実行スタックのための実行スタックフレーム発生データを取得すること702、実行スタックフレーム発生データからそれぞれのフレーム実行尤度を複数の実行フレームの実効フレーム毎に自動的に決定すること704、フレーム実行尤度に少なくとも部分的に基づきスタック走査深さを自動的に選択すること706であって、選択されたスタック走査深さは実行スタック全体の全深さ未満である、選択すること、ガーベッジ収集走査戻り障壁を、選択されたスタック走査深さに自動的に設置すること708、及び追跡ガーベッジ収集器が、選択されたスタック走査深さまでだけ実行スタックを追跡すること302を許容すること710を含む。同時並行性は、本方法を行うことなくガーベッジ収集のために実行スタックを走査することと比較して、ミューテータソフトウェアの実行832と同時に発生する(804)ガーベッジ収集器スタック走査ソフトウェアの実行832のおかげで本方法を行うことにより増加される(802)。
【0073】
[00195] いくつかの実施形態は、スタックフレーム存在スナップショットのウィンドウを使用することによりフレーム実行尤度を決定する。各スナップショット508は一組の実行フレームを含む。スナップショット解析812のゴールは、点の下のあらゆるものがサンプルセット間で(すなわちスナップショット間で)不変(又はほとんど不変)なままであるスタック内の位置318を発見することである。いくつかの実施形態では、実行スタックフレーム発生データ304は、プログラム212の実行中の様々なポイント510のスタックフレームスナップショット508を含み、フレーム実行尤度314を決定すること704は、特定組みの実行フレームが一組のスタックフレームスナップショット内に何回発生するかを勘定すること822を含む。例えば、図6に示す例では、示された5つのスナップショット508のフレーム206のいくつかはスナップショット間で変化したが、他のものは変化しなかった。時間は図6の左から右へ進む。この例では、走査障壁深さ318は、変化しないフレーム206の直ぐ上に設定され、示されたフレーム604のすべてのフレームの下のものは変化する。
【0074】
[00196] より一般的には、いくつかの実施形態では、フレームFが最後のN個のサンプルのすべてのサンプル内に出現しなければ、本実施形態は、ミューテータ実行と同時にフレームFを走査することを試みない。図6の例では、最も右側(最近)のスタックの上位4フレームは、最後の5(N=5)サンプル(スナップショット)のすべてのサンプル内に出現しないので、それらの4フレームは同時走査遮断318の上にある。遮断深さ318の下のフレームはすべて、最後の5つのスナップショット内に出現し、これに応じてガーベッジ収集器は、5つのサンプリングされたスタック204を生成したミューテータと同時に実行されている間に、これらのフレームを走査しようとする。
【0075】
[00197] いくつかの実施形態では、フレーム実行尤度を決定する(704)別のやり方は推定されたルーチン実行長さデータを使用することである。いくつかの実施形態では、フレーム実行尤度を決定すること704は、以下のもののうちの少なくとも1つを含む:ルーチン416の部分的実行のための経過実行時間414とルーチンの完全実行のための推定実行時間とを比較すること824又はルーチンの実行を完了するための推定完了時間412を得ること836。
【0076】
[00198] いくつかの実施形態では、スタックフレーム発生データを取得する(702)1つのやり方は、プログラムの実行中に実行スタックを定期的にサンプリングすること826によるものである。他の実施形態は、疑似ランダム間隔でサンプリングすること又は他の非周期的サンプリングを行い得る。
【0077】
[00199] 本明細書において教示された同時並行性強化の恩恵は、プログラム212が、活動のほとんどが上位のいくつかのフレーム内にある深いスタック204を有する場合に、特に大きい可能性がある。例えば、いくつかの実施形態では、実行スタックフレーム発生データ304は、プログラム212の実行中の様々な時点のスタックフレームスナップショット508を含み、スナップショットの大多数のそれぞれは少なくとも100フレーム206のスタック深さ324を示すが、選択されたスタック走査深さ318は2以上10未満である。
【0078】
[00200] いくつかの実施形態では、フレーム実行尤度を決定すること704及びスタック走査深さを選択すること706は、以下のうちのいかなるものも読み出すことなく、又はそれに依存することなく行われる(820):任意のスタックフレームの経過実行時間を明示するデータ502、任意のスタックフレームのプロセッササイクルカウントを明示するデータ504、又は任意のスタックフレームのメモリ消費量を明示するデータ506。
【0079】
[00201] いくつかの実施形態では、実行スタックフレーム発生データを取得すること702はプロファイラツールにより生成された実行サンプルを取得することを含む。いくつかの実施形態では、実行スタックフレーム発生データを取得すること702はガーベッジ収集セーフポイントにおけるプロファイリングの管理された実行時間を利用すること808を含む。
【0080】
[00202] いくつかの実施形態では、本方法は、そのスタックサンプルが反復組のフレームを有する少なくとも1つのスレッドを発見する。特に、ミューテータソフトウェアはアプリケーションプログラム124を含み、本方法は、アプリケーションプログラムの少なくとも2つのスレッドのスレッド毎ベースでそれぞれのスレッド216の複数の実行スタックの各実行スタックにより、少なくとも取得すること702、決定すること704、選択すること706、及び設置すること708を行うことを含む。
【0081】
[00203]構成済みストレージ媒体
[00204] いくつかの実施形態は構成済みコンピュータ可読ストレージ媒体112を含む。ストレージ媒体112は、ディスク(磁気的、光学的、その他の)、RAM、EEPROMS又は他のROM、及び/又は特にコンピュータ可読ストレージ媒体(単なる伝播信号でない)を含む他の構成可能メモリを含み得る。構成されるストレージ媒体は、具体的にはCD、DVD又はフラッシュメモリなどの着脱可能ストレージ媒体114であり得る。着脱可能であってもなくてもよく且つ揮発性であってもなくてもよい汎用メモリは、構成済みストレージ媒体を形成するために、着脱可能ストレージ媒体114及び/又はネットワーク接続などの別のソースから読み出されたデータ118及び指令116の形式のフレーム発生データ304、走査戻り障壁深さ318、実行尤度314、及びBDSSOソフトウェア402などの項目を使用することにより、実施形態内へ構成され得る。構成済みストレージ媒体112は、本明細書に開示されるようにコンピュータシステム102に同時並行性強化のための技術的プロセス工程を行わせることができる。したがって、添付図面は、構成済みストレージ媒体実施形態、プロセス(別名、方法)実施形態だけでなくシステム及びプロセス実施形態も示すことを助ける。特に、図7又は8に示す又はそうでなければ本明細書において教示されるプロセス工程の任意のものが、構成済みストレージ媒体実施形態を形成するためにストレージ媒体を構成するのを助けるために使用され得る。
【0082】
[00205] いくつかの実施形態は、データ118及び指令116により構成されるコンピュータ可読ストレージ媒体112、114を使用又は提供する。指令116は、少なくとも1つのプロセッサ110により実行されるとコンピューティングシステムに、ガーベッジ収集のための実行スタック追跡を最適化する同時並行性強化方法を行わせる。本方法は:プログラムの実行スタックのための実行スタックフレーム発生データを取得すること702、実行スタックフレーム発生データからそれぞれのフレーム実行尤度を複数の実行フレームの実効フレーム毎に自動的に決定すること704、フレーム実行尤度に少なくとも部分的に基づきスタック走査深さを自動的に選択すること706であって、選択されたスタック走査深さは実行スタック全体の全深さ未満である、選択すること、ガーベッジ収集走査戻り障壁を、選択されたスタック走査深さに自動的に設置すること708、及び追跡ガーベッジ収集器が、選択されたスタック走査深さまでだけ実行スタックをすることを許容すること710を含み、これにより、プログラム実行とガーベッジ収集スタック走査との同時並行性は本方法を行うことにより増加される(802)。
【0083】
[00206] いくつかの実施形態では、プログラム212は実行する(832)間に走査戻り障壁にぶつかり、及び本方法はさらに、走査戻り障壁を除去すること828、異なるスタック走査深さ(例えばスタックのさらに下の深さ)を自動的に選択すること706、異なるスタック走査深さに走査戻り障壁を自動的に設置すること708を含む。1フレーム深い深さを選択する代わりに、いくつかの実施形態はKフレーム深い深さを選択する。ここで、Kは管理者により設定される、又は例えば除去された深さの短縮割合として動的に決定され得、例えば、Kを4分割された除去された深さ以上である次の整数に設定する。
【0084】
[00207] いくつかの実施形態では、実行スタックはプログラム212のスレッドに対応し、及び本方法は、スレッドの実行中の様々な時刻に、且つガーベッジ収集走査戻り障壁が実行スタックの少なくとも2つのフレームの下に設置されるたびに、スタック走査深さ318により、選択すること706と設置すること708とを反復する。これらの実施形態のいくつかでは、実行スタックフレーム発生データ304はプログラムの実行中の様々な時点のスタックフレームスナップショット508を含み、スナップショットの少なくとも80%はそれぞれ少なくとも80フレームのスタック深さを示し、及び選択されたスタック走査深さは9未満である。
【0085】
[00208] いくつかの実施形態では、フレーム実行尤度を決定すること704は、フレーム実行確率418とフレーム実行確率閾値420とを比較すること830を含む。例えば、フレームFが最近の10スタックスナップショットのうちの4つの中に出現すれば、フレームの確率418は0.4と計算され得、及び走査戻り障壁をフレームの下に置くための閾値420が0.2に設定されれば、0.4と0.2とを比較することでLikelyToChangeの尤度314を生じるが、これは、実行スタックの同時並行性走査下側部分内にフレームFを含むには高過ぎる。
【0086】
[00209]追加例及び観察
[00210] 当業者は、本開示のあらゆる部分又はその中のいかなる特定詳細も使用可能性、明細書、又は最良モードなどの法的決定基準を満足するために必ず必要とされるわけではないということを認識する。また、実施形態は、特定ネットワーク、プロトコル、ツール、識別子、フィールド、データ構造、関数又は他の実装形態選択に限定されない。いかなる他の特許開示とのいかなる明白な矛盾も、本発明の所有者に起因する矛盾ですら、本特許情報開示において提示された特許請求の範囲を解釈する際に何ら役割を有しない。本開示のすべての部分に関係するこの理解により、いくつかの追加の例及び観察が提供される。
【0087】
[00211] 本明細書に提供される教示の利点により、当業者はガーベッジ収集を様々な特徴付けに従って見得る。例えば、スタック追跡、より短いSTWによる低遅延、より良いミューテータ応答性のための同時スタック走査及びミューテータ実行、STW中の固定カウントフレーム走査、実際のスタック活動に基づく動的カウントフレーム走査、及び他の特徴は、馴染みのガーベッジ収集器又は革新的ガーベッジ収集器において又はいくつかのケースではその両方において識別され得る。特に、当業者は、所与の実装形態が、いくつかの態様では又は時には、本明細書の新しい教示に従って動作し得、及びまた他の態様では又は他の時には、お馴染みのやり方で動作し得るということを認識することとなる。
【0088】
[00212] いくつかの実施形態は、同時ガーベッジ収集のためのインテリジェント部分的スタック走査を提供又は使用する。文脈として、追跡ガーベッジ収集器214は、どれが到達可能か(及びしたがってどれが到達不能であり及びガーベッジとして処理され得るか)を決定するためにオブジェクトのグラフを利用することにより動作する。追跡収集器は一組のルートによりそのマーキングプロセスを開始し、及び次にそれらの基準の推移閉包(transitive closure)を横断する。ルートは到達可能であると想定されるオブジェクトである。ルート識別子は、実行スタックを含むいくつかの場所に由来する。ルートのスタックを走査することは、現実世界プログラム内のスタックが、横断すべき多くの活性化フレーム206により極めて深くなり得るので高価であり得る。同時ガーベッジ収集器は、アプリケーションスレッドが休止される必要がある時間を最小化しようとするので、スタック走査がかかる時間を低減することは、同時ガーベッジ収集器にとって重要である。
【0089】
[00213] 同時スタック走査に対するいくつかの緩和手法は、ストップ・ザ・ワールド(STW)休止内に実行フレーム(最上部フレーム)だけを走査し及び次にアプリ124を再開させることである。このような手法は、アプリが前フレームへ戻ろうとすればシステムがSTWに再び入るように、スタック障壁を設定し得る。いくつかの緩和手法は、実行フレームだけを走査するが、ミューテータスレッドが未走査フレームへ行こうとすると、ミューテータスレッドに、ユーザコードを再び実行する前にフレームのマーキング作業をすることにより、GCを助けさせる。いくつかの緩和手法は、スタックを固定サイズセクションに分割し、及び1つのセクションを一度に走査する。これらの緩和手法が共有する1つの事は、これらの緩和手法が、最近のスタック活動の考慮無しに、又はミューテータがスタック走査中に入ろうとするフレームがどれかを予測することを試みた過去のスタック活動のいかなる使用も無く、STW内のすべてのフレーム、1つのフレーム、又は他のいくつかの所定数のフレームを走査することである。
【0090】
[00214] 対照的に、本明細書において提示されるいくつかの実施形態は、走査戻り障壁深さを動的に選択するという形式でこのような予測をすることによる同時スタック走査を基礎とする。GCが前もってSTW内にのスタックのどれだけを走査するかを予め決定する代わりに、いくつかの実施形態は、増加される可能性が高い同時並行性に対する推定318を行うのに費やされる資源をバランスさせるインテリジェント推定を行うようにサンプリング情報を使用することにより動的に調整する。
【0091】
[00215] 例えば、実行プロセス中に実行スタックを定期的にサンプリングすることにより、いくつかの実施形態は、このような推定318を通知するいくつかのパターンを採取し得る。例えば、スレッドが非常に深いスタック(何百フレーム)を有するが最上位6フレームだけがサンプル間で変化している実行パターンをサンプリングが示すということを仮定する。十分に長い時間(例えば4連続スナップショット)の間このパターンを見た後、強化されたシステムは、来たるGC内の7番目フレームから戻る必要がある確率が低いと推定し、深さを、戻り障壁を設定するのに及び深さの下で同時走査を行うのに良好な場所にする。
【0092】
[00216] 推定が正しいと分かれば、強化されたシステムは、走査関係遅延に出くわすミューテータスレッドの尤度を低減する一方で同時スタック走査の利点を有する。推定が正しくないと分かり、及び機能がスタック走査中にスタック障壁に実際にぶつかれば、強化されたシステムは、推定を再び試み得る、又はスタック障壁と共に使用される既存緩和手法を採用し得る。
【0093】
[00217] 当業者は、本明細書において説明される実施形態が他の手法を上回る様々な技術的利点を有し得るということを理解する。例えば、部分的スタック走査のためのいくつかの既存解決策は、アプリケーションスレッドが停止されている間にどれだけのスタックを走査すべきかという所定概念を使用する。このワン・サイズ・フィット・オール(one-size-fits-all)手法は非効率性に繋がり得る。例えば、スレッドが休止中に戻ったであろうフレームより多くのフレームをGCが走査すると、GCはスレッドの休止時間を不要に延長してしまう。GC走査器422が休止中にあまりに少ないフレームを走査することを選択すれば、スレッドは、休止後にスタック障壁に到達する可能性があり、並びに、より長い待機並びにGCとの及びより多くの連携を行う必要がある。本明細書に提示されるいくつかの実施形態は、実行時に非同時的に走査されたフレームの数をプログラム振る舞いに基づき決定することにより、これらの不利益を両方とも回避する。
【0094】
[00218]いくつかの追加組み合わせ及び変形形態
[00219] コード、データ構造、論理、部品、通信、及び/又はそれらの機能的等価物のこれら組み合わせのうちの任意のものは、システムの任意のものと及び上述のそれらの変形形態と組み合わされ得る。プロセスは、任意のサブセットで又は組み合わせで又は操作可能なシーケンスで本明細書において説明される任意の工程を含み得る。各変形形態は、単独で、又は他の変形形態の任意の1つ又は複数と組み合わせで発生し得る。各変形形態はプロセスのうちの任意のものと共に発生し得、及び各プロセスは他の処理の任意の1つ又は複数と組み合わされ得る。変形形態を含むプロセスの各プロセス又は組み合わせは上述の構成済みストレージ媒体組み合わせ及び変形形態のうちの任意のものと組み合わされ得る。
【0095】
[00220]結論
[00221] 手短かに言えば、コンピューティングシステム102内のメモリ112を再要求するガーベッジ収集(GC)はそれらの実行スタック204を走査する(302)ためにアプリケーション124、ウェブサービス及び他のミューテータプログラム212を時に一時中断して(834)、それらの応答性を低下させる。しかし、ミューテータ212実行832とGCスタック走査との同時並行性322を増加する一時中断時間は、BDSSOソフトウェア402などのビヘイビア駆動型スタック走査最適化(BDSSO)機能により低減される(802)。BDSSOは、実行スタックフレーム発生データ304を取得し(702)、フレーム実行尤度314を決定し(704)、この尤度に基づきスタック走査深さ318を選択し(706)、及び、選択された深さ318に走査戻り障壁316を設置する(708)。次に、GC214は、ミューテータ212が実行されている(832)間に走査戻り障壁316の下の実行スタック204を走査し(302)、こうして同時並行性322を増加し(802)及びミューテータ212の応答性を改善する(802)。選択された(706)障壁位置318は実際のスタック204活動に従って変化し(816、818)、一定深さ又は固定組の等間隔深さなどの柔軟性が無い手法を障壁配置に対して使用する代わりに、最適化された同時並行性を提供する(802)。既存プロファイラ404サンプル326又は仮想マシンインターフェース408は、BDSSOにより再使用され得る。実行時間502、サイクルカウント504又は使用されるメモリ506などのプロファイラパフォーマンスデータを欠くスキニーサンプル326もまた、BDSSOのために使用され得、サンプル326により消費されるプロセッサ110使用量及びメモリ112の観点から、サンプリングがそれほど高価でなくなることを可能にする。本明細書において提供される教示は、クラウド内で、サーバ上で、ワークステーション上で、又は他のどこかでコンピューティングシステム102へ適用され得、これにより、アプリケーションソフトウェア応答性を改善するとともに自動メモリ再要求を支援する特定同時並行性強化を提供する。
【0096】
[00222] 実施形態自体はまた、試験された及び適切なセキュリティ制御及びプライバシー制御(一般データ保護規則(GDPR:General Data Protection Regulation)など)を含む又はそれから恩恵を受けるものと理解される。例えば、ガーベッジ収集ソフトウェア内へのマルウェアの注入又は活性化を介したコンピューティングシステムの悪用を防止するのを助けるために適切な方策が取られるべきであることが理解される。本明細書において教示されたツール及び技術の使用は、このような制御の使用に適合する。
【0097】
[00223] いくつかの動機付け例においてMicrosoftの技術が使用されるが、本明細書における教示はMicrosoftにより供給又は管理される技術における使用に限定されない。好適なライセンスの元に、例えば、本教示は他のクラウドサービスプロバイダにより提供されるソフトウェア又はサービスにおいて具現化される可能性がある。
【0098】
[00224] 特定の実施形態は、プロセスとして、構成済みストレージ媒体として、又はシステムとして本明細書において明示的に示され説明されるが、一つのタイプの実施形態の論述もまた他の実施形態タイプまで概して広がるということが理解される。例えば、図7、8に関連するプロセスの説明はまた、構成済みストレージ媒体を説明するのを助け、及び、他の図面に関連して論述されるもののようなシステム及び製造の技術的効果及び動作を説明するのを助ける。一実施形態からの制限が別の実施形態へ必ず読み込まれるということにはならない。特に、プロセスは、構成済みメモリなどのシステム又は製造を論述する間に提示されるデータ構造及び配置に必ずしも限定されない。
【0099】
[00225] 当業者は、実装形態詳細が、特定閾値、比較、サンプル分野、特定種類の実行時間又はプログラミング言語又はアーキテクチャ、及び特定コンピューティング環境などの特定コードに関係し得、したがってあらゆる実施形態において出現する必要が無いということを理解する。当業者は、詳細を論術する際に使用されるプログラム識別子及び他のいくつかの用語が実装形態固有であり、したがってあらゆる実施形態に関係する必要が無いということも理解する。それにもかかわらず、このような詳細は本明細書内に存在することを必ずしも必要とされないが、このような詳細は、文脈を提供することにより読者を助け得る、及び/又は本明細書で論述される技術の多くの可能な実装形態のいくつかを示し得る。
【0100】
[00226] すべての請求された又は請求可能実施形態の例示的であるが包括的でない技術的プロセス、技術的効果、技術的機構及び技術的詳細を含む本明細書に提供される項目に十分に注意して、当業者は、本開示及び本明細書において説明される実施形態が、当該技術分野外の主題に、又は主要又は元の原因若しくは動機などの任意の観念自体に、又は単なる結果自体に、又は心理的プロセス若しくは心理的段階に、又はビジネス方法若しくは優勢な経済的慣習に、又は人間活動を編成する単なる方法に、又は自然法自体に、又は自然発生事項又はプロセスに、又は生き物若しくは生き物の一部に、又は数式自体に、又は分離ソフトウェア自体に、又は単に従来のコンピュータに、又は全く知覚不能な何か若しくは任意の抽象的観念自体に、又は重要でない解決後活動に、又は未規定装置上に完全に実装される任意の方法に、又は有用且つ具体的である結果を生成することができない任意の方法に、又はすべての分野の利用の任意の強制排除に、又はこのような保護が求められるか若しくは認可若しくは強制される管轄区の法律下の特許権保護に不適当である任意の他の主題に向けられないということを理解する。
【0101】
[00227] 或る特徴Xを有する実施形態への本明細書における参照及び或る特徴Yを有する実施形態への、本明細書の他の箇所での参照は、本明細書で明示されない限り、特徴X及び特徴Yの両方を有する本開示実施形態からのものを排除しない。全ての可能な否定的請求項制限は、この特定の排除が本明細書におけるいかなる例においても与えられなくても、一実施形態の一部であると述べられた任意の特徴が別の実施形態における包含から明示的に除去され得るという意味で、本開示の範囲内に入る。用語「実施形態」は「プロセス、システム、製造品、構成済みコンピュータ可読ストレージ媒体、及び/又は適用法令に準拠するやり方で適用される本明細書の教示の他の例」のより便利な形式として本明細書では単に使用される。したがって、所与の「実施形態」は、少なくとも1つの請求項に準拠するという前提で、本明細書において開示される特徴の任意の組み合わせを含み得る。
【0102】
[00228] 添付図面に示されるあらゆる項目があらゆる実施形態において存在する必要があるとは限らない。逆に、実施形態は添付図面に明示的に示されない項目を含み得る。いくつかの可能性が具体例により本明細書ではテキストで及び添付図面内に示されるが、実施形態はこれらの例から逸脱し得る。例えば、一例の特定技術的効果又は技術的特徴は、異なるやり方でハードウェア及び/又はソフトウェアで省略、改名、異なるやり方でグループ分け、反復、インスタンス化され得る、又はいくつかの例のうちの2つ以上において出現する効果又は特徴の混合であり得る。1つの位置において示される機能はまた、いくつかの実施形態では異なる位置に設けられ得、当業者は、機能モジュールが、全体として見ると相互作用モジュールの集合から所望技術的効果を必ずしも省略すること無く所与の実装形態において様々なやり方で定義され得るということを認識する。別個の工程は、スペース制限に起因して又は便宜のために添付図面内の単一ボックス内に一緒に示され得るが、それにもかかわらず別々に実行可能であり得、例えば、1つの工程は、方法の所与のパフォーマンスでは他の工程無しに行われ得る。
【0103】
[00229] 参照は、参照符号により添付図面全体わたってなされた。図内又は本文内の所与の参照符号に関連付けられたフレージングにおけるいかなる明白な非一貫性も、参照符号により参照されるものの範囲を単純に広げることとして理解されるべきである。所与の参照符号の異なる事例は、たとえ同じ参照符号が使用されても異なる実施形態を指し得る。同様に、所与の参照符号は動詞、名詞、及び/又はそれぞれの対応インスタンスを指すために使用され得、例えば、プロセッサ110はこれらを実行することにより指令を処理(110)し得る。
【0104】
[00230] 本明細書で使用されるように、「a」、「an」、及び「the」などの用語は、指示された項目又は工程のうちの1つ又は複数を包含する。特に、特許請求の範囲では、項目への参照は一般的には、少なくとも1つのこのような項目が存在するということを意味し、及び工程への参照は、工程の少なくとも1つのインスタンスが行われるということを意味する。同様に、「is」及び他の単数動詞形式は、文法的誤り又は誤解を回避するために、文脈が許容する場合は「are」及び他の複数形式の可能性を包含するものと理解されるべきである。
【0105】
[00231] 標題は便宜のためだけのものである。すなわち、所与のトピックに関する情報は、その標題がトピックを指示するセクション外にも見出され得る。
【0106】
[00232] 申請されたすべての請求項及び要約書は本明細書の一部である。
【0107】
[00233] 本明細書において使用される任意の用語が工業規格に関わる又はそうでなければそれを参照する限りにおいて、及び適用法令が標準規格などの特定版の識別を必要とする限りにおいて、本開示は、適用可能特許法の元に本開示の最も早い優先日のものとして少なくとも草案形式で発行された(より最近版があれば最終形式が優先する)当該標準規格の最近の版を指すものと理解されるべきである。
【0108】
[00234] 例示的実施形態が添付図面において示され上に説明されたが、無数の修正が特許請求の範囲に記載された原理及び概念から逸脱することなされ得るということとこのような修正が全抽象概念を包含する必要はないということとが当業者に明らかになる。本主題は構造的特徴及び/又は手順的行為に固有な言語で説明されるが、添付の特許請求の範囲において定義される主題は、同特許請求の範囲において説明される特定の技術的特徴又は行為に必ずしも限定されないということを理解すべきである。所与の定義又は例において識別されるあらゆる手段又は態様又は技術的効果があらゆる実施形態において存在する又は利用される必要はない。むしろ、説明される特定特徴及び行為及び効果は特許請求の範囲を実施する際の考慮のための一例として開示される。
【0109】
[00235] 抽象的観念全体を包含するに及ばないが特許請求の範囲の等価性の意味及び範囲に入るすべての変更は、法律により認められた限りにおいてそれらの範囲に包含されるものとする。
図1
図2
図3
図4
図5
図6
図7
図8
【国際調査報告】