久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:127日期:2023-08-27 14:18:45

第四章 探索 Windows 2000 的內(nèi)存管理機制

翻譯: Kendiv( fcczj@263.ne t)

更新: Sunday, February 13, 2005

聲明:轉(zhuǎn)載請注明出處,并保證文章的完整性,本人保留譯文的所有權(quán)利。

內(nèi)存管理對于操作系統(tǒng)來說是非常重要的。本章將全面的縱覽 Windows 2000 的內(nèi)存管理機制以及 4GB 線性地址空間的結(jié)構(gòu)。針對此部分內(nèi)容,將解釋 Intel i386 CPU 家族的虛擬內(nèi)存尋址及其分頁能力,重點將在于 Windows 2000 的內(nèi)核是如何使用它們的。為了幫助我們對內(nèi)存的探索,本章提供了一對程序:一個內(nèi)核模式的驅(qū)動程序,該驅(qū)動用來收集系統(tǒng)相關(guān)的信息,另一個是用戶模式的應(yīng)用程序,該程序?qū)⑼ㄟ^設(shè)備 I/O 控制來查詢來自驅(qū)動程序的數(shù)據(jù),并在控制臺窗口中進行顯示。在剩余的章節(jié)中將重復(fù)使用“ Spy Driver ”模塊來完成其他幾個非常有趣的任務(wù)(這些任務(wù)都需要在內(nèi)核模式下執(zhí)行代碼)。請堅持閱讀完本章的第一部分,因為它將直接面對 CPU 硬件。不過,我仍然希望你不要跳過它,因為虛擬內(nèi)存管理是一個非常令人興奮的話題,理解它是如何工作的,將幫助你洞察復(fù)雜操作系統(tǒng)(如 Windows 2000 )采用的機制。

Intel i386 內(nèi)存管理機制

Windows 2000 內(nèi)核大量使用 Intel i386 CPU 系列提供的保護模式下的虛擬內(nèi)存管理機制。為了更好的理解 Windows 2000 如何管理它的主內(nèi)存,最低限度的熟悉 i386 CPU 的架構(gòu)某些特點就顯得尤為重要。 Windows 2000 是針對 Pentium 以上 CPU 設(shè)計的。不過,這些新的處理器采用的內(nèi)存管理模型仍源自針對 80386 CPU 的設(shè)計,不過當(dāng)然會加入了一些重要的增強。因此,微軟通常標(biāo)注 Windows NT 和 Windows 2000 的版本為 Intel 處理器“ i386 ”或者“ x86 ”。不要對這些感到困惑,不管你在本書的什么地方遇到 86 或 386 ,請記住,這只是表示特定的 CPU 架構(gòu),而不是特定的處理器版本。

基本的內(nèi)存布局

Windows 2000 為應(yīng)用程序和系統(tǒng)代碼提供了非常簡單的內(nèi)存布局。由 32 位的 Intel CPU 提供的 4GB 虛擬內(nèi)存空間被分割為相等的兩部分。低于 0x80000000 的內(nèi)存地址由用戶模式下的模塊使用,這包括 Win32 子系統(tǒng),剩余的 2GB 保留給了系統(tǒng)內(nèi)核。 Windows 2000 Advanced Server 還支持通常稱為 4GT RAM Tuning 的另一種內(nèi)存模型,該模型隨 Windows NT 4.0 Server 的企業(yè)版引入。該模型可提供 3GB 的用戶地址空間,另 1GB 保留給內(nèi)核,通過在 boot.ini 中添加 /3GB 選項來啟用該模型。

Windows 2000 Advanced Server 和 DataCenter 支持稱為:物理地址擴展( Physical Address Extension, PAE )的內(nèi)存選項,通過在 boot.ini 中加入 /PAE 就可允許這種內(nèi)存方式。該選項采用了某些 Intel CPU 的特性(如, Pentium Pro 處理器)以允許大于 4GB 的物理內(nèi)存映射到 32 位的地址空間上。在本章中,我將忽略這種特殊的設(shè)置。你可閱讀微軟的基本知識文章 Q171793 (微軟 2000c )、 Intel 的 Pentium 手冊( Intel 1999a,1999b,1999c )以及 Windows 2000 DDK 文檔(微軟 2000f )來獲取更多此方面的信息。

內(nèi)存分段和請求式分頁

在深入 i386 架構(gòu)的技術(shù)細(xì)節(jié)之前,想讓我們回到 1978 年,那一年 Intel 發(fā)布了 PC 處理器之母: 8086 。我想將討論限制到這個有重大意義的里程碑上。如果你打算知道更多,閱讀 Robert L. 的 80486 程序員參考( Hummel 1992 )將是一個很棒的開始。現(xiàn)在看來這有些過時了,因為它沒有涵蓋 Pentium 處理器家族的新特性;不過,該參考手冊中仍保留了大量 i386 架構(gòu)的基本信息。盡管 8086 能夠訪問 1MB RAM 的地址空間,但應(yīng)用程序還是無法“看到”整個的物理地址空間,這是因為 CPU 寄存器的地址僅有 16 位。這就意味著應(yīng)用程序可訪問的連續(xù)線性地址空間僅有 64KB ,但是通過 16 位段寄存器的幫助,這個 64KB 大小的內(nèi)存窗口就可以在整個物理空間中上下移動, 64KB 邏輯空間中的線性地址作為偏移量和基地址(由 16 位的段寄存器給處)相加,從而構(gòu)成有效的 20 位地址。這種古老的內(nèi)存模型仍然被最新的 Pentium CPU 支持,它被稱為:實地址模式,通常叫做:實模式。

80286 CPU 引入了另一種模式,稱為:受保護的虛擬地址模式,或者簡單的稱之為:保護模式。該模式提供的內(nèi)存模型中使用的物理地址不再是簡單的將線性地址和段基址相加。為了保持與 8086 和 80186 的向后兼容, 80286 仍然使用段寄存器,但是在切換到保護模式后,它們將不再包含物理段的地址。替代的是,它們提供了一個選擇器( selector ),該選擇器由一個描述符表的索引構(gòu)成。描述符表中的每一項都定義了一個 24 位的物理基址,允許訪問 16MB RAM ,在當(dāng)時這是一個很不可思議的數(shù)量。不過, 80286 仍然是 16 位 CPU ,因此線性地址空間仍然被限制在 64KB 。

