精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從硬件角度看內存管理:解鎖計算機底層性能原理

存儲 存儲架構
MMU是Memory Management Unit的縮寫,中文名是內存管理單元,有時稱作分頁內存管理單元(英語:paged memory management unit,縮寫為PMMU)。它是一種負責處理中央處理器(CPU)的內存訪問請求的計算機硬件。

在計算機的復雜世界里,內存管理就像一位幕后指揮官,掌控著硬件性能的關鍵。從硬件角度深入理解內存管理,能解鎖計算機底層性能的奧秘。計算機硬件猶如精密協作的交響樂團,CPU 作為核心,以驚人速度處理數據,而內存則是其緊密協作的伙伴。內存,這個計算機的 “臨時倉庫”,承擔著存儲正在運行程序和數據的重任,為 CPU 提供高速數據訪問通道。內存與硬盤有別,它具有易失性,斷電后數據瞬間消失,但其讀寫速度卻遠非硬盤可比。像常見的動態隨機存取內存(DRAM),雖需定期刷新數據,卻因高存儲密度和低成本成為主流;靜態隨機存取內存(SRAM)速度更快,不過成本高、存儲密度低。

如今的雙倍數據速率同步動態隨機存取內存(DDR SDRAM),如 DDR4、DDR5,更是憑借高數據傳輸速率,大幅提升了計算機性能。在內存與 CPU 之間,還有緩存這一 “秘密武器”。緩存是位于兩者之間的高速存儲器,容量小卻速度極快,常以 L1、L2、L3 等多級形式存在。它利用程序訪問數據的局部性原理,將頻繁訪問的數據提前存儲,當 CPU 請求數據時,先在緩存中查找,若命中,數據便能迅速被獲取,大大提高了程序執行效率。接下來,就讓我們一同深入探索從硬件角度出發的內存管理,挖掘更多計算機底層性能的原理。

一、內存管理的硬件基石

1.1內存管理單元(MMU):地址轉換的幕后英雄

MMU是Memory Management Unit的縮寫,中文名是內存管理單元,有時稱作分頁內存管理單元(英語:paged memory management unit,縮寫為PMMU)。它是一種負責處理中央處理器(CPU)的內存訪問請求的計算機硬件。它的功能包括虛擬地址到物理地址的轉換(即虛擬內存管理)、內存保護、中央處理器高速緩存的控制,在較為簡單的計算機體系結構中,負責總線的仲裁以及存儲體切換(bank switching,尤其是在8位的系統上)。

內存管理單元(MMU)的一個重要功能是使系統能夠運行多個任務,作為獨立程序在自己的私有虛擬內存空間中運行。它們不需要了解系統的物理內存映射,即硬件實際使用的地址,也不需要了解可能同時執行的其他程序。

圖片圖片

打個比方,我們可以把計算機的內存想象成一個大型的倉庫,里面存放著各種各樣的物資(數據和程序)。而運行在計算機上的眾多程序,就如同一個個前來領取物資的客戶。如果沒有一個有效的管理機制,這些客戶可能會在倉庫里隨意翻找,不僅效率低下,還可能會出現混亂,導致物資的損壞或丟失。

而 MMU 就像是這個倉庫的大管家,它制定了一套嚴格而有序的管理規則。每個客戶(程序)在訪問倉庫(內存)時,都需要通過 MMU 這個大管家進行 “登記” 和 “授權”,然后由大管家將客戶的 “需求指令”(虛擬地址)準確無誤地轉換為倉庫中實際的 “物資存放位置”(物理地址),這樣客戶就能順利地獲取到自己需要的物資,同時也保證了倉庫的秩序和物資的安全。

從專業的角度來說,MMU 是一種負責處理中央處理器(CPU)的內存訪問請求的計算機硬件。它的出現,讓計算機系統能夠更加高效、穩定地運行多個任務,仿佛為每個任務都打造了一個屬于它們自己的獨立小世界,互不干擾,各自精彩。

(1)MMU的核心功能

①虛擬地址與物理地址的轉換魔法

在計算機的內存世界里,存在著兩種重要的地址概念:虛擬地址和物理地址。虛擬地址是程序在運行時所使用的地址,就像是我們在地圖上規劃的一條虛擬路線,它并不直接對應實際的物理內存位置。而物理地址則是內存芯片上實實在在的地址,是數據真正存儲的地方,就如同地圖上的實際地點。

那么,MMU 是如何將虛擬地址轉換為物理地址的呢?這就要借助頁表這個神奇的工具了。頁表就像是一本詳細的地址翻譯字典,記錄著虛擬地址和物理地址之間的映射關系。當 CPU 發出一個虛擬地址請求時,MMU 就會像查字典一樣,在頁表中查找對應的物理地址。

具體來說,虛擬地址會被劃分成頁號和頁內偏移兩部分。頁號就像是字典的索引,通過它可以快速定位到頁表中對應的條目,而這個條目里就存儲著對應的物理頁號。然后,將物理頁號和頁內偏移組合起來,就得到了最終的物理地址,從而能夠準確地訪問到內存中的數據。

舉個例子,假設我們有一個程序要訪問虛擬地址 0x12345678。MMU 首先會提取出頁號,比如是 0x1234,然后在頁表中查找這個頁號對應的條目。假設找到的條目顯示對應的物理頁號是 0x5678,而頁內偏移是 0x9ABC,那么最終的物理地址就是 0x56789ABC。通過這樣的轉換,程序就能夠順利地訪問到它所需要的數據,就好像我們通過地圖上的路線規劃找到了實際的目的地一樣。

mmu開啟以后會有以下特點:

  1. 多個程序獨立運行
  2. 虛擬地址是連續的(物理內存可以有碎片)
  3. 允許操作系統管理內存

下圖顯示的系統說明了內存的虛擬和物理視圖。單個系統中的不同處理器和設備可能具有不同的虛擬地址映射和物理地址映射。操作系統編寫程序,使MMU在這兩個內存視圖之間進行轉換:

圖片圖片

要做到這一點,虛擬內存系統中的硬件必須提供地址轉換,即將處理器發出的虛擬地址轉換為主內存中的物理地址。MMU使用虛擬地址中最重要的位來索引轉換表中的條目,并確定正在訪問哪個塊。MMU將代碼和數據的虛擬地址轉換為實際系統中的物理地址。該轉換將在硬件中自動執行,并且對應用程序是透明的。除了地址轉換之外,MMU還可以控制每個內存區域的內存訪問權限、內存順序和緩存策略。

MMU對執行的任務或應用程序可以不了解系統的物理內存映射,也可以不了解同時運行的其他程序。每個程序可以使用相同的虛擬內存地址空間。即使物理內存是碎片化的,還可以使用一個連續的虛擬內存映射。此虛擬地址空間與系統中內存的實際物理映射分開的。應用程序被編寫、編譯和鏈接,以在虛擬內存空間中運行。

圖片圖片

