Intel 80386 からのオペレーティング システムのメモリ管理メカニズムについての話

Intel 80386 メモリ管理

参考記事もいくつかあります

1. メモリ管理

メモリ管理は、マイクロプロセッサがバス アドレス上で物理メモリをアドレス指定するハードウェア メカニズムです。しかし、プログラムに物理メモリ容量よりも大きな空間を提供するために、外部メモリ(ディスクなど)のサポートによって実現される仮想メモリの概念が導入され、一般に仮想アドレスと呼ばれます。論理アドレスといいます。80386 には、セグメント管理とページ管理の両方があります。セグメントとページの管理はオペレーティング システムの責任であり、80386 はハードウェアからの管理メカニズムを提供します。

どのメカニズムが使用されるかを要約すると、次のようになります。

機構
セグメント管理メカニズム
ページ管理を直接セグメント化する
セカンダリページテーブル
速い時計

ストレージ管理でレジスタを使用します。概要は次のとおりです。

80386 マイクロプロセッサには、汎用レジスタ、セグメント レジスタ、命令ポインタおよびフラグ レジスタ、システム アドレス レジスタ、制御レジスタ、デバッグ レジスタ、およびテスト レジスタの 7 つのカテゴリに合計 34 個のレジスタがあります。

最初の 4 種類のレジスタの概略図:

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-YrP0FJQA-1651556465675) (C:\Users\15191\Desktop\ComputerScienceClassNote\OS\) CPU\80386 register.png )]

2. Intel 80386 マイクロプロセッサの 3 つの動作モード

3 つの働き方:

  • 実アドレスモード
  • 仮想アドレス保護モード
  • 仮想8086方式。

1. 実アドレス方式

386 はハードウェア リセット後はこのモードになり、32 ビット アドレス バスの下位 20 ビット アドレスのみを使用でき、アドレス空間は 1MB です。

現時点では 8086/8088 マイクロプロセッサですが、違いは、すべての 8086/8088 命令を実行できるだけでなく、32 ビット算術命令も実行できることです。

システム初期化領域は FFFFFFF0H ~ FFFFFFFFH 記憶領域にあります。

このモードは8086と互換するように設定されており、実アドレスモードから保護された仮想アドレスモードへの変更も可能です。

物理アドレスは、8386 チップ アドレス リードによって送信される下位 20 ビットのアドレス コードです。メモリ デコード後、読み取りおよび書き込みのためにストレージ ユニットが選択されます。物理アドレスは 5 桁の 16 進アドレスで表すことができます。

メモリアドレスのセグメンテーションとは、1MBのメモリ空間をいくつかのセグメントに分割することで、各セグメントの最大容量は64KBで、各セグメントの先頭アドレスの上位16ビットのバイナリコードがそのセグメントのセグメント番号(セグメントベースアドレスといいます)となります。

メモリがセグメンテーション管理を採用した後、セグメント アドレスはセグメント レジスタ CS、DS、SS、ES に格納され、マイクロプロセッサのセグメント レジスタがメモリ内の異なるセグメントを指すようにセグメント レジスタに異なる値が設定されます。メモリー。

オフセット アドレスは、セグメントの最初のアドレスを基準としたセグメント内のオフセットです。物理アドレスを形成するには、セグメント アドレスを 4 ビット左にシフトしてセグメント ベース アドレスを取得し、オフセット アドレス値を加算して 20 ビットの物理アドレスを形成します。

2. 仮想アドレスの保護方式

Intel 80386/486 のキー制御レジスタ CR0 の最下位ビットが PE (Protection Enable) 保護モード有効ビットの場合、これは CPU を仮想アドレス保護モードで起動するために使用されます。**PE=0 は CPU が実アドレス モードで動作することを意味し、PE=1 は CPU が仮想アドレス保護モードで動作することを意味します。

80386/486 のメモリ管理メカニズムには、セグメンテーションとページング管理が採用されています。

セグメンテーション メカニズムでは、最初に論理アドレスをリニア アドレスに変換し、次にページング メカニズムを使用してリニア アドレスを物理アドレスに変換します。

(セグメントの 2 次元アドレスは、セグメント テーブルを介して線形アドレスに変換され、次にページ テーブルを介して物理アドレスに変換されます。これが MMU の機能です)