1985 年的 80386 CPU 突破了這一限制。該芯片最終砍斷了 16 位尋址的鎖鏈,將線性地址空間推到了 4GB ,并在引入 32 位線性地址的同時保留了基本的選擇器 / 描述符架構(gòu)。幸運的是, 80286 的描述符結(jié)構(gòu)中還有一些剩余的位可以拿來使用。從 16 位遷移到 32 位地址后, CPU 的數(shù)據(jù)寄存器的大小也相應(yīng)的增加了兩倍,并同時增加了一個新的強大的尋址模型。真正的 32 位的數(shù)據(jù)和地址為程序員帶了實際的便利。事實上,在微軟的 Windows 平臺真正完全支持 32 位模型是在好幾年之后。 Windows NT 的第一個版本在 1993 年 7 月 26 日發(fā)布,實現(xiàn)了真正意義上的 Win32 API 。但是 Windows 3.x 程序員仍然要處理由獨立的代碼和數(shù)據(jù)段構(gòu)成的 64KB 內(nèi)存片, Windows NT 提供了平坦的 4GB 地址空間,在那兒可以使用簡單的 32 位指針來尋址所有的代碼和數(shù)據(jù),而不需要分段。在內(nèi)部,當(dāng)然,分段仍然在起作用,就像我在前面提及的那樣。不過管理段的所有責(zé)任都被移給了操作系統(tǒng)。

80386 的另一個新特性是在硬件上支持分頁,確切的來說是:請求式分頁的虛擬內(nèi)存。這種技術(shù)允許一個不同于 RAM 的存儲介質(zhì) ---- 硬盤來為內(nèi)存提供支持,例如,在允許分頁時, CPU 通過將最近最少訪問的內(nèi)存數(shù)據(jù)置換到備份存儲器中,從而為新的數(shù)據(jù)騰出空間,這樣就能訪問比可用物理內(nèi)存更大的內(nèi)存空間。理論上來說,可以使用此種方式訪問 4GB 的連續(xù)線性地址空間,提供的備份介質(zhì)必須足夠的大 --- 即 使只安裝了非常少的物理內(nèi)存。當(dāng)然,分頁并不是訪問內(nèi)存的最快方式,最好還是能提供盡可能多的物理內(nèi)存。但是,這是處理大量數(shù)據(jù)的最好辦法,即使這些數(shù)據(jù) 超過了可用物理內(nèi)存。例如,圖形和數(shù)據(jù)庫程序都需要一大塊工作內(nèi)存,如果沒有分頁機制的話,其中的某些程序就無法在低檔的 PC 系統(tǒng)中運行。

80386 分頁的模式是將內(nèi)存劃分為 4KB 或 4MB 大小的頁。操作系統(tǒng)的設(shè)計者可以在二者之間自由的選擇,也可混合使用這兩個大小的頁面。稍后,我會介紹 Windows 2000 采用的混合大小方案:由操作系統(tǒng)使用 4MB 的頁面,而 4KB 頁面由剩余的代碼和數(shù)據(jù)使用。這些頁面由分層結(jié)構(gòu)的頁表樹管理,該頁表樹記錄當(dāng)前位于物理內(nèi)存中的頁,同時還記錄了每個頁是否實際的位于物理內(nèi)存中。如果指定頁已被置換到了硬盤上,而某些模塊觸及了位于這些頁中的地址, CPU 就會產(chǎn)生一個缺頁中斷(這與外圍硬件產(chǎn)生的中斷類似)。接下來,位于操作系統(tǒng)內(nèi)核中的缺頁中斷處理例程會試圖將該頁再次調(diào)入物理內(nèi)存,這可能需要將另一塊內(nèi)存中的數(shù)據(jù)寫入硬盤以騰出空間。通常,系統(tǒng)采用最近最少( LRU )算法來確定哪個頁可以被置換出去。現(xiàn)在可以很清楚地看到為什么有時將這個過程稱為 ---- 請求式分頁( demand paging ):即,由軟件提出請求,然后根據(jù)操作系統(tǒng)和應(yīng)用程序使用的內(nèi)存的統(tǒng)計數(shù)據(jù),將物理內(nèi)存中的數(shù)據(jù)移動到后備存儲設(shè)備中。

由頁表提供的間接尋址方式蘊含著很有趣的兩件事。第一,程序所使用的地址和 CPU 使用的物理地址總線上的地址之間并沒有預(yù)設(shè)的關(guān)系。如果你知道你的程序所使用的數(shù)據(jù)結(jié)構(gòu)位于某一地址,如, 0x00140000 ,你可能仍然不想知道任何有關(guān)這些數(shù)據(jù)的物理地址的信息,除非你要檢查頁表樹( page-table tree )。 這需要操作系統(tǒng)來決定這些地址之間的映射關(guān)系。甚至當(dāng)前有效的地址轉(zhuǎn)換都是無法預(yù)測的,部分的來看,這是分頁機制所固有的隨機性導(dǎo)致的。幸運的是,在大多 數(shù)應(yīng)用程序中,并不需要有關(guān)物理地址的知識。不過,對于開發(fā)硬件驅(qū)動程序的人員來說還是需要某些這方面的知識。分頁的另一個隱晦之處是:地址空間并不必須 是連續(xù)的。實際上,根據(jù)頁表的內(nèi)容, 4GB 的空間可以包含大量的“空洞”,這些“空洞”既沒有映射到物理內(nèi)存也沒有映射到后備存儲器中。如果一個應(yīng)用程序試圖讀取或?qū)懭脒@樣的一個地址,它將立即被系統(tǒng)中止掉。稍后,我會詳細(xì)的說明 Windows 2000 是如何將可用內(nèi)存擴展到 4GB 地址空間的。

80486 和 Pentium CPU 使用的分段和分頁機制與 80386 很相似,但一些特殊的尋址特性除外,如 Pentium Pro 采用的物理地址擴展( Physical Address Extension, PAE )機制。隨同更高的時鐘頻率一起, Pentium CPU 的另一特性就是其采用的雙重指令流水線,這一特性允許它在同一時刻執(zhí)行兩個操作(只要這兩個指令不互相依賴)。例如,如果指令 A 修改一個寄存器的值,而與其相鄰的指令 B 需要這個修改后的值來進行計算,在 A 完成之前, B 將無法執(zhí)行。但是如果指令 B 使用另一個寄存器, CPU 就可同時執(zhí)行這兩個指令。 Pentium 系列 CPU 采用的多種優(yōu)化方式為編譯器的優(yōu)化提供了廣闊的空間。如果你對這方面的話題很感興趣,請參考 Rick 的《 Inner Loops 》( Booth 1997 )。