如上圖所示,TLB是MMU中最近訪問的頁面翻譯的緩存。對于處理器執行的每個內存訪問,MMU將檢查轉換是否緩存在TLB中。如果所請求的地址轉換在TLB中導致命中,則該地址的翻譯立即可用。TLB本質是一塊高速緩存。數據cache緩存地址(虛擬地址或者物理地址)和數據。TLB緩存虛擬地址和其映射的物理地址。TLB根據虛擬地址查找cache,它沒得選,只能根據虛擬地址查找。所以TLB是一個虛擬高速緩存。

每個TLB entry通常不僅包含物理地址和虛擬地址,還包含諸如內存類型、緩存策略、訪問權限、地址空間ID(ASID)和虛擬機ID(VMID)等屬性。如果TLB不包含處理器發出的虛擬地址的有效轉換,稱為TLB Miss,則將執行外部轉換頁表查找。MMU內的專用硬件使它能夠讀取內存中的轉換表。

然后,如果翻譯頁表沒有導致頁面故障,則可以將新加載的翻譯緩存在TLB中,以便進行后續的重用。簡單概括一下就是:硬件存在TLB后,虛擬地址到物理地址的轉換過程發生了變化。虛擬地址首先發往TLB確認是否命中cache,如果cache hit直接可以得到物理地址。否則,一級一級查找頁表獲取物理地址。并將虛擬地址和物理地址的映射關系緩存到TLB中。

如果操作系統修改了可能已經緩存在TLB中的轉換的entry,那么操作系統就有責任使這些未更新的TLB entry invaild。當執行A64代碼時,有一個TLBI,它是一個TLB無效的指令:

TLBI <type><level>{IS} {, <Xt>}

TLB可以保存固定數量的entry。可以通過由轉換頁表遍歷引起的外部內存訪問次數和獲得高TLB命中率來獲得最佳性能。ARMv8-A體系結構提供了一個被稱為連續塊entry的特性,以有效地利用TLB空間。轉換表每個entry都包含一個連續的位。當設置時,這個位向TLB發出信號,表明它可以緩存一個覆蓋多個塊轉換的單個entry。查找可以索引到連續塊所覆蓋的地址范圍中的任何位置。因此,TLB可以為已定義的地址范圍緩存一個entry從而可以在TLB中存儲更大范圍的虛擬地址。

②內存保護的堅固防線

MMU 不僅是地址轉換的高手,還是內存保護的堅固防線。在多任務的操作系統環境下,多個進程同時運行,就像一個熱鬧的大社區里住著許多戶人家。如果沒有有效的管理,這些進程可能會互相干擾,就像鄰居之間隨意闖入對方的房子一樣。

MMU 通過硬件機制實現了內存訪問授權,為每個進程分配了獨立的地址空間,就像給每個家庭都分配了獨立的房子,互不干擾。當一個進程試圖訪問內存時,MMU 會檢查該進程是否有權限訪問目標內存區域。只有當進程具有相應的訪問權限時,MMU 才會允許這次訪問,否則就會阻止訪問,并向操作系統報告,就像保安會阻止沒有權限的人進入特定區域一樣。

例如,一個進程 A 正在運行,它只能訪問屬于自己地址空間內的內存。如果進程 A 試圖訪問進程 B 的內存區域,MMU 會立即發現這個非法訪問行為,并阻止它,從而保證了系統的穩定性和安全性。這種內存保護機制有效地防止了進程之間的非法訪問,避免了因一個進程的錯誤而導致整個系統崩潰的情況,就像堅固的圍墻保護著每個家庭的安全,讓整個社區能夠和諧穩定地運轉。

1.2頁表:地址映射的導航圖

頁表是內存管理中不可或缺的部分,它就像是一本詳細的導航圖,記錄著虛擬地址與物理地址之間的映射關系 。在 32 位系統中,若頁面大小為 4KB,虛擬地址空間為 4GB,那么頁表可能會有 1048576(2 的 20 次方)個表項,每個表項對應一個 4KB 的頁面 。為了節省內存空間,現代操作系統普遍采用多級頁表結構 。以二級頁表為例,虛擬地址被進一步劃分為外層頁號、內層頁號和頁內偏移 。外層頁號用于索引一級頁表(頁目錄),找到對應的二級頁表起始地址;內層頁號再用于索引二級頁表,找到對應的物理頁框號;最后,物理頁框號與頁內偏移組合得到物理地址 。這樣,對于那些未使用的虛擬地址空間,就不需要為其分配實際的頁表項,大大節省了內存開銷 。

①在文件的讀寫中。在普通進程的匿名映射區操作中。在文件的讀寫中,進程對一個文件發起讀請求,如果沒喲對應的物理內存頁,則內核處理程序首先在頁緩存中查找,如果找到直接返回。如果沒找到,那么再分配空間,把內容從文件讀入內存,插入頁緩存,并返回,這里讀操作雖然是一個頁面發生的未命中,但是很大程度上會讀取多個連續頁面到內存中,只不過返回調用指定頁面,因為實際情況中,很少僅僅需要讀取一個頁面,這樣后續如果在需要訪問還是需要進行磁盤IO,磁盤尋道時間往往比讀取時間還要長,為了提高IO效率,就有了上述的預讀機制。。

②在普通進程的匿名映射中,比如進程申請的比較大的堆空間(大于128kb的都是利用MMAP映射的),這些空間的內容如果在一段時間內沒被釋放 且在一段時間內沒被訪問,則有可能被系統內存管理器交換到外存以騰出更多的物理內存空間。下次在進程訪問該內容,根據頁表查找發現物理頁面不在內存,則需要調用缺頁異常處理程序。異常處理程序判斷該頁時被換出到外存,那么首先也是在頁緩存中找,如果找到就返回;否則,從交換分區或者交換文件中把對應的文件讀入內存。這里所說的頁緩存和1中描述的頁緩存是一類緩存,但是并不是一個,1中的頁緩存是文件系統相關的,在磁盤上對應著具體的文件;在頁面回收的時候需要回寫到磁盤即同步一下;而2中的頁緩存其實是一種交換緩存,在頁面回收的時候只能是換出到交換分區或者交換文件,不存在同步的操作。

(1)Linux內核頁表結構

在Linux內核中,頁表是用來管理虛擬內存和物理內存之間映射關系的數據結構。Linux采用了兩級頁表(two-level page table)的結構,具體包括以下幾個部分:

  1. 一級頁表(Level 1 Page Table):也稱為頂層頁表(Top-Level Page Table),它是整個頁表層次結構的入口點。一級頁表的條目數與物理內存大小相關,每個條目指向二級頁表。
  2. 二級頁表(Level 2 Page Table):也稱為中間層頁表(Intermediate Page Table)。二級頁表將虛擬地址空間劃分成更小的區域,并對應到三級頁表。
  3. 三級頁表(Level 3 Page Table):也稱為底層頁表(Leaf Page Table)。三級頁表對應著最細粒度的頁面大小,通常是4KB或2MB。每個條目包含了虛擬地址和物理地址之間的映射關系。