論理アドレスはセグメントアドレスとオフセットから構成され、論理アドレス=セグメントアドレス:オフセットアドレスというプログラム中でのメモリアドレスの表現方法です。ページングが無効になっている場合、リニア アドレスは物理アドレスになります。

(1) セグメントセレクタとセグメントレジスタ

セグメント レジスタはセグメント セレクタを格納するために使用されます。セグメント レジスタには CS、DS、SS、ES、FS、GS が含まれます。セグメント セレクタは 16 ビットで、オフセット ビットは 32 ビット長のフィールドです。

セグメントセレクタは 16 ビットで構成され、さらに 3 つの部分、すなわち 13 ビットのインデックスフィールド、1 ビットのインジケータフィールド TI、および 2 ビットのリクエスト特権レベルフィールド RPL に分割されます。

セグメントセレクター
13ビットのインデックスフィールド 1ビットのインジケータフィールドTI 2ビットのリクエスト特権レベルフィールドRPL
  • 人差し指は、GDT または LDT に配置された対応するセグメント記述子のエントリを指定します。
  • TI フラグの既知のセグメント記述子は GDT (TI=0) または LDT (TI=1) にあります。
  • RPL は、現在のセグメント セレクターが CS レジスタにロードされるときの CPU の現在の特権レベルを示します。

(2) セグメント記述子

各セグメントは、セグメントの特性を記述する64 ビット (8 バイト) のセグメント記述子によって表されます。

セグメント記述子は、**グローバル記述子テーブル (GDT)またはローカル記述子テーブル (LDT)**に保存されます(これら 2 つはセグメント テーブルであり、グローバル セグメント テーブルとローカル セグメント テーブルがあります)。

各セグメント記述子は 8 バイトであるため、 GDT または LDT のセグメント記述子の相対アドレスは、セグメント セレクターの最上位 13 ビット (つまり、セグメント セレクターのインデックス フィールド) の値を 8 で乗算した値になります。

セグメントセレクター

セグメント記述子のフィールドとフラグの意味は次のとおりです。

  • 1)ベース アドレス フィールド Base (ベース アドレス フィールド): セグメントの最初のバイトのリニア アドレスが含まれます。
  • 2)セグメント制限フィールド Limit (セグメント制限フィールド): セグメントの長さを指定するために使用されます。G=0 の場合、セグメント長の制限は 1 バイトから 1MB の範囲で、単位はバイトです。G=1 の場合、セグメント長の制限は 4KB ~ 4GB の範囲で、単位は 4KB です。
  • 3)粒度フラグ G : このビットが 0 の場合、セグメント単位はバイト、ビットが 1 の場合、セグメント単位は 4KB です。これは、セグメント制限フィールド Limit と組み合わせて理解できます。
  • 4)セグメントタイプフィールドTYPE(タイプフィールド):セグメントのタイプ特性とそのアクセス権を記述する。このフィールドの解釈は、記述子タイプ フラグ S によって異なります。記述子タイプ フラグは、S によってコードまたはデータ セグメント記述子、またはシステム記述子として解釈されます。TYPE フィールドのエンコーディングは、コード、データ、またはシステム記述子によって異なります。
  • 5)ディスクリプタタイプフラグS(ディスクリプタタイプフラグ):S=0の場合、セグメントディスクリプタは、LDTなどのキーデータ構造を格納するシステムセグメントディスクリプタであり、S=1の場合、コードまたはデータセグメントディスクリプタを格納する。
  • 6)ディスクリプタ特権レベルフィールドDPL(ディスクリプタ特権レベル):ディスクリプタの特権レベルは、セグメントへのアクセスを制御するために使用され、このセグメントにアクセスするためにCPUによって必要とされる最小優先度を示す。特権レベルの範囲は 0 ~ 3 です。レベル 0 が最高で、レベル 3 が最低です。
  • 7)セグメント存在フラグP(セグメント存在):**セグメントがメモリ上にあるか(P=1)、メモリ上にないか(P=0)を示すために使用される。**Linux ではセグメント全体がディスクにスワップされないため、Linux では常にこのフラグを 1 に設定してください。
  • 8) D/B (デフォルトの演算サイズ/デフォルトのスタック ポインタ サイズおよび/または上限) フラグ (デフォルトの演算サイズ/デフォルトのスタック ポインタ サイズおよび/または上限): 実行可能コード セグメントは、セグメント記述子に従って記述されます。拡張データセグメントもスタックセグメントです。このフラグにはさまざまな機能があります。32 ビット コードおよびデータ セグメントの場合、このフラグは常に 1 に設定する必要があります。16 ビット コードおよびデータ セグメントの場合、このフラグは 0 に設定する必要があります。
  • 9)利用可能なビットと予約されたビット (利用可能なビットと予約されたビット) : オペレーティング システムによって使用されますが、Linux はこのフィールドを無視します。

