(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-10-18
(54)【発明の名称】能力書き込みアドレス追跡
(51)【国際特許分類】
G06F 12/14 20060101AFI20221011BHJP
G06F 12/1027 20160101ALI20221011BHJP
G06F 12/0895 20160101ALI20221011BHJP
G06F 12/0806 20160101ALI20221011BHJP
【FI】
G06F12/14 510D
G06F12/1027
G06F12/0895 110
G06F12/0806 100
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022508834
(86)(22)【出願日】2020-06-24
(85)【翻訳文提出日】2022-02-10
(86)【国際出願番号】 GB2020051525
(87)【国際公開番号】W WO2021032943
(87)【国際公開日】2021-02-25
(32)【優先日】2019-08-16
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ベトヒャー、マティアス ロタール
(72)【発明者】
【氏名】ボトマン、フランソワ クリストファー ジャック
【テーマコード(参考)】
5B017
5B205
【Fターム(参考)】
5B017AA07
5B017BA01
5B017BB03
5B017CA01
5B017CA02
5B205KK14
5B205MM51
5B205NN45
5B205RR04
5B205UU42
5B205VV21
(57)【要約】
装置は、能力有効性チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかを判定する能力チェック回路(86)を備える。能力は、ポインタ、及び1つ以上の使用限定条件を指定するポインタ使用限定情報を含む。1つ以上の使用限定条件は、少なくともポインタのアドレスの許容範囲を含む。能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、能力書き込みアドレス追跡回路(200)は、能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造(100)を更新する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
能力チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかを判定する能力チェック回路であって、前記能力は、ポインタ、及び前記1つ以上の使用限定条件を指定するポインタ使用限定情報を含み、前記1つ以上の使用限定条件は、少なくとも前記ポインタのアドレスの許容範囲を含む、能力チェック回路と、
能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、前記能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新する能力書き込みアドレス追跡回路と
を備える装置。
【請求項2】
前記能力書き込みアドレス追跡が有効化されているか又は無効化されているかを示す能力書き込みアドレス追跡有効化指示を記憶する有効化記憶要素を備える、請求項1に記載の装置。
【請求項3】
前記能力書き込み要求に応答して、前記能力書き込みアドレス追跡有効化指示が、能力書き込みアドレス追跡が無効化されていることを示すとき、前記能力書き込みアドレス追跡回路は、前記能力書き込み要求の前記能力書き込みターゲットアドレスに基づいて前記能力書き込みアドレス追跡構造を更新することを省略するように構成されている、請求項2に記載の装置。
【請求項4】
前記装置は、プログラム命令を実行する処理回路を備え、
前記能力書き込みアドレス追跡有効化指示は、前記処理回路によって実行されたプログラム命令に応答して、前記処理回路によって更新可能である、請求項2又は3のいずれか一項に記載の装置。
【請求項5】
前記装置は、それぞれのエントリが、対応するメモリアドレス領域と関連付けられたキャッシュ情報を記憶する複数のエントリを含むキャッシュ構造を備え、
前記能力書き込み要求に応答して、前記能力書き込みアドレス追跡構造が前記能力書き込みターゲットアドレスに基づいて更新されたとき、前記能力書き込みアドレス追跡回路は、前記能力書き込みターゲットアドレスを含むメモリアドレス領域に対応する前記キャッシュ構造のエントリ内に能力書き込み済みインジケータをセットするように構成されている、請求項1~4のいずれか一項に記載の装置。
【請求項6】
前記能力書き込み要求に応答して、能力書き込みアドレス追跡が有効化されており、前記能力書き込みターゲットアドレスが、対応するキャッシュエントリが前記能力書き込み済みインジケータセットを既に有するメモリアドレス領域に対応するとき、前記能力書き込みアドレス追跡回路は、前記能力書き込みターゲットアドレスに基づいて前記能力書き込みアドレス追跡構造を更新することを省略するように構成されている、請求項5に記載の装置。
【請求項7】
前記キャッシュ構造が、メモリ内のページテーブル構造から導出されたアドレス変換情報を記憶するアドレス変換キャッシュを含む、請求項5又は6に記載の装置。
【請求項8】
前記能力書き込み済みインジケータセットを有するエントリを前記アドレス変換キャッシュから排除すると、前記アドレス変換キャッシュは、前記能力書き込み済みインジケータをメモリ内の前記ページテーブル構造に書き戻すことなく、前記能力書き込み済みインジケータを廃棄するように構成されている、請求項7に記載の装置。
【請求項9】
前記装置は、それぞれのソフトウェアプロセスが、対応する実行コンテキスト識別子と関連付けられている複数のソフトウェアプロセスのうちの1つからの命令を処理する処理回路を備え、
能力書き込みアドレス追跡が有効化されているとき、前記能力書き込みアドレス追跡回路は、1つ以上の能力書き込み要求と関連付けられた1つ以上の実行コンテキスト識別子を追跡するための実行コンテキスト識別子追跡情報を維持するように構成されている、請求項1~8のいずれか一項に記載の装置。
【請求項10】
前記装置は、プログラム命令を実行する処理回路を備え、
能力書き込みアドレス追跡リセット命令に応答して、前記処理回路は、前記能力書き込みアドレス追跡構造をリセットするように構成されている、請求項1~9のいずれか一項に記載の装置。
【請求項11】
前記能力書き込みアドレス追跡構造は、メモリとは別個のハードウェアで提供された記憶ユニットを含む、請求項1~10のいずれか一項に記載の装置。
【請求項12】
前記能力書き込みアドレス追跡構造は、メモリ内に記憶されたデータ構造を含む、請求項1~10のいずれか一項に記載の装置。
【請求項13】
前記能力書き込みアドレス追跡構造のベースアドレス、
前記能力書き込みアドレス追跡構造の更新される次のエントリの指示、及び
前記能力書き込みアドレス追跡構造の最大許可サイズを示す限定指示
のうちの少なくとも1つを記憶する少なくとも1つの追跡メタデータ記憶要素を備える、請求項12に記載の装置。
【請求項14】
前記能力書き込みアドレス追跡構造は、能力書き込みアドレス追跡が有効化されているとき受信された1つ以上の能力書き込み要求の1つ以上の能力書き込みターゲットアドレスを正確に追跡する、請求項1~13のいずれか一項に記載の装置。
【請求項15】
前記能力書き込みアドレス追跡構造は、能力書き込みアドレス追跡が有効化されているとき受信された1つ以上の能力書き込み要求の1つ以上の能力書き込みターゲットアドレスを不正確に追跡し、このため、前記能力書き込みアドレス追跡構造のクエリは、前記1つ以上の能力書き込みターゲットアドレス以外のアドレスが、前記1つ以上の能力書き込みターゲットアドレスのうちの1つとして擬似的に特定されることを可能にし得る、請求項1~14のいずれか一項に記載の装置。
【請求項16】
前記能力書き込みアドレス追跡構造が容量限界に達したことを検出したことに応答して、前記能力書き込みアドレス追跡回路は、例外のシグナリングをトリガするように構成されている、請求項1~15のいずれか一項に記載の装置。
【請求項17】
前記装置は、複数のプロセッサコアを備え、
前記能力書き込みアドレス追跡構造は、前記複数のプロセッサコア間で共有されている、請求項1~16のいずれか一項に記載の装置。
【請求項18】
能力チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかを判定することであって、前記能力は、ポインタ、及び前記1つ以上の使用限定条件を指定するポインタ使用限定情報を含み、前記1つ以上の使用限定条件は、少なくとも前記ポインタのアドレスの許容範囲を含む、能力チェック動作を行うことと、
能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、前記能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新することと
を含む方法。
【請求項19】
ターゲットコードを実行するための命令実行環境を提供するためにホストデータ処理装置を制御するコンピュータプログラムであって、
能力チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかをチェックする能力チェックプログラムロジックであって、前記能力は、ポインタ、及び前記1つ以上の使用限定条件を指定するポインタ使用限定情報を含み、前記1つ以上の使用限定条件は、少なくとも前記ポインタのアドレスの許容範囲を含む、能力チェックプログラムロジックと、
能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、前記能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新する能力書き込みアドレス追跡プログラムロジックと
を含むコンピュータプログラム。
【請求項20】
1つ以上の能力書き込み要求の能力書き込みターゲットアドレスを追跡する能力書き込みアドレス追跡構造による能力書き込みアドレス追跡を有効化することであって、能力書き込み要求は、前記能力書き込み要求によって指定された能力書き込みターゲットアドレスと関連付けられたメモリ位置に能力を書き込む要求を含み、前記能力は、ポインタ、及び少なくとも前記ポインタのアドレスの許容範囲を含む1つ以上の使用限定条件を指定するポインタ使用限定情報を含む、有効化することと、
陳腐化した能力を無効にするためにメモリをスイープすることであって、前記陳腐化した能力は、アドレスの前記許容範囲がアドレスの1つ以上のターゲット領域と重複する能力を含む、スイープすることと、
前記メモリをスイープした後、前記能力書き込みアドレス追跡構造によって追跡されたアドレスに対応する1つ以上の選択されたメモリアドレス領域を再スイープして、前記1つ以上の選択されたメモリアドレス領域内に記憶された陳腐化した能力を無効にすることと
を含む方法。
【請求項21】
請求項20に記載の方法を行うためにデータ処理装置を制御するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理の分野に関する。
【0002】
データ処理装置で実行するソフトウェアは、メモリへのアクセスを制御するためにポインタを使用することができる。しかしながら、ポインタは、ときに、悪意を持った攻撃者が被害者のソフトウェアを攻撃するために使用し得る道を提供し、例えば、バッファオーバーフローを悪用して、そうでなければ攻撃者がアクセスすることが許容されていないバッファを越える先のメモリの領域にアクセスするためのバッファ内の場所を特定するためにポインタを使用する。いくつかのプロセッサアーキテクチャは、能力(capabilities)の使用をサポートすることができ、能力は、1つ以上の使用限定条件を指定するポインタ使用限定情報とポインタを関連付け、1つ以上の使用限定条件は、ポインタが有効に使用され得るシナリオを限定する。使用限定条件は、少なくともポインタのアドレスの定義された許容範囲を含むことができ、このため、ポインタが許容範囲外のメモリの領域にアクセスするために使用された場合、エラーがシグナリングされ得る。これは、いくつかの形態の攻撃に対して保護するのに役立ち得る。
【0003】
少なくともいくつかの例は、能力チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかを判定する能力チェック回路であって、能力は、ポインタ、及び1つ以上の使用限定条件を指定するポインタ使用限定情報を含み、1つ以上の使用限定条件は、少なくともポインタのアドレスの許容範囲を含む、能力チェック回路と、能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新する能力書き込みアドレス追跡回路とを備える装置を提供する。
【0004】
少なくともいくつかの例は、能力チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかを判定する能力チェック動作の実行であって、能力は、ポインタ、及び1つ以上の使用限定条件を指定するポインタ使用限定情報を含み、1つ以上の使用限定条件は、少なくともポインタのアドレスの許容範囲を含む、能力チェック動作を行うことと、能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新することとを含む方法を提供する。
【0005】
少なくともいくつかの例は、ターゲットコードを実行するための命令実行環境を提供するためにホストデータ処理装置を制御するコンピュータプログラムであって、能力チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかを判定する能力チェックプログラムロジックであって、能力は、ポインタ、及び1つ以上の使用限定条件を指定するポインタ使用限定情報を含み、1つ以上の使用限定条件は、少なくともポインタのアドレスの許容範囲を含む、能力チェックプログラムロジックと、能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新する能力書き込みアドレス追跡プログラムロジックとを含むコンピュータプログラムを提供する。
【0006】
コンピュータプログラムは、コンピュータ可読記憶媒体に記憶されてもよい。記録媒体は、一時的な記録媒体又は非一時的な記録媒体であり得る。
【0007】
少なくともいくつかの例は、1つ以上の能力書き込み要求の能力書き込みターゲットアドレスを追跡する能力書き込みアドレス追跡構造による能力書き込みアドレス追跡を有効化することであって、能力書き込み要求は、能力書き込み要求によって指定された能力書き込みターゲットアドレスと関連付けられたメモリ位置に能力を書き込む要求を含み、能力は、ポインタ、及び少なくともポインタのアドレスの許容範囲を含む1つ以上の使用限定条件を指定するポインタ使用限定情報を含む、有効化することと、陳腐化した能力を無効にするためにメモリをスイープすることであって、陳腐化した能力は、アドレスの許容範囲がアドレスの1つ以上のターゲット領域と重複する能力を含む、スイープすることと、メモリをスイープした後、能力書き込みアドレス追跡構造によって追跡されたアドレスに対応する1つ以上の選択されたメモリアドレス領域を再スイープして、1つ以上の選択されたメモリアドレス領域内に記憶された陳腐化した能力を無効にすることとを含む方法を提供する。
【0008】
少なくともいくつかの例は、上述の有効化ステップ、スイープステップ、及び再スイープステップを含む方法を行うためにデータ処理装置を制御するコンピュータプログラムを提供する。このコンピュータプログラムは、コンピュータ可読記憶媒体に記憶されてもよい。記録媒体は、一時的な記録媒体又は非一時的な記録媒体であり得る。
【図面の簡単な説明】
【0009】
本技術のさらなる態様、特徴、及び利点は、添付の図面と併せて読まれる以下の例の説明から明らかとなる。
【
図1】複数のプロセッサコア及び能力書き込みアドレス追跡回路を有するデータ処理装置の例を示す。
【
図3】能力の例、及び能力がメモリアドレス空間内の多くの場所にコピーされ得る方法の例を示す。
【
図4】能力を使用するシステムへの取り消しベースの攻撃の例を示す。
【
図5】追跡能力書き込みアドレスのいくつかの例を示す。
【
図6】陳腐化した能力のメモリのスイープを行うマルチプロセッサシステムで実行するソフトウェアによって行われるステップを示すフロー図である。
【
図7】使用され得るシミュレータの実装形態を示す。
【0010】
データ処理装置は、能力チェック動作を行って、能力の使用が1つ以上の使用限定条件を満たすかどうかを判定する能力チェック回路を有する。能力は、ポインタ、及び1つ以上の使用限定条件を指定するポインタ使用限定情報を含む。1つ以上の使用限定条件は、少なくともポインタのアドレスの許容範囲を含み得る。使用限定条件はまた、任意選択的に、例えば、能力がメモリへの書き込みを制御するために使用され得るかどうか、又は能力を介してアクセスされるメモリ領域から、実行される命令をフェッチすることが許容されているかどうかなどの他の条件を含み得る。能力チェック回路を提供することによって、これは、そうでなければ攻撃を受けやすいソフトウェアへ攻撃を加えるために使用され得るポインタの悪意ある使用に対するいくつかのハードウェアベースの保護の施行を提供する。
【0011】
このような能力は、メモリアドレス空間内の任意のアドレスに書き込まれ得る。許容範囲が所与のメモリ領域をカバーする能力がメモリ内に常駐し、次いで所与の領域が割り当て解除された場合、所与の領域をカバーするメモリ内の能力が無効にされているまでの所与のソフトウェアプロセスにこの所与の領域を再割り当てすることは安全でないことがある。割り当て解除された領域をカバーする能力がメモリシステム内に依然として記憶されている場合、割り当て解除されたメモリが再割り当てされることを単純に阻止することは、ある時間にわたって可能であり得るが、これは、メモリの断片化及びパフォーマンス喪失をもたらす傾向がある。メモリを再使用しないことは、メモリリーク(メモリの割り当てを解除することができないことに起因する使用可能なメモリアドレス空間の喪失)と同等であり、これは、大きなアドレス空間でも、最終的に、安全性を損ねる潜在性があるオーバーフローを引き起こし得る。したがって、メモリが再割り当てされることがある時間にわたって阻止され得るが、最終的に、メモリをスイープして、メモリの以前に割り当て解除された領域をカバーするアドレスの許容範囲を有する陳腐化した能力を特定し、割り当て解除された領域が他の目的に再使用されることを許容することが望ましいことがある。
【0012】
(典型的にはソフトウェアによって制御される)陳腐化した能力のメモリのこのようなスイープを行う間、他のプロセッサコア又はスレッドは、スイープが進行している間、既にスイープされたメモリ領域内に能力を書き込んでいることがあるという危険があり得る。これは、スイープが所与のプロセッサコアで行われている間、すべての他のプロセッサコアの処理継続を止めることによって、又は能力書き込み動作が許容されることを阻止するようにメモリアクセスパーミッションを変更することによって軽減され得るが、これらのアプローチは、パフォーマンスへの大きな影響がある。また、このような「世界を止める」アプローチでは、スイーププロセスは、攻撃者がスイープを中断し、スイープを再開始する前に、以前にスイープされたメモリ内に能力をコピーすることを阻止するために、スイーププロセスが中断されないことを指定するように構成レジスタをセットする必要がある。しかしながら、これは、正当な中断発信元がサービスされることも無効化され、中断処理のレイテンシを増加させることを意味し、これは、中断を処理するためにかかる最大時間の制限が必要であるリアルタイムシステムにとって望ましくないことがある。
【0013】
以下に説明する技術では、装置は、能力書き込みアドレス追跡回路を備え、能力書き込みアドレス追跡回路は、能力書き込みアドレス追跡が有効化されているとき、能力が能力書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力書き込み要求に応答して、能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新する。したがって、能力が書き込まれたアドレスを追跡することができる追跡ハードウェアを提供することによって、これは、スイープが進行している間、どのアドレスに能力が書き込まれたかの特定を可能にし、このため、主スイープが終了した後、任意の書き込み場所を比較的効率的に再スイープして、能力が既にスイープされたメモリ内に書き込まれる可能性に対して守ることが可能である。したがって、能力書き込みアドレス追跡回路のアーキテクチャをハードウェアで提供することは、より効率的なスイープを可能にし、これは、スイープが進行している間、スイーププロセスがすべての他のコアでの処理を停止する必要性を回避し、これは、パフォーマンスを大幅に改善することができるためである。
【0014】
能力書き込みアドレス追跡回路による追跡は、能力書き込み要求に特有であり得る。したがって、能力以外の情報が能力以外の書き込みターゲットアドレスと関連付けられたメモリ位置に書き込まれることを要求する能力以外の書き込み要求に応答して、能力書き込みアドレス追跡回路は、このような能力以外の書き込み要求を無視することができ、このため、能力書き込みアドレス追跡構造は、能力以外の書き込み要求のターゲットアドレスに基づいて更新されない。
【0015】
能力書き込みアドレス追跡構造は、装置で実行するソフトウェアへアクセス可能であり得る。したがって、陳腐化した能力のスイープがソフトウェアによって制御されているとき、ソフトウェアは、能力書き込みアドレス追跡構造内の情報に基づいて、メモリ内のどの位置が再スイープされるべきかを特定することができる。
【0016】
いくつかのシステムは、能力書き込みアドレス追跡回路を恒久的に有効化することができ、このため、通常の処理中に、能力が書き込まれたアドレスの記録が維持される。しかしながら、実際には、これは、比較的大きな能力書き込みアドレス追跡構造を必要とすることがあり、能力書き込み要求のアドレスを永久的に追跡することに関連付けられた回路面積、電力及びパフォーマンスオーバーヘッドが正当化されないことがある。
【0017】
他の例では、有効化記憶要素が、能力書き込みアドレス追跡有効化指示を記憶するために提供されてもよく、能力書き込みアドレス追跡有効化指示は、能力書き込みアドレス追跡が有効化されているか又は無効化されているかを示す。能力書き込みアドレス追跡が有効化されているとき、能力書き込み要求に応答して、能力書き込みアドレス追跡回路は、能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新する。一方、能力書き込みアドレス追跡有効化指示が、能力書き込みアドレス追跡が無効化されていることを示すとき、能力書き込みアドレス追跡回路は、いずれの受信された能力書き込み要求の能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新することを省略する。能力書き込みアドレス追跡を有効化又は無効化する機能を提供することによって、これは、小さな能力書き込みアドレス追跡構造が使用されることを可能にすることができ、これは、アドレス追跡が、どのアドレスに能力が書き込まれているかを知ることが重要である時にのみ有効化される必要があり、そうでなければ、有用でない情報を補足することを回避するために無効化され得るためである。
【0018】
システムは、プログラム命令を実行する処理回路を有し得る。処理回路は、能力書き込みアドレス追跡有効化指示を更新するために処理回路を制御する少なくとも1つのプログラム命令をサポートする命令セットアーキテクチャを有し得る。例えば、プログラム命令は、専用の能力書き込みアドレス追跡有効化若しくは無効化命令であってもよく、又はシステムレジスタ更新命令であってもよく、システムレジスタ更新命令は、一般的な制御レジスタの更新に使用され、更新されるレジスタが能力書き込みアドレス追跡有効化記憶要素であることを特定するパラメータを指定する。したがって、ソフトウェアは、能力書き込みアドレス追跡有効化指示をセット又はクリアするためのプログラム命令を実行することによって、能力書き込みアドレス追跡回路による追跡が有効化されるか又は無効化されるかをセットすることができる。例えば、上述のような陳腐化した能力のスイープを制御するソフトウェアは、スイープを開始する直前に、能力書き込みアドレス追跡を有効化し、次いで、スイープが完了したとき、能力書き込みアドレス追跡を再度無効化して、スイープが進行している間、能力が書き込まれたアドレスの検出を可能にする。
【0019】
能力書き込みアドレス追跡構造は、能力書き込み要求が能力書き込みターゲットアドレスを指定する粒度よりも粗い粒度でアドレスを追跡することができる。例えば、能力書き込みアドレス追跡構造は、能力が書き込まれたページ/ブロック内の特定のアドレスを特定することなく、能力が書き込まれたアドレスのページ又はブロックを特定することができる。これは、追跡構造の記憶オーバーヘッドを低減することができる。
【0020】
装置は、それぞれのエントリが、対応するメモリアドレス領域と関連付けられたキャッシュ情報を記憶するいくつかのエントリを含むキャッシュ構造を有してもよい。能力書き込み要求に応答して、能力書き込みアドレス追跡構造が能力書き込みターゲットアドレスに基づいて更新されたとき、能力書き込みアドレス追跡回路はまた、能力書き込みターゲットアドレスを含むメモリアドレス領域に対応するキャッシュ構造のエントリ内に能力書き込み済みインジケータをセットし得る。したがって、キャッシュエントリは、対応するメモリアドレス領域への能力書き込みが検出されたかどうかの指示をタグ付けされ得る。能力書き込み要求に応答して、能力書き込みアドレス追跡が有効化されており、能力書き込みターゲットアドレスが、対応するキャッシュエントリが既に能力書き込み済みインジケータセットを有するメモリアドレス領域に対応するとき、能力書き込みアドレス追跡回路は、能力書き込みターゲットアドレスに基づいて能力書き込みアドレス追跡構造を更新することを省略することができる。
【0021】
したがって、対応するメモリアドレス領域への少なくとも1つの能力書き込み要求が検出されたかどうかに関する情報をキャッシュエントリにタグ付けすることによって、これは。同じ領域について、能力書き込みアドレス追跡構造の複数の更新されたエントリを重複して割り当てることを回避することができ、能力書き込みが既になされた同じ領域へのその後の能力書き込みの際、能力書き込みアドレス追跡構造の更新は省略され得る。これは、制限された容量を有し得る能力書き込みアドレス追跡構造の使用をより効率的にすることができる。
【0022】
能力書き込み済みインジケータがセットされているキャッシュ構造は、一連の異なるタイプのキャッシュ構造のうちの1つであり得る。例えば、キャッシュ構造は、メモリから得られたデータをキャッシュするためのデータキャッシュ、メモリからフェッチされた命令をキャッシュするための命令キャッシュ、又は能力書き込みアドレス追跡目的のみのエントリを有し得る専用の能力書き込みアドレス追跡キャッシュであり得る。しかしながら、一例では、キャッシュ構造が、メモリ内のページテーブル構造から導出されたアドレス変換情報を記憶するアドレス変換キャッシュを含む場合、キャッシュ構造は、特に有用であり得る。例えば、キャッシュ構造は、変換ルックアサイドバッファ(translation lookaside buffer:TLB)を含み得る。TLBは、ページテーブル構造がメモリ内で定義されているページ粒度などの比較的大きな粒度でアドレス領域を追跡することができ、このため、これは、より微細な粒度でアドレスを追跡することができる代替のキャッシュ構造よりも、能力書き込み済みインジケータの追跡を効率的にすることができる。また、他のキャッシュ構造とは異なり、実際には、アドレス変換キャッシュは、書き込み動作がなされる領域の物理アドレスを得るために、能力書き込み要求についてどのような方法でも探索され得、このため、能力書き込み要求を受信したとき、アドレス変換キャッシュエントリ内の能力書き込み済みインジケータをチェックすることは比較的効率的であり得る。しかしながら、他のタイプのキャッシュ構造がまた、それぞれのメモリアドレス領域について能力書き込み済みインジケータを追跡するために使用され得る。
【0023】
能力書き込み済みインジケータセットを有するエントリをアドレス変換キャッシュから排除すると(又は、複数レベルのアドレス変換キャッシュを有するシステムにおいて、このようなエントリをアドレス変換キャッシュの最終レベルから排除すると)、アドレス変換キャッシュは、能力書き込みインジケータをメモリ内のページテーブル構造に書き戻すことなく、能力書き込みインジケータを破棄することができる。これは、能力書き込み済みインジケータセットを有するエントリを排除すると、以前の能力書き込み要求がこの領域をターゲットにしたという情報は失われ、このため、その後の能力書き込み要求が同じ領域を再度ターゲットにする場合、これは、結果として、能力書き込みアドレス追跡構造の複数のエントリが同じ領域について割り当てられる可能性があることを意味するが、これは、ページテーブル構造を能力書き込み済みインジケータで更新することよりも好ましいことがある。ページテーブル構造は既に非常に大量のメモリ空間を占めていることがあり、それぞれのページテーブルエントリのサイズを1ビットでも増加させることは、実際には、ページテーブルエントリを2の累乗のアドレスサイズ境界に合わせるため、複数の追加のビットのメモリスペースがそれぞれのページテーブルエントリ内に割り当てられることを必要とし得、このため、実際には、能力書き込み済みインジケータを収容するためにページテーブルエントリのサイズを増加させることは、ページテーブル構造のサイズへの大きな影響があり、これは望ましくないことがある。したがって、時折、重複エントリを能力書き込みアドレス追跡構造内に割り当てることを必要とすることは、能力書き込み済みインジケータをページテーブル構造に書き戻すことよりも好ましいことがある。
【0024】
処理回路は、いくつかのソフトウェアプロセスのうちの1つからの命令を処理することができ、それぞれのソフトウェアプロセスは、対応する実行コンテキスト識別子と関連付けられている。例えば、実行コンテキスト識別子は、それぞれのソフトウェアプロセスと関連付けられたアドレス変換情報の異なるセットを区別するためにTLBによって使用され得る。能力書き込みアドレス追跡が有効化されているとき、能力書き込みアドレス追跡回路は、1つ以上の能力書き込み要求と関連付けられた1つ以上の実行コンテキスト識別子を追跡するための実行コンテキスト識別子追跡情報を維持することができる。これは、有用であり得、これは、その後、能力書き込みアドレス追跡構造を使用して、どのメモリ領域が陳腐化した能力について再スイープされる必要があるかを制御するとき、実行コンテキストの識別子追跡情報は、同じ実行コンテキスト内の能力書き込みがなされていないが、スイープされているプロセスによって使用される仮想アドレスをエイリアシング(alias)する仮想アドレスを有するメモリアドレス領域のいくつかの不必要な再スイープを回避するために使用され得ることを意味するためである。これは、陳腐化した能力についてスイープするプロセスのパフォーマンスを改善することができる。
【0025】
処理回路はまた、能力書き込みアドレス追跡リセット命令をサポートし得、能力書き込みアドレス追跡リセット命令は、能力書き込みアドレス追跡構造をリセットするために使用され得る。例えば、この命令は、スイーププロセスの開始時又はスイーププロセスの終了時に実行され得る。能力書き込みアドレス追跡リセット命令は、能力書き込みアドレス追跡を有効化若しくは無効化する命令と同じ命令であってもよく、又は別個の命令であってもよい。能力書き込みアドレス追跡構造がリセットされたとき、構造は、能力書き込み要求がなされたアドレスがないことを示すことと同等の状態にリセットされ得る。例えば、これは、能力書き込みアドレス追跡構造内のすべてのデータエントリをクリアすることによって、又は新しい構造をメモリ内に割り当て、新しい構造の位置を特定するアドレスパラメータを更新することによって行われ得る。
【0026】
能力書き込みアドレス追跡構造は、異なる方法で実装され得る。例えば、構造は、メモリとは別個のハードウェアで提供された記憶ユニットを含むことができる。したがって、ハードウェアで実装された専用ユニットが、能力書き込み動作がなされるアドレスのアドレス情報を追跡するために提供され得る。
【0027】
代替的に、能力書き込みアドレス追跡構造は、単純に、所与のアドレスのセットにおいてメモリ内に記憶されたデータ構造であり得る。この場合、能力書き込みアドレス追跡回路は、能力書き込みアドレス追跡構造を更新し能力書き込みアドレス追跡構造にアクセスするハードウェアを有し得るが、能力書き込みアドレス追跡情報自体を保持する回路をハードウェアで有さなくてもよい。能力書き込みアドレス追跡構造がメモリ内に維持されるとき、一例では、構造は、いくつかのエントリを含むバッファであり得、それぞれのエントリは、少なくとも1つの能力書き込みがなされるメモリ領域のアドレスを指定する。アドレス追跡は、異なる粒度でのアドレス追跡であり得、例えば、キャッシュラインでのアドレス追跡又はページレベルの粒度でのアドレス追跡であり得る。一例では、少なくとも1つの追跡メタデータ記憶要素が、能力書き込みアドレス追跡構造が記憶されているメモリ内の場所を特定するのに役立つように提供され得る。例えば、少なくとも1つの追跡メタデータ記憶要素は、能力書き込みアドレス追跡構造のベースアドレス、能力書き込みアドレス追跡構造の更新される次のエントリの指示、及び能力書き込みアドレス追跡構造の最大許可サイズを示す限定指示のうちの少なくとも1つを記憶し得る。ここで、更新される次のエントリの指示は、明示的又は暗黙的であり得、例えば、次のエントリの指示は、どのエントリが次であるかを暗黙的に特定し得る以前のエントリ書き込みを特定することによって特定され得る。次のエントリの指示は、カウント値(カウント値は、インクリメントの数をベースアドレスに適用することによって、更新される次のエントリのアドレスを導出するために使用され得、インクリメントの数は、カウント値、及び1つのエントリのサイズに対応するインクリメントに基づいて選択される)として、又は、次のエントリ若しくは以前の書き込まれたエントリのメモリ内の場所を特定する絶対アドレスとして表され得る。
【0028】
限定指示は、有益であり得、これは、能力書き込みアドレス追跡回路が、多くのエントリが能力書き込みアドレス追跡構造に割り当てられすぎて最大許可サイズを超える又は超える恐れがあるかどうかを追跡することを可能にし得、このため、これは、追跡構造が他の情報を含み得るメモリのその後の領域内にあふれ出ることを回避することができるためである。
【0029】
いくつかの例では、能力書き込みアドレス追跡構造は、能力書き込みアドレス追跡が有効化されているとき受信された1つ以上の能力書き込み要求の1つ以上の能力書き込みターゲットアドレスを正確に追跡することができる。例えば、追跡構造は、受信された能力書き込み要求と関連付けられた特有のアドレスを特定するリスト又はキャッシュのような構造を維持することができる。正確な追跡は、上述のように異なる粒度での追跡であり得、例えば、正確な追跡は、能力書き込み要求の個々のキャッシュラインでの追跡ではなく、アドレスページアドレスでの追跡であり得る。
【0030】
代替的に、能力書き込みアドレス追跡構造による、能力書き込みアドレス追跡が有効化されているとき受信された1つ以上の能力書き込み要求の1つ以上の能力書き込みターゲットアドレスを不正確に追跡することができる。不正確な追跡は、偽陽性が可能であり得る(このため、能力書き込みアドレス追跡構造のクエリは、受信された能力書き込みターゲットアドレスのうちの1つ以外のアドレスが、受信された能力書き込みターゲットアドレスのセットのメンバーとして擬似的に特定されることを可能にし得る)が、(受信された能力書き込みターゲットアドレスのうちの1つがこのように特定されないとき)偽陰性は可能でないことであり得る。例えば、ブルームフィルタなどの構造が使用され得る。このような不正確な追跡は、偽陽性をときに許可することを犠牲にして、能力書き込みアドレス追跡構造に必要なストレージオーバーヘッドの量を低減することができ、このため、いくつかのメモリ領域は、再スイープされる領域として特定され得、当該領域は、実際には、能力書き込み動作がなされた領域に対応しない。
【0031】
能力書き込みアドレス追跡構造が(例えば、上述のような限定指示に基づく)容量限界に達したことを検出することに応答して、能力書き込みアドレス追跡回路は、例外のシグナリングをトリガすることができる。次いで、ソフトウェアは、アドレス追跡構造のサイズを更新して追跡の継続を可能にすることによって、又は進行していることがある陳腐化した能力のスイープを停止し、スイープを再度再開することによって例外に応答することができる。いくつかの実装形態では、例外をトリガする必要がないことがあり、これは、例えばブルームフィルタのアプローチでは、追跡構造の容量を超えることが可能でないことがあり得、次いで、任意の数のアドレスは、ブルームフィルタのサイズを増加させることなく、ブルームフィルタ内に畳み込まれ得るためであるが、連結リスト又はバッファなどの他のアプローチでは、サイズは、最終的に、能力書き込みアドレス追跡構造に割り当てられたメモリ空間の容量を超えることがあり、このため、容量限界が達せられたことを検出し、次いで例外をシグナリングするためのアーキテクチャ上の特徴を提供することが有用であり得る。
【0032】
いくつかの例では、データ処理システムは、複数のプロセッサコアを含み得る。能力書き込みアドレス追跡構造は、コア間で共有され得る。また、能力書き込みアドレス追跡回路は、コア間で共有され得る。複数のコアがスイープを行う必要があることが比較的稀であることが予想され得、このため、共有追跡構造で十分であり得る。また、追跡をコア間で共有することは、コアのうちのいずれかが能力書き込み要求を発行したかどうかを確認することをより簡単にする。
【0033】
代替的に、他のアプローチは、個々のコアについて別個の能力書き込みアドレス追跡構造を提供してもよく、又は個々のコアに特有の共有追跡構造を更新するハードウェアのうちのいくつかを提供してもよい。例えば、それぞれのコアは、能力書き込み要求が特定のアドレス領域をターゲットにしたかどうかを指定するためのインジケータで、コアのTLB又は他のタイプのキャッシュを別個に更新することができる。したがって、上述の回路がマルチコアシステムにおいて実装され得るいくつかの方法がある。上記の例では、能力チェック動作及び能力書き込みアドレス追跡を行うハードウェア回路が説明されている。また、ターゲットコードを実行するための命令実行環境を提供するためにホストデータ処理装置で実行してホストを制御するコンピュータプログラムを提供することが可能であり、このため、ターゲットコードは、ターゲットコードが、ホストとは異なるアーキテクチャを有し得るターゲットデータ処理装置で実行されているかのように、ホストデータ処理装置で実行され得る。これは、異なるプロセッサアーキテクチャのために書き込まれたレガシーコードが新しいプラットフォームで実行されることを可能にするために、又は開発中のプロセッサアーキテクチャの試験を可能にするために、又は新しいプロセッサアーキテクチャでの動作のために設計されたソフトウェアの開発が、新しいアーキテクチャをサポートするハードウェアデバイスの準備が実際に整う前に開始されることを可能にするために有用であり得る。したがって、ホストで実行するシミュレータコンピュータプログラムは、ターゲットデータ処理装置のプロセッサアーキテクチャの特徴を効果的にエミュレートすることができ、このため、ターゲットコードは、ターゲットコードがターゲットデータ処理装置で実行しているかのようにホストで実行し得る。このようなシミュレータコンピュータプログラムは、能力チェックプログラムロジック及び能力書き込みアドレス追跡プログラムロジックを含み得、能力チェックプログラムロジック及び能力書き込みアドレス追跡プログラムロジックは、上述の能力チェック回路及び能力書き込みアドレス追跡回路の機能をエミュレートする。
【0034】
上記の考察では、ハードウェアによって提供された処理システムのアーキテクチャ上の特徴、又はソフトウェアが陳腐化した能力のスイープに有用であり得る能力書き込み要求を使用してどのアドレスが書き込まれているかを特定することを可能にする対応するシミュレータコンピュータプログラムのアーキテクチャ上の特徴が説明されている。このようなスイープに特に有用であるが、ソフトウェア開発者又はコンパイル担当者は、能力書き込み追跡構造の他の使用を見出し得ることが理解されよう。
【0035】
対応する方法においては、陳腐化した能力を無効にするためのスイープを制御する方法が、能力書き込みアドレス追跡構造を使用して提供され得る。したがって、ソフトウェアによって制御され得るこの方法は、能力書き込みアドレス追跡構造によって能力書き込みアドレス追跡を可能にすることと、次いで、メモリをスイープして、陳腐化した能力を無効にすることであって、陳腐化した能力は、アドレスの許容範囲がアドレスの1つ以上のターゲット領域と重複する能力である、スイープすることと、次いで、メモリをスイープした後、能力書き込みアドレス追跡構造によって追跡されたアドレスに対応する1つ以上の選択されたメモリアドレス領域を再スイープして、1つ以上の再スイープされた選択されたメモリアドレス領域内に記憶された陳腐化した能力を無効にすることとを含むことができる。したがって、能力書き込みアドレス追跡構造を使用することによって、スイーププロセスは、他のプロセッサコア若しくはスレッドにおける処理を停止する必要性、又は有効な能力書き込みの継続を阻止する必要性を回避することができ、これは、パフォーマンスが改善し得、これは、追跡構造が、主スイープ中に能力書き込みがなされるメモリ領域のターゲット化された再スイープを可能にするためである。
【0036】
コンピュータプログラムは、データ処理装置が上述の方法を行うことを制御するために提供され得る。コンピュータプログラムは、非一時的なコンピュータ可読記憶媒体に記憶されてもよい。
【0037】
図1は、複数のプロセッサコア(CPU)4を備えるデータ処理システム2の一例を概略的に示す。この例では、4つのCPUがあるが、より多くのCPU又はより少ないCPUが提供され得ることが理解されよう。CPUは、相互接続部6を介して共有メモリシステムにアクセスし、相互接続部6は、コア4とメモリとの間のトランザクションをルーティングすることに加えて、それぞれのプロセッサコア4内のキャッシュされたデータ間のコヒーレンシーも管理することができる。
図1には示されていないが、システムはまた、メモリトランザクションを開始することができる他のタイプのマスターデバイス、例えば、グラフィック処理ユニット、表示コントローラ、ネットワークコントローラ、又は他のタイプのデバイスなどを含み得る。マスターデバイスによって開始されたトランザクションは、相互接続部によってスレーブデバイスにルーティングされる。この例では、スレーブデバイスは、メモリユニット10、12へのアクセスを制御するメモリコントローラ8を含む。この例では、メモリユニット10は、動的ランダムアクセスメモリ(DRAM)ユニットであり、メモリユニット12は、不揮発性RAMユニットである。他のタイプのメモリがまた提供されてもよく、他のタイプのスレーブデバイス、例えば、周辺制御装置、入力/出力ユニットなどがまた提供されてもよいことが理解されよう。相互接続部6は、共有キャッシュ14を有し得、共有キャッシュ14は、CPU4のうちのいずれからもアクセス可能であり、基礎となるメモリシステムからのデータをキャッシュする。
【0038】
この例では、相互接続部はまた、以下でより詳細に説明する能力書き込みアドレス追跡回路20を含む。他の例では、能力書き込みアドレス追跡回路20の一部分又はすべては、個々のプロセッサコア4間に分配され得る。
【0039】
図2は、CPU4のうちの所与の1つ内の構成要素の例を示す。プロセッサコア4は、いくつかのパイプラインステージを有する処理パイプラインを含むことができ、パイプラインステージは、命令キャッシュ32からプログラム命令をフェッチするためのフェッチステージ30と、フェッチされた命令を復号して、残りのパイプラインステージを制御してこれらの命令によって表されたアクションを行うための制御信号を生成するための復号ステージ34と、命令に必要なオペランドがレジスタ38内で使用可能であるかどうかをチェックし、命令のオペランドが使用可能であるときの実行のための命令を発行するための発行ステージ36と、発行された命令を実行して、復号された特定の命令に応じたタイプの対応する処理動作を行うための実行ステージ39と、実行された命令の結果をレジスタ38に書き戻すための書き戻しステージ40とを含み得る。この例では、実行ステージ39は、異なるタイプの命令を実行するいくつかの実行ユニットを含む。例えば、実行ユニットは、演算又は論理命令を整数オペランドに実行する演算/論理ユニット(ALU)42と、浮動小数点命令を、浮動小数点形式で表されるオペランドに実行する浮動小数点ユニット44と、メモリシステムからレジスタ38にデータをロードするためのロード動作を実施する、又はレジスタ38からメモリシステムにデータを記憶するためのストア動作を実施するロード/ストアユニット46とを含み得る。他のタイプの実行ユニットがまた提供され得ることが理解されよう。また、これは、単に、可能なパイプラインアーキテクチャの一例であり、他のタイプのパイプラインステージがまた提供され得る。例えば、アウトオブオーダー処理をサポートするプロセッサにおいて、パイプラインはまた、レジスタのリネームを行って、命令によって指定されたアーキテクチャ上のレジスタをハードウェアで提供された物理レジスタにマッピングするためのリネームステージを含み得る。
【0040】
プロセッサコア4はまた、ロード/ストアユニット46によって要求されたときのメモリへのアクセスを管理するメモリ管理ユニット(MMU)50を含む。MMU50は、アドレス変換を行って、ロード/ストアユニット46によって提供された仮想アドレスを、必要なデータをメモリシステムから特定するための物理アドレスに変換することができる。アドレス変換は、メモリ内のページテーブル構造内に記憶されたアドレス変換データを参照して行われる。MMU50は、ページテーブル構造から導出された情報をキャッシュするためのアドレス変換キャッシュとして機能する1つ以上の変換ルックアサイドバッファ(TLB)52を含む。TLB 52は、ページテーブルエントリ自体をキャッシュすることができ、及び/又は特定の仮想アドレスを変換するためのページテーブルエントリがメモリ内で見出され得るアドレスに関する情報をキャッシュすることができ、このため、関連する情報がTLB 52内でキャッシュされているアドレスのアドレス変換は、ページテーブルウォークが、メモリ内のページテーブル構造内の関連するアドレス変換情報の位置を見出すために必要とされるアドレスのアドレス変換よりも迅速に行われ得る。いくつかの例では、MMU50は、単一のTLBを含み得る。代替的に、MMU50は、複数のレベルのTLB 52を有してもよく、仮想アドレスは、最初に、レベル1 TLB内で探索され、レベル1 TLB内でミスがある場合、次いで、レベル2 TLBが探索されて、TLB容量をレイテンシに対してトレードオフすることができる。また、簡潔さのために
図1には示されていないが、命令キャッシュ32からの命令フェッチはまた、MMU50を使用して、又はデータ側のMMU50とは異なる別個の命令側のMMUを使用して、アドレス変換がなされ得る。
【0041】
この例でのCPU4は、MMU50によって特定された物理アドレスに基づくロード/ストア命令に応答してアクセスされるレベル1データキャッシュ54を含むことができ、また、共有レベル2キャッシュ56が、データと命令の間に共有されて提供されており、レベル1命令キャッシュ32又はレベル1データキャッシュ54内でミスがある場合、共有レベル2キャッシュ56はアクセスされ得る。これは、単に、可能なキャッシュ階層の一例であり、他の配置がまた可能であり得ることが理解されよう。また、CPU4内に提供された最終レベルのキャッシュ内でミスがある場合、要求がメモリに送信される前に、2つのレベルを超えるキャッシュをCPU4内に提供することが可能である。したがって、CPU4の厳密な設計を変化させるように柔軟性がある。
【0042】
レジスタ38は、いくつかのタイプのレジスタを含む。レジスタ38は、命令のためのオペランド及び実行された命令の結果を記憶するN個の汎用レジスタ60のセットを含み得る。汎用レジスタ60は、整数レジスタ及び浮動小数点レジスタを含むことができる。また、レジスタ38は、プロセッサコア4の機能を制御する制御パラメータを記憶することができる制御レジスタ62を含み得る。いくつかの異なるタイプの制御レジスタ、例えば、現在の実行点に対応するアドレスを示すプログラムカウンタ、以前に実行された命令の結果に応じてセットされ得るステータスフラグ、及びシステムの現在の動作モードを示すことができる現在モードレジスタがあってもよい。
図2の例では、制御レジスタ62は、現在実行コンテキスト識別子レジスタ64を含むとして示されており、現在実行コンテキスト識別子レジスタ64は、処理パイプラインによって現在実行されている実行コンテキストと関連付けられた現在実行コンテキスト識別子の指示を記憶することができる。プロセッサは、異なるソフトウェアプロセスを実行することをサポートすることができ、それぞれのソフトウェアプロセスは、対応する実行コンテキスト識別子、より具体的には、アドレス空間識別子(address space identifier、ASID)を有し得る。アドレス空間識別子は、それぞれのソフトウェアプロセスのためのページテーブル構造の異なるセットの位置を見出すために、MMU50によって使用され得、TLB 52内のエントリは、対応するASIDがタグ付けされて、所与の実行コンテキストによってトリガされたアドレス変換要求が、この実行コンテキストに対応するTLBエントリに対してのみ一致することができることを確実にすることができる。
【0043】
図2に示すように、プロセッサコア4はまた、能力を記憶する能力レジスタ70のセットを有し得る。この例では、M個の能力レジスタC
0~C
M-1が提供されている。それぞれの能力レジスタ70は、能力を記憶することができ、それぞれの能力レジスタ70は、メモリ内の特定のアドレスを示すアドレスポインタ72と、ポインタフィールド72内に記憶されたポインタの有効な使用を限定する1つ以上の条件を定義する関連付けられたポインタ使用限定情報74とを含む。ポインタ使用限定情報は、アドレスの許容範囲の指示を含み、アドレスの許容範囲内で、ポインタ72は定義されることが許容されている。この例では、許容範囲は、許容範囲の開始アドレスを特定するベース値76及び許容範囲の終了アドレスを暗黙的又は明示的に特定する限定値78によって符号化されている(限定78は、ベースアドレス76に適用されるように、絶対アドレスとして、又はサイズ若しくはオフセットとして符号化され得る)。許容範囲情報を符号化する他の方法があり得、例えば、ベース値76及び限定値78を含む別個のテーブルにポイントすることができる範囲識別子による方法があり得ることが理解されよう。範囲情報76、78に加えて、能力レジスタはまた、さらなる使用限定をポインタの使用に課し得るパーミッション80を記憶し得る。例えば、パーミッション80は、能力に対応する許容可能なアドレスの範囲が読み取りのみ可能であるか、又は読み取り及び書き込みの両方が可能であるかを指定することができる。また、パーミッション80は、アドレスの対応する範囲内のアドレスにおいて記憶された命令をフェッチ及び実行することが許容可能であるかどうかを指定することができる。また、パーミッションは、対応する能力が他の能力のロード又はストアを制御するために使用されることが許容されているかどうかを指定することができる。別のタイプのパーミッションは、能力が他のソフトウェアプロセスと共有され得るか、又は現在のソフトウェアプロセスによってのみ使用されるように制限されているかを指定するパーミッションであり得る。また、パーミッションは、ソフトウェアのどの特権レベルが能力を使用することが許容されているかを指定し得る。これらの追加の使用限定のうちのいずれか1つ以上は、パーミッション80によって課され得、すべてのこれらのパーミッションが所与のプロセッサアーキテクチャによってサポートされる必要はないことが理解されよう。
【0044】
したがって、一般に、少なくともポインタ72の許容範囲を含む1つ以上の使用限定条件を定義することによって、これは、ポインタ72の使用が、ポインタ72の適用可能性において制限されていることを意味し、これは、バッファオーバーフロー又は任意のメモリアドレスへのアクセスなどの一般的なソフトウェア攻撃を阻止するのに有用であり得る。
【0045】
図3に示すように、能力がメモリシステムに記憶されているとき、ポインタ72及び使用限定情報74に加えて、能力はまた、能力が有効であるかどうかを指定する関連付けられたタグ値82を有し得る。このタグ82は、能力を記憶するメモリ位置を従来の能力以外のデータを記憶するメモリ位置から区別するために、ハードウェアによって使用される。タグ値82は、ソフトウェアトランスパレントであり、すなわち、アドレス又はメモリの一部分ではなく、したがって、能力自体とは別個に保持され得る。
【0046】
処理パイプラインによってサポートされた命令セットアーキテクチャは、能力と相互作用する命令を含み得る。例えば、命令セットアーキテクチャは、能力レジスタ70のうちの1つに能力を書き込むための能力セット命令、能力をメモリから能力レジスタ70内にロードするための命令、能力を能力レジスタ70からメモリ内に記憶するための命令、及びメモリへのデータ又は命令アクセスを制御するために、能力レジスタ70内に記憶された能力を使用するための命令のためのサポートを含むことができる。能力レジスタ70内に記憶された能力がメモリへのアクセスを制御するために使用されたとき、指定された能力レジスタ内の能力の使用は、能力チェック回路86によってチェックされて、能力が使用されているシナリオが有効であるかどうかが、参照された能力レジスタ70内の指定された能力の範囲情報76、78及びパーミッション80に基づいてチェックされる。例えば、能力チェック回路86は、ポインタ値72が範囲情報76、78によって定義された許容範囲内にあるかどうか、及び要求されている動作のタイプ(例えば、読み取り又は書き込み又は命令フェッチ)が、指定されたパーミッション80を考慮して許容されているかどうかをチェックすることができる。したがって、能力チェック回路86のハードウェアは、能力を使用して許容可能なアドレス領域外の情報にアクセスする試みが失敗し、また、指定されたアドレス領域内で不適切なタイプの動作を行う試みが失敗し、セキュリティ例外を潜在的に発し得ることを確実にする。特定の領域についてページテーブル構造内に記録されたメモリパーミッションは、いくつかの領域が能力を介してのみアクセスされ得る(及び、能力以外の読み取り/書き込みがなされない)と定義することをサポートし得、これは、能力によって提供された保護が、特定の領域についてバイパスされないことを施行することができる。また、いくつかの実装形態は、動作モードのためのアーキテクチャ上のサポートを提供し得、動作モードにおいて、能力によって制御されたアクセスのみが許容されており、能力によって制御されていないメモリへのアクセスが禁止され得、これは、能力保護がメモリへのすべてのアクセスについて必要とされることを確実にすることが望まれる場合、選択され得る。
【0047】
したがって、能力をサポートするアーキテクチャの提供は、攻撃に対する空間的保護をもたらすことができる。しかしながら、
図3の上部に示すように、ソフトウェアは、能力を自由に移動、コピー、及び記憶することができ、このため、同じ能力C0は、メモリアドレス空間全体内の複数のメモリ場所に保持され得るという点で、問題が依然として生じ得る。例えば、
図3は、範囲情報76、78によって指定された範囲がアドレス範囲Aに対応する能力C0が、アドレス空間内の3つの異なる位置B、C、Dにコピーされている場合を示す。メモリアドレス領域Aがその後、割り当て解除され、他のソフトウェアプロセスによる使用の潜在性について解放されている場合でも、以前に参照された領域Aをカバーする範囲情報を有するメモリアドレス空間の他の領域内に依然として記憶された陳腐化した能力C0がないことが保証されない場合、他のプロセスがこの領域を潜在的に保護必要情報のために使用することを許容することは危険であり得る。
【0048】
このような陳腐化した能力を悪用した攻撃の一例として、
図4は、被害者のアプリケーションと信頼できないライブラリとの間でのUse―After―Free攻撃を示す。基礎となるコード及びデータセグメントは、能力に基づいて互いに空間的に隔離されているとする。攻撃は、被害者が被害者のメモリの一部分を能力C1及びC3の形態で攻撃者と意図的に共有していることに依存し、例えば、画像処理アプリケーションは、画像を保持するメモリへのフィルタライブラリアクセスを認可する。攻撃者は、第1の呼び出し中に(攻撃者に割り当てられたメモリのある領域に能力C1をコピーすることによって)C1を隠匿し、次いで、第2の呼び出し中にC1を回復する。この間に、被害者のプロセスは、能力C1によってカバーされていた領域を解放し、能力C2によってカバーされておりある保護必要データを保持することになる新しいメモリ領域を割り当てる。メモリ割り当て者は通常、以前に解放されたメモリを再使用するため、C2は、C1によってカバーされたメモリと重複し得る。したがって、攻撃者は、能力C2へのアクセスを与えられておらず、このため、被害者は、C2が秘密へのアクセスに対して保護するのに十分であることを期待し得るが、攻撃者は、陳腐化した能力C1を使用して、C2と関連付けられた領域内に保持されている秘密情報を取り出すことができる。
【0049】
上述のような攻撃を軽減する1つのアプローチは、メモリの再使用を回避する(すなわち、割り当て解除後に、C1と関連付けられたメモリ領域を再使用することを禁止する)ことである。暗黙的なメモリリークは、大きな仮想アドレス空間を有するシステム、及び広範囲のメモリを割り当てしない又は頻繁な割り当て解放サイクルを行わないアプリケーションについて許容可能であり得る。しかしながら、これらのシステムでも、固有のメモリ断片化の結果としてのキャッシュ汚染から生じるパフォーマンス喪失を被り得る。いずれの場合でも、解放された能力のすべてのインスタンスを無効にするためのある形態の取り消しポリシーが、安全なメモリ再使用を可能にするために望ましいことがある。
【0050】
例えば、解放される能力は、取り消しリストに追加され得る。これらの能力によってカバーされたメモリは、このような能力のすべてのインスタンスがメモリから無効にされるまで再使用されない。取り消しポリシーは、取り消しスイープをトリガする前に、陳腐化したメモリのある閾値まで、例えばヒープスペースの25%まで、取り消しリスト上に能力を収集することができる。次いで、スイープは、
ターゲットアプリケーションによって現在アクセス可能なすべてのレジスタ及びメモリを検索し、
当該レジスタ及びメモリに保持されたすべての陳腐化した能力であって、当該すべての陳腐化した能力アドレスについて、アドレス76、78の許容範囲が、取り消しリスト上で特定された領域のうちの少なくとも1つと重複する、すべての陳腐化した能力を特定し、
陳腐化した能力のタグ82をクリアすることによって、スイープにおいて特定された陳腐化した能力を無効にする。
【0051】
しかしながら、このようなスイープを行っているとき、他のスレッドが(例えば、他のプロセッサコア4で)スイープスレッドと平行して実行している場合、又はスイープソフトウェアが中断され、次いで、スイープソフトウェアが中断後に再開される前にそれが中断されている間、他のコードが実行される場合、このような他のスレッドが、既にスイープされたメモリ領域内に陳腐化した能力を書き込むことができるという危険があり、これは、いくつかの陳腐化した能力がスイープにおいて見出されない危険を生じさせ得る。
【0052】
これに対処する単純なアプローチは、スイープ中に「世界を止める」こと、すなわち、他のすべてのスレッドを停止し中断を無効化することである。しかしながら、このアプローチのパフォーマンスへの影響は、非常に望ましくない、又はリアルタイムのアプリケーションについて許容可能でない。
【0053】
取り消しスイープを加速する1つのアプローチは、能力の移動を限定することである。例えば、「能力ごと」のパーミッションビットが、能力が能力ストアのベースアドレスとして使用され得るかどうかを判定するために使用され得る。次いで、割り当て者は、メモリのすべての領域をスイープから除外することができ、メモリのすべての領域について、割り当て者は、当該パーミッションビットセットを少なくとも1つの能力に提供していない。同様のパーミッションビットがまた、ページに割り当てられ得る。これは、オペレーティングシステム(operating system、OS)がメモリの大きな領域をスイープから除外することを可能にし、これは、メモリの大きな領域が能力を保持することができないためである。
【0054】
「能力記憶可能」パーミッションビットは、メモリのどの領域が能力を保持することができるかを制限する。しかしながら、「能力記憶可能」パーミッションビットは、これらの領域の実際の内容に関する情報を提供せず、例えば、ページは能力を記憶し得るが、ページは、ランタイムにおいて能力を含まず、したがって、スイープされる必要はない。これを改善するために、「能力ダーティ」ビットは、それぞれのページと関連付けられ得る。能力が特定のページに最初に書き込まれるとき、「能力ダーティ」ビットはセットされる。スイープアルゴリズムは、スイープ中に、ビットを評価してこれらのページをスキップすることができる。
【0055】
しかしながら、上記のアプローチは、3つの主要な限界を示す。
a)スケーリング
アプリケーションは、数テラバイトを包含するデータベースなどの大きなメモリフットプリントを示し得る。
スイーププロセスは、多数のページ及び/又は能力に対応するパーミッションビットを取得及び評価する必要があり得る。
これは、特に、対応するページテーブルがスイープの開始時にキャッシュ内に存在しない場合に、大きなパフォーマンスオーバーヘッドを生じさせ得る。
b)スイープから除外され得るページの数
パーミッションビットは、コンパイル時に使用可能な情報に依存する可能性が高く、したがって過度に寛容であり得る。
ダーティビットは、より動的であるが、経時的に、パーミッションビットと同じページの数に近づき得る、すなわち、ページへの能力ストアの可能性が経時的に増加する。スイープ中にダーティビットをクリアすることは可能であるが、能力をもはや含まないことが知られているページのみがクリアされ得る。
c)スイープ中に世界を止める必要性を回避するためにソフトウェア内の情報を提供する
スイープ中の平行スレッド又は中断を可能にするために、以前にスイープされたメモリへの陳腐化した能力の書き込みを検出又は阻止することができる。
ページパーミッションは、スイープされたページへの能力書き込みを一時的に禁止するために使用され得る。しかしながら、これはまた、当該領域への通常の能力の書き込みにも影響する。例外ハンドラがこれらの場合を区別するために必要とされ得る。
ダーティビットは、能力を保持しないページについてのみクリアされ得るため、ダーティビットは、陳腐化した能力のみの追跡には適していない。
【0056】
したがって、上述のアプローチは、パフォーマンスへの大きな影響がある。対照的に、
図1及び
図2に示すように、以下に説明されているアプローチは、能力書き込みアドレス追跡構造100内の能力書き込み動作がなされるアドレスを追跡することができるハードウェアでの能力書き込みアドレス追跡回路20を提供する。能力書き込みアドレス追跡回路20は、
図1に示すように複数のプロセッサコア4間で共有されてもよく、又は
図2に示すように個々のプロセッサコア内に提供されてもよく、又はこれらのアプローチのハイブリッドであってもよく、これらのアプローチのハイブリッドでは、いくつかの追跡ハードウェアが共有されており、他のハードウェアが、それぞれのコア4について別個に提供されている。能力書き込みアドレス追跡構造100自体は、専用ハードウェア記憶装置であってもよく、又はメモリシステム内に実際に記憶されており能力書き込みアドレス追跡回路20によって維持されているデータ構造であってもよい。能力書き込みアドレス追跡回路20は、能力書き込み動作(能力レジスタ70からメモリに能力を書き込むための動作)のアドレスの追跡が有効化されているか又は無効化されているかを制御する有効化レジスタ102、及びメモリシステム内に記憶された追跡構造を使用する実装形態において、メモリ内の追跡構造の位置を見出すことができるいくつかの追跡メタデータレジスタ104と関連付けられてもよい。例えば、メタデータレジスタ104は、追跡構造の開始アドレスを特定するベースアドレス106と、次のエントリが書き込まれる追跡構造内の点をマークするカウンタレジスタ108とを含み得る。また、メタデータレジスタは、リミットレジスタ110を含み得、リミットレジスタ110は、オーバーフローに対して守るために、アドレス追跡構造について許可された最大サイズを指定することができる。様々なレジスタ102、104は、ソフトウェアによって更新可能であり得る。
【0057】
したがって、追跡回路20をハードウェアで提供することにより、これは、世界を止めるスイープの必要性を回避することによって、取り消しスイープを加速するのに役立ち得る。メモリへの能力書き込みは、取り消しスイープ中、追跡される。スイープの終了時、この追跡情報は、選択的に再スイープをして、他のスレッドによって書き込まれた又はスイーププロセスの中断中に書き込まれた陳腐化した能力の位置を見出すために使用され得る。いくつかの例では、能力書き込みアドレス追跡は、変換ルックアサイドバッファ(TLB)52を使用し得る。例えば、取り消しスイープ外では、TLBは、能力書き込みを追跡しなくてもよい。スイープの開始時に、能力書き込みの追跡は有効化され得る。スイープ中、TLB 52は、アドレスの対応するページへの能力書き込みの際にダーティビットをセットすることができ、ダーティビットの0から1への遷移の際に、メタデータレジスタ104によって特定されたアドレスにおいてメモリ内に維持された構造100内のダーティページのアドレス及びASIDを記録することができる。スイープアルゴリズム自体は、有効な能力をメモリに書き込まない。したがって、スイープアルゴリズムは、ダーティビットをセットせず、セットされたダーティビットは、(スイープアルゴリズムと平行して実行していることがあり、又はスイープアルゴリズムの中断中に実行し得る)他のスレッドによって行われる能力書き込みによって引き起こされ得る。スイープの終了時に、スイープアルゴリズムは、能力書き込みアドレス追跡構造100をチェックすることができ、ダーティとして示されているページを選択的に再スイープして、他のスレッドによって又は中断中に書き込まれた陳腐化した能力の位置を見出し当該陳腐化した能力を無効にすることができ、追跡構造100内の当該陳腐化した能力の記録をクリアすることができる。任意選択的に、陳腐化した能力のさらなる書き込みを阻止してその後の再スイープを回避するために、スイープアルゴリズムは、再スイープ中に、能力書き込みを阻止するためにストア能力パーミッションをセットしてもよく、又は他のスレッドの処理を停止するために世界を止めるアプローチを使用してもよい。
【0058】
図5は、能力書き込みによって「ダーティ」にされたページを追跡するために採用され得るハードウェアの例を示す。TLB 52内のTLBエントリは、それぞれがダーティビット(能力書き込み済みインジケータ)120を記憶するように拡張され得る。このビット120は、ページテーブルに持ち越されず、このため、ビット120は、これらのテーブルと関連付けられた既に大きなオーバーヘッドへの影響がない(TLBエントリが、ダーティビット120を記憶するTLBの最後のレベルから排除されたとき、ダーティビットは単純に廃棄され得る)ことに留意されたい。
図5の決定ボックス122に示すように、ダーティビット120の更新は、(ソフトウェアによってセットされた)有効化制御レジスタ102によって有効化/無効化されて、ソフトウェアによって選択されたある期間、例えば、ソフトウェアが陳腐化した能力取り消しスイープを行っているときの期間へ能力ストアの追跡を限定することができる。したがって、能力書き込みを追跡していないとき、以前にダーティにされていない所与のページへの能力書き込みがある場合でも、ダーティビットはセットされない。また、
図5の決定ボックス124に示すように、能力以外のデータを書き込むタイプの所与のページへの書き込みは、ダーティビット120のセットを引き起こさず、追跡は、能力がメモリ内の対応する場所に書き込まれることを要求する能力書き込み動作に特有である。
【0059】
また、アドレスの所与のページについてのダーティビット120の0から1への遷移の際に、対応するページのアドレス及び当該アドレスのアドレス空間識別子(ASID)は、能力書き込みアドレス追跡構造100内に記録される。ASIDを記録することは不可欠ではないが、これは有用であり得、このため、ソフトウェアは、スイープされているプロセスによって使用されるページをエイリアシングする、異なるASIDと関連付けられたページのいくつかの不必要な再スイープを回避できる。
【0060】
図5は、ダーティにされたページ上にアドレス/ASID情報を記録するために使用され得る能力書き込みアドレス追跡構造100の2つの例を示す。これらの例は代替形態であり、両方を提供する必要はない。
【0061】
図5の上部の例は、ベースアドレスレジスタ104及びカウンタレジスタ108を使用して、連続した順序で情報を記録するダーティページバッファを示す。能力書き込み追跡が有効化されているとき、(対応するTLBエントリ内にダーティとして以前に示されていない)新しいページが能力書き込み動作によってダーティにされる都度、能力書き込みアドレス追跡回路20は、ダーティページのASID及びベースアドレスを、所与のサイズのある数のインクリメントをベースレジスタ104内のベースアドレスに追加することによって得られたアドレス「Dst」におけるエントリに書き込み、インクリメントの数はカウンタレジスタ108に基づいて選択される。バッファはメモリ内に保持され得るため、リミットレジスタ110が、計算されたアドレスDstが限界を超える場合、例外をシグナリングすることによってオーバーフローを回避するために使用される。例外に応答して、例外ハンドラは、オペレーティングシステム又は他の監督コードにトラップすることができ、以下のいずれかを含む様々なバッファオーバーフロー処理応答をトリガすることができる。(i)リミットレジスタ110を更新して、(おそらく、バッファ直後のメモリの領域からアドレス空間の異なる部分にデータを移動させた後)ダーティページバッファに使用可能な空間を拡張すること、(ii)以前に割り当てられたバッファよりも大きなサイズの新しいメモリのブロックをダーティページのバッファについて割り当て、現在のダーティページバッファのエントリをメモリの新たに割り当てられたブロックにコピーし、次いでベースアドレス106及びリミットレジスタ110を更新して、メモリの新たに割り当てられたブロックに対応させること、又は(iii)次回は、スイープが行われている間、より少ない能力書き込みが発生し得ることを期待して、スイープソフトウェアにスイープを再度開始させること。メタデータレジスタ104及びバッファコンテンツ100は、特権ソフトウェア、例えば、取り消しコードによってのみアクセス可能であるように制限され得る。これは、例えば、取り消しコード外で共有されていないバッファを包含するデータ能力を使用することと、取り消しコードを包含するコード能力におけるパーミッション80内に特権ビットをセットすることとによって確実にされ得る。
【0062】
合理的な迅速な取り消しスイープとすると、複数のスレッドが同じコアで実行される可能性は低い。したがって、
図5に示すように、それぞれのバッファエントリと共にASIDを記憶することは非効率的であり得る。代替形態として、ダーティページバッファ100は、能力書き込みによってダーティにされたそれぞれのページアドレスを記録することができるが、ASIDのより小さいリストが維持され得、能力書き込みにおいて以前に見られなかった固有のASIDのみが、ASIDリストに追加される。代替的に、ASIDの正確なリストの代わりに、単一のレジスタ、(ダーティページバッファ内のダーティにされたページアドレスの正確なリストとは別個の)ブルームフィルタを使用して、観察されたすべてのASIDを追跡することができる。これは、低減されたメモリオーバーヘッドを偽陽性の潜在性に対してトレードオフする。
【0063】
図5の上部に示すダーティページバッファアプローチでは、これは、いくつかの利点を提供することができ得る。
カウンタは、最後の有効なエントリ(カウンタ-1)のインデックスを決定するために使用され得、このため、それぞれのエントリでの有効性ビットの必要性がない。
1つの加算器が、アドレス計算及びカウンタアップデータの両方に使用され得るため、ハードウェアの複雑さが限定される。
MMU50内のTLB回路を再使用してメモリへの書き込みを処理する。
アドレス特定が高精度であり、このため、ソフトウェアは、能力書き込みによってダーティにされていることが知られているページを再スイープするのみでよい。
【0064】
図5の下部は、代替的なアプローチを示し、代替的なアプローチは、ページバッファの代替としてブルームフィルタを使用する。バッファと同様に、ブルームフィルタは、ダーティビットの0から1への遷移の際に更新されるが、ページアドレス及びASIDのハッシュを使用し、ハッシュの結果に対応するブルームフィルタのいずれかのビットが、(既にセットされていない場合)セットされる。これは、正確性がより低いアドレスの追跡を提供する。追跡構造100を読み取って、どのページを再スイープするかを決定するとき、スイープソフトウェアは、ブルームフィルタ表現に対してヒットするいずれかのページアドレス(すなわち、当該ページアドレスについて、ページアドレスのハッシュは、ハッシュ値内のすべてのビット1がブルームフィルタ表現内にセットされたビットに一致する値を与える)が、能力書き込みによってダーティにされたページのうちの1つであり得るとし得る。これは、いくつかの偽陽性を含み得る可能性があり、実際には、能力書き込みによってダーティにされていないページは、他のページへの能力書き込みに応答してセットされたビットの組み合わせに対してエイリアシングするページのアドレスのハッシュに起因して、ダーティにされたものとして検出される。このような偽陽性は、ときに、(いくつかのページを不必要に再スイープするパフォーマンスコストの点で)犠牲が大きいことがあるが、危険は、使用されるハッシュアルゴリズム及びダーティにされたページのアドレスの分配に依存しており、この危険は、以下のような他の利益を可能にするのに許容可能であり得る。
ハードウェアの複雑さの低減(単純なハッシュ及びOR回路のみを必要とし、全加算器又はメモリアクセスが不必要である)
バッファオーバーフローの危険なしに、無制限の数のページを処理することができる
システムメモリを使用しない
エントリの数を増加させるための例外が不必要である
複製によって影響されない(同じTLBエントリが排除され、再フェッチされ、再度ダーティにされた場合、再スイープを必要とするとして特定された構造又はページのサイズを変更せず、これは、ダーティページバッファとは異なり、ダーティページバッファにおいては、複製エントリの危険があり、複製エントリは、複製を削除するためのある処理を必要とする、又は不必要な再スイープにおいてパフォーマンスを浪費する)。
【0065】
提示された例には、多くの他の代替形態がある。例えば、両方の例は、ページアドレスのハッシュによってインデックス付けされたテーブル構造に組み合わされ得る。次いで、それぞれのエントリは、ブルームフィルタを保持して、ブルームフィルタにエイリアシングするすべてのページを表し得る。これは、ランタイムでバッファを増加させる必要性を軽減し、偽陽性の危険を低減する。代替的に、ブルームフィルタの代わりにそれぞれのエントリを有する連結リストを使用することは、偽陽性の危険を削除することができるが、また、構造の複雑さを増加させる。取り消しスイープ中にダーティにされるページの数は小さい可能性が高いため、上記の限定されたバッファサイズは大きな要因である可能性が低いことに留意されたい。
【0066】
マルチコア環境の文脈において、取り消しスイープは、以前にスイープされたメモリへの陳腐化した能力の書き込みを阻止又は検出し、現在スイープされているページへの正当なアクセスを処理し、レジスタ及び他のコアに関連する他のメモリ構造内に保持された陳腐化した能力の位置を見出す必要があり得る。上述のダーティページ追跡構造は、他のスレッドを停止させる必要性なしに、以前にスイープされたメモリへの陳腐化した能力の書き込みの検出を可能にする。ダーティページ追跡構造は、このような書き込みを阻止するのではなく検出するのみであるため、ダーティページは、再スイープされる必要があり得る。その後の反復の必要性を回避するために、アルゴリズムは、再スイープ中に世界を停止し得る。代替的に、これは、スイープされているページの「能力記憶可能」パーミッションビットを一時的にクリアすることができる。能力をこれらのページに書き込むことを試みる平行スレッドは、したがって、OSにトラップする。対応する例外ハンドラは、スイープを意識する必要がある。スイープ外で、これは、ページの正当なパーミッション違反を処理する。スイープ中に、これは、スイープが完了するまで、この戻りを遅延させることができる、又はスレッドに直ちに戻ることができる。後者は、違反である能力ストアのリプレイをトリガし、スイープが元のページパーミッションを復元することによって完了するまで、さらなる例外事象をもたらす。より複雑なハンドラは、スレッドが、進行しているスイープ中でも継続することを可能にし得る。
【0067】
提案された追跡構造は、コア間で共有されてもよく、又は個々のコアについて複製されてもよい。ページの初期のダーティ化は稀であると考えられるため、関連付けられたハードウェアオーバーヘッドをコア間で共有することが可能であり得る。複製された構造の場合、ASIDは、現在動作されているプロセスに属さない構造をスキップするために、スイープアルゴリズムによって使用され得る。上述のように、ASIDの提供は任意選択である。
【0068】
ソフトウェアが別のコアのレジスタ内に保持された陳腐化した能力をクリアする1つの方法は、関連するスレッドを当該スレッドのASIDに基づいて特定し、コンテキストスイッチをトリガし、メモリ内のスワップアウトされたレジスタの内容を評価することである。これらのコンテキストスイッチは、取り消しスイープの終了時に、すなわち、すべての陳腐化した能力がメモリから除去されると、行われ得る。これは、イッチアウトされたスレッドが陳腐化した能力をメモリから取得し得る危険なしに、スイッチアウトされたスレッドへの即時戻りを可能にする。
【0069】
図5の例は、TLB内のダーティページの追跡を示すが、別のタイプのキャッシュ(L1データキャッシュ54など)を使用して、能力書き込みがなされるアドレスのブロックを追跡することも可能である。また、いくつかの例では、能力書き込みがなされるアドレスを追跡するためのダーティビット120の使用は、不必要であり得、所与のアドレスへの能力書き込みについてのこれらの例では、能力書き込みアドレス追跡が有効化されているとき、追跡回路20は、同じアドレスへの能力書き込みが既に前に行われたかどうかに関わらず、能力書き込みアドレス追跡構造100を単純に更新することができる。例えば、ブルームフィルタの例では、同じアドレスについて構造を重複して複数回更新する不利益がより少なく、このため、ダーティビット120をチェックするオーバーヘッドは必要であると考えられないことがある。一方、ダーティページバッファの例について、ダーティビット120の使用は、複製エントリがバッファに割り当てられる可能性を低減するのに非常に有用であり得る。
【0070】
図6は、上述のタイプの能力書き込みアドレス追跡構造100を使用して、陳腐化した能力のスイープを行う方法を示すフロー図を示す。
図6に示す方法は、陳腐化した能力を見出すためにメモリのスイープを行うことを担うソフトウェアによって実施されるステップを示す。
図6の方法は、ハードウェアがバックグラウンドで行っている動作、例えば、様々なプロセッサコア4から検出された能力書き込み要求に応答して、能力書き込みアドレス追跡構造100を更新するなどの動作を示さない。
【0071】
ステップ200で、任意選択的に、能力スイープソフトウェアは、例えば、能力書き込みアドレス追跡構造100からのすべてのアドレス、及び能力書き込み動作がなされたページをマークするために使用されるTLB又は他のキャッシュ内のすべてのダーティビットをクリアすることによって、能力書き込みアドレス追跡構造100をリセットすることができる。リセット動作は、能力書き込みアドレス追跡構造が既にクリアされていることが保証され得る場合、例えば、ソフトウェアが、能力書き込みアドレス追跡構造100を使用した後、能力書き込みアドレス追跡構造100を常にクリアする場合には、不必要であり得る。また、ステップ200でのリセットは、ソフトウェアが新たな能力書き込みアドレス追跡構造100を割り当てたばかりであり、このため、この追跡構造を初めて使用する場合(能力書き込みアドレス追跡構造が、能力書き込みアドレス追跡構造を割り当てられた結果としてクリアされていることがあるメモリの領域である実装形態において)、不必要であり得る。
【0072】
ステップ202で、スイープソフトウェアは、有効化レジスタ102をセットして、能力書き込みアドレス追跡回路20による能力書き込みアドレス追跡を有効化する命令を実行する。したがって、ここで、能力書き込みアドレス追跡回路20は、能力書き込み動作が対応するページ上で行われたことを検出したとき、TLB 52内のエントリをダーティとしてマークすることを開始し、このようなダーティページのアドレスを能力書き込みアドレス追跡構造100に書き込む(又は代替的に、例えば、上述のブルームフィルタを使用して、能力書き込みがなされるページのアドレスの不正確な表現を更新する)。この能力書き込みアドレス追跡は、スイープが進行している間、バックグラウンドで継続する。
【0073】
ステップ204で、陳腐化した能力を見出すためのメモリアドレス空間のスイープが開始する。ステップ204で、スイープされる次のメモリアドレス領域がスイープソフトウェアによって読み取られ、このメモリアドレス領域の内容が使用可能になったとき、ステップ206で、ソフトウェアは、読み取ったアドレス領域が陳腐化した能力を記憶しているかどうかをチェックする。ここで、能力は、能力の有効なタグ82がセットされており、能力について指定された範囲情報76、78が、取り消しがなされるアドレス領域の取り消しリストで指定された1つ以上のメモリアドレス領域のうちのいずれかと重複する場合、陳腐化していると考えられる。この取り消しリストは、更新されていることがあり、これは、メモリの領域がオペレーティングシステムによって割り当て解除されているが、アドレス領域が割り当て解除されるたびにスイープのパフォーマンスコストを負うことを回避するために、陳腐化した能力のスイープが、十分な数の領域がリストされるまで延期されていることがあるためである。読み取られたメモリアドレス領域が陳腐にした能力を記憶している場合、ステップ208で、陳腐化した能力は、陳腐化した能力のタグ値82をクリアすることによって無効にされる。ステップ208は、読み取られたメモリアドレス領域が陳腐化した能力を記憶していない場合、省略される。ステップ210で、ソフトウェアは、依然としてスイープされる必要がある少なくとも1つのメモリアドレス領域があるかどうかをチェックし、そうである場合、方法はステップ204に戻って、最終的にすべての必要なメモリアドレス領域がスイープされるまで、ステップ204~210を通ってループする。
【0074】
スイープされる必要があるメモリアドレス領域がない場合、方法はステップ212に進む。スイーププロセスが、以前にスイープされたメモリアドレス領域が陳腐化した能力を記憶しているかどうかをチェックするためにこれらの領域を既にチェックした後、他のスレッド又はプロセッサコアが、これらの領域に能力を書き込んでいることがあるという危険があるため、メモリアドレス空間がいくつかの陳腐化した能力を依然として含み得る危険があり、このため、選択的な再スイープが、能力書き込みアドレス追跡構造100によって示されているアドレス領域を陳腐化した能力についてチェックするために行われる。しかしながら、さらなる能力書き込みが再スイープ中に行われないことを確実にするために、ステップ212で、再スイープを行う前に、スイープソフトウェアは、能力書き込み動作が再スイープされたメモリで行われないようにアクションを取る。これは、異なる方法で行われ得る。一例は、単純に、他のコアにおけるすべての処理が停止される「世界を停止する」アプローチを使用することであり得る。しかしながら、「世界を停止する」アプローチは、パフォーマンスへの影響があるが、これは、能力書き込みアドレス追跡構造100に示されている少数のメモリアドレス領域の再スイープ中にのみ使用されているため、これは、ステップ204から210までの全メインスイープループ中に世界が停止された場合よりもはるかに低いパフォーマンスへの影響がある。代替的に、他のコアにおける処理を停止するのではなく、ソフトウェアは、スイープされたメモリアドレス空間のメモリパーミッションを更新して、メモリパーミッションが、再スイープの間、一時的に、能力を記憶するために使用されないことを示すことができる。
【0075】
ステップ214で、スイーププロセスはまた、能力書き込み動作を追跡することがもはや必要ないため、有効化レジスタ102をクリアすることによって、能力書き込みアドレス追跡を無効化する。
【0076】
ステップ216で、次いで、スイープソフトウェアは、能力書き込みアドレス追跡構造100に示されているメモリアドレス領域を再スイープし、これらの領域内に見出された陳腐化した能力を無効にする。ステップ216自体は、メインスイープ動作について行われるステップ204~210と同様のループを含み得るが、ループは、典型的には、メインループよりもはるかに少ない反復を繰り返す必要があり、これは、ループが、能力書き込みアドレス追跡構造100に示されている選択された領域のみをチェックするためであることが理解されよう。所与の領域が再スイープされると、ダーティページバッファが上述のように使用されている例では、能力書き込みアドレス追跡構造の対応する部分がクリアされ得る。ブルームフィルタ又は他の不正確な表現の場合、再スイープは、ヒットを生成するアドレスについてフィルタ表現をクエリしたとき、このアドレスをカバーしてもよく、これは、いくつかの偽陽性アドレスを含み得、いくつかの偽陽性アドレスは、能力書き込みアドレス追跡が行われた期間中に、実際に、能力書き込み動作がなされないが、再スイープされ、これは、これらのアドレスが、他のアドレスへの能力書き込み動作の結果としてセットされたフィルタ表現内のビットのパターンに対してエイリアシングするためである。
【0077】
再スイーププロセス216が終了すると、ステップ218で、スイープソフトウェアは、例えば、他のプロセッサコアにおける処理を再開することによって、又は「能力記憶可能」パーミッションを更新して、能力がスイープされたメモリ領域内に記憶されることを再度許容することによって、スイープされたメモリへの能力書き込み動作を再有効化することができる。
【0078】
ステップ212は、任意選択的であり、代替的なアプローチでは、メモリの再スイープ中に能力書き込みを阻止するのではなく、能力書き込みアドレス追跡は、再スイープ中に有効化されたままであることができ、次いで、再スイーププロセス216の複数の反復は、追加のアドレスが能力書き込みアドレス追跡構造100内に記録されず、再スイープが完了する時まで、行われ得る。
【0079】
能力書き込みアドレス追跡が有効化されているとき、メインスイープ又は再スイープが行われている間、能力書き込みアドレス追跡構造100がリミットレジスタ110によって指定された最大容量に達する又は最大容量を超える場合、例外がトリガされ得る。例外ハンドラは、様々に異なる方法でこの例外に応答することができる。例外ハンドラは、メタデータレジスタ104を更新することができ、追跡構造100の追加のメモリ空間を割り当てることができ、又は例外ハンドラは、次回は、スイーププロセス中により少ない能力書き込みが発生し得ることを期待して、単純に
図6のスイーププロセスを開始から再度再開させることができる。
【0080】
したがって、要約すると、能力書き込み動作がなされた選択されたアドレスを特定することができる追跡情報を維持する能力書き込みアドレス追跡回路20をハードウェアで提供することによって、これは、スイープソフトウェアが全メモリアドレス空間のメインスイープ中に世界を停止する必要がないことを意味し、これは、パフォーマンスを大幅に改善することができる。
【0081】
図7は、使用され得るシミュレータの実装形態を示す。上記の実施形態は、当該技術をサポートする特有の処理ハードウェアを動作させる装置及び方法の点において本発明を実装するが、コンピュータプログラムを使用して実装される本明細書に記載の実施形態による命令実行環境を提供することも可能である。このようなコンピュータプログラムは、ハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、シミュレータと呼ばれることが多い。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的には、シミュレータの実装形態は、シミュレータプログラム310をサポートするホストオペレーティングシステム320を任意選択で実行して、ホストプロセッサ330で実行してもよい。いくつかの配置では、ハードウェアと提供された命令実行環境との間に複数の層のシミュレーションがあってもよく、及び/又は、同じホストプロセッサで提供された複数の異なる命令実行環境があってもよい。歴史的に、強力なプロセッサが、合理的な速度で実行するシミュレータの実装形態を提供するために必要とされてきたが、このようなアプローチは、ある状況において、例えば、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるとき、正当化され得る。例えば、シミュレータの実装形態は、ホストプロセッサのハードウェアではサポートされていない追加機能を有する命令実行環境を提供してもよく、又は異なるハードウェアアーキテクチャと典型的に関連付けられた命令実行環境を提供してもよい。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬USENIX Conference、53~63頁に記載されている。
【0082】
実施形態が特定のハードウェア構築又は特徴を参照して説明されている程度に、シミュレーションされた実施形態では、同等の機能が、適するソフトウェア構築又は特徴によって提供されてもよい。例えば、特定の回路は、シミュレーションされた実施形態でコンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実施形態でソフトウェアのデータ構造として実装されてもよい。前述の実施形態で参照されているハードウェア要素のうちの1つ以上がホストハードウェア(例えば、ホストプロセッサ330)に存在する配置では、いくつかのシミュレートされた実施形態は、適する場合、ホストハードウェアを使用してもよい。
【0083】
シミュレータプログラム310は、コンピュータ読み取り可能な記憶媒体(これは、非一時的媒体であってもよい)に記憶されてもよく、プログラムインタフェース(命令実行環境)をターゲットコード300(これは、アプリケーション、オペレーティングシステム、及びハイパーバイザを含んでもよい)に提供し、プログラムインタフェースは、シミュレータプログラム310によってモデル化されているハードウェアアーキテクチャのアプリケーションプログラムインタフェースと同じである。したがって、上記の能力と相互作用する命令を含むターゲットコード300のプログラム命令は、シミュレータプログラム310を使用する命令実行環境内から実行されてもよく、このため、上述の装置2のハードウェア特徴を実際には有さないホストコンピュータ330は、これらの特徴をエミュレートすることができる。
【0084】
シミュレータコード310は、命令復号プログラムロジック312を含み得、命令復号プログラムロジック312は、ターゲットコード300のプログラム命令を復号し、ターゲットコード300のプログラム命令をホストプロセッサ330のネイティブ命令セット内に定義された命令の対応するセットにマッピングする。また、シミュレータコード310は、シミュレートされるターゲットアーキテクチャのレジスタ38、102、104をエミュレートするホストハードウェアのメモリ内のデータ構造を管理するプログラムロジック314をエミュレートするレジスタを含むことができる。また、能力有効性チェックプログラムロジック316が提供され得、能力有効性チェックプログラムロジック316は、上記の能力チェック回路86をエミュレートして、能力の要求された使用が、能力の範囲76、78及びパーミッション80を考慮して許容されているかどうかのチェックを行う。また、能力書き込みアドレス追跡プログラムロジック318が提供されてもよく、能力書き込みアドレス追跡プログラムロジック318は、追跡が有効化されているとき、メモリへの能力の書き込みを検出し、能力書き込み追跡構造を維持して、どのページに能力書き込みがなされたかについての指示を提供する。したがって、シミュレータコード310は、上記のハードウェア実装例のものと同等のアーキテクチャ上の特徴をターゲットコードに提示し得、このため、再度、ターゲットコードは、この場合もまた、ホストデータ処理装置(これ自体は、能力書き込みアドレス追跡回路を有さないことがある)でと同じ方法で、ターゲットコードが能力書き込みアドレス追跡回路20を有する装置で実行しているかのように、陳腐化した能力のスイープを行うことができる。
【0085】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することができる構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配置又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスが、機能を行うようにプログラムされてもよい。「ように構成された」は、装置要素が、定義された動作を提供するためにある方法で変更される必要があることを意味しない。
【0086】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されているが、本発明はこれらの正確な実施形態に限定されないこと、及び様々な変更及び修正が、当業者によって、添付の特許請求の範囲によって定義されている本発明の範囲から逸脱することなく、実施形態に行われ得ることが理解されよう。
【国際調査報告】