少し古い記事を読んでいます。カーネル管理メモリそして、ページテーブルエントリ(PTE)がどこに行くのかという質問があります。
この例では、著者はメモリが4 GBでPAEを持たない32ビットシステムを使用していると仮定しています。この資料では、3 GBを仮想メモリとして指定できると想定しています(4 KBページの3 GB == 786,432ページ)。ただし、各ページに4バイトのPTEがある場合は、それ自体が約3.1 MBのメモリを占有し、これはカーネルによって予約される必要があります。これはカーネルメモリの一部ですか?つまり。カーネルはユーザーアドレス指定可能な3GB以上のメモリを予約しますか?
もしそうなら、カーネルは最初にどのくらいのカーネル(システム)メモリが必要か、そして起動時にユーザーがアドレス指定できるとマークできるメモリの量はどのくらいになるかを計算して把握しますか?
カーネル/システム予約メモリには何がありますか?
答え1
通常、PAEなしのx86では、ユーザー/カーネルの分割は3Gb / 1Gbです。つまり、上位 1GB のメモリはカーネル用に予約されており、ユーザ空間は下位 3GB のメモリにアクセスするという意味です。これは、ページテーブル(CR3)を指すレジスタを更新し、コンテキスト切り替えが発生するたびにTLBをフラッシュすることを避けるために行われます。この最適化により、CR3が更新され、他のプロセスがスケジュールされている場合にのみTLBがフラッシュされます。
仮想アドレスの解釈方法に関する情報は、次の3つの場所に保存されます。
- 仮想メモリ領域(別名VMA、別名マップ):この領域は、隣接するメモリ領域をバックアップストア(匿名マップのファイルまたはスワップ領域)に関連付けます。
- ページテーブルエントリ:このエントリは、仮想アドレスの全ページを対応する物理アドレスに関連付け、権限やその他のフラグを含みます。 PTEがロードされました怠惰VMAでは:PTEは必ずしもインスタンス化される必要はありません(アクセスが試みられる前にそのページがページングされます。これは要求ページングです)。 3GB メモリにアクセスするプロセスにのみ 3Mb ページテーブルが必要です。
- TLB:ページテーブルのハードウェアキャッシュ。