在 i386 的內(nèi)存管理中,有三類地址非常有名,它們的術(shù)語 --- 邏輯、線性和物理地址出現(xiàn)在 Intel 的系統(tǒng)編程手冊( Intel 1999c )。

1. 邏輯地址 :這是內(nèi)存地址的精確描述,通常表示為 16 進制: xxxx:YYYYYYYY ,這里 xxxx 為 selector ,而 YYYYYYYY 是針對 selector 所選擇的段地址的線性偏移量。除了指定 xxxx 的具體數(shù)值外,還可使用具體的段寄存器的名字來替代之,如 CS (代碼段), DS (數(shù)據(jù)段), ES (擴展段), FS (附加數(shù)據(jù)段 #1 ), GS (附加數(shù)據(jù)段 #2 )和 SS (堆棧段)。這些符號都來自舊的“段 : 偏移量”風(fēng)格,在 8086 實模式下使用此種方式來指定“ far pointers ”(遠(yuǎn)指針)。

2. 線性地址 :大多數(shù)應(yīng)用程序和內(nèi)核驅(qū)動程序都忽略虛擬地址。它們只對虛擬地址的偏移量部分感興趣,而這一部分通常稱為線性地址。此種類型的地址假定了一種默認(rèn)的分段模型,這種模型由 CPU 的當(dāng)前段寄存器確定。 Windows 2000 使用 flat segmentation (平滑段),此時 CS 、 DS 、 ES 和 SS 寄存器都指向相同的線性地址空間;因此,程序可以認(rèn)為所有的代碼、數(shù)據(jù)和堆棧指針都可安全的相互轉(zhuǎn)化。例如,在任何時候,堆棧中的一個地址都可以轉(zhuǎn)化為一個數(shù)據(jù)指針,而不需要關(guān)心相應(yīng)段寄存器的值。

3. 物理地址 :僅當(dāng) CPU 工作于分頁模式時,此種類型的地址才會變得非常“有趣”。本質(zhì)上,一個物理地址是 CPU 插腳上可測量的電壓。操作系統(tǒng)通過設(shè)立頁表將線性地址映射為物理地址。 Windows 2000 所用頁表的布局的某些屬性,對于調(diào)試軟件開發(fā)人員非常有用,本章稍后將討論之。

虛擬地址和線性地址的差別多少有些人為的痕跡,在一些文檔中會交替的使用這兩個詞。我會盡力保證使用這一術(shù)語的一致性。特別需要注意的是, Windows 2000 假定物理地址有 64 位寬。而 Intel i386 系統(tǒng)通常只有一個 32 位的地址總線。不過,某些 Pentium 系統(tǒng)支持大于 4GB 的物理內(nèi)存。例如,使用 PAE 模式的 Pentium Pro CPU ,這種 CPU 可以將物理地址擴展到 36 位,這樣就可訪問多大 64GB 的物理內(nèi)存( Intel 1999c )。因此, Windows 2000 的 API 函數(shù)通常使用數(shù)據(jù)類型 PHYSICAL_ADDRESS 來表示物理地址, PHYSICAL_ADDRESS 實際是 LARGE_INTEGER 結(jié)構(gòu)的別名,如 列表 4-1 所示。這兩種類型都定義在 DDK 頭文件 ntdef.h 中。 LARGE_INTEGER 實際上是 64 位有符號整數(shù)的結(jié)構(gòu)化表示,它可以被解釋為一對 32 位數(shù)( LowPart 和 HighPart )或一個完整的 64 位數(shù)( QuadPart )。 LONGLONG 類型等價于 Visual C/C++ 的原生類型 __int64 ,該類型的無符號表示叫做 ULONGLONG 或 DWordLONG ,它們都依賴基本的無符號類型 __int64 。

圖 4-1 給出了 i386 內(nèi)存的分段模型,同時說明了邏輯地址和線性地址的關(guān)系。為了更清晰些,我將描述符表( descriptor table )和段( segment )畫的比較小。實際上, 32 位的操作系統(tǒng)通常采用 4-2 所示的分段方案,這就是所謂的平滑內(nèi)存模型( flat memory model ),它采用一個 4GB 大小的段。這種方案的不足是,描述符表變成了段的一部分,從而可以被有足夠權(quán)限的代碼訪問到。

typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;

typedef union _LARGE_INTEGER

{

struct

{

ULONG LowPart;

LONG HighPart;

};

LONGLONG QuadPart;

} LARGE_INTEGER, *PLARGE_INTEGER;

列表 4-1. PHYSICAL_ADDRESS 和 LARGE_INTEGER 結(jié)構(gòu)的定義

圖 4-1. i386 的內(nèi)存分段

圖 4-2 給出的內(nèi)存模型被 Windows 2000 作為標(biāo)準(zhǔn)的代碼、數(shù)據(jù)和堆棧段,這意味著,所有的邏輯地址將包括 CS 、 DS 、 ES 和 SS 段寄存器。 FS 和 GS 的處理方式有所不同。 Windows 2000 并不使用 GS 寄存器,而 FS 寄存器被專門用來保存位于線性地址空間中的系統(tǒng)數(shù)據(jù)區(qū)域的基地址。因此, FS 的基地址遠(yuǎn)大于 0 ,其大小不會超過 4GB 。有趣的是, Windows 2000 為用戶模式和內(nèi)核模式分別維護兩個不同的 FS 段。稍后我們將詳細(xì)討論這一問題。

圖 4-2. 平滑的 4GB 內(nèi)存段

4-1 4-2 中,邏輯地址的 selector 指向描述符表,該描述符表由名為 GDTR 的寄存器指定。這是 CPU 的全局描述符表寄存器,該寄存器可由操作系統(tǒng)設(shè)置為任何適當(dāng)?shù)木€性地址。 GDT (全局描述符表)的第一項是保留的,該項對應(yīng)的 selector 叫做“ null segment selector ”。 Windows 2000 將其 GDT 保存在 0x80036000 。 GDT 可容納多達 8,19264 位的條目,即其最大值為 64KB 。 Windows 2000 僅使用開始的 128 個項,并將 GDT 的大小限制為 1,024 字節(jié)。隨 GDT 一起, i386 CPU 還提供了一個本地描述符表( Local Descriptor Table , LDT )和一個中斷描述符表( Interrupt Descriptor Table , IDT ),這兩個表的起始地址分別保存在 LDTR 和 IDTR 這兩個寄存器中。 GDTR 和 IDTR 的值是唯一的, CPU 執(zhí)行的每個任務(wù)都采用相同的值,而 LDTR 的值則是任務(wù)相關(guān)的, LDTR 可容納一個 16 位的 selector 。

