Apply suggestions from code review

This commit is contained in:
woodyZootopia
2021-05-26 12:32:40 +09:00
parent 7fb46ee069
commit 8cb4cf16df

View File

@@ -164,7 +164,7 @@ x86_64アーキテクチャは4層ページテーブルを使っており、ペ
![An example 4-level page hierarchy with each page table shown in physical memory](x86_64-page-table-translation.svg) ![An example 4-level page hierarchy with each page table shown in physical memory](x86_64-page-table-translation.svg)
現在有効なレベル4ページテーブルの物理アドレス、つまりレベル4ページテーブルの「」は`CR3`レジスタに格納されています。それぞれのページテーブルエントリは、次のレベルのテーブルの物理フレームを指しています。そして、レベル1のテーブルは対応するフレームを指しています。なお、ページテーブル内のアドレスは全て仮想ではなく物理アドレスであることに注意してください。さもなければ、CPUは変換プロセス中にそれらのアドレスも変換しなくてはならず、無限再帰に陥ってしまうかもしれないからです。 現在有効なレベル4ページテーブルの物理アドレス、つまりレベル4ページテーブルの「<ruby>根<rp> (</rp><rt>root</rt><rp>) </rp></ruby>」は`CR3`レジスタに格納されています。それぞれのページテーブルエントリは、次のレベルのテーブルの物理フレームを指しています。そして、レベル1のテーブルは対応するフレームを指しています。なお、ページテーブル内のアドレスは全て仮想ではなく物理アドレスであることに注意してください。さもなければ、CPUは変換プロセス中にそれらのアドレスも変換しなくてはならず、無限再帰に陥ってしまうかもしれないからです。
上のページテーブル階層構造は、最終的に青色の2つのページへの対応を行っています。ページテーブルのインデックスから、これらの2つのページの仮想アドレスは`0x803FE7F000``0x803FE00000`であると推論できます。プログラムがアドレス`0x803FE7F5CE`から読み込もうとしたときに何が起こるかを見てみましょう。まず、アドレスを2進数に変換し、アドレスのページテーブルインデックスとページオフセットが何であるかを決定します 上のページテーブル階層構造は、最終的に青色の2つのページへの対応を行っています。ページテーブルのインデックスから、これらの2つのページの仮想アドレスは`0x803FE7F000``0x803FE00000`であると推論できます。プログラムがアドレス`0x803FE7F5CE`から読み込もうとしたときに何が起こるかを見てみましょう。まず、アドレスを2進数に変換し、アドレスのページテーブルインデックスとページオフセットが何であるかを決定します
@@ -219,7 +219,7 @@ pub struct PageTable {
7 | huge page/null | P1とP4においては0で、P3においては1GiBのページを、P2においては2MiBのページを作る 7 | huge page/null | P1とP4においては0で、P3においては1GiBのページを、P2においては2MiBのページを作る
8 | global | キャッシュにあるこのページはアドレス空間変更の際に初期化されないCR4レジスタのPGEビットが1である必要がある 8 | global | キャッシュにあるこのページはアドレス空間変更の際に初期化されないCR4レジスタのPGEビットが1である必要がある
9-11 | available | OSが自由に使える 9-11 | available | OSが自由に使える
12-51 | physical address | 12-51 | physical address | ページ単位にアラインされた、フレームまたは次のページテーブルの52bit物理アドレス
52-62 | available | OSが自由に使える 52-62 | available | OSが自由に使える
63 | no execute | このページにおいてプログラムを実行することを禁じるEFERレジスタのNXEビットが1である必要がある 63 | no execute | このページにおいてプログラムを実行することを禁じるEFERレジスタのNXEビットが1である必要がある