3

PAEが無効になっているx86システムのPTEに対応する構造/共用体のLinuxソースコードを調べようとしています。これまでのところ、arch/x86/include/asm/page_32.h には次のものしか見つかりませんでした。

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

インテル リファレンス マニュアル Vol 3A を目の前に開いていて、マニュアルで説明されているように、PTE に存在する多数の奇妙なフィールドに対応するものは何もないので、今は少し混乱しています。

これは些細な質問かもしれませんが、私にとっては、Linux カーネルのメモリ管理を理解する過程でつまずきのようになっています。

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

4

2 に答える 2

5

pteval_t は、ページ テーブル エントリを不透明なブロブとして扱うだけです。あなたが見ているアーキテクチャでは、それは 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
于 2009-09-18T01:08:49.483 に答える