通過多級頁表結構,Linux 內核能夠有效地管理大型虛擬地址空間和物理內存。當進程訪問一個虛擬地址時,內核會根據虛擬地址在不同層次的頁表中進行查找和轉換,最終得到對應的物理地址。

需要注意的是,在64位版本的 Linux 內核中,由于更廣闊的虛擬地址空間和更大容量的物理內存支持,可能會有更多級的頁表結構。具體的層次結構和細節可能因不同的架構、配置和內核版本而有所變化,上述描述僅為一般情況下的常見頁表結構。

①頁表項

頁表項(Page Table Entry)是頁表中的每個條目,用于描述虛擬地址與物理地址之間的映射關系。每個頁表項通常包含以下字段:

  1. 物理頁面基址(Physical Page Base Address):指向對應的物理內存頁面的起始地址。
  2. 標志位(Flags):用于控制頁面的訪問權限、緩存策略和其他特性。常見的標志位包括可讀/寫/執行權限、緩存禁用、全局標志等。
  3. 狀態位(Status Bits):記錄頁面的狀態信息,如臟頁標記、引用位等。
  4. 其他輔助字段:可能包含一些額外信息,如頁表層次索引、保留位等。

根據操作系統和硬件架構的不同,頁表項可能有不同的結構和長度。例如,在x86體系結構上,一個典型的32位頁表項長度為4字節(32 bits),而在64位上則是8字節(64 bits)。這些長度限制了能夠表示的物理內存大小和虛擬地址空間范圍。.

通過逐級查找和解析頁表項,操作系統可以將虛擬地址轉換為物理地址,并進行訪問控制和管理。因此,正確配置和使用頁表項對于有效管理內存和實現安全性至關重要。

②各種類型的頁面
  • Page Table Entry (PTE):記錄了一個頁面在物理內存中的地址以及相關信息,用于虛擬地址到物理地址的映射。
  • Page Global Directory (PGD):一種高級頁表結構,用于管理大量虛擬內存。它將多個Page Table組織起來,形成更大的虛擬地址空間。
  • Page Middle Directory (PMD):類似于PGD,但粒度更小。通常用于管理特定區域內的虛擬內存。
  • Inverted Page Table (IPT):與傳統頁表不同,IPT根據物理地址索引每個頁面對應的虛擬地址和進程信息。它可以減少頁表占用的內存,并提高查找效率。
  • Translation Lookaside Buffer (TLB):高速緩存,位于CPU芯片上,加速虛擬地址到物理地址轉換過程。

(2)虛擬地址到物理地址的映射過程

虛擬地址到物理地址的映射過程是通過頁表完成的。在使用虛擬內存時,操作系統將物理內存劃分成固定大小的頁面(通常為4KB),并將每個進程的虛擬地址空間劃分成相同大小的頁面。

當程序訪問虛擬地址時,CPU會將該虛擬地址發送給內存管理單元(MMU),其中包含一個頁表基址寄存器(Page Table Base Register, PTBR)指向當前進程的頁表。

映射過程如下:

  1. CPU將虛擬地址發送給MMU。
  2. MMU根據虛擬地址中的頁號找到對應的頁表項。
  3. 如果頁表項中標記為有效,則獲取對應的物理頁框號。
  4. 將物理頁框號與虛擬地址中的偏移量組合,得到最終的物理地址。
  5. 將最終物理地址返回給CPU,程序可以訪問該物理地址上存儲的數據。

如果在步驟3中發現頁表項無效,則表示所請求的頁面不在物理內存中。這時可能觸發缺頁異常,操作系統需要從磁盤上加載對應頁面,并更新頁表項以建立新的映射關系。

1.3高速緩存(Cache):提升訪問速度的加速器

高速緩存(Cache)是提高內存訪問速度的關鍵硬件組件,它利用了程序訪問的局部性原理,即程序在一段時間內往往會頻繁訪問相同或相鄰的內存區域 。Cache 通常分為多級,如 L1、L2 和 L3 Cache 。L1 Cache 速度最快,但容量最小,離 CPU 核心最近;L3 Cache 容量最大,但速度相對較慢 。當 CPU 需要訪問數據時,首先會在 L1 Cache 中查找,如果命中(找到所需數據),則可以快速獲取數據,大大縮短訪問時間;如果未命中,則會依次到 L2、L3 Cache 以及主內存中查找 。

例如,當 CPU 執行一個循環讀取數組元素的操作時,由于數組元素在內存中是連續存儲的,根據空間局部性原理,Cache 會將該數組附近的內存塊一并加載進來,這樣在后續讀取數組元素時,就很可能在 Cache 中命中,從而提高訪問效率 。Cache 的替換算法(如最近最少使用 LRU 算法)決定了當 Cache 空間已滿時,哪些數據會被替換出去,以保證 Cache 中始終存儲著最常用的數據 。

TLB是一種高速緩存,內存管理硬件使用它來改善虛擬地址到物理地址的轉換速度。當前所有的個人桌面,筆記本和服務器處理器都使用TLB來進行虛擬地址到物理地址的映射。使用TLB內核可以快速的找到虛擬地址指向物理地址,而不需要請求RAM內存獲取虛擬地址到物理地址的映射關系。這與data cache和instruction caches有很大的相似之處。

TLB的原理如下:

  1. 當CPU訪問一個虛擬地址時,首先檢查TLB中是否有對應的頁表項。
  2. 如果TLB中有對應的頁表項(即命中),則直接從TLB獲取物理地址。
  3. 如果TLB中沒有對應的頁表項(即未命中),則需要訪問內存來獲取正確的頁表項。
  4. 在未命中情況下,操作系統會進行相應處理,從主存中獲取正確的頁表項,并將其加載到TLB中以供后續使用。
  5. 一旦正確的頁表項加載到TLB中,CPU再次訪問相同虛擬地址時就可以直接在TLB中找到映射關系,提高了轉換效率。

TLB具有快速查找和高效緩存機制,能夠極大地減少查詢頁表所需的時間。然而,由于TLB是有限容量的,在大型程序或多任務環境下可能無法完全覆蓋所有需要轉換的頁面。當發生TLB未命中時,則會導致額外的內存訪問開銷;操作系統會負責管理和維護TLB,包括緩存策略、TLB的刷新機制等。常見的緩存策略有全相聯、組相聯和直接映射等。

二、內存管理的硬件策略

2.1分頁機制:化整為零的智慧

在 Linux 的世界里,內存分頁機制就像是一位有條不紊的大管家,精心管理著系統的內存資源。簡單來說,內存分頁機制就是把物理內存和虛擬內存分割成固定大小的小塊,這些小塊被稱作 “頁” ,每個頁的大小一般為 4KB 或者 8KB。就好比你有一個巨大的倉庫(內存),為了更好地管理里面的貨物(數據),你把倉庫劃分成了一個個大小相同的小隔間(頁)。

