(57)【要約】      （修正有）【課題】マルチコアマルチテナント環境の脆弱性を排除または低減する技術を提供する。【解決手段】ＣＰＵアーキテクチャ３００は、複数の処理コア１０４ａ〜１０４ｎと、複数のメモリ位置で構成され、前記複数のメモリ位置は複数の重複しないメモリ位置のセットに分割され、メモリ位置の前記セットの各々はシステムセキュリティソフトウェアによって割り当てられる、スタティックレジスタファイルスクラッチパッド３０２と、システムメモリ１１４と、システムメモリ１１４およびスタティックレジスタファイルスクラッチパッド３０２と動作上関連するメモリコントローラ１１２とを含む。処理コア１０４は処理コア１０４が発行する読み出し要求にディスパッチ命令アドレスを含むように構成され、前記ディスパッチ命令アドレスは、読み出し要求に関連する読み出し動作が一旦完了すると、関連するアプリケーションの動作を再開するために使用される。【選択図】図３
2018097857.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理コアと、
複数のメモリ位置で構成されたスタティックレジスタファイルスクラッチパッドであって、前記複数のメモリ位置は複数の重複しないメモリ位置のセットに分割され、メモリ位置の前記セットの各々はシステムセキュリティソフトウェアによって割り当てられる、スタティックレジスタファイルスクラッチパッドと、
システムメモリと、
前記システムメモリおよびスタティックレジスタファイルスクラッチパッドと動作上関連するメモリコントローラと
を含み、
前記処理コアは前記処理コアが発行する読み出し要求にディスパッチ命令アドレスを含むように構成され、前記ディスパッチ命令アドレスは、読み出し要求に関連する読み出し動作が一旦完了すると、関連するアプリケーションの動作を再開するために使用される、
コンピュータシステム。
【請求項２】
共有キャッシュをさらに含み、前記コンピュータシステムで動作するアプリケーションは任意選択的に前記共有キャッシュをバイパスするように構成される、請求項１に記載のコンピュータシステム。
【請求項３】
前記処理コアが発行した読み出し要求内のディスパッチ命令アドレスに沿って渡すように前記メモリコントローラを構成することをさらに含む、請求項１に記載のコンピュータシステム。
【請求項４】
前記処理コアが発行した読み出し要求に応答して生成された読み出し応答内のディスパッチ命令アドレスに沿って渡すように前記システムメモリを構成することをさらに含む、請求項１に記載のコンピュータシステム。
【請求項５】
読み出し応答内のディスパッチ命令アドレスを受け取り、前記ディスパッチ命令アドレスをローカルスレッドキューに追加し、その後ＨＡＬＴイベントまたはＳＴＡＬＬイベントの１つに応答して、関連する処理コアの（ＰＣの）プログラムカウンタに前記ディスパッチ命令アドレスをロードするように前記処理コアを構成することをさらに含む、請求項１に記載のコンピュータシステム。
【請求項６】
第１のハイパースレッドおよび第２のハイパースレッドをサポートする命令パイプラインと、
前記命令パイプラインと前記第１のハイパースレッドおよび前記第２のハイパースレッドが動作上関連する複数の処理コアの１つと
を含み、第１のアプリケーションスレッドが、前記第１のアプリケーションスレッドの命令の処理を停止したストール状態にある場合、前記第１のハイパースレッドは、前記複数の処理コアの前記１つの処理コア用の第１のアプリケーションスレッドの命令を処理するように構成され、前記第２のハイパースレッドは、前記複数の処理コアの前記１つの処理コア用の第２のアプリケーションスレッドの命令を処理するように構成され、第２のハイパースレッドは、前記複数の処理コアの前記１つの処理コア用の第２のアプリケーションスレッドの命令を処理するように構成され、
そしてスレッドスケジューリングのためのスレッドディスパッチ命令アドレスのキューを含み、前記キュー内の前記ディスパッチ命令アドレスはシステムメモリから返ってくる読み出し応答からである、
コンピュータシステム。
【請求項７】
前記システムメモリは、
複数の少なくとも第１の高速キャッシュメモリであって、個々の第１の高速キャッシュメモリは前記複数の処理コアのうちの特定の１つの処理コアのみに動作可能に対応する、複数の少なくとも第１の高速キャッシュメモリと、
複数のメモリ位置で構成されたスタティックレジスタファイルスクラッチパッドであって、前記複数のメモリ位置は複数のメモリ位置のセットに分割され、メモリ位置の前記セットの各々は前記複数の処理コアの特定の１つに割り当てられる、スタティックレジスタファイルスクラッチパッドと
を含む、請求項６に記載のコンピュータシステム。
【請求項８】
コンピュータシステムを動作する方法であって、
複数の処理コアを提供し、
複数のメモリ位置で構成されたスタティックレジスタファイルスクラッチパッドを提供し、前記複数のメモリ位置は複数の重複しないメモリ位置のセットに分割され、メモリ位置の前記セットの各々はシステムセキュリティソフトウェアによって割り当てられ、
システムメモリを提供し、
前記システムメモリおよび前記スタティックレジスタファイルスクラッチパッドと動作上関連するメモリコントローラを提供し、
前記処理コアが発行する読み出し要求にディスパッチ命令アドレスを含むように前記処理コアを構成すること
を含み、前記ディスパッチ命令アドレスは、読み出し要求に関連する読み出し動作が一旦完了すると、関連するアプリケーションの動作を再開するために使用される、コンピュータシステムを動作する方法。
【請求項９】
共有キャッシュを提供することをさらに含み、前記コンピュータシステムで動作するアプリケーションは任意選択的に前記共有キャッシュをバイパスできる、請求項８に記載のコンピュータシステムを動作する方法。
【請求項１０】
前記処理コアが発行した読み出し要求内のディスパッチ命令アドレスに沿って渡すように前記メモリコントローラを構成することをさらに含む、請求項８に記載のコンピュータシステムを動作する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、マルチコアマルチテナント型コンピュータシステム、ならびにシステムアーキテクチャ、設計および動作に関する。より詳細には、マルチコアマルチテナント環境で安全に計算し、システムが高い読み出しレイテンシを有するランダムアクセスメモリ（ＲＡＭ）チップのようなメモリを含む場合でも迅速に計算することを目的とする。本明細書では、マルチコアは、（例えば、ソフトウェアアプリケーションの）プログラム命令を読み出して実行する少なくとも２つの独立した物理的処理ユニット（つまり、コア）を有する単一のコンピューティング部品を指し、マルチテナントは、サーバへの特定の特権を有する共通のアクセスを共有する複数のテナント（例えば、ユーザ）にサービスする単一のコンピュータサーバを指すことを理解されたい。
【背景技術】
【０００２】
既存のチップセットは、読み出しレイテンシをマスクするためのキャッシュ機能を含むように設計されており、複数の処理コアを有する中央処理装置（ＣＰＵ）による迅速な計算が可能である。キャッシュのコストは、一般に設計者が２つ以上の処理コアで共有されるキャッシュを含む動機となる。ここではこれを最終キャッシュレベルＬ２と呼ぶ。しかし、特定の設計では、共有キャッシュは、１つまたは複数の中間キャッシュ（例えば、共有最終レベルのキャッシュＬ５を備えた中間キャッシュＬ２、Ｌ３、およびＬ４）を組み込んだ設計のような他のキャッシュレベルであってもよいがこれに限定されないことを理解されたい。
【０００３】
処理コア間でキャッシュを共有するアーキテクチャに存在する問題は、共有キャッシュがしばしば意図せずかつ実質的にシステムセキュリティソフトウェアに不可視であり、処理中または処理の完了後にかなりの時間情報の痕跡を検出可能に維持することである。このような情報が機密、私的、および／または特権を持つ場合、これは特に重要な問題である。この期間中、情報（例えば、被害者のプロセス計算）は、非特権スパイプロセスに潜在的にアクセス可能となる（例えば、ハッカーがこの情報を取得し、および／またはこの情報を使用して、言及したユーザのコンピューティング動作へのアクセスを獲得する場合がある）。
【０００４】
共有キャッシュアーキテクチャがコンピュータシステムを脆弱にする特定の例は、スパイプロセスがコンピュータシステム上でタイミング攻撃を使用しているときである。そのような状況の１つは、銀行のコンピュータシステムがお金を転送しているときである。このプロセスでは、このような転送がプライベートな安全な方法で行われることが意図される。しかしながら、適切なタイミング攻撃は、マルチコアマルチテナント環境におけるスパイプロセスが、銀行および／または銀行の顧客からの盗難につながる可能性がある特権情報へのアクセスを獲得することを可能にする。特定の状況では、共有キャッシュの存在によりタイミング攻撃が可能である。タイミング攻撃の詳細は、既存の文献［ＤＪＢ  ２００５］に詳しく説明されている。引用：Ｃａｃｈｅ−ｔｉｍｉｎｇ  ａｔｔａｃｋｓ  ｏｎ  ＡＥＳ、Ｄａｎｉｅｌ  Ｊ．Ｂｅｒｎｓｔｅｉｎ、ｈｔｔｐ：／／ｃｒ．ｙｐ．ｔｏ／ａｎｔｉｆｏｒｇｅｒｙ／ｃａｃｈｅｔｉｍｉｎｇ−２００５０４１４．ｐｄｆ
【０００５】
したがって、現在、マルチコア、マルチテナントコンピューティング環境で安全な計算は利用できない。
【０００６】
安全が意図されたトランザクションの送信は（例えば、送金の例）、一般に、マルチコア、マルチテナントコンピュータ環境において行われる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記を鑑みて、本開示は、既存のＣＰＵコンピュータシステム設計およびアーキテクチャの変更を教示して、マルチコアマルチテナント環境の脆弱性を排除または低減し、またそのような修正されたＣＰＵアーキテクチャは、読み出しレイテンシの高い部品が存在する場合でもそのようなコンピュータシステムが迅速に有用な作業を行うことを可能にする技術を提供する。
【課題を解決するための手段】
【０００８】
プロセッサ読み出しイベントを迅速にディスパッチすることによって、セキュリティおよびパフォーマンスを向上させるシステムおよび方法。
【０００９】
本開示は、複数の処理コアと、複数のメモリ位置で構成されたスタティックレジスタファイルスクラッチパッドであって、複数のメモリ位置は複数の重複しないメモリ位置のセットに分割され、各メモリ位置のセットはシステムセキュリティソフトウェアによって割り当てられる、スタティックレジスタファイルスクラッチパッドと、システムメモリと、システムメモリおよびスタティックレジスタファイルスクラッチパッドと動作上関連するメモリコントローラとを提供するコンピュータシステムおよび方法を含み、処理コアは処理コアが発行する読み出し要求にディスパッチ命令アドレスを含むように構成され、ディスパッチ命令アドレスは、読み出し要求に関連する読み出し動作が一旦完了すると、関連するアプリケーションの動作を再開するために使用される。
【００１０】
コンピュータシステムおよび方法は、共有キャッシュをさらに含み、コンピュータシステムで動作するアプリケーションは、任意選択的に共有キャッシュをバイパスするように構成される。
【００１１】
コンピュータシステムおよび方法は、処理コアが発行した読み出し要求内のディスパッチ命令アドレスに沿って渡すようにメモリコントローラを構成することをさらに含む。
【００１２】
コンピュータシステムおよび方法は、処理コアが発行した読み出し要求に応答して生成された読み出し応答内のディスパッチ命令アドレスに沿って渡すようにシステムメモリを構成することをさらに含む。
【００１３】
コンピュータシステムおよび方法は、読み出し応答内のディスパッチ命令アドレスを受け取り、ディスパッチ命令アドレスをローカルスレッドキューに追加し、その後ＨＡＬＴイベントまたはＳＴＡＬＬイベントの１つに応答して、関連する処理コアの（ＰＣの）プログラムカウンタにディスパッチ命令アドレスをロードするように処理コアを構成することをさらに含む。
【００１４】
コンピュータシステムおよび方法は、システムセキュリティソフトウェアによって制御されるように構成されたスタティックレジスタファイルスクラッチパッドへの処理コアによるアクセスを有することをさらに含む。
【００１５】
コンピュータシステムおよび方法は、第１のハイパースレッドおよび第２のハイパースレッドをサポートする命令パイプラインと、複数の処理コアの１つの処理コアであって、第１のハイパースレッドおよび第２のハイパースレッドと動作上関連する、処理コアとをさらに含むように構成され、第１のハイパースレッドは、複数の処理コアの１つの処理コア用の第１のアプリケーションスレッドの命令を処理するように構成され、第２のハイパースレッドは、複数の処理コアの１つの処理コア用の第２のアプリケーションスレッドの命令を処理するようにさらに構成され、ここで第１のアプリケーションスレッドが、第１のアプリケーションスレッドの命令の処理を停止したアイドル状態またはストール状態にある場合、第２のハイパースレッドは、複数の処理コアの１つの処理コア用の第２のアプリケーションスレッドの命令を処理するように構成される。
【００１６】
コンピュータシステムおよび方法は、第２のアプリケーションスレッドがアイドル状態またはメモリストール状態にある場合、第１のアプリケーションスレッドの命令を処理するように構成された第１のハイパースレッドを有することをさらに含む。
【００１７】
コンピュータシステムおよび方法は、スタティックレジスタファイルスクラッチパッドと動作上関連する第１のハイパースレッドおよび第２のハイパースレッドをサポートする命令パイプラインを有することをさらに含む。
【００１８】
コンピュータシステムおよび方法は、スタティックレジスタファイルスクラッチパッドの動的なサイズ変更を可能にするように設計されたコンパイラを有することをさらに含む。
【図面の簡単な説明】
【００１９】
【図１】図１は、共有キャッシュを含む中央処理装置アーキテクチャを示す。
【図２】図２は、図１のＣＰＵアーキテクチャと共に使用されてもよい転送命令を示す。
【図３】図３は、スタティックレジスタファイルスクラッチパッドによって置き換えられる共有キャッシュメモリを除去するＣＰＵアーキテクチャを示す。
【図４】図４は、図３の修正されたアーキテクチャと共に使用されてもよい転送命令の修正例のコードを示す。
【図５】図５は、小さな共有キャッシュと、小さなスタティックレジスタファイルスクラッチパッドの両方を含む代替のＣＰＵアーキテクチャの実施形態を示す。
【図６Ａ】図６Ａは、コア毎に少なくとも２つのハイパースレッドを有するＣＰＵアーキテクチャを示す。
【図６Ｂ】図６Ｂは、キューメモリのサイズによってのみ制限される新規ＣＰＵアーキテクチャを示す。
【図７】図７は、本開示に従って実装されてもよい転送動作のコードを示す。
【図８】図８は、３つの数を転送し合計するより複雑なコードを示し、本開示に従って実装されてもよい。
【図９】図９は、本概念が使用されてもよいコンピュータネットワークを示す。
【発明を実施するための形態】
【００２０】
以下の議論では、ＣＰＵ設計およびアーキテクチャを開示し、これはシステムセキュリティソフトウェアに対して実質的に「透過的」または「不可視」である共有キャッシュ、およびそのようなＣＰＵの動作を効果的にするのを支援する動作（例えばコード実装）に少なくとも関連して既存のＣＰＵを変更する。
【００２１】
一実施形態では、共有キャッシュが除去されており、ＣＰＵチップのシリコン上のその量またはその一部の量のスペースは、システムセキュリティソフトウェアが認識できる高速ＲＡＭスクラッチパッドのようなスタティックレジスタファイルスクラッチパッドを含むように設計されているがこれに限定されない。そのようなスタティックレジスタファイルは明示的に管理することができ、システムセキュリティソフトウェアを介して、そのセキュリティプロパティを推論（例えば、制御する、照会するなど）することができる。このようなスクラッチパッドアーキテクチャの一実施形態を図３に示す。コアは、Ｌ１（１０６ａ）およびスクラッチパッド（３０２）メモリのようなオンチップメモリに対して非常に低い読み出しレイテンシを経験し、さらにコアは、システムまたはメインメモリ（１１４）に対して非常に高い読み出しレイテンシを経験することが理解される。システムメモリ１１４は、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、および不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）を含むことを意図されるが、これらに限定されるものではない。
【００２２】
別の実施形態では、シリコン領域は、縮小されたサイズの共有キャッシュを含むように設計され、シリコン領域の残りは、スタティックレジスタファイルスクラッチパッドに使用される。このハイブリッドアーキテクチャを図５に示す。
【００２３】
提案された設計、アーキテクチャ、および動作には、システムメモリなどの高い読み出しレイテンシの部品が存在する場合でも、スクラッチパッドまたはハイブリッドアーキテクチャを備えたＣＰＵが有用な作業を継続できるハイパースレッドディスパッチ技術が含まれている。
【００２４】
上記の概念を実装することで、さまざまなマルチコア、マルチテナント設定においてより安全な計算が可能になる。例えば、デスクトッププロセスはＡｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ）鍵素材を操作し、高いレベルのセキュリティを維持しながら、同時に潜在的なスパイプロセスがブラウザのＪａｖａｓｃｒｉｐｔ（登録商標）  ｓａｎｄｂｏｘで実行される場合がある。あるいは、再び銀行のＶＭのセキュリティを失うことなく、銀行と攻撃者は各々Ａｍａｚｏｎ  Ｗｅｂ  Ｓｅｒｖｉｃｅｓ（ＡＷＳ）や他のクラウドベースのコンピューティングサービスと契約して、同じハイパーバイザのもとで仮想マシン（ＶＭ）を実行する場合がある。これらは、本開示の概念を使用できる多数の実装例のうちの２つに過ぎない。
【００２５】
ここでより詳細に本開示を参照すると、現代のＣＰＵコアのクロック速度は、対応するメモリチップの速度よりも速度向上したことが知られている。このような状況を鑑みて、さまざまな階層化されたキャッシング技術が、このようなレイテンシをマスクしながら、コアを有用な作業でビジー状態に維持したいという要望のもとに開発された。既存の技術は、参照の局所性が良好な作業負荷に対して効果的であることが証明されており、実際にはしばしば当てはまる仮定である。データキャッシュと命令キャッシュの特性はわずかに異なる。以下の議論では、データキャッシュに焦点を当てる。さらに、システムソフトウェアは、所与のプロセスがスケジュールされているコアに基づいて、特権的機密性の完全性の高いプロセスを分離することができるため、機密情報がコア毎のＬ１プライベートキャッシュに安全に格納できると想定される。非特権の完全性の低いプロセスは、独自の完全性の低いＬ１キャッシュを有する個別のコアのセットにスケジュールされる。
【００２６】
キャッシュには幾らかの経費がかかる。それらはキャッシュミスの場合にレイテンシを増やす。特にヒット率の高い大容量のキャッシュは、電力およびシリコン領域を消費する。キャッシュは、主に仮想メモリアドレスを物理アドレスに変換するように構成されたコンピュータハードウェアであるページメモリ管理ユニット（ＰＭＭＵ）とも呼ばれるメモリ管理ユニット（ＭＭＵ）とわずかに相互作用をする場合がある。
【００２７】
さらに、キャッシュメモリのメンテナンスは、アプリケーション（本明細書では「アプリ」、または第１のアプリケーションスレッド、第２のアプリケーションスレッドなどのアプリケーションスレッドなどとも呼ばれる）に追加されたメモリバリア遅延を含むハードウェアおよびソフトウェアの両方の複雑さを増やす。キャッシュライン内の６４バイト未満を参照する短いアクセスによって帯域幅が浪費され、誤ったプリフェッチ予測によっても浪費される。追加のシステム資源が、キャッシュコヒーレンシプロトコルに当てられる。
【００２８】
図１を参照すると、メモリ要素に着目したマルチコア中央処理装置（ＣＰＵ）アーキテクチャ１００の幾分一般的な図が示されている。チップ（シリコン）１０２には、複数の処理コア１０４ａ、１０４ｂ、１０４ｃ、および１０４ｎが配置されている。各処理コア１０４ａ〜１０４ｎは、対応する高速すなわち第１のキャッシュ（Ｌ１）１０６ａ、１０６ｂ、１０６ｃ、および１０６ｎと動作上関連している。Ｌ１キャッシュは、他の処理コアから物理的および動作上分離されている。しかしながら、別のキャッシュレベル（Ｌ２）は、共有キャッシュ１１０として示されており、処理コア１０４ａ〜１０４ｎのそれぞれは、共有キャッシュ１１０の位置にアクセスする能力を有する。メモリコントローラ１１２は、オフチップシステムメモリ１１４へのアクセスを可能にすることを含む機能を提供する。本教示は、本明細書に示されるものを超える追加のキャッシュレベルを有するシステムで実装されてもよいことを理解されたい。本開示の特定の焦点は、キャッシュ資源が共有されているかどうか、また特定のトポロジおよび階層が変化し得る詳細にあることにも留意されたい。
【００２９】
上述したような費用を最小限に抑えたいという要望は、複数のコアが最終レベルのキャッシュ（Ｌ２）１１０を共有する設計を促す。しかしながら、Ｌ２は特権ユーザ情報（例えば、プロセス計算）の痕跡を長期間にわたって潜在的に含み、非特権スパイプロセスまたは同等のスパイＶＭに潜在的にアクセス可能にするので、この設計はセキュリティに影響を及ぼす。本明細書で説明する概念は、このセキュリティ上の欠点に対処することを意図している。
【００３０】
この議論は、コアが継続している間書き込みは常にキューに入るため、読み出しのパフォーマンスに焦点を当てる。
【００３１】
説明を助けるために、まず考察されるのは、例えば図２に示すように、特権プロセスによって実行される転送命令である。この命令ブロック２００は、システムメモリ位置から値を取り出し（ＭＯＶ  ０ｘ９０００）、それをレジスタｒ０に転送する命令で、ＯＮＥ２０２とラベルされた位置で開始する。次に、位置ＴＷＯ２０４で、命令は２つの下位ビット（ＸＯＲ  ＄  ３、ｒ０）を反転させる。位置ＴＷＯ２０４の命令は単一のクロックサイクルで実行されるが、特定のハードウェアでは、システムメモリからの応答を待つので、位置ＯＮＥ２０２の命令は２０サイクル以上停止する。
【００３２】
共有キャッシュなし
本開示の一実施形態に注目して、セキュリティを高めるためにＬ２共有キャッシュ１１０が図１のアーキテクチャから除去された場合、ＣＰＵコア１０４ａ〜１０４ｎとシステムメモリ１１４との間のデータ経路には共通の共有キャッシュロジックがない。このようなＣＰＵアーキテクチャでは位置ＯＮＥ２０２での繰り返される命令の実行は常に遅く、少なくとも２０サイクルを消費し、解決すべき重大な性能結果をもたらす。
【００３３】
図３を参照すると、前のＬ２キャッシュのシリコン領域を再利用して、それを等しいまたは他のサイズのスタティックレジスタファイルスクラッチパッド３０２、１つの実施形態では、低レイテンシのオンチップＲＡＭの形態などに使用することによってセキュリティを向上させるＣＰＵアーキテクチャ３００などの別個のコンピュータシステムが図示されている。スクラッチパッド３０２は、除去されたフルサイズのＬ２キャッシュの同一または異なる物理的位置に配置されてもよい。この例では、アドレス０ｘ１００から０ｘ１ｆｆ（または他のアドレス）は、このようなスタティックレジスタファイルスクラッチパッド３０２の一部であり、これらのアドレスは、議論されたＭＯＶ命令の対象として、例えば、オペレーティングシステム（ＯＳ）ソフトウェアまたはハイパーバイザ（セキュリティ）システムソフトウェアによって静的に割り当てられる。複数のメモリ位置は、複数の重ならないメモリ位置のセットに分割される。スタティックレジスタファイルスクラッチパッドの各ワードは、システムメモリ内のワードよりもわずかに広く、「読み出し保留」と「有効」を区別する１つまたは複数の補助ビットによって増強されている。スタティックレジスタファイルスクラッチパッド３０２とＣＰＵの部品との間の接続は（例えば、Ｌ１キャッシュと処理コア１０４ａ〜１０４ｎなどであるがこれに限定されない）、除去したＬ２キャッシュと接続する際に使用されるものと同様の既知の技術によって達成される。
【００３４】
これに関して、修正された命令ブロック４００が図４に示されており、図３のアーキテクチャの下で動作するように設計されている。
【００３５】
より詳細には、位置ＯＮＥ４０４のＰＲＥＦＥＴＣＨ命令４０２は、アドレス０ｘ９０００で低速メモリ（例えば、図３のオフチップシステムメモリ１１４）からバイトを先取りし、これらの値をスタティックレジスタファイルスクラッチパッド３０２の０ｘ１００でオンチップメモリに転送する。これは、少なくとも２０サイクルまたは遅延スロットを消費する。動作を改善するために、コンパイラは、非干渉データフローから無関係の作業でこれらのサイクルまたはスロットを便宜的に満たし、乗算、加算などを実行するように構成される（例えば、ＭＵＬ  ｒ１，ｒ２、ＡＤＤ  ＄８，ｒ２）４０６。最終的に、メモリ読み出し動作４０２が完了し、値は迅速に（例えば１または２サイクルで）レジスタ０  ４０８にコピーされ（つまり、ＭＯＶ  ０ｘ１００，ｒ０）、位置ＴＷＯ４１２で２つの下位ビットを反転させる算術論理ユニット（ＡＬＵ）動作（つまりＸＯＲ）４１０が続く。本明細書で使用されるように、コンパイラプログラムはコア（１０４ａ〜１０４ｎ）上で動作していることが理解される。
【００３６】
ここでの違いは、潜在的に特権のある計算の詳細であり、例えば私的位置０ｘ９０００のそのアクセスは、非特権スパイプロセスにアクセス可能な共有（例えば、大域的Ｌ２）キャッシュに漏洩していない。上述したように、システムソフトウェアは、共有キャッシュ（つまり、除去されたＬ２）の詳細を制御も効果的に観察することもできない。本設計では、セキュリティ完全性記述子の知識を備えたシステムソフトウェアが私的スクラッチパッドアドレスを静的に割り当て、私的情報を私的に保つことができる。したがって、図３のＣＰＵアーキテクチャ３００は、スタティックレジスタファイルスクラッチパッド３０２の使用によって、システムのセキュリティ設計から「共有キャッシュ」弱点を除去する。
【００３７】
本設計により、高いレイテンシでも迅速な計算が可能になり、安全な計算も提供する。例えば、コア０（１０４ａ）は以下のように、ｃｏｒｅ０（１０４ａ）、Ｌ１（１０６ａ）、メモリコントローラ１１２からスクラッチパッド３０２へ、迅速にスクラッチパッド３０２にアクセスすることができる。言うまでもなく、システムメモリ１１４は、遅い経路で、ｃｏｒｅ０（１０４ａ）、Ｌ１（１０６ａ）、メモリコントローラ１１２からオフチップシステムメモリ１１４にアクセスすることができる。
【００３８】
上記の図４の動作は既存のプリフェッチ動作を変更し、以前はプリフェッチ動作はデータを共有キャッシュに転送していたが、設計は現在スタティックレジスタファイルスクラッチパッドの慎重に割り当てられた部分にデータを割り当てるように適応されている。
【００３９】
任意のキャッシュ
キャッシュの肯定的な側面は、異なる作業負荷に応答するという点で動的であることである。例えば、非決定性プロセス１、２および３がマルチコア、マルチテナント環境で動作していると仮定すると、共有キャッシュ（例えば、Ｌ２）は、これらのプロセスのいずれかの間でメモリを分割して、有用な量のメモリストレージを提供し、動的に変化するメモリにすることができる。静的アロケータ（例えば、スタティックレジスタファイルスクラッチパッド）の一態様は、スクラッチパッドスペースの大部分がその静的性質のために潜在的に使用されなくてもよいことである。
【００４０】
この理解に基づいて、本開示の別の実施形態では、ＣＰＵアーキテクチャ５００の形態のようなコンピュータシステムが図５に示されている。ここでは、以前のシリコン領域（図１のＬ２  １１０など）の半分に縮小された、小さな従来の共有Ｌ２キャッシュ５０２が含まれ、シリコン領域の残りの半分はスタティックレジスタファイルスクラッチパッド５０４に当てられる。シリコンは一般的に論理回路を構成するために使用される基板であるが、同様に他の材料も使用できることが理解される。言うまでもなく、上記では５０対５０の分割を説明したが、共有Ｌ２キャッシュとスタティックレジスタファイルスクラッチパッドとの間の他の比例関係を、動作上の要件に応じて採用してもよい。スクラッチパッド５０４は、図３のスクラッチパッド３０２と同様に構成され、各ワードがシステムメモリ１１４内のワードよりわずかに広いことを含み、そのようなワードは、「読み出し保留」と「有効」を区別する１つまたは複数の補助ビットによって増強されている。
【００４１】
また、縮小された共有キャッシュ５０２とＣＰＵの他の部品（例えばＬ１キャッシュ１０６ａ〜１０６ｎおよび処理コア１０４ａ〜１０４ｎなどであるがこれに限定されない）との間の接続、ならびにスタティックレジスタファイルスクラッチパッド５０４とＣＰＵの他の部品（再び例えばＬ１キャッシュおよび処理コアなどであるがこれに限定されない）との間の接続は、ここでは除去されたフルＬ２キャッシュ（つまり図１の１１０）と接続する際に使用されるものと同様の既知の製造技術によって達成される。
【００４２】
上記の概念の実装を支援するために、非キャッシュＭＯＶＮＣおよびＰＲＥＦＥＴＣＨＮＣ命令が導入され、縮小されたサイズの共有Ｌ２キャッシュ５０２を変更することなくシステムメモリへのアクセスを可能にする。暗号鍵または他の機密材料を取り扱うプロセス（例えば、処理コア１０４ａ〜１０４ｎ上で動作する）は、大域的Ｌ２キャッシュを介する漏洩情報が問題である場合、スタティックレジスタファイルスクラッチパッド（３０２、５０４）と共に「ＮＣ」タイプの命令を使用して、任意選択的にＬ２キャッシュをバイパスすることを選択してもよい。ＭＯＶＮＣ命令とＰＲＥＦＥＴＣＨＮＣ命令は、既存のＭＯＶ命令とＰＲＥＦＥＴＣＨ命令に類似しているが、大域的最終レベルの共有キャッシュをバイパスするように構成されている。したがって、これらの命令の「ＮＣ」部分は、「キャッシュなし」を表すことを意図している。データ値は公的共有キャッシュには表示されず、コアの私的Ｌ１キャッシュにのみ格納されるものとする。ＭＯＶＮＣおよびＰＲＥＦＥＴＣＨＮＣ命令の読み出しレイテンシは、Ｌ２キャッシュでミスする通常の読み出しのレイテンシと実質的に一致する。ＭＯＶＮＣ命令からの書き込みは、Ｌ２キャッシュの内容に影響を与えることなく、常にシステムメモリに向かう。
【００４３】
ＭＯＶ（ＮＣ）およびＰＲＥＦＥＴＣＨ（ＮＣ）命令が本議論の焦点であったが、本明細書に開示された概念はこれらの命令に限定されず、むしろ他の関連する全ての命令に適用できることを理解されたい。
【００４４】
縮小された共有キャッシュＬ２  ５０２および縮小されたスタティックファイルスクラッチパッド５０４の両方を含む図５の実施形態は、実行中のアプリケーションのプロセスの動作において一定の柔軟性を可能にする。特に、アプリケーションの一部が機密データ上で動作している場合、アプリケーションは、機密情報に関連する動作が、縮小されたスタティックファイルスクラッチパッド５０４用の命令（例えば、「ＮＣ」命令）のみを使用するように構成およびコンパイルすることができる。この設計により、アプリケーションのセキュリティが強化される。しかし、非機密情報を扱うアプリケーションの動作は、縮小された共有Ｌ２キャッシュを使用するように構成することができ、それによりアプリケーションの動作速度を向上させ、修正されない従来の非安全なソフトウェア実装との互換性を向上させることができる。
【００４５】
キャッシュを小さくするほどミス率が高くなる
多くの作業負荷およびアクセス分配では、有効なキャッシュサイズを削減すると、キャッシュヒット率や観察されるタイミングに影響を与える。コンパイル時に高速メモリ資源をＮ個のスライス（例えば、ブラウザのＪａｖａＳｃｒｉｐｔ（登録商標）＋バンキングの場合はＮ＝２）に静的に分離することにより、同時の作業負荷とは無関係に、所定のアプリケーション用のメモリがわずか１／Ｎになる。以下は、開示されたＣＰＵアーキテクチャを使用して影響を緩和する２つの方法を開示する。
【００４６】
まず考察するのは、単一のアプリケーションだけの作業負荷を伴う従来の汎用ＣＰＵである。キャッシュ全体を割り当てて、独自のデータで埋める。次に、それが第２の並列アプリケーションによって結合されると、定常状態において、２つの競合するアプリケーションのそれぞれがキャッシュの約半分の割り当てに収束する。追加の並列アプリケーションが到着する可能性があり、一般にＮ個の類似アプリケーションの場合、それぞれキャッシュの約１／Ｎを獲得する。アプリケーションの中には、他のアプリケーションよりも大きなメモリフットプリントを有し、これらの大きなワーキングセットアプリケーションは、キャッシュの幾分大きな部分を取得するので、システムスループットに有益であるため、観察された実行の動作は、それよりも少し改良されたものになる。
【００４７】
共有キャッシュの代替として開示されているスタティックレジスタファイルスクラッチパッド構成（例えば、一例ではセキュリティを高めるために）をここで考察する。そのようなシステムの一実施形態では、コンパイル時に、アプリケーション（例えば、ＯｐｅｎＳＳＬライブラリを使用するものなどであるが、これに限定されない）はスタティックレジスタファイルスクラッチパッドの１／４への排他的アクセスを予定するように命令され、これはスケジューラに同時に最大３つの同様のアプリケーションを安全に実行させる。しかし、この構成では、アプリケーションが使用できる高速メモリの量が人為的に制限され、スタティックレジスタファイルスクラッチパッドの３／４が、最初のアプリケーションだけが動作しているときに不必要にアイドルになる。
【００４８】
コンパイラはさまざまな実行時条件のために変形を生成する
上記を考慮し、さらに議論するために、コンパイラは、特定のアプリケーションのためにオブジェクトコードの２つ以上のバージョンを生成するよう命令されると仮定する。例えば、第１のコードでは、オペレーティングシステム（ＯＳ）ソフトウェアは、スタティックレジスタファイルスクラッチパッドのわずか１／４へのアクセスを許可し、コードの変形または第２のバージョンにおいて、ＯＳソフトウェアは、スタティックレジスタファイルスクラッチパッドメモリの１／２へのアクセスを許可する。これは以下により達成できる。
【００４９】
（１）異なるサイズのメモリフットプリントを課す異なるオブジェクトファイルを生成する（例えば、大きなメモリフットプリントに対しては「ａｐｐ−ｂｉｇ．ｏ」と呼ばれ、小さいメモリフットプリントに対しては「ａｐｐ−ｓｍａｌｌ．ｏ」と呼ばれる）。
【００５０】
（２）条件分岐（「ｉｆ」文）をコードに挿入する。
【００５１】
他のアプリケーションが中断した場合に、選択されたアプリケーション（つまり、「ａｐｐ−ｂｉｇ．ｏ」または「ａｐｐ−ｓｍａｌｌ．ｏ」）は拡張できないため、第１の選択肢（例えば１）は第２の選択肢（例えば２）より単純で、第２の選択肢ほど動的ではなく、オペレーティングシステム（ＯＳ）ソフトウェアは、新しく到着した並列アプリケーションと平行して実行されるようにアプリケーションを縮小することができない。つまり、第１の選択肢は、プロセスの動作期間中はサイズ変更できない。
【００５２】
第２の選択肢（２）では、メモリフットプリントの使用される量を決定する「ｉｆ」文を含むようにコードが設計されている点で多少の柔軟性がある（例えば、ＯＳソフトウェアによって実施される割当ておよびアクセス制御で、システムの大部分がアイドルである場合、スタティックレジスタファイルスクラッチパッドの１／２がこのアプリケーションで使用されている可能性があり、または例えば、実行中の他のアプリケーションが２つ検出された場合、スタティックレジスタファイルスクラッチパッドの１／４がこのアプリケーションによって使用されている可能性がある）。カーネル（つまり、スケジューリング、メモリ割り当て、およびメモリマッピングアクセス制御を制御するコンピュータのＯＳソフトウェアの中心部分）は、アプリケーションの起動時に必要な決定を行うが、一旦アプリケーションが起動されると、動作上の構成は割当てが変更されないように設定されている。
【００５３】
これに関して別の実施形態は、共有キャッシュが長期間のプロセスによって引き起こされる変化する作業負荷に適応する方法と同様に、１秒より長く実行される長期間のプロセスに対してスタティックレジスタスクラッチパッドのより動的なサイズ変更を提供する。具体的には、ＯＳソフトウェアはメモリ使用を監視し、スタティックレジスタファイルスクラッチパッドメモリの追加ページを既に実行中のアプリケーションに割り当てることができる。これは、例えば、ページングメモリ管理ユニット（ＰＭＭＵ）とも呼ばれるメモリモジュールユニット（ＭＭＵ）で実行されるように、デマンドページフォルトハンドラが既に日常的に行うことを反映する単純なタスクである。追加のメモリが追加されると、アプリケーションにはより高いメモリ限界が通知される。一実施形態では、通知は、アプリケーションが現在のスクラッチパッド上限値を格納するメモリ位置に書き込むことによって達成される。
【００５４】
ＯＳソフトウェアが特定のアプリケーションに利用可能なスクラッチパッドメモリを再利用する（つまり、割り当てられたスクラッチパッドメモリを減らす）この実施形態の反対のプロセスでは、このタスクは以下の一連の動作を実行することによって達成される。
第１に、関心のあるアプリケーションはスケジューリングされないので、これらの変更中には実行されない。システムメモリからのアプリケーションの未処理の読み出し要求が全て満たされている間、実行が一時停止される。
第２に、メモリモジュールユニット（ＭＭＵ）のページテーブルエントリは、再利用されているページをマップ解除するために調整される。
第３に、アプリケーションは、一例では上記のように上限値を上書きすることによって、メモリの減少を通知される。
第４に、アプリケーションは再スケジュールされる。その後、アプリケーションは動作を継続するが、その読み出し要求のより多くの部分がメモリストールを招く（つまり、利用可能なスクラッチパッドメモリの減少による）。
【００５５】
特定の実施形態では、コンパイラ生成コードによって維持される性能カウンタは、スクラッチパッド割当て決定のためにＯＳソフトウェアに通知するのを助ける。このように、この実施形態では、パフォーマンスカウンタによって決定された、高率または低率のミスを経験するアプリケーションは、その特定のアプリケーションに対してスクラッチパッドメモリ割当てを拡大または縮小するために優先順位を付けることができる。
【００５６】
読み出しディスパッチ
マルチコア環境のコアを有用な作業でビジー状態に維持することは有益である（つまり、空のサイクルおよびメモリストールを最小にすることが望ましい）。前述のように高速のＣＰＵサイクル時間と、システムメモリからの読み出しレイテンシの遅れとの間の不一致により、コアを高い使用率で維持することは課題である。この課題に対処するアプローチは、図６Ａのハイパースレッド設計６００の高レベルの図に示すように、コア当たり少なくとも２つのハイパースレッドを提供する考察されたＣＰＵにおいて実現することができる。図６Ａのレイアウトは、特定の実施形態では、図３および図５のアーキテクチャと統合されており、図６Ａのハイパースレッドは、これらの図のメモリと動作上の構成または関連性を有することを理解されたい（例えば、高速キャッシュ１０４ａ〜１０４ｎ、ならびにスタティックレジスタファイルスクラッチパッド３０２、５０４、および／または縮小されたサイズの共有（Ｌ２）キャッシュ５０２）。
【００５７】
読み出しストール（メモリストールとも呼ばれる）は不可避であることを認識し、従来のハイパースレッド設計では、第１の命令（例えば、フェッチ／デコード／実行）パイプラインに当てられるシリコン領域と同様の量が代替のまたは第２の命令パイプラインに提供され、命令を処理する。図６Ａにおいて、これらは、同じ共通の処理コア（例えば、コア０）６１０に対して異なるタスク（例えば、第１のアプリケーションスレッドのタスクＡ）６０６および（例えば第２のアプリケーションスレッドのタスクＢ）６０８を処理するハイパースレッド動作をサポートする第１のハイパースレッド０（ＨＴ−０）６０２および第２のハイパースレッド１（ＨＴ−１）６０４として識別される。動作で、ＨＴ−０が停止している間、ＨＴ−１は処理コアの残りのロジックの多くを有効にビジー状態に保つため、構成はほぼ２つの処理コアの処理能力を有すると思われる。言うまでもなく、ＨＴ−１が停止している場合、ＨＴ−０は、処理コア６１０をビジー状態に保つ。
【００５８】
対照的に、開示される発明は、シリコンまたは他の基板上に複製される命令パイプラインではなく、命令ディスパッチアドレスのキューに依存して、長いメモリ読み出しレイテンシにもかかわらずコアをビジー状態に保つ。このようなレイアウトは、図６Ｂのレイアウト設計６２０によってより詳細に示され、命令パイプライン６２２、タスクＡ６２４、タスクＢ６２６〜タスクＺ６２８、コア０  ６３０、および保留中のハイパースレッドキュー６３２を含む。設計６２０では、読み出しおよび待ち応答を発行するタスク（例えば、タスクＡ６２４、タスクＢ６２６〜タスクＺ６２８）の数は、キュー６３２のサイズによってのみ制限される。これに関して、図面は縮尺通りではなく、図６Ａの設計６００の各保留中のタスクが複製された命令フェッチ／デコード／実行パイプラインのために非常に大量のシリコンを必要とする場合、図６Ｂのレイアウト設計６２０における各保留中のタスクは、格段に少ない量のシリコンを消費することを理解されたい（例えば、一実施形態では、必要な量はわずか６４ビットである）。図６Ｂのレイアウト設計６２０は、特定の実施形態では、図６Ａに関連して述べたように、図３および図５のアーキテクチャと統合されることにも留意されたい。
【００５９】
メモリストールに加えて、ＨＡＬＴすなわちアイドル動作もあることを理解されたい。メモリ読み出し応答が供給されるとメモリストールは終了するが、アイドルは終了しそれ以上の作業がないと判断して、処理スレッドに自発的に対応する。ストールイベントとアイドルイベントの両方は、処理コアがキューから他のスレッドをスケジュールする必要があることを意味する。本明細書では、ストールの使用は、アイドル状態の概念を包含し、アイドルは、少なくとも別のスレッドをスケジュールすることを望む処理コアに関して、ストール状態を包含する。
【００６０】
特定の実施形態では、プリフェッチ命令は動的ハイパースレッドディスパッチを準備し、追加の引数、すなわちディスパッチ命令アドレスを取る。また、この実施形態では、保留中のハイパースレッドキュー６３２と、新しいＳＴＡＬＬガード命令（図７および図８参照）が導入されている。本概念は、ＨＡＬＴ命令を頻繁に発行することにも依存する。これらの上記の概念は、図７の命令ブロック７００および図８の命令ブロック８００に関連して、より詳細に説明される。キュー６３２は、命令ディスパッチアドレスを含み、ファーストインファーストアウト（ＦＩＦＯ）キューまたは他の適切な記憶装置であってもよい。
【００６１】
図７の命令ブロック７００において、位置ＯＮＥ  ７０２において、スクラッチパッド位置０ｘ１００の補助ビットが「読み出し保留」にセットされ、読み出し要求が発行され（ＰＲＥＦＥＴＣＨＮＣ  ０ｘ９０００，０ｘ１００，ＴＷＯ）７０４、ここで、ＴＷＯはディスパッチ命令アドレスである。次に、保留中の他のスレッドがないと仮定して、ＨＡＬＴ命令７０６を発行してコアの動作を約２０サイクル停止する。最終的に、読み出し応答が到着し、コアは位置ＴＷＯ７０８で処理を再開する。コンパイラが生成したＳＴＡＬＬ命令７１２は、上記で設定された同じスクラッチパッド補助ビットを照会する。「読み出し保留」を報告する場合、命令は現在のハイパースレッドのスケジューリングを中止するＨＡＬＴの効果を持つ。この例のコードでは、ビットは、（「読み出し」命令のみが完了したので）「有効」を報告するように保証され、実行は位置ＴＷＯ＿Ａ７１６まで続き、スクラッチパッド読み出し（ＭＯＶ  ０ｘ１００，ｒ０）７１８およびＡＬＵ演算（ＸＯＲ  ＄  ３，ｒ０）７２０を有する。この例では、命令はちょうど同様にＴＷＯ＿Ａ７１６の位置に直接ディスパッチすることができるので、ＳＴＡＬＬガード命令７１２は厳密には必要ではなかった。
【００６２】
図８を参照すると、３つの数字を合計するより複雑な命令ブロック８００が示されている。位置ＯＮＥ（８０２）では、３つのスクラッチパッド補助ビットがスクラッチパッド位置８０４、８０６、および８０８で「読み出し保留」に設定され、３つの読み出し要求が、ディスパッチ命令アドレスＴＷＯを含むＰＲＥＦＥＴＣＨＮＣ命令８１０、８１２、および８１４によって並列に発行される。次に、ＨＡＬＴ命令８１６は、保留中のハイパースレッドキュー（例えば、図６Ｂの３２０）を調べる。保留中のスレッドが見つかった場合、保留中のスレッドのその位置のプログラムカウンタ（ＰＣ）で再開する。そうでない場合、何もすることがないので、処理コアの動作は停止され、システムは停止する（例えば、幾つかの状況ではほぼ２０サイクルの間）。
【００６３】
読み出し応答は、例えば、異なるメモリページ上の位置または他の処理コアからのコンテンションのために、任意のランダムな順序で非同期的に到着してもよい。最終的に応答が到着し、キューに追加される（例えば、図６Ｂの６３２）。コアがＨＡＬＴされると、キューからの応答を受け入れ、位置ＴＷＯ８１８の指定されたディスパッチ命令アドレスをプログラムカウンタ（ＰＣ）にロードして新しいハイパースレッドを起動し、一連のＳＴＡＬＬガード８２０、８２２、および８２４を実行する。第１の読み出しが受信されると、必要な全ての「有効な」ビットが設定されないので、ＳＴＡＬＬは単純に動作をＨＡＬＴ  ８２６し、そのハイパースレッドを永久に終了させる。続いて、第２の応答が到着し、同様に第２の補助スクラッチパッドビットが設定され、ＨＡＬＴする。第３の応答が到着すると、３つのビット全てが「有効」と示され、ＳＴＡＬＬガードが満たされ、命令ブロックは実行を継続し、３つの値（８２８、８３０、および８３２）の合計を計算し、結果８３４を記憶する。
【００６４】
１つのハイパースレッドを実行して、記述した実施形態は、オリジナルを終了する前に３つのハイパースレッドの作成を準備し、合計を計算し、結果を格納する前に、部分結果ハイパースレッドの対を作り、終了し、その後プロセスは停止される。したがって、ハイパースレッドディスパッチ命令アドレスのキューは、ハイパースレッドスケジューリングのために維持され、キュー内のディスパッチ命令アドレスは、システムメモリから返ってくる応答に現れる。また、処理コアは、読み出し応答においてディスパッチ命令アドレスを受け入れるように構成され、このようなディスパッチ命令アドレスを、ＨＡＬＴイベントまたはＳＴＡＬＬイベントの１つに応答して、関連する処理コアのプログラムカウンタ（ＰＣ）に実質的に直ちに追加するようにさらに構成され、前記ディスパッチ命令アドレスをキューから除去することが教示される。
【００６５】
コンパイラによって生成され格納されたコードは、この大域的不変量を維持する責任があり、基本命令ブロックによって読み出された全てのメモリ値は、実行が開始する前にスクラッチパッドで利用できるものとする。基本ブロックは、これを保証するために１つまたは複数のＳＴＡＬＬ命令で開始してもよい。
【００６６】
図５の実施形態では、共有（大域的）Ｌ２キャッシュ５０２がこの特権プロセスに利用可能であるが、プログラムはそれを使用しないように設計されているので、アプリケーションがその計算の詳細を漏洩しないことが保証された。この設計により、高いレイテンシでも迅速に計算が実行され、安全に計算された。さらに、ＦＩＦＯサイズによってのみ制限される保留中のハイパースレッドの数により、現在の最先端のプロセッサによって達成可能なものよりも高いコア使用率が達成され得る。
【００６７】
図９を参照すると、とりわけ本概念を使用することができるマルチコア、マルチテナント環境コンピュータネットワーク９００の一実施形態が示されている。特に、インターネット９０８へのアクセスを有する複数のコンピュータシステム９０２、９０４、および９０６が示されている。さらにコンピュータシステム９０２、９０４、および９０６がインターネット９０８を介して到達できるクラウドソリューション９１０が示されている。コンピュータシステムはさらに、入力／出力部品９０２ａ、９０４ａ、および９０６ａ、ディスプレイ装置９０２ｂ、９０４ｂ、および９０６ｂ、ならびにサーバ９０２ｃ、９０４ｃ、および９０６ｃを有することが示されている。これらのコンピュータシステムは、有線および無線の両方の動作のために、図９の環境に対して図２〜図８の教示を組み込むために必要なハードウェア、ソフトウェア、およびファームウェアの全てを有する。コンピュータシステムは、とりわけデスクトップコンピュータ、ラップトップコンピュータ、タブレット、スマートフォン、およびユビキタスコンピュータシステムを含むが、これらに限定されない任意の適切なコンピューティング構成の形態であってもよいことも理解されたい。さらに、わずかなコンピュータシステムのみが示されているが、図９の環境は、数千から数百万個のそのようなシステムを含むことができることを理解されたい。
【図１】
2018097857.tif 000003
【図２】
2018097857.tif 000004
【図３】
2018097857.tif 000005
【図４】
2018097857.tif 000006
【図５】
2018097857.tif 000007
【図６Ａ】
2018097857.tif 000008
【図６Ｂ】
2018097857.tif 000009
【図７】
2018097857.tif 000010
【図８】
2018097857.tif 000011
【図９】
2018097857.tif 000012