メモリ管理ユニット

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
この68451MMUは、 Motorola68010で使用できます。

ページメモリ管理ユニットPMMUと呼ばれることもあるメモリ管理ユニット(MMU)[ 1 ]すべてメモリ参照がそれ自体を通過し、主に仮想メモリアドレスから物理アドレスへの変換を実行するコンピュータハードウェアユニットです。

MMUは、仮想メモリ管理を効果的に実行し、メモリ保護キャッシュ制御、バス アービトレーション、およびより単純なコンピュータアーキテクチャ(特に8ビットシステム)ではバンクスイッチングを同時に処理します。

概要

MMUの動作の概略図[2] :186ff。 

最近のMMUは通常、仮想アドレス空間(プロセッサが使用するアドレスの範囲)をページに分割します。各ページのサイズは2の累乗で、通常は数キロバイトですが、はるかに大きい場合があります。アドレスの下位ビット(ページ内のオフセット)は変更されません。上位アドレスビットは仮想ページ番号です。[3]

ページテーブルエントリ

ほとんどのMMUは、「ページテーブル」と呼ばれるアイテムのメモリ内テーブルを使用します。このテーブルには、ページごとに1つの「ページテーブルエントリ」(PTE)が含まれます[疑わしい ]。仮想ページ番号をメインメモリの物理ページ番号にマッピングします。PTEの連想キャッシュは、トランスレーションルックアサイドバッファ(TLB)と呼ばれ、仮想アドレスがマップされるたびにメインメモリにアクセスする必要性を回避するために使用されます。他のMMUには、メモリのプライベート配列[4]またはページテーブルエントリのセットを保持するレジスタがある場合があります。物理ページ番号はページオフセットと組み合わされて、完全な物理アドレスを提供します。[3]

PTEには、ページが書き込まれたかどうか(「ダーティビット」)、最後に使用された日時(「アクセスされたビット」、最も最近使用されていない(LRU)ページ置換アルゴリズム)、どのような種類の情報も含まれる場合があります。プロセス(ユーザーモードまたはスーパーバイザーモード)は、読み取りと書き込み、およびキャッシュする必要があるかどうかを指定できます。

物理ランダムアクセスメモリ(RAM)がその仮想ページに割り当てられていないために、PTEが仮想ページへのアクセスを禁止する場合があります。この場合、MMUはCPUにページフォールトを通知します。次に、オペレーティングシステム(OS)が状況を処理します。おそらく、RAMのスペアフレームを見つけて、要求された仮想アドレスにマップするために新しいPTEをセットアップしようとします。空きRAMがない場合は、何らかの置換アルゴリズムを使用して既存のページ(「犠牲者」と呼ばれる)を選択し、それをディスクに保存する必要がある場合があります(「ページング」と呼ばれるプロセス)。一部のMMUでは、PTEが不足する可能性もあります。その場合、OSは新しいマッピングのためにPTEを解放する必要があります。[3]

MMUは、不正なまたは存在しないメモリアクセス時に、それぞれ不正なアクセスエラー状態または無効なページフォールトを生成し、オペレーティングシステムによって処理されるとき にセグメンテーション違反またはバスエラー状態につながる可能性があります。

メリット

Motorola68020で使用される
MacintoshIIのVLSIVI475MMU「AppleHMMU」

場合によっては、ページフォールトがソフトウェアのバグを示している可能性があります。これは、MMUの主な利点の1つとしてメモリ保護を使用することで防ぐことができます。オペレーティングシステムは、特定のプログラムのメモリへのアクセスを禁止することで、誤ったプログラムから保護するために使用できます。にアクセスできないようにする必要があります。通常、オペレーティングシステムは、各プログラムに独自の仮想アドレス空間を割り当てます。[3]

MMUは、メモリの断片化の問題も軽減します。メモリのブロックが割り当てられて解放された後、解放されたメモリは断片化(不連続)になる可能性があり、その結果、解放されたメモリの最大の連続ブロックは合計量よりはるかに少なくなる可能性があります。仮想メモリを使用すると、連続する範囲の仮想アドレスを、物理メモリのいくつかの連続しないブロックにマッピングできます。この非連続的な割り当ては、ページングの利点の1つです。[3]