圖片圖片

分頁機制是 80x86 內存管理機制的第二部分。它在分段機制的基礎上完成虛擬地址到物理地址的轉換過程。分段機制把邏輯地址轉換成線性地址,而分頁機制則把線性地址轉換成物理地址。分頁機制可用于任何一種分段模型。處理器分頁機制會把線性地址空間劃分成頁面,然后這些線性地址空間頁面被映射到物理地址空間的頁面上。分頁機制的幾種頁面級保護措施,可和分段機制保護措施或用或替代分段機制的保護措施。

(1)分頁機制如何啟用

在我們進行程序開發的時候,一般情況下,是不需要管理內存的,也不需要操心內存夠不夠用,其實,這就是分頁機制給我們帶來的好處。它是實現虛擬存儲的關鍵,位于線性地址與物理地址之間,在使用這種內存分頁管理方法時,每個執行中的進程(任務)可以使用比實際內存容量大得多的連續地址空間。而且當系統內存實際上被分成很多凌亂的塊時,它可以建立一個大而連續的內存空間的映象,好讓程序不用操心和管理這些分散的內存塊。分頁機制增強了分段機制的性能。頁地址變換是建立在段變換基礎之上的。因為,段管理機制對于Intel處理器來說是最基本的,任何時候都無法關閉。所以即使啟用了頁管理功能,分段機制依然是起作用的,段部件也依然工作。

分頁只能在保護模式(CR0.PE = 1)下使用。在保護模式下,是否開啟分頁,由 CR0. PG 位(位 31)決定:

  • 當 CR0.PG = 0 時,未開啟分頁,線性地址等同于物理地址;
  • 當 CR0.PG = 1 時,開啟分頁。

(2)分頁機制線性地址到物理地址轉換過程

80x86使用 4K 字節固定大小的頁面,每個頁面均是 4KB,并且對其于 4K 地址邊界處。這表示分頁機制把 2^32字節(4GB)的線性地址空間劃分成 2^20(1M = 1048576)個頁面。分頁機制通過把線性地址空間中的頁面重新定位到物理地址空間中進行操作。由于 4K 大小的頁面作為一個單元進行映射,并且對其于 4K 邊界,因此線性地址的低 12 位可做為頁內偏移地量直接作為物理地址的低 12 位。分頁機制執行的重定向功能可以看作是把線性地址的高 20 位轉換到對應物理地址的高 20 位。

線性到物理地址轉換功能,被擴展成允許一個線性地址被標注為無效的,而非要讓其產生一個物理地址。以下兩種情況一個頁面可以被標注為無效的:

  • 1. 操作系統不支持的線性地址。
  • 2. 對應的虛擬內存系統中的頁面在磁盤上而非在物理內存中。

在第一中情況下,產生無效地址的程序必須被終止,在第二種情況下,該無效地址實際上是請求 操作系統虛擬內存管理器 把對應的頁面從磁盤加載到物理內存中,以供程序訪問。因為無效頁面通常與虛擬存儲系統相關,因此它們被稱為不存在頁面,由頁表中稱為存在的屬性來確定。

當使用分頁時,處理器會把線性地址空間劃分成固定大小的頁面(4KB),這些頁面可以映射到物理內存中或磁盤存儲空間中,當一個程序引用內存中的邏輯地址時,處理器會把該邏輯地址轉換成一個線性地址,然后使用分頁機制把該線性地址轉換成對應的物理地址。

如果包含線性地址的頁面不在當前物理內存中,處理器就會產生一個頁錯誤異常。頁錯誤異常處理程序就會讓操作系統從磁盤中把相應頁面加載到物理內存中(操作過程中可能會把物理內存中不同的頁面寫到磁盤上)。當頁面加載到物理內存之后,從異常處理過程的返回操作會使異常的指令被重新執行。處理器把用于線性地址轉換成物理地址和用于產生頁錯誤的信息包含在存儲與內存中的頁目錄與頁表中。

2.2分段機制:各司其職的分工

分段機制則是根據程序的邏輯結構將內存劃分為不同的段,如代碼段、數據段、堆棧段等 。每個段都有自己的段基址和段界限 。邏輯地址由段號和段內偏移組成 。當程序訪問內存時,首先根據段號在段表中查找對應的段基址,然后將段基址與段內偏移相加,得到物理地址 。例如,在 x86 架構中,CS 寄存器存儲代碼段的段選擇子,DS 寄存器存儲數據段的段選擇子 。

當執行一條指令時,會根據 CS 寄存器中的段選擇子在段表中找到代碼段的段基址,再加上指令中的偏移地址,從而確定指令在內存中的位置 。分段機制的優點在于它更符合程序員的思維方式,便于程序的模塊化設計和共享 。比如,多個進程可以共享同一個代碼段,減少內存的重復占用 。然而,分段機制也存在一些局限性,如容易產生外部碎片,內存分配和管理相對復雜等 。

(1)段選擇子與段描述符

在理解了段的基本概念后,我們來看看段選擇子和段描述符,它們在分段機制中起著至關重要的作用。

段選擇子是一個 16 位的字段,它就像是一把鑰匙,雖然不能直接打開段這個 “房間”,但可以指向段描述符表中定義段的段描述符。段選擇子包含三個部分:13 位的索引值,它就像是圖書館書架上的編號,用來指定段描述符在全局描述符表(GDT)或局部描述符表(LDT)中的位置;1 位的表指示標志 TI,TI = 0 ,表示描述符在 GDT 中,TI = 1,表示描述符在 LDT 中,這就好比是告訴你要去哪個圖書館的書架找書;還有 2 位的請求特權級 RPL,它規定了訪問該段所需的特權級別,就像是進入某些特殊房間需要特定的權限一樣。

段描述符則是一個 8 字節的數據結構,它詳細地描述了段的各種特征,就像是一份關于房子的詳細說明書。段描述符中包含段基地址、段限長、段屬性等重要信息。其中,段基地址明確了段的起始物理地址;段限長決定了段的長度;段屬性則涵蓋了段的訪問權限(如可讀、可寫、可執行等)、特權級等特性。通過段描述符,CPU 可以全面了解一個段的情況,從而進行正確的內存訪問。

(2)邏輯地址到線性地址的轉換

在 Linux 內核中,程序使用的是邏輯地址,而 CPU 訪問內存時需要的是線性地址,因此就需要進行邏輯地址到線性地址的轉換,這個轉換過程是分段機制的核心。

