JP2024510127A - ページ再マッピングおよびローテーションによるアドレス空間配置のランダム化エントロピーの増大 - Google Patents

ページ再マッピングおよびローテーションによるアドレス空間配置のランダム化エントロピーの増大 Download PDF

Info

Publication number
JP2024510127A
JP2024510127A JP2023552340A JP2023552340A JP2024510127A JP 2024510127 A JP2024510127 A JP 2024510127A JP 2023552340 A JP2023552340 A JP 2023552340A JP 2023552340 A JP2023552340 A JP 2023552340A JP 2024510127 A JP2024510127 A JP 2024510127A
Authority
JP
Japan
Prior art keywords
code
virtual address
region
page
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023552340A
Other languages
English (en)
Inventor
アルヴィンド・クリシュナスワミー
リチャード・シニア
サンディープ・クシュワハ
キャン・エイカー
Original Assignee
クアルコム,インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by クアルコム,インコーポレイテッド filed Critical クアルコム,インコーポレイテッド
Publication of JP2024510127A publication Critical patent/JP2024510127A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/652Page size control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

様々な実施形態は、ページの仮想アドレスを物理アドレスにマップするように構成されるメモリマップを生成するための方法およびデバイスを含み、同じサイズのページが領域にグループ化される。実施形態は、第1の追加ページのための第1のエントリをメモリマップの第1の領域に追加するステップと、コードに割り振られた第1の領域の仮想アドレスのシフトに対応するために第1の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップと、第1の追加ページのための第1のエントリのシフトされた仮想アドレスを、第1の領域の第1の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするステップと、コードに割り振られた第1の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップであって、コードに割り振られた第1の領域の仮想アドレスが第1の追加ページのための第1のエントリに部分的にシフトする、シフトするステップとを含んでもよい。

Description