一部の初期のマイクロプロセッサ設計では、メモリ管理は、 VLSI Technology VI475(1986)、MacintoshIIMotorola68020CPUで使用されるMotorola68851(1984)またはZ8010 [5]やZ8015などの別個の集積回路によって実行されていました。 (1985)[6] [7] ZilogZ8000ファミリのプロセッサで使用されます。後のマイクロプロセッサ(Motorola68030ZilogZ280など)は、 Intel 80286以降のx86と同様に、MMUをCPUと一緒に同じ集積回路に配置しました。マイクロプロセッサ。

この記事は、一般的にページに基づく最新のMMUに焦点を当てていますが、初期のシステムは、さらにセグメンテーションに発展したベースリミットアドレッシングに同様の概念を使用していました。それらは時々現代建築にも存在します。x86アーキテクチャは、 80286でページングではなくセグメンテーションを提供し、 80386以降のプロセッサでページングとセグメンテーションの両方を提供します(ただし、64ビット操作ではセグメンテーションを使用できません)。

最新のシステムのほとんどは、メモリをサイズが4〜64 KBのページに分割し、多くの場合、サイズが2MBまたは1GBのいわゆる巨大ページを使用する機能を備えています多くの場合、両方のバリエーションが可能です)。ページの翻訳は、翻訳ルックアサイドバッファ(TLB)にキャッシュされます。一部のシステム、主に古いRISCデザインは、TLBでページ変換が見つからない場合にOSにトラップされます。ほとんどのシステムは、ハードウェアベースのツリーウォーカーを使用しています。ほとんどのシステムではMMUを無効にできますが、OSコードにトラップするときにMMUを無効にするシステムもあります。

VAX

VAXページは512バイトで、非常に小さいです。OSは、複数のページを1つの大きなページであるかのように扱う場合があります。たとえば、Linux onVAXは8ページをグループ化します。したがって、システムには4KBのページがあると見なされます。VAXは、メモリを4つの固定目的領域に分割します。各領域のサイズは1GBです彼らです:

P0スペース
ヒープなどの汎用のプロセスごとのメモリに使用されます。
P1スペース
(または制御スペース)これもプロセスごとであり、通常、スーパーバイザー、エグゼクティブ、カーネル、ユーザースタック、およびオペレーティングシステムによって管理されるその他のプロセスごとの制御構造に使用されます。
S0スペース
(またはシステムスペース)これは、すべてのプロセスに対してグローバルであり、ページングされているかどうかに関係なく、オペレーティングシステムのコードとデータ(ページングテーブルを含む)を格納します。
S1スペース
未使用で「デジタル予約」です。

ページテーブルは大きな線形配列です。通常、アドレスが可能な範囲の両端で使用される場合、これは非常に無駄になりますが、アプリケーションのページテーブル自体はカーネルのページメモリに格納されます。したがって、事実上2レベルのツリーがあり、未使用のページテーブルエントリに多くのスペースを浪費することなく、アプリケーションがスパースメモリレイアウトを持つことができます。VAX MMUは、アクセスされたビットがないことで注目に値します。ページングを実装するOSは、効率的に動作するために、アクセスされたビットをエミュレートする方法を見つける必要があります。通常、OSは定期的にページのマッピングを解除するため、ページが存在しない障害を使用して、OSにアクセスビットを設定させることができます。

ARM

ARMアーキテクチャベースのアプリケーションプロセッサは、ARMの仮想メモリシステムアーキテクチャによって定義されたMMUを実装します。現在のアーキテクチャでは、 4KB64KBのページ、1MBのセクションと16MBのスーパーセクションを記述するためのPTEが定義されています。従来のバージョンでは、1KBの小さなページも定義されていました。ARMは、 4KB64KBのページを使用する場合は2レベルのページテーブルを使用し、1MBのセクションと16MBのセクションには1レベルのページテーブルを使用します。