當程序運行時,CPU 會遇到一個邏輯地址,它由段選擇子和段內偏移量組成。為了將邏輯地址轉換為線性地址,CPU 會按照以下步驟進行操作:

  1. 查詢 GDT/LDT 表:CPU 首先會從段選擇子中提取出索引值和 TI 標志。如果 TI = 0,就表示要從全局描述符表 GDT 中查找段描述符;如果 TI = 1,則從局部描述符表 LDT 中查找。找到對應的描述符表后,根據索引值在表中定位到相應的段描述符,這就像是在圖書館的書架上找到了對應的書籍。
  2. 檢驗訪問權限和范圍:找到段描述符后,CPU 會檢查其中的段屬性,確認當前的訪問權限是否足夠,以及偏移量是否在段限長的范圍內。比如,如果當前程序試圖寫入一個只讀的代碼段,就會因為權限不足而觸發異常;如果偏移量超出了段限長,也會被判定為非法訪問,同樣會觸發異常,這就像是沒有權限進入特殊房間或者超出了房間的活動范圍。
  3. 計算線性地址:在確認訪問合法后,CPU 會將段描述符中的段基地址與邏輯地址中的段內偏移量相加,從而得到線性地址,這就像是找到了房間后,根據房間內的具體位置信息找到了對應的物品。這個線性地址就是 CPU 在下一步進行內存訪問時所使用的地址。

2.3虛擬內存技術:拓展內存的魔法

虛擬內存技術是利用磁盤空間來擴充物理內存的一種神奇技術 。它使得程序可以使用比實際物理內存更大的內存空間 。其原理是將物理內存和磁盤空間結合起來,操作系統將物理內存劃分為固定大小的頁框,將虛擬內存劃分為同樣大小的頁面 。當程序訪問的頁面不在物理內存中時,就會觸發缺頁中斷 。操作系統會根據一定的頁置換算法(如最近最少使用 LRU 算法),選擇一個物理內存中的頁面將其數據寫回磁盤,然后將程序需要的頁面從磁盤加載到物理內存中 。

例如,當一個程序運行時,它可能會申請大量的內存,但實際物理內存有限 。此時,操作系統會將一些暫時不使用的頁面(如程序中很久未訪問的數據頁面)交換到磁盤上的交換文件(Page File)中,當程序再次需要這些頁面時,再從磁盤中讀取回來 。這樣,程序就可以在有限的物理內存條件下運行,大大提高了系統的多任務處理能力和內存的使用效率 。

(1)為什么需要使用虛擬內存

進程需要使用的代碼和數據都放在內存中,比放在外存中要快很多。問題是內存空間太小了,不能滿足進程的需求,而且現在都是多進程,情況更加糟糕。所以提出了虛擬內存,使得每個進程用于3G的獨立用戶內存空間和共享的1G內核內存空間。(每個進程都有自己的頁表,才使得3G用戶空間的獨立)這樣進程運行的速度必然很快了。而且虛擬內存機制還解決了內存碎片和內存不連續的問題。為什么可以在有限的物理內存上達到這樣的效果呢?

為了更直觀地理解,我們可以把虛擬內存想象成一個圖書館的目錄系統。每個進程就像是一個讀者,擁有自己的目錄(虛擬地址空間)。當讀者想要查找某本書(訪問數據)時,會先在自己的目錄中找到對應的條目(虛擬地址),然后通過這個條目去書架(物理內存)上找到實際的書。如果書架上沒有這本書(缺頁異常),圖書館管理員(操作系統)就會從倉庫(磁盤)中把書取出來放到書架上,并更新目錄(頁表),以便下次讀者能更快地找到這本書。

例如:對于程序計數器位數為32位的處理器來說,他的地址發生器所能發出的地址數目為2^32=4G個,于是這個處理器所能訪問的最大內存空間就是4G。在計算機技術中,這個值就叫做處理器的尋址空間或尋址能力。

照理說,為了充分利用處理器的尋址空間,就應按照處理器的最大尋址來為其分配系統的內存。如果處理器具有32位程序計數器,那么就應該按照下圖的方式,為其配備4G的內存:

圖片圖片

這樣,處理器所發出的每一個地址都會有一個真實的物理存儲單元與之對應;同時,每一個物理存儲單元都有唯一的地址與之對應。這顯然是一種最理想的情況。

但遺憾的是,實際上計算機所配置內存的實際空間常常小于處理器的尋址范圍,這是就會因處理器的一部分尋址空間沒有對應的物理存儲單元,從而導致處理器尋址能力的浪費。例如:如下圖的系統中,具有32位尋址能力的處理器只配置了256M的內存儲器,這就會造成大量的浪費:

圖片圖片

另外,還有一些處理器因外部地址線的根數小于處理器程序計數器的位數,而使地址總線的根數不滿足處理器的尋址范圍,從而處理器的其余尋址能力也就被浪費了。例如:Intel8086處理器的程序計數器位32位,而處理器芯片的外部地址總線只有20根,所以它所能配置的最大內存為1MB:

圖片圖片

在實際的應用中,如果需要運行的應用程序比較小,所需內存容量小于計算機實際所配置的內存空間,自然不會出什么問題。但是,目前很多的應用程序都比較大,計算機實際所配置的內存空間無法滿足。

實踐和研究都證明:一個應用程序總是逐段被運行的,而且在一段時間內會穩定運行在某一段程序里。

這也就出現了一個方法:如下圖所示,把要運行的那一段程序自輔存復制到內存中來運行,而其他暫時不運行的程序段就讓它仍然留在輔存。

圖片圖片

當需要執行另一端尚未在內存的程序段(如程序段2),如下圖所示,就可以把內存中程序段1的副本復制回輔存,在內存騰出必要的空間后,再把輔存中的程序段2復制到內存空間來執行即可:

圖片圖片

在計算機技術中,把內存中的程序段復制回輔存的做法叫做“換出”,而把輔存中程序段映射到內存的做法叫做“換入”。經過不斷有目的的換入和換出,處理器就可以運行一個大于實際物理內存的應用程序了。或者說,處理器似乎是擁有了一個大于實際物理內存的內存空間。于是,這個存儲空間叫做虛擬內存空間,而把真正的內存叫做實際物理內存,或簡稱為物理內存。

那么對于一臺真實的計算機來說,它的虛擬內存空間又有多大呢?計算機虛擬內存空間的大小是由程序計數器的尋址能力來決定的。例如:在程序計數器的位數為32的處理器中,它的虛擬內存空間就為4GB。

可見,如果一個系統采用了虛擬內存技術,那么它就存在著兩個內存空間:虛擬內存空間和物理內存空間。虛擬內存空間中的地址叫做“虛擬地址”;而實際物理內存空間中的地址叫做“實際物理地址”或“物理地址”。處理器運算器和應用程序設計人員看到的只是虛擬內存空間和虛擬地址,而處理器片外的地址總線看到的只是物理地址空間和物理地址。

由于存在兩個內存地址,因此一個應用程序從編寫到被執行,需要進行兩次映射。第一次是映射到虛擬內存空間,第二次時映射到物理內存空間。在計算機系統中,第兩次映射的工作是由硬件和軟件共同來完成的。承擔這個任務的硬件部分叫做存儲管理單元MMU,軟件部分就是操作系統的內存管理模塊了。

