質問

PAEが無効になっているx86システムのPTEに対応する構造/ユニオンのLinuxソースコードを調べようとしました。これまでのところ、arch / x86 / include / asm / page_32.hで次のものだけを見つけました

typedef union {
        pteval_t pte;
        pteval_t pte_low;
} pte_t;

Intel Reference Manual Vol 3Aを目の前で開いているので、混乱しています。マニュアルで説明されているように、PTEにある10個の奇数フィールドに対応するものはありません。

これはささいな質問かもしれませんが、私にとっては、Linuxカーネルのメモリ管理を理解するプロセスにおいて、つまずきのブロックのようになりました。

編集:2.6.29ソースを持っています

役に立ちましたか?

解決

pteval_tは、ページテーブルエントリを不透明なblobとして扱います-ご覧のアーキテクチャでは、32ビットの符号なしの値です。

ビット単位の演算子とマスクを使用してPTE内のフィールドにアクセスします-便利なソース(Linux 2.6.24)では、これらは include / asm-x86 / pgtable_32.h で定義されています。 Intelリファレンスマニュアルに表示されるフィールド(そのほとんどはシングルビットフラグです)は、ここで定義されています-例:

#define _PAGE_PRESENT   0x001
#define _PAGE_RW    0x002
#define _PAGE_USER  0x004
#define _PAGE_PWT   0x008
#define _PAGE_PCD   0x010
#define _PAGE_ACCESSED  0x020
#define _PAGE_DIRTY 0x040
#define _PAGE_PSE   0x080   /* 4 MB (or 2MB) page, Pentium+, if present.. */
#define _PAGE_GLOBAL    0x100   /* Global TLB entry PPro+ */
#define _PAGE_UNUSED1   0x200   /* available for programmer */
#define _PAGE_UNUSED2   0x400
#define _PAGE_UNUSED3   0x800

他のヒント

O'REILLYから Linuxカーネルについてを購入することと、 Linuxデバイスドライバー。そして、 LWN.net に登録します。ただし、サブスクリプションがなくてもカーネルインデックスページからかなり良いスタートを切ることができます。

メモリ管理については、「メモリ管理」のインデックスページをご覧ください。セクション...および「大容量メモリシステム」セクション。後者には、コードのこの領域を理解するのに役立つはずの4レベルのページテーブルへの移行に関する記事がいくつかあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top