TLBの更新は、ページテーブルウォーキングハードウェアによって自動的に実行されます。PTEには、特権に基づく読み取り/書き込みアクセス許可、キャッシュ可能性情報、NXビット、および非セキュアビットが含まれます。[8]

IBM System / 360 Model 67、IBM System / 370、および後継機

1965年8月に導入されたIBMSystem / 360 Model 67には、動的アドレス変換(DAT)ボックスと呼ばれるMMUが含まれていました。[9] [10]アクセスされたビットとダーティビットをページテーブルの外に保存するという珍しい機能があります(すべてのS / 360プロセッサ の4ビット保護キーとともに)。これらは仮想メモリではなく物理メモリを参照し、特別な目的の命令によってアクセスされます。[10] これにより、OSのオーバーヘッドが削減されます。そうしないと、アクセスされたダーティビットをページテーブルからより物理的に指向されたデータ構造に伝播する必要があります。これにより、後で準仮想化と呼ばれるOSレベルの仮想化が容易になります。

1972年8月以降、IBM System / 370にも同様のMMUがありますが、当初はSystem / 360モデル67の32ビット仮想アドレス空間ではなく24ビット仮想アドレス空間のみをサポートしていました。また、アクセスされたものも格納されます。ページテーブルの外側のダーティビット。1983年の初めに、System / 370-XAアーキテクチャーは仮想アドレス空間を31ビットに拡張し、2000年には64ビットの z / Architectureが導入され、アドレス空間は64ビットに拡張されました。それらは、アクセスされたダーティビットをページテーブルの外に格納し続けます。

DEC Alpha

DEC Alphaプロセッサは、メモリを8KBページに分割します。TLBミスの後、低レベルのファームウェアマシンコード(ここではPALcodeと呼ばれます)は、3レベルのツリー構造のページテーブルをウォークします。アドレスは次のように分類されます。未使用の21ビット、ツリーのルートレベルにインデックスを付けるための10ビット、ツリーの中間レベルにインデックスを付けるための10ビット、ツリーのリーフレベルにインデックスを付けるための10ビット、および通過する13ビット変更せずに物理アドレスに。完全な読み取り/書き込み/実行許可ビットがサポートされています。

MIPS

MIPSアーキテクチャ、TLBで1〜64のエントリをサポートします。TLBエントリの数は、合成前のCPU構成で構成できます。TLBエントリはデュアルです。各TLBエントリは、ページマスクの一部ではない仮想アドレスの最下位ビットに応じて、仮想ページ番号(VPN2)を2つのページフレーム番号(PFN0またはPFN1)のいずれかにマップしますこのビットとページマスクビットはVPN2に保存されません。各TLBエントリには独自のページサイズがあり、1KBから256MBまでの任意の値にすることができます4の倍数で。TLBエントリの各PFNには、キャッシング属性、ダーティ、および有効なステータスビットがあります。VPN2には、グローバルステータスビットと、グローバルステータスビットがゼロに設定されている場合に仮想アドレスTLBエントリの一致に参加するOS割り当てIDがあります。PFNは、ページマスクビットなしで物理アドレスを格納します。

マップされた仮想アドレスに一致するエントリがTLBにない場合、TLBリフィル例外が生成されます。一致するものがあるが、エントリが無効とマークされている場合、TLB無効例外が生成されます。ストア命令がマップされたアドレスを参照し、一致するエントリのダーティステータスが設定されていない場合、TLB変更例外が生成されます。TLB例外(二重障害TLB例外)の処理中にTLB例外が発生した場合、それは独自の例外ハンドラーにディスパッチされます。

MIPS32およびMIPS32r2は、32ビットの仮想アドレス空間と最大36ビットの物理アドレス空間をサポートします。MIPS64は、最大64ビットの仮想アドレス空間と最大59ビットの物理アドレス空間をサポートします。

日1