在映射工作中,為了記錄程序段占用物理內存的情況,操作系統的內存管理模塊需要建立一個表格,該表格以虛擬地址為索引,記錄了程序段所占用的物理內存的物理地址。這個虛擬地址/物理地址記錄表便是存儲管理單元MMU把虛擬地址轉化為實際物理地址的依據,記錄表與存儲管理單元MMU的作用如下圖所示:

圖片圖片

綜上所述,虛擬內存技術的實現,是建立在應用程序可以分成段,并且具有“在任何時候正在使用的信息總是所有存儲信息的一小部分”的局部特性基礎上的。它是通過用輔存空間模擬RAM來實現的一種使機器的作業地址空間大于實際內存的技術。

從處理器運算裝置和程序設計人員的角度來看,它面對的是一個用MMU、映射記錄表和物理內存封裝起來的一個虛擬內存空間,這個存儲空間的大小取決于處理器程序計數器的尋址空間。

可見,程序映射表是實現虛擬內存的技術關鍵,它可給系統帶來如下特點:

  • 系統中每一個程序各自都有一個大小與處理器尋址空間相等的虛擬內存空間;
  • 在一個具體時刻,處理器只能使用其中一個程序的映射記錄表,因此它只看到多個程序虛存空間中的一個,這樣就保證了各個程序的虛存空間時互不相擾、各自獨立的;
  • 使用程序映射表可方便地實現物理內存的共享。

(2)虛擬內存的頁、物理內存的頁框及頁表

在Linux中,頁與頁框的大小一般為4KB。當然,根據系統和應用的不同,頁與頁框的大小也可有所變化。

物理內存和虛擬內存被分成了頁框與頁之后,其存儲單元原來的地址都被自然地分成了兩段,并且這兩段各自代表著不同的意義:高位段分別叫做頁框碼和頁碼,它們是識別頁框和頁的編碼;低位段分別叫做頁框偏移量和頁內偏移量,它們是存儲單元在頁框和頁內的地址編碼。下圖就是兩段虛擬內存和物理內存分頁之后的情況:

圖片圖片

為了使系統可以正確的訪問虛存頁在對應頁框中的映像,在把一個頁映射到某個頁框上的同時,就必須把頁碼和存放該頁映像的頁框碼填入一個叫做頁表的表項中。這個頁表就是之前提到的映射記錄表。一個頁表的示意圖如下所示:

圖片圖片

頁模式下,虛擬地址、物理地址轉換關系的示意圖如下所示:

圖片圖片

也就是說:處理器遇到的地址都是虛擬地址。虛擬地址和物理地址都分成頁碼(頁框碼)和偏移值兩部分。在由虛擬地址轉化成物理地址的過程中,偏移值不變。而頁碼和頁框碼之間的映射就在一個映射記錄表——頁表中。

話說回來,內存映射是 Linux 中一種重要的內存管理技術,它允許將一個文件或者其他對象映射到進程的虛擬地址空間中,使得進程可以像訪問內存一樣直接訪問文件 。這種技術的核心優勢在于提高了文件訪問的效率,減少了內核和用戶空間之間的數據拷貝。在 Linux 中,內存映射主要通過mmap()系統調用實現。

mmap()函數將文件或其他對象映射到虛擬地址空間的一個連續區域,返回一個指向映射區域開始地址的指針 。對該指針進行讀寫操作,實際上就是在訪問文件內容。使用munmap()函數可以解除內存映射。

三、硬件內存管理的性能優化

3.1硬件緩存優化:突破速度瓶頸

隨著計算機技術的飛速發展,硬件緩存優化成為提升內存管理性能的關鍵方向。在多核處理器和多通道內存控制器的協同作用下,緩存的并行性得到了極大提升 。以英特爾的酷睿 i9 系列處理器為例,其多核架構使得多個核心可以同時訪問緩存,配合多通道內存控制器,能夠顯著提高數據的讀寫速度 。當一個大型數據庫應用程序運行時,多核處理器的不同核心可以同時從緩存中讀取數據,多通道內存控制器則確保數據能夠快速地在內存和緩存之間傳輸,從而加速數據庫的查詢操作 。

硬件壓縮技術也為緩存優化帶來了新的思路 。通過在硬件層面實現數據壓縮和解壓縮,能夠有效減少內存占用,提高緩存的利用率 。一些高端服務器采用了基于硬件的壓縮技術,如英特爾的 QuickAssist Technology(QAT),可以對存儲在緩存中的數據進行實時壓縮 。當數據被寫入緩存時,硬件壓縮模塊會自動對數據進行壓縮,從而節省緩存空間;當數據被讀取時,再進行快速解壓縮 。這在處理大規模數據時,能夠顯著提高緩存的命中率,減少對主內存的訪問次數,進而提升系統性能 。

新型非易失性內存(NVM)的出現,為緩存性能的提升提供了新的可能 。相變存儲器(PCM)、磁阻隨機存取存儲器(MRAM)等新型 NVM 具有非易失性、高存儲密度和低功耗等優點 。將這些新型 NVM 應用于緩存中,可以實現更快的數據訪問速度和更高的緩存容量 。例如,三星的基于 PCM 的緩存技術,在斷電時數據不會丟失,并且能夠快速地響應讀寫請求,大大提高了系統的穩定性和性能 。

3.2大頁內存管理:提升效率的新途徑

大頁內存管理作為一種新興的內存管理技術,正逐漸在高性能計算領域嶄露頭角 。其原理是使用更大的頁大?。ㄈ?2MB 或 1GB)來替代傳統的 4KB 頁大小,從而減少頁表項的數量,優化內存訪問性能 。以數據庫管理系統為例,如 Oracle 數據庫,在處理大規模數據時,使用大頁內存可以顯著減少頁表的開銷 。由于大頁內存的頁表項數量大幅減少,數據庫在進行數據查詢時,地址轉換的時間大大縮短,從而提高了查詢性能 。在一個擁有 128GB 內存的數據庫服務器中,使用 4KB 頁大小可能會產生數百萬個頁表項,而使用 2MB 大頁內存,頁表項數量可以減少到原來的千分之一,這使得數據庫的內存管理更加高效 。

在虛擬化場景里,大頁內存管理的價值同樣不可忽視。以主流的 VMware ESXi 虛擬化平臺為例,它對大頁內存提供完善支持,這一特性能直接降低虛擬機運行過程中的內存管理開銷。要知道,虛擬機與宿主機之間的上下文切換,往往伴隨著一系列復雜的內存管理操作,而大頁內存可有效簡化這些流程 —— 通過減少上下文切換所需的時間,直接為虛擬機性能提升提供助力。尤其在運行多臺虛擬機的服務器中,當每臺虛擬機都啟用大頁內存后,不僅能顯著減少內存碎片問題,讓內存資源的利用率得到優化,還能從整體上進一步提升所有虛擬機的運行性能,為多負載虛擬化環境提供更穩定高效的內存支撐。

責任編輯:武曉燕 來源: 深度Linux
相關推薦

2021-07-20 10:26:53

