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

看完這篇,別再說你不懂 Linux 內存管理了

新聞 Linux
對于精通 CURD 的業務同學,內存管理好像離我們很遠,但這個知識點雖然冷門(估計很多人學完根本就沒機會用上)但絕對是基礎中的基礎。

  對于精通 CURD 的業務同學,內存管理好像離我們很遠,但這個知識點雖然冷門(估計很多人學完根本就沒機會用上)但絕對是基礎中的基礎。

這就像武俠小說中的內功修煉,學完之后看不到立竿見影的效果,但對你日后的開發工作是大有裨益的,因為你站的更高了。

文中所有示例圖都是我親手畫的,畫圖比碼字還費時間,但大家看圖理解比文字更直觀,所以還是畫了。需要高清示例圖片的同學,文末有獲取方式自取。

再功利點的說,面試的時候不經意間透露你懂這方面知識,并且能說出個一二三來,也許能讓面試官對你更有興趣,離升職加薪,走上人生巔峰又近了一步。

前提約定:本文討論技術內容前提,操作系統環境都是 x86架構的 32 位 Linux系統。

虛擬地址

即使是現代操作系統中,內存依然是計算機中很寶貴的資源,看看你電腦幾個T固態硬盤,再看看內存大小就知道了。

為了充分利用和管理系統內存資源,Linux采用虛擬內存管理技術,利用虛擬內存技術讓每個進程都有4GB 互不干涉的虛擬地址空間。

進程初始化分配和操作的都是基于這個「虛擬地址」,只有當進程需要實際訪問內存資源的時候才會建立虛擬地址和物理地址的映射,調入物理內存頁。

打個不是很恰當的比方,這個原理其實和現在的某某網盤一樣。假如你的網盤空間是1TB,真以為就一口氣給了你這么大空間嗎?那還是太年輕,都是在你往里面放東西的時候才給你分配空間,你放多少就分多少實際空間給你,但你和你朋友看起來就像大家都擁有1TB空間一樣。

虛擬地址的好處

  • 避免用戶直接訪問物理內存地址,防止一些破壞性操作,保護操作系統
  • 每個進程都被分配了4GB的虛擬內存,用戶程序可使用比實際物理內存更大的地址空間

4GB 的進程虛擬地址空間被分成兩部分:「用戶空間」和「內核空間」

用戶空間內核空間

物理地址

上面章節我們已經知道不管是用戶空間還是內核空間,使用的地址都是虛擬地址,當需進程要實際訪問內存的時候,會由內核的「請求分頁機制」產生「缺頁異?!拐{入物理內存頁。

把虛擬地址轉換成內存的物理地址,這中間涉及利用MMU 內存管理單元(Memory Management Unit ) 對虛擬地址分段和分頁(段頁式)地址轉換,關于分段和分頁的具體流程,這里不再贅述,可以參考任何一本計算機組成原理教材描述。

段頁式內存管理地址轉換

Linux 內核會將物理內存分為3個管理區,分別是:

ZONE_DMA

DMA內存區域。包含0MB~16MB之間的內存頁框,可以由老式基于ISA的設備通過DMA使用,直接映射到內核的地址空間。

ZONE_NORMAL

普通內存區域。包含16MB~896MB之間的內存頁框,常規頁框,直接映射到內核的地址空間。

ZONE_HIGHMEM

高端內存區域。包含896MB以上的內存頁框,不進行直接映射,可以通過永久映射和臨時映射進行這部分內存頁框的訪問。

物理內存區劃分

用戶空間

用戶進程能訪問的是「用戶空間」,每個進程都有自己獨立的用戶空間,虛擬地址范圍從從 0x00000000 至 0xBFFFFFFF 總容量3G 。

用戶進程通常只能訪問用戶空間的虛擬地址,只有在執行內陷操作或系統調用時才能訪問內核空間。

進程與內存

進程(執行的程序)占用的用戶空間按照「 訪問屬性一致的地址空間存放在一起 」的原則,劃分成 5個不同的內存區域。訪問屬性指的是“可讀、可寫、可執行等 。

  • 代碼段

代碼段是用來存放可執行文件的操作指令,可執行程序在內存中的鏡像。代碼段需要防止在運行時被非法修改,所以只準許讀取操作,它是不可寫的。

  • 數據段

數據段用來存放可執行文件中已初始化全局變量,換句話說就是存放程序靜態分配的變量和全局變量。

  • BSS段

BSS段包含了程序中未初始化的全局變量,在內存中 bss 段全部置零。

  • 堆 heap

堆是用于存放進程運行中被動態分配的內存段,它的大小并不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)

  • 棧 stack