オリジナルのSun1は、 Motorola 68000マイクロプロセッサを中心に構築され、1982年に導入されシングルボードコンピュータです。これには、CPUで実行される複数のプロセスのアドレス変換、メモリ保護、メモリ共有、およびメモリ割り当てを提供するオリジナルのSun1メモリ管理ユニットが含まれます。 。プライベートオンボードRAM、外部マルチバスメモリ、オンボードI / O、およびマルチバスI / OへのCPUのすべてのアクセスは、アドレス変換と保護が均一に行われるMMUを介して実行されます。MMUは、CPUボード上のハードウェアに実装されています。

MMUは、コンテキストレジスタ、セグメントマップ、およびページマップで構成されます。CPUからの仮想アドレスは、セグメントマップによって中間アドレスに変換され、次に、ページマップによって物理アドレスに変換されます。ページサイズは2KB、セグメントサイズは32 KBで、セグメントあたり16ページになります。最大16個のコンテキストを同時にマップできます。コンテキストの最大論理アドレス空間は1024ページまたは2MBです。 同時にマッピングできる最大物理アドレスも2MBです。

コンテキストレジスタは、CPUがすべての変換状態情報をリロードせずにプロセスを切り替えることができるため、マルチタスクオペレーティングシステムでは重要です。4ビットのコンテキストレジスタは、スーパーバイザの制御下でセグメントマップの16のセクションを切り替えることができます。これにより、16のコンテキストを同時にマッピングできます。各コンテキストには、独自の仮想アドレス空間があります。仮想アドレス空間の共有とコンテキスト間通信は、異なるコンテキストのセグメントまたはページマップに同じ値を書き込むことで提供できます。追加のコンテキストは、セグメントマップをコンテキストキャッシュとして扱い、最も使用頻度の低いベースで古いコンテキストを置き換えることで処理できます。

コンテキストレジスタは、ユーザーとスーパーバイザの状態を区別しません。割り込みとトラップはコンテキストを切り替えません。これには、すべての有効な割り込みベクトルが常にコンテキストのページ0と、有効なスーパーバイザスタックにマップされている必要があります。[11]

PowerPC

PowerPC G1では、G2、G3、およびG4ページは通常4KBです。 TLBミスの後、標準のPowerPCMMUは2つの同時ルックアップを開始します。1回のルックアップでは、必要に応じて、アドレスを4つまたは8つのデータブロックアドレス変換(DBAT)レジスタの1つ、または4つまたは8つの命令ブロックアドレス変換レジスタ(IBAT)と照合しようとします。BATレジスタは、最大256 MBのメモリの線形チャンクをマップでき、通常、OSカーネル自体が使用するためにアドレス空間の大部分をマップするためにOSによって使用されます。BATルックアップが成功すると、他のルックアップは停止され、無視されます。

このファミリのすべてのプロセッサで直接サポートされていないもう1つのルックアップは、TLBのハッシュオフチップ拡張として機能する、いわゆる「反転ページテーブル」を介したものです。まず、アドレスの上位4ビットを使用して、16セグメントレジスタの1つを選択します。次に、セグメントレジスタの24ビットがこれらの4ビットを置き換え、52ビットアドレスを生成します。セグメントレジスタを使用すると、複数のプロセスが同じハッシュテーブルを共有できます。

52ビットアドレスはハッシュされ、オフチップテーブルへのインデックスとして使用されます。そこで、8ページのテーブルエントリのグループがスキャンされ、一致するものが探しられます。過度のハッシュ衝突のために一致するものがない場合、プロセッサはわずかに異なるハッシュ関数で再試行します。これも失敗すると、CPUがOSにトラップされ(MMUが無効になっている)、問題が解決される可能性があります。OSは、新しいエントリ用のスペースを作るために、ハッシュテーブルからエントリを破棄する必要があります。OSは、より通常のツリーのようなページテーブルから、またはより低速でスペース効率が高い可能性が高いマッピングごとのデータ構造から、新しいエントリを生成する場合があります。非実行制御のサポートはセグメントレジスタにあり、256MBの粒度になります。