(3) セグメント記述テーブルとセグメント記述テーブルレジスタ

80386/486 マイクロプロセッサには、グローバル記述子テーブル レジスタ GDTRローカル記述子テーブル レジスタ LDTR、および割り込み記述子テーブル レジスタ IDTRがあり、それぞれグローバル記述子テーブル GDTローカル記述子テーブル LDT、および割り込み記述子テーブル IDTを見つけます。

(ストレージセグメントヘッダーポインタ)

(4) セグメンテーションとページングのメカニズム

セグメンテーション ユニットは、論理アドレスをリニア アドレスに変換します。

セグメント セレクターの上位 14 ビット (13 ビットのインデックス番号と 1 ビットの TI ビット) がセグメント記述子の選択に使用されるため、仮想メモリ内のセグメントの最大数は 16K (2 の 14 乗) に達する可能性があります

TI ビットが 1 の場合、ローカル アドレス空間にアクセスします通常、GDT を定義する場合、すべてのタスクはグローバル アドレス空間を共有しますが、各プロセスが GDT にセグメントを格納するだけでなく追加のセグメントを作成する必要がある場合は、ローカル アドレス空間を独立して占有する LDT を作成できます。

メモリ上の GDT のアドレスとサイズはgdtrコントロール レジスタに格納され、現在使用されている LDT のアドレスとサイズはldtrコントロール レジスタに格納されます。

論理アドレスが対応するリニア アドレスに変換される方法。セグメンテーション ユニットは次の操作を実行します。

  • 1)セグメント セレクターの TI フィールドをチェックして、セグメント記述子がどの記述子テーブル (GDT または LDT) に格納されているかを確認します。
  • 2) セグメント セレクターのインデックス フィールドは 8 倍され、** は記述子テーブル内のセグメント記述子の相対アドレスを計算します (GDT または LDT、前のステップで決定)。**記述子テーブルの最初のアドレスは、gdtr制御レジスタまたはldtr制御レジスタに保存されます (どのレジスタが保存されるかは、前のステップで決定されます)。
  • 3)セグメント記述内のベース フィールドの値は、セグメント ベース アドレスに論理アドレスを加えたもので、リニア アドレスが得られます。

ページング ユニットは、リニア アドレスを物理アドレスに変換します。

仮想アドレス保護モード(制御レジスタ CR0 の PE ビットが 1)では、制御レジスタ CR0 の最上位ビット PG によってページング機構を開始するかどうかが決まります(PG=1 の場合はページング機構が有効)。 ; リニアアドレスは物理アドレスに変換できます。

PG=0 の場合、ページング機構は無効となり、リニアアドレスがそのまま物理アドレスとして使用されます。

32 ビットのリニア アドレスは 3 つの部分に分割されます。上位 10 ビットはページ ディレクトリ インデックス、中間の 10 ビット ページ テーブル インデックス、および下位の 12 ビット オフセットです

リニアアドレスの変換は変換テーブルに基づいて 2 つのステップに分かれており、最初のステップの変換テーブルはページ ディレクトリ テーブル (ページ ディレクトリ)と呼ばれ、2 番目のステップの変換テーブルはページ テーブルと呼ばれます(ページテーブル)

つまり、ここでは 2 レベルのページ テーブル メカニズムが使用されています。

ページ テーブルのメカニズムを確認します。

  • リニア アドレスはページと呼ばれる固定長のグループに分割され、ページング ユニットはすべての RAM をページ フレームと呼ばれる固定長のグループに分割します。
  • 各ページ フレームはページと同じ長さであり、ページ フレームにはページが含まれます。ページ フレームはメモリの一部です。ページは論理的な概念であり、線形アドレスのセットと、このアドレス セットに含まれるデータの両方を指します。ページに含まれるデータは、メモリ内またはディスクの中央にあります。 。