棧是用戶存放程序臨時創建的局部變量,也就是函數中定義的變量(但不包括 static 聲明的變量,static意味著在數據段中存放變量)。除此以外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,并且待到調用結束后,函數的返回值也會被存放回棧中。由于棧的先進先出特點,所以棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆??闯梢粋€寄存、交換臨時數據的內存區。

上述幾種內存區域中數據段、BSS 段、堆通常是被連續存儲在內存中,在位置上是連續的,而代碼段和棧往往會被獨立存放。堆和棧兩個區域在 i386 體系結構中棧向下擴展、堆向上擴展,相對而生。

你也可以在linux下用size 命令查看編譯后程序的各個內存區域大?。?/p>

  1. [lemon ~]# size /usr/local/sbin/sshd 
  2.  
  3. text    data    bss dec hex filename 
  4.  
  5. 1924532 12412   426896  2363840 2411c0  /usr/local/sbin/sshd 

內核空間

在 x86 32 位系統里,Linux 內核地址空間是指虛擬地址從 0xC0000000 開始到 0xFFFFFFFF 為止的高端內存地址空間,總計 1G 的容量, 包括了內核鏡像、物理頁面表、驅動程序等運行在內核空間 。

內核空間細分區域.

直接映射區

直接映射區 Direct Memory Region:從內核空間起始地址開始,最大896M的內核空間地址區間,為直接內存映射區。

直接映射區的896MB的「線性地址」直接與「物理地址」的前896MB進行映射,也就是說線性地址和分配的物理地址都是連續的。內核地址空間的線性地址0xC0000001所對應的物理地址為0x00000001,它們之間相差一個偏移量PAGE_OFFSET = 0xC0000000

該區域的線性地址和物理地址存在線性轉換關系「線性地址 = PAGE_OFFSET + 物理地址」也可以用 virt_to_phys()函數將內核虛擬空間中的線性地址轉化為物理地址。

高端內存線性地址空間

內核空間線性地址從 896M 到 1G 的區間,容量 128MB 的地址區間是高端內存線性地址空間,為什么叫高端內存線性地址空間?下面給你解釋一下:

前面已經說過,內核空間的總大小 1GB,從內核空間起始地址開始的 896MB 的線性地址可以直接映射到物理地址大小為 896MB 的地址區間。

退一萬步,即使內核空間的1GB線性地址都映射到物理地址,那也最多只能尋址 1GB 大小的物理內存地址范圍。

請問你現在你家的內存條多大?快醒醒都 0202 年了,一般 PC 的內存都大于 1GB 了吧!

[[330586]]

所以,內核空間拿出了最后的 128M 地址區間,劃分成下面三個高端內存映射區,以達到對整個物理地址范圍的尋址。而在 64 位的系統上就不存在這樣的問題了,因為可用的線性地址空間遠大于可安裝的內存。

動態內存映射區

vmalloc Region 該區域由內核函數vmalloc來分配,特點是:線性空間連續,但是對應的物理地址空間不一定連續。vmalloc 分配的線性地址所對應的物理頁可能處于低端內存,也可能處于高端內存。

永久內存映射區

Persistent Kernel Mapping Region 該區域可訪問高端內存。訪問方法是使用 alloc_page (_GFP_HIGHMEM) 分配高端內存頁或者使用kmap函數將分配到的高端內存映射到該區域。

固定映射區

Fixing kernel Mapping Region 該區域和 4G 的頂端只有 4k 的隔離帶,其每個地址項都服務于特定的用途,如 ACPI_BASE 等。

內核空間物理內存映射

回顧一下

上面講的有點多,先別著急進入下一節,在這之前我們再來回顧一下上面所講的內容。如果認真看完上面的章節,我這里再畫了一張圖,現在你的腦海中應該有這樣一個內存管理的全局圖。

內核空間用戶空間全圖

內存數據結構

要讓內核管理系統中的虛擬內存,必然要從中抽象出內存管理數據結構,內存管理操作如「分配、釋放等」都基于這些數據結構操作,這里列舉兩個管理虛擬內存區域的數據結構。

用戶空間內存數據結構

在前面「進程與內存」章節我們提到,Linux進程可以劃分為 5 個不同的內存區域,分別是:代碼段、數據段、BSS、堆、棧,內核管理這些區域的方式是,將這些內存區域抽象成vm_area_struct的內存管理對象。