圖 4-3 示范了復(fù)雜的線性地址與物理地址的轉(zhuǎn)換機制,如果在 4KB 分頁模式下,并允許請求式分頁, i386 的內(nèi)存管理單元就會采用此種轉(zhuǎn)換機制。圖中左上角的頁目錄基址寄存器( Page-Directory Base Register , PDBR )包含頁目錄的物理地址。 PDBR 由 i386 的 CR3 寄存器保存。僅用該寄存器的高 20 位來尋址。因此,頁目錄也是以頁為邊界的。 PDBR 的剩余位作為標(biāo)志位或保留以便將來擴展使用。頁目錄占用一個完整的 4KB 頁,由包含 1024 個頁目錄項( Page-Directory Entry )的數(shù)組構(gòu)成,每個頁目錄項均為 32 位。和 PDBR 類似,每個 PDE 被劃分為一個 20 位的頁幀計數(shù)器( Page-Frame Number , PFN )和一個標(biāo)志數(shù)組。 PFN 用來尋址頁表。每個頁表都是按頁對齊的,包含 1024 個頁表項( Page-Table Entry , PTE )。每個 PTE 的高 20 位作為一個指針指向一個 4KB 的數(shù)據(jù)頁。通過將線性地址分為三段來實現(xiàn)地址轉(zhuǎn)換:高 10 位用來選擇一個 PDE (屬于頁目錄),接下來的 10 個位選擇前面所選的 PDE 中的某個 PTE ,最后剩下的 12 個位用來指定在數(shù)據(jù)頁中的偏移量,該數(shù)據(jù)頁由前面所選的 PTE 確定。

圖 4-3. 兩層間接模型(采用 4KB 頁)

在 4MB 分頁模式下,事情就變得很簡單了,這是因為消除了一個間接層,如 4-4 所示。此時, PDBR 仍然指向頁目錄,但僅使用了每個 PDE 的高 10 位,這是因為目標(biāo)地址采用 4MB 對齊。因為沒有使用頁表,這個地址同樣也是 4MB 數(shù)據(jù)頁的基地址。所以,此時的線性地址只包含兩個部分: 10 個位用來選擇 PDE ,其余的 22 位作為偏移量。 4MB 內(nèi)存方案的開銷沒有 4KB 那么大,這是因為僅頁目錄需要附加的內(nèi)存。這 1024 個 PDE 中的每個都可尋址一個 4MB 頁。這足夠覆蓋整個 4GB 地址空間了。所以, 4MB 分頁的優(yōu)勢就是可以降低內(nèi)存管理的開銷,但結(jié)果就是尋址粒度較大。

4KB 和 4MB 分頁模型各有優(yōu)缺點。幸運的是,操作系統(tǒng)的設(shè)計人員不必非要在二者之中選擇一個,可以混合使用這兩種模型。例如, Windows 2000 在內(nèi)存范圍 0x80000000 --- 0x9FFFFFFF 使用 4MB 大小的頁,內(nèi)核模塊 hal.dll 和 ntoskrnl.exe 均被加載到該地址范圍內(nèi)。剩余的線性地址采用 4KB 頁來管理。 Intel 大力推薦采用這種混合設(shè)計,以改進系統(tǒng)性能,這也因為 4KB 和 4MB 的頁項( Page Entry )都會被高速緩存到不同的轉(zhuǎn)換后備緩沖區(qū)( Translation Lookaside Buffers , TLBs )中,該 TLB 位于 i386 CPU 內(nèi)部( Intel 1999c , pp.3-22f )。操作系統(tǒng)的內(nèi)核通常比較大,而且需要常駐內(nèi)存,因此,如果將它們保存在多個 4KB 頁中將會永久性的耗盡寶貴的 TLB 空間。

圖 4-4. 一層間接模型(采用 4MB 頁)

注意,地址轉(zhuǎn)換的所有步驟都在物理內(nèi)存中進行。 PDBR 和所有的 PDE 、 PTE 包含的都是物理地址指針。在 4-3 4-4 中可找到的線性地址位于左下角,該線性地址將轉(zhuǎn)化為物理頁中的偏移量。另一方面,應(yīng)用程序卻必須使用線性地址,它們對物理地址一無所知。不過,通過將頁目錄和其下屬的所有頁表映射到線性地址空間可以填補這一不足。在 Windows 2000 和 Windows NT 4.0 中,在線性地址范圍 0xC0000000----0xC03FFFFF 可訪問所有的 PDE 和 PTE ,這是一個采用 4MB 頁的線性內(nèi)存區(qū)域。可以簡單的通過線性地址的高 20 位來查找與其相關(guān)聯(lián)的 PTE ,這個高 20 位作為 32 位 PTE 數(shù)組的索引, PTE 數(shù)組起始于 0xC0000000 。例如,地址 0x00000000 表示的 PTE 位于 0xC0000000 。假定有一線性地址 0x80000000 ,通過將該地址右移 12 位,可得到 0x80000 (即該地址的高 20 位),因為每個 PTE 占用 4 個字節(jié),所以目標(biāo) PTE 的地址為: 0xC0000000+ ( 4*0x80000 ) =0xC0200000 。這樣的結(jié)果看起來很有趣,線性地址將 4GB 地址空間劃分為相等的兩部分,又映射為一個 PTE 的地址,從而將 PTE 數(shù)組也劃分為了相等的兩部分。

現(xiàn)在,讓我們更進一步,通過 PTE 自身來計算數(shù)據(jù)項在 PTE 數(shù)組中的地址。常規(guī)的映射公式為:(( LinearAddress >> 12 ) *4 ) +0xC0000000 。 LinearAddress 取值范圍為: 0xC0000000----0xC0300000 。位于線性地址 0xC0300000 的數(shù)據(jù)項指向 PTE 數(shù)組在物理內(nèi)存中的起始位置。現(xiàn)在回去看一下 4-3 ,開始于地址 0xC0300000 的 1024 個數(shù)據(jù)項肯定是頁目錄!這種特殊的 PDE 、 PTE 排列方式被多個內(nèi)存管理函數(shù)使用,這些函數(shù)由 ntoskrnl.exe 導(dǎo)出。例如,有文檔記載的 API 函數(shù) MmIsAddressValid() 和 MmGetPhysicalAddress() 使用 32 位的線性地址來查找其 PDE ,如可用,還會查找其 PTE ,并會檢查它們的內(nèi)容。 MmIsAddressValid() 簡單的檢驗?zāi)繕?biāo)頁是否位于物理內(nèi)存中。如果測試失敗,就意味著線性地址或者無效或者該地址引用的頁已經(jīng)被置換到了后備存儲器(由系統(tǒng)頁面文件集表示)中。 MmGetPhysicalAddress() 首先從線性地址中提取相應(yīng)的頁幀計數(shù)器( PFN ),該 PFN 就是與其相關(guān)的物理內(nèi)存頁(該頁將按照頁大小進行劃分)的基地址。接下來,它通過線性地址中剩余的 12 個位,來計算在物理頁中的偏移量,最后將 PFN 指出的物理頁基地址和前面算出的偏移量相加即可得到該線性地址對應(yīng)的物理地址。