リニア アドレスが対応する物理アドレスに変換される方法。ページング ユニットは次の操作を実行します。

  • 1) ページ ディレクトリ ベース アドレス レジスタ CR3 は、ページ ディレクトリ ベース アドレスから始まるページ ディレクトリのページ フレーム アドレス (つまり、ページ ディレクトリ ベース アドレス)にリニア アドレス内のページ ディレクトリ インデックスの値を加えたものを提供します。これはページ ディレクトリ テーブルのページ ディレクトリ エントリで見つかり、ページ テーブルのベース アドレス値はページ ディレクトリ エントリから取得できます(その下位 12 ビットは 0)。
  • 2) ページ テーブルのベース アドレス値から開始し、リニア アドレスにページ テーブル インデックスの値を加算して、ページ フレームの物理アドレス (つまり、ページ フレームの最初の物理アドレス) を取得します。ページフレームの物理アドレスをリニアアドレスのオフセットに加算して、ページフレーム内のリニアアドレスの物理アドレスを取得する。

80386 以降、Intel マイクロプロセッサのページング ユニットは 4KB ページを処理し、各ページの開始アドレスは常に下位 12 ビットが 0 のリニア アドレスになります。ページング管理は、リニア アドレス空間内の任意のページを物理空間内のページにマップします。ページング管理メカニズムを使用してリニア アドレスから物理アドレスへの変換マッピングを実現する主な目的は、仮想メモリの実現を容易にすることです。セカンダリ ページ テーブルを使用する目的は、各プロセス ページ テーブルに必要な RAM の量を削減することです。第 1 レベルのページ テーブルのみが使用される場合、各プロセスのページ テーブルを表すために 2 ~ 20 乗のテーブル エントリがあり、すべてのページ テーブル エントリを表すには 1 つのテーブル エントリの 4 バイトに 4MB RAM が必要です。

2 レベルのページ テーブルには、同じ形式のページ ディレクトリ エントリとページ テーブル エントリがあります。(2段のページ表になっておりますので、適度に復習していただけます)

  1. ページ フレーム アドレス:ページの開始アドレスは、ページ フレーム アドレスと呼ばれますページのサイズは 4KB であるため、ページ テーブル エントリでは、上位 20 ビットはページ フレームのアドレスを記述するために使用され、下位 12 ビットはページの制御とステータスを記述するために使用されます。第 1 レベルのページ ディレクトリでは、ページ フレーム アドレスは対応するページ テーブルの開始アドレスを指し、第 2 レベルのページ テーブルでは、ページ フレーム アドレスはメモリ内のページの開始アドレスを指します。
  2. 存在ビットP:P=1、参照ページ(ページテーブルエントリ)が物理メモリに存在することを示す、P=0、参照ページ(ページテーブルエントリ)が物理メモリに存在しないことを示す。リニアアドレス変換を実行するために必要なページテーブルエントリまたはページディレクトリエントリのPが0の場合、ページングユニットはリニアアドレスを制御レジスタCR2に格納し、No.14例外:ページフォールト例外を発生します。
  3. 読み取り/書き込みビット R/W: R/W=1 書き込み、それ以外の場合は読み取り。アドレス変換とは関係なく、ページ(ページテーブル)へのアクセス権を示すために使用されます。
  4. ユーザー/モニタービット U/S: ページ (ページテーブル) にアクセスするために必要な特権レベルを示すために使用されます。
  5. アクセスビット A: この項目で指定されたページが読み取られたか書き込まれたかを示すために使用されます。ディレクトリ エントリで A=1 の場合は、その項目で示されるページ テーブルがアクセスされたことを意味し、ページ テーブル エントリで A=0 の場合は、ページ テーブル アイテムで示されたメモリ内のページがアクセスされていないことを意味します。アクセスされました。ページング ユニットがこのフラグをリセットすることはありませんが、オペレーティング システムによってリセットされる必要があります
  6. ダーティ ビット D: ページ テーブル エントリでのみ使用されます。このフラグは、ページ フレームが書き込まれるたびに設定されます。
  7. 利用可能なフィールド AVL: このフィールドには合計 3 ビットがあり、システム ソフトウェア設計者によって使用されます。ページの使用状況に関連する情報をこのフィールドに配置すると、どのページをメモリから移動する必要があるかを分析できます。
  8. PWT と PCD:ハードウェア キャッシュがページ (ページ テーブル) を処理する方法を制御します