vm_area_struct是描述進程地址空間的基本管理單元,一個進程往往需要多個vm_area_struct來描述它的用戶空間虛擬地址,需要使用「鏈表」和「紅黑樹」來組織各個vm_area_struct。

鏈表用于需要遍歷全部節點的時候用,而紅黑樹適用于在地址空間中定位特定內存區域。內核為了內存區域上的各種不同操作都能獲得高性能,所以同時使用了這兩種數據結構。

用戶空間進程的地址管理模型:

wm_arem_struct

內核空間動態分配內存數據結構

在內核空間章節我們提到過「動態內存映射區」,該區域由內核函數vmalloc來分配,特點是:線性空間連續,但是對應的物理地址空間不一定連續。vmalloc 分配的線性地址所對應的物理頁可能處于低端內存,也可能處于高端內存。

vmalloc 分配的地址則限于vmalloc_start與vmalloc_end之間。每一塊vmalloc分配的內核虛擬內存都對應一個vm_struct結構體,不同的內核空間虛擬地址之間有4k大小的防越界空閑區間隔區。

與用戶空間的虛擬地址特性一樣,這些虛擬地址與物理內存沒有簡單的映射關系,必須通過內核頁表才可轉換為物理地址或物理頁,它們有可能尚未被映射,當發生缺頁時才真正分配物理頁面。

動態內存映射

前面分析了 Linux 內存管理機制,下面深入學習物理內存管理和虛擬內存分配。

通過前面的學習我們知道,程序可沒這么好騙,任你內存管理把虛擬地址空間玩出花來,到最后還是要給程序實實在在的物理內存,不然程序就要罷工了。

所以物理內存這么重要的資源一定要好好管理起來使用(物理內存,就是你實實在在的內存條),那么內核是如何管理物理內存的呢?

物理內存管理

在Linux系統中通過分段和分頁機制,把物理內存劃分 4K 大小的內存頁 Page(也稱作頁框Page Frame),物理內存的分配和回收都是基于內存頁進行,把物理內存分頁管理的好處大大的。

假如系統請求小塊內存,可以預先分配一頁給它,避免了反復的申請和釋放小塊內存帶來頻繁的系統開銷。

假如系統需要大塊內存,則可以用多頁內存拼湊,而不必要求大塊連續內存。你看不管內存大小都能收放自如,分頁機制多么完美的解決方案!

[[330588]]

But,理想很豐滿,現實很骨感。如果就直接這樣把內存分頁使用,不再加額外的管理還是存在一些問題,下面我們來看下,系統在多次分配和釋放物理頁的時候會遇到哪些問題。

物理頁管理面臨問題

物理內存頁分配會出現外部碎片和內部碎片問題,所謂的「內部」和「外部」是針對「頁框內外」而言,一個頁框內的內存碎片是內部碎片,多個頁框間的碎片是外部碎片。

外部碎片

當需要分配大塊內存的時候,要用好幾頁組合起來才夠,而系統分配物理內存頁的時候會盡量分配連續的內存頁面,頻繁的分配與回收物理頁導致大量的小塊內存夾雜在已分配頁面中間,形成外部碎片,舉個例子:

外部碎片

內部碎片

物理內存是按頁來分配的,這樣當實際只需要很小內存的時候,也會分配至少是 4K 大小的頁面,而內核中有很多需要以字節為單位分配內存的場景,這樣本來只想要幾個字節而已卻不得不分配一頁內存,除去用掉的字節剩下的就形成了內部碎片。

內部碎片

頁面管理算法

方法總比困難多,因為存在上面的這些問題,聰明的程序員靈機一動,引入了頁面管理算法來解決上述的碎片問題。

Buddy(伙伴)分配算法

Linux 內核引入了伙伴系統算法(Buddy system),什么意思呢?就是把相同大小的頁框塊用鏈表串起來,頁框塊就像手拉手的好伙伴,也是這個算法名字的由來。

具體的,所有的空閑頁框分組為11個塊鏈表,每個塊鏈表分別包含大小為1,2,4,8,16,32,64,128,256,512和1024個連續頁框的頁框塊。最大可以申請1024個連續頁框,對應4MB大小的連續內存。

伙伴系統

因為任何正整數都可以由 2^n 的和組成,所以總能找到合適大小的內存塊分配出去,減少了外部碎片產生 。

分配實例

比如:我需要申請4個頁框,但是長度為4個連續頁框塊鏈表沒有空閑的頁框塊,伙伴系統會從連續8個頁框塊的鏈表獲取一個,并將其拆分為兩個連續4個頁框塊,取其中一個,另外一個放入連續4個頁框塊的空閑鏈表中。釋放的時候會檢查,釋放的這幾個頁框前后的頁框是否空閑,能否組成下一級長度的塊。

