(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-04
(54)【発明の名称】デバイス間での計算共有方法、システム、プログラム
(51)【国際特許分類】
G06F 9/50 20060101AFI20240528BHJP
G06F 9/48 20060101ALI20240528BHJP
G16Y 30/00 20200101ALI20240528BHJP
【FI】
G06F9/50 150D
G06F9/48 350Z
G16Y30/00
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023567099
(86)(22)【出願日】2022-05-06
(85)【翻訳文提出日】2023-11-01
(86)【国際出願番号】 EP2022062262
(87)【国際公開番号】W WO2022243065
(87)【国際公開日】2022-11-24
(32)【優先日】2021-05-18
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】ガジェ、バイブハブ
(72)【発明者】
【氏名】ホケット、ヒュー
(57)【要約】
デバイス・オペレーティング・システム(OS)クラスタリングを使用して複数のモノのインターネット(IoT)デバイス間で効率的な計算を共有するシステムであって、プロセッサが、IoTデバイスのうちの第1のデバイスのアクションを識別し、第1のデバイスからIoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始し、第1のデバイスおよび1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止し、第1のデバイスから1つまたは複数の他のデバイスにユニットを転送する。
【特許請求の範囲】
【請求項1】
デバイス・オペレーティング・システム(OS)クラスタリングを使用して複数のモノのインターネット(IoT)デバイス間で効率的な計算を共有するためのシステムであって、
メモリと、
前記メモリと通信するプロセッサと、
を備え、前記プロセッサは動作を実行するように構成され、前記動作は、
前記IoTデバイスのうちの第1のデバイスのアクションを識別することと、
前記第1のデバイスから前記IoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始することと、
前記第1のデバイスおよび前記1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止することと、
前記第1のデバイスから前記1つまたは複数の他のデバイスにユニットを転送することと、
を含む、システム。
【請求項2】
各スレッドを一時停止することは、
各スレッドにそれぞれ関連付けられた現在のポインタ、関連する変数、およびメタデータを収集すること
を含む、請求項1に記載のシステム。
【請求項3】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
メモリ変数データを識別することと、
実行されたコードの詳細に関連付けられた最後のポインタを識別することと、
を含む、請求項2に記載のシステム。
【請求項4】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
前記1つまたは複数の他のデバイスのうちの1つのユニットOSを転送することと、
前記1つまたは複数の他のデバイスのうちの前記1つに関連するデータを収集することと、
前記1つまたは複数の他のデバイスのうちの1つのメモリに前記データをロードすることと、
を含む、請求項2に記載のシステム。
【請求項5】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
前記1つまたは複数の他のデバイスのうちの前記1つにおける新しいメモリ空間で各スレッドをトリガすること
を含む、請求項4に記載のシステム。
【請求項6】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
1つまたは複数の変数を生成することと、
前記1つまたは複数の変数をランタイムのスコープ内にロードすることと、
各スレッドを再開することと、
を含む、請求項5に記載のシステム。
【請求項7】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
カーソルを生成することと、
前記カーソルをスレッドに挿入することであって、前記カーソルは前記スレッド内の後続のステップを指す、前記挿入することと、
各スレッドを再開することと、
を含む、請求項5に記載のシステム。
【請求項8】
デバイス・オペレーティング・システム(OS)クラスタリングを使用して複数のモノのインターネット(IoT)デバイス間で効率的な計算を共有する方法であって、
プロセッサによって、前記IoTデバイスのうちの第1のデバイスのアクションを識別することと、
前記第1のデバイスから前記IoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始することと、
前記第1のデバイスおよび前記1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止することと、
前記第1のデバイスから前記1つまたは複数の他のデバイスにユニットを転送することと、
を含む、方法。
【請求項9】
各スレッドを一時停止することは、
各スレッドにそれぞれ関連付けられた現在のポインタ、関連する変数、およびメタデータを収集すること
を含む、請求項8に記載の方法。
【請求項10】
メモリ変数データを識別することと、
実行されたコードの詳細に関連付けられた最後のポインタを識別することと、
をさらに含む、請求項9に記載の方法。
【請求項11】
前記1つまたは複数の他のデバイスのうちの1つのユニットOSを転送することと、
前記1つまたは複数の他のデバイスのうちの前記1つに関連するデータを収集することと、
前記1つまたは複数の他のデバイスのうちの1つのメモリに前記データをロードすることと、
をさらに含む、請求項9に記載の方法。
【請求項12】
前記1つまたは複数の他のデバイスのうちの前記1つにおける新しいメモリ空間で各スレッドをトリガすること
をさらに含む、請求項11に記載の方法。
【請求項13】
1つまたは複数の変数を生成することと、
前記1つまたは複数の変数をランタイムのスコープ内にロードすることと、
各スレッドを再開することと、
をさらに含む、請求項12に記載の方法。
【請求項14】
カーソルを生成することと、
前記カーソルをスレッドに挿入することであって、前記カーソルは前記スレッド内の後続のステップを指す、前記挿入することと、
各スレッドを再開することと、
をさらに含む、請求項12に記載の方法。
【請求項15】
デバイス・オペレーティング・システム(OS)クラスタリングを使用して複数のモノのインターネット(IoT)デバイス間で効率的な計算を共有するためのコンピュータ・プログラム製品であって、プログラム命令を具現化したコンピュータ可読記憶媒体を備え、前記プログラム命令はプロセッサによって実行可能であり、前記プロセッサに動作を実行させ、前記動作は、
前記IoTデバイスのうちの第1のデバイスのアクションを識別することと、
前記第1のデバイスから前記IoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始することと、
前記第1のデバイスおよび前記1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止することと、
前記第1のデバイスから前記1つまたは複数の他のデバイスにユニットを転送することと、
を含む、コンピュータ・プログラム製品。
【請求項16】
各スレッドを一時停止することは、
各スレッドにそれぞれ関連付けられた現在のポインタ、関連する変数、およびメタデータを収集すること
を含む、請求項15に記載のコンピュータ・プログラム製品。
【請求項17】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
メモリ変数データを識別することと、
実行されたコードの詳細に関連付けられた最後のポインタを識別することと、
を含む、請求項16に記載のコンピュータ・プログラム製品。
【請求項18】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
前記1つまたは複数の他のデバイスのうちの1つのユニットOSを転送することと、
前記1つまたは複数の他のデバイスのうちの前記1つに関連するデータを収集することと、
前記1つまたは複数の他のデバイスのうちの1つのメモリに前記データをロードすることと、
を含む、請求項16に記載のコンピュータ・プログラム製品。
【請求項19】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
前記1つまたは複数の他のデバイスのうちの前記1つにおける新しいメモリ空間で各スレッドをトリガすること
を含む、請求項18に記載のコンピュータ・プログラム製品。
【請求項20】
前記プロセッサは動作を実行するようにさらに構成され、前記動作は、
1つまたは複数の変数を生成することと、
カーソルを生成することと、
前記カーソルをスレッドに挿入することであって、前記カーソルは前記スレッド内の後続のステップを指す、前記挿入することと、
前記1つまたは複数の変数をランタイムのスコープ内にロードすることと、
各スレッドを再開することと、
を含む、請求項19に記載のコンピュータ・プログラム製品。
【請求項21】
コンピュータ・プログラムであって、前記プログラムをコンピュータ上で動作させた場合に、請求項8から14のいずれか一項に記載の方法を実行するように適合されたプログラム・コード手段を含むコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般的にはモノのインターネット(IoT:Internet-of-Things)の分野に関し、より詳細には、デバイス・オペレーティング・システム(OS:operating system)クラスタリングを使用した複数のIoTデバイス間での効率的な計算の共有に関する。
【背景技術】
【0002】
現在、世界中には全人類の合計よりも多くの接続されたIoTデバイスが存在し、IoTデバイスの数はさらに増加している。各IoTデバイスは、特定の異種のコンピューティング能力を有し、実行すべき特定の主要目的、すなわちプログラムを有する。その結果、より多くのデバイスが追加されており、より多くのプログラムによって、より多くのコンピューティング能力が使用されている。しかしながら、ほとんどのIoTデバイスは、通常は特定の期間のみ動作させる単一の主要プログラムを有する。それらのデバイスのほとんどは、自身のコンピューティング能力の100%を動作させているわけではなく、または常に動作しているわけではなく(たとえば、残りの時間はアイドル状態のままである)、あるいはその両方である。
【発明の概要】
【0003】
本開示の実施形態は、デバイスOSクラスタリングを使用して複数のIoTデバイス間で効率的な計算を共有するための方法、コンピュータ・プログラム製品、およびシステムを含む。プロセッサは、IoTデバイスのうちの第1のデバイスのアクションを識別し得る。プロセッサは、第1のデバイスからIoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始し得る。プロセッサは、第1のデバイスおよび1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止し得る。プロセッサは、第1のデバイスから1つまたは複数の他のデバイスにユニットを転送し得る。
【0004】
一態様によれば、デバイス・オペレーティング・システム(OS)クラスタリングを使用して複数のモノのインターネット(IoT)デバイス間で効率的な計算を共有するためのシステムであって、メモリと、メモリと通信するプロセッサと、を備え、プロセッサは動作を実行するように構成され、動作は、IoTデバイスのうちの第1のデバイスのアクションを識別することと、第1のデバイスからIoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始することと、第1のデバイスおよび1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止することと、第1のデバイスから1つまたは複数の他のデバイスにユニットを転送することと、を含む、システムが提供される。
【0005】
他の態様によれば、デバイス・オペレーティング・システム(OS)クラスタリングを使用して複数のモノのインターネット(IoT)デバイス間で効率的な計算を共有する方法であって、プロセッサによって、IoTデバイスのうちの第1のデバイスのアクションを識別することと、第1のデバイスからIoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始することと、第1のデバイスおよび1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止することと、第1のデバイスから1つまたは複数の他のデバイスにユニットを転送することと、を含む、方法が提供される。
【0006】
他の態様によれば、デバイス・オペレーティング・システム(OS)クラスタリングを使用して複数のモノのインターネット(IoT)デバイス間で効率的な計算を共有するためのコンピュータ・プログラム製品であって、プログラム命令を具現化したコンピュータ可読記憶媒体を備え、プログラム命令はプロセッサによって実行可能であり、プロセッサに動作を実行させ、動作は、IoTデバイスのうちの第1のデバイスのアクションを識別することと、第1のデバイスからIoTデバイスのうちの1つまたは複数の他のデバイスへの転送を開始することと、第1のデバイスおよび1つまたは複数の他のデバイスによって実行されている各スレッドを一時停止することと、第1のデバイスから1つまたは複数の他のデバイスにユニットを転送することと、を含む、コンピュータ・プログラム製品が提供される。
【0007】
上記の概要は、図示した各実施形態または本開示の全ての実装を説明することを意図したものではない。
【0008】
次いで、本発明の好ましい実施形態を、単なる例として、以下の図面を参照して説明する。
【図面の簡単な説明】
【0009】
【
図1A】本発明の好ましい実施形態による、第1の状態における、デバイスOSクラスタリングを使用して複数のIoTデバイス間で効率的な計算を共有するための例示的なシステムのブロック図である。
【
図1B】本発明の好ましい実施形態による、第2の状態における、デバイスOSクラスタリングを使用して複数のIoTデバイス間で効率的な計算を共有するための例示的なシステムのブロック図である。
【
図2】本発明の好ましい実施形態による、デバイスOSクラスタリングを使用して複数のIoTデバイス間で効率的な計算を共有するための例示的な方法のフローチャートである。
【
図3A】本発明の好ましい実施形態によるクラウド・コンピューティング環境を示す図である。
【
図3B】本発明の好ましい実施形態による抽象化モデル・レイヤを示す図である。
【
図4】本発明の好ましい実施形態による、本明細書に記載の方法、ツール、およびモジュール、ならびに任意の関連する機能のうちの1つまたは複数を実装する際に使用される例示的なコンピュータ・システムの高レベルのブロック図である。
【発明を実施するための形態】
【0010】
本明細書に記載の実施形態は様々な修正および代替的な形態が可能であるが、その詳細を例として図面に示しており、詳細に説明する。しかしながら、記載した特定の実施形態は、限定的な意味で解釈されるべきではないことを理解されたい。それどころか、その意図は、本開示の思想および範囲内に入る全ての修正、均等物、および代替をカバーすることである。
【0011】
本開示の態様は、一般的にはIoTの分野に関し、より詳細には、デバイスOSクラスタリングを使用した複数のIoTデバイス間での効率的な計算の共有に関する。本開示は必ずしもそのような用途に限定されないが、この文脈を使用した様々な例の議論を通じて本開示の様々な態様が理解され得る。
【0012】
現在、世界中には全人類の合計よりも多くの接続されたIoTデバイスが存在し、IoTデバイスの数はさらに増加している。各IoTデバイスは、特定の異種のコンピューティング能力を有し、実行すべき特定の主要目的、すなわちプログラムを有する(たとえば、モバイル、テレビ、冷蔵庫、スマート・ウォッチなど)。その結果、より多くのデバイスが追加されており、より多くのプログラムによって、より多くのコンピューティング能力が使用されている。しかしながら、ほとんどのIoTデバイスは、通常は特定の期間のみ動作させる単一の主要プログラムを有する。それらのデバイスのほとんどは、自身のコンピューティング能力の100%を動作させているわけではなく、または、さらに重要なことに、常に動作しているわけではなく(たとえば、残りの時間はアイドル状態のままである)、あるいはその両方である。
【0013】
したがって、高いレベルで、計算に関して特定のハードウェア計算の依存が取り除かれると、システムに大きな利益がもたらされる。本開示を通じて論じるのは、この大きな利点をシステムにもたらす解決策についてである。複数のIoT(たとえば、コンピューティング)デバイスのオペレーティング・システムのクラスタを作成することにより、システム/ネットワークがアイドル状態のデバイスのコンピューティング能力を利用して集合的なコンピューティング能力を共有するようにする方法を提供する解決策を提案する。この解決策は、複数のIoTデバイス上のプロセスを管理し、クラスタ内のIoTデバイスの全体的なリソース利用に基づいて、動作中のプロセスをクラスタの他のメンバー・デバイスに移動/配置/転送/再バランスする。
【0014】
いくつかの実施形態では、提案する解決策は、1つまたは複数のコンピューティング・デバイスのオペレーティング・システムのクラスタリングを提供する。コンピューティング・デバイスは、クラスタ・メンバーのように動作し、クラスタ・マネージャ・プログラムによって、デバイス間で計算を効率的に分散および転送するように制御される。そのような実施形態では、各(IoT)デバイスは提案されたOSプログラムを動作させ、このOSプログラムは、デバイス上の任意のプログラムの制御、移動、停止、または開始、あるいはそれらの組み合わせを行い、同じまたは他のデバイス上のマネージャ・プログラム(たとえば、クラスタ・マネージャ)と連携して、計算負荷を共有/管理するようにする。
【0015】
いくつかの実施形態では、全ての参加デバイスのオペレーティング・システムは、以下のような方法でクラスタ・マネージャによって調整されるクラスタのメンバーのように動作する。
【0016】
クラスタ・マネージャ・プログラムは、1つまたは複数のさらなるデバイス(たとえば、クラスタ・マネージャを動作させるIoTデバイスのクォーラム)上での高可用性(HA:high availability)のオプションを有する任意のメンバーIoTデバイス上で動作する。
【0017】
クラスタ・マネージャ・プログラムは、計算に関してクラスタに関するデバイスの制御/追加/削除/更新を行う。いくつかの実施形態では、ユーザは、ホーム環境でのクラスタへの新しいメンバーの追加を手動で承認し得る。あるいは、公共の環境では、デバイスは、自動的に参加および離脱することができる組織化されたサービスに加入することができる(場合によっては時間の経過と共にその処理使用量に対して支払いを受ける(たとえば、日中に一時的なスーパー・コンピュータのために一緒にクラスタ化する屋内駐車場の自動車))。
【0018】
クラスタ・マネージャ・プログラムは、いかなるデバイス上の/デバイスの主要プログラムの実行も妨げることなく、メモリおよび計算フットプリントの増加または減少あるいはその両方を制御する。
【0019】
クラスタ・マネージャ・プログラムは、クラスタ内のデバイス間に信頼関係を確立して、ネットワークを使用してデバイス間でプロセスを安全に直接転送できるようにする。
【0020】
クラスタ・マネージャ・プログラムは、負荷、ポリシー、優先順位、効率、プロセッサ・アーキテクチャなどに基づいて、メンバー・デバイス間での動作中のプロセスの転送を管理する。
【0021】
クラスタ・マネージャ・プログラムは、複数のデバイス上で任意の重要なプログラムを動作させるためにHA機能をサポートすることができ、これには、プロセスが動作している間にメモリおよびストレージを同期的に複製して、デバイスのプラグが抜かれても他のデバイスで並行して動作を継続できるようにすることが含まれる。
【0022】
いくつかの実施形態では、IoTデバイス上の提案されたOSにおいて、提案されたOSは、デバイス機能の主要アルゴリズム、クラスタ・マネージャによって割り当てられる副次的プログラムを含み、提案されたOSは、任意の時点で実行されている各スレッド内の正確な命令(コード)行を各変数およびその値と共に追跡する。このようにして、任意のコード行に直接ジャンプし、変数データおよびライブラリなどのその前提条件を用いて実行を開始することができる。
【0023】
いくつかの実施形態では、コンポーネント(プログラム:転送ユニット)は、コード行の情報および変数データを利用して、ある計算ユニットから他の計算ユニットに1つまたは複数の計算を転送する。受信デバイスのシステム/計算ユニットは、その情報を使用し得、前の計算ユニットから残った後続の行から処理を継続し得る。
【0024】
したがって、コンポーネントは、アルゴリズムにおける/アルゴリズムによるコード内の現在の処理行を変数と共に識別し、コンポーネントは、その行および変数を、プロセスの実行を引き継いで開始する他の次のデバイスに転送する。この解決策により、途中である任意のアルゴリズムの計算をあるIoTデバイスから他のIoTデバイスに自動的に転送することが可能になる。計算が他の新しいシステムに移動するたびに、計算は前のシステムで停止した場所を正確に捉えるので、繰り返しはない。
【0025】
多くのIoTコンピューティング・デバイスは様々な目的に使用されるデータを収集しているが、このデータはリアルタイムに処理され、様々な目的に使用される必要があることに留意されたい。具体的には、次世代デバイスでは、アイドル状態のラップトップ、スマートフォン、テレビ、冷蔵庫、洗濯機、またはデータをキャプチャし、計算能力を有する多くのタイプのセンサ・デバイスなど、多数のデバイスのクラスタが存在し得る。どのデバイスがデータをキャプチャしたかに関係なく、近くにある他のデバイスによりデータを処理して即座に出力を生成することができ、あらゆるデバイスの主要目的を全く妨げることがなく、待ち時間を伴う外部の遠く離れた計算システムへの依存が軽減される。
【0026】
理解を容易にするために、図に移る前に、提案する解決策をどのようにして実現し、利用することができるかに関する様々な使用事例について以下で論じる。たとえば、ユーザは、クラウドがなくても、低速なインターネットがなくても、すなわち、インターネットなしでも、タブレットでゲームをプレイしたり(たとえば、ゲームが重い計算を必要とする場合)、ラップトップでリアルタイム・データに基づいて予測アルゴリズムを動作させたり、即時の結果が待ち時間なしで期待されるエッジ・コンピューティング・アプリケーションを実装したりしたい場合があり、本明細書で提供する提案する解決策によって、周囲のクラスタ・デバイスのアイドル状態の計算能力を使用することができる。
【0027】
さらに、提案する解決策は、ヘルス・ケア・システム、自動車、製造、さらには家庭用の電化製品にも適用可能であり得る。他の例として、次世代の家庭用冷蔵庫のセンサは、処理する必要があるデータを収集する(たとえば、分析アルゴリズムを動作させて、将来の予測を生成し、次の購買品目リストを報告する)。この事例では、履歴データを処理する必要がある。冷蔵庫は、アイドル状態のラップトップまたはゲーム・コンソール(たとえば、高い計算能力を有するもの)、さらにはモバイル・デバイス、または家庭にある任意のデバイスの、家庭(たとえば、ホーム・ネットワーク、WiFiなど)内の計算能力を使用する。
【0028】
他の例では、ほとんどの次世代の自動車は、OSを含む計算ユニットを有する。このため、駐車場(屋内駐車場、屋外駐車場内など)を、数百台の自動車が連携して動作する巨大な計算能力のハブとして利用することができる。勤務日中に屋内駐車場内の自動車を用いて一時的なスーパー・コンピュータを作成することができ、個々の自動車はその日の処理使用料に対して支払いを受けることができる。
【0029】
さらに他の例では、計算能力が極めて少なく、高度な使用のために常に外部計算に依存する次世代デバイスが存在し得、たとえば、工場内のモジュール式センサ機器、電子レンジなどのキッチン家電、タイマーベースのストーブ、ワイヤレス検針器などである。
【0030】
いくつかの実施形態では、家庭内の例が実装されるか、外部の例が実装されるかに関係なく、ユーザは自分のデバイスが他のデバイスと通信することを許可することをオプトインし得る。また、実装は、暗号化を使用することができるプライベート(たとえば、ブロックチェーン、クラウドなど)ネットワーク上で保護され得る。
【0031】
ここで
図1Aおよび
図1Bを参照すると、これらの図は、本発明の実施形態による、第1の状態100Aおよび第2の状態100Bにおける、デバイスOSクラスタリングを使用して複数のIoTデバイス(デバイス102A~D)間で効率的な計算を共有するための例示的なシステムのブロック図を示している。図示のように、システム100Aはデバイス102A~Dを含み、これらはメンバーIoTデバイスであり、ネットワーク120に接続され、これを介してデバイス102A~Dは通信し、または計算を共有し、あるいはその両方を行うことができる。
【0032】
さらに、デバイス102A~Dはそれぞれ、少なくとも副次的プログラム104A~B、クラスタ・マネージャ106、主要プログラム108A~D、またはオペレーティング・システム110A~D、あるいはそれらの組み合わせを含む。デバイス102A~Dにはそれぞれ、デバイス102A~Dが計算を共有することを可能にするオペレーティング・システム110A~Dがロードされ得る。
【0033】
いくつかの実施形態では、ネットワーク100Aはデバイス102A~Dのグループを利用し、これらはクラスタ・マネージャ106によって集合的に管理されて、クラスタ・マネージャ106が、任意の時点で実行されている(たとえば、副次的プログラム104A~Bまたは主要プログラム108A~Dあるいはその両方の)各プロセスの正確な命令(たとえば、コード行)を、そのプロセスに関連するメモリの内容と共に追跡するようになるので、任意のデバイス102A~Dが、任意のコード行に直接ジャンプし、関連するメモリ(たとえば、変数データ)、依存するライブラリを含むその前提条件を用いて実行を開始することができるようになる。このようにして、実行中のプロセス(たとえば、副次的プログラム104B、副次的プログラム104Bのものなど)は、オフラインになる場合、または実行すべき主要IoT(たとえば、主要プログラム108B)作業を有し、自身のリソースを共有できなくなった場合、あるいは前述のようにHAセットアップでオフラインになっている場合に、あるデバイス(たとえば、デバイス102B)から他のデバイス(たとえば、デバイス102D)に移動させることができる。このようにして、システムは第1の状態100Aから第2の状態100Bに遷移し、副次的プログラム104Bがデバイス102Bおよび102Dの間で効率的に共有/転送される。
【0034】
したがって、複数のデバイス102A~D上で任意の重要なプログラム(たとえば、主要プログラム108A~Dまたは副次的プログラム104A~Dあるいはその両方)を動作させるためにHAを実行できること、具体的には、たとえば、プロセスが動作している間にメモリおよびストレージ(たとえば、命令処理の正確な位置を含む)を同期的に複製して、デバイスのプラグが抜かれても他のデバイス102A~D上で並行して動作を継続できるようにすることは、本開示のシステムの新規な態様である。
【0035】
さらに、クラスタ・マネージャ106の命令に基づいて、負荷、ポリシー、優先順位、効率、プロセッサ・アーキテクチャなどに基づいて、メンバー・デバイス102Bと102Dとの間で、実行中の動作しているプロセス(たとえば、副次的プログラム104B、副次的プログラム104Bのもの)と、関連するメモリの内容との転送を管理できることは、本開示のシステムのさらなる新規な態様である。
【0036】
開示したシステムの他の特有の利点は、クラスタ内のデバイス102A~Dの間で信頼関係を確立することにより、ネットワーク120を使用してデバイス(たとえば、102Bおよび102D)間でメモリ内の特定の処理位置にあるプロセスおよびメモリの内容を安全に直接転送できるようになることである。
【0037】
最後に、開示したシステムに特有なのは、デバイス102A~D間でライブ・ワークロードを実行および移行することができる信頼関係を作成する目的で、他のIoTデバイスが処理クラスタに参加するための承認をユーザが手動で要求できることである。あるいは、いくつかの実施形態では、公共の環境にいるユーザが他のデバイスを組織化されたサービスに加入させることができることであり、その組織化されたサービスでは、自動的に参加および離脱することができ、場合によっては時間の経過と共にその処理使用量に対して支払いを受ける(たとえば、日中に一時的なスーパー・コンピュータのために一緒にクラスタ化する屋内駐車場の自動車)。
【0038】
ここで
図2を参照すると、本発明の好ましい実施形態による、デバイスOSクラスタリングを使用して複数のIoTデバイス間で効率的な計算を共有するための例示的な方法100のフローチャートが示されている。いくつかの実施形態では、方法200は、(たとえば、
図1A~Bのシステム、ネットワーク120、コンピューティング・デバイスなどの)プロセッサによって実行され得る。
【0039】
いくつかの実施形態では、方法200は動作202で始まり、クラスタ内の(IoT)デバイスが識別される。いくつかの実施形態では、それらのデバイスのうちの第1のデバイスのアクション(たとえば、主要プロセスがより多くの計算能力を必要とすること、デバイスがシャットダウン中であるかまたは副次的プログラムを停止/転送する必要があることなど)が識別され、方法200は動作204に進み得、第1のデバイスからIoTデバイスのうちの1つまたは複数の他のデバイスへの転送が開始される。
【0040】
いくつかの実施形態では、方法200は、クラスタ・マネージャ(プログラム)が232においてデバイスを管理し、転送204の開始を推奨した後、動作204に進み得る。いくつかの実施形態では、動作204の後、方法200は動作206に進み、OS内のプロセスの各スレッドが識別され、スレッドのメタデータが収集される。実行スレッドは、典型的にはOSの一部であるスケジューラによって独立して管理することができるプログラムされた命令の最小シーケンスであることに留意されたい。
【0041】
いくつかの実施形態では、方法200は動作208に進み、第1のデバイスおよび1つまたは複数の他のデバイスによって実行されている各スレッドが一時停止される。いくつかの実施形態では、各スレッドを一時停止することは、各スレッドにそれぞれ関連付けられた現在のポインタ、関連する変数、およびメタデータを収集することを含む。
【0042】
いくつかの実施形態では、方法200は、メモリ変数データが識別される動作210と、実行されたコードの詳細に関連付けられた最後のポインタが識別される動作212とに(同時に)進み得る。いくつかの実施形態では、方法200は動作214に進み、第1のデバイスから1つまたは複数の他のデバイスに(計算)ユニット(OS)が転送される。
【0043】
いくつかの実施形態では、方法200は動作216に進み、1つまたは複数の他のデバイスのうちの1つに関連するデータが送出のために収集される。いくつかの実施形態では、方法200は動作218に進み、第2のデバイスから(計算)ユニット(OS)が転送される。いくつかの実施形態では、方法200は動作220に進み、送出216からのデータが第2のデバイスによって収集される。
【0044】
いくつかの実施形態では、方法200は動作222に進み、1つまたは複数の他のデバイスのうちの1つのメモリにデータがロードされる(たとえば、第2のデバイスはスレッド/プロセス/計算の転送前の位置を探す)。いくつかの実施形態では、方法200は動作224に進み、1つまたは複数の他のデバイスのうちの1つ(たとえば、第2のデバイス)における新しいメモリ空間で各スレッドがトリガされる。
【0045】
いくつかの実施形態では、方法200は動作226に進み、1つまたは複数の変数が生成され、1つまたは複数の変数がランタイムのスコープ内にロードされる。変数はコンピュータ・プログラム内で参照および操作される情報を記憶するために使用され、スコープとは、名前と、変数などのエンティティとの関連付けを指すことに留意されたい。これは、名前バインディングが有効であり、エンティティを参照するために名前を使用することができるプログラムの部分である。スコープという用語は、より正確にはコンテキストまたは環境と呼ばれる、プログラムの一部内またはプログラム内の所与のポイントで有効な全ての名前バインディングのセットを指すために使用することもできる。いくつかの実施形態では、方法200は動作230に進み、各スレッドが(そのスレッドが実行中に転送されたポイントで)再開される。いくつかの実施形態では、動作230の後、方法200は終了し得る。
【0046】
いくつかの実施形態では、方法200は(動作226に進むと同時に)動作228に進み、カーソルが生成されてスレッドに挿入され、カーソルはスレッド内の後続のステップを指す。いくつかの実施形態では、方法200は動作230に進み、各スレッドが(カーソルによって示される、そのスレッドが実行中に転送されたポイントで)再開される。いくつかの実施形態では、動作230の後、方法200は終了し得る。
【0047】
本開示はクラウド・コンピューティングに関する詳細な説明を含むが、本明細書に列挙した教示の実装はクラウド・コンピューティング環境に限定されないことを理解されたい。むしろ、本開示の実施形態は、現在知られているまたは今後開発される他の任意のタイプのコンピューティング環境と共に実装することが可能である。
【0048】
クラウド・コンピューティングは、最小限の管理労力またはサービスのプロバイダとのやりとりによって迅速にプロビジョニングおよび解放することができる、設定可能なコンピューティング・リソース(たとえば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特徴と、少なくとも3つのサービス・モデルと、少なくとも4つのデプロイメント・モデルとを含み得る。
【0049】
特徴は以下の通りである。
【0050】
オンデマンド・セルフ・サービス:クラウド・コンシューマは、サービスのプロバイダとの人的な対話を必要とせずに、必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング能力を一方的にプロビジョニングすることができる。
【0051】
ブロード・ネットワーク・アクセス:能力はネットワークを介して利用することができ、異種のシンまたはシック・クライアント・プラットフォーム(たとえば、携帯電話、ラップトップ、およびPDA)による使用を促進する標準的なメカニズムを介してアクセスされる。
【0052】
リソース・プーリング:プロバイダのコンピューティング・リソースをプールして、様々な物理リソースおよび仮想リソースが需要に応じて動的に割り当ておよび再割り当てされるマルチ・テナント・モデルを使用して複数のコンシューマにサービス提供する。一般にコンシューマは、提供されるリソースの正確な部分に対して何もできず、知っているわけでもないが、より高い抽象化レベル(たとえば、国、州、またはデータセンターなど)では部分を特定可能であり得るという点で部分非依存の感覚がある。
【0053】
迅速な弾力性:能力を迅速かつ弾力的に、場合によっては自動的にプロビジョニングして素早くスケール・アウトし、迅速に解放して素早くスケール・インすることができる。コンシューマにとって、プロビジョニング可能な能力は無制限であるように見えることが多く、任意の時間に任意の数量で購入することができる。
【0054】
測定されるサービス:クラウド・システムは、サービスのタイプ(たとえば、ストレージ、処理、帯域幅、およびアクティブ・ユーザ・アカウント)に適したある抽象化レベルでの計量機能を活用して、リソースの使用を自動的に制御し、最適化する。リソース使用量を監視、管理、および報告して、利用されるサービスのプロバイダおよびコンシューマの両方に透明性を提供することができる。
【0055】
サービス・モデルは以下の通りである。
【0056】
ソフトウェア・アズ・ア・サービス(SaaS:Software as a Service):コンシューマに提供される能力は、クラウド・インフラストラクチャ上で動作するプロバイダのアプリケーションを使用することである。アプリケーションは、Webブラウザ(たとえば、Webベースの電子メール)などのシン・クライアント・インターフェースを介して様々なクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定を可能性のある例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、さらには個々のアプリケーション機能を含む、基盤となるクラウド・インフラストラクチャを管理も制御もしない。
【0057】
プラットフォーム・アズ・ア・サービス(PaaS:Platform as a Service):コンシューマに提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、コンシューマが作成または取得したアプリケーションをクラウド・インフラストラクチャ上にデプロイすることである。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む、基盤となるクラウド・インフラストラクチャを管理も制御もしないが、デプロイされたアプリケーションおよび場合によってはアプリケーション・ホスティング環境構成を制御する。
【0058】
インフラストラクチャ・アズ・ア・サービス(IaaS:Infrastructure as a Service):コンシューマに提供される能力は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをコンシューマがデプロイして動作させることが可能な、処理、ストレージ、ネットワーク、および他の基本的なコンピューティング・リソースをプロビジョニングすることである。コンシューマは、基盤となるクラウド・インフラストラクチャを管理も制御もしないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御し、場合によっては選択したネットワーキング・コンポーネント(たとえば、ホスト・ファイアウォール)を限定的に制御する。
【0059】
デプロイメント・モデルは以下の通りである。
【0060】
プライベート・クラウド:クラウド・インフラストラクチャは組織専用に運用される。これは組織または第三者によって管理され、構内または構外に存在し得る。
【0061】
コミュニティ・クラウド:クラウド・インフラストラクチャはいくつかの組織によって共有され、共通の懸念(たとえば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項など)を有する特定のコミュニティをサポートする。これは組織または第三者によって管理され、構内または構外に存在し得る。
【0062】
パブリック・クラウド:クラウド・インフラストラクチャは、一般大衆または大規模な業界団体に対して利用可能にされ、クラウド・サービスを販売する組織によって所有される。
【0063】
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティのままであるが、データおよびアプリケーションの移植性を可能にする標準化技術または独自技術(たとえば、クラウド間の負荷分散のためのクラウド・バースティング)によって結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)を合成したものである。
【0064】
クラウド・コンピューティング環境は、ステートレス性、低結合性、モジュール性、および意味論的相互運用性に重点を置いたサービス指向型である。クラウド・コンピューティングの中核にあるのは、相互接続されたノードのネットワークを含むインフラストラクチャである。
【0065】
図3Aには、例示的なクラウド・コンピューティング環境310が示されている。図示のように、クラウド・コンピューティング環境310は1つまたは複数のクラウド・コンピューティング・ノード300を含み、これらを使用して、たとえば、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)もしくは携帯電話300A、デスクトップ・コンピュータ300B、ラップトップ・コンピュータ300C、または自動車コンピュータ・システム300N、あるいはそれらの組み合わせなどの、クラウド・コンシューマによって使用されるローカル・コンピューティング・デバイスが通信し得る。ノード300は相互に通信し得る。これらは、たとえば、上述のプライベート、コミュニティ、パブリック、もしくはハイブリッド・クラウド、またはそれらの組み合わせなどの1つまたは複数のネットワークにおいて、物理的または仮想的にグループ化され得る(図示せず)。
【0066】
これにより、クラウド・コンピューティング環境310は、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを維持する必要がない、インフラストラクチャ・アズ・ア・サービス、プラットフォーム・アズ・ア・サービス、またはソフトウェア・アズ・ア・サービス、あるいはそれらの組み合わせを提供することが可能になる。
図3Aに示したコンピューティング・デバイス300A~Nのタイプは例示的なものにすぎないことを意図しており、コンピューティング・ノード300およびクラウド・コンピューティング環境310は、任意のタイプのネットワークまたはネットワーク・アドレス指定可能接続(たとえば、Webブラウザを使用)あるいはその両方を介して任意のタイプのコンピュータ化デバイスと通信できることを理解されたい。
【0067】
図3Bには、クラウド・コンピューティング環境310(
図3A)によって提供される機能的抽象化レイヤのセットが示されている。
図3Bに示したコンポーネント、レイヤ、および機能は例示的なものにすぎないことを意図しており、本開示の実施形態はこれらに限定されないことを事前に理解されたい。下記に示すように、以下のレイヤおよび対応する機能が提供される。
【0068】
ハードウェアおよびソフトウェア・レイヤ315は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例には、メインフレーム302、RISC(縮小命令セット・コンピュータ:Reduced Instruction Set Computer)アーキテクチャ・ベースのサーバ304、サーバ306、ブレード・サーバ308、ストレージ・デバイス311、ならびにネットワークおよびネットワーキング・コンポーネント312が含まれる。いくつかの実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア314およびデータベース・ソフトウェア316を含む。
【0069】
仮想化レイヤ320は抽象化レイヤを提供し、抽象化レイヤから、仮想エンティティの以下の例、すなわち、仮想サーバ322、仮想ストレージ324、仮想プライベート・ネットワークを含む仮想ネットワーク326、仮想アプリケーションおよびオペレーティング・システム328、ならびに仮想クライアント330が提供され得る。
【0070】
一例では、管理レイヤ340は、下記の機能を提供し得る。リソース・プロビジョニング342は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソースおよび他のリソースの動的調達を提供する。計量および価格決定344は、クラウド・コンピューティング環境内でリソースが利用されたときの費用追跡と、これらのリソースの消費に対する会計または請求とを提供する。一例では、これらのリソースはアプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、クラウド・コンシューマおよびタスクの同一性検証だけでなく、データおよび他のリソースに対する保護も提供する。ユーザ・ポータル346は、コンシューマおよびシステム管理者にクラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理348は、要求されたサービス・レベルが満たされるような、クラウド・コンピューティング・リソースの割り当ておよび管理を提供する。サービス・レベル合意(SLA:Service Level Agreement)の計画および履行350は、SLAに従って将来要求されると予想されるクラウド・コンピューティング・リソースの事前手配および調達を提供する。
【0071】
ワークロード・レイヤ360は、クラウド・コンピューティング環境が利用される機能性の例を提供する。このレイヤから提供されるワークロードおよび機能の例は、マッピングおよびナビゲーション362、ソフトウェア開発およびライフサイクル管理364、仮想教室教育配信366、データ分析処理368、取引処理370、ならびにデバイスOSクラスタリングを使用した複数のIoTデバイス間での効率的な計算の共有372、を含む。
【0072】
図4は、本開示の実施形態による、(たとえば、コンピュータの1つまたは複数のプロセッサ回路またはコンピュータ・プロセッサを使用して)本明細書に記載の方法、ツール、およびモジュール、ならびに任意の関連する機能のうちの1つまたは複数を実装する際に使用される例示的なコンピュータ・システム401の高レベルのブロック図を示している。いくつかの実施形態では、コンピュータ・システム401の主要コンポーネントは、1つまたは複数のCPU402、メモリ・サブシステム404、端末インターフェース412、ストレージ・インターフェース416、I/O(入力/出力:Input/Output)デバイス・インターフェース414、およびネットワーク・インターフェース418を含み得、これらは全て、メモリ・バス403、I/Oバス408、およびI/Oバス・インターフェース・ユニット410を介したコンポーネント間通信のために、直接的または間接的に通信可能に結合され得る。
【0073】
コンピュータ・システム401は、本明細書では総称的にCPU402と呼ぶ、1つまたは複数の汎用プログラム可能中央処理装置(CPU:central processing unit)402A、402B、402C、および402Dを含み得る。いくつかの実施形態では、コンピュータ・システム401は、比較的大規模なシステムでよくある複数のプロセッサを含み得るが、他の実施形態では、コンピュータ・システム401は代わりに単一のCPUシステムであり得る。各CPU402は、メモリ・サブシステム404に記憶された命令を実行し得、1つまたは複数のレベルのオンボード・キャッシュを含み得る。
【0074】
システム・メモリ404は、ランダム・アクセス・メモリ(RAM:random access memory)422またはキャッシュ・メモリ424などの揮発性メモリの形態のコンピュータ・システム可読媒体を含み得る。コンピュータ・システム401は、他のリムーバブル/非リムーバブル揮発性/不揮発性コンピュータ・システム記憶媒体をさらに含み得る。ほんの一例として、「ハード・ドライブ」などの非リムーバブル不揮発性磁気媒体に読み書きするためのストレージ・システム426を設けることができる。図示していないが、リムーバブル不揮発性磁気ディスク(たとえば、「フレキシブル・ディスク」)に読み書きするための磁気ディスク・ドライブ、またはCD-ROM、DVD-ROM、もしくは他の光学媒体などのリムーバブル不揮発性磁気ディスクに読み書きするための光学ディスク・ドライブを設けることができる。さらに、メモリ404は、フラッシュ・メモリ、たとえば、フラッシュ・メモリ・スティック・ドライブまたはフラッシュ・ドライブを含むことができる。メモリ・デバイスは、1つまたは複数のデータ・メディア・インターフェースによってメモリ・バス403に接続することができる。メモリ404は、様々な実施形態の機能を実行するように構成されるプログラム・モジュールのセット(たとえば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含み得る。
【0075】
それぞれが少なくとも1セットのプログラム・モジュール430を有する1つまたは複数のプログラム/ユーティリティ428がメモリ404に記憶され得る。プログラム/ユーティリティ428は、ハイパーバイザ(仮想マシン・モニタとも呼ばれる)、1つまたは複数のオペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データを含み得る。オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはそれらの組み合わせのそれぞれは、ネットワーキング環境の実装を含み得る。プログラム428またはプログラム・モジュール430あるいはその両方は、一般に、様々な実施形態の機能または方法論を実行する。
【0076】
メモリ・バス403は、CPU402、メモリ・サブシステム404、およびI/Oバス・インターフェース410の間の直接的な通信経路を提供する単一のバス構造として
図4に示しているが、メモリ・バス403は、いくつかの実施形態では、複数の異なるバスまたは通信経路を含み得、これらは、階層、スターまたはウェブ構成のポイントツーポイント・リンク、複数の階層バス、並列および冗長経路、または他の任意の適切なタイプの構成など、様々な形態のうちのいずれかで配置され得る。さらに、I/Oバス・インターフェース410およびI/Oバス408はそれぞれ単一のユニットとして示しているが、コンピュータ・システム401は、いくつかの実施形態では、複数のI/Oバス・インターフェース・ユニット410、複数のI/Oバス408、またはその両方を含み得る。さらに、様々なI/Oデバイスにつながる様々な通信経路からI/Oバス408を分離する複数のI/Oインターフェース・ユニットを示しているが、他の実施形態では、I/Oデバイスの一部または全てが、1つまたは複数のシステムI/Oバスに直接接続され得る。
【0077】
いくつかの実施形態では、コンピュータ・システム401は、マルチユーザ・メインフレーム・コンピュータ・システム、シングルユーザ・システム、または直接的なユーザ・インターフェースをほとんどもしくは全く有さないが他のコンピュータ・システム(クライアント)からの要求を受信するサーバ・コンピュータまたは同様のデバイスであり得る。さらに、いくつかの実施形態では、コンピュータ・システム401は、デスクトップ・コンピュータ、ポータブル・コンピュータ、ラップトップもしくはノートブック・コンピュータ、タブレット・コンピュータ、ポケット・コンピュータ、電話、スマートフォン、ネットワーク・スイッチもしくはルータ、または他の任意の適切なタイプの電子デバイスとして実装され得る。
【0078】
図4は、例示的なコンピュータ・システム401の代表的な主要コンポーネントを描写することを意図していることに留意されたい。しかしながら、いくつかの実施形態では、個々のコンポーネントは、
図4に示したよりも高いまたは低い複雑度を有し得、
図4に示した以外のまたは追加のコンポーネントが存在し得、そのようなコンポーネントの数、タイプ、および構成は変化し得る。
【0079】
本明細書でより詳細に論じるように、本明細書に記載の方法のいくつかの実施形態の動作の一部または全ては、別の順序で実行される場合があり、または全く実行されない場合があると考えられ、さらに、複数の動作が同時に行われることも、より大きいプロセスの内部部分として行われる場合もある。
【0080】
本開示は、任意の可能な技術的詳細レベルの統合におけるシステム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであり得る。コンピュータ・プログラム製品は、本開示の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
【0081】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のために命令を保持および記憶可能な有形のデバイスとすることができる。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラム可能読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル・バーサタイル・ディスク(DVD:digital versatile disk)、メモリー・スティック(R)、フレキシブル・ディスク、命令が記録されたパンチ・カードまたは溝の隆起構造などの機械的にコード化されたデバイス、およびこれらの任意の適切な組み合わせが含まれる。コンピュータ可読記憶媒体は、本明細書で使用する場合、たとえば、電波または他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体を伝搬する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、または有線で伝送される電気信号などの一過性の信号自体であると解釈されるべきではない。
【0082】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいは、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの組み合わせなどのネットワークを介して外部コンピュータまたは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶する。
【0083】
本開示の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または類似のプログラミング言語などの手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードまたはオブジェクト・コードであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上かつ部分的にリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行され得る。最後のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)またはワイド・エリア・ネットワーク(WAN:wide area network)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され、または(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータへの接続がなされる。いくつかの実施形態では、たとえば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA:field-programmable gate array)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic array)を含む電子回路は、本開示の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用してコンピュータ可読プログラム命令を実行することによって、電子回路を個人向けにし得る。
【0084】
本開示の態様は、本開示の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して本明細書で説明している。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装できることは理解されよう。
【0085】
これらのコンピュータ可読プログラム命令を、コンピュータまたは他のプログラム可能データ処理装置のプロセッサに提供して、それらの命令がコンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行された場合に、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為を実装するための手段が生成されるようなマシンを生成し得る。また、これらのコンピュータ可読プログラム命令を、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定の方法で機能するように指示することが可能なコンピュータ可読記憶媒体に記憶して、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為の態様を実装する命令を含む製造品を構成するようにし得る。
【0086】
また、コンピュータ可読プログラム命令をコンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実行させることによって、それらの命令がコンピュータ、他のプログラム可能装置、または他のデバイス上で実行された場合に、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為が実装されるようなコンピュータ実装処理を生成し得る。
【0087】
図中のフローチャートおよびブロック図は、本開示の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理的機能を実装するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。いくつかの代替的実装では、ブロックに記載した機能は、図示した順序以外で行われ得る。たとえば、関与する機能に応じて、連続して示した2つのブロックは、実際には、1つのステップとして実現され、同時に、実質的に同時に、部分的にまたは完全に時間的に重なるように実行され、またはそれらのブロックは、場合により逆の順序で実行され得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、指定された機能もしくは行為を実行するか、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用のハードウェア・ベースのシステムによって実装できることにも気付くであろう。
【0088】
本開示の様々な実施形態の説明は、例示の目的で提示してきたが、網羅的であることも、開示した実施形態に限定されることも意図したものではない。記載した実施形態の範囲および思想から逸脱することなく、多くの修正および変形が当業者には明らかであろう。本明細書で使用する用語は、実施形態の原理、実際の適用、または市場に見られる技術に対する技術的改善を最もよく説明するために、または当業者が本明細書に開示した実施形態を理解できるようにするために選んだ。
【0089】
本開示は特定の実施形態に関して説明してきたが、その変更および修正が当業者には明らかであろうことが予想される。したがって、以下の特許請求の範囲は、本開示の真の思想および範囲内に入る全てのそのような変更および修正をカバーするものとして解釈されるものとする。
【国際調査報告】