2016-11-18 4 views
0

物理メモリと物理メモリはページに分割されています。ページが有効かどうかを確認するには、ページテーブルエントリに有効なビットがあるかどうかを確認します。しかし、ページ内で、MMUはアドレスが有効かどうかをどのように知ることができますか?たとえば、ヒープの一部に属するページ。そのページのすべてのアドレスが有効であるわけではありませんので、MMUはどのようにアドレスを確認してその有効なアドレスを確認できますか?ページ内のアドレスが有効かどうかを確認する方法

答えて

0

ページは、MMUが情報を格納するメモリの最小単位です。これは基本的に「ページ」の定義です。したがって、ページ内のすべてのアドレスが等しく有効であるかどうかはわかりません。ページの一部がアクセス可能ではない(おそらく割り当てられたオブジェクトの外にある)ものであれば、それはMMUが検出できるものではありません。

0

論理メモリはPAGESに分割されます。物理メモリはPAGE FRAMESに分割されています。ページテーブル:

  1. 識別する論理ページがプロセスのアドレス空間
  2. 仮想メモリの場合、ページ
  3. から物理ページへのマッピングのための保護(または全くマッピングの一部でありますページアウトされます)。

メモリアクセスの有効性は、アクセスの種類、現在のプロセッサモード、およびページテーブルの状態によって異なります。論理

、メモリアクセスがプロセッサ起こる:

  1. 論理ページにアドレスを分解し、論理ページ(すなわち、ページ・サイズに依存する)へのオフセット。
  2. 論理ページのページテーブルエントリをルックアップします。ページテーブルエントリが存在しない可能性があります。線形ページテーブルでは、テーブルのサイズが制限されることがあります。マルチレベルのページテーブルでは、ページのネストされたテーブルが存在しない可能性があります。対応するエントリ=>アクセス違反がある場合。

  3. ページテーブルエントリが有効なページを示しているかどうかを確認します。これは通常有効なビットで行われますが、それを行う他の方法があります。ページが無効な場合=>アクセス違反。

  4. 現在のプロセッサモードのページでアクセスのタイプ(読み取り/書き込み/実行)が許可されているかどうかを確認します。そうでない場合=>アクセス違反

  5. 論理ページが物理ページフレームにマップされているかどうかを確認します(これは、多くの場合、手順3の一部として実行されます)。そうでない場合=>ページフォールト

"ヒープ"は単なるメモリです。プロセスは複数のヒープを同時に持つことができます。ヒープマネージャはページを論理アドレス空間にマッピングし、それらのページを管理します。ヒープは連続したメモリに存在する必要もありません。

通常、ハイレベルのメモリダイアグラムでは「ヒープ」が表示されますが、これは何が起こっているのかを全体的に単純化したものです。

関連する問題