命令查看

  1. [lemon]]# cat /proc/buddyinfo 
  2.  
  3. Node 0, zone DMA 1 0 0 0 2 1 1 0 1 1 3 
  4.  
  5. Node 0, zone DMA32 3198 4108 4940 4773 4030 2184 891 180 67 32 330 
  6.  
  7. Node 0, zone Normal 42438 37404 16035 4386 610 121 22 3 0 0 1 

slab分配器

看到這里你可能會想,有了伙伴系統這下總可以管理好物理內存了吧?不,還不夠,否則就沒有slab分配器什么事了。

那什么是slab分配器呢?

一般來說,內核對象的生命周期是這樣的:分配內存-初始化-釋放內存,內核中有大量的小對象,比如文件描述結構對象、任務描述結構對象,如果按照伙伴系統按頁分配和釋放內存,對小對象頻繁的執行「分配內存-初始化-釋放內存」會非常消耗性能。

伙伴系統分配出去的內存還是以頁框為單位,而對于內核的很多場景都是分配小片內存,遠用不到一頁內存大小的空間。slab分配器,「通過將內存按使用對象不同再劃分成不同大小的空間」,應用于內核對象的緩存。

伙伴系統和slab不是二選一的關系,slab 內存分配器是對伙伴分配算法的補充。

大白話說原理

對于每個內核中的相同類型的對象,如:task_struct、file_struct 等需要重復使用的小型內核數據對象,都會有個 slab 緩存池,緩存住大量常用的「已經初始化」的對象,每當要申請這種類型的對象時,就從緩存池的slab 列表中分配一個出去;而當要釋放時,將其重新保存在該列表中,而不是直接返回給伙伴系統,從而避免內部碎片,同時也大大提高了內存分配性能。

主要優點

  • slab 內存管理基于內核小對象,不用每次都分配一頁內存,充分利用內存空間,避免內部碎片。
  • slab 對內核中頻繁創建和釋放的小對象做緩存,重復利用一些相同的對象,減少內存分配次數。

數據結構

slab分配器

kmem_cache 是一個cache_chain 的鏈表組成節點,代表的是一個內核中的相同類型的「對象高速緩存」,每個kmem_cache 通常是一段連續的內存塊,包含了三種類型的 slabs 鏈表:

  • slabs_full (完全分配的 slab 鏈表)
  • slabs_partial (部分分配的slab 鏈表)
  • slabs_empty ( 沒有被分配對象的slab 鏈表)

kmem_cache 中有個重要的結構體 kmem_list3 包含了以上三個數據結構的聲明。

kmem_list3 內核源碼

slab 是slab 分配器的最小單位,在實現上一個 slab 由一個或多個連續的物理頁組成(通常只有一頁)。單個slab可以在 slab 鏈表之間移動,例如如果一個「半滿slabs_partial鏈表」被分配了對象后變滿了,就要從 slabs_partial 中刪除,同時插入到「全滿slabs_full鏈表」中去。內核slab對象的分配過程是這樣的:

  1. 如果slabs_partial鏈表還有未分配的空間,分配對象,若分配之后變滿,移動 slab 到slabs_full 鏈表
  2. 如果slabs_partial鏈表沒有未分配的空間,進入下一步
  3. 如果slabs_empty 鏈表還有未分配的空間,分配對象,同時移動slab進入slabs_partial鏈表
  4. 如果slabs_empty為空,請求伙伴系統分頁,創建一個新的空閑slab, 按步驟 3 分配對象

 

slab分配圖解

命令查看

上面說的都是理論,比較抽象,動動手來看看系統中的 slab 吧!你可以通過 cat /proc/slabinfo 命令,實際查看系統中slab 信息。

slabinfo查詢

slabtop 實時顯示內核 slab 內存緩存信息。

slabtop查詢

slab高速緩存的分類

slab高速緩存分為兩大類,「通用高速緩存」和「專用高速緩存」。

通用高速緩存

slab分配器中用 kmem_cache 來描述高速緩存的結構,它本身也需要 slab 分配器對其進行高速緩存。cache_cache 保存著對「高速緩存描述符的高速緩存」,是一種通用高速緩存,保存在cache_chain 鏈表中的第一個元素。

另外,slab 分配器所提供的小塊連續內存的分配,也是通用高速緩存實現的。通用高速緩存所提供的對象具有幾何分布的大小,范圍為32到131072字節。內核中提供了 kmalloc() 和 kfree() 兩個接口分別進行內存的申請和釋放。