更徹底的檢查 MmGetPhysicalAddress() 的實現(xiàn)方式,會發(fā)現(xiàn) Windows 2000 內(nèi)存布局的另一個有趣的特性。 MmGetPhysicalAddress() 函數(shù)在開始之前,首先測試線性地址是否位于 0x80000000-----0x9FFFFFFF 。就像前面提到的,這里存放著 hal.dll 和 ntoskrnl.exe ,而且這也是 Windows 2000 使用 4MB 頁的地址塊。這個有趣的特性是,如果給定的線性地址位于這一范圍, MmGetPhysicalAddress() 將不會關(guān)心所有的 PDE 或 PTE 。替代的是,該函數(shù)簡單的將線性地址的高 3 位設(shè)為零,然后加上字節(jié)偏移量,最后將得到地址作為物理地址返回。這意味著,物理地址范圍: 0x00000000----0x1FFFFFFF 將按照 1 : 1 的比例映射到線性地址 0x80000000----0x9FFFFFFF !要知道 ntoskrnl.exe 總是被加載到線性地址 0x80400000 ,這意味著 Windows 2000 的內(nèi)核總位于物理地址 0x00400000 ,這種情況發(fā)生在第二個 4MB 頁的基地址位于物理內(nèi)存中。事實上,通過檢查這些內(nèi)存區(qū)域可以證明上面的假定是正確的。本章提供的 Memory SPY 將使你有機會看到這一點。

補充:

這部分內(nèi)容選擇自《 Windows 環(huán)境下 32 位匯編語言程序設(shè)計》

x86 的內(nèi)存分頁機制

當(dāng) x86 CPU 工作在保護模式和虛擬 8086 模式時,可以使用全部 32 根地址線訪問 4GB 的內(nèi)存。因為 80386 的所有通用寄存器都是 32 位的,所以用任何一個通用寄存器來間接尋址,不必分段就可以訪問到 4GB 的內(nèi)存地址。

但 這并不意味著,此時段寄存器就不再有用了。實際上,段寄存器更加有用了,雖然在尋址上沒有分段的限制了,但在保護模式下,一個地址空間是否可以被寫入,可 以被多少優(yōu)先級的代碼寫入,是不是允許執(zhí)行等等涉及保護的問題就出來了。要解決這些問題,必須對一個地址空間定義一些安全上的屬性。段寄存器這時就派上了 用場。但是設(shè)計屬性和保護模式下段的其他參數(shù),要表示的信息太多了,要用 64 位長的數(shù)據(jù)才能表示。我們把這 64 位的屬性數(shù)據(jù)叫做段描述符( Segment Descriptor )。

80386 的段寄存器是 16 位的,無法放下保護模式下 64 位的段描述符。如何解決這個問題呢?方法是把所有段的段描述符順序存放在內(nèi)存中的指定位置,組成一個段描述符表( Descriptor Table );而段寄存器中的 16 位用來做索引信息,指定這個段的屬性用段描述符表中的第幾個描述符來表示。這時,段寄存器中的信息不再是段地址了,而是段選擇器( Segment Selector )。可以通過它在段描述符表中“選擇”一個項目已得到段的全部信息。

那么段描述符表存放在哪里呢? 80386 引入了兩個新的寄存器來管理段描述符表。一個是 48 位的全局描述符表寄存器 GDTR ,一個是 16 位的局部描述符表寄存器 LDTR 。那么,為什么有兩個描述符表寄存器呢?

GDTR 指向的描述符表為全局描述符表 GDT ( Global Descriptor Table )。它包含系統(tǒng)中所有任務(wù)都可用的段描述符,通常包含描述操作系統(tǒng)所使用的代碼段、數(shù)據(jù)段和堆棧段的描述符及各任務(wù)的 LDT 段等。全局描述符表只有一個。

LDTR 指向局部描述符表 LDT ( Local Descriptor Table )。 80386 處理器設(shè)計成每個任務(wù)都有一個獨立的 LDT 。它包含每個任務(wù)私有的代碼段、數(shù)據(jù)段和堆棧段的描述符,也包含該任務(wù)所使用的一些門描述符,如任務(wù)門和調(diào)用門描述符等。

不同任務(wù)的局部描述符分別組成不同的內(nèi)存段,描述這些內(nèi)存段的描述符當(dāng)作系統(tǒng)描述符放在全局描述符表中。和 GDTR 直接指向內(nèi)存地址不同, LDTR 和 CS 、 DS 等段選擇器一樣只存放索引值,指向局部描述符內(nèi)存段對應(yīng)的描述符在全局描述符表中的位置。隨著任務(wù)的切換,只要改變 LDTR 的值,系統(tǒng)當(dāng)前的局部描述符表 LDT 也隨之切換,這樣便于個任務(wù)之間數(shù)據(jù)的隔離。但 GDT 并不隨著任務(wù)的切換而切換。

16 位的段選擇器如何使用全局描述符表和局部描述符表這兩個表呢?實際上,段選擇器中只有高 13 位表示索引值。剩下的 3 個數(shù)據(jù)位中,第 0 , 1 位表示程序的當(dāng)前優(yōu)先級 RPL ;第 2 位 TI 位用來表示在段描述符的位置; TI=0 表示在 GDT 中, TI=1 表示在 LDT 中。

80386 處理器把 4KB 大小的一塊內(nèi)存當(dāng)作一“頁”內(nèi)存,每頁物理內(nèi)存可以根據(jù)“頁目錄”和“頁表”,隨意映射到不同的線性地址上。這樣,就可以將物理地址不連續(xù)的內(nèi)存的映射連到一起,在線性地址上視為連續(xù)。在 80386 處理器中,除了與 CR3 (保存當(dāng)前頁目錄的地址)相關(guān)的指令使用的是物理地址外,其他所有指令都是使用線性地址尋址的。