リクエストページの表を参照してください。

ページ番号 メモリブロック番号 ステータスビット アクセスフィールド ビットを変更する 外部メモリアドレス
新しい 新しい 新しい 新しい
これは、ページ テーブルの連続性によって暗黙的に保存されます (実際には、連続空間のランダム ストレージ特性も使用され、マッピングは高速アクセスになります)。 メモリ内のページのベースアドレス 1ビット、メモリにロードするかどうか 置換アルゴリズムの最近の訪問数または最後の訪問時間を記録します。 ページがメモリにロードされた後に変更されたかどうか 外部メモリ内のページの場所

比較

ページフレームアドレス プレゼンスビットP 読み取り/書き込みビット R/W ユーザー/モニタービット U/S アクセスビットA ダーティビットD 可用性ドメインAVL PWTとPCD
実在住所 ステータスビット 保護機構 保護機構 ビットを変更する

(5) 変換ルックアサイドバッファ TLB

(つまり、高速テーブル機構がここに実装されています)

上記の線形アドレスの変換プロセスから、アドレス変換には 2 つのメモリ アクセスが必要であることがわかります。1 つはページ ディレクトリ テーブルへのアクセス、もう 1 つはページ テーブルへのアクセスです。

80386では、アドレス変換処理を高速化するために、Translation Lookside Bufferチップ内部に変換ルックアサイドバッファTLB()と呼ばれるコンポーネントを設けています。

TLB の各項目には、32 個のリニア アドレス値 ((リニア アドレスの上位 20 ビット、つまりページのベース アドレス) と、対応する物理アドレス値 (物理アドレスの上位 20 ビット、つまりページのベース アドレス) が格納されます。ページ フレームのベース アドレス)、ページへのアクセス権などのプロパティが含まれます。

リニア アドレスが変換されるとき、リニア アドレスの上位 20 ビットが TLB 内のリニア アドレスの値と比較されます。

  • 見つからない場合は、上記の変換方法で対応する物理アドレスが計算され、その物理アドレスが TLB エントリに保存されます (ミス、置換、完全置換戦略の使用)。
  • それが分かればページフレームのベースアドレスが得られ、リニアアドレスの下位12ビットを加算することで物理アドレスが得られます。(打つ)

TLB は 32 個の項目を持つため、現在一般的に使用されている 32 ページとページ フレームの対応を表すことができ、各ページは 4KB であるため、TLB は実際には 128K ((32*4KB=128KB)) のリニア アドレスと対応する物理アドレスを表します。関係。

プログラムとデータの制限と、TLB には 128K アドレスの変換情報を収容できるため、TLB を使用したアドレス変換のヒット率は非常に高く、通常は最大約 98% です。

CPU の制御レジスタ CR3 の値が変更されると、新しいページ テーブルのセットが使用されるため、ハードウェアは TLB 内のすべてのエントリを自動的に無効にします。このようにして、同じ線形アドレスへの後続の変換を迅速に行うことができます。

3. 仮想 8086 モード

リアルアドレス方式と比較して、オプションのページング機能を備えています。このモードでは、セグメント レジスタのベース アドレスが 4 ビット左に移動され、次にオフセット アドレスが移動され、結果はリニア アドレスになります。ページング機能が有効な場合はページング機構を使用して物理アドレスに変換する必要があり、ページング機能が有効でない場合はリニアアドレスが物理アドレスになります。

3. Intel 80386の保護機構

1. セグメントレベルの保護

(1) 異なるタスク間の保護

異なるタスクを保護するには、各タスクを異なる仮想アドレス空間に配置することで実現します。

各タスクは仮想アドレスから物理アドレスへのマッピング関数を定義しており、タスクの切り替え後にマッピング関数も切り替わります。

各タスクは独立したマッピングテーブルのセット、つまり異なるアドレス変換機能を持っているため、プロセッサが新しいタスクを切り替えて実行する場合、新しいタスクのタスクを切り替えるための変換テーブルは重要な部分です。異なるタスクでは同じ仮想アドレスを持つ可能性がありますが、それぞれのマッピング機能により、異なるタスクの物理アドレスは異なります。

(2) 同一タスク内での保護

同じタスク内の保護メカニズムは、オペレーティング システムを保護するのにより適しており、オペレーティング システムがすべてのタスクで共有され、アプリケーションによる破損から各タスクでアクセスできるようになります。