源碼底層ArrayList

2025-09-29 05:00:00

Linux線程棧內存

2022-07-15 13:01:13

Kotlin編程語言Java

2022-02-17 08:16:23

MMU內存管理

2021-01-16 12:10:24

Go語言計算機位開發

2021-07-27 05:21:34

邊緣計算數據網絡

2025-09-03 01:45:00

2023-08-14 08:10:33

CPU緩存RFO

2014-07-14 15:19:43

IT信息工程運維

2014-04-10 09:40:51

System 360計算機計算機系統

2021-02-20 20:55:06

USB接口總線

2010-06-07 10:44:09

2019-04-28 16:10:50

設計Redux前端

2020-02-04 09:53:05

數據安全數據泄漏信息安全

2019-02-18 14:42:18

React.jsUI前端

2014-04-16 14:26:08

QCon2014

2021-06-11 07:26:16

操作系統內存管理Cpu

2015-07-02 09:47:36

超級計算機大數據

2022-11-30 07:47:36

硬件速度差異讀寫

2010-07-29 10:16:17

Linux內核Linux內存
點贊
收藏

51CTO技術棧公眾號

欧美男人的天堂一二区| 97久久超碰国产精品| 欧美黑人xxxx| 自拍视频一区二区| 欧美日韩免费看片| 国产精品欧美综合在线| 国产高清一区视频| 国产又大又粗又爽| 亚洲国产一区二区在线观看| 亚洲第一网中文字幕| 欧美一级黄色影院| 亚洲奶水xxxx哺乳期| 99re这里只有精品6| 国产日韩欧美黄色| 国产一级18片视频| 国产精品久久久久久久久妇女| 精品盗摄一区二区三区| 538任你躁在线精品免费| 免费在线看电影| 中文字幕不卡的av| 狠狠色综合欧美激情| 91尤物国产福利在线观看| 亚洲区欧美区| 久久国产精品网站| 亚洲av熟女国产一区二区性色 | 91精品国产自产在线老师啪| 日韩成人免费在线视频| 亚洲欧美网站在线观看| 亚洲午夜激情免费视频| 久久久老熟女一区二区三区91| 懂色aⅴ精品一区二区三区| 亚洲成a人v欧美综合天堂| 亚洲综合激情五月| 福利小视频在线观看| 91啪亚洲精品| 国产欧美日韩伦理| 国产99久一区二区三区a片 | 欧美电影《轻佻寡妇》| 日韩国产精品一区| 色哟哟无码精品一区二区三区| 国产欧美在线观看免费| 色婷婷综合久色| 欧美不卡在线播放| 久久99亚洲网美利坚合众国| 综合激情成人伊人| 亚洲天堂电影网| a中文在线播放| 久久久久久久久久久久久久久99| 国产尤物99| 狠狠躁日日躁夜夜躁av| 国产成人av一区二区三区在线观看| 国产在线视频一区| 一区二区三区精彩视频| 老司机一区二区| 91精品国产综合久久香蕉| 亚洲中文一区二区三区| 麻豆免费精品视频| 成人激情黄色网| 国产精品爽爽久久久久久| 黄页网站大全一区二区| 亚洲在线第一页| www.天堂在线| 成人一级片网址| 精品不卡在线| 蜜桃视频在线免费| 国产欧美精品国产国产专区| 视频一区二区三区在线观看| 日本中文字幕在线视频| 亚洲色大成网站www久久九九| 免费看av软件| 日本天码aⅴ片在线电影网站| 亚洲午夜精品在线| 欧美 日韩 激情| 国精产品一区二区三区有限公司 | 国产精品传媒视频| 五月天在线免费视频| 欧美性受ⅹ╳╳╳黑人a性爽| 亚洲国产精品精华液网站| 久久精品免费一区二区| 色猫猫成人app| 91精品国产综合久久精品| 日本黄色大片在线观看| 亚洲系列另类av| 亚洲视频在线看| 日韩一区二区三区四区视频| 综合一区在线| 2023亚洲男人天堂| 一级爱爱免费视频| 成人一区二区三区视频| 色噜噜色狠狠狠狠狠综合色一 | 成人欧美一区二区三区小说 | 久久久久久久尹人综合网亚洲 | 欧美黄色一级| 亚洲精品美女在线观看| 日日操免费视频| 精品动漫3d一区二区三区免费版| 91精品国产电影| 在线观看中文字幕2021| 成人午夜av电影| 日韩免费中文专区| 女同视频在线观看| 欧美色图在线观看| 日本一区二区在线观看视频| 成人羞羞在线观看网站| 欧美激情精品久久久久久大尺度| aaa在线视频| 国产成人综合在线观看| 日韩欧美亚洲日产国产| 免费在线国产视频| 欧美日韩精品欧美日韩精品一| 高清中文字幕mv的电影| sdde在线播放一区二区| 午夜精品久久久久久久99热| 一区不卡在线观看| 91免费看视频| 欧美一级视频在线播放| 亚洲人成777| 永久555www成人免费| 日本少妇在线观看| 国产福利一区在线| 亚洲一区二区三区精品在线观看| 性欧美xxx69hd高清| 日韩欧美一区二区不卡| 来吧亚洲综合网| 老司机精品久久| 精品一区二区三区免费毛片| 四虎影院观看视频在线观看| 欧美日本不卡视频| 日韩视频在线观看免费视频| 在线欧美三区| 99一区二区三区| 国产超级va在线视频| 欧美视频在线不卡| 黑人巨大精品欧美| 国产视频一区在线观看一区免费| 超碰国产精品久久国产精品99| 无遮挡的视频在线观看 | 99精品小视频| 国产精品免费久久久| 你懂的在线观看| 日韩欧美中文免费| 欧美色图亚洲激情| 亚洲欧美日韩一区在线观看| 精品国产乱码久久久久久丨区2区| 欧美四级在线| 欧美mv日韩mv国产网站app| 欧美色图亚洲视频| 国产麻豆成人传媒免费观看| 亚洲五码在线观看视频| 精品一区二区三区中文字幕视频 | 免费在线观看一级片| 精品伊人久久久久7777人| 在线观看日韩片| av在线亚洲一区| 久久影院资源网| 国产高清免费在线观看| 亚洲一区二区三区影院| 国产国语老龄妇女a片| 18成人免费观看视频| 国产在线精品一区二区三区| 日韩伦理在线一区| 亚洲美女www午夜| 波多野结衣黄色网址| 亚洲国产成人私人影院tom| 一区二区三区 欧美| 欧美成人milf| 国产成人亚洲欧美| 久草在线资源福利站| 亚洲人成网站色ww在线| 欧美一级黄视频| 国产精品成人午夜| 在线视频一二区| 好吊日精品视频| 蜜桃麻豆91| 欧美黄色网络| 欧美极品少妇xxxxⅹ喷水| 无码精品视频一区二区三区| 欧美视频在线免费看| 美国一级黄色录像| 国产乱人伦偷精品视频不卡| 黄页免费在线观看视频| 欧美丝袜激情| 懂色一区二区三区av片| 欧美大胆成人| 另类图片亚洲另类| 午夜视频在线播放| 色8久久人人97超碰香蕉987| 久久嫩草捆绑紧缚| 91蝌蚪porny成人天涯| 色婷婷成人在线| 亚洲国产第一| 亚洲乱码一区二区三区| 大陆精大陆国产国语精品| 国产成人高清激情视频在线观看| 快射av在线播放一区| 亚洲激情视频在线观看| 91亚洲精品国偷拍自产在线观看| 亚洲不卡一区二区三区| 亚洲天堂精品一区| 91一区二区在线| 天天色天天综合网| 久久久久久一区二区| 欧美大片免费播放| 精品盗摄女厕tp美女嘘嘘| 国产精品xxx在线观看www| 日韩城人网站| 国产成人精品电影久久久| 天堂av在线电影| 日韩中文字幕免费看| 日本天堂影院在线视频| 日韩欧美不卡一区| 成人黄色免费网| 亚洲成人一区二区| 乱h高h女3p含苞待放| 久久蜜臀精品av| 性欧美暴力猛交另类hd| 成人午夜在线影院| 日韩电影毛片| 欧美成aaa人片免费看| 成人影院免费观看| 日韩精品免费综合视频在线播放 | 色婷婷亚洲精品| 国产在线视频你懂的| 中文字幕av一区二区三区高| 少妇一级淫免费观看| 国产曰批免费观看久久久| 熟妇人妻无乱码中文字幕真矢织江| 亚洲黄网站黄| www国产免费| 婷婷综合亚洲| 亚洲免费在线精品一区| 久久99国产精品视频| 好吊色欧美一区二区三区四区 | 在线精品日韩| 欧美亚洲国产一区| 日本一区二区三区在线视频| 天堂一区二区三区四区| 国内视频一区| 任你弄精品视频免费观看| 国产精品久久久久久久久久久久冷| 高清一区二区三区av| 国产欧美一区二区三区在线看| 亚洲a∨精品一区二区三区导航| 日本高清视频一区| 自拍偷拍欧美视频| 欧美一级黄色网| 亚洲天堂资源| 国产98色在线| 精品裸体bbb| 国产欧亚日韩视频| 成人久久精品| 91久久国产自产拍夜夜嗨| 欧美大片91| 国产不卡一区二区三区在线观看| 中文字幕av一区二区三区四区| 成人黄动漫网站免费| www.久久东京| 免费成人深夜夜行视频| 久久av综合| 亚洲视频欧美在线| 一区二区电影在线观看| 青草网在线观看| 亚洲一区二区三区高清| www.欧美日本| 激情综合色综合久久综合| 久久精品一二三四| 不卡视频在线看| 永久免费成人代码| 国产精品久久久久久久久晋中| 少妇被躁爽到高潮无码文| 亚洲午夜精品在线| 午夜精品免费观看| 欧美日韩一区二区三区高清| 国产亲伦免费视频播放| 欧美精品一区二区久久婷婷| 男人的天堂在线视频| 中文字幕亚洲欧美在线| 少女频道在线观看免费播放电视剧| 欧美精品久久久久久久免费观看 | 欧美日韩成人综合天天影院| 91丨九色丨蝌蚪丨对白| 欧美哺乳videos| 黄色av网址在线免费观看| y97精品国产97久久久久久| 欧美xxxxhdvideosex| 国产91露脸中文字幕在线| 日韩在线电影| 久久精品中文字幕一区二区三区| 精品视频免费| 免费网站在线观看视频| 久久这里有精品15一区二区三区| 天堂av8在线| 91浏览器在线视频| 永久免费看片视频教学| 亚洲二区在线观看| 国产精品第6页| 日韩欧美国产三级电影视频| 欧美日韩国产亚洲沙发| 久久综合电影一区| www.成人爱| 99精彩视频| 欧美一区二区三| 日韩五码在线观看| 麻豆成人免费电影| 久久久久久久久免费看无码 | 香蕉影院在线观看| 欧美一区二区在线看| 青青九九免费视频在线| 欧美成人激情在线| 欧洲亚洲两性| 国产传媒一区| 天天精品视频| 精品www久久久久奶水| 国产成人99久久亚洲综合精品| 乐播av一区二区三区| 亚洲国产成人高清精品| 一级做a爱片性色毛片| 亚洲精品小视频在线观看| 三级网站视频在在线播放| 国产欧美一区二区三区在线看| 猛男gaygay欧美视频| 日韩黄色片在线| 狠狠狠色丁香婷婷综合激情| 欧美激情视频二区| 欧美日韩亚洲一区二| 亚洲国产精品suv| x99av成人免费| 青青热久免费精品视频在线18| 国内精品久久国产| 亚洲经典视频在线观看| 国产精品欧美性爱| 亚洲欧美另类图片小说| 91国产免费视频| 社区色欧美激情 | 四虎成人在线| 日韩欧美亚洲区| 欧美aaa在线| 在线观看免费黄色网址| 精品视频在线看| 91.xxx.高清在线| 国产精品小说在线| 久久人人99| 久久人人爽av| 亚洲视频资源在线| 国产毛片毛片毛片毛片毛片| 久久亚洲精品中文字幕冲田杏梨| 日韩电影精品| 黄色www在线观看| 国产精品996| 国产一级做a爱免费视频| 亚洲国产福利在线| 漫画在线观看av| 日本欧洲国产一区二区| 三级欧美韩日大片在线看| 天堂在线中文视频| 欧美乱妇23p| 精精国产xxxx视频在线中文版| 国产日本一区二区三区| 国产一区二区三区的电影| a级在线免费观看| 欧美日韩美少妇| 色在线视频网| 久久99精品国产一区二区三区| 亚洲欧美日韩视频二区| 成人小视频免费看| 日韩一级免费一区| 91美女精品| 品久久久久久久久久96高清| 美女网站在线免费欧美精品| 午夜国产福利一区二区| 精品日韩欧美在线| 性孕妇free特大另类| 少妇精品久久久久久久久久| 九九在线精品视频| 久草网视频在线观看| 日韩精品在线看| 国产激情欧美| 欧美激情亚洲天堂| 久久视频一区二区| 91国偷自产中文字幕久久| 久久久久这里只有精品| 美日韩中文字幕| 红桃视频一区二区三区免费| 亚洲成人av免费| 国产福利在线视频| 翡翠波斯猫1977年美国| 日韩有码一区二区三区| 成人观看免费视频| 精品中文视频在线| 国产精品2区| 国产黄视频在线| 国产精品久久午夜| 欧美一级性视频| 国产精品一区电影| 99精品久久| 成人涩涩小片视频日本| 亚洲精品久久久久久下一站| 国产亚洲人成a在线v网站| 隔壁人妻偷人bd中字| 亚洲欧洲www|