專用高速緩存

內核為專用高速緩存的申請和釋放提供了一套完整的接口,根據所傳入的參數為指定的對象分配slab緩存。

專用高速緩存的申請和釋放

kmem_cache_create() 用于對一個指定的對象創建高速緩存。它從 cache_cache 普通高速緩存中為新的專有緩存分配一個高速緩存描述符,并把這個描述符插入到高速緩存描述符形成的 cache_chain 鏈表中。kmem_cache_destory() 用于撤消和從 cache_chain 鏈表上刪除高速緩存。

slab的申請和釋放

slab 數據結構在內核中的定義,如下:

slab結構體內核代碼

kmem_cache_alloc() 在其參數所指定的高速緩存中分配一個slab,對應的 kmem_cache_free() 在其參數所指定的高速緩存中釋放一個slab。

虛擬內存分配

前面討論的都是對物理內存的管理,Linux 通過虛擬內存管理,欺騙了用戶程序假裝每個程序都有 4G 的虛擬內存尋址空間(如果這里不懂我說啥,建議回頭看下 別再說你不懂Linux內存管理了,10張圖給你安排的明明白白?。?。

所以我們來研究下虛擬內存的分配,這里包括用戶空間虛擬內存和內核空間虛擬內存。

注意,分配的虛擬內存還沒有映射到物理內存,只有當訪問申請的虛擬內存時,才會發生缺頁異常,再通過上面介紹的伙伴系統和 slab 分配器申請物理內存。

用戶空間內存分配

malloc

malloc 用于申請用戶空間的虛擬內存,當申請小于 128KB 小內存的時,malloc使用 sbrk或brk 分配內存;當申請大于 128KB 的內存時,使用 mmap 函數申請內存;

存在問題

由于 brk/sbrk/mmap 屬于系統調用,如果每次申請內存都要產生系統調用開銷,cpu 在用戶態和內核態之間頻繁切換,非常影響性能。

而且,堆是從低地址往高地址增長,如果低地址的內存沒有被釋放,高地址的內存就不能被回收,容易產生內存碎片。

解決

因此,malloc采用的是內存池的實現方式,先申請一大塊內存,然后將內存分成不同大小的內存塊,然后用戶申請內存時,直接從內存池中選擇一塊相近的內存塊分配出去。

內核空間內存分配

在講內核空間內存分配之前,先來回顧一下內核地址空間。kmalloc 和 vmalloc 分別用于分配不同映射區的虛擬內存,看這張上次畫的圖:

內核空間細分區域

kmalloc

kmalloc() 分配的虛擬地址范圍在內核空間的「直接內存映射區」。

按字節為單位虛擬內存,一般用于分配小塊內存,釋放內存對應于 kfree ,可以分配連續的物理內存。函數原型在 <linux/kmalloc.h> 中聲明,一般情況下在驅動程序中都是調用 kmalloc() 來給數據結構分配內存 。

還記得前面說的 slab 嗎?kmalloc 是基于slab 分配器的 ,同樣可以用cat /proc/slabinfo 命令,查看 kmalloc 相關 slab 對象信息,下面的 kmalloc-8、kmalloc-16 等等就是基于slab分配的 kmalloc 高速緩存。

slabinfo-kmalloc

vmalloc

vmalloc 分配的虛擬地址區間,位于 vmalloc_start 與vmalloc_end 之間的「動態內存映射區」。

一般用分配大塊內存,釋放內存對應于 vfree,分配的虛擬內存地址連續,物理地址上不一定連續。函數原型在 <linux/vmalloc.h> 中聲明。一般用在為活動的交換區分配數據結構,為某些 I/O 驅動程序分配緩沖區,或為內核模塊分配空間。

下面的圖總結了上述兩種內核空間虛擬內存分配方式。

總結一下

Linux內存管理是一個非常復雜的系統,本文所述只是冰山一角,從宏觀角度給你展現內存管理的全貌,但一般來說,這些知識在你和面試官聊天的時候還是夠用的,當然也希望大家能夠通過讀書了解更深層次的原理。

本文可以作為一個索引一樣的學習指南,當你想深入某一點學習的時候可以在這些章節里找到切入點,以及這個知識點在內存管理宏觀上的位置。

 

 

責任編輯:張燕妮 來源: 后端技術學堂
相關推薦

2021-06-16 00:57:16

JVM加載機制

2017-08-09 15:07:08

大數據數據分析戶畫像

2022-04-20 11:03:28

Linux內存管理

2020-11-04 08:37:37

C語言C++內存

2022-05-27 21:56:55

索引存儲MySQL 存儲引擎

2021-09-06 07:58:47

鏈表數據結構

2021-02-24 07:38:50

Redis

2017-02-09 19:45:07

Linux系統Linux 發行版

2018-03-28 21:40:03

2020-01-15 08:52:40

RabbitMQSpringMybatis

2022-02-18 06:56:18

Wi-Fi路由器局域網

2020-10-09 09:49:18

HTTPS網絡 HTTP

2025-04-15 02:00:00

API版本項目

2023-08-09 09:03:49

CPU密集型運算

2022-12-27 08:01:09

設計模式https://mp

2021-12-29 10:21:41

Linux 權限擴展名

2022-06-18 23:03:05

Seata分布式事務

2021-05-28 11:54:29

MySQL數據庫主從復制

2020-06-11 07:00:00

OAuth 2.0會話管理應用安全

2022-03-27 09:06:25

vuexActionsMutations
點贊
收藏

51CTO技術棧公眾號

一区视频二区视频| 97欧美精品一区二区三区| 婷婷免费在线观看| 国产精品实拍| av爱爱亚洲一区| 国产精品欧美日韩一区二区| 日本高清一二三区| 丝袜av一区| 91精品国产综合久久精品app | 国产xxxxhd| 末成年女av片一区二区下载| 中文字幕av一区二区三区免费看| 99久久精品免费看国产四区| 在线精品免费视| 欧美视频网站| www.日韩av.com| 亚洲av网址在线| 成人av在线播放| 色综合夜色一区| 久久男人资源站| 色多多视频在线观看| 久久亚洲精品小早川怜子| 444亚洲人体| 中文字幕视频一区二区| 国产深夜精品| 欧美日韩福利电影| 免费黄色国产视频| 九热爱视频精品视频| 亚洲精品一区二区三区99| 日日噜噜夜夜狠狠| 97在线视频免费观看完整版| 亚洲视频在线观看三级| 欧美一区二区综合| 日本私人网站在线观看| 国产69精品久久777的优势| 国产精品尤物福利片在线观看| 精品成人av一区二区在线播放| 亚洲精品电影| 色婷婷成人综合| 精品人妻一区二区三区蜜桃视频| 国产一区丝袜| 精品国产一二三| 久久久精品人妻一区二区三区| 久久影视精品| 欧美日韩一级二级| 一级黄色特级片| 中文另类视频| 欧美午夜视频网站| 日本va中文字幕| 久久天堂av| 色成人在线视频| 国内自拍视频一区| 成人影院入口| 日本高清视频一区二区| 蜜臀久久99精品久久久酒店新书 | www.色呦呦| 国产在线视视频有精品| 成人网在线免费看| 国产又粗又猛又爽又黄的视频一| 蜜桃精品视频在线| 国产免费一区二区三区香蕉精| 波多野结衣激情视频| 日日夜夜免费精品| 国产精品丝袜白浆摸在线| 中文字幕乱码视频| 国产在线视视频有精品| 成人区精品一区二区| 日本xxxx人| 久久青草国产手机看片福利盒子| 欧美一区免费视频| 中文字幕日本在线观看| 亚洲欧美乱综合| www.日本在线视频| 欧美aa免费在线| 欧美午夜www高清视频| 老司机午夜av| 国产专区精品| 精品福利视频一区二区三区| 亚洲欧美色图视频| 日本大胆欧美| 久热爱精品视频线路一| 国产无遮挡免费视频| 亚洲视频大全| 国产日产欧美a一级在线| 国产成人三级在线播放| 不卡欧美aaaaa| 性刺激综合网| 亚洲综合影视| 色欧美片视频在线观看在线视频| 美女少妇一区二区| 9国产精品午夜| 亚洲一二在线观看| 欧美性x x x| 午夜在线一区| 成人网址在线观看| 日本中文字幕一区二区有码在线 | 明星裸体视频一区二区| 免费在线午夜视频| 精品日本高清在线播放| 手机版av在线| 日本韩国欧美超级黄在线观看| 这里只有精品在线观看| 国产亚洲小视频| 麻豆视频观看网址久久| 国产综合 伊人色| 超碰超碰在线| 色屁屁一区二区| 国产精品一区二区在线免费观看| 精品国产91| 久久乐国产精品| 一区二区精品视频在线观看| 99re视频精品| 日本美女爱爱视频| 成人av色网站| 日韩精品中文字幕有码专区| 欧美三级免费看| 日本欧美在线观看| 久久久久久久久久久久久久久久av | 狠狠狠色丁香婷婷综合激情| 欧美大香线蕉线伊人久久国产精品| 黄色网在线看| 欧美优质美女网站| 午夜一区二区三区免费| 好吊一区二区三区| 91精品视频免费看| 天堂中文а√在线| 欧美亚日韩国产aⅴ精品中极品| 国产美女视频免费观看下载软件| 久久久久久美女精品| 国产精品国模在线| 三级无遮挡在线观看| 午夜精品视频在线观看| 亚洲成人福利视频| 欧美 日韩 国产一区二区在线视频| 国产精品一区二区性色av| 久久米奇亚洲| 欧美午夜视频一区二区| 国产精品久久AV无码| 国产一区观看| 99蜜桃在线观看免费视频网站| 秋霞a级毛片在线看| 欧美性受xxxx黑人xyx| 欧美成人国产精品一区二区| 久久综合狠狠| 欧美日韩综合另类| 88xx成人免费观看视频库 | 国产精品普通话| 粉嫩av一区| 色伊人久久综合中文字幕| 美女又爽又黄视频毛茸茸| 亚洲黄色天堂| 精品一区二区三区自拍图片区| 爱福利在线视频| 亚洲成色999久久网站| 九热这里只有精品| 99久久精品99国产精品| 黄色免费视频大全| 国产探花在线精品一区二区| 国产成人精品免高潮费视频| 国产中文在线| 欧美日韩中文一区| 疯狂撞击丝袜人妻| 国产精品456露脸| 免费看欧美一级片| 欧美三级电影在线| 国产成人精品免费久久久久| 91xxx在线观看| 91精选在线观看| 久久久久久久蜜桃| 91日韩精品一区| 亚欧在线免费观看| 久久精品免费一区二区三区| **亚洲第一综合导航网站| 国产在线拍揄自揄拍视频 | 亚洲精品女av网站| 国产丝袜精品丝袜| 亚洲女人被黑人巨大进入al| 99成人精品视频| 亚洲日本在线看| 大桥未久恸哭の女教师| 老司机午夜精品视频| 亚洲三区四区| 成人av婷婷| 日韩av不卡在线| 国产欧美久久久久久久久| 精品电影一区二区三区| 成人公开免费视频| 亚洲另类春色国产| 四虎影成人精品a片| 久久99精品国产麻豆婷婷| 奇米777四色影视在线看| 亚洲宅男一区| 91亚洲精品久久久久久久久久久久| h片视频在线观看| 自拍偷拍免费精品| 特级丰满少妇一级aaaa爱毛片| 色诱亚洲精品久久久久久| 成人免费精品动漫网站| 99国产精品国产精品毛片| 中文字幕日韩综合| 亚洲久色影视| 日本三级中文字幕在线观看| 日韩精品丝袜美腿| 91手机在线播放| 全球最大av网站久久| 欧美激情视频网| 国产一区电影| 欧美精品一区二区三区蜜桃视频| 中国一区二区视频| 五月天丁香久久| 91成人福利视频| 国产三级一区二区| 人妻在线日韩免费视频| 久久超碰97人人做人人爱| 亚洲中文字幕无码专区| 亚洲精品一区二区在线看| 欧美视频小说| 国产福利一区二区精品秒拍| 亚洲tv在线观看| 精品免费av在线| 欧美在线观看网址综合| 国产蜜臀一区二区打屁股调教| 久久精品成人一区二区三区| 欧美亚洲日本| 亚洲激情在线观看视频免费| 精品人妻av一区二区三区| 欧美日韩亚洲高清一区二区| 特级西西444www大精品视频免费看| 一区二区三区四区视频精品免费 | 亚洲在线观看网站| 毛片av一区二区| 国产成人av影视| av不卡在线看| 日本精品久久久久久久久久| 在线电影一区二区| 婷婷视频在线播放| 色婷婷色综合| 亚洲精品中文字幕乱码三区不卡| 亚洲宅男一区| 欧美一级片免费观看| 日韩精选在线| 久久精品日产第一区二区三区乱码| 成人盗摄视频| 国产欧美精品一区二区三区| 成人在线超碰| 高清国产在线一区| 亚洲亚洲一区二区三区| 99porn视频在线| 亚洲午夜免费| 狠狠色噜噜狠狠色综合久| 国产日韩三级| 久久一区免费| 国产精品自拍区| 日韩女优中文字幕| 精品美女久久| 亚洲图片在线观看| 中文字幕人成人乱码| 青青在线视频免费观看| 亚洲黄色大片| 无码人妻丰满熟妇区毛片18| 久久九九99| 九色91popny| 精品一区二区精品| 99国产精品免费视频| 岛国av在线一区| 国产在线观看无码免费视频| 欧美激情一区在线| 糖心vlog免费在线观看 | 看片网址国产福利av中文字幕| 香蕉成人伊视频在线观看| 日韩污视频在线观看| 色婷婷国产精品| 亚洲一二区视频| 国产美女亚洲精品7777| 五月婷婷激情综合| 久久久久女人精品毛片九一| 欧美三级日本三级少妇99| 91亚洲视频在线观看| 日韩欧美国产一二三区| 性xxxx搡xxxxx搡欧美| 中文字幕日韩高清| 中文字幕伦理免费在线视频| 孩xxxx性bbbb欧美| 成人免费黄色| 国产精品一区二区三区在线| 久久97视频| www.午夜色| 亚洲永久免费| 中文字幕永久有效| 91在线码无精品| www.97视频| 色综合色综合色综合| 97视频免费在线| 亚洲精品大尺度| 米奇精品一区二区三区| 91国产一区在线| 四虎视频在线精品免费网址| 国产在线一区二区三区欧美| 色偷偷综合网| 北条麻妃69av| 国产成人综合亚洲91猫咪| 亚洲一级中文字幕| 亚洲在线视频一区| 中文字幕观看视频| 亚洲国产小视频| 国产一二区在线| 国产成人精品日本亚洲| 国产亚洲精品美女久久 | 偷拍欧美精品| 中国丰满人妻videoshd| 国产一区免费电影| 亚洲综合欧美综合| 午夜国产不卡在线观看视频| 国产又粗又大又黄| 亚洲午夜久久久影院| 蜜桃视频在线网站| 97se亚洲综合| 亚洲澳门在线| 日本人视频jizz页码69| 91香蕉视频mp4| 久久午夜鲁丝片午夜精品| 欧美喷潮久久久xxxxx| 精品乱码一区二区三四区视频| 欧美区在线播放| 亚洲免费一区| 亚欧精品在线| 日韩二区三区在线观看| 中文字幕一区二区久久人妻网站| 亚洲黄色小说网站| aa视频在线免费观看| 中文字幕少妇一区二区三区| 亚洲黄色中文字幕| 精品国产免费一区二区三区| 国内精品久久久久国产盗摄免费观看完整版 | 免费av网站在线看| 国产精品综合不卡av| 国产区精品区| 别急慢慢来1978如如2| 久久午夜羞羞影院免费观看| 中文字幕第28页| 亚洲国产精彩中文乱码av| 国模私拍视频在线播放| 国产精品有限公司| 日韩一级欧洲| 国产肉体xxxx裸体784大胆| 黄色一区二区在线| 四虎在线视频| 日韩暖暖在线视频| 亚洲人成网亚洲欧洲无码| 色综合av综合无码综合网站| 久久―日本道色综合久久| 中文字幕一区二区人妻电影| 亚洲欧美综合精品久久成人| 欧美色网一区| 亚洲高清不卡一区| 国产在线播放一区| 成人免费毛片东京热| 精品处破学生在线二十三| heyzo高清国产精品| 精品不卡一区二区三区| 久久高清一区| 美女av免费看| 欧美一区二区三区免费观看视频| 宅男网站在线免费观看| 国产另类第一区| 免费久久99精品国产自在现线| 蜜桃av免费看| 7777女厕盗摄久久久| 青草影视电视剧免费播放在线观看| 国产精品一区二区免费看| 亚洲一区二区三区四区五区午夜 | 免费一级特黄录像| 椎名由奈av一区二区三区| 亚洲国产精品无码久久| 9.1国产丝袜在线观看| 成人3d动漫在线观看| 搡的我好爽在线观看免费视频| 一区二区三区精品久久久| 男人的天堂a在线| 国产精品激情av在线播放| 一区二区影院| 搡老熟女老女人一区二区| 欧美日韩一区二区三区四区| 七七成人影院| 欧美自拍资源在线| 国产精品99久久久久久有的能看| 激情五月色婷婷| 日韩中文有码在线视频| 国产精品久久久久久久久久白浆| www日韩在线观看| 亚洲午夜免费视频| 东热在线免费视频| 成人在线观看av| 日韩成人午夜精品| 妺妺窝人体色www聚色窝仙踪| 亚洲欧美中文在线视频| 午夜视频一区二区在线观看| av天堂永久资源网| 亚洲精品国产品国语在线app| 你懂的在线观看|