是否啟用內(nèi)存分頁機制是由 80386 處理器新增的 CR0 寄存器中的位 31 ( PG 位)決定的。如果 PG=0 ,則分頁機制不啟用,這時所有指令尋址的地址(線性地址)就是系統(tǒng)中實際的物理地址;當(dāng) PG=1 的時候, 80386 處理器進入內(nèi)存分頁管理模式,所有的線性地址要經(jīng)過頁表的映射才得到最后的物理地址。

標(biāo)簽: Windows系統(tǒng)
主站蜘蛛池模板: 亚洲久久 | 久久在线视频 | 福利视频一区二区 | 亚洲国产精品久久久久久女王 | 久久精品一区二区三区四区 | 色综久久| 婷婷综合| 伊人网址 | 精品免费久久久久久久苍 | 亚洲人网站| 中文字幕1区 | 中文字字幕一区二区三区四区五区 | 在线中文字幕av | 成人免费小视频 | 亚洲黄色一级毛片 | 另类国产ts人妖高潮系列视频 | 亚洲精选国产 | 成人午夜免费网站 | 成人免费视频在线观看 | 日韩拍拍 | av免费在线观看网站 | 夜夜艹 | 国产成人免费视频 | 97视频久久 | 性生活毛片 | 国产精品福利在线观看 | 欧美精品1区| 久久综合网址 | 在线激情网站 | 日韩视频一区二区三区 | 毛片一区二区三区 | 欧美成人激情视频 | av伊人网 | 久久久亚洲一区 | 精品亚洲视频在线观看 | 羞羞视频在线观看视频 | 国产激情一区二区三区 | 欧美一级日韩片 | 国产在线第一页 | 国产二区视频 | 羞羞视频免费看 | porn在线| 在线a级毛片 | 精品99在线| 视频一区二区三区在线播放 | 五月天在线婷婷 | 一级特黄| 国产一区二区视频精品 | 一区二区三区精品 | 成人av影视在线观看 | 午夜在线观看影院 | 天天操天天色天天 | 亚洲综合欧美日韩 | 亚洲日本韩国欧美 | 国产中文字幕一区 | 国产成人高清精品免费5388 | 中文字幕在线观看av | 99久久久免费视频 | 中文字幕一区二区在线观看 | 成人久久18免费观看 | 国产一区二区三区欧美 | 91免费看片 | 夜夜夜操操操 | 夜夜爽网址| 成人免费精品视频 | 杨门女将寡妇一级裸片看 | 亚洲欧美日韩一区二区 | 黄色片在线观看视频 | 成人欧美一区二区三区在线播放 | 欧美一级做a爰片免费视频 亚洲精品一区在线观看 | 羞羞色影院 | 欧美久久大片 | 日本中文字幕在线视频 | 日韩视频一区二区三区四区 | 午夜精品一区二区三区免费视频 | 精品国产乱码久久久久久88av | 国产高清久久久 | 久久精品中文 | 日韩欧美一区二区视频 | 操人网站 | 久久久久久这里只有精品 | 亚洲精品久久久一区二区三区 | 欧洲成人一区 | 毛片一区二区三区 | 毛片在线免费 | 国外成人在线视频网站 | 精品免费一区二区 | 日本日韩中文字幕 | 日韩激情网 | 国产精品色哟哟哟 | 日韩av一区二区三区在线观看 | 奇米精品一区二区三区在线观看 | 午夜免费福利视频 | 亚洲综合区 | 亚洲一区中文 | 黄色一级网站 | 在线国产专区 | 蜜桃视频麻豆女神沈芯语免费观看 | 亚洲人成人一区二区在线观看 | 国产美女精品一区二区三区 | 国产情侣自拍啪啪 | 99热.com| www.欧美精品| 精品国产精品国产偷麻豆 | 国产视频观看 | av毛片| 国产一级特黄aaa大片 | 亚洲一区二区黄 | 欧美激情性国产欧美无遮挡 | 国产高清视频一区二区 | 日韩成人一区二区 | 女同videos另类 | 久在线观看 | 久久久久久综合 | 国产精品自拍av | 美女视频一区二区三区 | 最新中文字幕在线 | 久久亚洲视频 | 国产h在线 | 午夜精品一区二区三区在线 | 亚洲 中文 欧美 日韩在线观看 | 国产中文字幕一区 | 亚洲午夜精品视频 | 成人h动漫免费观看网站 | 久久精品综合 | 亚洲精品成人a8198a | 成人免费aaa | 久久综合久久综合久久综合 | 色欧美片视频在线观看 | 二区国产 | 午夜视频一区二区三区 | 国产一区二区视频在线观看 | 国产成人精品一区二区 | www.亚洲区| 欧美日本韩国一区二区三区 | 黄色一级网站 | 在线 丝袜 欧美 日韩 制服 | 国产精品福利91 | 亚洲福利一区 | 亚洲欧美在线播放 | 国产一区二区电影 | 日韩在线精品视频 | 久久综合久 | 欧美日韩在线精品 | 国产中文视频 | 日本色综合| 国产精品国产三级国产aⅴ中文 | 国产精品日日 | 午夜视频| 免费观看一区二区三区毛片软件 | 老牛嫩草一区二区三区眼镜 | 久久狠狠| 成人av在线网 | 日韩在线视频在线观看 | 欧美日韩啪啪 | 风间由美一区二区三区在线观看 | 九九99热 | 国产精品日韩三级 | www嫩草| 国产在线观看欧美 | 亚洲高清免费视频 | 看毛片网站 | 精品一区二区av | www.蜜桃av| 麻豆精品久久久 | 欧美一级在线观看 | 欧美日韩在线一 | 一区二区在线免费观看 | 国产一区二区三区视频在线观看 | 亚洲一区中文字幕在线 | 狠狠夜夜| 久久99国产精品免费网站 | 成人在线免费小视频 | 欧美一区二区视频 | 久久成人精品视频 | 亚洲a视频 | 亚洲视频在线观看一区二区三区 | 日韩婷婷| 天天爽夜夜爽夜夜爽精品视频 | 天堂一区 | 亚洲永久| 91免费观看| 一区二区三区在线免费观看 | 久久伊人精品网 | 亚洲区视频在线 | 日韩中文字幕视频 | 一级a毛片免费 | 国产成人av网站 | 国产高清视频在线观看 | 99视频免费| 亚洲精品一二三四五区 | 日韩在线免费 | 久久久精品高清 | 精品国产乱码久久久久久久 | 午夜在线观看 | 欧美人成在线观看 | 欧美成人在线影院 | a级黄色在线观看 | 欧美在线高清 | 天天操综合网 | 成人免费小视频 | 国产精品久久精品 | 欧美日韩综合视频 | 亚洲国产视频一区 | 色婷婷一区二区三区四区 | 亚洲成人在线视频观看 | 亚洲性人人天天夜夜摸 | 国产精一区二区 | 黄色一级片看看 | 欧美亚洲一区 | 日韩高清在线 | 亚洲高清一区二区三区 | 三级在线观看 | 这里精品| 韩日在线观看视频 | 欧美日韩一区在线 | 国产91 在线播放 | 国产精品永久 | 成人午夜免费视频 | 久久久亚洲精品视频 | 美女午夜影院 | 一区二区精品 | 亚洲777 | 91精品国产91久久久久久最新 | 国产精品99久久久久久www | 国产污视频在线 | 91精品国产综合久久久久久漫画 | 亚洲国产精品99久久久久久久久 | 久久国产精品久久久久久电车 | 欧美激情一区二区三区四区 | 91免费观看 | 伊人色综合网 | 亚洲天天做| 日韩中文字幕av | 久久av一区二区三区 | 日日干夜夜操 | 日韩激情综合网 | 国产成人免费 | 草视频在线 | 成人在线视频网站 | 精品一区二区三区免费毛片爱 | 亚洲欧美一区二区三区在线 | 国偷自产av一区二区三区 | 日日操夜夜操免费视频 | 蜜桃一区二区 | 日本久久艹 | 99re99| 国产一区二区在线免费观看 | 国产成人av在线 | 欧美日韩激情四射 | 青草成人免费视频 | 午夜99| 亚洲国产欧美一区二区三区久久 | 免费精品视频 | 99九九久久 | a∨色狠狠一区二区三区 | 成人综合区 | 亚洲欧美在线播放 | 少妇精品视频在线观看 | 好姑娘影视在线观看高清 | 超碰在线91| 欧美午夜视频 | 三级视频在线 | 一级视频黄色 | 国产激情一区二区三区 | sis001亚洲原创区 | 国产v日产∨综合v精品视频 | 欧产日产国产精品一二 | 久久久久高清 | 国产综合视频在线观看 | 欧美日韩中文字幕在线 | 免费网站看v片在线a | 欧美日韩视频在线观看免费 | 一级片在线观看免费 | 天堂在线中文 | 色综合久久久 | 亚洲第一av| 高清av在线 | 午夜影院a | 亚洲人在线 | 成人综合社区 | 久久精品日产高清版的功能介绍 | 日本在线免费 | 欧美综合激情 | 97在线免费观看 | 久久国产精品免费一区二区三区 | 久久精品国产久精国产 | 99爱视频 | 麻豆色呦呦 | 青娱乐网站| 亚洲高清在线观看 | 日韩视频在线免费 | 久热精品视频 | 日韩免费视频一区二区 | 欧美激情综合五月色丁香小说 | 国产91在线播放精品91 | 日韩成人久久 | 久久国产经典视频 | 日韩色综合 | 国产中文字幕在线观看 | 日本午夜精品 | 欧美日韩中文字幕在线 | 欧美国产免费 | a在线播放 | 日韩三级在线免费观看 | 精品国产一区二区三区成人影院 | 中文字幕一区二区在线观看 | 99国产精品久久久久久久 | 亚洲一区二区福利 | 欧美一区二区三区在线 | 国产精品夜夜 | 日韩欧美视频一区 | 欧美一级特黄aaaaaaa在线观看 | www免费网站在线观看 | 欧美日韩国产精品 | 亚洲中字幕 | 午夜精品久久久久久久星辰影院 | 国产视频中文字幕 | 97精品国产97久久久久久粉红 | 国产在线不卡视频 | 欧美一区在线观看视频 | 91中文在线| 国产成人av在线 | 断背山在线 | 亚洲精品区 | 免费在线h| 一区二区在线不卡 | 国产精品国产精品国产专区不卡 | 国产一区二区三区久久 | 亚洲成人av在线播放 | 视频一区 国产精品 | 日韩精品在线视频观看 | 亚洲视频免费 | 天天综合网久久综合网 | 国产精品无码永久免费888 | 中文字幕视频在线 | 国产在线不卡一区 | 一区二区三区在线 | 夜夜爽99久久国产综合精品女不卡 | www.成人国产 | 日韩精品专区在线影院重磅 | 综合在线视频 | 久久久精品久久久 | 精品一区在线 | 久久久久a | 视频一区在线播放 | 欧美精品成人一区二区三区四区 | 91精品国产综合久久久久久丝袜 | 国产精品久久久久一区二区三区 | 国产一区二区在线观看视频 | 一区二区三区视频在线播放 | 成人在线免费视频 | av久久| 国产高清免费视频 | 国产精品无码永久免费888 | 综合五月激情 | 日日天天| 久久国产精品免费一区二区三区 | 亚洲高清视频在线 | 国产片网站 | 日韩欧美在线播放 | 欧美日韩在线播放 | 黄a在线| 欧洲精品久久久 | 久久99精品久久久久久青青日本 | 国偷自产av一区二区三区 | 欧美激情在线免费观看 | 欧美日韩高清 | 国产免费av在线 | 日韩理伦在线 | 国产亚洲欧美精品永久 | 久久久国产精品 | 色婷婷久久| 国产欧美精品一区二区三区 | 伦乱视频| 精品伦精品一区二区三区视频 | 美女视频黄又黄又免费 | 亚洲毛片网站 | 亚洲系列 | 日韩av在线中文字幕 | 蜜桃臀一区二区三区 | 在线观看毛片网站 | 91成人精品视频 | 在线免费看a | 国产欧精精久久久久久久 | 亚洲一区在线日韩在线深爱 | 欧美激情视频一区二区三区在线播放 | 日本亚洲欧美 | 日韩小视频 | 中文天堂在线观看视频 | 久久国产午夜 | 久久人人爽人人爽人人片亚洲 | 久久成人免费视频 | 国产日韩精品一区二区 | 欧洲一区在线 | 国产99久| 国产妇女乱码一区二区三区 | 9色网站 | 91国内精品 | 国产一级视频免费播放 | 国产精品一区二区三区在线看 | 欧美日韩不卡合集视频 | 久久精品在线 | 久久国产一区二区三区 | 人人操日日干 | 国产午夜小视频 | 欧美日韩一 | 一区二区精品 | 国产精品亚洲成在人线 | xxxx网| 伊人一区 | 久久精品小视频 | 中文亚洲欧美 | 午夜寂寞少妇aaa片毛片 | 欧美一区二区三区免费电影 | 韩国精品| 91精品国产高清自在线观看 | 日日操av | 欧美日韩国产欧美 | 羞羞视频在线观免费观看 | 亚洲一区 中文字幕 | 国产小视频在线观看 | 激情毛片 | 久久人人爽爽爽人久久久 | 女人色网 | 国产成人高清 | 中文字幕一区二区三区在线视频 | 国产精品一二 | 国产ts人妖另类 | 久久久久久亚洲 | 日韩极品视频 | 免费看h | 欧美激情网址 | 欧美一二三四成人免费视频 | 黄色大片观看 | 在线观看国产日韩欧美 | 日韩精品一区二区三区在线播放 | 国产三级日本三级美三级 | www日批| 欧美精品被 | 中文字幕精品一区久久久久 | 国产中文字幕在线 | 啊v在线 | 亚洲 欧美 另类 综合 偷拍 | 日夜夜精品视频 | 久久精品综合 | 天天视频成人 | 国产成人精品一区二区三区四区 | 午夜精品久久久久久久星辰影院 | 亚洲一区二区三区在线播放 | 一色视频| 成人在线免费小视频 | 欧美视频在线播放 | 国产高清视频在线 | 日本一区二区三区免费观看 | 日韩av一区二区在线观看 | 后进极品白嫩翘臀在线视频 | 看黄色.com | 福利视频一区二区 | 黄色毛片视频网站 | 大陆毛片 | 成人精品一区二区三区电影黑人 | 久久久久久久国产 | 欧美午夜精品久久久 | 成人亚洲欧美 | 国产免费久久 | 久久久久国产精品一区二区 | 国产精品三级久久久久久电影 | 一区二区在线 | 国产高清精品一区 | 成人动慢 | 精品国产91亚洲一区二区三区www | 涩久久| 久久久毛片 | 日本精品在线播放 | 成人av影片在线观看 | 国产区在线观看 | 日本成人中文字幕在线观看 | 久久精品国产99国产 | 欧美激情自拍偷拍 | 亚洲一级毛片 | 午夜精品网站 | 国产精品日本一区二区在线播放 | 九九热这里只有精品6 | 性一交一乱一透一a级 | 久久国产精品一区 | 免费av手机在线观看 | 久久之精品| 91精品国产综合久久香蕉922 | 免费99精品国产自在在线 | 成人欧美一区二区三区 | 99热国 | 中文字幕日韩专区 | 久久久久久免费毛片精品 | 国产特一级黄色片 | 九九精品久久久 | 一区二区三区在线播放 | 亚洲毛片网站 | 奇米av| 日韩精品在线视频 | 成人免费的视频 | 亚洲成人福利 | 亚洲精品电影在线观看 | 国产免费拔擦拔擦8x高清在线人 | 在线日韩成人 | 依人成人网 | 久久h| 国产农村妇女精品 | 色综合天天综合网国产成人网 | 久久久久综合狠狠综合日本高清 | 国产精品无码久久久久 | 爱干在线 | 国产成人精品一区二区三区视频 | 亚洲免费在线视频 | 一区二区在线视频免费观看 | 欧美video| 九九99| 欧美精品在欧美一区二区少妇 | 日本成片视频 | 日韩视频在线免费观看 | 91九色在线 | 久草热8精品视频在线观看 黄色片网站视频 | 日韩视频不卡 | 天堂中文av在线 | 亚洲免费在线观看视频 | 午夜精品一区 | 日韩第一区| 在线免费色视频 | 草草视频在线免费观看 | 91精品国产综合久久福利 | 国产浪潮av色综合久久超碰 | 久久国产一区二区 | 久久精品免费观看视频 | 欧美日韩一区二区三区在线电影 | 久久国产精品99国产 | 草草草久久久 | 国产精品成人品 | 午夜社区 | 亚洲视频在线播放 | 久久久婷 | 久久精品美女 | 99精品视频在线免费观看 | 韩国精品一区 | jlzzxxxx18hd护士| 亚洲精品二区 | 免费观看一级毛片 | 久久人人爽人人爽人人片亚洲 | 国产麻豆乱码精品一区二区三区 | 99久久日韩精品视频免费在线观看 | 欧美亚洲另类丝袜综合网动图 | 久久精品91 | 国产精品久久九九 | 伊人伊人 | 欧美激情综合五月色丁香小说 | 亚洲成人日本 | 免费国产在线视频 | 黄色短视频在线观看 | 成人h动漫在线看 | 日韩视频不卡 | 国产96在线视频 | 午夜精品久久久久久久久 | 精品一区二区在线观看 | 最新av在线网址 | 毛片久久久 | 成人av在线播放 | 国产自在现线2019 | 欧美中文在线 | 久久久久久久久99精品 | 亚洲国产精品99久久久久久久久 | 亚洲无吗视频 | 精品欧美一区二区三区久久久小说 | 欧美日韩在线第一页 | 一级毛片免费完整视频 | 美女毛片免费看 | 精品一区二区三区四区五区 | 91破解版在线 | 亚洲 | 永久精品 | 视频1区 | 久久最新 | 久久人人爽人人爽 | www.五月婷婷 | 日韩综合一区二区 | 成人精品视频一区二区三区 | 亚洲欧洲在线观看 | 一区二区三区免费在线 | h在线免费| 午夜小电影 | 国产精品日韩欧美一区二区三区 | 羞羞在线视频 | 91精品视频在线播放 | 国产一二三区在线观看 | 99精品亚洲| 操操操操操操操 | 成人av片在线观看 | 午夜成人在线视频 | 中文字幕日韩欧美 | 日韩中文字幕在线观看 | 九色91视频 | 亚洲一区二区三区在线观看免费 | 97热在线| 国产成人久久精品麻豆二区 | 亚洲女人天堂成人av在线 | 一区视频在线 | 成人av影片在线观看 | 在线精品亚洲欧美日韩国产 | 国产极品视频在线观看 | 午夜精品在线观看 | 日韩精品久久久 | 国产精品久久久久久久久久 | 久久久国产精品入口麻豆 | 一区二区亚洲 | 日韩在线视频观看免费 | 色欧美日韩 | 国产成人av免费 | 综合五月网 |