この設計の主な問題は、ハッシュ関数によって引き起こされるキャッシュの局所性が低いことです。ツリーベースのデザインでは、隣接するページのページテーブルエントリを隣接する場所に配置することで、これを回避します。PowerPCで実行されているオペレーティングシステムは、この問題を減らすためにハッシュテーブルのサイズを最小化する場合があります。

プロセスのページテーブルエントリを削除するのもやや遅いです。OSは、セグメント値を再利用してこれに直面するのを遅らせることを回避する場合があります。または、プロセスごとのハッシュテーブルに関連するメモリの浪費を選択する場合があります。G1チップはページテーブルエントリを検索しませんが、OSがソフトウェアを介して標準ハッシュテーブルを検索することを期待して、ハッシュを生成します。OSはTLBに書き込むことができます。G2、G3、および初期のG4チップは、ハードウェアを使用してハッシュテーブルを検索します。最新のチップにより、OSはどちらの方法も選択できます。これをオプションにするチップ、またはまったくサポートしないチップでは、OSはツリーベースのページテーブルを排他的に使用することを選択できます。

IA-32 / x86

x86アーキテクチャは、OSコードの場合でも、完全なソフトウェア互換性を維持しながら、非常に長い間進化してきました。したがって、MMUは非常に複雑で、さまざまな動作モードが考えられます。ここでは、従来の80386 CPUとその後継(IA-32 )の通常の動作について説明します。

CPUは、主にメモリを4KBページに分割します。古い8088および80286MMU設計の基本であるセグメントレジスタは、1つの主要な例外を除いて、最新のOSでは使用されません。アプリケーションのスレッド固有のデータまたはOSカーネルのCPU固有のデータへのアクセス。 FSおよびGSセグメントレジスタ。すべてのメモリアクセスには、実行中のコードに応じて選択されたセグメントレジスタが含まれます。セグメントレジスタは、テーブルへのインデックスとして機能し、仮想アドレスに追加されるオフセットを提供します。FSまたはGSを使用する場合を除いて、OSはオフセットがゼロになることを保証します。

オフセットが追加された後、アドレスは32ビット以下になるようにマスクされます。結果は、ツリー構造のページテーブルを介して検索できます。アドレスのビットは、次のように分割されます。ツリーのブランチの場合は10ビット、ブランチのリーフの場合は10ビット、最下位の12ビットは直接です。結果にコピーされます。W ^ X機能を備えたOpenBSDやExecShieldまたはPaXパッチを備えたLinuxなどの一部のオペレーティングシステムでは、CSレジスタで指定されているように、コードセグメントの長さを制限して、アドレス空間。

Pentiumで導入されたMMUのマイナーリビジョンでは、ツリーの最下位レベルをスキップすることにより、非常に大きな4 MBページが許可されています(これにより、ページ階層の最初のレベルにインデックスを付けるための10ビットが残り、残りの10 +12ビットが結果に直接コピーされます)。Pentium Proで導入されたMMUのマイナーリビジョンでは、物理アドレス拡張(PAE)機能が導入され、3レベルのページテーブルで2 + 9 + 9ビットの36ビット物理アドレスが有効になり、最下位12ビットが結果に直接コピーされます。大きなページ(2 MB)は、ツリーの最下位レベルをスキップすることによっても使用できます(2レベルのテーブル階層の場合は2 + 9ビットになり、残りの9 + 12ビットは直接コピーされます)。さらに、ページ属性テーブルでは、小さなオンCPUテーブルで上位ビットを検索することにより、キャッシュ可能性を指定できました。

No-executeサポートは元々、セグメントごとにのみ提供されていたため、使用が非常に面倒でした。最近のx86チップは、PAEモードでページごとの非実行ビットを提供します。上記のW ^ XExec Shield、およびPaXメカニズムは、コードセグメントの長さを設定することにより、NXビットがないマシンx86プロセッサでのページごとの非実行サポートをエミュレートしますが、パフォーマンスが低下し、使用可能なアドレス空間が減少します。 。