各タスクが共有できる仮想アドレス空間はグローバル アドレス空間と呼ばれます。

1 つのタスクだけが使用する仮想アドレス空間、つまり他のタスクと共有していない仮想アドレスの部分をローカル アドレス空間と呼びます。

オペレーティング システムは仮想アドレス空間に共通領域を定義し、各タスクは仮想アドレス空間を使用して同じ物理アドレスにマップできます。

仮想アドレス保護モードでは、80386/486 マイクロプロセッサのセグメント レベルの保護は 4 つの保護レベルに分割されます。各タスクは次の場所で分割されます。

  • 特権レベル 0 は、最も信頼性の高い特権レベルです。
  • 特権レベル 3 は、最も信頼性の低い特権レベルです。

各特権レベルには、共有スタック領域に関連する保護の問題を回避するために、独自の独立したプログラム スタックがあります。

プログラムが 1 つの特権レベルから別の特権レベルに実行されると、プログラムによって使用されるスタックは、元の特権レベルのスタック セグメントから新しい特権レベルのスタック セグメントに変更されます。スタック セグメント レジスタ SS の場合、記述子特権レベル (DPL) は現在のコード セグメントの特権レベル (CPL) と等しくなければなりません。

各メモリ セグメントは特権レベルに関連付けられており、プログラムは十分な特権レベルを持つ対応するセグメントにのみアクセスできます。特権レベルは 0、1、2、および 3 の数字で表され、数字が大きいほど特権は低くなります。特権レベルを比較する場合、より高い特権レベルを示すには「内部」または「内部」などの用語を使用し、より低い特権レベルを示すには「外部」または「外部」などの用語を使用します。

  • 特権レベル 0 では、通常、主にタスクとメモリの管理、タスクと I/O デバイス間の通信などを含むオペレーティング システム カーネルが構成されます。
  • 特権レベル 1 では、ファイル共有やデータ通信など、カーネルのシステム標準サービスに属さないプログラムが動作します。
  • 特権レベル 2 では、通常、オペレーティング システムを拡張するカスタム プログラム (データベース管理プログラムや論理ファイル アクセス システムなど、カーネルに依存するサービス) が構成されます。
  • 特権レベル 3 はユーザー アプリケーションに割り当てられており、このレベルではアプリケーションとオペレーティング システムは相互に影響を与えずに分離されている必要があります。
  • 4 レベルの特権レベルをすべて使用する必要があるわけではなく、オペレーティング システム自体によって決定されます。

2. ページ保護の仕組み

Intel 80386 はページレベルの保護を提供します。ページング メカニズム** では 2 つの特権レベルのみが区別されます。特権レベル 0、1、2 は総称してシステム特権レベルと呼ばれ、特権レベル 3 はユーザー特権レベルと呼ばれます。**ページ ディレクトリ エントリおよびページ テーブル エントリの保護属性ビット R/W および U/S は、ページを保護するために使用されます。

  • (1) **R/W ビットは、エントリで指定されたページが読み取り、書き込み、または実行可能かどうかを示します。**R/W ビットによるページの書き込み保護は、プロセッサがユーザー特権レベルにある場合にのみ機能します。プロセッサがシステム特権レベルにある場合、R/W ビットは無視されます。つまり、いつでも機能します。読み取り、書き込み、実行が可能です。R/W=1 の場合、エントリで指定されたページは読み取り、書き込み、または実行できます。R/W=0 の場合、エントリで指定されたページは読み取りまたは実行できますが、指定されたページに書き込むことはできません。
  • (2) U/S ビットはユーザー/システム属性ビットを表し、ページ (ページ テーブル) にアクセスするために必要な特権レベルを示すために使用されます。U/S=1 の場合、エントリで指定されたページはユーザー レベルのページであり、任意の特権レベルで実行されるプログラムからアクセスできます。U/S=0 の場合、エントリで指定されたページはシステム レベルのページです。このページには、特権レベルで実行されるシステム プログラム アクセスのみがアクセスできます。

リニア アドレスを物理アドレスに変換する過程で、ページ レベルの保護チェックが実行され、ページ保護属性の規定に違反してページにアクセス (読み取り/書き込み/実行) された場合、ページ例外が発生します。引き起こされた。

おすすめ

転載: blog.csdn.net/interval_package/article/details/124554294