日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

2 《Undocumented Windows 2000 Secrets》翻譯 --- 第四章( 四 )


struct
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // read/write
unsigned US : 1; // user/supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned A : 1; // accessed
unsigned D : 1; // dirty
unsigned Reserved : 1;
unsigned G : 1; // global page
unsigned Available : 3; // available to programmer
unsigned PFN : 20; // page-frame number
};
};
}
X86_PTE_4K, *PX86_PTE_4K, **PPX86_PTE_4K;
#define X86_PTE_4K_ sizeof (X86_PTE_4K)
// -----------------------------------------------------------------
typedef struct _X86_PNPE // page not present entry
{
union
{
struct
{
DWORD dValue; // packed value
};
struct
{
unsigned P : 1; // present (0 = not present)
unsigned Reserved1 : 9;
unsigned PageFile : 1; // page swapped to pagefile
unsigned Reserved2 : 21;
};
};
}
X86_PNPE, *PX86_PNPE, **PPX86_PNPE;
#define X86_PNPE_ sizeof (X86_PNPE)
// -----------------------------------------------------------------
typedef struct _X86_PE // general page entry
{
union
{
DWORD dValue; // packed value
X86_PDBR pdbr; // page-directory Base Register
X86_PDE_4M pde4M; // page-directory entry (4-MB page)
X86_PDE_4K pde4K; // page-directory entry (4-KB page)
X86_PTE_4K pte4K; // page-table entry (4-KB page)
X86_PNPE pnpe; // page not present entry
};
}
X86_PE, *PX86_PE, **PPX86_PE;
#define X86_PE_ sizeof (X86_PE)
列表 4-3. i386 的 PDBR 、 PDE 、 PTE 和 PNPE
在 列表 4-4 中,我增加了線性地址的結(jié)構(gòu)化表示 。這些結(jié)構(gòu)是 圖 4-3 和 4-4 中的“線性地址”的正式形式 。
l X86_LINEAR_4M 該結(jié)構(gòu)是指向 4MB 數(shù)據(jù)頁的線性地址的正式形式,如 圖 4-4 所示 。頁目錄索引( PDI )是一個(gè)頁目錄的索引,頁目錄地址由 PDBR 給出,使用 PDI 可選擇頁目錄中的一個(gè) PDE。22 位的 Offset 成員指向一個(gè)目標(biāo)地址,此目標(biāo)地址對應(yīng) 4MB 的物理頁 。
l X86_LINEAR_4K 是一個(gè) 4KB 線性地址類型的變量,如 圖 4-3 所示 。該結(jié)構(gòu)由三個(gè)位域組成:和 4MB 地址類似,高 10 位為 PDI,用來選擇一個(gè) PDE ;頁表索引 PTI 的任務(wù)與 PDI 相似,指向由 PDE (該 PDE 由前面的 PDI 指定)確定的頁表中的一個(gè) PTE ;剩余的 12 個(gè)位是在 4KB 物理頁中的偏移量 。
l X86_LINEAR 是另一個(gè)為使用方便而加入的結(jié)構(gòu) 。該結(jié)構(gòu)只是簡單的將 X86_LINEAR_4K 和 X86_LINEAR_4M 聯(lián)合為一個(gè)數(shù)據(jù)類型 。詳見 列表 4-4。
typedef struct _X86_LINEAR_4M // linear address (4-MB page)
{
union
{
struct
{
PVOID pAddress; // packed address
};
struct
{
unsigned Offset : 22; // offset into page
unsigned PDI : 10; // page-directory index
};
};
}
X86_LINEAR_4M, *PX86_LINEAR_4M, **PPX86_LINEAR_4M;
#define X86_LINEAR_4M_ sizeof (X86_LINEAR_4M)
// -----------------------------------------------------------------
typedef struct _X86_LINEAR_4K // linear address (4-KB page)
{
union
{
struct
{
PVOID pAddress; // packed address
};
struct
{
unsigned Offset : 12; // offset into page
unsigned PTI : 10; // page-table index
unsigned PDI : 10; // page-directory index
};
};
}
X86_LINEAR_4K, *PX86_LINEAR_4K, **PPX86_LINEAR_4K;
#define X86_LINEAR_4K_ sizeof (X86_LINEAR_4K)
// -----------------------------------------------------------------
typedef struct _X86_LINEAR // general linear address
{
union
{
PVOID pAddress; // packed address
X86_LINEAR_4M linear4M; // linear address (4-MB page)

推薦閱讀