関連出願
本出願は、その内容全体が参照により本明細書に組み込まれる、2021年3月15日に出願された米国非仮出願第17/201,247号の優先権の利益を主張する。
コード再利用攻撃はますます、W^Xなど、ベースライン対抗策が実装されたシステム上のより一般的な攻撃ベクトルになりつつある。コード再利用攻撃は、攻撃者の目的のためにバイナリの既存のコードを再利用する。コード再利用の1つの形式は、攻撃者が選択した関数を呼び出すことができるときである。たとえば、攻撃者は、関数ポインタテーブルまたはジャンプテーブルでポインタを、バイナリにはあるがテーブルにはもともとない異なる関数に変更するために上書き脆弱性を使用することがある。あらゆるコード再利用攻撃の1つの共通の特性は、攻撃者が、バイナリのコードまたは関数を再利用可能であるためには、バイナリのコードまたは関数のアドレスを事前に知っている必要があるということである。
そのような攻撃を防御する1つの方法は、バイナリのコードセグメントのアドレス空間配置のランダム化(ASLR)によるものである。この方式では、ローダが、すべてのロードでプロセスの仮想アドレス空間においてランダムオフセットでバイナリのコードセグメントをロードすることになる。結果として、攻撃者の関心のコードは今や、各ロードでランダムアドレスにある。ASLRの有効性の測度は、ASLRのエントロピーと呼ばれることがある。様々なシステムファクタが、ASLRのエントロピーを制限する可能性がある。
様々な開示する態様は、ページの仮想アドレスを物理アドレスにマップするように構成されるメモリマップを生成する装置および方法を含んでもよく、同じサイズのページが領域にグループ化される。様々な態様は、第1の追加ページのための第1のエントリをメモリマップの第1の領域に追加するステップと、コードに割り振られた第1の領域の仮想アドレスのシフトに対応する(accommodate)ために第1の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップと、第1の追加ページのための第1のエントリのシフトされた仮想アドレスを、第1の領域の第1の最下位シフト仮想アドレスページ(lowest shifted virtually addressed page)にマップされた物理アドレスにマップするステップと、コードに割り振られた第1の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップであって、コードに割り振られた第1の領域の仮想アドレスが第1の追加ページのための第1のエントリに部分的にシフトする、シフトするステップとを含んでもよい。
いくつかの態様は、第2の追加ページのための第2のエントリをメモリマップの第2の領域に追加するステップであって、第2の領域が第1の領域よりも上位に仮想的にアドレス指定される、追加するステップと、コードに割り振られた第2の領域の仮想アドレスのシフトに対応するために第2の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップと、第2の追加ページのための第2のエントリのシフトされた仮想アドレスを、第2の領域の第2の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするステップと、コードに割り振られた第2の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップであって、コードに割り振られた第2の領域の仮想アドレスが第2の追加ページのための第2のエントリに部分的にシフトする、シフトするステップとを含んでもよい。
いくつかの態様は、メモリマップの第1の領域に追加された第1のエントリに対応するために第2の領域の仮想アドレスをシフトするステップと、第2の追加ページを含む、第2の領域のページを、第2の領域のページのサイズページのページ境界と整列させるために第2の領域の仮想アドレスをシフトするステップとを含んでもよい。
いくつかの態様は、物理メモリにおいてコードに割り振られた第1の領域のシフトされた仮想アドレスのためにコードをローテートさせるステップを含んでもよい。
いくつかの態様では、物理メモリにおいてコードに割り振られた第1の領域のシフトされた仮想アドレスのためにコードをローテートさせるステップは、コードに割り振られた第1の領域のシフトされた仮想アドレスのために、第1の最下位仮想アドレスページからマップされた物理アドレスにコードをロードするステップと、コードに割り振られた第1の領域のシフトされた仮想アドレスのために、第1の追加のページからマップされた物理アドレスにコードをロードするステップであって、第1の追加ページからコードに割り振られた第1の領域のシフトされた仮想アドレスのためのマップされた物理アドレスが、第1の最下位仮想アドレスページからコードに割り振られた第1の領域のシフトされた仮想アドレスのためのマップされた物理アドレスよりも下位の物理アドレスである、ロードするステップとを含んでもよい。
いくつかの態様は、サブページの粒度のシフト量だけ、コードに割り振られた第2の領域の仮想アドレスのシフトに対応するために、第2の領域の仮想アドレスのシフトの量だけ、コードを含むバイナリコードのためにポインタを調整するステップを含んでもよい。
いくつかの態様は、プログラムカウンタ相対コードを生成するステップと、プログラムカウンタ相対コードからバイナリコードを生成するステップとを含んでもよい。
さらなる態様は、上記で要約した方法のうちのいずれかの動作を実行するように構成されるプロセッサを有するコンピューティングデバイスを含む。さらなる態様は、上記で要約した方法のうちのいずれかの機能を実行するための手段を有するコンピューティングデバイスを含む。さらなる態様は、上記で要約した方法のうちのいずれかの動作をコンピューティングデバイスのプロセッサおよび他のコンポーネントに実行させるように構成されるプロセッサ実行可能命令を記憶した非一時的プロセッサ可読媒体を含む。
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、様々な実施形態のうちの例示的な実施形態を示し、上記の一般的な説明および下記の発明を実施するための形態とともに、特許請求の範囲の特徴を説明するのに役立つ。
様々な実施形態を実装するのに適した例示的なコンピューティングデバイスを示すコンポーネントブロック図である。 様々な実施形態を実装するのに適した例示的なメモリシステムを示すコンポーネントブロック図である。 様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示すブロック図である。 様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示すブロック図である。 様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示すブロック図である。 様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示すブロック図である。 様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示す表図である。 様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示す表図である。 様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示すコンポーネントブロックおよび流れ図である。 一実施形態によるサブページの粒度のシフトのメモリマッピングのための方法を示すプロセスフロー図である。 一実施形態によるサブページの粒度のシフトのメモリマッピングのための方法を示すプロセスフロー図である。 一実施形態によるメモリローテーションのための方法を示すプロセスフロー図である。 一実施形態によるメモリローテーションのための方法を示すプロセスフロー図である。 様々な実施形態を実装するのに適した例示的なモバイルコンピューティングデバイスを示すコンポーネントブロック図である。 様々な実施形態を実装するのに適した例示的なモバイルコンピューティングデバイスを示すコンポーネントブロック図である。 様々な実施形態を実装するのに適した例示的なサーバを示すコンポーネントブロック図である。
様々な実施形態について、添付の図面を参照して詳細に説明する。可能な場合はどこでも、同じかまたは同様の部分を指すために、図面全体にわたって同じ参照番号が使用される。特定の例および実装形態に対してなされる参照は、例示を目的としており、特許請求の範囲を限定するものではない。
様々な実施形態は、ページ再マッピングおよびローテーションによりアドレス空間配置のランダム化(ASLR)エントロピーを増大させる方法と、そのような方法を実装するコンピューティングデバイスとを含む。様々な実施形態は、サブページの粒度のシフト量を使用してページマップからサブページの粒度のシフトのページマップを生成することを含んでもよい。いくつかの実施形態では、ページ仮想アドレス範囲が、サブページの粒度のシフト量に対応するためにシフトされ、ページマップの物理アドレスにマップされてもよい。いくつかの実施形態では、ページの領域のページ仮想アドレス範囲が、その領域のページサイズのページ境界に整列するためにシフトされてもよい。いくつかの実施形態では、追加のページマップエントリが、同じサイズのページの各領域のために追加されてもよい。いくつかの実施形態は、サブページのシフトの粒度のページマップにおける仮想アドレスの物理アドレスへのマッピングに基づいて物理メモリに記憶されたローテーティングコード(rotating code)、データ、および/または情報を含んでもよい。いくつかの実施形態では、領域の第1のページエントリおよび追加のページエントリのための仮想アドレス範囲は、物理アドレスの同じ範囲にマップされてもよい。
「コンピューティングデバイス」および「モバイルコンピューティングデバイス」という用語は、セルラー電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、コンバーチブルラップトップ/タブレット(2-in-1コンピュータ)、スマートブック、ウルトラブック、ネットブロック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応セルラー電話、モバイルゲームコンソール、ワイヤレスゲームコントローラ、ならびに、メモリおよびプログラマブルプロセッサを含む同様のパーソナル電子デバイスのうちのいずれか1つまたはすべてを指すために本明細書において互換的に使用される。「コンピューティングデバイス」という用語はさらに、パーソナルコンピュータを含む据置型コンピューティングデバイス、デスクトップコンピュータ、オールインワンコンピュータ、ワークステーション、スーパーコンピュータ、メインフレームコンピュータ、(車両および他のより大きいシステムなどへの)組込み型コンピュータ、サーバ、マルチメディアコンピュータ、およびゲームコンソールを指す場合がある。
説明を容易かつ明瞭にするために、様々な実施形態をコード、たとえばプロセッサ実行可能命令に関して説明するが、任意のデータ、たとえばコード、プログラムデータ、またはメモリに記憶された他の情報に同様に適用可能である場合がある。「コード」、「データ」、および「情報」という用語は、本明細書では互換的に使用され、様々な実施形態を説明する際に例として使用されるコード、データ、情報のタイプに請求項および説明の範囲を制限するように意図されない。
ASLRは、コード再利用攻撃などの悪意のある攻撃を防御するために使用される技法である。ASLRの有効性の測度は、ASLRのエントロピーと呼ばれることがある。この測度を解釈する1つの方法は、それらが特定のアドレスを仮定して複数のコード再利用攻撃の試みを行う場合は、攻撃者の成功率となる。これは、関心の特定のデバイスへの複数の試み、またはデバイスの集団全体への広範な攻撃であることがある。ASLRのエントロピーが高くなればなるほど、攻撃の成功には試みの数が大きくなる、または攻撃の成功率が低くなる。
ローダがコードの開始を合法的に設置することができる場所の数が大きくなればなるほど、攻撃者が利用することがより困難になる。ASLRにおいて実現できるエントロピーは、通常、ローダに利用可能なVA(仮想アドレス)空間の量によって大きく制限される。利用可能なエントロピーはまた、限られたサイズのトランスレーションルックアサイドバッファ(TLB)またはページテーブルを使用することなどによって、仮想メモリがメモリ管理ユニット(MMU)およびオペレーティングシステム(OS)を介してどのように管理されるかに緊密な関係を有し、これが著しい制約をもたらすことがある。複数のページサイズをサポートし、仮想アドレスと物理アドレスとの間のメモリマップが静的に決定されるシステムがある。これは、利用可能なエントロピーをさらに下げる可能性があるアライメント制約をもたらす。
様々な実施形態は、上記のメモリ、マッピング、およびアライメント制約によって課されるエントロピーへの制限を克服することによってエントロピーを増大させる可能性があるASLR方式を提供する。ASLR方式は、仮想メモリにおける仮想アドレスのサブページの粒度のシフト、物理メモリにおける対応するコードローテーションを実装することと、変更された仮想メモリアドレスを物理メモリにおけるコードのアドレスにマップすることとを含んでもよい。
サブページの粒度のシフトは、仮想メモリにおけるコードの仮想アドレスを物理メモリの物理アドレスにマップするように構成されるメモリマップにおける仮想アドレスのシフトであってもよい。「メモリマップ」という用語は、本明細書では、仮想メモリの仮想アドレスを物理メモリの物理アドレスにマップするように構成されるデータまたはメモリ構造を指すように使用される。たとえば、メモリマップは、TLB、ページテーブル、アドレス配列、リンクリストなどを含んでもよい。いくつかの実施形態では、メモリマップは、ページサイズの任意の数および組合せの仮想メモリのページの仮想アドレスを、物理メモリの対応するサイズの部分を表す物理メモリの物理アドレスにマップしてもよい。
サブページの粒度のシフトは、仮想メモリ用のページサイズの倍数ではない仮想アドレスの任意の量だけのコードの仮想アドレスのシフトであってもよい。たとえば、サブページの粒度のシフトが、仮想メモリ用の最小ページサイズの倍数ではない仮想アドレスの任意の量だけの、仮想メモリにおける仮想アドレスのシフトであってもよい。したがって、コードのサブページの粒度にシフトされた仮想アドレスは、仮想メモリにおけるページの仮想アドレス境界と整列しない場合がある。コードの仮想アドレスのサブページの粒度のシフトは、メモリマップの領域を越えてシフトされた仮想アドレスを生じる場合がある。「領域」という用語は、本明細書では、メモリマップにおける同じサイズのページの仮想アドレスのマッピングを指すように使用される。追加ページの仮想アドレスをマップするための新しいエントリが、領域を越えてシフトされるコードの仮想アドレスに対応するために、領域などのメモリマップに追加されてもよい。新しいエントリは、追加のページの仮想アドレスを、同じサイズのページの仮想アドレスがマップされる物理アドレスにマップしてもよい。たとえば、新しいエントリは、追加のページの仮想アドレスを、同じ領域の第1のページの仮想アドレスがマップされる物理アドレスにマップしてもよい。
メモリマップは、複数の領域を有してもよい。異なる領域は、異なるサイズのページの仮想アドレスを物理アドレスにマップしてもよい。第1の領域への追加エントリを含むサブページの粒度のシフトは、第2の領域のページの仮想アドレスを、第2の領域のためのサイズのページの仮想アドレスページ境界と整列されていないようにする場合がある。第2の領域のページの仮想アドレスを、サイズページのページ境界の仮想アドレスに整列させるために、仮想アドレスホールがメモリマップに導入されてもよい。仮想アドレスホールは、第2の領域のページの仮想アドレスを、仮想アドレスのサブページの粒度のシフト量への仮想アドレスの追加量だけシフトすることによって導入されることがあり、仮想アドレスの量、第2の領域のページの仮想アドレスをサイズページのページ境界の仮想アドレスに整列させることがある追加エントリの任意の数および組合せ。
いくつかの実施形態では、サブページの粒度のシフトは、ページの仮想アドレスのためのメモリマップエントリをコードがないままにしておいてもよく、そのようなエントリは、メモリマップから省かれてもよい。いくつかの実施形態では、仮想アドレスホールは、領域間に不連続仮想アドレスを生じ、領域間のいくつかの仮想アドレスをマップされないままにする場合がある。いずれかまたは両方の事例において、サブページの粒度のシフトは、メモリマップに追加される領域ごとに1つのエントリを必要とする可能性がある。したがって、メモリマップの増大は、より多くのメモリマップエントリの追加を必要とする可能性がある他のASLR方式と比較して小さい可能性がある。
サブページの粒度のシフトに応じて追加される、メモリマップへの追加のエントリの仮想アドレスのコードは、物理メモリにおいてローテートされてもよい。上記で説明したように、サブページの粒度のシフトは、コードのシフトされた仮想アドレスを、ページ境界の仮想アドレスと整列しないようにする可能性がある。したがって、サブページの粒度のシフトは、ページのコードの仮想アドレスの物理アドレスへのマッピングが、ページの仮想アドレスおよび物理アドレスの対応する空の部分を放置して、同じ量だけシフトされてもよい。サブページの粒度のシフトはまた、メモリ内の領域に対する追加のエントリのマッピング、ページのコードの仮想アドレスから追加のエントリの物理アドレスへのマッピングが、対応してページ境界の仮想アドレスと整列されないようにしてもよい。ページの仮想アドレスは、同じ物理アドレスにマップされてもよいが、ページ中のコードの仮想アドレスは、物理アドレスの異なる部分にマップされてもよい。追加のエントリ内のコードの仮想アドレスは、サブページの粒度のシフトによって生じた物理アドレスの空の部分を埋めるためにマップされてもよい。したがって、コードがロードされるとき、コードは、物理メモリにおいてローテートされ、メモリマップ内の領域に対応する、物理アドレスの範囲の一方の端部から物理アドレスの範囲の別の端部へ、メモリマップへの追加のエントリのコードを移動してもよい。
いくつかの実施形態では、リンカが、入力としてメモリマップを使用し、それに応じてコードポインタを調整してもよい。コードポインタは、仮想アドレスがメモリマップにおいてシフトされる量によって仮想アドレスをポイントするように調整されてもよい。いくつかの実施形態では、コードポインタは、サブページの粒度のシフトの仮想アドレスの量によって調整されてもよい。いくつかの実施形態では、コードポインタは、サブページの粒度のシフトの仮想アドレスの量、および仮想アドレスホールの任意の数および組合せの仮想アドレスの量によって調整されてもよい。コードポインタを調整することで、コード変化またはページ整列を考慮する必要なく、ローダが物理メモリにおける任意のコードローテーションに対して柔軟性を有することを可能にしてもよい。
図1は、様々な実施形態とともに使用するのに適したコンピューティングデバイス100を含むシステムを示す。コンピューティングデバイス100は、中央処理ユニット104と、メモリ106と、通信インターフェース108と、メモリインターフェース110と、周辺デバイスインターフェース120と、処理デバイス124とを有するSoC102を含んでもよい。コンピューティングデバイス100は、ワイヤードまたはワイヤレスモデムなどの通信コンポーネント112、メモリ114、ワイヤレス通信リンクを確立するためのアンテナ116、および/または周辺デバイス122をさらに含んでもよい。プロセッサ124は、様々な処理デバイスのいずれか、たとえば、いくつかのプロセッサコアを含んでよい。
「システムオンチップ」または"SoC"という用語は、通常、限定はしないが、処理デバイス、メモリ、および通信インターフェースを含む相互接続された電子回路のセットを指すために本明細書において使用される。処理デバイスは、汎用プロセッサ、中央処理ユニット(CPU)104、デジタル信号プロセッサ(DSP)、グラフィックス処理ユニット(GPU)、加速処理ユニット(APU)、セキュア処理ユニット(SPU)、知的財産ユニット(IPU)、カメラサブシステム用の画像プロセッサもしくはディスプレイ用のディスプレイプロセッサなどのコンピューティングデバイスの特定のコンポーネントのサブシステムプロセッサ、補助プロセッサ、周辺デバイスプロセッサ、シングルコアプロセッサ、マルチコアプロセッサ、コントローラ、および/またはマイクロコントローラなどの、様々な異なるタイプのプロセッサ124および/またはプロセッサコアを含んでもよい。処理デバイスはさらに、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、他のプログラマブル論理デバイス、個別ゲート論理、トランジスタ論理、性能監視ハードウェア、ウォッチドッグハードウェア、および/または時間基準などの、他のハードウェアおよびハードウェアの組合せを組み入れてもよい。集積回路は、集積回路のコンポーネントがシリコンなどの単体の半導体材料上に存在するように構成されてもよい。
SoC102は、1つまたは複数のCPU104およびプロセッサ124を含んでもよい。コンピューティングデバイス100は、2つ以上のSoC102を含み、それによって、CPU104、プロセッサ124、およびプロセッサコアの数を増やしてもよい。コンピューティングデバイス100はまた、SoC102に関連付けられていないCPU104およびプロセッサ124を含んでもよい。個々のCPU104およびプロセッサ124は、マルチコアプロセッサであってもよい。CPU104およびプロセッサ124は各々、コンピューティングデバイス100の他のCPU104およびプロセッサ124と同じであることも異なっていることもある、特定の目的のために構成されてもよい。同じまたは異なる構成のCPU104、プロセッサ124、およびプロセッサコアのうちの1つまたは複数は、一緒にグループ化されてもよい。CPU104、プロセッサ124、またはプロセッサコアのグループは、マルチプロセッサクラスタと呼ばれることがある。
SoC102のメモリ106は、SoC102のCPU104、プロセッサ124、または他のコンポーネントによるアクセスのためにデータおよびプロセッサ実行可能コードを記憶するように構成される、揮発性または不揮発性のメモリであってもよい。コンピューティングデバイス100および/またはSoC102は、様々な目的のために構成される1つまたは複数のメモリ106を含んでもよい。1つまたは複数のメモリ106は、ランダムアクセスメモリ(RAM)もしくはメインメモリ、またはキャッシュメモリなどの、揮発性メモリを含んでもよい。これらのメモリ106は、データセンサもしくはサブシステムから受信されたデータ、不揮発性メモリから要求され、様々なファクタに基づいて将来のアクセスを予想して不揮発性メモリからメモリ106にロードされるデータおよび/もしくはプロセッサ実行可能コード命令、ならびに/またはCPU104および/もしくはプロセッサ124によって生成され、不揮発性メモリには記憶されずに将来迅速にアクセスできるように一時的に記憶される中間処理データおよび/もしくはプロセッサ実行可能コード命令の限られた量を、一時的に保持するように構成されてもよい。いくつかの実施形態では、任意の数および組合せのメモリ106が、ワンタイムプログラマブルまたは読取り専用メモリを含んでもよい。
メモリ106は、SoC102のCPU104、プロセッサ124、または他のコンポーネントのうちの1つまたは複数によるアクセスのために、別のメモリ106またはメモリ114などの、別のメモリデバイスからメモリ106にロードされるデータおよびプロセッサ実行可能コードを、少なくとも一時的に記憶するように構成されてもよい。メモリ106にロードされたデータまたはプロセッサ実行可能コードは、SoC102のCPU104、プロセッサ124、または他のコンポーネントによる機能の実行に応答してロードされてもよい。機能の実行に応答してデータまたはプロセッサ実行可能コードをメモリ106にロードすることは、要求されたデータまたはプロセッサ実行可能コードがメモリ106内にないことが原因で不成功または「ミス」になるメモリ106へのメモリアクセス要求から生じる場合がある。ミスに応答して、要求されたデータまたはプロセッサ実行可能コードを他のメモリ106またはメモリ114からメモリ106にロードするために、別のメモリ106またはメモリ114へのメモリアクセス要求が行われてもよい。機能の実行に応答してデータまたはプロセッサ実行可能コードをメモリ106にロードすることは、別のメモリ106またはメモリ114へのメモリアクセス要求から生じる場合があり、データまたはプロセッサ実行可能コードは、後のアクセスのためにメモリ106にロードされてもよい。
メモリインターフェース110およびメモリ114は、コンピューティングデバイス100がデータおよびプロセッサ実行可能コードを揮発性および/または不揮発性記憶媒体に記憶し、データおよびプロセッサ実行可能コードを揮発性および/または不揮発性記憶媒体から検索することを可能にするために同時に作動してもよい。メモリ114は、メモリ114がSoC102のCPU104、プロセッサ124、または他のコンポーネントのうちの1つまたは複数によるアクセスのためにデータまたはプロセッサ実行可能コードを記憶してもよい、メモリ106の実施形態とほとんど同じように構成されてもよい。いくつかの実施形態では、不揮発性であるメモリ114は、コンピューティングデバイス100の電源が切断された後に情報を保持してもよい。電源が再び投入され、コンピューティングデバイス100が再起動すると、メモリ114上に記憶された情報は、コンピューティングデバイス100に利用可能であってもよい。いくつかの実施形態では、揮発性であるメモリ114は、コンピューティングデバイス100の電源が切断された後に情報を保持しなくてもよい。メモリインターフェース110は、メモリ114へのアクセスを制御し、SoC102のCPU104、プロセッサ124、または他のコンポーネントがメモリ114からデータを読み取り、メモリ114にデータを書き込むことを可能にしてもよい。
コンピューティングデバイス100および/またはSoC102のコンポーネントの一部または全部は、依然として様々な実施形態の機能を果たしながら、異なるように配置され、かつ/または組み合わされてもよい。コンピューティングデバイス100は、コンポーネントの各々のうちの1つに限定されなくてもよく、各コンポーネントの複数のインスタンスが、コンピューティングデバイス100の様々な構成の中に含まれてもよい。
図2は、いくつかの実施形態を実装するのに適したコンピューティングデバイス(たとえば、図1のコンピューティングデバイス100)のメモリシステム200のコンポーネントを示す。図1および図2を参照すると、メモリシステム200は、仮想メモリ202(たとえば、SoC102、CPU104、プロセッサ124上)と、メモリマップ204(たとえば、SoC102、CPU104、プロセッサ124上)と、メモリ管理ユニット(MMU)206(たとえば、SoC102、CPU104、プロセッサ124上)と、物理メモリ208(たとえば、メモリ106)とを実装するように構成されるコンポーネントを含んでもよい。
メモリ管理ユニット206は、読取りおよび/または書込みメモリアクセス要求などのメモリアクセス要求を実装するために、プロセッサ(たとえば、CPU104、プロセッサ124)による物理メモリ208へのアクセスを管理するように構成されてもよい。プロセッサは、仮想メモリ202を実装し、仮想メモリ202の仮想アドレスに基づいてコードを実行してもよい。プロセッサは、仮想メモリ202の仮想アドレスに基づいて物理メモリ208へのメモリアクセス要求を発行してもよい。メモリアクセス要求を実施するために、物理メモリ208は、メモリアクセス要求を実施する物理メモリ208の場所を識別するために物理メモリ208の物理アドレスを要求してもよい。仮想アドレスおよび物理アドレスは、同じではない場合があり、仮想アドレスは、物理メモリ208がメモリアクセス要求を実施するために物理アドレスに変換される必要がある場合がある。さらに、プロセッサは、仮想メモリアドレスを示すメモリアクセス要求の実施のために物理メモリ208からのいずれかのリターンを要求してもよい。物理メモリ208によって使用される物理アドレスは、プロセッサがメモリアクセス要求のリターンを受け入れるために仮想アドレスに変換される必要がある場合がある。
メモリ管理ユニット206は、本明細書でさらに説明するように、仮想メモリ202の仮想アドレスを物理メモリ206の物理アドレスにマップするように構成されるメモリマップ204を生成および/または維持してもよい。メモリ管理ユニット206は、物理メモリ208によるメモリアクセス要求の実施およびプロセッサによるメモリアクセス要求のリターンの受入れを可能にするために、仮想アドレスと物理アドレスとの間で変換するためにメモリマップ204を使用してもよい。
加えて、メモリ管理ユニット206は、本明細書でさらに説明するように、ページ再マッピングおよびローテーションによりASLRエントロピーを増大させる可能性があるASLR方式を実装するように構成されてもよい。いくつかの実施形態では、メモリ管理ユニット206は、サブページの粒度のシフト量だけメモリマップ204における仮想アドレスをシフトし、仮想アドレスを物理アドレスにマップするメモリマップ204のエントリを追加および/または省略してもよい。いくつかの実施形態では、メモリ管理ユニット206は、任意の数および組合せのページサイズについて、ページの仮想アドレスをページ境界に整列するためにメモリマップ204における仮想アドレスをシフトしてもよい。
図3A~図3Dは、様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示す。図1~図3Dを参照すると、サブページの粒度のシフトのメモリマッピングおよびローテーションは、仮想メモリ300(たとえば、図1のSoC102、CPU104、プロセッサ124、図2の仮想メモリ202上)および物理メモリ320(たとえば、図1のメモリ106、図2の物理メモリ208)用のメモリシステム(たとえば、メモリシステム200)を介してコンピューティングデバイス(たとえば、図1のコンピューティングデバイス100)上に実装されてもよい。
仮想メモリ300は、任意の数および組合せのページサイズの任意の数および組合せのページ302a、302b、302c、304a、304bを含んでもよい。ページ302a、302b、302c、304a、304bの仮想アドレスは、任意の数および組合せのコードサイズのコード306、308に割り振られてもよい。
物理メモリ320は、仮想メモリ300のページ302a、302b、302c、304a、304bにマップされる物理アドレス326a、326b、328aの範囲を含んでもよい。仮想アドレスが割り振られるコード306、308は、物理アドレス326a、326b、328aの範囲内の物理メモリ320にロードされ、記憶されてもよい。
図3Aは、サブページの粒度のシフトのメモリマッピングおよびローテーションを実装する前の仮想メモリ300および物理メモリ320の例示的なマッピングを示す。コード306、308に割り振られた仮想アドレスは、仮想メモリ300のページ302a、302b、304a内にあってもよい。たとえば、コード306に割り振られた仮想アドレスは、ページ302a、302b内にあってもよい。コード308に割り振られた仮想アドレスは、ページ304a内にあってもよい。ページ302a、302b、304aの仮想アドレスのいずれかの部分および組合せが、コード306、308に割り振られてもよい。
ページ302a、302b、304aの仮想アドレスは、物理アドレス326a、326b、328aの範囲内にある物理アドレスにマップされてもよい。仮想アドレスが割り振られるコード306、308は、仮想アドレスにマップされる物理アドレス326a、326b、328aの範囲内の物理アドレスにおいて物理メモリ320にロードされ、記憶されてもよい。たとえば、ページ302aの仮想アドレスは、物理アドレス326aの範囲の物理アドレスにマップされてもよい。ページ302aの仮想アドレスが割り振られてもよいコード306の部分が、物理アドレス326aの範囲の物理アドレスにロードされ、記憶されてもよい。ページ302bの仮想アドレスは、物理アドレス326bの範囲の物理アドレスにマップされてもよい。ページ302bの仮想アドレスが割り振られてもよいコード306の部分が、物理アドレス326bの範囲の物理アドレスにロードされ、記憶されてもよい。ページ304aの仮想アドレスは、物理アドレス328aの範囲の物理アドレスにマップされてもよい。ページ304aの仮想アドレスが割り振られてもよいコード308は、物理アドレス328aの範囲の物理アドレスにロードされ、記憶されてもよい。コード306、308は、物理アドレス326a、326b、328aの範囲の物理アドレスのいずれかの部分および組合せにロードされ、記憶されてもよい。
図3Bは、サブページの粒度のシフトのメモリマッピングおよびローテーションを実装中の仮想メモリ300の一例を示す。サブページの粒度のシフトが、仮想メモリ300用のページサイズの倍数ではない、仮想アドレスのサブページの粒度のシフト量だけ、コード306、308に割り振られる仮想アドレスをシフトしてもよい。たとえば、サブページの粒度のシフトが、仮想メモリ用の最小ページサイズの倍数ではない仮想アドレスの任意の量だけの仮想メモリ300における仮想アドレスのシフトであってもよい。たとえば、サブページの粒度のシフトの仮想アドレスの量は、ページよりも大きいまたは小さい場合がある。したがって、コード306、308に割り振られたサブページの粒度にシフトされた仮想アドレスは、仮想メモリ300におけるページ302a、302b、304aのための仮想アドレス境界と整列しない場合がある。
サブページの粒度のシフトは、ページ302a、302b、304aの境界を越えてコード306、308に割り振られる仮想アドレスをシフトさせてもよい。ページの最下位アドレス領域については、領域のページと同じサイズの、それらに隣接するページが、ページの境界を越えてシフトされた仮想アドレスに対応するために割り振られてもよい。たとえば、ページ302a、302bを含む領域については、ページ302a、302bと同じサイズの、それらに隣接するページ302cが、ページ302a、302bの境界を越えてシフトされた仮想アドレスに対応するために割り振られてもよい。コード306に割り振られた仮想アドレスが、ページ302a、302b、302cのいずれかを完全に越えてシフトされるいくつかの実施形態では、ページ302a、302b、302cの仮想アドレスは、ページの境界との整列を維持しながら、対応してシフトされてもよい。いくつかの実施形態では、ページ302a、302b、302cの仮想アドレスは、仮想アドレスのサブページの粒度のシフト量よりも小さい、最も近い倍数のページサイズに等しい仮想アドレスの量だけシフトされてもよい。ページ302cは、コード306に割り振られたシフトされた仮想アドレスがページ302a、302b、302cによって包含される可能性があるように割り振られてもよい。いくつかの実施形態では、ページ302cは、ページ302cの割り振られた仮想アドレスにコード306を割り当てる前に割り振られてもよく、空のアドレス空間310aを含んでもよい。
ページの上位アドレス領域は、下位アドレスの領域からの異なるサイズのページを有してもよい。同様に、ページの下位アドレスの領域に対して、ページの上位アドレス領域については、領域のページと同じサイズの、それらに隣接するページが、ページの境界を越えてシフトされた仮想アドレスに対応するために割り振られてもよい。たとえば、ページ304aを含む領域については、ページ304aと同じサイズの、それに隣接するページ304bが、ページ304aの境界を越えてシフトされた仮想アドレスに対応するために割り振られてもよい。いくつかの実施形態では、ページ304bは、ページ304bの仮想アドレスにコード308を割り当てる前に割り振られてもよく、空のアドレス空間312aを含んでもよい。
いくつかの実施形態では、下位アドレス領域のページの仮想アドレスのシフトはまた、上位アドレス領域のページの仮想アドレスに適用されてもよい。いくつかの実施形態では、上位アドレス領域のページの仮想アドレスのシフトは、下位アドレス領域へのページの追加を考慮するための仮想アドレスの量を含んでもよい。シフトは、上位アドレス領域のページの仮想アドレスが、上位アドレス領域のためのサイズのページの仮想アドレスページ境界と整列されないようにしてもよい。上位アドレス領域のページの仮想アドレスをサイズページのページ境界の仮想アドレスに整列させるために、仮想アドレスホールが仮想メモリ300に導入されてもよい。仮想アドレスホールは、上位アドレス領域のページの仮想アドレスをサイズページのページ境界の仮想アドレスに整列させる可能性がある仮想アドレスの追加量だけ、上位アドレス領域のページの仮想アドレスをシフトすることによって導入されてもよい。仮想アドレスの追加量は、ページの仮想アドレスのシフト量および/または下位アドレス領域の追加ページの仮想アドレスの量に加えるものであってもよい。たとえば、ページ304aは、独立した領域であってもよく、ページ302a、302bの各々よりも大きいサイズであってもよい。ページ304bは、ページ304aを有する上位アドレス領域に追加されてもよい。ページ304a、304bを含む領域の仮想アドレスは、下位アドレス領域のページの仮想アドレスがシフトされる量だけシフトされてもよい。ページ304a、304bを含む領域の仮想アドレスは、別のページの追加に対応するためにシフトされてもよい。しかしながら、シフトのいずれの構築も、ページ304a、304bをページ304a、304bのサイズページのページ境界と整列させない可能性がある。ページ304a、304bをページ304a、304bのサイズページのページ境界と整列させるために、ページ304a、304bを含む領域の仮想アドレスは、ページ304a、304bをページ304a、304bのサイズページのためのページ境界と整列させる可能性がある追加量だけシフトされてもよい。
図3Cは、サブページの粒度のシフトのメモリマッピングおよびローテーションを実装中の仮想メモリ300の一例を示す。サブページの粒度のシフトは、コード306、308に割り振られた仮想アドレスを、仮想アドレスのサブページの粒度のシフト量だけシフトしてもよい。仮想アドレスのサブページの粒度のシフト量は、仮想メモリ300のすべての領域に対して同じであってもよい。最下位アドレス領域ページでは、ページの仮想アドレスは、仮想アドレスのサブページの粒度のシフト量だけシフトされてもよい。たとえば、ページ302a、302bを有する領域の仮想アドレスは、コード306に割り当てられた仮想アドレスがページ302a、302b、302cにまたがり、コード306、コード314の一部分を追加ページ302に割り当てるように、仮想アドレスのサブページの粒度のシフト量だけシフトされてもよい。サブページの粒度のシフトは、ページ302a内の領域の最下位アドレスに空のアドレス空間310bを作成し、ページ302c内の領域の最上位アドレスで空のアドレス空間310cの量を、仮想アドレスのサブページの粒度のシフト量だけ減らしてもよい。
ページの上位アドレス領域では、ページ302aなどの下位アドレスの追加ページに対応するために、および上位アドレス領域のページの仮想アドレスをサイズページのためのページ境界の仮想アドレスに整列させるためにシフトされた、ページの仮想アドレスは、仮想アドレスのサブページの粒度のシフト量だけシフトされてもよい。たとえば、図3Bを参照して説明したようにページ304aを有する領域の仮想アドレスは、コード308に割り当てられた仮想アドレスがページ304a、304bにまたがり、コード308、コード316の一部分を追加ページ304bに割り当てるように、仮想アドレスのサブページの粒度のシフト量だけシフトされてもよい。サブページの粒度のシフトは、ページ304a内の領域の最下位アドレスに空のアドレス空間312bを作成し、ページ304b内の領域の最上位アドレスで空のアドレス空間312cの量を、仮想アドレスのサブページの粒度のシフト量だけ減らしてもよい。
図3Dは、サブページの粒度のシフトのメモリマッピングおよびローテーションを実装中の仮想メモリ300および物理メモリ320の一例を示す。仮想メモリ300のサブページの粒度にシフトされた仮想アドレスは、物理メモリ320の物理アドレスに再マップされてもよい。元のページ302a、302b、304aは、それらの仮想アドレスがシフトされるかどうかにかかわらず、サブページの粒度のシフトを実施する前と同じ物理アドレス326a、326b、328aの範囲にマップされてもよい。アドレスページ302c、304bは、同じ領域の最下位アドレスページ302a、304aと同じ物理アドレス326a、328aの範囲にマップされてもよい。
コード306、308のシフトされた仮想アドレスは、コードのローテーションが物理メモリ320において実装されるようにマップされてもよい。コード306、308のシフトされた仮想アドレスは、コード306、308の仮想アドレスが元のページ302a、302b、304a内でシフトされるのと同じアドレスの量だけコード306、308の物理アドレスがシフトされるようにマップされてもよい。コード314、316のシフトされた仮想アドレスは、コード314、316の物理アドレスが、コード306、308の仮想アドレスが元のページ302a、302b、304a内でシフトされるのと同じアドレスの量だけコード306、308の物理アドレスをシフトすることによって作成された物理アドレス326a、326b、328aの範囲の空の部分を満たすようにマップされてもよい。したがって、コード314、316は、コード314、316がサブページの粒度のシフトのメモリマッピングおよびローテーションの実装なしに記憶される物理アドレス326a、326b、328aの範囲の上位アドレスよりも、物理アドレス326a、326b、328aの数範囲の下位のアドレスの物理メモリ320にロードされ、記憶されるようにローテートされる。
図3A~図3Dに示す例は、説明を明瞭かつ簡単にするために使用され、すべての考えられる実施形態を示さない。これらの例は、請求項および明細書の範囲を限定しない。例は、領域の数およびサイズ、ページの数およびサイズ、完全におよび部分的に割り振られたページなど、任意の数および組合せのページに割り振られるコードの量、物理アドレスの範囲の数およびサイズ、サブページの粒度のシフトのサイズなどを限定しない。
図4A~図4Bは、様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションの一例を示す。図1~図4Bを参照すると、サブページの粒度のシフトのメモリマッピングおよびローテーションは、任意の数および組合せのメモリマップ400a、400b(たとえば、図2のメモリマップ204)を使用するメモリシステム(たとえば、メモリシステム200)を介してコンピューティングデバイス(たとえば、図1のコンピューティングデバイス100)上に実装されてもよい。図4Aは、サブページの粒度のシフトのメモリマッピングを実装する前のメモリマップを示す例示的なメモリマップ400aを示す。図4Bは、サブページの粒度のシフトのメモリマッピングを実装したメモリマップを示す例示的なメモリマップ400bを示す。
メモリマップ400aは、2つの領域ページ、すなわちページの最下位アドレス領域と、ページの上位アドレス領域とを含んでもよい。ページの最下位アドレス領域は、各々4Kのサイズの4つのページを含んでもよい。ページの上位アドレス領域は、16Kのサイズの1つのページを含んでもよい。ページの各々が、ページサイズおよびページに対応する仮想アドレスを含んでもよく、異なるページの仮想アドレスが重ならないようにする。ページのすべての仮想アドレスは、連続していてもよい。ページの仮想アドレスは、ページと同じサイズの物理アドレスの対応する範囲にマップされてもよい。言い換えれば、4Kサイズのページは、物理アドレスの4Kサイズの範囲にマップされてもよく、16Kサイズのページは、物理アドレスの16Kサイズの範囲にマップされてもよい。
メモリマップ400bは、数サブページの粒度のシフトのメモリマッピングを実装することによってメモリマップ400aから生成されてもよい。図4Bに示した例では、メモリマップ400bは、10Kの仮想アドレスなど、8Kの仮想アドレスよりも大きく12Kの仮想アドレスよりも小さいサイズのサブページの粒度のシフトを使用して生成されてもよい。
10Kの仮想アドレスのサブページの粒度のシフトに対応するために、4Kサイズのページが、ページの最下位アドレス領域に追加されてもよい。この追加のページは、ページの最下位アドレス領域の元の4ページの境界を越えてシフトされた仮想アドレスを包含してもよい。16Kサイズのページが、ページの上位アドレス領域に追加されてもよい。この追加のページは、ページの上位アドレス領域の元の1ページの境界を越えてシフトされた仮想アドレスを包含してもよい。
ページの最下位アドレス領域の4Kサイズのページの仮想アドレスは、依然として4Kサイズのページ境界と整列しながら、10Kの仮想アドレスサブページの粒度のシフトによってシフトされた元の4Kサイズのページの仮想アドレスのすべてを包含するようにシフトされてもよい。たとえば、8Kの仮想アドレスシフトは、ページの最下位アドレス領域の5つの4Kサイズのページが、依然として4Kサイズのページ境界と整列しながら、10Kの仮想アドレスサブページの粒度のシフトによってシフトされた元の4Kサイズのページの仮想アドレスの数すべてを包含することを可能にする。
ページの上位アドレス領域の16Kサイズのページの仮想アドレスは、ページの最下位アドレス領域に重ならず、依然として16Kサイズのページ境界と整列しながら、10Kの仮想アドレスサブページの粒度のシフトによってシフトされた元の16Kサイズのページの仮想アドレスのすべてを包含するようにシフトされてもよい。たとえば、8Kの仮想アドレスシフトは、ページの最下位アドレス領域の2つの16Kサイズのページが、10Kの仮想アドレスサブページの粒度のシフトによってシフトされた元の16Kサイズのページの仮想アドレスの数すべてを包含することを可能にする。しかしながら、8Kの仮想アドレスシフトは、ページの最下位アドレス領域の追加された第5のページのために、ページの最下位アドレス領域に重なるのを回避するには不十分である。したがって、ページの上位アドレス領域の仮想アドレスの仮想アドレスシフトは、ページの最下位アドレス領域の追加された第5のページのサイズ、4Kの仮想アドレスを追加として含んでもよい。しかしながら、12Kの仮想アドレスシフト(8K+4K)が、ページの上位アドレス領域の2つの16Kのページを16Kのページ境界と整列させない可能性がある。したがって、ページの上位アドレス領域の仮想アドレスの仮想アドレスシフトは、ページの上位アドレス領域のページをページサイズのページ境界と整列させるための仮想アドレスの量を追加として含んでもよい。ページの上位アドレス領域の仮想アドレスの仮想アドレスシフトは、16K(8K+4K+4K)であってもよく、ページの最下位アドレス領域に重ならず、依然として16Kサイズのページ境界と整列しながら、10Kの仮想アドレスサブページの粒度のシフトによってシフトされた元の16Kサイズのページの仮想アドレスのすべてを包含するようにする。
領域の元のページのシフトされた仮想アドレスは、シフトされる前と同じ物理アドレスの範囲にマップされてもよい。追加された4Kのページは、4Kサイズのページの領域の最下位アドレスページと同じ物理アドレスの範囲にマップされてもよい。追加された16Kのページは、16Kサイズのページの領域の最下位アドレスページと同じ物理アドレスの範囲にマップされてもよい。
図4Aおよび図4Bに示した例は、説明を明瞭かつ容易にするために使用され、すべての考えられる実施形態を示さない。これらの例は、請求項および明細書の範囲を限定することを目的としていない。例は、領域の数およびサイズ、ページの数およびサイズ、完全におよび部分的に割り振られたページなど、任意の数および組合せのページに割り振られるコードの量、物理アドレスの範囲の数およびサイズ、サブページの粒度のシフトのサイズなどを限定しない。
図5は、様々な実施形態を実装するのに適したサブページの粒度のシフトのメモリマッピングおよびローテーションシステム500フローの一例を示す。図1~図5を参照すると、サブページの粒度のシフトのメモリマッピングおよびローテーションシステム500は、コンパイラ504、リンカ510、およびローダ516を実行するプロセッサ(たとえば、CPU104、プロセッサ124)、ならびに物理メモリによってコンピューティングデバイス(たとえば、コンピューティングデバイス100)上に実装されてもよい。
ソースコード502が、サブページの粒度のシフトのメモリマッピングおよびローテーションシステム500によって受け取られてもよい。コンパイラは、ソースコード502からプログラムカウンタ(PC)相対コード508を生成してもよい。コンパイラ504はまた、メモリマップ506(たとえば、メモリマップ204、メモリ400b)を生成してもよい。メモリマップ506は、仮想メモリ(たとえば、図2の仮想メモリ202、仮想メモリ300)の仮想アドレス、および物理メモリ522(たとえば、メモリ106、物理メモリ208、物理メモリ320)の物理アドレスをマップするように構成されてもよい。メモリマップ506は、サブページの粒度のシフトのメモリマッピングに対応するようにして生成されてもよい。たとえば、メモリマップ506は、PC相対コード508を実行するために一般的に使用されるメモリマップ(たとえば、メモリマップ400a)と比較してメモリマップ506の領域ごとに余分のエントリ(たとえば、ページの仮想アドレスの物理アドレスへのマッピング)を追加して生成されてもよい。別の例では、領域のページの仮想アドレスが、領域ごとに余分のエントリを追加するためにシフトされてもよく、対応するサイズページのページ境界と整列されなくてもよい。メモリマップ506は、領域のページを領域のサイズページのページ境界に整列させるために、領域のページの任意の数および組合せの仮想アドレスをシフトして生成されてもよい。
リンカ510は、メモリマップ506およびPC相対コード508を入力として受け取ってもよい。リンカ510は、サブページの粒度のシフト調整ポインタを有するバイナリコード514を生成するためにメモリマップ506およびPC相対コード508から仮想アドレスにおけるシフトを使用してもよい。リンカは、PC相対命令間で正しくリンクするために、メモリマップ506の領域固有のシフトを使用してPC相対オフセットを調整してもよい。リンカは、調整されたPC相対コードをサブページの粒度のシフト有効ポインタを有するバイナリコード514に変換することができ、これは、メモリマップ506の仮想アドレスに適用された仮想アドレスのサブページの粒度のシフト量の値にかかわらず機能するように構成されてもよい。
ローダ516は、メモリマップ506およびサブページの粒度のシフト有効ポインタを有するバイナリコード514を入力として受け取ってもよい。ローダ516は、メモリマップ506の仮想アドレスにサブページの粒度のシフトを適用してもよい。いくつかの実施形態では、サブページの粒度のシフトは、乱数生成器アルゴリズムなどによって、あらかじめ決定されても、またはアルゴリズム的に導出されてもよい。メモリマップ506の仮想アドレスへのサブページの粒度のシフトは、仮想アドレスのサブページの粒度のシフト量だけメモリマップ506の仮想アドレスをシフトし、サブページの粒度のシフトのメモリマップ518(たとえば、メモリマップ204、メモリ400b)を生成してもよい。ローダ516は、サブページの粒度のシフト有効ポインタを有するバイナリコード514の実行に必要とされるコードを、メモリ(たとえば、メモリ106、114)から検索してもよい。ローダ516は、コードを物理メモリ522にロードし記憶するためにサブページの粒度のシフトのメモリマップ518を使用してもよい。たとえば、ローダ516は、サブページの粒度のシフトのメモリマップ518の仮想メモリから物理メモリへのマッピングに従った物理メモリ522におけるコードのサブページの粒度のシフトのメモリローテーションを実装してもよい。ローダは、メモリから検索されたコードをシフトおよびローテートさせ、サブページの粒度のシフト有効ポインタを有するローテートされたバイナリコード520を生成してもよい。ローダ516は、サブページの粒度のシフト有効ポインタを有するローテートされたバイナリコード520を物理メモリ522にロードし、記憶してもよい。
図6は、一実施形態によるサブページの粒度のシフトのメモリマッピングのための方法600を示す。図1~図6を参照すると、方法600は、コンピューティングデバイス(たとえば、コンピューティングデバイス100)に、ハードウェア(たとえば、SoC102、CPU104、メモリ106、プロセッサ124、メモリ管理ユニット206)に、プロセッサで実行するソフトウェア(たとえば、メモリ管理ユニット206、コンパイラ504、リンカ510、ローダ516)に、または他の個々のコンポーネント、および様々なメモリ/キャッシュコントローラを含むソフトウェア構成プロセッサと専用ハードウェアの組合せ(たとえば、メモリシステム200、メモリ管理ユニット206、サブページの粒度のシフトのメモリマッピングおよびローテーションシステム500)に、実装されてもよい。様々な実施形態において可能な代替構成を包含するために、方法600を実装するハードウェアは、本明細書では「メモリ制御デバイス」と呼ばれる。
ブロック602において、メモリ制御デバイスは、サブページの粒度のシフト量を設定してもよい。いくつかの実施形態では、任意の数および組合せのサブページの粒度のシフト量は、乱数生成器アルゴリズムなどによって、あらかじめ決定されても、またはアルゴリズム的に導出されてもよい。いくつかの実施形態では、サブページの粒度のシフト量が、仮想アドレス空間または仮想メモリ(たとえば、仮想メモリ202、仮想メモリ300)の仮想アドレスの量であってもよい。いくつかの実施形態では、ブロック602においてサブページの粒度のシフト量を設定するメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはローダであってもよい。
ブロック604において、メモリ制御デバイスは、サブページの粒度のシフトのメモリマップ(たとえば、メモリマップ204、たとえば、メモリマップ400b、サブページの粒度のシフトのメモリマップ518)を生成してもよい。メモリ制御デバイスは、サブページの粒度のシフトをメモリマップ(たとえば、メモリマップ400b、メモリマップ506)に適用してもよい。サブページの粒度のシフトをメモリマップに適用して、メモリマップにおいてコードに割り当てられる仮想アドレスをサブページの粒度のシフト量だけシフトさせてもよい。サブページの粒度のシフトが適用されるメモリマップは、図7を参照して説明する方法700において生成されるメモリマップであってもよい。いくつかの実施形態では、ブロック604においてサブページの粒度のシフトのメモリマップを生成するメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはローダであってもよい。
ブロック606において、メモリ制御デバイスは、サブページの粒度のシフトのメモリマップに従って物理メモリ(たとえば、メモリ106、物理メモリ208、物理メモリ320、物理メモリ522)においてコード(たとえば、コード306、308、314、316)をローテートさせてもよい。メモリ制御デバイスは、コード(たとえば、サブページの粒度のシフト有効ポインタを有するバイナリコード514)の実行に従って、メモリ(たとえば、メモリ106、114)から検索されたコードをロードおよび記憶することによって、物理メモリ内のコードをローテートさせてもよい。メモリから検索されたコードは、図9を参照してさらに説明する方法900におけるメモリマップへのサブページの粒度のシフトのマッピングに従って物理メモリにロードおよび記憶されてもよい。いくつかの実施形態では、ブロック606においてサブページの粒度のシフトのメモリマップに従って物理メモリにおけるコードをローテートさせるメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはローダであってもよい。
図7は、一実施形態によるメモリのサブページの粒度のシフトのメモリマッピングのための方法を示す。図1~図7を参照すると、方法700は、コンピューティングデバイス(たとえば、コンピューティングデバイス100)に、ハードウェア(たとえば、SoC102、CPU104、メモリ106、プロセッサ124、メモリ管理ユニット206)に、プロセッサで実行するソフトウェア(たとえば、メモリ管理ユニット206、コンパイラ504、リンカ510、ローダ516)に、または他の個々のコンポーネント、および様々なメモリ/キャッシュコントローラを含むソフトウェア構成プロセッサと専用ハードウェアの組合せ(メモリシステム200、メモリ管理ユニット206、サブページの粒度のシフトのメモリマッピングおよびローテーションシステム500)に、実装されてもよい。様々な実施形態において可能な代替構成を包含するために、方法700を実装するハードウェアは、本明細書では「メモリ制御デバイス」と呼ばれる。
ブロック702において、メモリ制御デバイスは、メモリマップ(たとえば、メモリマップ400a)の領域にメモリマップエントリを追加してもよい。メモリマップは、同じサイズのページのための仮想アドレスの領域を含んでもよい。言い換えれば、各領域は、ページの単一サイズのための仮想アドレスを含んでもよい。メモリマップは、受け取られたソースコード(たとえば、ソースコード502)に基づいて、いわば、ソースコードを実行するために物理メモリ(たとえば、メモリ106、物理メモリ208、物理メモリ320、物理メモリ522)にマップされた仮想メモリ(たとえば、仮想メモリ202、仮想メモリ300)を使用するために、生成されてもよい。メモリ制御デバイスは、領域に対する適切なページサイズのメモリマップの各領域にページに対するエントリを追加してもよい。領域に対するエントリは、領域に隣接するページの仮想アドレスを含んでもよい。領域に対するエントリのページのための仮想アドレスは、領域に対するエントリの最下位仮想アドレスページの物理アドレスの同じ範囲にマップされてもよい。いくつかの実施形態では、ブロック702においてメモリマップの領域にメモリマップエントリを追加するメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはコンパイラであってもよい。
ブロック704において、メモリ制御デバイスは、メモリマップへの1つまたは複数の追加エントリに対応するためにメモリマップのページの仮想アドレス範囲をシフトしてもよい。メモリマップの領域にエントリを追加すると、追加されたエントリの仮想アドレスがメモリマップの別の領域の仮想アドレスと重なることがある。メモリ制御デバイスは、メモリマップの領域間での重複する仮想アドレスを避けるために、メモリマップの任意の数および組合せの領域をシフトさせてもよい。いくつかの実施形態では、ブロック704においてメモリマップへの1つまたは複数の追加エントリに対応するためにメモリマップのページの仮想アドレス範囲をシフトさせるメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはコンパイラであってもよい。
決定ブロック706では、メモリ制御デバイスは、領域内のページの仮想アドレス範囲が対応するページサイズのページ境界に整列するかどうかを判定してもよい。メモリマップの異なる領域は、異なるページサイズを有してもよく、領域のページは、様々なソフトウェア、ファームウェア、および/またはハードウェアによって認識されたページサイズの境界と整列してもよい。ブロック704におけるメモリマップへの1つまたは複数の追加エントリに対応するためにメモリマップのページの仮想アドレス範囲をシフトした後の機能を維持するには、メモリ制御デバイスは、領域内のページの仮想アドレス範囲を、対応するページサイズのページ境界に整列させることを確実にしてもよい。たとえば、メモリ制御デバイスは、領域および/またはページの仮想アドレスを、対応するページサイズの既知のページ境界と比較してもよい。別の例では、メモリ制御デバイスは、領域および/またはページの仮想アドレスを、複数の既知の、またはブロック704のシフトの前のページ境界などの、対応するページサイズの計算されたページ境界と比較してもよい。いくつかの実施形態では、領域内のページの仮想アドレス範囲が、決定ブロック706において対応するページサイズのページ境界に整列するかどうかを判定するメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはコンパイラであってもよい。
領域内のページの仮想アドレス範囲が、対応するページサイズのページ境界に整列しないと決定すること(すなわち、決定ブロック706="No")に応じて、メモリ制御デバイスは、ブロック708において対応するページサイズのページ境界に仮想アドレス範囲を整列させる量だけ、領域内のページの仮想アドレス範囲をシフトしてもよい。決定ブロック706の比較は、領域内のページの仮想アドレス範囲が対応するページサイズのページ境界に整列しない量をもたらす場合がある。メモリ制御デバイスは、対応するページサイズのページ境界に仮想アドレス範囲を整列させる量だけ、領域内のページの仮想アドレス範囲をシフトしてもよい。いくつかの実施形態では、領域内のページの仮想アドレス範囲を、ブロック708において対応するページサイズのページ境界に仮想アドレス範囲を整列させる量だけシフトするメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはコンパイラであってもよい。
いくつかの実施形態では、決定ブロック706およびブロック708は、メモリマップの連続領域に再帰的に実装されてもよい。たとえば、メモリマップの各連続領域は、前の領域がシフトされるとき、シフトされてもよい。前の領域が対応するページサイズの境界に整列されると、メモリ制御デバイスは、連続領域のために決定ブロック706およびブロック708を実装してもよい。決定ブロック706およびブロック708の再帰的実装は、メモリマップの最後の領域が対応するページサイズの境界に整列されるまで続いてもよい。
領域内のページの仮想アドレス範囲が、対応するページサイズのページ境界に整列すると決定すること(すなわち、決定ブロック706="Yes")、または以下の、ブロック708において対応するページサイズのページ境界に仮想アドレス範囲を整列させる量だけ領域内のページの仮想アドレス範囲をシフトすることに応じて、メモリ制御デバイスは、ブロック710においてページと同じサイズの物理アドレスの範囲に、領域内のページのシフトされた仮想アドレス範囲をマップしてもよい。領域内のページのシフトされた仮想アドレス範囲を、ページと同じサイズの物理アドレスの範囲にマップすることは、物理アドレスの同じ範囲に領域内の最下位仮想アドレスページおよび最上位仮想アドレスページをマップすることを含んでもよい。いくつかの実施形態では、領域内のページのシフトされた仮想アドレス範囲を、ブロック710においてページと同じサイズの物理アドレスの範囲にマップするメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはコンパイラであってもよい。
図8は、一実施形態によるメモリローテーションのための方法800を示す。図1~図8を参照すると、方法800は、コンピューティングデバイス(たとえば、コンピューティングデバイス100)に、ハードウェア(たとえば、SoC102、CPU104、メモリ106、プロセッサ124、メモリ管理ユニット206)に、プロセッサで実行するソフトウェア(たとえば、メモリ管理ユニット206、コンパイラ504、リンカ510、ローダ516)に、または他の個々のコンポーネント、および様々なメモリ/キャッシュコントローラを含む、ソフトウェア構成プロセッサと専用ハードウェアの組合せ(メモリシステム200、メモリ管理ユニット206、サブページの粒度のシフトのメモリマッピングおよびローテーションシステム500)に、実装されてもよい。様々な実施形態において可能な代替構成を包含するために、方法800を実装するハードウェアは、本明細書では「メモリ制御デバイス」と呼ばれる。
ブロック802において、メモリ制御デバイスは、ソースコード(たとえば、ソースコード502)からPC相対コード(たとえば、PC相対コード508)を生成してもよい。いくつかの実施形態では、ブロック802においてソースコードからPC相対コードを生成するメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはコンパイラであってもよい。
ブロック804において、メモリ制御デバイスは、メモリマップ(たとえば、メモリマップ400b、メモリマップ506)を使用してサブページの粒度のシフト有効ポインタを有するバイナリコード(たとえば、サブページの粒度のシフト調整ポインタを有するバイナリコード514)を生成してもよい。メモリマップは、図7を参照して説明した方法700において生成されるメモリマップであってもよい。メモリ制御デバイスは、メモリマップおよびブロック802において生成されるPC相対コードを入力として受け取ってもよい。メモリ制御デバイスは、サブページの粒度のシフト調整ポインタを有するバイナリコードを生成するために、メモリマップおよびPC相対コードからの仮想アドレスにおいてシフトを使用してもよい。メモリ制御デバイスは、PC相対命令間で正しくリンクするために、メモリマップの領域固有のシフトを使用してPC相対オフセットを調整してもよい。メモリ制御デバイスは、調整されたPC相対コードをサブページの粒度のシフト有効ポインタを有するバイナリコードに変換してもよく、これは、図6を参照して説明した方法600のブロック604においてメモリマップの仮想アドレスに適用された仮想アドレスのサブページの粒度のシフト量の値にかかわらず機能するように構成されてもよい。いくつかの実施形態では、ブロック804においてメモリマップを使用してサブページの粒度のシフト有効ポインタを有するバイナリコードを生成するメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはリンカであってもよい。
ブロック806において、メモリ制御デバイスは、サブページの粒度のシフト有効ポインタを有するローテートされたバイナリコード(たとえば、サブページの粒度のシフト有効ポインタを有するローテートされたバイナリコード520)を生成してもよい。メモリ制御デバイスは、メモリマップおよびブロック804において生成されたサブページの粒度のシフト有効ポインタを有するバイナリコードを入力として受け取ってもよい。メモリ制御デバイスは、図6を参照して説明した方法600のブロック604の動作と同様に、サブページの粒度のシフトのメモリマップ(たとえば、メモリマップ204、メモリマップ400b、サブページの粒度のシフトのメモリマップ518)を生成してもよい。メモリ制御デバイスは、サブページの粒度のシフト有効ポインタを有するバイナリコードの実行に必要とされるコードを、メモリ(たとえば、メモリ106、114)から検索してもよい。メモリ制御デバイスは、コードを物理メモリ(たとえば、メモリ106、物理メモリ208、物理メモリ320、物理メモリ522)にロードおよび記憶するために、サブページの粒度のシフトのメモリマップを使用してもよい。たとえば、メモリ制御デバイスは、図6を参照して説明した方法600のブロック606、および図9を参照して説明する方法900と同様に、サブページの粒度のシフトのメモリマップの仮想メモリから物理メモリへのマッピングに従って、物理メモリにおいてコードのサブページの粒度のシフトのメモリローテーションを実装してもよい。いくつかの実施形態では、ブロック806においてサブページの粒度のシフト有効ポインタを有するローテートされたバイナリコードを生成するメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはローダであってもよい。
図9は、一実施形態による説明したメモリローテーションのための方法900を示す。図1~図9を参照すると、方法900は、コンピューティングデバイス(たとえば、コンピューティングデバイス100)に、ハードウェア(たとえば、SoC102、CPU104、メモリ106、プロセッサ124、メモリ管理ユニット206)に、プロセッサで実行するソフトウェア(たとえば、メモリ管理ユニット206、コンパイラ504、リンカ510、ローダ516)に、または他の個々のコンポーネント、および様々なメモリ/キャッシュコントローラを含むソフトウェア構成プロセッサと専用ハードウェアの組合せ(メモリシステム200、メモリ管理ユニット206、サブページの粒度のシフトのメモリマッピングおよびローテーションシステム500)に、実装されてもよい。様々な実施形態において可能な代替構成を包含するために、方法900を実装するハードウェアは、本明細書では「メモリ制御デバイス」と呼ばれる。
ブロック902において、メモリ制御デバイスは、サブページの粒度のシフトのメモリマップ(たとえば、メモリマップ204、メモリマップ400b、サブページの粒度のシフトのメモリマップ518)のマッピングに従って、領域の元のページの仮想アドレスのコードを物理アドレスにロードしてもよい。メモリ制御デバイスは、図8を参照して説明した方法800のブロック806において生成されたような、サブページの粒度のシフト有効ポインタを有するローテートされたバイナリコード(たとえば、サブページの粒度のシフト有効ポインタを有するローテートされたバイナリコード520)について、サブページの粒度のシフトのメモリマップのマッピングを解釈してもよい。たとえば、メモリ制御デバイスは、図7を参照して説明した方法700のブロック702において領域に追加されるページ以外の領域のページの仮想アドレスから物理アドレスへのマッピングを解釈してもよい。ページは、連続し、増加する物理アドレスにシフトされ、マップされる仮想アドレスを有してもよい。元のページの仮想アドレスがマップされる物理アドレスは、サブページの粒度のシフトのアドレスの量またはアドレス空間だけシフトされてもよい。ブロック902においてサブページの粒度のシフトのメモリマップのマッピングに従って領域の元のページの仮想アドレスのコードを物理アドレスにロードするメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはローダであってもよい。
ブロック904において、メモリ制御デバイスは、サブページの粒度のシフトのメモリマップのマッピングに従って、領域の追加されたページの仮想アドレスのコードを物理アドレスにロードする。メモリ制御デバイスは、サブページの粒度のシフト有効ポインタを有するローテートされたバイナリコードについて、サブページの粒度のシフトのメモリマップのマッピングをさらに解釈してもよい。たとえば、メモリ制御デバイスは、図7を参照して説明した方法700のブロック702における領域の追加されたページの仮想アドレスから物理アドレスへのマッピングを解釈してもよい。ページは、領域の最下位仮想アドレスページの物理アドレスに重なる物理アドレスにシフトされ、マップされる仮想アドレスを有してもよい。追加されたページの仮想アドレスがマップされる物理アドレスは、サブページの粒度のシフトのアドレスの量またはアドレス空間だけの物理アドレスのシフトによって空にしておかれる物理アドレスであってもよい。ブロック904においてサブページの粒度のシフトのメモリマップのマッピングに従って領域の追加されたページの仮想アドレスのコードを物理アドレスにロードするメモリ制御デバイスは、プロセッサ、CPU、メモリ管理ユニット、および/またはローダであってもよい。
(限定はしないが、図1~図9を参照して上記で説明した実施形態を含む)様々な実施形態によるシステムは、モバイルコンピューティングデバイスを含む多種多様なコンピューティングシステムにおいて実装されてもよく、様々な実施形態とともに使用するのに適したモバイルコンピューティングデバイスの一例が図10に示されている。モバイルコンピューティングデバイス1000は、タッチスクリーンコントローラ1004と内部メモリ1006とに結合されたプロセッサ1002を含んでもよい。プロセッサ1002は、汎用または特定の処理タスクに指定された1つまたは複数のマルチコア集積回路であってもよい。内部メモリ1006は、揮発性メモリまたは不揮発性メモリであってよく、また、セキュアメモリおよび/もしくは暗号化メモリまたは非セキュアメモリおよび/もしくは非暗号化メモリ、あるいはそれらの任意の組合せであってもよい。活用されてもよいメモリタイプの例には、限定はしないが、DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM、および埋め込みDRAMが含まれる。タッチスクリーンコントローラ1004およびプロセッサ1002はまた、抵抗感知タッチスクリーン、容量感知タッチスクリーン、赤外線感知タッチスクリーンなどのタッチスクリーンパネル1012に結合されてもよい。さらに、モバイルコンピューティングデバイス1000のディスプレイは、タッチスクリーン機能を有する必要がない。
モバイルコンピューティングデバイス1000は、互いに結合され、かつ/またはプロセッサ1002に結合された、通信を送信および受信するための1つまたは複数の無線信号トランシーバ1008(たとえば、Peanut、Bluetooth、ZigBee、Wi-Fi、RF無線など)およびアンテナ1010を有する場合がある。トランシーバ1008およびアンテナ1010は、様々なワイヤレス送信プロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用されてもよい。モバイルコンピューティングデバイス1000は、セルラーネットワークを経由した通信を可能にするとともにプロセッサに結合されているセルラーネットワークワイヤレスモデムチップ1016を含んでもよい。
モバイルコンピューティングデバイス1000は、プロセッサ1002に結合された周辺デバイス接続インターフェース1018を含んでもよい。周辺デバイス接続インターフェース1018は、1つのタイプの接続を受け入れるように単独で構成されてもよく、またはユニバーサルシリアルバス(USB)、FireWire、Thunderbolt、もしくはPCIeなどの、一般的もしくはプロプライエタリな様々なタイプの物理接続および通信接続を受け入れるように構成されてもよい。周辺デバイス接続インターフェース1018はまた、同様に構成される周辺デバイス接続ポート(図示せず)に結合されてもよい。
モバイルコンピューティングデバイス1000はまた、オーディオ出力を提供するためのスピーカー1014を含んでもよい。モバイルコンピューティングデバイス1000はまた、本明細書で説明するコンポーネントの全部または一部を収容するための、プラスチック、金属、または材料の組合せから構成されるハウジング1020を含んでもよい。モバイルコンピューティングデバイス1000は、使い捨てまたは充電可能なバッテリーなどの、プロセッサ1002に結合された電源1022を含む場合もある。充電可能なバッテリーは、モバイルコンピューティングデバイス1000の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートに結合される場合もある。モバイルコンピューティングデバイス1000はまた、ユーザ入力を受け取るための物理ボタン1024を含んでもよい。モバイルコンピューティングデバイス1000は、モバイルコンピューティングデバイス1000をオンオフするための電源ボタン1024を含んでもよい。
(限定はしないが、図1~図9を参照して上記で説明した実施形態を含む)様々な実施形態によるシステムは、その一例が図11に示されているラップトップコンピュータ1100を含む多種多様なコンピューティングシステムにおいて実装されよい。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとして働くタッチパッドのタッチ面1117を含み、したがって、タッチスクリーンディスプレイを装備した上述のコンピューティングデバイス上で実装されるものと同様のドラッグジェスチャー、スクロールジェスチャー、およびフリックジェスチャーを受信する場合がある。ラップトップコンピュータ1100は通常、揮発性メモリ1112と、フラッシュメモリのディスクドライブ1113などの大容量不揮発性メモリとに結合されたプロセッサ1102を含む。加えて、コンピュータ1100は、プロセッサ1102に結合されたワイヤレスデータリンクおよび/またはセルラー電話トランシーバ1116に接続される場合がある、電磁放射を送受信するための1つまたは複数のアンテナ1108を有する場合がある。コンピュータ1100はまた、プロセッサ1102に結合されたフロッピーディスクドライブ1114およびコンパクトディスク(CD)ドライブ1115を含む場合がある。ノートブック構成では、コンピュータハウジングは、すべてがプロセッサ1102に結合されたタッチパッド1117、キーボード1118、およびディスプレイ1119を含む。コンピューティングデバイスの他の構成はよく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールを含んでよく、それらはまた、様々な実施形態とともに使用されてもよい。
(限定はしないが、図1~図9を参照して上記で説明した実施形態を含む)様々な実施形態によるシステムが、様々な市販のサーバのうちのいずれかなど、固定コンピューティングシステムにおいて実装されてもよい。例示的なサーバ1200を図12に示す。そのようなサーバ1200は、通常、揮発性メモリ1202およびディスクドライブ1204などの大容量不揮発性メモリに結合された1つまたは複数のマルチコアプロセッサアセンブリ1201を含む。図12に示すように、マルチコアプロセッサアセンブリ1201は、それらをアセンブリのラックに挿入することによって、サーバ1200に追加されてもよい。サーバ1200はまた、プロセッサ1201に結合されたフロッピーディスクドライブ、コンパクトディスク(CD)またはデジタル多用途ディスク(DVD)ディスクドライブ1206を含んでもよい。サーバ1200はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話網、ならびに/またはセルラーデータネットワーク(たとえば、CDMA、TDMA、GSM、PCS、3G、4G、LTE、または任意の他のタイプのセルラーデータネットワーク)など、ネットワーク1205とのネットワークインターフェース接続を確立するための、マルチコアプロセッサアセンブリ1201に結合されたネットワークアクセスポート1203を含んでもよい。
実装例について、以下の段落において説明する。以下の実装例のうちのいくつかについて例示的な方法に関して説明するが、さらなる例示的な実装形態は、以下のパラグラフにおいて説明する例示的な方法であって、例示的な方法の動作をプロセッサ実行可能命令が実行するように構成されるプロセッサを備えるコンピューティングデバイスによって実施される例示的な方法、以下のパラグラフにおいて説明する例示的な方法であって、例示的な方法の機能を実行するための手段を含むコンピューティングデバイスによって実施される例示的な方法、および以下のパラグラフにおいて説明する例示的な方法であって、コンピューティングデバイスのプロセッサに例示的な方法の動作を実行させるように構成されるプロセッサ実行可能命令が記憶された非一時的プロセッサ可読記憶媒体として実装される例示的な方法を含んでもよい。
例1。ページの仮想アドレスを物理アドレスにマップするように構成されるメモリマップを生成する方法であって、同じサイズのページが領域にグループ化され、第1の追加ページのための第1のエントリをメモリマップの第1の領域に追加するステップと、コードに割り振られた第1の領域の仮想アドレスをシフトに対応するために第1の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップと、第1の追加のページのための第1のエントリのシフトされた仮想アドレスを、第1の領域の第1の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするステップと、サブページの粒度のシフト量だけ、コードに割り振られた第1の領域の仮想アドレスをシフトするステップであって、コードに割り振られた第1の領域の仮想アドレスが、第1の追加のページのための第1のエントリに部分的にシフトする、シフトするステップとを含む、方法。
例2。第2の追加のページのための第2のエントリをメモリマップの第2の領域に追加するステップであって、第2の領域が、第1の領域よりも上位に仮想アドレス指定される、追加するステップと、コードに割り振られた第2の領域の仮想アドレスのシフトに対応するために第2の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップと、第2の追加のページのための第2のエントリのシフトされた仮想アドレスを、第2の領域の第2の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするステップと、サブページの粒度のシフト量だけ、コードに割り振られた第2の領域の仮想アドレスをシフトするステップであって、コードに割り振られた第2の領域の仮想アドレスが、第2の追加のページのための第2のエントリに部分的にシフトする、シフトするステップとをさらに含む、例1の方法。
例3。メモリマップの第1の領域に追加された第1のエントリに対応するために、第2の領域の仮想アドレスをシフトするステップと、第2の追加ページを含む第2の領域のページを、第2の領域のページのサイズページのページ境界と整列させるために第2の領域の仮想アドレスをシフトするステップとをさらに含む、例1または2のいずれかの方法。
例4。物理メモリにおいてコードに割り振られた第1の領域のシフトされた仮想アドレスのためにコードをローテートするステップをさらに含む、例1から3のいずれかの方法。
例5。物理メモリにおいてコードに割り振られた第1の領域のシフトされた仮想アドレスのためにコードをローテートさせるステップが、コードに割り振られた第1の領域のシフトされた仮想アドレスのために、第1の最下位仮想アドレスページからマップされた物理アドレスにコードをロードするステップと、コードに割り振られた第1の領域のシフトされた仮想アドレスのために、第1の追加のページからマップされた物理アドレスにコードをロードするステップであって、第1の追加ページからコードに割り振られた第1の領域のシフトされた仮想アドレスのためのマップされた物理アドレスが、第1の最下位仮想アドレスページからコードに割り振られた第1の領域のシフトされた仮想アドレスのためのマップされた物理アドレスよりも下位の物理アドレスである、ロードするステップとを含む、例4の方法。
例6。サブページの粒度のシフト量だけ、コードに割り振られた第2の領域の仮想アドレスのシフトに対応するために第2の領域の仮想アドレスのシフトの量だけ、コードを含むバイナリコードのためのポインタを調整するステップをさらに含む、例1から5のいずれかの方法。
例7。プログラムカウンタ相対コードを生成するステップと、プログラムカウンタ相対コードからバイナリコードを生成するステップとをさらに含む、例6の方法。
様々な実施形態の動作を実行するためのプログラマブルプロセッサ上での実行のためのコンピュータプログラムコードまたは「プログラムコード」は、C、C++、C#、Smalltalk、Java、JavaScript、Visual Basic、Structured Query Language(たとえば、Transact-SQL)、Perlなどの高水準プログラミング言語または様々な他のプログラミング言語で記述される場合がある。本出願で使用するコンピュータ可読記憶媒体上に記憶されたプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である(オブジェクトコードなどの)機械語コードを指す場合がある。
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供されており、様々な実施形態の動作が提示された順序で実行されなければならないことを要求または暗示するものではない。当業者によって諒解されるように、上述の実施形態における動作の順序は、任意の順序で実施されてもよい。「その後」、「次いで」、「次に」などの単語は、動作の順序を限定するものではなく、これらの単語は単に、方法の説明を通して読者を導くために使用される。さらに、たとえば、冠詞"a"、"an"または"the"を使用する、単数形での請求項要素へのいかなる言及も、その要素を単数形に限定するものとして解釈されるべきではない。
様々な実施形態に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装されてもよい。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的なコンポーネント、ブロック、モジュール、回路、および動作について、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアとして実装されるかまたはソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課された設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装してもよいが、そのような実装決定は、特許請求の範囲からの逸脱を引き起こすものとして解釈されるべきではない。
本明細書で開示する実施形態に関して説明した様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲート論理もしくはトランジスタ論理、個別ハードウェアコンポーネント、または本明細書で説明した機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行されてもよい。汎用プロセッサはマイクロプロセッサであってもよいが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であってもよい。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装されてもよい。代替的に、いくつかの動作または方法は、所与の機能に固有の回路によって実行されてもよい。
1つまたは複数の実施形態では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装されてもよい。ソフトウェアにおいて実装される場合、機能は、1つまたは複数の命令またはコードとして、非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体上に記憶されてもよい。本明細書で開示する方法またはアルゴリズムの動作は、非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体上に存在する場合があるプロセッサ実行可能ソフトウェアモジュールにおいて具現化されてもよい。非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされる場合がある任意の記憶媒体であってもよい。限定ではなく例として、そのような非一時的コンピュータ可読媒体またはプロセッサ可読媒体は、RAM、ROM、EEPROM、FLASHメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用される場合があり、かつコンピュータによってアクセスされる場合がある任意の他の媒体を含んでもよい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、非一時的コンピュータ可読媒体および非一時的プロセッサ可読媒体の範囲内に含まれる。追加として、方法またはアルゴリズムの動作は、コンピュータプログラム製品の中に組み込まれてもよい非一時的プロセッサ可読媒体および/または非一時的コンピュータ可読媒体上のコードおよび/または命令のうちの1つ、またはその任意の組合せもしくはセットとして存在してもよい。
開示する実施形態の前述の説明は、任意の当業者が特許請求の範囲を製作または使用することを可能にするために提供される。これらの実施形態への様々な修正が当業者には容易に明らかになり、本明細書において定義される一般原理は、特許請求の範囲から逸脱することなく他の実施形態および実装形態に適用されてもよい。したがって、本開示は、本明細書で説明した実施形態および実装形態に限定されることが意図されるものではなく、本明細書で開示した特許請求の範囲、および原理、ならびに新規の特徴と一致する最も広い範囲が与えられるべきである。
100 コンピューティングデバイス
102 SoC
104 中央処理ユニット(CPU)
106 メモリ
108 通信インターフェース
110 メモリインターフェース
112 通信コンポーネント
114 メモリ
116 アンテナ
120 周辺デバイスインターフェース
122 周辺デバイス
124 処理デバイス/プロセッサ
200 メモリシステム
202 仮想メモリ
204 メモリマップ
206 メモリ管理ユニット(MMU)
208 物理メモリ
300 仮想メモリ
302 ページ
304 ページ
306 コード
308 コード
320 物理メモリ
326 物理アドレス
328 物理アドレス
400 メモリマップ
502 ソースコード
522 物理メモリ
1000 モバイルコンピューティングデバイス
1002 プロセッサ
1004 タッチスクリーンコントローラ
1006 内部メモリ
1008 トランシーバ
1010 アンテナ
1012 タッチスクリーンパネル
1014 スピーカー
1016 セルラーネットワークワイヤレスモデムチップ
1018 周辺デバイス接続インターフェース
1020 ハウジング
1022 電源
1024 物理ボタン/電源ボタン
1102 プロセッサ
1108 アンテナ
1100 ラップトップコンピュータ
1112 揮発性メモリ
1113 ディスクドライブ
1114 フロッピーディスクドライブ
1115 コンパクトディスク(CD)ドライブ
1116 ワイヤレスデータリンクおよび/またはセルラー電話トランシーバ
1117 タッチパッド
1118 キーボード
1119 ディスプレイ
1200 サーバ
1201 マルチコアプロセッサアセンブリ
1202 揮発性メモリ
1203 ネットワークアクセスポート
1204 ディスクドライブ
1205 ネットワーク
1206 デジタル多用途ディスク(DVD)ディスクドライブ

