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

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

▶ アップル インコーポレイテッドの特許一覧

特許7483950バイナリ変換を実行するためのシステム及び方法
<>
  • 特許-バイナリ変換を実行するためのシステム及び方法 図1
  • 特許-バイナリ変換を実行するためのシステム及び方法 図2
  • 特許-バイナリ変換を実行するためのシステム及び方法 図3
  • 特許-バイナリ変換を実行するためのシステム及び方法 図4
  • 特許-バイナリ変換を実行するためのシステム及び方法 図5
  • 特許-バイナリ変換を実行するためのシステム及び方法 図6
  • 特許-バイナリ変換を実行するためのシステム及び方法 図7
  • 特許-バイナリ変換を実行するためのシステム及び方法 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-07
(45)【発行日】2024-05-15
(54)【発明の名称】バイナリ変換を実行するためのシステム及び方法
(51)【国際特許分類】
   G06F 8/52 20180101AFI20240508BHJP
【FI】
G06F8/52
【請求項の数】 20
(21)【出願番号】P 2022577759
(86)(22)【出願日】2021-06-10
(65)【公表番号】
(43)【公表日】2023-07-25
(86)【国際出願番号】 US2021036751
(87)【国際公開番号】W WO2021262444
(87)【国際公開日】2021-12-30
【審査請求日】2022-12-16
(31)【優先権主張番号】63/042,228
(32)【優先日】2020-06-22
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/343,484
(32)【優先日】2021-06-09
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】503260918
【氏名又は名称】アップル インコーポレイテッド
【氏名又は名称原語表記】Apple Inc.
【住所又は居所原語表記】One Apple Park Way,Cupertino, California 95014, U.S.A.
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】ズワリッチ, キャメロン
(72)【発明者】
【氏名】パルマンズ, デニス ジェー.
【審査官】渡辺 一帆
(56)【参考文献】
【文献】特開2003-140909(JP,A)
【文献】特開2002-132364(JP,A)
【文献】特開2015-179318(JP,A)
【文献】特開2016-054483(JP,A)
【文献】米国特許出願公開第2004/0133884(US,A1)
【文献】米国特許第06631514(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/52
(57)【特許請求の範囲】
【請求項1】
システムであって、
オペレーティングシステム及び1つ以上のアプリケーションバイナリを記憶するメモリであって、前記1つ以上のアプリケーションバイナリは第1の実行環境における実行のために書き込まれる、メモリと、
前記第1の実行環境とは異なる第2の実行環境においてアプリケーションバイナリを実行するように構成された1つ以上のプロセッサと、
前記アプリケーションバイナリの第1のアドレス空間において実行可能なシステムサービスと、第2のアドレス空間において実行可能なランタイムコードモジュールとを含むバイナリトランスレータであって、前記第1のアドレス空間は前記第2のアドレス空間とは別個であり、前記システムサービスは前記アプリケーションバイナリの変換を管理するように構成され、前記ランタイムコードモジュールは、前記システムサービスが対応する変換を欠いている前記アプリケーションバイナリのジャストインタイム(JIT)変換を管理するように構成されている、バイナリトランスレータと、
前記メモリ内に記憶された変換キャッシュと、を備え、前記変換キャッシュは1つ以上の変換を記憶し、所与の変換は前記1つ以上のアプリケーションバイナリの少なくとも一部に対応し、前記1つ以上の変換は前記第2の実行環境で実行するためのものであり、
前記1つ以上のアプリケーションバイナリの前記変換は、前記1つ以上のアプリケーションバイナリによって表される前記1つ以上のアプリケーションの前記実行の前に生成された前記1つ以上のアプリケーションバイナリのオブジェクトレベル変換を含み、
前記1つ以上のプロセッサは、前記オペレーティングシステムが前記1つ以上のアプリケーションバイナリの前記実行を要求する場合に、前記ランタイムコードモジュール内の前記1つ以上のアプリケーションバイナリの前記キャッシュされた変換を実行するように構成されている、システム。
【請求項2】
前記第1の実行環境はソース命令セットを含み、前記第2の実行環境は前記ソース命令セットとは異なるターゲット命令セットを含む、請求項1に記載のシステム。
【請求項3】
前記1つ以上のアプリケーションバイナリの前記変換は、前記システムに一意の鍵で暗号化される、請求項1に記載のシステム。
【請求項4】
前記一意の鍵を生成するように構成された、前記1つ以上のプロセッサ及び前記メモリに結合されたセキュアエンクレーブプロセッサ、
を更に備える、請求項3に記載のシステム。
【請求項5】
前記オブジェクトレベル変換は、実行中に前記1つ以上のアプリケーションバイナリによって使用されるライブラリの変換を含む、請求項1に記載のシステム。
【請求項6】
前記オブジェクトレベル変換は、実行中に前記1つ以上のアプリケーションバイナリによって使用されるプラグインの変換を含む、請求項1に記載のシステム。
【請求項7】
前記システムサービスは、前記1つ以上のアプリケーションバイナリに関連付けられた情報に基づいてハッシュ値を生成するように構成されている、請求項1に記載のシステム。
【請求項8】
前記システムサービスは、前記生成されたハッシュ値を前記メモリ内の連想配列に記憶し、前記生成されたハッシュ値を使用して、前記1つ以上のアプリケーションバイナリが前記変換キャッシュ内で利用可能であるかどうかを判定し、前記1つ以上のアプリケーションバイナリが修正されたかどうかを判定する、請求項7に記載のシステム。
【請求項9】
前記1つ以上のアプリケーションバイナリが修正された場合に、前記システムは、
前記1つ以上のアプリケーションバイナリの前記変換を前記変換キャッシュから除去し、
新しい変換を生成する、ように構成されている、請求項8に記載のシステム。
【請求項10】
前記ランタイムコードモジュールは、前記実行中の変換に対応する前記1つ以上のアプリケーションバイナリが書き込み可能にされたかどうかを判定するように構成されており、前記1つ以上のアプリケーションバイナリが書き込み可能にされた場合に、前記システムは、
前記1つ以上のアプリケーションバイナリに関連付けられた変換をグローバル間接分岐テーブルから除去し、
前記除去された変換に直接ジャンプする、前記変換キャッシュに記憶された変換をアンリンクし、
グローバルカウンタを進め、
前記1つ以上のアプリケーションバイナリに関連するスレッドの前記実行を停止し、
前記1つ以上のアプリケーションバイナリに関連する前記スレッドを、前記ランタイムコードモジュールによって実行される前記1つ以上のアプリケーションバイナリのジャストインタイム(JIT)変換に強制し、
前記スレッドの前記実行を再開する、ように更に構成されている、請求項1に記載のシステム。
【請求項11】
前記1つ以上のアプリケーションバイナリが自己修正コードを含むならば、前記システムは、
前記1つ以上のアプリケーションバイナリが記憶される前記メモリ内のページを書き込み保護し、
前記保護されたページへの書き込みを例外ハンドラにトラップし、
前記1つ以上のアプリケーションバイナリに関連付けられた変換を、前記プロセッサ内のグローバル間接分岐テーブルから除去し、
前記除去された変換に直接ジャンプする、前記変換キャッシュに記憶された変換をアンリンクし、
グローバルカウンタを進め、
効化を処理するために、前記自己修正コードに関連するスレッドを要求し、
前記自己修正コードのJIT変換を実行し、
前記変換に関連付けられたメタデータに前記グローバルカウンタ値を記録し、
実行スレッドを前記グローバル間接分岐テーブルの新しいバージョンに更新し、
前記実行スレッドに関連付けられたリターンスタックから除去された変換をクリーンにし、
前記グローバル間接分岐テーブルへのルックアップを介して、前記変換を前記スレッドに挿入し、
全てのスレッドが前記グローバルカウンタ値に達した場合に、変換を開放する、ように構成されている、請求項1に記載のシステム。
【請求項12】
前記1つ以上のプロセッサは、第1の命令セットアーキテクチャにおいて定義された命令を実行するように構成されており、
前記所与の変換は、実行された場合に、前記1つ以上のアプリケーションバイナリの前記一部が実行するのと実質的に同じ動作を実行する、
請求項1に記載のシステム。
【請求項13】
前記システムサービスは、
前記1つ以上のアプリケーションバイナリのうちの所与のアプリケーションバイナリを起動したことに応答して、対応する変換されたコードシーケンスについて前記変換キャッシュをチェックし、
前記変換キャッシュにおいて前記対応する変換を検出することに基づいて、前記対応する変換されたコードシーケンスを前記ランタイムコードモジュールに提供する、ように構成されている、請求項12に記載のシステム。
【請求項14】
前記変換キャッシュ内の前記1つ以上の変換の第1の変換は、対応するアプリケーションバイナリが前記システムにインストールされる際に生成される、請求項12に記載のシステム。
【請求項15】
前記変換キャッシュ内の前記1つ以上の変換の第1の変換は、対応するアプリケーションバイナリが前記システムに最初に起動される際に生成される、請求項12に記載のシステム。
【請求項16】
コンピュータによって実行される方法であって、
システム内で実行するための第1のアプリケーションバイナリを起動することであって、前記第1のアプリケーションバイナリは、第1の実行環境用に書き込まれ、前記システム内の1つ以上のプロセッサは、前記第1の実行環境とは異なる第2の実行環境内でアプリケーションバイナリを実行するように構成されている、ことと、
バイナリトランスレータによって生成された変換されたコードシーケンスが前記システム内の変換キャッシュに記憶されているかどうかを判定することであって、前記バイナリトランスレータは、前記アプリケーションバイナリの第1のアドレス空間において実行可能なシステムサービスと、第2のアドレス空間において実行可能なランタイムコードモジュールとを含み、前記第1のアドレス空間は前記第2のアドレス空間とは別個であり、前記変換されたコードシーケンスが前記変換キャッシュに記憶されているかどうかを判定することは、前記システムサービスによって実行される、ことと、
前記変換されたコードシーケンスが前記変換キャッシュにキャッシュされていないことに基づいて、前記ランタイムコードモジュールによって前記第1のアプリケーションバイナリのジャストインタイム変換を実行することと、
前記変換されたコードシーケンスが前記変換キャッシュにキャッシュされていることに基づいて、前記ランタイムコードモジュール内で前記キャッシュされた変換されたコードシーケンスを実行することと、
を含む、方法。
【請求項17】
システムであって、
第1の命令セットアーキテクチャにおいて定義された命令を実行するように構成された1つ以上のプロセッサと、
前記1つ以上のプロセッサに結合された非一時的コンピュータアクセス可能記憶媒体とを備え、前記非一時的コンピュータアクセス可能記憶媒体は、
前記第1の命令セットアーキテクチャとは異なる第2の命令セットアーキテクチャにおいて定義された命令を有する1つ以上のアプリケーションバイナリと、
前記1つ以上のアプリケーションバイナリの1つ以上の部分に対応する1つ以上の変換されたコードシーケンスを記憶する変換キャッシュであって、前記1つ以上の変換されたコードシーケンスは、実行された場合に、前記1つ以上のアプリケーションバイナリの前記1つ以上の部分が実行するのと実質的に同じ動作を実行する、変換キャッシュと、
前記アプリケーションバイナリの第1のアドレス空間において実行可能なシステムサービスと、第2のアドレス空間において実行可能なランタイムコードモジュールとを含むバイナリトランスレータであって、前記第1のアドレス空間は前記第2のアドレス空間とは別個であり、前記システムサービスは前記変換キャッシュを管理するように構成され、前記ランタイムコードモジュールは、前記変換キャッシュ内に変換されたコードシーケンスがない前記アプリケーションバイナリのジャストインタイム(JIT)変換を管理するように構成されている、バイナリトランスレータと、を記憶する、システム。
【請求項18】
前記システムサービスは、
前記1つ以上のアプリケーションバイナリのうちの所与のアプリケーションバイナリを起動したことに応答して、対応する変換されたコードシーケンスについて前記変換キャッシュをチェックし、
前記変換キャッシュにおいて前記対応する変換されたコードシーケンスを検出することに基づいて、前記対応する変換されたコードシーケンスを前記ランタイムコードモジュールに提供する、ように構成されている、請求項17に記載のシステム。
【請求項19】
前記変換キャッシュをチェックすることは、前記所与のアプリケーションバイナリに基づいて生成されたハッシュ値に基づく、請求項17に記載のシステム。
【請求項20】
前記ハッシュ値は、前記対応する変換されたコードシーケンスが生成された後に前記所与のアプリケーションバイナリが修正されているならば、以前に生成されたハッシュ値とは異なる、請求項19に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書で説明される実施形態は、バイナリ変換に関する。特に、本明細書で説明される実施形態は、キャッシュされた変換を管理するシステムサービスによる迅速な取り出しのために、変換されたバイナリを変換キャッシュにキャッシュすることに関する。
【背景技術】
【0002】
開発者が、第1の実行環境用に書き込まれたアプリケーションが第2の実行環境で実行されることを可能にする標準的な方法は、アプリケーションを第2の実行環境に移植することであり、これは、第2の実行環境用のアプリケーションを再構築及び再コンパイルすることを含む。ポートは、大きなアプリケーションに対して多大な時間及び労力を要する可能性があり、第2の実行環境及びその実行環境のために再コンパイルするための正しいツールの良好な作業知識を必要とする場合がある。アプリケーションが再構築及び再コンパイルされる間のギャップを埋めるために、開発者は、多くの場合、エミュレータ(例えば、インタープリタ及び/又はトランスレータ)を使用して、異なる実行環境上でコードを実行してきた。インタープリタは、通常、第1の実行環境すなわちソース実行環境においてアプリケーション命令を反復的に読み出し、第2の実行環境すなわちターゲット実行環境内のソフトウェア環境において実行されるソース実行環境において動作を実行する。他のエミュレータも同様に動作するが、第2の環境の基礎となるハードウェアの一部を利用して変換を最適化する。例えば、エミュレータは、アプリケーションが第2の環境においてネイティブに実行されているように見え得るように、基礎となるメモリ並びに基礎となるプロセッサ及びシステムを使用し得、アプリケーションは、基礎となるハードウェアの電力及びインタープリタの性能によって決定される速度で実行されている。バイナリトランスレータは、アプリケーションの様々な命令及びコードを第1の実行環境から第2の実行環境に変換する。
【0003】
バイナリトランスレータは、典型的には静的又は動的のいずれかであり得る。静的バイナリトランスレータは、事前に実際にコードを実行することなく、全てのアプリケーションコードを第1の実行環境から第2の実行環境に変換しようと試みる。動的バイナリ変換は、実行中にコードの離散ブロックを変換し、そのコードを含むアプリケーションの実行中に使用するために、変換されたブロックをキャッシュする。PowerPCアプリケーションをx86に変換するために使用されたRosetta動的変換レイヤは、動的バイナリトランスレータの一例である。動的バイナリトランスレータは、変換を必要とするコードの全てを考慮することができるという点でより正確であり得るが、動的変換のためにアプリケーションの実行中により大きなハードウェアオーバーヘッドをもたらすことが多く、これは、ユーザが気付くことができる遅延を伴ってアプリケーションをゆっくりと実行させる可能性がある。更に、変換されているアプリケーションが、変換を必要とするジャストインタイム(JIT)コンパイルを含む場合、これは、アプリケーションが動的バイナリ変換を受けているときに、アプリケーションにおいてユーザが気付く遅延を更に含むことになる。
【発明の概要】
【0004】
一実施形態では、システムは、オペレーティングシステム及び1つ以上のアプリケーションバイナリを記憶するメモリを備え得る。1つ以上のアプリケーションバイナリは、第1の実行環境における実行のために書き込まれてもよい。システムは、第1の実行環境とは異なる第2の実行環境においてアプリケーションバイナリを実行するように構成された1つ以上のプロセッサを更に備えることができる。システムはまた、アプリケーションバイナリとは別個のアドレス空間において実行可能なシステムサービスと、アプリケーションバイナリを有するアドレス空間において実行可能なランタイムコードモジュールとを備えるバイナリトランスレータを備えてもよい。システムサービスは、アプリケーションバイナリの変換を管理するように構成されてもよく、ランタイムコードモジュールは、システムサービスが対応する変換を欠いているアプリケーションバイナリのジャストインタイム(JIT)変換を管理するように構成されてもよい。一実施形態では、システムサービスはまた、ライブラリバイナリ(例えば、オペレーティングシステムによって提供されるライブラリ及び/又はユーザ提供ライブラリ)を管理してもよい。システムは、メモリ内に記憶された永続的変換キャッシュを更に含むことができる。永続的変換キャッシュは、1つ以上の変換を記憶することができ、所与の変換は、1つ以上のアプリケーションバイナリの少なくとも一部分に対応する。1つ以上の変換は、第2の実行環境における実行のためのものであってもよく、1つ以上のアプリケーションバイナリの変換は、1つ以上のアプリケーションバイナリによって表される1つ以上のアプリケーションの実行に先立って生成される1つ以上のアプリケーションバイナリのオブジェクトレベル変換を含んでもよく、1つ以上のプロセッサは、オペレーティングシステムが1つ以上のアプリケーションバイナリの実行を要求するとき、ランタイムコードモジュール内の1つ以上のアプリケーションバイナリのキャッシュされた変換を実行するように構成され得る。
【0005】
一実施形態では、第1の実行環境はソース命令セットを含むことができ、第2の実行環境はソース命令セットとは異なるターゲット命令セットを含むことができる。一実施形態において、コード署名は、1つ以上のアプリケーションバイナリの変換の少なくとも一部を含む各ページについて生成されてもよい。コード署名を記憶するデータ構造は、システムに一意の鍵で暗号化されてもよい(例えば、1つ以上のプロセッサに結合されたセキュアエンクレーブプロセッサ及びメモリは、一意の鍵を生成するように構成されてもよい)。一実施形態では、オブジェクトレベル変換は、実行中に1つ以上のアプリケーションバイナリによって使用されるライブラリの変換を含むことができる。一実施形態では、オブジェクトレベル変換は、実行中に1つ以上のアプリケーションバイナリによって使用されるプラグインの変換を含むことができる。
【0006】
一実施形態では、システムサービスは、1つ以上のアプリケーションバイナリに関連付けられた情報に基づいてハッシュ値を生成するように構成され得る。システムサービスは、生成されたハッシュ値をメモリ内の連想配列に記憶することができる。生成されたハッシュ値を使用して、1つ以上のアプリケーションバイナリが永続的変換キャッシュ内で利用可能であるかどうかを判定し、1つ以上のアプリケーションバイナリが修正されたかどうかを判定することができる。1つ以上のアプリケーションバイナリが修正されているとき、システムは、1つ以上のアプリケーションバイナリの変換を永続的変換キャッシュから除去し、新しい変換を生成するように構成され得る。
【0007】
一実施形態では、ランタイムコードモジュールは、実行中の変換に対応する1つ以上のアプリケーションバイナリが書き込み可能にされたかどうかを判定するように構成され得る。1つ以上のアプリケーションバイナリが書き込み可能にされたとき、システムは、1つ以上のアプリケーションバイナリに関連付けられたターゲットアドレスをグローバル間接分岐テーブルから除去し、除去された変換に直接ジャンプするランタイム変換キャッシュに記憶された変換をアンリンクし、グローバルカウンタを進め、1つ以上のアプリケーションバイナリに関連するスレッドの実行を停止し、1つ以上のアプリケーションバイナリに関連するスレッドを、ランタイムコードモジュールによって実行される1つ以上のアプリケーションバイナリのジャストインタイム(JIT)変換に強制し、スレッドの実行を再開するように更に構成され得る。
【0008】
一実施形態では、1つ以上のアプリケーションバイナリが自己修正コードを含む場合、システムは、1つ以上のアプリケーションバイナリが記憶されているメモリ内のページを書き込み保護し、保護されたページへの書き込みを例外ハンドラにトラップし、1つ以上のアプリケーションバイナリに関連付けられたターゲットアドレスをグローバル間接分岐テーブルから除去し、除去された変換に直接ジャンプする、ランタイム変換キャッシュに記憶された変換をアンリンクし、グローバルカウンタを進め、無効化を処理するために、自己修正コードに関連するスレッドを要求し、自己修正コードのJIT変換を実行し、変換に関連付けられたメタデータにグローバルカウンタ値を記録し、実行スレッドをグローバル間接分岐テーブルの新しいバージョンに更新し、実行スレッドに関連付けられたリターンスタックから除去された変換をクリーンにし、グローバル間接分岐テーブルへのルックアップを介して変換に分岐のターゲットアドレスを挿入し、全てのスレッドがグローバルカウンタ値に達したときに変換を解放する、ように構成され得る。
【0009】
一実施形態では、システムは、第1の命令セットアーキテクチャにおいて定義された命令を実行するように構成された1つ以上のプロセッサと、1つ以上のプロセッサに結合された非一時的コンピュータアクセス可能記憶媒体とを含み得る。非一時的コンピュータアクセス可能記憶媒体は、第1の命令セットアーキテクチャとは異なる第2の命令セットアーキテクチャにおいて定義される命令を有する1つ以上のアプリケーションバイナリと、1つ以上のアプリケーションバイナリの1つ以上の部分に対応する1つ以上の変換されたコードシーケンスであって、1つ以上の変換されたコードシーケンスは、実行されると、1つ以上のアプリケーションバイナリの1つ以上の部分が実行するのと実質的に同じ動作を実行する、1つ以上の変換されたコードシーケンスを記憶する永続的変換キャッシュと、アプリケーションバイナリとは別個のアドレス空間において実行可能なシステムサービスと、アプリケーションバイナリと共にアドレス空間において実行可能なランタイムコードモジュールとを含むバイナリトランスレータと、を記憶し得る。システムサービスは、永続的変換キャッシュを管理するように構成されてもよく、ランタイムコードモジュールは、永続的変換キャッシュ内に変換されたコードシーケンスがないアプリケーションバイナリのジャストインタイム(JIT)変換を管理するように構成されてもよい。
【0010】
一実施形態では、システムサービスは、1つ以上のアプリケーションバイナリのうちの所与のアプリケーションバイナリを起動することに応答して、対応する変換されたコードシーケンスについて永続的変換キャッシュをチェックし、永続的変換キャッシュ内の対応する変換されたコードシーケンスを検出することに基づいて、対応する変換されたコードシーケンスをランタイムコードモジュールに提供するように構成され得る。同様に、所与のアプリケーションバイナリによって使用されるライブラリは、変換されたシーケンスを有してもよく、システムサービスは、起動アプリケーションによって使用される変換されたライブラリについて永続的変換キャッシュをチェックしてもよい。変換されたライブラリは、起動アプリケーションバイナリのために提供され得る。永続的変換キャッシュをチェックすることは、所与のアプリケーション/ライブラリバイナリに基づいて生成されたハッシュ値に基づいてよい。ハッシュ値は、対応する変換されたコードシーケンスが生成された後に所与のアプリケーションバイナリが修正されている場合、以前に生成されたハッシュ値とは異なり得る。一実施形態では、対応するアプリケーションバイナリがシステムにインストールされるときに、変換キャッシュ内の1つ以上の変換されたコードシーケンスのうちの第1の変換されたコードシーケンスが生成される。一実施形態では、対応するアプリケーションバイナリがシステム内で最初に起動されるときに、永続的変換キャッシュ内の1つ以上の変換されたコードシーケンスのうちの第1の変換されたコードシーケンスが生成される。一実施形態では、ランタイム変換キャッシュ内の1つ以上の変換されたコードシーケンスのうちの第1の変換されたコードシーケンスは、対応するアプリケーションバイナリがシステム内で以前に起動されたときに、対応するアプリケーションバイナリのJIT変換として生成される。
【0011】
一実施形態において、方法は、システムにおける実行のために第1のアプリケーションバイナリを起動することを含んでもよい。第1のアプリケーションバイナリは、第1の実行環境のために書き込まれてもよく、システム内の1つ以上のプロセッサは、第1の実行環境とは異なる第2の実行環境においてアプリケーションバイナリを実行するように構成されてもよい。この方法は、バイナリトランスレータによって生成された変換されたコードシーケンスがシステム内の永続的変換キャッシュに記憶されているかどうかを判定することを更に含むことができる。バイナリトランスレータは、アプリケーションバイナリのアドレス空間内で実行可能なランタイムコードモジュールと、異なるプロセス内で実行可能なシステムサービスとを備えてもよく、変換されたコードシーケンスが永続的変換キャッシュ内に記憶されているかどうかを判定することは、システムサービスによって行われてもよい。方法は、変換されたコードシーケンスが変換キャッシュにキャッシュされていないことに基づいて、ランタイムコードモジュールによって第1のアプリケーションバイナリのジャストインタイム変換を実行することを更に含むことができる。本方法は、変換されたコードシーケンスが変換キャッシュにキャッシュされていることに基づいて、ランタイムコードモジュール内でキャッシュされた変換されたコードシーケンスを実行することを更に含むことができる。
【図面の簡単な説明】
【0012】
下記の詳細な説明は、以下に簡単に記載する添付図面を参照する。
【0013】
図1】いくつかの実施形態によるバイナリトランスレータを含むシステムである。
【0014】
図2】いくつかの実施形態による、図1のシステムのディスクストレージ内のバイナリ変換システムを示す図である。
【0015】
図3】いくつかの実施形態による、実行中のシステムメモリにおけるバイナリ変換システムの一実施形態の図である。
【0016】
図4】いくつかの実施形態による、キャッシュされたバイナリ変換を処理する方法を示すフローチャートである。
【0017】
図5】いくつかの実施形態による、キャッシュされた変換に関連付けられたバイナリに対する修正を処理する方法を示すフローチャートである。
【0018】
図6】いくつかの実施形態による、自己修正コードを処理するための方法を示すフローチャートである。
【0019】
図7】いくつかの実施形態による、実行中のキャッシュされた変換に対応する元のバイナリに対する修正を処理する方法を示すフローチャートである。
【0020】
図8】変換されたコードにおける例外又は他の中断(コード停止)を処理する方法の一実施形態を示すフローチャートである。
【0021】
この開示で説明する実施形態には、各種の変更形態及び代替形態の余地があり得るが、その具体的な実施形態を例として図面に示し、本明細書で詳細に説明する。しかし、図面及び図面に関する詳細な説明は、開示する特定の形態に実施形態を限定することを意図しておらず、むしろその意図は、添付の請求項の趣旨及び範囲に含まれる全ての変更形態、均等形態、及び代替形態を網羅することであることを理解されたい。本明細書において用いられる表題は、構成を目的とするに過ぎず、説明の範囲を制限するために用いることを意図していない。
【発明を実施するための形態】
【0022】
図1は、いくつかの実施形態による、バイナリトランスレータを含むシステム100である。図1に示すように、システム100は、プロセッサ102、メインメモリ104、入力/出力(I/O)回路106、GPU108、様々な周辺機器110、及びディスクストレージ112を含む。プロセッサ102、システムメモリ104、I/O106、GPU108、周辺機器110、及びディスクストレージ112は、システム構成要素102~112がバス114のエージェントであるように、バス114を介して互いに結合されてよい。
【0023】
プロセッサ102は、1つ以上のコア116-1~116-N及びプロセッサキャッシュ118を含んでもよい。様々な実施形態では、プロセッサ102は、計算動作を実行する汎用プロセッサを表すことができる。例えば、プロセッサ102は、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はフィールドプログラマブルゲートアレイ(FPGA)などの中央処理ユニット(CPU)とすることができる。プロセッサ102は、スタンドアロン構成要素であってもよく、又は他の構成要素(例えば、他のプロセッサ、又はシステムオンチップ(SOC)の他の構成要素)を有する集積回路上に集積されてもよい。プロセッサ102は、他の構成要素を有するマルチチップモジュール(MCM)内の構成要素であってもよい。
【0024】
いくつかの実施形態と一致して、プロセッサ102は、プロセッサ102及びプロセッサコア116-1~116-Nによって実装される命令セットアーキテクチャ(ISA)などの実行環境において定義された命令を実行するように構成され得る。ISAは、Intelによって開発されたオリジナルのx86 ISA、及びAMD及びIntelによって開発された関連するx86-64 ISA、ARMホールディングスからのARM及びAArch64 ISA、IBM/MotorolaからのPower ISA及びPowerPC ISA、RISC-V ISAなどを含むことができる。命令は、命令セットアーキテクチャにおいて定義され、メモリにおけるそのコーディング、その動作、並びにレジスタ、メモリ位置、及び/又は他のプロセッサ状態に対するその影響を含む。ISAの所与の実装は、各命令を直接実行することができるが、その形式は、プロセッサ102内の復号及び他の操作によって変更されることができる。別の実装形態は、コア116-1~116-Nによる実行のために、少なくともいくつかの命令を複数の命令動作に復号することができる。いくつかの命令は、いくつかの実施形態において、マイクロコード化され得る。したがって、「命令動作」という用語は、コア116-1~116-Nが単一のエンティティとして実行するように構成されている動作を指すために本明細書で使用され得る。命令は、命令動作と1対1の対応を有してもよく、場合によっては、命令動作は命令であってもよい。命令はまた、命令動作と1対複数(1対多数)の対応関係を有することができる。命令動作は、本明細書ではより簡単に「op」と呼ばれることがある。
【0025】
コア116-1~116-Nは、様々な実行ユニットを含むことができ、各実行ユニットは、様々なタイプの演算(例えば、整数、浮動小数点、ベクトル、マルチメディア、ロード/ストアなど)を実行するように構成される。コア116-1~116-Nは、異なる数のパイプラインステージ及び分岐予測などの様々な他の性能向上特徴を含むことができる。コア116-1~116-Nは、命令復号ユニット、スケジューラ、又は予約ステーション、並べ替えバッファ、メモリ管理ユニット、I/Oインターフェースなどのうちの1つ以上を含むことができる。
【0026】
プロセッサキャッシュ118は、揮発性メモリでも不揮発性メモリでもよい。いくつかの実施形態において、プロセッサキャッシュ118は、スタティックランダムアクセスメモリ(SRAM)であってもよい。更なるプロセッサキャッシュは、命令キャッシュ及びデータキャッシュを含んでもよい。プロセッサキャッシュ118は、レベル1(L1)、L2、L3などの1つ以上のキャッシュレベルの階層として編成され得る。
【0027】
プロセッサ102はまた、いくつかの実施形態では、セキュアエンクレーブプロセッサ(SEP)119を含んでもよい。SEPは、それ自体のプロセッサ及び1つ以上のセキュリティ周辺機器を含む、プロセッサ102内の自己完結型システムオンチップ(SOC)であり得る。SEP119は、SEP119へのアクセスが厳密に制御され得るように、プロセッサ102の残りの部分から分離され得る。例えば、プロセッサ102は、メールボックス機構を介してSEP119と通信することしかできない場合があり、プロセッサ102は、メッセージをメールボックスに書き込むことができ、SEP119は、メールボックスを介してそのメッセージを読み出して応答することができる。
【0028】
一実施形態では、SEP119は、システム100の暗号鍵を管理することができる。一実施形態では、システム100上で実行されるソフトウェアは、鍵を要求することができ、システム100は、要求しているソフトウェアに対して「ラップされた」鍵を生成することができる。ラップされた鍵は、ラッピング鍵を使用して暗号化され、ラップ鍵は、SEP119内の暗号ハードウェアにハードウェアで送信される。ラッピング鍵を使用して、SEP内の受信側暗号ハードウェアは、ソフトウェアによって提供されたラップされた鍵を復号し、使用されるべき実際の鍵を取得することができる。安全でないソフトウェアは、実際の鍵にアクセスできない場合がある。
【0029】
ディスクストレージ112は、揮発性及び/又は不揮発性メモリを含んでもよく、システム100のための長期ストレージデバイスとして機能してもよい。ディスクストレージ112は、プロセッサ102によって実行されると、システム100に1つ以上のステップ、動作、又は機能を実行させることができ、ソフトウェアアプリケーションを含むことができる1つ以上のアプリケーション120を記憶することができる。アプリケーション120は、1つ以上のバイナリを備えることができる。アプリケーション120は、特定の命令セットアーキテクチャなどの特定の実行環境における実行のために書き込まれてもよい。いくつかの実施形態では、アプリケーション120が書き込まれる実行環境は、プロセッサ102が実行するように設計された実行環境とは異なる実行環境である。そのような実施形態では、アプリケーション120は、ソース実行環境のために書き込まれていると見なされるが、プロセッサは、ターゲット実行環境において実行することができる。全体を通して説明されるように、システム100は、第1の実行環境又はソース実行環境のために書き込まれたアプリケーションバイナリを、第2の実行環境又はターゲット実行環境について書き込まれたアプリケーションバイナリを変換することが可能であり得る。図1に戻ると、ディスクストレージ112は、永続的変換キャッシュ122及びオペレーティングシステム124を含むことができる。オペレーティングシステム124は、MacOS Xなどの任意の周知のオペレーティングシステムのための命令及びフレームワークを含むことができる。
【0030】
より一般的には、ディスクストレージ112及び/又はメインメモリ104は、コンピュータアクセス可能記憶媒体の例であってもよい。一般的に、コンピュータアクセス可能な記憶媒体は、コンピュータに命令及び/又はデータを提供するために使用時にコンピュータによりアクセス可能である任意の記憶媒体を含み得る。例えば、コンピュータアクセス可能な記憶媒体は、磁気又は光学媒体、例えば、(固定された又は取り外し可能な)ディスク、テープ、CD-ROM、DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW又はブルーレイなどの記憶媒体を含み得る。記憶媒体は、RAM(例えば、シンクロナスDRAM(SDRAM)、Rambus DRAM(RDRAM)、スタティックRAM(SRAM)など)、ROM、又はフラッシュメモリなどの、揮発性又は不揮発性メモリ媒体を更に含み得る。記憶媒体は、それが命令/データを提供するコンピュータ内に物理的に搭載され得る。代わりに、記憶媒体は、コンピュータに接続されてもよい。例えば、記憶媒体は、ネットワーク接続ストレージのように、ネットワーク又は無線リンクを介してコンピュータに接続され得る。記憶媒体は、ユニバーサルシリアルバス(USB)などの周辺装置インターフェースにより接続され得る。概して、コンピュータアクセス可能記憶媒体は、非一時的な方法でデータを記憶し得、非一時的とは、この文脈上、命令/データを信号上で伝達しないことを意味し得る。例えば、非一時的なストレージは、揮発性(記憶された命令/データを電源切断イベントに応じて失い得る)でもよく、不揮発性でもよい。コンピュータアクセス可能記憶媒体は、永続的変換キャッシュ122、アプリケーション120、及び/又はオペレーティングシステム124など、図1に示す様々な構成要素を記憶することができる。
【0031】
I/O回路106及び/又は周辺機器110は、システム100に含まれる追加のハードウェア機能の任意のセットであってもよい。例えば、周辺機器110は、カメラ又は他の画像センサからの画像キャプチャデータを処理するように構成された画像信号プロセッサなどのビデオ周辺機器、図1に示すGPU108などのグラフィックス処理ユニット(GPU)、ビデオエンコーダ/デコーダ、スケーラ、ローテータ、ブレンダ、ビデオディスプレイコントローラ、入力デバイスとして機能するようにタッチ感知技術と統合されたディスプレイを含む液晶ディスプレイ(LCD)などのディスプレイ、有機LED(OLED)などの発光ダイオードディスプレイ(LED)、プラズマディスプレイなどを含み得る。周辺機器は、マイクロフォン、スピーカ、マイクロフォン及びスピーカへのインターフェース、オーディオプロセッサ、デジタル信号プロセッサ、ミキサなどのオーディオ周辺機器を含むことができる。I/O回路106は、ユニバーサルシリアルバス(USB)、PCIエクスプレス(PCIe)を含む周辺構成要素インターコネクト(PCI)、シリアル及びパラレルポートなどのインターフェースを含むシステム外部の様々なインターフェースのためのインターフェースコントローラを含んでもよい。周辺機器は、メディアアクセスコントローラ(MAC)などのネットワーク周辺機器を含むことができる。ハードウェアの任意のセットが、周辺機器110及び/又はI/O回路106として含まれ得る。周辺機器は、キーボード、マウス、又は他のポインティングデバイス等の他のユーザインターフェースデバイスを含んでもよい。
【0032】
バス114は、通信ファブリックの一例であってよい。一般に、通信ファブリックは、システム100の構成要素間で通信するための任意の通信相互接続及び通信プロトコルであり得る。通信ファブリックは、共有バス構成、クロスバー構成、及びブリッジを有する階層バスを含めて、バスベース(例えば、バス114)であり得る。通信ファブリックはまた、パケットベースとすることができ、ブリッジを有する階層構造、クロスバー、ポイントツーポイント、又は他の相互接続とすることができる。
【0033】
メインメモリ104は、メモリコントローラ及び1つ以上のメモリデバイスを含むことができる。メモリコントローラは、システム100の他の構成要素からのメモリ動作を受信して、メモリ動作を完了するためにメモリデバイスにアクセスする回路を、通常、含むことができる。メモリコントローラは、任意の形式のメモリデバイスにアクセスするように構成することができる。例えば、メモリデバイスは、スタティックランダムアクセスメモリ(static random access memory)(SRAM)、ダブルデータレート(DDR、DDR2、DDR3、DDR4など)DRAMを含むシンクロナスDRAM(synchronous DRAM)(SDRAM)などの動的RAM(dynamic RAM)(DRAM)であり得る。DDR DRAMの低電力/モバイルバージョン(例えば、LPDDR、mDDRなど)がサポートされ得る。メモリコントローラは、動作を順序付けし(及び場合によっては再順序付けし)、かつメモリデバイスに対する動作を提示するための、メモリ動作の待ち行列を含み得る。メモリコントローラは、メモリデバイスへの書き込みを待っている書き込みデータ、及びメモリ動作の送信元への返送を待っている読み出しデータを記憶するためのデータバッファを更に含んでもよい。いくつかの実施形態では、メモリコントローラは、最近アクセスされたメモリデータを記憶するためのメモリキャッシュを含み得る。一部の場合には、メモリキャッシュは、特定の構成要素だけに貢献するプロセッサキャッシュ118などの専用のキャッシュとは対照的に、システムキャッシュと呼ぶこともできる。メインメモリ104は、アプリケーション120、永続的変換キャッシュ122から読み出された対応する変換、オペレーティングシステム124など、実行のための様々なコードを記憶することができる。一実施形態では、様々なランタイムデータ構造がメインメモリ104内にも存在することができる。例えば、メインメモリ104は、グローバル間接分岐テーブル117を記憶することができる。グローバル間接分岐テーブル117は、アプリケーション120からの間接分岐ターゲットアドレスを、対応する変換されたコードシーケンスにおける間接分岐ターゲットアドレスにマッピングするために、バイナリトランスレータによって管理されるデータ構造であってもよい。
【0034】
いくつかの実施形態では、永続的変換キャッシュ122は、1つの実行環境のために開発又は書き込まれたバイナリの、第1の実行環境とは異なる第2の実行環境への変換を含むことができる。バイナリは、実行ファイル、アプリケーション、リンカ、ライブラリなどを含むことができる。いくつかの実施形態において、バイナリは、Mach-Oオブジェクトを含んでもよい。いくつかの実施形態では、変換キャッシュに記憶された変換されたバイナリは、システム100に一意のSEP119によって生成された鍵を使用して署名されてもよく、その結果、変換が署名されない限り、変換はシステム100に利用可能ではない。更に、永続的変換キャッシュ122は、オペレーティングシステム124と共にディスクストレージ112の読み出し/書き込みパーティション内に常駐することができる。より具体的には、所与のバイナリの変換は、プロセッサ102によって実行されると、システム100に、バイナリが書き込まれた第1の実行環境(例えば、ISA)を実装したシステムにおいてシステムが実行したであろうシステム100における実質的に同じ動作を実行させることができる。第2の実行環境は第1の実行環境と異なるので、動作にはいくつかの違いがあり得る。例えば、場合によっては、プロセッサ120によって実装されるISA内の複数の命令を使用して、バイナリが書き込まれたISA内の単一の命令と同じ動作を実行することができる。したがって、バイナリの実行中に経過する時間量は、元のバイナリをその元の実行環境で実行することと比較して異なることがある。しかしながら、元のバイナリの機能性は、例えば、変換されたバイナリにおいて同一に維持され得る。
【0035】
図2は、いくつかの実施形態による、システム100のディスクストレージ112内のバイナリ変換システム200を示す図である。図2に示されるように、バイナリ変換システム(又は単に「バイナリトランスレータ」)200は、システムサービス202及びランタイムコードモジュール204を含む。いくつかの実施形態において、ランタイムコードモジュール204は、ディスクストレージ112内のアプリケーション120に対応するアドレス空間に存在し、変換されたアプリケーション120が第2の実行環境において実行される場所である、ランタイムサービスである。システムサービス202は、永続的変換キャッシュ122に記憶された変換へのアクセスを管理し、自己修正コード又は他の動的に修正されたコードの場合に永続的変換キャッシュ122に記憶された変換のコヒーレンシを管理する役割を果たすことができる。システムサービス202は、キャッシュされた変換が存在しないか、又は無効化されているときに変換のスケジューリングを管理することができ、変換を実行することができる。特に、システムサービス202は、永続的変換キャッシュ122への呼び出しを処理し、アプリケーション120の1つ以上のバイナリ206-1~206-N(以下、バイナリ206と呼ぶ)に関連付けられたハッシュ値を決定し、グローバルハッシュテーブル208に書き込み、そこからルックアップを実行する役割を担うことができる。いくつかの実施形態では、システムサービス202は、オペレーティングシステム124からのプロセス間通信(IPC)コールを介してバイナリトランスレータ202への要求を処理することができる。ランタイムコードモジュール204は、ジャストインタイム(JIT変換)の処理を担当することができ、実行中にアプリケーションによって更新されたレジスタ(例えば、アプリケーション120が最初に書き込まれたソースISA又は実行環境内で定義されたレジスタ)の状態を監視することも担当することができる。
【0036】
図2に更に示すように、アプリケーション120は、アプリケーションバイナリ206を含む。前述したように、バイナリ206は、実行ファイル、アプリケーション、リンカ、ライブラリなどを含むことができる。いくつかの実施形態において、バイナリ206は、Mach-Oオブジェクトを含んでもよい。いくつかの実施形態では、ディスクストレージは、複数のアプリケーション、サービス、及び/又はオペレーティングシステム124自体によって利用され得るライブラリ及びキャッシュを記憶し得る共有ライブラリ及び/又は共有キャッシュ210を更に含み得る。
【0037】
いくつかの実施形態において、バイナリ206は、オペレーティングシステム124に関連付けられた標準又は信頼できるインストールプロセスを介してシステム100にインストールされるときに変換されてもよい。変換プロセスは、インストールの一部として(例えば、変換が完了するまでインストールが完了しなくてもよい)、又はインストール中及び/もしくはインストール後のバックグラウンドプロセスとして実行されてもよい。サイドローディング又はリムーバブルディスク媒体を介するなどの他のインストールの場合、バイナリトランスレータ200は、アプリケーション120の最初の起動時又は任意のバイナリ206の最初の使用時にバイナリ206を変換することができる。バイナリ206が、誤形成又は誤予測による変換失敗に起因して変換され得ない場合、ランタイムコードモジュール204は、システム100がアプリケーション120を実行しようと試みるときに、そのバイナリ206に関連付けられた命令のより小さいセットを変換するジャストインタイム(JIT)変換プロセスを含む。オペレーティングシステム124が更新されているとき、システムサービス202は、永続的変換キャッシュ122内の全てのキャッシュされた変換を削除し、バックグラウンドプロセスを開始して、以前にキャッシュされていた全てのバイナリ206を再変換することができる。更に、バイナリトランスレータ200がシステム100に追加されるとき、バイナリトランスレータ100は、オペレーティングシステム124に関連する共有ライブラリ及び共有キャッシュ210を変換することができる。
【0038】
第2の実行環境で使用するための第1の実行環境での実行のために書き込まれたバイナリの変換を実行するために、システムサービス202は、バイナリ206への1つ以上のエントリポイントを識別して、コードであって変換を必要とする可能性があるバイナリの潜在的な部分を決定することができる。いくつかの実施形態では、第1の実行環境は、可変サイズ命令に対するサポートを含むことができ、第2の実行環境は、固定サイズ命令に対するサポートのみを含むことができる。これらの実施形態では、システムサービス202は、命令のサイズに基づいて命令境界を知らない場合があるので、途中の複数のステップで変換のための潜在的に有効な命令を見つけることができる。システムサービス202は、動的リンカのために静的リンカによって提供される情報を使用して、バイナリ206へのエントリポイントを識別してもよい。特に、いくつかの実施形態では、オペレーティングシステム124は、アプリケーションを共有ライブラリ210にリンクし、リンク時にアプリケーション120がコード化されるディスクストレージ112内のアドレスポイントに特定のコードを配置する動的リンカを含むことができ、これにより、アプリケーション120は、動的リンカと直接対話する代わりに動的リンカを利用する必要があるときに、マシン固有の呼び出しを使用するか、又はそれらのアドレスポイントのうちの1つに命令をジャンプすることができる。システムサービス202は、変換を必要とするコードを識別するためのエントリポイントとして、これらの特定のアドレスポイントを利用することができる。エントリポイントが識別され、変換を必要とするコードが識別されると、システムサービス202は、第1の実行環境用に書き込まれた識別されたコードを、第2の実行環境で実行可能なコードに変換することができる。システムサービス202は、変換をディスクストレージ112内の永続的変換キャッシュ122に保存し、アプリケーションバイナリ206のハッシュを実行し、そのハッシュを配列208に記憶することによって、連想配列208を更新することができる。
【0039】
図3は、動作中のメインメモリ104の一実施形態を示すブロック図である。アドレス空間の様々な部分は、オペレーティングシステム124によって、システムサービス空間320及びユーザ(又は非特権)空間322としてマッピングされ得る。例えば、オペレーティングシステム124は、変換におけるページ属性の1つとして、仮想アドレスから物理アドレスへの変換機構における特権空間又はユーザ空間322としてメモリのページを定義することができる。特権空間は、オペレーティングシステム124自体が実行するアドレス空間、又はカーネルベースの実施形態におけるオペレーティングシステム124の少なくともカーネル部分であってもよい。ユーザ空間322は、アプリケーション120が実行される空間であってもよい。システムサービス空間320はまた、ユーザ空間であってもよいが、変換されたアプリケーションが実行されるアドレス空間とは別個であってもよい(例えば、システムサービスは、変換されたアプリケーションとは異なるプロセスであってもよいが、ランタイムコードモジュール204は、変換されたアプリケーションのアドレス空間において実行されてもよい)。一般に、ユーザ空間322内で実行されるコードは、オペレーティングシステム124がそれ自体のために確保するクリティカルプロセッサ状態を制御する特定の命令を実行することを許可されない場合がある。
【0040】
前述のように、システムサービス202は、システムサービス空間320内で実行することができ、永続的変換キャッシュ122を維持することができる。永続的変換キャッシュ122。永続的変換キャッシュ122は、変換されたコードがプロセッサ102によって実行され得るようにユーザ空間内にあり得るが、永続的変換キャッシュ122へのアクセスは、システムサービス202によって制御され得る(例えば、所与のアプリケーション120が実行のために呼び出されたときに、ハッシュを生成し、変換をチェックする)。代替的に、永続的変換キャッシュ122からの変換は、対応するアプリケーションが起動されたとき、又はキャッシュ変換に対応するエントリポイントが呼び出されたとき、メモリにマッピングされ得る。変換はメモリにロードされてもよく、変換へのポインタがランタイムコードモジュール204に提供されてもよい。変換は、ユーザ空間322内のアプリケーションのアドレス空間にロードすることができる。複数のスレッドが同じ変換を実行している場合、変換は、各スレッドのアドレス空間にマッピングされ得る。あるいは、スレッドは、変換の共通コピーを共有してもよい。変換が永続的変換キャッシュ122からロードされる他の時点があってもよい。例えば、動的リンカは、様々な動的にリンクされたライブラリをアプリケーションにリンクすることができる。動的にリンクされたライブラリが第1の実行環境のために書き込まれている場合、動的リンカは、永続的変換キャッシュ122内に変換があるかどうかをランタイムコードモジュール204が判定することを要求することができる。ランタイムコードモジュール204は、変換があるかどうかを判定するためにシステムサービスに問い合わせてもよく、変換のサイズを判定してもよい。代替として、動的リンカは、システムサービスにクエリを行い、ランタイムコードモジュールにサイズを提供し、変換されたライブラリのためにメモリを割り当ててもよい。動的リンカは、元のライブラリコードをロードすることができ、ランタイムコードモジュール204が対応する変換をロードし、変換へのポインタを提供することを要求することができる。
【0041】
上述したように、ランタイムコードモジュール204は、ユーザ空間322において(より具体的には、アプリケーション120がプロセッサ102のISAとは異なるISAに書き込まれている場合、アプリケーション120のアドレス空間において)実行される。ランタイムコードモジュール204は、アプリケーション120のための対応する変換又はその一部が永続的変換キャッシュ122内で見つからないとき、ランタイムコードモジュール204によって生成されたJIT変換のためにランタイム変換キャッシュ122を維持することができる。
【0042】
一実施形態では、ランタイムコードモジュール204によって生成されたJIT変換は、永続的変換キャッシュ122内の変換としてインストールすることもできる。JIT変換は、アプリケーションが実行されるときに動的に生成されるアプリケーション120の小さな部分をカバーすることが多いが、JIT変換がアプリケーション全体の十分に大きな部分(例えば、閾値量)をカバーし始める場合、JIT変換は、システムサービス202によって永続的変換キャッシュ122にインストールされ、後の時点で実行するために保持されてもよい。他の実施形態では、JIT変換は、永続的変換キャッシュ122にインストールされなくてもよく、したがって、対応するアプリケーションが呼び出されるたびにランタイムコードモジュール204によって生成されてもよい。更に別の実施形態では、JIT変換の生成は、永続的変換キャッシュ122にインストールされるべき変換を考慮するためのバイナリトランスレータ200へのヒントとして働くことができる。バイナリトランスレータ200が、変換が実行されるべきであると決定した場合、バイナリトランスレータ200は、JIT変換とは別に変換を実行することができ、別個に生成された変換を永続的変換キャッシュ122にインストールすることができる。様々な要因が、JIT変換が永続的変換キャッシュ122の変換を引き起こすかどうかを決定することができる(例えば、JIT変換が使用される頻度、又はアプリケーションの異なる実行中に経時的に生成される頻度、JIT変換が自己修正コードによるものであり、それによって自己修正コードが永続的変換キャッシュ122にインストールされない可能性があるかどうかなど)。
【0043】
共有ライブラリ/キャッシュ210はまた、ユーザ空間322内にあってもよく、又は特権空間もしくは空間の組み合わせ内にあってもよい(例えば、ライブラリ210は、ライブラリごとに特権空間又はユーザ空間322内にあってもよい)。
【0044】
図4は、いくつかの実施形態による、キャッシュされたバイナリ変換を処理する方法400を示すフローチャートである。図4に示されるように、アプリケーション120が呼び出されると(ステップ402)、アプリケーション120が第1の実行環境のために書き込まれたかどうかを判定するためにチェックが行われ得る(ステップ404)。いくつかの実施形態では、アプリケーション120などのアプリケーションは、それらの命令を実行することができるプロセッサを必要とする、x86又はx86-64などの第1の実行環境における実行のために書き込まれた1つ以上のバイナリ206を含むことができる。アプリケーション120が、第1の実行環境のために書き込まれておらず、代わりに、例えばARM又はAArch64であり得る第2の実行環境内でネイティブに動作することが可能である場合、アプリケーション120はネイティブに動作し得る(ステップ406)。アプリケーション120が第1の実行環境用に書き込まれている場合、バイナリ変換システム200のシステムサービス202に渡すことができる(ステップ408)。いくつかの実施形態では、アプリケーションをシステムサービス202に渡すためのコードは、ランタイムコードモジュール204の一部であってもよい。システムサービス202は、アプリケーションの1つ以上のバイナリ206及び/又はバイナリ206自体に関連付けられたメタデータに基づいてハッシュ値を計算し、生成されたハッシュを連想配列208内の1つ以上のハッシュ値と比較して、キャッシュされた変換が永続的変換キャッシュ122内に存在するかどうか、又は予想されるキャッシュされた変換が利用可能でないかどうかを判定することができる(ステップ410)。配列208において一致が見つかった場合、キャッシュされた変換は、キャッシュされた変換へのアクセスを(システムサービス202によってランタイムモジュール204に)許可することによって使用され得る。キャッシュされた変換は、標準オペレーティングシステムコールを使用して、メモリに(例えば、図3に示されるようなアプリケーションのユーザアドレス空間322に)マッピングされ得る(ステップ412)。次いで、変換されたアプリケーションバイナリは、ランタイムコードモジュール204内の第2の実行環境において実行され得る(ステップ414)。ハッシュが一致しない場合、アプリケーション120は以前に変換されていない可能性がある。この場合、システムサービス202は、アプリケーションバイナリ206を変換し(ステップ416)、得られた変換を永続的変換キャッシュ122にインストールするバックグラウンドプロセスを開始することができる。並行して、ランタイムコードモジュール204は、現在の実行のためのコードのJIT変換を生成することができる。JIT変換は、ランタイムコードモジュール204内の第2の実行環境において実行することができる(ステップ414)。
【0045】
図5は、いくつかの実施形態による、キャッシュされた変換に関連付けられたバイナリに対する修正を処理する方法500を示すフローチャートである。図5に示すように、アプリケーション120が呼び出されると(ステップ502)、(例えば、図4の実施形態と同様に)アプリケーションが第1の実行環境のために書き込まれたかどうかを判定するためにチェックが行われてもよい(ステップ504)。いくつかの実施形態では、アプリケーション120などのアプリケーションは、それらの命令を実行することができるプロセッサを必要とする、x86又はx86-64などの第1の実行環境における実行のために書き込まれた1つ以上のバイナリ206を含むことができる。アプリケーション120が、第1の実行環境のために書き込まれておらず、代わりに、例えばARM又はAArch64であり得る第2の実行環境内でネイティブに動作することが可能である場合、アプリケーションはネイティブに動作し得る(ステップ506)。アプリケーションが第1の実行環境用に書き込まれている場合、ランタイムコードモジュール204によってバイナリ変換システム200のシステムサービス202に渡されてもよい(ステップ508)。システムサービス202は、アプリケーションの1つ以上のバイナリ206又はバイナリ206自体に関連付けられたメタデータに基づいてハッシュ値を計算し、ハッシュを連想配列208内の1つ以上の値と比較して、キャッシュされた変換が永続的変換キャッシュ122内に存在するかどうか、又はアプリケーションが修正されたかどうかを判定することができる(ステップ510)。配列208において一致が見出される場合、キャッシュされた変換は、キャッシュされた変換へのアクセスを許可することによって使用され得、次いで、キャッシュされた変換は、標準オペレーティングシステムコールを使用して、その特定のアプリケーションをメモリ上にマッピングし得る(ステップ512)。変換は、ランタイムコードモジュール204を用いて第2の実行環境において実行され得る(ステップ520)。ハッシュが一致しない場合、アプリケーション120は修正されており、新しい変換を必要とする可能性がある。この場合、システムサービス202は、キャッシュされた変換を除去することができ(ステップ514)、システムサービス202は、新しい変換を生成することができ(ステップ516)、次いで、生成された新しい変換をランタイムコードモジュール204に送信して(ステップ518)、ランタイムコードモジュール204内の第2の実行環境内で実行することができる(ステップ520)。
【0046】
いくつかの実施形態と一致して、バイナリ変換システム200は、マルチスレッドリソースを管理することもできる。いくつかの実施形態では、ランタイムコードモジュール204は、そのリソースを管理するために特定の時間ベースの処理を使用することができ、これはエポックベースの再利用として知られている。エポックベースの再利用では、システム100上の各実行スレッドは、スレッドがランタイムコードモジュール204を最後に終了し、共有状態への任意のポインタを破棄したときを示す現在のエポックに関連付けられ得る。スレッドは、他のスレッドがそれらのエポックを進めること、又は少数のタスクのうちの1つを実行することを非同期的に要求することができる。全てのスレッドが十分に最近のエポックまで進んだとき、共有リソースの割り当てを解除することが可能である。
【0047】
図6は、いくつかの実施形態による、自己修正コードを処理するための方法600を示すフローチャートである。いくつかの実行環境、例えば、x86及びx86-64は、アプリケーションが自己修正コードを採用することを可能にし、バイナリ変換システム200はまた、自己修正コードを取り扱うことが可能であり得る。いくつかの実施形態では、第1の実行環境は、データキャッシュと命令キャッシュとの間、並びに命令パイプラインの間のコヒーレンスを積極的に維持することができ、命令パイプラインは、自己修正コードが生成されるときに自己修正コードを呼び出すことができる。そのような自己修正コードを処理するために、バイナリ変換システム200は、最初に、第2の実行環境のために書き込まれたコードに変換された第1の実行環境のために書き込まれたバイナリ206のメモリ内の任意のコードページを書き込み保護することができる(ステップ602)。次いで、ストア命令、又はシステムコールなどを介してメモリ内のそのページを修正しようとする試みのいずれかであり得る書き込みが発生した場合、システムサービス202は、その書き込みをランタイムコードモジュール204内の例外ハンドラにトラップし得る(ステップ604)。次いで、ランタイムコードモジュール204内の例外ハンドラは、グローバル間接分岐テーブル117からそのページへの任意の分岐ターゲットを除去し(ステップ606)、影響を受ける変換に直接ジャンプする任意の変換をアンリンクすることができる(ステップ608)。次いで、例外ハンドラは、グローバルエポックカウンタを進め(ステップ610)、他の全てのスレッドがこのコード無効化を処理することを非同期的に要求し(ステップ612)、影響を受けた変換の各々について、進められたグローバルエポックカウンタ値をメタデータに記録し得る(ステップ614)。非同期要求を処理するとき、他のスレッドは、間接分岐テーブル117の最新バージョンに更新し、それらのリターンスタックキャッシュから除去された変換をクリーンにし(又は単にキャッシュ全体をクリアし)(ステップ616)、間接分岐テーブル117からの新しいルックアップを実行することによって変換されたコードを入力する(ステップ618)。次いで、元のスレッドの実行は、書き込みのトラップを継続することができる。他の全てのスレッドが新しく更新されたエポックに到達すると、影響を受けた変換はロックから解放され、実行に進むことができる(ステップ620)。方法600は、一実施形態において、アプリケーションのアドレス空間内のランタイムコードモジュール204によって処理され得ることに留意されたい。
【0048】
図7は、いくつかの実施形態による、実行中のキャッシュされた変換に対応する元のバイナリに対する修正を処理する方法700を示すフローチャートである。図6に示されるように、キャッシュされた変換がランタイムコードモジュール204内で実行されているとき(ステップ702)、ランタイムコードモジュール204は、現在実行されているキャッシュされた変換に対応する元のバイナリが書き込み可能にされたことを判定してもよい(ステップ704)。いくつかの例では、キャッシュされた変換に対応するアプリケーション120は、バイナリが修正される可能性が高いことを示すバイナリを書き込み可能にすることによって、実行中にバイナリ206を修正することができ、これにより、バイナリ206の以前にキャッシュされた変換を無効にすることができる。次いで、ランタイムコードモジュール204内の例外ハンドラは、グローバル間接分岐テーブル117からそのページへの任意の分岐ターゲットを除去し(ステップ706)、影響を受ける変換に直接ジャンプする任意の変換をアンリンクすることができる(ステップ708)。一実施形態において、バイナリトランスレータ200は、変換エントリポイントである元の(変換されていない)コードアドレスから対応する変換自体へのマッピングを維持することができる。マッピングは、バイナリトランスレータ200が順序付けられたクエリを効率的に実行することを可能にする。影響を受けた変換が、所与のページ内のコードへの書き込みに対して無効化されるとき、そのエージ内の任意のアドレスに対するマッピングを無効化することができる。例外ハンドラは、グローバルエポックカウンタを進めることができる(ステップ710)。次いで、ランタイムコードモジュール204は、オペレーティングシステム124にメッセージを送信して、全ての実行スレッドを停止させることができる(ステップ712)。次いで、ランタイムコードモジュール204は、いずれかのスレッドがキャッシュされた変換を実行していたかどうかをチェックすることができ、実行していた場合、ランタイムコードモジュール204は、それらをランタイムコードモジュール204によって生成されたJIT変換に強制的にリダイレクトする(ステップ714)。例えば、各スレッドのスレッド固有コンテキストは、スレッドが観察した最後のグローバルエポック変更を示す変数を含むことができる。変数は、スレッドによってアトミックに書き込まれ、他のスレッドによってアトミックに読み出され得る。ランタイムコードモジュールは、ランタイムコードモジュール204内の第2の実行環境において全てのスレッドの実行を再開することができる(ステップ716)。いくつかの実施形態において、JIT変換は、ディスクストレージ112にキャッシュされず、ランタイムコードモジュール204の書き込み可能アドレス空間内に一時的に保存されるだけである。
【0049】
いくつかの実施形態では、バイナリ変換システム200はまた、間接分岐を処理することができる。特に、間接分岐ルックアップは、グローバル間接分岐テーブル117を使用して実行することができ、複数のスレッドは同期なしにテーブルを読み出すことができるが、ライタはテーブルを修正するためにロックをかける。テーブル117のサイズが増大すると、ローカルテーブルポインタを最新バージョンを指すように更新するスレッドのみが新しいバージョンを取得し、これは、スレッドがランタイムコードモジュール204から変換されたコードに戻るときに必要に応じて行われる。いくつかの実施形態では、(テーブルが成長した後の)古いテーブル117バージョンの再利用は、エポックベースの再利用を使用して処理される。テーブル117は線形にプローブされるので、削除はインプレースで処理されてもよい。1つのスレッドが読み出している間に別のスレッドが削除され、キャッシュミスを誤って検出し得る競合状態が存在する。これは、永続的変換キャッシュ122ミスコードパスに、ライタによって使用されている同じロックを取らせることによって処理することができる。関数リターンは、リターンスタック分岐予測器のソフトウェアバージョンを使用することによって処理され得る、特定の種類の間接分岐である。第1の実行環境からのプログラムカウンタと第2の実行環境のための変換されたプログラムカウンタとの対がスタックに記憶される。リターン時に、リターンアドレスが、第1の実行環境のプログラムカウンタに関連付けられた記憶されたアドレスと一致するかどうかを調べるためにチェックされ、一致する場合、保存された変換されたプログラムカウンタが戻される。そうでない場合、間接分岐処理は通常どおりに処理される。
【0050】
いくつかの実施形態では、システム100が変換されたアプリケーション120を実行しているとき、ランタイムコードモジュール204は、変換された命令の実行を監視して、例外、トラップ、及び命令実行の他の割込みが、ソース実行環境内の命令の開始又は終了(「命令境界」)に対応するターゲット実行環境内の命令で発生することを保証することによって、変換の精度を改善することができる。すなわち、ソースISA内の所与の命令は、ターゲットISA内の複数の命令に変換することができる。変換された命令シーケンスにおける命令実行が、ソース命令の境界を表さない命令のうちの1つにおいて割り込みされた場合、プロセッサ102のレジスタ状態及び/又は他のアーキテクチャ状態は、ソースISA命令の部分的な実行を反映することができ、これは、ソースISAをネイティブに実行するプロセッサ上では不可能である。例えば、オペレーティングシステム124は、(例えば、デバッグ目的のために)変換された命令シーケンスにおける実行を停止した後にレジスタに問い合わせるための様々な機構を含んでもよい。ランタイムコードモジュール204は、変換された命令の実行を監視して、第2の実行環境における実行の全てのポイントにおいて、ランタイムコードモジュールが少数の命令による実行を早送り又は巻き戻しして、第1の実行環境において観察された命令境界に関してバイナリが実際に正確に実行されているかのように、第1の実行環境に従って正確なレジスタ状態を生成することができることを保証することができる。いくつかの実施形態では、このプロセスは、変換された命令の実行が、第2の実行環境用に設計された命令を使用して第2の実行環境で実行される代わりに第1の実行環境内で実行されるかのようにアトミックに実行されるかのように見えることを可能にすることができる。
【0051】
図8は、変換されたコードにおける例外又は他の中断(コード停止)を処理する方法800の一実施形態を示すフローチャートである。例外は、実行中の命令に関して検出された条件によるコードの同期停止であってもよい。割込みは、場合によっては、命令実行と非同期であってもよい(例えば、デバイスをソースとする外部割込み、又は別のスレッドによって発行される割込み)。割込みは、命令が実行を完了したときに行われるが、その命令の実行とは無関係である可能性がある。変換されたコードの実行中に例外及び割込みが発生するとき、それらは変換された命令間で発生するが、ソース命令をエミュレートするために使用される複数の変換された命令が存在する可能性があるので、対応するソース命令の命令境界では発生しない可能性がある。
【0052】
したがって、変換が実行される(ステップ802)。コード停止が検出されない場合(決定ステップ804、「いいえ」分岐)、変換実行を継続することができる(ステップ802)。一方、コード停止が検出された場合(決定ステップ804、「はい」分岐)、ランタイムコードモジュール204は、コードシーケンスを検査して、コード停止がソース命令境界で発生したかどうかを判定することができる(ステップ806)。例えば、一実施形態では、バイナリトランスレータ200は、規則のセットに従って変換を生成することができ、したがって、コードシーケンスの検査(停止付近で命令を逆アセンブルする)によって、バイナリトランスレータ200は、所与のソース命令の境界がどこにあるか、及び停止時にソース命令の進捗がどうであったかを判定することができる。停止が命令境界で発生した場合(決定ステップ808、「はい」分岐)、停止は命令境界で処理され得る(ステップ816)。変更されていない場合(決定ステップ808、「いいえ」分岐)、ランタイムコードモジュール204は、ソース実行環境のいずれかのアーキテクチャ状態が修正されているかどうか(及びソース命令の開始時の状態を復元するために修正を逆にすることができるかどうか)を判定することができる(決定ステップ810)。アーキテクチャ状態が修正されていない場合、又はアーキテクチャ状態が修正されており、順方向にロールするのではなく、逆転が可能であり望ましい場合(決定ステップ810、「いいえ」分岐)、ランタイムコードモジュール204は、状態をソース命令の先頭にロールバックしてもよく(ステップ820)、停止が処理されてもよい(ステップ816)。アーキテクチャ状態が不可逆的に修正された場合、又はロールバックすることが望ましくない場合(決定ステップ810、「はい」分岐)、ランタイムコードモジュールは、ソース命令実行の残りをエミュレートし、アーキテクチャ状態を命令の結果で修正するランタイムコードモジュール204を介して、ロールフォワードが可能であるかどうかを判定することができる(決定ステップ812)。ロールフォワードが可能である場合(決定ステップ812、「はい」分岐)、ランタイムコードモジュール204は、次の命令境界にロールフォワードしてもよく(ブロック814)、停止は、その命令境界において処理されてもよい(ステップ816)。ロールフォワードが可能でない場合(決定ステップ812、「いいえ」分岐)、変換されたコードシーケンスの実行は終了であり得る(ステップ818)。
【0053】
本開示は、「一実施形態」又は「実施形態」の群(例えば、「いくつかの実施形態」又は「様々な実施形態」)への言及を含む。実施形態は、開示された概念の異なる実装形態又は例である。「実施形態」、「一実施形態」、「特定の実施形態」などへの言及は、必ずしも同じ実施形態を指すものではない。具体的に開示されたものを含む多数の可能な実施形態、並びに本開示の趣旨又は範囲内にある修正又は代替が企図される。
【0054】
本開示は、開示された実施形態から生じ得る潜在的な利点を論じることができる。これらの実施形態の全ての実装形態は、必然的に、潜在的な利点のいずれか又は全てを示す。特定の実装形態について利点が実現されるかどうかは、多くの要因に依存し、そのいくつかは本開示の範囲外である。実際、特許請求の範囲内にある実装形態が、任意の開示された利点のいくつか又は全てを発揮しない場合がある理由は多く存在する。例えば、特定の実装形態は、開示された実施形態のうちの1つと併せて、1つ以上の開示された利点を無効にする又は減少させる、本開示の範囲外の他の回路を含み得る。更に、特定の実装形態(例えば、実装技術又はツール)の次善の設計実行もまた、開示された利点を無効にする又は減少させ得る。熟練した実行を想定しても、利点の実現は、実装形態が展開される環境状況などの他の要因に依然として依存し得る。例えば、特定の実装形態に供給される入力は、本開示で対処される1つ以上の問題が特定の機会に生じるのを防止することができ、その結果、その解決策の恩恵が実現されない可能性がある。起こり得る本開示の外部要因の存在を考慮すると、本明細書に記載される任意の潜在的な利点は、侵害を実証するために満たされなければならない請求項の限定として解釈されるべきではないことが明確に意図される。むしろ、そのような潜在的な利点の識別は、本開示の利益を有する設計者に利用可能な改善のタイプを例示することが意図される。そのような利点は、許容可能に記載されていること(例えば、特定の利点が「生じ得る」という記載)は、そのような利点が実際に実現され得るかどうかに関する疑念を伝えることを意図するものではなく、そのような利点の実現が、多くの場合、追加の要因に依存するという技術的現実を認識することを意図するものである。
【0055】
特に明記しない限り、実施形態は非限定的である。すなわち、開示された実施形態は、単一の実施例のみが特定の特徴に関して説明されている場合でも、本開示に基づいて作成される特許請求の範囲を限定することを意図するものではない。開示された実施形態は、それに反する記述が本開示に存在しない場合、限定的ではなく例示的であることが意図される。上記の記載は、開示される実施形態だけでなく、本開示による恩恵を受ける当業者にとって明らかとなるであろう代替物、修正例、及び均等物を網羅する請求項を可能にすることが意図される。
【0056】
例えば、本出願の特徴は、任意の好適な様式で組み合わせることができる。したがって、このような特徴の組み合わせのいずれに対しても、本願(又は、本願に対する優先権を主張する出願)の審査手続き中に、新しい特許請求を策定し得る。特に、添付の特許請求の範囲を参照すると、従属請求項からの特徴は、他の独立請求項に従属する請求項を含め、適宜、他の従属請求項の特徴と組み合わせることができる。同様に、それぞれの独立請求項からの特徴は、適宜組み合わせることができる。
【0057】
したがって、添付の従属請求項は、それぞれが単一の他の請求項に従属するように作成され得るが、追加の従属も企図される。本開示と一致する従属項における特徴の任意の組み合わせが企図され、本出願又は別の出願で特許請求され得る。要約すると、組み合わせは、添付の特許請求の範囲に具体的に列挙されるものに限定されない。
【0058】
適宜、1つのフォーマット又は法定種類(例えば、装置)で作成される請求項はまた、別のフォーマット又は法定種類(例えば、方法)の対応する請求項をサポートするように意図されることが企図される。
【0059】
本開示は法的文書であるため、様々な用語及び語句は、行政及び司法的解釈の対象となり得る。以下の段落、並びに本開示を通じて提供される定義は、本開示に基づいて作成された特許請求の範囲をどのように解釈するかにおいて使用されることを公的に通知する。
【0060】
単数形のアイテム(すなわち、「a」、「an」、又は「the」が先行する名詞又は名詞句)への言及は、文脈上特に明示されない限り、「1つ以上」を意味することを意図している。したがって、特許請求の範囲における「アイテム」への言及は、文脈を伴わずに、アイテムの追加のインスタンスを排除するものではない。「複数の」アイテムは、2つ以上のアイテムのセットを指す。
【0061】
「may」という語は、本明細書では許容の意味(すなわち、可能性を有する、可能である)で使用されており、義務の意味で使用されていない(すなわち、必須ではない)。
【0062】
「含む(comprising)」及び「含む(including)」という用語及びその形態は、オープンエンドであり、「限定されるものではないが、含む」を意味する。
【0063】
「又は」という用語が、選択肢のリストに関して本開示で使用される場合、文脈上特に明示されない限り、包括的な意味で使用されることが一般に理解されるであろう。したがって、「x又はy」の列挙は、「xもしくはy、又はその両方」と同等であり、したがって、1)xであるがyではない、2)yであるがxではない、及び3)xとyの両方、を包含する。一方、「x又はyのいずれかであるが、両方ではない」という語句は、「又は」が排他的な意味で使用されていることを明確にする。
【0064】
「w、x、y、z、又はそれらの任意の組み合わせ」、又は「...w、x、y、及びzのうちの少なくとも1つ」の列挙は、セット内の要素の総数までの単一要素を含む全ての可能性を網羅することを意図している。例えば、セット[w,x,y,z]の場合、これらの表現は、セットの任意の単一要素(例えば、wであるが、x、y、又はzではない)、任意の2つの要素(例えば、w及びxであるが、y又はzではない)、任意の3つの要素(例えば、w、x、及びyであるが、zではない)、及び4つ全ての要素を網羅する。したがって、「...w、x、y、及びzのうちの少なくとも1つ」という語句は、セット[w、x、y、z]の少なくとも1つの要素を指し、それによって、この要素のリストにおける全ての可能な組み合わせを網羅する。この語句は、wの少なくとも1つのインスタンス、xの少なくとも1つのインスタンス、yの少なくとも1つのインスタンス、及びzの少なくとも1つのインスタンスが存在する必要があると解釈されるべきではない。
【0065】
本開示において、様々な「ラベル」は、名詞又は名詞句に先行し得る。文脈上特に明示されない限り、特徴(例えば、「第1の回路」、「第2の回路」、「特定の回路」、「所与の回路」など)に使用される様々なラベルは、特徴の異なる例を指す。更に、特徴に適用されるとき、「第1」、「第2」、及び「第3」というラベルは、特に明記しない限り、任意のタイプの順序(例えば、空間、時間、論理など)を意味するものではない。
【0066】
本明細書で使用する「~に基づいて」という語句は、判定に影響を及ぼす1つ以上の要因を記述するために使用される。この用語は、追加の要因が決定に影響を及ぼすことがある可能性を除外しない。すなわち、決定は、指定された要因のみに基づくか、又は、指定された要因並びに他の指定されていない要因に基づき得る。「Bに基づいてAを判定する」という語句を検討する。この語句により、Bは、Aを判定するために使用されるか、又はAの判定に影響を及ぼす要因であることが特定される。この語句は、Aの判定が、Cなど、何らかの他の要因にも基づき得ることを除外しない。この語句は、AがBのみに基づいて決定される実施形態をも網羅することを意図している。本明細書で使用する「~に基づいて」という語句は、「~に少なくとも部分的に基づいて」という語句と同義である。
【0067】
「に応じて」及び「に応答して」という語句は、効果をトリガする1つ以上の要因を記載する。この語句は、追加の要因が、特定の要因と共に、又は指定された要因とは無関係に、効果に影響を及ぼす、又はそうでなければ効果をトリガする可能性を排除するものではない。すなわち、効果は、これらの要因のみに応じてもよいし、指定された要因並びに他の指定されていない要因に応じてもよい。「Bに応じてAを実行する」という語句を検討する。この語句により、Bは、Aの実行をトリガする、又はAについての特定の結果をトリガする要因である。この語句は、Aの実行が、Cなど、他の要因にも応じ得ることを除外しない。この語句はまた、Aを実行することがB及びCに共に応答し得ることを除外しない。この語句は、AがBに応じてのみ実行される実施形態も対象として含むことを意図している。本明細書で使用するとき、「~に応答して」という語句は、「~に少なくとも部分的に応答して」という語句と同義である。同様に、「に応じて」という語句は、「少なくとも部分的に応じて」という語句と同義である。
【0068】
本開示内で、(「ユニット」、「回路」、他の構成要素などと様々に呼ばれることがある)様々な実在物は、1つ以上のタスク又は動作を実施するように「構成されている(configured)」ものとして記述又は主張されることがある。[1つ以上のタスクを実施する]ように構成されている[エンティティ]というこの表現は、本明細書では構造(すなわち、物理的なもの)を指すために使用される。より具体的には、この表現は、この構造が動作中に1つ以上のタスクを実施するように配置されたことを示すために使用される。構造は、その構造が現在動作していない場合でも、何らかのタスクを実施する「ように構成されている」と述べられることがある。このように、何らかのタスクを実施するように「構成されている」ものとして記述又は説明されるエンティティは、デバイス、回路、プロセッサユニットとタスクを実行するように実行可能なプログラム命令を記憶したメモリとを有するシステムなどの物理的なものを指す。この語句は、本明細書では無形のものを指すために使用されない。
【0069】
場合によっては、様々なユニット/回路/構成要素を、タスク又は動作のセットを実行するものとして本明細書で説明することができる。具体的に記載されていない場合でも、それらのエンティティがそれらのタスク/動作を実行するように「構成されている」ことが理解される。
【0070】
「~ように構成されている」という用語は、「~ように構成可能な」を意味することを意図していない。例えば、プログラムされていないFPGAは、特定の機能を実行するように「構成されている」と見なされない。しかしながら、このプログラムされていないFPGAは、その機能を実行するように「構成可能」であり得る。適切なプログラミング後、FPGAは次いで、特定の機能を実行するように「構成されている」と言うことができる。
【0071】
本開示に基づく米国特許出願の目的のために、構造が1つ以上のタスクを実行するように「構成されている」と特許請求の範囲に記載することは、その請求要素について、米国特許法第112条(f)項を援用することを明示的に意図していない。出願人が本開示に基づき、米国特許出願の審査過程中に第112条(f)項を援用することを望む場合、それは、[機能を実行する]「ための手段」を使用して請求項の要素を説明することになる。
【0072】
本開示には、様々な「回路」が記載され得る。これらの回路又は「回路構成」は、組み合わせ論理、クロック記憶デバイス(例えば、フリップフロップ、レジスタ、ラッチなど)、有限状態機械、メモリ(例えば、ランダムアクセスメモリ、埋め込み動的ランダムアクセスメモリ)、プログラマブルロジックアレイなどの様々なタイプの回路要素を含むハードウェアを構成する。回路は、カスタム設計されてもよいし、又は標準的なライブラリから取得されてもよい。様々な実装形態では、回路構成は、必要に応じて、デジタル構成要素、アナログ構成要素、又は両方の組み合わせを含むことができる。特定のタイプの回路は、一般に「ユニット」(例えば、復号ユニット、算術論理ユニット(ALU)、機能ユニット、メモリ管理ユニット(MMU)など)と称され得る。そのようなユニットはまた、回路又は回路構成を指す。
【0073】
図面に示され、本明細書に記載されている、開示された回路/ユニット/構成要素及び他の要素は、前述の段落に記載されているものなどのハードウェア要素を含む。多くの場合、特定の回路内のハードウェア要素の内部配置は、その回路の機能を説明することによって指定され得る。例えば、特定の「復号ユニット」は、「命令のオペコードを処理し、複数の機能ユニットのうちの1つ以上に命令をルーティングする」機能を実行することと説明され得、これは、復号ユニットがこの機能を実行するように「構成されている」ことを意味する。この機能の明細は、コンピュータ技術の当業者に対して、回路の可能な構造のセットを暗示するのに十分である。
【0074】
様々な実施形態では、前の段落で論じられるように、回路、ユニット、及びその他の要素は、それらが実行するように構成されている機能又は動作によって定義される。そのような回路/ユニット/構成要素の互いに対する配置、及びそれらが相互作用する方法は、最終的に集積回路内で製造されるか、又はFPGAにプログラムされるハードウェアのマイクロアーキテクチャ定義を生成して、マイクロアーキテクチャ定義の物理的実装形態を形成する。したがって、マイクロアーキテクチャ定義は、多くの物理的実装形態が導出され得る構造として当業者によって認識され、その実装形態の全てが、マイクロアーキテクチャ定義によって説明されるより広い構造に属する。すなわち、本開示に従って提供されるマイクロアーキテクチャ定義を提示された当業者は、過度の実験を伴わずに、通常の技術を用いて、回路/ユニット/構成要素の説明を、Verilog又はVHDLなどのハードウェア記述言語(HDL)にコードすることによって構造を実装し得る。HDL記述は、多くの場合、機能的であり得るように見える様式で表現される。しかし、この分野の当業者にとっては、このHDL記述は、回路、ユニット、又は構成要素の構造を次のレベルの実装詳細に変換するのに使用される方法である。そのようなHDL記述は、挙動コード(典型的には合成可能ではない)、レジスタ転送言語(RTL)コード(挙動コードとは対照的に、典型的には合成可能である)、又は構造コード(例えば、論理ゲート及びそれらの接続を指定するネットリスト)の形態をとり得る。HDL記述は、所与の集積回路製造技術のために設計されたセルのライブラリに対して合成されてもよく、タイミング、電力、及び他の理由のために修正されて、結果としてファウンドリに送信することができる最終設計データベースとなり、マスクを生成し、最終的に集積回路を製造することができる。いくつかのハードウェア回路又はその一部も、回路図エディタでカスタム設計して、合成された回路と共に集積回路設計に取り込むことができる。集積回路は、トランジスタ及び他の回路要素(例えば、コンデンサ、抵抗、インダクタなどの受動要素)、並びにトランジスタと回路要素との間のインターコネクトを更に含むことができる。いくつかの実施形態は、ハードウェア回路を実現するために一体的に接続された複数の集積回路を実装することができ、及び/又は、いくつかの実施形態では、個別の要素を使用することができる。あるいは、HDL設計は、フィールドプログラマブルゲートアレイ(field programmable gate array、FPGA)などのプログラム可能な論理アレイに統合してもよく、FPGAに実装してもよい。この回路群の設計とこれらの回路の後続の低位実装との間のこの切り離しは、一般に、このプロセスは回路実装プロセスの異なる段階で実行されるため、回路又は論理設計者が、回路がどのように構成されているかの説明以外に、低位実装形態のための特定の構造セットを全く指定しないというシナリオをもたらす。
【0075】
回路要素の多くの異なる低位の組み合わせを使用して、回路の同じ仕様を実装することができるという事実は、その回路に多数の等価構造をもたらす。上記のように、これらの低位回路実装形態は、製造技術の変化、集積回路を製造するために選択されるファウンドリ、特定のプロジェクトに提供されるセルのライブラリなどに応じて変化し得る。多くの場合、これらの異なる実装形態を生成するための異なる設計ツール又は方法によって行われる選択は、任意であり得る。
【0076】
更に、所与の実施形態の場合、回路の特定の機能仕様の単一の実装形態が、多数のデバイス(例えば、数百万個のトランジスタ)を含むことは一般的である。したがって、この絶対量の情報により、膨大な量の同等の可能な実装形態は言うまでもなく、単一の実施形態を実装するために使用される低位構造を完全に列挙することは非現実的である。この理由のために、本開示は、業界で用いられる機能的な省略を使用して、回路の構造を説明する。
【0077】
上述の開示内容が十分に理解されれば、多くの変形形態及び変更形態が当業者にとって明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形形態及び修正形態を包含すると解釈されることが意図されている。
図1
図2
図3
図4
図5
図6
図7
図8