x86-64

Heterogeneous System Architecture(HSA)は、CPU、GPU、およびDSP用の統合された仮想アドレス空間を作成し、マッピングトリックとデータコピーを廃止します。

x86-64はx86の64ビット拡張であり、386以降のプロセッサのほぼすべてのオペレーティングシステムで使用されるフラットメモリモデルを優先して、セグメンテーションをほぼ完全に削除します。ロングモードでは、FSセグメントとGSセグメントを除いて、すべてのセグメントオフセットが無視されます。4 KBページで使用する場合、ページテーブルツリーには3つではなく4つのレベルがあります。

仮想アドレスは次のように分割されます。未使用の16ビット、4つのツリーレベルにそれぞれ9ビット(合計36ビット)、および結果に直接コピーされた最下位12ビット。2 MBのページでは、ページテーブルのレベルは3つだけで、ページングで使用されるのは合計27ビット、オフセットは21ビットです。一部の新しいCPUは、2レベルのページングと30ビットのオフセットを備えた1GBページもサポートしています。[12]

CPUIDを使用して、1GBページがサポートされているかどうかを判別できます。3つのケースすべてで、上位16ビットは48番目のビットと等しい必要があります。つまり、下位48ビットは上位ビットに符号拡張されます。これは、下位互換性を損なうことなく、アドレス可能な範囲の将来の拡張を可能にするために行われます。ページテーブルのすべてのレベルで、ページテーブルエントリには非実行ビットが含まれています。

Unisys MCP Systems(Burroughs B5000)

1961年BurroughsB5000は、MMUがないにもかかわらず( Atlasの後)仮想メモリをサポートする最初の商用システムでした[13]。これは、MMUの2つの機能(仮想メモリアドレスとメモリ保護)を異なるアーキテクチャアプローチで提供します。 。

まず、仮想メモリアドレスのマッピングでは、MMUを必要とせずに、MCPシステムは記述子ベースです。割り当てられた各メモリブロックには、ブロックのプロパティ(つまり、サイズ、アドレス、およびメモリに存在するかどうか)を含むマスター記述子が与えられます。読み取りまたは書き込みのためにブロックにアクセスする要求が行われると、ハードウェアは記述子のプレゼンスビット(pbit)を介してブロックのプレゼンスをチェックします。

1のpbitは、ブロックの存在を示します。この場合、記述子の物理アドレスを介してブロックにアクセスできます。pbitがゼロの場合、MCP(オペレーティングシステム)に対して割り込みが生成され、ブロックが存在します。アドレスフィールドがゼロの場合、これがこのブロックへの最初のアクセスであり、割り当てられます(init pbit)。アドレスフィールドがゼロ以外の場合、それは以前にロールアウトされたブロックのディスクアドレスであるため、ブロックはディスクからフェッチされ、pbitは1に設定され、物理メモリアドレスはブロックを指すように更新されます。メモリ内(別のpbit)。これにより、記述子はMMUシステムのページテーブルエントリと同等になります。システムパフォーマンスは、pbitの数で監視できます。Init pbitは初期割り当てを示しますが、他のpbitのレベルが高い場合は、システムがスラッシングしている可能性があることを示しています。

したがって、すべてのメモリ割り当ては完全に自動化されており(最新のシステムの機能の1つ[14])、このメカニズム以外にブロックを割り当てる方法はありません。メモリブロックも自動的に破棄されるため、mallocやdeallocなどの呼び出しはありません。ブロックは実際に参照されるまで割り当てられないため、このスキームも怠惰です。メモリがほぼいっぱいになると、MCPはワーキングセットを調べ、圧縮を試み(システムはページングではなくセグメント化されているため)、読み取り専用セグメント(元のコピーから復元できるコードセグメントなど)の割り当てを解除し、最後の手段として、ダーティデータセグメントをディスクにロールアウトします。