Claims (28)

  1. ページの仮想アドレスを物理アドレスにマップするように構成されるメモリマップを生成する方法であって、同じサイズのページが領域にグループ化され、前記方法が、
    第1の追加ページのための第1のエントリを前記メモリマップの第1の領域に追加するステップと、
    コードに割り振られた前記第1の領域の仮想アドレスのシフトに対応するために、前記第1の領域の仮想アドレスをサブページの粒度のシフト量だけシフトするステップと、
    前記第1の追加ページのための前記第1のエントリのシフトされた仮想アドレスを、前記第1の領域の第1の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするステップと、
    サブページの粒度のシフト量だけ、コードに割り振られた前記第1の領域の前記仮想アドレスをシフトするステップであって、コードに割り振られた前記第1の領域の前記仮想アドレスが、前記第1の追加ページのための前記第1のエントリに部分的にシフトする、ステップと
    を含む、方法。
  2. 第2の追加ページのための第2のエントリを前記メモリマップの第2の領域に追加するステップであって、前記第2の領域が、前記第1の領域よりも上位に仮想アドレス指定される、ステップと、
    コードに割り振られた前記第2の領域の仮想アドレスのシフトに対応するために、前記第2の領域の仮想アドレスを前記サブページの粒度のシフト量だけシフトするステップと、
    前記第2の追加ページのための前記第2のエントリのシフトされた仮想アドレスを、前記第2の領域の第2の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするステップと、
    前記サブページの粒度のシフト量だけ、コードに割り振られた前記第2の領域の前記仮想アドレスをシフトするステップであって、コードに割り振られた前記第2の領域の前記仮想アドレスが、前記第2の追加ページのための前記第2のエントリに部分的にシフトする、ステップと
    をさらに含む、請求項1に記載の方法。
  3. 前記メモリマップの前記第1の領域に追加された前記第1のエントリに対応するために、前記第2の領域の前記仮想アドレスをシフトするステップと、
    前記第2の追加ページを含む前記第2の領域の前記ページを、前記第2の領域の前記ページのサイズページのページ境界と整列させるために前記第2の領域の前記仮想アドレスをシフトするステップと
    をさらに含む、請求項2に記載の方法。
  4. 物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために前記コードをローテートさせるステップをさらに含む、請求項1に記載の方法。
  5. 前記物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために前記コードをローテートさせるステップが、
    前記第1の最下位仮想アドレスページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードするステップと、
    前記第1の追加ページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードするステップであって、前記第1の追加ページからコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのための前記マップされた物理アドレスが、前記シフトされた仮想アドレスのための前記マップされた物理アドレスよりも下位の物理アドレスである、ステップと
    を含む、請求項4に記載の方法。
  6. 前記サブページの粒度のシフト量だけ前記コードに割り振られた前記第1の領域の仮想アドレスの前記シフトに対応するために、前記第1の領域の前記仮想アドレスの前記シフトの量だけ、前記コードを含むバイナリコードのためにポインタを調整するステップをさらに含む、請求項1に記載の方法。
  7. プログラムカウンタ相対コードを生成するステップと、
    前記プログラムカウンタ相対コードから前記バイナリコードを生成するステップと
    をさらに含む、請求項6に記載の方法。
  8. コンピューティングデバイスであって、
    第1の追加ページのための第1のエントリをメモリマップの第1の領域に追加することであって、前記メモリマップが、ページの仮想アドレスを物理アドレスにマップするように構成され、同じサイズのページが、前記第1の領域を含む領域にグループ化される、ことと、
    サブページの粒度のシフト量だけ、コードに割り振られた前記第1の領域の仮想アドレスのシフトに対応するために、前記第1の領域の仮想アドレスをシフトすることと、
    前記第1の追加ページのための前記第1のエントリのシフトされた仮想アドレスを、前記第1の領域の第1の最下位シフト仮想アドレスページにマップされた物理アドレスにマップすることと、
    サブページの粒度のシフト量だけ、コードに割り振られた前記第1の領域の前記仮想アドレスをシフトすることであって、コードに割り振られた前記第1の領域の前記仮想アドレスが、前記第1の追加ページのための前記第1のエントリに部分的にシフトする、ことと
    を行うように構成される処理デバイスを備える、コンピューティングデバイス。
  9. 前記処理デバイスが、
    第2の追加ページのための第2のエントリを前記メモリマップの第2の領域に追加することであって、前記第2の領域が、前記第1の領域よりも上位に仮想アドレス指定される、ことと、
    コードに割り振られた前記第2の領域の仮想アドレスのシフトに対応するために、前記第2の領域の仮想アドレスを前記サブページの粒度のシフト量だけシフトすることと、
    前記第2の追加ページのための前記第2のエントリのシフトされた仮想アドレスを、前記第2の領域の第2の最下位シフト仮想アドレスページにマップされた物理アドレスにマップすることと、
    前記サブページの粒度のシフト量だけ、コードに割り振られた前記第2の領域の前記仮想アドレスをシフトすることであって、コードに割り振られた前記第2の領域の前記仮想アドレスが、前記第2の追加ページのための前記第2のエントリに部分的にシフトする、ことと
    を行うように構成される、請求項8に記載のコンピューティングデバイス。
  10. 前記処理デバイスが、
    前記メモリマップの前記第1の領域に追加された前記第1のエントリに対応するために、前記第2の領域の前記仮想アドレスをシフトすることと、
    前記第2の追加ページを含む前記第2の領域の前記ページを、前記第2の領域の前記ページのサイズページのページ境界と整列させるために前記第2の領域の前記仮想アドレスをシフトすることと
    を行うように構成される、請求項9に記載のコンピューティングデバイス。
  11. 前記処理デバイスが、物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために前記コードをローテートさせるように構成される、請求項8に記載のコンピューティングデバイス。
  12. 前記処理デバイスが、
    前記物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために、
    前記第1の最下位仮想アドレスページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードすることと、
    前記第1の追加ページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードすることであって、前記第1の追加ページからコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスに対する前記マップされた物理アドレスが、前記シフトされた仮想アドレスに対する前記マップされた物理アドレスよりも下位の物理アドレスである、ロードすることと
    によって前記コードをローテートさせるように構成される、請求項11に記載のコンピューティングデバイス。
  13. 前記処理デバイスが、前記サブページの粒度のシフト量だけ前記コードに割り振られた前記第1の領域の仮想アドレスの前記シフトに対応するために、前記第1の領域の前記仮想アドレスの前記シフトの量だけ、前記コードを含むバイナリコードのためにポインタを調整するように構成される、請求項8に記載のコンピューティングデバイス。
  14. 前記処理デバイスが、
    プログラムカウンタ相対コードを生成することと、
    前記プログラムカウンタ相対コードから前記バイナリコードを生成することと
    を行うように構成される、請求項13に記載のコンピューティングデバイス。
  15. コンピューティングデバイスであって、
    第1の追加ページのための第1のエントリをメモリマップの第1の領域に追加するための手段であって、前記メモリマップが、ページの仮想アドレスを物理アドレスにマップするように構成され、同じサイズのページが、前記第1の領域を含む領域にグループ化される、追加するための手段と、
    サブページの粒度のシフト量だけ、コードに割り振られた前記第1の領域の仮想アドレスのシフトに対応するために、前記第1の領域の仮想アドレスをシフトするための手段と、
    前記第1の追加ページのための前記第1のエントリのシフトされた仮想アドレスを、前記第1の領域の第1の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするための手段と、
    サブページの粒度のシフト量だけ、コードに割り振られた前記第1の領域の前記仮想アドレスをシフトするための手段であって、コードに割り振られた前記第1の領域の前記仮想アドレスが、前記第1の追加ページのための前記第1のエントリに部分的にシフトする、手段と
    を備える、コンピューティングデバイス。
  16. 第2の追加ページのための第2のエントリを前記メモリマップの第2の領域に追加するための手段であって、前記第2の領域が、前記第1の領域よりも上位に仮想アドレス指定される、手段と、
    コードに割り振られた前記第2の領域の仮想アドレスのシフトに対応するために、前記第2の領域の仮想アドレスを前記サブページの粒度のシフト量だけシフトするための手段と、
    前記第2の追加ページのための前記第2のエントリのシフトされた仮想アドレスを、前記第2の領域の第2の最下位シフト仮想アドレスページにマップされた物理アドレスにマップするための手段と、
    前記サブページの粒度のシフト量だけ、コードに割り振られた前記第2の領域の前記仮想アドレスをシフトするための手段であって、コードに割り振られた前記第2の領域の前記仮想アドレスが、前記第2の追加ページのための前記第2のエントリに部分的にシフトする、手段と
    をさらに備える、請求項15に記載のコンピューティングデバイス。
  17. 前記メモリマップの前記第1の領域に追加された前記第1のエントリに対応するために、前記第2の領域の前記仮想アドレスをシフトするための手段と、
    前記第2の追加ページを含む前記第2の領域の前記ページを、前記第2の領域の前記ページのサイズページのページ境界と整列させるために前記第2の領域の前記仮想アドレスをシフトするための手段と
    をさらに備える、請求項16に記載のコンピューティングデバイス。
  18. 物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために前記コードをローテートさせるための手段をさらに備える、請求項15に記載のコンピューティングデバイス。
  19. 前記物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために前記コードをローテートさせるための手段が、
    前記第1の最下位仮想アドレスページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードするための手段と、
    前記第1の追加ページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードするための手段であって、前記第1の追加ページからコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのための前記マップされた物理アドレスが、前記第1の最下位仮想アドレスページからコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのための前記マップされた物理アドレスよりも下位の物理アドレスである、手段と
    を備える、請求項18に記載のコンピューティングデバイス。
  20. 前記サブページの粒度のシフト量だけ前記コードに割り振られた前記第1の領域の仮想アドレスの前記シフトに対応するために、前記第1の領域の前記仮想アドレスの前記シフトの量だけ、前記コードを含むバイナリコードのためにポインタを調整するための手段をさらに含む、請求項15に記載のコンピューティングデバイス。
  21. プログラムカウンタ相対コードを生成するための手段と、
    生成されたプログラムカウンタ相対コードから前記バイナリコードを生成するための手段と
    をさらに備える、請求項20に記載のコンピューティングデバイス。
  22. 処理デバイスに動作を実行させるように構成されるプロセッサ実行可能命令が記憶された非一時的プロセッサ可読媒体であって、前記動作が、
    第1の追加ページのための第1のエントリをメモリマップの第1の領域に追加することであって、前記メモリマップが、ページの仮想アドレスを物理アドレスにマップするように構成され、同じサイズのページが、前記第1の領域を含む領域にグループ化される、ことと、
    コードに割り振られた前記第1の領域の仮想アドレスのシフトに対応するために、前記第1の領域の仮想アドレスをサブページの粒度のシフト量だけシフトすることと、
    前記第1の追加ページのための前記第1のエントリのシフトされた仮想アドレスを、前記第1の領域の第1の最下位シフト仮想アドレスページにマップされた物理アドレスにマップすることと、
    サブページの粒度のシフト量だけ、コードに割り振られた前記第1の領域の前記仮想アドレスをシフトすることであって、コードに割り振られた前記第1の領域の前記仮想アドレスが、前記第1の追加ページのための前記第1のエントリに部分的にシフトする、ことと
    を含む、非一時的プロセッサ可読媒体。
  23. 前記記憶されたプロセッサ実行可能命令が、前記処理デバイスに、
    第2の追加ページのための第2のエントリを前記メモリマップの第2の領域に追加することであって、前記第2の領域が、前記第1の領域よりも上位に仮想アドレス指定される、追加することと、
    コードに割り振られた前記第2の領域の仮想アドレスのシフトに対応するために、前記第2の領域の仮想アドレスを前記サブページの粒度のシフト量だけシフトすることと、
    前記第2の追加ページのための前記第2のエントリのシフトされた仮想アドレスを、前記第2の領域の第2の最下位シフト仮想アドレスページにマップされた物理アドレスにマップすることと、
    前記サブページの粒度のシフト量だけ、コードに割り振られた前記第2の領域の前記仮想アドレスをシフトすることであって、コードに割り振られた前記第2の領域の前記仮想アドレスが、前記第2の追加ページのための前記第2のエントリに部分的にシフトする、ことと
    をさらに含む動作を行わせるように構成される、請求項22に記載の非一時的プロセッサ可読媒体。
  24. 前記記憶されたプロセッサ実行可能命令が、前記処理デバイスに、
    前記メモリマップの前記第1の領域に追加された前記第1のエントリに対応するために、前記第2の領域の前記仮想アドレスをシフトすることと、
    前記第2の追加ページを含む前記第2の領域の前記ページを、前記第2の領域の前記ページのサイズページのページ境界と整列させるために前記第2の領域の前記仮想アドレスをシフトすることと
    をさらに含む動作を行わせるように構成される、請求項23に記載の非一時的プロセッサ可読媒体。
  25. 前記記憶されたプロセッサ実行可能命令が、前記処理デバイスに、物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために前記コードをローテートさせることをさらに含む動作を行わせるように構成される、請求項22に記載の非一時的プロセッサ可読媒体。
  26. 前記記憶されたプロセッサ実行可能命令が、前記処理デバイスに、
    前記第1の最下位仮想アドレスページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードすることと、
    前記第1の追加ページから前記マップされた物理アドレスへ、コードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのためにコードをロードすることであって、前記第1の追加ページからコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスに対する前記マップされた物理アドレスが、前記シフトされた仮想アドレスに対する前記マップされた物理アドレスよりも下位の物理アドレスである、ことと
    を含む、前記物理メモリにおいてコードに割り振られた前記第1の領域の前記シフトされた仮想アドレスのために前記コードをローテートさせるように動作を行わせるように構成される、請求項25に記載の非一時的プロセッサ可読媒体。
  27. 前記記憶されたプロセッサ実行可能命令が、前記処理デバイスに、前記サブページの粒度のシフト量だけ前記コードに割り振られた前記第1の領域の仮想アドレスの前記シフトに対応するために、前記第1の領域の前記仮想アドレスの前記シフトの量だけ、前記コードを含むバイナリコードのためにポインタを調整することをさらに含む動作を行わせるように構成される、請求項22に記載の非一時的プロセッサ可読媒体。
  28. 前記記憶されたプロセッサ実行可能命令が、前記処理デバイスに、
    プログラムカウンタ相対コードを生成することと、
    前記プログラムカウンタ相対コードから前記バイナリコードを生成することと
    をさらに含む動作を行わせるように構成される、請求項27に記載の非一時的プロセッサ可読媒体。
