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

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

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許7469306仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法
<>
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図1
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図2
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図3
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図4
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図5
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図6A
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図6B
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図6C
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図7
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図8
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図9
  • 特許-仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-08
(45)【発行日】2024-04-16
(54)【発明の名称】仮想ページを不連続なバッキング物理サブページに割り当てることを可能にする方法
(51)【国際特許分類】
   G06F 12/1027 20160101AFI20240409BHJP
【FI】
G06F12/1027
【請求項の数】 18
(21)【出願番号】P 2021530944
(86)(22)【出願日】2020-01-27
(65)【公表番号】
(43)【公表日】2022-06-08
(86)【国際出願番号】 US2020015275
(87)【国際公開番号】W WO2020209925
(87)【国際公開日】2020-10-15
【審査請求日】2023-01-24
(31)【優先権主張番号】16/378,479
(32)【優先日】2019-04-08
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アレクサンダー ディー. ブレスロウ
【審査官】松平 英
(56)【参考文献】
【文献】米国特許第07278008(US,B1)
【文献】米国特許出願公開第2014/0108766(US,A1)
【文献】中国特許出願公開第101661437(CN,A)
【文献】特開平10-091525(JP,A)
【文献】米国特許第05598553(US,A)
【文献】米国特許出願公開第2017/0075582(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
12/00-12/128
13/16-13/18
(57)【特許請求の範囲】
【請求項1】
複数の仮想ページ番号毎に、前記仮想ページ番号に関連付けられたマッピングを記憶するように構成されたアドレス変換バッファであって、前記マッピングは、前記仮想ページ番号に割り当てられた物理サブページのセットを識別し、前記物理サブページのセットは、物理メモリ領域内の複数の連続したサブページのうち少なくとも第1の物理サブページを含み、前記物理メモリ領域内の前記複数の連続したサブページのうち少なくとも第2の物理サブページを含まず、前記マッピングは、ビットベクトルを含み、前記ビットベクトルは、前記仮想ページ番号に割り当てられた前記複数の連続した物理サブページの物理サブページ毎のアサートされたビットと、前記仮想ページ番号に割り当てられていない前記物理メモリ領域内の物理サブページ毎のデアサートされたビットと、を含む、アドレス変換バッファと、
前記アドレス変換バッファに結合されたメモリ管理ユニットであって、要求された仮想サブページ番号と、前記複数の仮想ページ番号のうち要求された仮想ページ番号と、を受信したことに応じて、前記要求された仮想ページ番号に関連付けられた前記マッピングに基づいて、前記要求された仮想サブページ番号に割り当てられた前記複数の連続したサブページのうち物理サブページを識別する物理サブページ番号を決定するように構成されたメモリ管理ユニットと、を備える、
デバイス。
【請求項2】
前記アドレス変換バッファに結合されるSELECT回路をさらに備え、前記SELECT回路は、前記複数の仮想ページ番号毎に、前記ビットベクトル内の最下位からi番目のアサートされたビットのインデックスを計算することによって、前記物理サブページ番号を決定するように構成されており、iは、前記要求された仮想サブページ番号を表す、
請求項1のデバイス。
【請求項3】
前記アドレス変換バッファは、トランスレーションルックアサイドバッファ(TLB)であり、前記複数の仮想ページ番号毎に、推測される仮想サブページ番号を、前記推測される仮想サブページ番号に割り当てられた物理サブページを識別する事前計算された物理サブページ番号に関連付けるように構成された、事前計算された変換のフィールドをさらに含む、
請求項1のデバイス。
【請求項4】
SELECT回路をさらに備え、
前記SELECT回路は、前記要求された仮想サブページ番号を受信したことに応じて、
前記要求された仮想サブページ番号を、前記推測される仮想サブページ番号と比較することと、
前記要求された仮想サブページ番号が、前記推測される仮想サブページ番号と一致する場合に、前記事前計算された変換のフィールドから、前記事前計算された物理サブページ番号を読み出すことによって、前記物理サブページ番号を決定することと、
前記要求された仮想サブページ番号が、前記推測される仮想サブページ番号と一致しない場合に、前記マッピング及び前記要求された仮想サブページ番号に基づいて前記物理サブページ番号を計算することによって、前記物理サブページ番号を決定することと、
を行うように構成されている、
請求項のデバイス。
【請求項5】
前記マッピングは、事前計算された仮想サブページ番号を、事前計算された物理サブページ番号に関連付ける、事前計算された変換のセットを含む、
請求項1のデバイス。
【請求項6】
前記メモリ管理ユニットに結合された空きリストをさらに備え、
前記空きリストは、1つ以上のノードのセットを含み、
前記1つ以上のノードのセット内の各ノードは、ビットベクトルを含み、部分的に空いている物理メモリ領域を識別し、
前記ビットベクトルは、前記部分的に空いている物理メモリ領域内の空きサブページの第1のサブセットと、前記部分的に空いている物理メモリ領域内の割り当て済みのサブページの第2のサブセットと、を識別する、
請求項1に記載のデバイス。
【請求項7】
アドレス変換バッファが、複数の仮想ページ番号毎に、前記仮想ページ番号に関連付けられたマッピングを記憶することであって、前記マッピングは、前記仮想ページ番号に割り当てられた物理サブページのセットを識別し、前記物理サブページのセットは、物理メモリ領域内の複数の連続したサブページのうち少なくとも第1の物理サブページを含み、前記物理メモリ領域内の前記複数の連続したサブページのうち少なくとも第2の物理サブページを含まず、前記マッピングは、ビットベクトルを含み、前記ビットベクトルは、前記仮想ページ番号に割り当てられた前記複数の連続した物理サブページの物理サブページ毎のアサートされたビットと、前記仮想ページ番号に割り当てられていない前記物理メモリ領域内の物理サブページ毎のデアサートされたビットと、を含む、ことと、
メモリ管理ユニットが、要求された仮想サブページ番号と、前記複数の仮想ページ番号のうち要求された仮想ページ番号と、を受信したことに応じて、前記要求された仮想ページ番号に関連付けられた前記マッピングに基づいて、前記要求された仮想サブページ番号に割り当てられた前記複数の連続したサブページのうち物理サブページを識別する物理サブページ番号を決定することと、を含む、
方法。
【請求項8】
前記複数の仮想ページ番号毎に、前記ビットベクトル内の最下位からi番目のアサートされたビットのインデックスを計算することによって、前記物理サブページ番号を決定することであって、iは、前記要求された仮想サブページ番号を表す、ことをさらに含む、
請求項の方法。
【請求項9】
前記複数の仮想ページ番号毎に、推測される仮想サブページ番号と、前記推測される仮想サブページ番号に割り当てられた物理サブページを識別する事前計算された物理サブページ番号と、をアドレス変換バッファの事前計算された変換のフィールドに記憶することをさらに含む、
請求項の方法。
【請求項10】
前記要求された仮想サブページ番号を受信したことに応じて、
前記要求された仮想サブページ番号を、前記推測される仮想サブページ番号と比較することと、
前記要求された仮想サブページ番号が、前記推測される仮想サブページ番号と一致する場合に、前記事前計算された変換のフィールドから、前記事前計算された物理サブページ番号を読み出すことによって、前記物理サブページ番号を決定することと、をさらに含む、
請求項の方法。
【請求項11】
1つ以上のノードのセットを空きリストに記憶することであって、前記1つ以上のノードのセット内の各ノードは、個別のビットベクトルを含み、部分的に空いている物理メモリ領域を識別し、前記個別のビットベクトルは、前記部分的に空いている物理メモリ領域内の空きサブページの第1のサブセットと、前記部分的に空いている物理メモリ領域内の割り当て済みのサブページの第2のサブセットと、を識別する、ことと、
物理メモリを割り当てる要求に応じて、前記空きリスト内の前記1つ以上のノードのセットから第1のノードを選択することであって、前記空きリストは、前記要求のメモリサイズよりも大きいサイズpに関連付けられており、選択された第1のノードで識別される前記部分的に空いている物理メモリ領域は、サイズが少なくともpの空きメモリ容量を含む、ことと、をさらに含む、
請求項の方法。
【請求項12】
前記物理メモリ領域の前記個別のビットベクトルを計算することであって、前記個別のビットベクトルの各ビットは、前記物理メモリ領域内の対応するサブページが空いているか否かを示す、ことと、
新しいノードを前記空きリストに追加することであって、前記新しいノードは、前記個別のビットベクトルを含み、前記物理メモリ領域を識別する、ことと、
によって、前記物理サブページのセットのうち1つ以上のサブページを解放することをさらに含む、
請求項11の方法。
【請求項13】
前記複数の仮想ページ番号毎に、
前記仮想ページ番号に関連付けられた前記マッピングを記憶する前に、トランスレーションルックアサイドバッファ(TLB)ミスに応じて、前記仮想ページ番号に基づいてページテーブルを走査して、前記ページテーブル内の前記マッピングを識別することと
前記マッピングを前記ページテーブルから前記TLBにコピーすることによって、前記マッピングを記憶することと、をさらに含む、
請求項の方法。
【請求項14】
物理メモリ領域を含むメインメモリと、
前記メインメモリに結合されたプロセッサと、
複数の仮想ページ番号毎に、前記仮想ページ番号に関連付けられたマッピングを記憶するように構成されたアドレス変換バッファであって、前記マッピングは、前記仮想ページ番号に割り当てられた物理サブページのセットを識別し、前記物理サブページのセットは、前記物理メモリ領域内の複数の連続したサブページのうち少なくとも第1の物理サブページを含み、前記物理メモリ領域内の前記複数の連続したサブページのうち少なくとも第2の物理サブページを含まず、前記マッピングは、ビットベクトルを含み、前記ビットベクトルは、前記仮想ページ番号に割り当てられた前記複数の連続した物理サブページの物理サブページ毎のアサートされたビットと、前記仮想ページ番号に割り当てられていない前記物理メモリ領域内の物理サブページ毎のデアサートされたビットと、を含む、アドレス変換バッファと、
前記プロセッサ及び前記アドレス変換バッファに結合されたメモリ管理ユニットであって、要求された仮想サブページ番号と、前記複数の仮想ページ番号のうち要求された仮想ページ番号と、を受信したことに応じて、前記要求された仮想ページ番号に関連付けられた前記マッピングに基づいて、前記要求された仮想サブページ番号に割り当てられた前記複数の連続したサブページのうち物理サブページを識別する物理サブページ番号を決定するように構成されたメモリ管理ユニットと、を備える、
コンピューティングシステム。
【請求項15】
記コンピューティングシステムは、前記アドレス変換バッファに結合されたSELECT回路をさらに備え、
前記SELECT回路は、前記ビットベクトル内の最下位からi番目のアサートされたビットのインデックスを計算することによって、前記物理サブページ番号を決定するように構成されており、iは、前記要求された仮想サブページ番号を表す、
請求項14のコンピューティングシステム。
【請求項16】
前記アドレス変換バッファは、前記複数の仮想ページ番号毎に、推測される仮想サブページ番号を、前記推測される仮想サブページ番号に割り当てられた物理サブページを識別する事前計算された物理サブページ番号に関連付けるように構成された、事前計算された変換のフィールドをさらに含み、
前記コンピューティングシステムは、SELECT回路をさらに備え、
前記SELECT回路は、
前記要求された仮想サブページ番号を、前記推測される仮想サブページ番号と比較することと、
前記要求された仮想サブページ番号が、前記推測される仮想サブページ番号と一致する場合に、前記事前計算された変換のフィールドから、前記事前計算された物理サブページ番号を読み出すことによって、前記物理サブページ番号を決定することと、
前記要求された仮想サブページ番号が、前記推測される仮想サブページ番号と一致しない場合に、前記マッピング及び前記要求された仮想サブページ番号に基づいて前記物理サブページ番号を計算することによって、前記物理サブページ番号を決定することと、
を行うように構成されている、
請求項14のコンピューティングシステム。
【請求項17】
前記プロセッサに結合され、1つ以上のノードのセットを記憶するように構成された空きリストをさらに備え、
前記1つ以上のノードのセット内の各ノードは、個別のビットベクトルを含み、部分的に空いている物理メモリ領域を識別し、
前記個別のビットベクトルは、前記部分的に空いている物理メモリ領域内の空きサブページの第1のサブセットと、前記部分的に空いている物理メモリ領域内の割り当て済みのサブページの第2のサブセットと、を識別し、
前記プロセッサは、
想メモリページのサイズと、前記空きリストに関連付けられたサイズpと、に基づいて、前記空きリストを選択することと、
前記空きリスト内の前記1つ以上のノードのセットから第1のノードを選択することと、
選択された第1ノード内の前記個別のビットベクトルに基づいて、前記仮想メモリページに割り当てるための前記物理サブページのセットを選択することであって、前記選択された第1ノードで識別される前記部分的に空いている物理メモリ領域は、サイズが少なくともpの空きメモリ容量を含む、ことと、
によって、前記仮想メモリページのために前記メインメモリから物理メモリを割り当てるように構成されている、
請求項14のコンピューティングシステム。
【請求項18】
前記プロセッサは、
前記物理メモリ領域の個別のビットベクトルを計算することであって、前記個別のビットベクトルの各ビットは、前記物理メモリ領域内の対応するサブページが空いているか否かを示す、ことと、
新しいノードを空きリストに追加することであって、前記新しいノードは、前記個別のビットベクトルを含み、前記物理メモリ領域を識別する、ことと、
によって、前記物理サブページのセットのうち1つ以上のサブページを解放するように構成されている、
請求項14のコンピューティングシステム。
【発明の詳細な説明】
【背景技術】
【0001】
メモリ仮想化は、最新のコンピューティングシステムで採用されている技術であり、ソフトウェアプロセスが不連続な物理メモリ領域を単一の連続した領域としてみなすことを可能にする。コンピュータで実行されているソフトウェアプロセス又はタスクは、仮想メモリアドレスを使用してメモリにアクセスし、仮想メモリアドレスは物理メモリアドレスにマッピングされ、仮想及び物理メモリアドレス間の変換は、コンピュータ内のハードウェア及びソフトウェアによって処理される。コンピュータのオペレーティングシステムは、物理メモリの仮想メモリへの割り当てを処理し、仮想及び物理メモリアドレス間の変換は、メモリ管理ユニット(MMU)によって自動的に実行される。
【0002】
メモリの仮想化により、プロセスを専用の仮想アドレス空間で動作させることが可能になり、プログラムコードの再配置や、相対アドレス指定によるメモリへのアクセスが不要になり、メモリ分離によるセキュリティも向上する。また、仮想メモリアドレス指定方法(virtual memory addressing methods)を使用するシステムは、メモリ階層を管理する負担をカーネルに委任し、物理メモリの断片化を隠すことによってアプリケーションプログラミングを容易にする。
【0003】
本開示は、添付図面において、限定ではなく例として示されている。
【図面の簡単な説明】
【0004】
図1】一実施形態による、断片化した物理メモリの領域を示す図である。
図2】一実施形態による、コンピューティングシステムを示す図である。
図3】一実施形態による、コンピューティングデバイス内の処理ユニット及びメインメモリ内のコンポーネントを示す図である。
図4】一実施形態による、仮想アドレスを変換するためのページテーブルウォークを示す図である。
図5図5Aは、一実施形態による、SELECT動作を示す図であり、図5Bは、一実施形態による、RANK動作を示す図である。
図6A】一実施形態による、トランスレーションルックアサイドバッファ(TLB)を使用した仮想メモリアドレスの変換を示す図である。
図6B】一実施形態による、トランスレーションルックアサイドバッファ(TLB)を使用した仮想メモリアドレスの変換を示す図である。
図6C】一実施形態による、トランスレーションルックアサイドバッファ(TLB)を使用した仮想メモリアドレスの変換を示す図である。
図7】一実施形態による、連続した空きリスト及び断片化した空きリストを示す図である。
図8】一実施形態による、SELECT関数を使用したメモリの割り当てを示す図である。
図9】一実施形態による、メモリ割り当て及び割り当て解除処理を示すフロー図である。
図10】一実施形態による、メモリにアクセスするための処理を示すフロー図である。
【発明を実施するための形態】
【0005】
以下の説明では、実施形態の十分な理解を提供するために、特定のシステム、コンポーネント、方法等の例のような多くの特定の詳細を記載する。しかしながら、少なくともいくつかの実施形態は、これらの特定の詳細がなくても実施され得ることが当業者には明らかであろう。他の例では、実施形態を不必要に曖昧にすることを回避するために、周知のコンポーネント又は方法は、詳細に説明されていないか、単純なブロック図形式で示されている。したがって、記載された特定の詳細は例示に過ぎない。特定の実施形態は、これらの例示的な詳細とは異なり、それでもなお、実施形態の範囲内にあると考えられる。
【0006】
仮想メモリアドレス指定を実装する最新のコンピューティングシステムは、複数の異なるメモリページサイズ(例えば、4KB、2MB、1GB)を同時に使用することができる。この設計上の決定の結果、メモリの大部分がサブスクライブ(subscribed)されているシステムでは、メモリの断片化の増加につながるメモリの割り当てを行う傾向があるので、コストのかかる頻繁なメモリのデフラグが行われない限り、より大きなメモリ領域の割り当てが困難になる。1つ以上の同時に動作しているアプリケーションが利用可能な物理メモリの大部分を消費することによりメモリが断片化すると、メモリの断片化に起因して、スーパーページ(すなわち、サポートされているページサイズのうち大きい方)を割り当てることがますます困難になる。
【0007】
図1は、一実施形態による、物理メモリ領域101,111を示す図である。メモリ領域101,111の各々は、8ページのスーパーページサイズをサポートするシステムにおいて16個の物理ページを含む。16ページの物理メモリ領域101は、領域101内でサブページが全く割り当てられていないので、最大で2つの8ページのスーパーページ102,103に割り当てることができる。物理メモリ領域111において、他のデータに割り当て済みの2つのページ115,116によって、未割り当てのスペースが断片化している。物理メモリ領域111は、8ページのスーパーページを割り当てるのに十分な合計容量をサブページ112~114に有しているが、連続した空きサブページ112~114のセットの何れも、スーパーページに割り当てるのに十分な大きさではない。
【0008】
一実施形態では、仮想メモリアドレス指定を実施するコンピューティングシステムは、仮想メモリアドレスを対応する物理メモリアドレスに変換するためのエントリを含むページテーブルと、ページテーブルエントリをキャッシュするトランスレーションルックアサイドバッファ(TLB)と、を含む。ページテーブル及びTLB内のエントリは、仮想アドレスで指定可能な仮想ページ番号毎に、バッキング(backing)物理メモリ領域内の何れのサブページがその仮想ページ番号に割り当てられているかを示すマッピングをエンコードする。いくつかの実施形態では、マッピングは、仮想ページ番号をバッキングするために割り当てられた物理メモリページ内の各サブページについてアサートされたビットを有するビットベクトルとして、並びに/又は、仮想サブページ番号及びそれらに対応する物理サブページ番号の事前計算されたペアとして、記憶することができる。仮想アドレス(仮想ページ番号及び仮想サブページ番号を含む)を変換する要求は、物理領域番号と仮想ページ番号に対応するマッピングとを識別し、マッピングを使用して、仮想サブページ番号に対応する物理領域内の物理サブページ番号を決定することによって、進行する。
【0009】
ページテーブル及びTLBエントリに記憶されたマッピングによって、大きな仮想スーパーページをより小さな不連続な物理サブページによってバッキングするためのメカニズムを提供することによって、デフラグを停止又は遅延させることが可能になる。オペレーティングシステムは、デフラグ動作がユーザアプリケーションのパフォーマンスに影響を与える可能性が低い場合に、コンピューティングシステムのシステム負荷が低い期間にメモリのデフラグをバッチ処理することができる。また、メモリ負荷が高い場合でも、仮想メモリの大きなセグメントを隣接する物理ページに簡単に割り当てることができる。さらに、複数の小さなページではなく、単一の仮想スーパーページによって、所定の量のメモリをアドレス指定できるので、ページテーブルの深さ(depth)が減少する。同等の物理ページサイズに対して仮想ページサイズの方が大きいので、ページテーブルウォークは、ページテーブルのより少ないレベルを走査(traverse)する。メモリ管理ユニット(MMU)及び入出力メモリ管理ユニット(IOMMU)におけるほとんどのアドレス変換キャッシュミスは、ページテーブルのリーフノードレベルで発生するので、このレベルをスキップすると、特に、ネストされたページテーブルウォークを使用する仮想化環境や、競合(contention)が多いグラフィックス処理ユニット(GPU)において、パフォーマンスに大きな影響を与える可能性がある。
【0010】
図2は、上記のマッピング技術を実装するコンピューティングシステム200の一実施形態を示す図である。一般に、コンピューティングシステム200は、ラップトップ又はデスクトップコンピュータ、携帯電話、サーバ等を含むがこれらに限定されない、多くの異なるタイプのデバイスの何れかとして具現化され得る。コンピューティングシステム200は、バス201を介して互いに通信可能ないくつかのコンポーネント202~208を含む。コンピューティングシステム200において、コンポーネント202~208の各々は、バス201を介して直接、又は、他のコンポーネント202~208のうち1つ以上を介して、他のコンポーネント202~208の何れかと通信することが可能である。コンピューティングシステム200のコンポーネント201~208は、ラップトップ若しくはデスクトップのシャーシ、又は、携帯電話の筐体等の単一の物理筐体に含まれる。代替の実施形態では、コンピューティングシステム200のコンポーネントの一部は、コンピューティングシステム200全体が単一の物理筐体内に存在しないように、周辺デバイスとして具現化され得る。
【0011】
コンピューティングシステム200は、ユーザから情報を受信したり、ユーザに情報を提供したりするためのユーザインターフェースデバイスをさらに含む。具体的には、コンピューティングシステム200は、キーボード、マウス、タッチスクリーン、又は、ユーザから情報を受信する他のデバイス等の入力デバイス202を含む。コンピューティングシステム200は、モニタ、発光ダイオード(LED)ディスプレイ、液晶ディスプレイ、又は、他の出力デバイス等のディスプレイ205を介してユーザに情報を表示する。
【0012】
コンピューティングシステム200は、有線又は無線ネットワークを介してデータを送受信するためのネットワークアダプタ207を含んでもよい。コンピューティングシステム200は、1つ以上の周辺デバイス208をさらに含む。周辺デバイス208は、大容量記憶デバイス、位置検出デバイス、センサ、入力デバイス、又は、コンピューティングシステム200が使用できる他のタイプのデバイスを含むことができる。
【0013】
コンピューティングシステム200は、メインメモリ206に記憶された命令209を受信して実行する処理ユニット204を含む。本明細書で参照されるように、処理ユニット204は、中央処理装置(CPU)パイプライン、グラフィックス処理ユニット(GPU)、又は、仮想アドレスを使用するメモリ動作をサポートする他の計算エンジンを表す。メインメモリ206は、ランダムアクセスメモリ(RAM)モジュール、読み取り専用メモリ(ROM)モジュール、ハードディスク、他の非一時的なコンピュータ可読記憶媒体等のように、コンピューティングシステム200によって使用されるメモリデバイスを含むコンピューティングシステム200のメモリサブシステムの一部であってもよい。
【0014】
メインメモリ206に加えて、メモリサブシステムは、L2若しくはL3キャッシュ等のキャッシュメモリ、及び/又は、レジスタをさらに含んでもよい。そのようなキャッシュメモリ及びレジスタは、処理ユニット204内、又は、コンピューティングシステム200の他のコンポーネント上に存在してもよい。
【0015】
図3は、一実施形態による、コンピューティングシステム200の処理ユニット204及びメインメモリ206を示す図である。処理ユニット204は、プロセッサ301(例えば、CPU、GPU等)と、メモリ管理ユニット(MMU)302と、トランスレーションルックアサイドバッファ(TLB)303と、を含む。一実施形態では、処理ユニット204のコンポーネント301,302,303は、同じデバイスパッケージに含まれている。プログラム命令209の実行中、プロセッサ301は、1つ以上のメモリコントローラを介してメモリ要求を発行することによって、メインメモリ206に記憶されたデータにアクセスする。プロセッサ301は、MMU302によって物理メモリアドレスに変換される仮想アドレスを使用してメモリ位置を参照する。MMU302は、仮想アドレスから物理アドレスへの変換を記憶するページテーブル311内のエントリを使用して変換を実行する。変換は、さらにTLBにキャッシュされる。一実施形態では、MMU302は、SELECT回路304及びRANK回路305をさらに含み、これらは、ページテーブル311及び/又はTLB303に記憶されたマッピング(例えば、ビットベクトル、事前計算された物理アドレスのセット等)をデコードするために使用される。
【0016】
ページテーブル311は、メインメモリ206に記憶されており、アドレス変換情報をツリー、ハッシュテーブル又は連想マップデータ構造で記憶する。処理ユニット204は、仮想アドレスにアクセスすると、仮想アドレスから物理アドレスへの変換を、その変換がTLB303にないかチェックすることによって実行し、その変換がTLB303で利用可能でない(すなわち、TLBミスが発生した)場合、MMU302はページテーブルウォークを実行する。ページテーブルウォーク中に、MMU302は、変換される仮想アドレスに基づいてページテーブル311内のノードを走査する。ページテーブル311において、内部ノードとは、ページテーブル311内の子ノードを指すエントリを含むノードである。ページテーブル311内のリーフノードは、物理メモリ内のアプリケーションデータの物理ページを指すエントリを含む。リーフノードを構成するものは、ページサイズによって変わり(例えば、1GB、2MB、4KBのページをそれぞれ有するx86_64のlongモードのL3、L2、L1)、その理由は、仮想アドレスの多くがより大きなページでページオフセットされるためである。
【0017】
メモリ206は、空きリスト312のセットをさらに記憶する。空きリスト312は、コンピューティングシステム200のオペレーティングシステムによって維持され、新しいデータへの割り当てに利用可能なメモリページを追跡するために使用される。メモリが割り当て解除される(すなわち、解放される)と、割り当て解除されたページは、空きリスト312の1つに追加される。メモリが割り当てられる場合、新しいデータを割り当てるための空きメモリページが空きリスト312から識別される。
【0018】
図4は、一実施形態による、ページテーブル311を使用した仮想メモリアドレスの物理メモリアドレスへの変換を示す図である。仮想メモリアドレス400は、符号拡張401と、仮想ページ番号407(ルートオフセット402、子オフセット403及びリーフオフセット404を含む)と、仮想サブページ405と、サブページオフセット406と、を含む。仮想メモリアドレス400内のフィールド402~406は、ルートノード410、子ノード411及びリーフノード412を含むページテーブル311内のノードを走査するために使用される。
【0019】
ページテーブル311内のエントリは、大きな物理メモリ領域から、部分的又は完全に分断された(すなわち、不連続な)物理サブページのセットを割り当てて、より小さな仮想スーパーページをバッキングすることを可能にする。一実施形態では、物理メモリ領域は、それがバッキングする仮想スーパーページのサイズの2倍であり、仮想及び物理サブページは同じサイズである。そのため、物理メモリ領域は、対応する仮想スーパーページの2倍のサブページを含む。したがって、物理領域内の物理サブページのうち少なくとも半分が空いている場合、空き物理サブページを使用して仮想スーパーページをバッキングすることができる。
【0020】
各ページテーブルエントリは、いくつかのアドレスフィールド(例えば、420~422)としてページテーブル311に記録される。一実施形態では、アドレスフィールドは、オペレーティングシステム又はMMU302が操作することができる追加のメタデータ又は未割り当てビットをさらに含む。一実施形態では、各ページテーブルエントリは、仮想ページの内容を記憶するために割り当てられた、より大きな物理メモリ領域内の物理サブページを識別するマッピング(例えば、ビットベクトル423)を含む。図4に示す例示的なアドレス変換では、2MBの仮想ページサイズが64KBの物理サブページによってバッキングされる。各ページテーブルエントリ(例えば、リーフノード412)には、64ビットのビットベクトル(例えば、ビットベクトル423)が埋め込まれており、このビットベクトルは、物理サブページ毎に、その物理サブページが2MBの仮想ページ内の32個の仮想サブページのうち何れをバッキングしているか否かを示す1ビットを含む。各仮想サブページは、2MBの仮想ページに亘る仮想アドレス空間の1/32、すなわち64KB相当のメモリ容量を表す。換言すれば、ビットベクトル423は、バッキング物理メモリ領域内の64個の64KBの物理サブページのうち何れが2MBの仮想ページをバッキングするために使用されているかを識別する。したがって、ビットベクトルは、バッキング物理領域内の64×64KB、すなわち4MBの物理メモリを追跡する。バッキング物理メモリ領域が少なくとも2MBの空いている物理メモリ(すなわち、少なくとも32個の64KBのサブページに相当)を有する場合、2MBの仮想ページをバッキングするために物理メモリ領域を割り当てることができる。4MBのバッキング物理領域の各物理サブページについて、その物理サブページが仮想ページに割り当てられている場合、ビットベクトル423内の対応するビットがアサートされる。一実施形態では、ビットはハイにアサートされ(例えば、「1」に設定され)、ローにデアサートされる(例えば、「0」に設定される)。他の実施形態では、アサートされた状態及びデアサートされた状態を表現するために、他の値又は電気的状態を使用することができる(例えば、ローでアサートされ、ハイでデアサートされる)。リーフエントリのアドレスフィールド422は、4MBの物理メモリ領域の第0バイトを指すように設定される。一実施形態では、アドレスフィールド(例えば、420~422)は、それらが指すメモリブロックのバイトサイズの2を底とする対数(例えば、64KBの場合は16、または4MBの場合は22)だけ左にシフトされた物理ページ番号として記憶される。例えば、アドレスフィールド422は、4MBの物理領域の第0バイトを計算するために、4×1024×1024の2を底とする対数(すなわち、22)だけ左にシフトされた物理領域識別子を記憶する。
【0021】
仮想メモリアドレス400の変換では、ページテーブルベースポインタ413(例えば、x86システムの制御レジスタに記憶されるもの)は、ページテーブル311のルートノード410を指し、ルートオフセット402を使用して、ルートノード410からアドレス420を選択する。アドレス420は、子ノード411を指し、子オフセット403を使用してアドレス421を選択する。アドレス421は、リーフノード412を指し、リーフオフセット404を使用してアドレス422を選択する。アドレス422は、同じくリーフノード412に記憶されたビットベクトル423に関連付けられる。リーフノード412のアドレスフィールド422は、4MBの物理メモリ領域の第0バイトを指し、一方、ビットベクトル423は、仮想ページをバッキングするために割り当てられた、指示された物理メモリ領域内の(場合によっては不連続な)物理サブページを識別する。
【0022】
仮想メモリアドレス400において、仮想サブページフィールド405は、仮想ページ内の32個の仮想サブページのうち何れかを識別するための5ビット(0から31までの値を表す)を含む。指定された仮想サブページ405をバッキングしている物理サブページを特定するために、SELECT回路304によって、ビットベクトル423に対するSELECT動作が実行される。
【0023】
図5Aは、一実施形態による、SELECT関数の動作を示す図である。ビットベクトルv及びインデックスiが与えられると、SELECT関数は、ゼロからカウントした場合に「1」に設定された最下位からi番目のビットのインデックスを返す。図5Aに示す例では、SELECT関数に、16ビットのベクトルv及び入力インデックス「7」が提供される。SELECT関数は、ビットベクトルvの最下位から「1」のビットを、0から入力インデックス「7」までカウントする(すなわち、ビットベクトルvの8番目の「1」のビットまでカウントする)。8番目の「1」のビットは、ビットベクトルv内で位置「11」にある。したがって、SELECT(v,7)は「11」を返す。追加の例として、SELECT(0b10101010,3)は、4番目の「1」のビット(パラメータ「3」がゼロから始まるインデックスのため)がベクトルのビット位置7で発生しているので、「7」を返す。同じ入力ビットベクトルを使用すると、SELECT(0b10101010,0)は、最初の「1」のビットがインデックス1で発生しているので、「1」を返すことになる。
【0024】
SELECT回路304は、ビットベクトル423を入力ビットベクトルvとし、仮想サブページ番号405の5ビットを入力インデックスとしてSELECT関数を実行し、4MBの物理メモリ領域430内の物理サブページ440のインデックスを出力する。計算された物理サブページインデックスを左にシフトして、物理サブページの第0バイトの完全な物理アドレスを計算する。64KBのサブページを有する所定の例では、計算された物理サブページインデックスは、16だけ左にシフトされる。サブページオフセット406の16ビットは、物理サブページ440へのバイトレベルのインデックスとして使用される。上述したアドレス変換の例では、仮想及び物理ページ、物理メモリ領域、アドレスフィールド等のサイズは例示的なものであり、代替の実施形態では異なるパラメータが可能である。
【0025】
図5Bは、一実施形態による、SELECTのコンパニオン関数であるRANK関数の動作を示す図である。一実施形態では、RANK関数は、RANK回路305によって実行され、RANK回路305は、ビットベクトルv及び入力インデックスiが与えられた場合に、ビットベクトルv内のインデックスiより前の「1」に設定されたビットの数を返す。図5Bに示す例では、RANK関数は、入力ビットベクトルv及び入力インデックス「7」に対して、ビットベクトルvのビット位置7より前で4ビットが「1」に設定されているので、「4」を返す。したがって、RANK関数は、(例えば、メモリを割り当て又は割り当て解除する場合に)ビットベクトルvによって示される割り当て済みの又は空いている物理サブページの数を特定するために使用される。
【0026】
図6Aは、一実施形態による、いくつかの仮想メモリページのうち仮想メモリページ毎に、仮想メモリページに割り当てられた物理メモリ領域の不連続な物理サブページを識別するためのマッピングが記憶されるTLB303の一実施形態を示す図である。TLB303は、アドレス変換に使用されるバッファであり、このバッファは、ページテーブル311からのエントリをキャッシュし、少なくともエントリのサブセットについて、ページテーブル311の関連するリーフノード(例えば、ノード412)からのマッピングを含む。図6Aに示すように、TLB303内のエントリ620は、仮想ページ番号621をマッピング(すなわち、ビットベクトル622)及び物理領域番号623に関連付ける。上述した例を続けると、物理領域番号623は、仮想ページ番号621によって識別される2MBの仮想ページをバッキングする4MBの物理メモリ領域(連続した物理サブページのセットを含む)を識別する。
【0027】
ビットベクトル622は、バッキング物理メモリ領域内の何れの物理サブページが仮想ページに割り当てられているかを識別する。ビットベクトルは、仮想ページに割り当てられた各物理サブページのアサートされたビットと、仮想ページ番号に割り当てられていないバッキング物理メモリ領域内の各空きサブページのデアサートされたビットと、を含む。一実施形態では、ビットベクトル622内のビットは、対応する物理サブページが物理メモリ領域内で順序付けられているのと同じ順序で配列される。
【0028】
MMU302は、物理メモリアドレス610に変換される仮想メモリアドレス600を受信すると、仮想メモリアドレス600内の仮想ページ番号601を使用して、TLB303においてルックアップを実行する。一致する仮想ページ番号621がTLB303で見つかった場合、TLBヒットが発生する。仮想ページ番号621は、TLBエントリ620内でビットベクトル622及び物理領域番号623に関連付けられている。TLBヒットが発生した場合、物理領域番号623は、物理メモリアドレス610の最上位ビット611になる。TLBエントリ620からのビットベクトル622及び仮想サブページ番号602は、TLB303に接続されたSELECT回路630への入力となる。
【0029】
SELECT回路630は、ビットベクトル622内の最下位からi番目のアサートされたビットのインデックスを計算することによって、物理サブページ番号612を特定し、ここで、iは要求された仮想サブページ番号602を表す。SELECT回路630は、物理アドレス610の中央に物理サブページ番号612を出力する。計算された物理サブページ番号612及び物理領域番号611(これは、仮想ページをバッキングする全てのサブページに共通である)は、物理サブページの物理アドレスを形成する。物理メモリアドレス610内の残りのサブページオフセットビット613は、仮想メモリアドレス600内のサブページオフセットビット603と同じである。代替の実施形態では、これらのフィールドは並べ替えられてもよいし、不連続なビットに分割されてもよい。さらに、仮想及び物理サブページは、必ずしも同じサイズである必要はない。
【0030】
図6Bは、各仮想ページ番号のマッピングが事前計算された変換624のセットとして記憶されるTLB303の一実施形態を示す図である。事前計算された変換624の各々は、事前計算された仮想サブページ番号を事前計算された物理サブページ番号に関連付ける。一実施形態では、事前計算された物理サブページ番号は、事前計算された変換624の配列に記憶され、各事前計算された物理サブページ番号は、それに関連付けられた仮想サブページ番号に対応する配列624内のインデックスに記憶される。
【0031】
上述した例と同じパラメータを有する一実施形態では、2MBのスーパーページについての仮想サブページ番号から物理サブページ番号への変換の完全なセットは、32個の6ビットのカウンタに記憶される。仮想メモリアドレス600が物理メモリアドレス610に変換される場合、仮想ページ番号601を使用してTLBエントリ640のルックアップを行う。TLBエントリ640が見つかると(すなわち、TLBヒットが発生すると)、TLB303は、仮想サブページ番号602を使用して、事前計算された物理サブページ番号を含む事前計算された変換のフィールド624にインデックスする。図6Bに示すように、物理サブページ番号「15」は、仮想サブページ番号602によって示される配列インデックスに記憶されているので、「15」は、物理メモリアドレス610内の物理サブページ番号612になる。物理メモリアドレス610内のサブページオフセット613は、仮想メモリアドレス600内のサブページオフセット603と同じである。
【0032】
一実施形態では、TLBにTLBエントリ640をインストールする場合又はその前に、仮想ページ621内の全ての仮想サブページについて変換を事前計算するために、SELECT動作が一度にまとめて実行される。このように、SELECT動作は変換毎に実行される必要がなく、SELECT回路はTLB303自体に含まれない。
【0033】
図6Cは、各エントリ内に仮想ページのマッピングをビットベクトル(例えば、622)として記憶し、さらに、仮想ページ内の仮想サブページ番号のサブセットについて事前計算された変換(例えば、625及び626)を事前計算された変換のフィールド624に記憶するTLB303の一実施形態を示す図である。一実施形態では、TLB303は、将来変換される可能性のある1つ以上の仮想サブページを識別することを推測し、これらの仮想サブページの各々の物理サブページへの変換を事前計算する。
【0034】
一実施形態では、最も最近アクセスされた仮想サブページ番号が、推測される仮想サブページ番号625として選択され、その事前計算された推測される物理サブページ番号626と共に記憶される。一実施形態では、最近観察された仮想サブページ番号及びそれらに対応する物理サブページの小さな履歴(small history)が記憶される。仮想サブページ変換の履歴を使用して、次に何れの仮想サブページが変換される可能性が高いかを、例えば、履歴からアクセスストライド情報を推定することによって予測する。次いで、次の1つ以上の予想される仮想サブページ番号及びそれらに付随する物理サブページ番号が事前計算され、TLB303に記憶される。
【0035】
変換される仮想メモリアドレス600が、変換が事前計算された仮想サブページ(例えば、推測される仮想サブページ番号625)の何れにも一致しない仮想サブページ番号602を指定している場合、SELECT動作がSELECT回路631によって実行され、上述したように、ビットベクトル622及び要求された仮想サブページ番号602に基づいて、要求された仮想サブページ番号602に対する正しい物理サブページ番号612が計算される。SELECT回路631はバイパス回路を含み、これにより、仮想サブページ番号602が、推測される仮想サブページ番号625と一致する場合に、SELECT回路631は、SELECT動作をバイパスし、代わりに、関連する推測される物理サブページ番号626を物理サブページ番号612として使用する。図6Cは、単一の推測される仮想サブページ番号625及びそれに対応する事前計算された物理サブページ番号626を単一のTLBエントリ650に記憶するTLB303を示しているが、代替の実施形態は、TLBエントリ毎に複数のそのような推測される変換ペアを含むことができる。代替の実施形態では、推測される仮想サブページ番号625及び推測される物理サブページ番号626は、TLB303とは別のデータ構造に記憶される。
【0036】
図7は、一実施形態による、メモリ206内の何れの物理メモリページが、新しいデータの割り当てに利用可能であるかを追跡するための空きリスト312のセットを示す図である。空きリスト312は、2つの空きリストのセット(すなわち、断片化していない(すなわち、連続した)メモリセグメントに関する第1の空きリストのセット701と、断片化したメモリセグメントに関する第2の空きリストのセット702)を含む。一実施形態では、空きリスト312は、処理ユニット204で実行されるオペレーティングシステムルーチンによって維持される。オペレーティングシステムは、セット701,702の各々の複数の空きリストを維持する。各リストは、異なるメモリサイズ(例えば、p、2p、4p等)に関連付けられており、ここで、pはメモリページのサイズを表す。セット701内のp、2p及び4pの空きリストは、2のべき乗で異なるサイズに関連付けられており、すなわち、セット701内の後続の空きリストの各々は、前の空きリストの2倍の大きさのメモリサイズに関連付けられている。メモリの割り当て要求が処理される場合、要求されたメモリの量は、物理ページ×2のべき乗の最も近いサイズに切り上げられる。決定されたサイズに対応する空きリストが識別され、その空きリストから空きメモリ領域が選択されて、割り当てが完了する。
【0037】
オペレーティングシステムは、割り当てに利用可能な連続した空きメモリの領域(すなわち、何れのデータにもまだ割り当てられていないもの)を空きリスト701の1つに配置する。空きリスト701の各々は、その空きリスト内の1つ以上の連続したメモリ領域の各々についてのノードを含み、空きリスト内の連続したメモリ領域の各々は、その空きリストに関連付けられたサイズである。例えば、pの空きリストのノードは、サイズpの連続した空きメモリ領域を含み、2pの空きリストのノードは、サイズ2pの連続した空きメモリ領域を含み、以下同様である。割り当てが実行される場合、割り当てられるデータを記憶するのに十分なサイズに関連付けられた空きリストからノードが削除され、削除されたノードの空きメモリ領域が新しいデータに割り当てられる。一実施形態では、バディ割り当てシステム(buddy allocation system)を使用して、1つの空きリスト内の隣接する空きページのセットを結合し、それらを次に容量の大きい空きリストに移動させる(例えば、2つの隣接するpサイズのセグメントが結合され、pの空きリストから2pの空きリストに移動される)。
【0038】
一実施形態では、オペレーティングシステムは、既に部分的に割り当てられている(すなわち、断片化した)メモリ領域をバッキングするための第2の空きリストのセット702を維持する。例えば、ほとんど空いている64MBの物理メモリの領域であるが、その64MBの領域内の2MBの物理メモリの各ページが、少なくとも1つの64KBの割り当て済みのサブページを有するものは、新しいデータに割り当てるための連続した2MBのページを1つも含まない。しかしながら、この64MBの物理領域は、4MBの各バッキング物理領域が少なくとも半分空いている場合に不連続な物理メモリを使用して32MBの連続した仮想メモリを割り当てるために(又は、いくつかのより小さな割り当て要求のために)使用することができる。第2の空きリストのセット702は、例示的な断片化した64MBの領域等の断片化したメモリ領域内の利用可能なメモリを追跡する。空きリスト702の各々は、メモリサイズ(例えば、p、2p)に関連付けられ、1つ以上のノードを含み、各ノードは、関連付けられたメモリサイズの2倍を有し、少なくとも関連付けられた量の空きスペースを有する、部分的に空いている物理メモリ領域を指定する。例えば、pの空きリストの各ノードは、合計サイズが2pであって、合計空きスペースのサイズが少なくともpである、部分的に空いているメモリ領域を指定し、2pの空きリストの各ノードは、合計サイズが4pであって、合計空きスペースのサイズが少なくとも2pである、部分的に空いているメモリ領域を指定する。部分的に空いている各物理メモリ領域と共に記憶されたビットベクトル(例えば、ビットベクトル710)は、部分的に空いている物理メモリ領域内の空き物理サブページを識別する。
【0039】
一例として、ビットベクトル710は、部分的に空いている物理メモリ領域711内の(アサートされたビットに対応する)空き物理サブページのサブセットと、(デアサートされたビットに対応する)割り当て済みの物理サブページのサブセットと、を識別する。ビットベクトル710において、ビットは、物理メモリ領域711内の対応する物理サブページと同じ順序で配列される。図7に示すように、ビットベクトル710は、関連付けられた物理メモリ領域711と共に記憶される。代替の実施形態では、複数の部分的に空いている物理メモリ領域の空きサブページを追跡する別個のグローバルビットベクトルが維持される。
【0040】
図8は、一実施形態による、仮想スーパーページをバッキングするための物理メモリ領域内の不連続な物理サブページの割り当てを示す図である。物理メモリ領域801は、16個の物理サブページ0~15を含む。これらのうち、サブページ3、5、13は割り当て済みである。したがって、物理メモリ領域801に関連付けられた空きページビットベクトル802(又は、グローバル空きページビットベクトルのセグメント)は、割り当て済みのサブページに対応する位置3、5、13においてデアサートされたビットを含む。ビットベクトル802内の残りのビット位置はアサートされており、それらに対応するサブページが空いていることを示している。
【0041】
8つのサブページを有する仮想スーパーページを割り当てるために、SELECT動作を実行して、物理メモリ領域801から割り当てる8つの空きサブページのサブセットを識別する。SELECT動作は、ビットベクトル802及びインデックス7(8つのアサートされたビットをカウントするためのもの)を入力として受け取り、インデックス9を出力する。物理メモリ領域801において、インデックス9以下の物理サブページ(すなわち、セグメント854,855,856)が、要求された仮想スーパーページをバッキングするために割り当てられる。残りの未割り当てのサブページ851,852,853は、空きリストに移動される。空きセグメント851,853は、2pの空きリスト(2ページの連続した空きセグメント用)に移動され、空きセグメント852は、pの空きリスト(1ページの空きセグメント用)に移動される。
【0042】
空きページビットベクトル803(又は、グローバル空きページビットベクトルのセグメント)は、新たに割り当てられたサブページに対応するビット0~2,4,6~9をデアサートするように更新される。新たに割り当てられた物理サブページに対応するビットをアサートすることにより、ビットベクトル804が計算される。ビットベクトル804が、新たに割り当てられた仮想スーパーページのページテーブルエントリに含まれ、そのページテーブルエントリが、ページテーブル311に追加される。一実施形態では、ビットベクトル804を含む仮想スーパーページのエントリは、TLB311にも追加される。
【0043】
図9は、一実施形態による、コンピューティングシステム200においてメモリの割り当て及び割り当て解除を行うための処理900を示す図である。処理900は、コンピューティングシステム200内のコンポーネント(例えば、プロセッサ301及びMMU302)によって実行され、メインメモリ206内の物理メモリを1つ以上の仮想ページに割り当てる。
【0044】
ブロック901において、メモリ割り当てが要求されていない場合、割り当てが実行されず、システムは、ブロック1000に提供されるように、既に割り当てられているメモリの使用及びアクセスを継続する。ブロック901において、メモリ割り当てが要求された場合、オペレーティングシステム(プロセッサ301によって実行されるもの)は、ブロック903~911に従って、メインメモリ206から物理メモリを割り当てる。ブロック903において、オペレーティングシステムは、割り当てられるメモリのサイズに基づいて、空きリスト312のうち何れかを選択する。具体的には、要求された割り当てサイズ以上の物理メモリ領域を含む空きリストが選択される。一実施形態では、割り当てられるメモリのサイズは、ページ×2のべき乗の最も近いサイズに切り上げられ、得られたサイズに関連付けられた空きリストが選択される。一実施形態では、要求された割り当てサイズpの場合、選択された空きリストは、少なくともpの空きメモリ容量であって、2p未満の空きメモリ容量をそれぞれ含むノードを有する。その理由は、2pが、次に大きい空きリストに関連付けられたサイズであるためである。
【0045】
ブロック905において、オペレーティングシステムは、選択された空きリスト内のノードのセットから1つのノードを選択する。選択された空きリストが連続した空きリスト701の1つである場合、選択されたノード内の任意の物理メモリサブページを、割り当てに使用することができる。領域の未割り当てのページは、オプションで、各々のサイズに対応する空きリストに移動される。
【0046】
一実施形態では、断片化した空きリスト702のうち何れかから選択された断片化したメモリを使用して、割り当てが満たされる。ブロック907に提供されるように、ノードの1つ以上のビットベクトル(例えば、ビットベクトル710)に基づいて、ノードの部分的に空いている物理領域(例えば、領域711)の各々における空きサブページが識別され、仮想メモリページに割り当てるために選択される。具体的には、オペレーティングシステムは、ノード内の部分的に空いている物理メモリ領域に関連付けられた1つ以上のビットベクトルをチェックして、これらの領域内の空き物理サブページを識別する。オペレーティングシステムは、利用可能な空き物理サブページから、要求された仮想ページのバッキング用に割り当てるのに十分な数の空きサブページを選択する。
【0047】
一実施形態では、プロセッサ301は、ビットベクトルに対して演算を行い、仮想ページ内の仮想サブページの数に等しい数の設定されたビットを返す命令を使用して、この選択を容易にする。この命令は、2つのレジスタオペランド(すなわち、ビットベクトルを含む第1のレジスタと、計算結果を受け取るための第2のレジスタ)を有する。一実施形態では、SELECT関数を使用して、要求された仮想ページのバッキング用に割り当て可能な空きサブページを選択する。例えば、仮想ページ毎に32個の仮想サブページがあり、物理領域(例えば、711)毎に64個の物理サブページがあり、空き物理サブページ毎にビットベクトル(例えば、710)内に1ビットがあると仮定すると、ビットベクトルの長さは、物理領域(例えば、711)当たり64ビットである。長さが64ビットのビットベクトルv(例えば、710)がそれぞれ関連付けられた各物理メモリ領域(例えば、711)について、ビットベクトルv及び31のインデックスを入力としてSELECT関数が呼び出される。SELECT関数は、「1」に設定された31番目のビットのビット位置インデックスを返し、このインデックスは、有効な場合は0から63までであり、無効な場合は64である。返されるインデックスは、要求された仮想ページ内の仮想サブページをバッキングするために部分的に空いている物理メモリ領域から割り当てられる、空き物理サブページのセットの最大の物理サブページ番号を表す。
【0048】
ブロック909において、オペレーティングシステムは、ページテーブルエントリをページテーブル311のリーフノード412に追加する。リーフノード412、子ノード411及びルートノード410は、まだ存在しなければ生成され、次のレベルの適切なノードを指すエントリがこれらの各ノードレベルに設置される。リーフノード412内の新しいページテーブルエントリは、アドレス422及びビットベクトル423を他のメタデータ及びAVAILABLEビット(図示省略)と共に含む。ビットベクトル423内のアサートされたビットは、そのビットに対応する物理サブページが、ページテーブルエントリの仮想ページ内の仮想サブページの何れかをバッキングすることを示す。一実施形態では、ビットベクトル423は、空きリストからビットベクトル710をコピーし、最大の物理サブページ番号(すなわち、上述したようにSELECT関数によって計算されるインデックス)より上のビットをマスクすることによって生成される。得られたビットベクトルは、仮想ページ番号に割り当てられた各物理サブページについてのアサートされたビットと、仮想ページ番号に割り当てられていない各物理サブページについてのデアサートされたビットと、を含む。いくつかの実施形態では、仮想ページ番号は、新たに割り当てられてからすぐにアクセスされる可能性が高いので、ビットベクトル622を含む新しいページテーブルエントリは、TLB303にもキャッシュされる。代替の実施形態では、ビットベクトルの代わりに(又は、これに加えて)、TLBエントリに記憶されたマッピングは、図6B及び図6Cを参照して上述したように、仮想ページ内の仮想サブページ番号の全て(又は、一部)に関連付けられた事前計算された物理サブページ番号を含む。
【0049】
ブロック911において、未割り当てのままである物理メモリ領域内のサブページは、メモリ割り当てシステム(例えば、バディ(buddy)又はスラブアロケータ(slab allocator))を使用して空きリストに配置される。断片化した空きリスト702がサポートされている場合、断片化したメモリは、断片化した空きリスト702の何れかに配置される。例えば、3MBのメモリが割り当て済みである4MBのバッキング領域は、2MBの仮想ページをバッキングすることができないが、残りの1MBのメモリは、256KBがサポートされているページサイズであると仮定すると、いくつかの256KBの仮想ページをバッキングすることが可能であり得る。残りの空きページが空きリストに追加された後、処理900はブロック1000に進む。ブロック1000において、要求された割り当てが完了し、割り当てられたメモリがアプリケーションデータを記憶するために使用される。ブロック921において、メモリ割り当て解除が要求されていない場合、処理900はブロック901に戻る。したがって、メモリが割り当て又は割り当て解除されない間、ブロック901,1000,921が繰り返される。
【0050】
ブロック921において、メモリの割り当て解除が要求された場合、オペレーティングシステムは、ブロック923~927の動作を実行することにより、以前に割り当てられた物理サブページのうち1つ以上を解放する。ブロック923において、オペレーティングシステムは、解放される物理サブページを含む物理メモリ領域について、断片化した空きリスト702の何れかに記録される新しいビットベクトルを計算する。新しいビットベクトル内の各ビットは、物理メモリ領域内の対応するサブページが空いているか又は解放される場合にアサートされ(例えば、「1」にされ)、対応するサブページが割り当てられたままとなる場合にデアサートされる(例えば、「0」にされる)。一実施形態では、解放される物理サブページを含む各物理メモリ領域について、ビットベクトルが計算される。
【0051】
ブロック925において、解放された物理メモリサブページを含む物理メモリ領域(例えば、領域711)は、各々のビットベクトル(例えば、ビットベクトル710)と共に、適切な断片化した空きリスト702内のノードに追加される。各物理メモリ領域について、関連付けられたビットベクトルでのポピュレーションカウント動作(1に設定されたビットの数をカウントする)を使用して、物理メモリ領域内の空き物理サブページの数を決定する。オペレーティングシステムは、いくつかの連続した物理メモリ領域が、合計で、その空きリストに関連付けられた要求の粒度を割り当てるのに十分な空き容量を有する場合に、それらの物理メモリ領域を空きリストに配置する。例えば、各々がサイズpを有する2つの連続した物理メモリ領域(すなわち、合計サイズ2p)は、それらが合計で少なくともpの空きメモリ容量を有する場合、サイズpに関連付けられた断片化した空きリストに一緒に配置される。
【0052】
いくつかの実施形態では、部分的に割り当てられた物理メモリ領域の各々のビットベクトルは、各々の物理メモリ領域と共に別々に空きリスト702に記憶される。代替の実施形態では、ビットベクトルは、(例えば、元のビットベクトルに関連付けられた複数の連続した物理メモリ領域からなる)より大きな物理メモリの領域に関連付けられた1つ以上のより大きなビットベクトルにマージされる。
【0053】
バディ割り当てが使用されている場合、オペレーティングシステムは、解放されたメモリ(例えば、半分しか割り当てられていないので、16×4MB領域のうちの32MB)を、等しいサイズ(例えば、16×4MB)の隣接する物理メモリ領域のセットである「バディ」とマージできるか否かをチェックする。両方のセットにおいて、それらの物理サブページの少なくとも半分が空いている場合、それらは単一の要素にマージされ、次に大きい2のべき乗に関連付けられた空きリスト(例えば、32×4MBであり、各エントリは64MBの物理メモリを割り当てる)に配置される。この処理は、最大割り当て粒度サイズまで再帰的に繰り返される。あるいは、解放された物理サブページは、連続した空きリスト701のうち1つ以上に配置することができる。この場合、連続した空きページのセットは、2のべき乗×ページサイズのサイズを各々が有する1つ以上のセグメントに分割される。得られた各セグメントは、そのサイズに関連付けられた空きリストに追加される(例えば、サイズ2pを有するセグメントは2pの空きリストに配置される)。
【0054】
ブロック927において、解放されるサブページによってバッキングされる仮想ページのページテーブルエントリを更新又は削除して、割り当て解除を反映する。1つ以上の物理サブページが仮想ページに割り当てられたままとなる場合、ページテーブルエントリのビットベクトルを、解放されるサブページに対応するビットをデアサートするように更新し、割り当てられたままのサブページに対応するビットは、アサートされたままにする。物理メモリによってバッキングされなくなった仮想ページのページテーブルエントリは、ページテーブルから削除され、対応するTLBエントリは全て無効化される。
【0055】
図10は、一実施形態による、割り当てられたメモリにアクセスするための処理1000を示す図である。処理1000は、処理900のブロック1000に対応する。ブロック901から、メモリアクセス要求(例えば、ロード又はストア命令によるもの)が受信されていない場合、処理1000は、処理900のブロック921に進む。そうではなく、メモリアクセス要求が受信された場合、処理1000は、ブロック1003~1017に従ってメモリ要求を処理する。
【0056】
受信されたメモリ要求は、データが読み書きされる物理メモリアドレス610に変換される仮想メモリアドレス600を決定する。処理ユニット204は、仮想メモリアドレスのエントリが既にTLB303にキャッシュされている場合、TLB303を使用してメモリ変換を実行する。したがって、ブロック1003に提供されるように、処理ユニット204内のメモリアクセスロジックは、要求された仮想アドレス600内の要求された仮想ページ番号601に基づいて、TLB303内でルックアップを実行する。ブロック1005において、仮想ページ番号601がTLB303内にエントリを有している場合、ブロック1003のTLBルックアップがヒットとなり、処理1000はブロック1007に進む。ブロック1007において、プロセッサ204は、一致するTLBエントリ650の事前計算された変換のフィールド624内の仮想サブページ番号602のルックアップを実行する。一実施形態では、プロセッサ204は、仮想サブページ番号602を、事前計算された変換のフィールド624内の1つ以上の推測される仮想サブページ番号(例えば、625)の各々と比較する。
【0057】
ブロック1009において、仮想サブページ番号602が事前計算された変換のフィールド624内で見つかった場合、事前計算された物理サブページ番号(例えば、626)が事前計算された変換のフィールド624から読み取られ、出力される物理メモリアドレス610内の物理サブページ番号612として使用される。SELECT回路631が存在する場合、SELECT回路631はバイパスされ、SELECT動作は実行されない。(図6Aに示すように)TLBエントリが事前計算された変換のフィールドを含まない場合、又は、仮想サブページ番号602について事前計算された変換がない場合、処理1000は、ブロック1009からブロック1013に進む。
【0058】
ブロック1013において、SELECT回路631によりSELECT動作が実行され、TLBエントリ650内のビットベクトル622に基づいて物理サブページ番号612が計算される。SELECT回路631は、ビットベクトル622及び仮想サブページ番号602を入力として受け取り、ビットベクトル622内の最下位からi番目のアサートされたビットのインデックスを計算することによって、物理サブページ番号612を決定し、ここで、iは、要求された仮想サブページ番号602を表す。SELECT回路631から出力される得られたインデックスは、要求された仮想サブページ番号602に割り当てられた物理サブページを識別する物理サブページ番号612である。
【0059】
ブロック1011又は1013に従って物理サブページ番号612が計算されると、処理1000はブロック1015に進む。ブロック1015において、TLB303は、TLBエントリ650からの物理領域番号611と、事前計算又は計算された物理サブページ番号612と、要求された仮想メモリアドレス600のサブページオフセット603からコピーされたサブページオフセット613と、を含む物理メモリアドレス610を出力する。
【0060】
ブロック1005において、TLB303が、要求された仮想ページ番号407のエントリを含まないような仮想メモリアドレス400が要求された場合、TLBミスが発生し、処理1000はブロック1021に進む。ブロック1021において、仮想メモリアドレス400内の仮想ページ番号407を使用してページテーブルウォークが実行され、リーフノード412に到達するまでページテーブル311の内部ノード(例えば、411,412)が走査される。ブロック1023に提供されるように、リーフノード412内のマッピング(例えば、ビットベクトル423)を使用して、物理サブページ番号が計算される。一実施形態では、TLB303内のブロック1013と同様に、ページテーブルエントリ内のビットベクトル423を使用してSELECT関数が実行される。
【0061】
ブロック1025において、要求された仮想ページ番号をページテーブルウォークから特定された物理ページ番号(アドレス420,421,422を結合したもの)に関連付けるTLBエントリが生成される。ビットベクトル423は、ページテーブルエントリから新しいTLBエントリにコピーされる。ブロック1017において、(TLB303又はページテーブル311によって)仮想メモリアドレス600が物理メモリアドレス610に変換されると、メモリ要求は、元のメモリ要求に従って、返された物理メモリアドレス610でメモリ206にアクセスする。このように、上記の処理900,1000の動作により、コンピューティングシステム200は、大きな仮想スーパーページをバッキングするための断片化した不連続なメモリの割り当てをサポートする。
【0062】
デバイスは、複数の仮想ページ番号毎に、仮想ページ番号に関連付けられたマッピングを記憶するアドレス変換バッファを備える。マッピングは、仮想ページ番号に割り当てられた物理サブページのセットを識別し、物理サブページのセットは、物理メモリ領域内の複数の連続したサブページのうち少なくとも第1の物理サブページを含み、物理メモリ領域内の複数の連続したサブページのうち少なくとも第2の物理サブページを含まない。メモリ管理ユニットは、アドレス変換バッファに結合されており、要求された仮想サブページ番号と、複数の仮想ページ番号のうち要求された仮想ページ番号と、を受信したことに応じて、要求された仮想ページ番号に関連付けられたマッピングに基づいて、要求された仮想サブページ番号に割り当てられた複数の連続したサブページのうち物理サブページを識別する物理サブページ番号を決定する。
【0063】
このデバイスでは、複数の仮想ページ番号毎に、仮想ページ番号に関連付けられたマッピングは、ビットベクトルを含み、ビットベクトルは、仮想ページ番号に割り当てられた複数の連続した物理サブページの物理サブページ毎のアサートされたビットと、仮想ページ番号に割り当てられていない物理メモリ領域内の物理サブページ毎のデアサートされたビットと、を含む。
【0064】
このデバイスは、アドレス変換バッファに結合されたSELECT回路をさらに備え、SELECT回路は、複数の仮想ページ番号毎に、ビットベクトル内の最下位からi番目のアサートされたビットのインデックスを計算することによって、物理サブページ番号を決定し、iは、要求された仮想サブページ番号を表す。
【0065】
このデバイスでは、アドレス変換バッファは、トランスレーションルックアサイドバッファ(TLB)であり、複数の仮想ページ番号毎に、推測される仮想サブページ番号を、推測される仮想サブページ番号に割り当てられた物理サブページを識別する事前計算された物理サブページ番号に関連付ける、事前計算された変換のフィールドを含む。
【0066】
このデバイスは、SELECT回路をさらに備え、SELECT回路は、要求された仮想サブページ番号を受信したことに応じて、要求された仮想サブページ番号を、推測される仮想サブページ番号と比較する。要求された仮想サブページ番号が、推測される仮想サブページ番号と一致する場合に、SELECT回路は、事前計算された変換のフィールドから、事前計算された物理サブページ番号を読み出すことによって、物理サブページ番号を決定する。要求された仮想サブページ番号が、推測される仮想サブページ番号と一致しない場合に、SELECT回路は、マッピング及び要求された仮想サブページ番号に基づいて物理サブページ番号を計算することによって、物理サブページ番号を決定する。
【0067】
このデバイスでは、マッピングは、事前計算された仮想サブページ番号を、事前計算された物理サブページ番号に関連付ける、事前計算された変換のセットを含む。
【0068】
このデバイスは、メモリ管理ユニットに結合された空きリストをさらに備える。空きリストは、1つ以上のノードのセットを含む。1つ以上のノードのセット内の各ノードは、ビットベクトルを含み、部分的に空いている物理メモリ領域を識別する。ビットベクトルは、部分的に空いている物理メモリ領域内の空きサブページの第1のサブセットと、部分的に空いている物理メモリ領域内の割り当て済みのサブページの第2サブセットと、を識別する。
【0069】
方法は、複数の仮想ページ番号毎に、仮想ページ番号に関連付けられたマッピングを記憶することを含む。マッピングは、仮想ページ番号に割り当てられた物理サブページのセットを識別する。物理サブページのセットは、物理メモリ領域内の複数の連続したサブページのうち少なくとも第1の物理サブページを含み、物理メモリ領域内の複数の連続したサブページのうち少なくとも第2の物理サブページを含まない。この方法は、要求された仮想サブページ番号と、複数の仮想ページ番号のうち要求された仮想ページ番号と、を受信したことに応じて、要求された仮想ページ番号に関連付けられたマッピングに基づいて、要求された仮想サブページ番号に割り当てられた複数の連続したサブページのうち物理サブページを識別する物理サブページ番号を決定することをさらに含む。
【0070】
この方法は、複数の仮想ページ番号毎に、仮想ページ番号に関連付けられたマッピングをビットベクトルとして記録することであって、ビットベクトルは、仮想ページ番号に割り当てられた複数の連続した物理サブページ毎のアサートされたビットと、仮想ページ番号に割り当てられていない物理メモリ領域内の物理サブページ毎のデアサートされたビットと、を含む、ことをさらに含む。
【0071】
この方法は、複数の仮想ページ番号毎に、ビットベクトル内の最下位からi番目のアサートされたビットのインデックスを計算することによって、物理サブページ番号を決定することであって、iは、要求された仮想サブページ番号を表す、ことをさらに含む。
【0072】
この方法は、複数の仮想ページ番号毎に、推測される仮想サブページ番号と、推測される仮想サブページ番号に割り当てられた物理サブページを識別する事前計算された物理サブページ番号と、をアドレス変換バッファの事前計算された変換のフィールドに記憶することをさらに含む。
【0073】
この方法は、要求された仮想サブページ番号を受信したことに応じて、要求された仮想サブページ番号を、推測される仮想サブページ番号と比較することと、要求された仮想サブページ番号が、推測される仮想サブページ番号と一致する場合に、事前計算された変換のフィールドから、事前計算された物理サブページ番号を読み出すことによって、物理サブページ番号を決定することと、をさらに含む。
【0074】
この方法は、1つ以上のノードのセットを空きリストに記憶することをさらに含む。1つ以上のノードのセット内の各ノードは、ビットベクトルを含み、部分的に空いている物理メモリ領域を識別する。ビットベクトルは、部分的に空いている物理メモリ領域内の空きサブページの第1のサブセットと、部分的に空いている物理メモリ領域内の割り当て済みのサブページの第2のサブセットと、を識別する。この方法は、物理メモリを割り当てる要求に応じて、空きリスト内の1つ以上のノードのセットから第1のノードを選択することをさらに含む。空きリストは、要求のメモリサイズよりも大きいサイズpに関連付けられている。選択された第1のノードで識別される部分的に空いている物理メモリ領域は、サイズが少なくともpの空きメモリ容量を含む。
【0075】
この方法は、物理メモリ領域のビットベクトルを計算することによって、物理サブページのセットのうち1つ以上のサブページを解放することをさらに含む。ビットベクトルの各ビットは、物理メモリ領域内の対応するサブページが空いているか否かを示す。この方法は、新しいノードを第1の空きリストに追加することをさらに含む。新しいノードは、計算されたビットベクトルを含み、物理メモリ領域を識別する。
【0076】
この方法は、複数の仮想ページ番号毎に、仮想ページ番号に関連付けられたマッピングを記憶する前に、トランスレーションルックアサイドバッファ(TLB)ミスに応じて、仮想ページ番号に基づいてページテーブルを走査して、ページテーブル内のマッピングを識別することをさらに含む。マッピングは、ビットベクトルとしてページテーブルに記憶される。この方法は、マッピングをページテーブルからTLBにコピーすることによって、マッピングを記憶することをさらに含む。
【0077】
コンピューティングシステムは、物理メモリ領域を含むメインメモリと、メインメモリに結合されたプロセッサと、複数の仮想ページ番号毎に、仮想ページ番号に関連付けられたマッピングを記憶するアドレス変換バッファと、を備える。マッピングは、仮想ページ番号に割り当てられた物理サブページのセットを識別する。物理サブページのセットは、物理メモリ領域内の複数の連続したサブページのうち少なくとも第1の物理サブページを含み、物理メモリ領域内の複数の連続したサブページのうち少なくとも第2の物理サブページを含まない。このコンピューティングシステムは、プロセッサ及びアドレス変換バッファに結合されたメモリ管理ユニットであって、要求された仮想サブページ番号と、複数の仮想ページ番号のうち要求された仮想ページ番号と、を受信したことに応じて、要求された仮想ページ番号に関連付けられたマッピングに基づいて、要求された仮想サブページ番号に割り当てられた複数の連続したサブページのうち物理サブページを識別する物理サブページ番号を決定する、メモリ管理ユニットをさらに備える。
【0078】
このコンピューティングシステムでは、複数の仮想ページ番号毎に、仮想ページ番号に関連付けられたマッピングは、ビットベクトルを含み、ビットベクトルは、仮想ページ番号に割り当てられた複数の連続した物理サブページ毎のアサートされたビットと、仮想ページ番号に割り当てられていない物理メモリ領域内の物理サブページ毎のデアサートされたビットと、を含む。このコンピューティングシステムは、アドレス変換バッファに結合されたSELECT回路をさらに備える。SELECT回路は、ビットベクトル内の最下位からi番目のアサートされたビットのインデックスを計算することによって、物理サブページ番号を決定し、iは、要求された仮想サブページ番号を表す。
【0079】
このコンピューティングシステムでは、アドレス変換バッファは、複数の仮想ページ番号毎に、推測される仮想サブページ番号を、推測される仮想サブページ番号に割り当てられた物理サブページを識別する事前計算された物理サブページ番号に関連付ける、事前計算された変換のフィールドをさらに含む。このコンピューティングシステムは、SELECT回路をさらに備え、SELECT回路は、要求された仮想サブページ番号を、推測される仮想サブページ番号と比較する。要求された仮想サブページ番号が、推測される仮想サブページ番号と一致する場合に、SELECT回路は、事前計算された変換のフィールドから、事前計算された物理サブページ番号を読み出すことによって、物理サブページ番号を決定する。要求された仮想サブページ番号が、推測される仮想サブページ番号と一致しない場合に、SELECT回路は、マッピング及び要求された仮想サブページ番号に基づいて物理サブページ番号を計算することによって、物理サブページ番号を決定する。
【0080】
このコンピューティングシステムは、プロセッサに結合され、1つ以上のノードのセットを記憶する空きリストをさらに含む。1つ以上のノードのセット内の各ノードは、ビットベクトルを含み、部分的に空いている物理メモリ領域を識別する。ビットベクトルは、部分的に空いている物理メモリ領域内の空きサブページの第1のサブセットと、部分的に空いている物理メモリ領域内の割り当て済みのサブページの第2のサブセットと、を識別する。また、プロセッサは、仮想メモリページのサイズと、空きリストに関連付けられたサイズpと、に基づいて、空きリストを選択することと、空きリスト内の1つ以上のノードのセットから第1のノードを選択することと、選択された第1ノード内のビットベクトルに基づいて、仮想メモリページに割り当てるための物理サブページのセットを選択することと、によって、仮想メモリページのためにメインメモリから物理メモリを割り当てる。選択された第1ノードで識別される部分的に空いている物理メモリ領域は、少なくともpの空きメモリ容量を含む。
【0081】
このコンピューティングシステムでは、プロセッサは、物理メモリ領域のビットベクトルを計算することと、新しいノードを空きリストに追加することと、によって、物理サブページのセットのうち1つ以上のサブページを解放する。ビットベクトルの各ビットは、物理メモリ領域内の対応するサブページが空いているか否かを示し、新しいノードは、計算されたビットベクトルを含み、物理メモリ領域を識別する。
【0082】
本明細書で使用される場合、「~に結合される」という用語は、直接的に、又は、1つ以上の介在するコンポーネントを介して間接的に結合されることを意味し得る。本明細書に記載された様々なバスを介して提供される何れの信号も、他の信号と時間多重化され、1つ以上の共通のバスを介して提供されてもよい。さらに、回路コンポーネント又はブロック間の相互接続は、バス又は単一の信号線として示されてもよい。各バスは、代替的には1つ以上の単一の信号線であってもよく、各単一信号線は、代替的にはバスであってもよい。
【0083】
特定の実施形態は、非一時的なコンピュータ可読記憶媒体に記憶された命令を含み得るコンピュータプログラム製品として実施され得る。これらの命令は、説明した動作を実行するように汎用プロセッサ又は専用プロセッサをプログラムするために使用され得る。コンピュータ可読記憶媒体は、マシン(例えば、コンピュータ)によって読み取り可能な形式(例えば、ソフトウェア、処理アプリケーション)で情報を記憶又は送信するための任意のメカニズムを含む。非一時的なコンピュータ可読記憶媒体は、磁気記憶媒体(例えば、フロッピー(登録商標)ディスク)、光学記憶媒体(例えば、CD-ROM)、光磁気記憶媒体、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラム可能メモリ(例えば、EPROM及びEEPROM)、フラッシュメモリ、又は、電子命令を記憶するのに適した他のタイプの媒体を含むことができるが、これらに限定されない。
【0084】
さらに、いくつかの実施形態は、コンピュータ可読記憶媒体が2つ以上のコンピュータシステムに記憶され、及び/又は、これらによって実行される分散コンピューティング環境で実施されてもよい。また、コンピュータシステム間で転送される情報は、コンピュータシステムを接続する伝送媒体を介してプル(pulled)又はプッシュ(pushed)されてもよい。
【0085】
概して、コンピュータ可読記憶媒体上に担持されたコンピューティングシステム200及び/又はその部分を表すデータ構造は、プログラムによって読み取ることができ、コンピューティングシステム200を含むハードウェアを製造するために直接的又は間接的に使用することができる、データベース又は他のデータ構造であってもよい。例えば、データ構造は、Verilog又はVHDL等の高水準設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)の記述であってもよい。記述は、記述を合成する合成ツールによって読み取られ、合成ツールは、記述を合成して、合成ライブラリからゲートのリストを含むネットリストを生成してもよい。ネットリストは、コンピューティングシステム200を含むハードウェアの機能を表すゲートのセットを含む。次に、ネットリストは、マスクに適用される幾何学形状を記述するデータセットを生成するために配置され、ルーティングされ得る。次に、マスクを、様々な半導体製造工程において使用して、コンピューティングシステム200に対応する1つ以上の半導体回路を生成することができる。あるいは、コンピュータ可読記憶媒体上のデータベースは、必要に応じて、ネットリスト(合成ライブラリの有無にかかわらず)、データセット、又は、グラフィックデータシステム(GDS)IIデータであってもよい。
【0086】
本明細書における方法(複数可)の動作は、特定の順序で示され、説明されているが、各方法の動作の順序は、特定の動作が逆の順序で実行され得るように、又は、特定の動作が少なくとも部分的に他の動作と同時に実行され得るように、変更され得る。他の実施形態では、別個の動作の命令又はサブ動作は、断続的及び/又は交互的であってもよい。
【0087】
上記の明細書では、その特定の例示的な実施形態を参照して、実施形態を説明した。しかしながら、添付の特許請求の範囲に記載される実施形態のより広い範囲から逸脱することなく、これらに対して様々な修正及び変更が行われ得ることは明らかである。したがって、本明細書及び図面は、限定的な意味ではなく、例示的な意味のものと考えられるべきである。
図1
図2
図3
図4
図5
図6A
図6B
図6C
図7
図8
図9
図10