B5000がMMUの機能を提供するもう1つの方法は、保護です。すべてのアクセスは記述子を介して行われるため、ハードウェアはすべてのアクセスが範囲内にあること、および書き込みの場合はプロセスに書き込み権限があることを確認できます。MCPシステムは本質的に安全であるため、このレベルのメモリ保護を提供するためにMMUは必要ありません。記述子はユーザープロセスに対してのみ読み取られ、システム(ハードウェアまたはMCP)によってのみ更新できます。(タグが奇数のワードは読み取り専用です。記述子のタグは5で、コードワードのタグは3です。)

ブロックは、プロセススタックのコピー記述子を介してプロセス間で共有できます。したがって、一部のプロセスには書き込み権限がありますが、他のプロセスにはありません。コードセグメントは読み取り専用であるため、再入可能であり、プロセス間で共有されます。コピー記述子には、マスター記述子配列内のマスター記述子のインデックスを提供する20ビットのアドレスフィールドが含まれています。これにより、非常に効率的で安全なIPCメカニズムも実装されます。ブロックのステータスが変更されたときに更新する必要があるのはマスター記述子のみであるため、ブロックは簡単に再配置できます。

他の唯一の側面はパフォーマンスです– MMUベースまたは非MMUベースのシステムはより良いパフォーマンスを提供しますか?MCPシステムは、MMUを備えた標準ハードウェア(たとえば、標準PC)の上に実装できます。システム実装が何らかの方法でMMUを使用している場合でも、これはMCPレベルではまったく表示されません。

も参照してください

参考文献

  1. ^ コンピューティングの無料オンライン辞書のメモリ管理ユニット
  2. ^ タネンバウム、アンドリューS.(2009)。最新のオペレーティングシステムアッパーサドルリバー(ニュージャージー):プレンティスホール。ISBN 978-0-13-600663-3
  3. ^ a b c d e Frank Uyeda(2009)。「講義7:メモリ管理」(PDF)CSE 120:オペレーティングシステムの原則カリフォルニア大学サンディエゴ校2013年12月4日取得
  4. ^ Spectra 70 70-46プロセッサーマニュアル(PDF)RCA1968年3月。p。4 2013年8月15日取得
  5. ^ 「Z8010Z8000MMUメモリ管理ユニット製品仕様」(PDF)ザイログ1985年4月。 {{cite journal}}引用ジャーナルには|journal=ヘルプ)が必要です
  6. ^ 「1983/84データブック」(PDF)Zilog:215–234 2021-04-27を取得 {{cite journal}}引用ジャーナルには|journal=ヘルプ)が必要です
  7. ^ シュミット、スティーブン(1983年4月)。「マイクロコンピュータ用仮想メモリ」バイト8、いいえ。4. pp。234–235。
  8. ^ 「Cortex-A8テクニカルリファレンスマニュアル」(PDF)Infoventer.arm.com 2017年5月3日取得
  9. ^ 「IBMアーカイブ:システム/ 360の日付と特性」03.ibm.com 2017年5月3日取得
  10. ^ a b 「IBMSystem / 360モデル67の機能特性、第3版」(PDF)1972年2月。GA27-2719-2 2021年10月29日取得
  11. ^ Sun 68000ボードユーザーズマニュアル、Sun Microsystems、Inc、1983年2月、リビジョンB
  12. ^ 「AMD64アーキテクチャプログラマーズマニュアル第2巻:システムプログラミング」(PDF)2017年3月2017年12月5日取得
  13. ^ タネンバウム、アンドリューS。; ヘルダー、ジョリットN。; ボス、ハーバート(2006年5月)。「オペレーティングシステムの信頼性と安全性を高めることができますか?」コンピューター39(5):44–51。CiteSeerX10.1.1.112.3028_ 土井10.1109 /MC.2006.156 
  14. ^ ダニエルHHインガルス(1981年8月)。「Smalltalkの背後にある設計原則」バイトマガジン2007年9月27日にオリジナルからアーカイブされました