JP2023552340A 2021-03-15 2022-01-26 ページ再マッピングおよびローテーションによるアドレス空間配置のランダム化エントロピーの増大 Pending JP2024510127A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/201,247 2021-03-15
US17/201,247 US11386012B1 (en) 2021-03-15 2021-03-15 Increasing address space layout randomization entropy via page remapping and rotations
PCT/US2022/013784 WO2022197368A1 (en) 2021-03-15 2022-01-26 Increasing address space layout randomization entropy via page remapping and rotations

Publications (1)

Publication Number Publication Date
JP2024510127A true JP2024510127A (ja) 2024-03-06

Family

ID=80786900

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023552340A Pending JP2024510127A (ja) 2021-03-15 2022-01-26 ページ再マッピングおよびローテーションによるアドレス空間配置のランダム化エントロピーの増大

Country Status (8)

Country Link
US (1) US11386012B1 (ja)
EP (1) EP4309038A1 (ja)
JP (1) JP2024510127A (ja)
KR (1) KR20230156062A (ja)
CN (1) CN116964564A (ja)
BR (1) BR112023017978A2 (ja)
TW (1) TW202238389A (ja)
WO (1) WO2022197368A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240168535A1 (en) * 2022-11-22 2024-05-23 Gopro, Inc. Dynamic power allocation for memory using multiple interleaving patterns

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10311228B2 (en) * 2014-09-30 2019-06-04 Apple Inc. Using a fine-grained address space layout randomization to mitigate potential security exploits
US10365937B2 (en) * 2015-07-24 2019-07-30 Red Hat Israel, Ltd. Entropy increase by executable loader
WO2020041473A1 (en) * 2018-08-21 2020-02-27 The Regents Of The University Of Michigan Computer system with moving target defenses against vulnerability attacks
WO2021034753A2 (en) * 2019-08-16 2021-02-25 The Regents Of The University Of Michigan Thwarting control plane attacks with displaced and dilated address spaces

Also Published As

Publication number Publication date
BR112023017978A2 (pt) 2023-10-03
US11386012B1 (en) 2022-07-12
WO2022197368A1 (en) 2022-09-22
EP4309038A1 (en) 2024-01-24
KR20230156062A (ko) 2023-11-13
CN116964564A (zh) 2023-10-27
TW202238389A (zh) 2022-10-01

Similar Documents

Publication Publication Date Title
US7739477B2 (en) Multiple page size address translation incorporating page size prediction
US11341059B2 (en) Using multiple memory elements in an input-output memory management unit for performing virtual address to physical address translations
US9075725B2 (en) Persistent memory for processor main memory
WO2016137579A1 (en) Return oriented programming attack detection via memory monitoring
KR20180054394A (ko) 호스트 메모리 버퍼(Host Memory Buffer)를 관리하기 위한 NVMe(Non-Volatile Memory Express) 컨트롤러를 포함하는 솔리드 스테이트 저장 장치(solid state storage device), 이를 포함하는 시스템 및 호스트의 호스트 메모리 버퍼를 관리하는 방법
US10915459B2 (en) Methods and systems for optimized translation of a virtual address having multiple virtual address portions using multiple translation lookaside buffer (TLB) arrays for variable page sizes
US10073644B2 (en) Electronic apparatus including memory modules that can operate in either memory mode or storage mode
EP3163451B1 (en) Memory management method and device, and memory controller
KR102398604B1 (ko) 연쇄 프리 패칭을 위한 장치 및 그것의 동작 방법
US20190026231A1 (en) System Memory Management Unit Architecture For Consolidated Management Of Virtual Machine Stage 1 Address Translations
JP2024510127A (ja) ページ再マッピングおよびローテーションによるアドレス空間配置のランダム化エントロピーの増大
US20180365183A1 (en) Cooperative overlay
US20090158003A1 (en) Structure for a memory-centric page table walker
US9507729B2 (en) Method and processor for reducing code and latency of TLB maintenance operations in a configurable processor
US10678705B2 (en) External paging and swapping for dynamic modules
US10228991B2 (en) Providing hardware-based translation lookaside buffer (TLB) conflict resolution in processor-based systems
US20160103766A1 (en) Lookup of a data structure containing a mapping between a virtual address space and a physical address space
US20230359556A1 (en) Performing Operations for Handling Data using Processor in Memory Circuitry in a High Bandwidth Memory
US20180307623A1 (en) Memory-side memory controller interpreting capabilities