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

認(rèn)真分析mmap:是什么 為什么 怎么用

移動開發(fā)
mmap是一種內(nèi)存映射文件的方法,即將一個(gè)文件或者其它對象映射到進(jìn)程的地址空間,實(shí)現(xiàn)文件磁盤地址和進(jìn)程虛擬地址空間中一段虛擬地址的一一對映關(guān)系。實(shí)現(xiàn)這樣的映射關(guān)系后,進(jìn)程就可以采用指針的方式讀寫操作這一段內(nèi)存,而系統(tǒng)會自動回寫臟頁面到對應(yīng)的文件磁盤上,即完成了對文件的操作而不必再調(diào)用read,write等系統(tǒng)調(diào)用函數(shù)。相反,內(nèi)核空間對這段區(qū)域的修改也直接反映用戶空間,從而可以實(shí)現(xiàn)不同進(jìn)程間的文件共享。

mmap基礎(chǔ)概念

mmap是一種內(nèi)存映射文件的方法,即將一個(gè)文件或者其它對象映射到進(jìn)程的地址空間,實(shí)現(xiàn)文件磁盤地址和進(jìn)程虛擬地址空間中一段虛擬地址的一一對映關(guān)系。實(shí)現(xiàn)這樣的映射關(guān)系后,進(jìn)程就可以采用指針的方式讀寫操作這一段內(nèi)存,而系統(tǒng)會自動回寫臟頁面到對應(yīng)的文件磁盤上,即完成了對文件的操作而不必再調(diào)用read,write等系統(tǒng)調(diào)用函數(shù)。相反,內(nèi)核空間對這段區(qū)域的修改也直接反映用戶空間,從而可以實(shí)現(xiàn)不同進(jìn)程間的文件共享。如下圖所示:

  

由上圖可以看出,進(jìn)程的虛擬地址空間,由多個(gè)虛擬內(nèi)存區(qū)域構(gòu)成。虛擬內(nèi)存區(qū)域是進(jìn)程的虛擬地址空間中的一個(gè)同質(zhì)區(qū)間,即具有同樣特性的連續(xù)地址范圍。上圖中所示的text數(shù)據(jù)段(代碼段)、初始數(shù)據(jù)段、BSS數(shù)據(jù)段、堆、棧和內(nèi)存映射,都是一個(gè)獨(dú)立的虛擬內(nèi)存區(qū)域。而為內(nèi)存映射服務(wù)的地址空間處在堆棧之間的空余部分。

linux內(nèi)核使用vm_area_struct結(jié)構(gòu)來表示一個(gè)獨(dú)立的虛擬內(nèi)存區(qū)域,由于每個(gè)不同質(zhì)的虛擬內(nèi)存區(qū)域功能和內(nèi)部機(jī)制都不同,因此一個(gè)進(jìn)程使用多個(gè)vm_area_struct結(jié)構(gòu)來分別表示不同類型的虛擬內(nèi)存區(qū)域。各個(gè)vm_area_struct結(jié)構(gòu)使用鏈表或者樹形結(jié)構(gòu)鏈接,方便進(jìn)程快速訪問,如下圖所示:

 

vm_area_struct結(jié)構(gòu)中包含區(qū)域起始和終止地址以及其他相關(guān)信息,同時(shí)也包含一個(gè)vm_ops指針,其內(nèi)部可引出所有針對這個(gè)區(qū)域可以使用的系統(tǒng)調(diào)用函數(shù)。這樣,進(jìn)程對某一虛擬內(nèi)存區(qū)域的任何操作需要用要的信息,都可以從vm_area_struct中獲得。mmap函數(shù)就是要?jiǎng)?chuàng)建一個(gè)新的vm_area_struct結(jié)構(gòu),并將其與文件的物理磁盤地址相連。具體步驟請看下一節(jié)。

mmap內(nèi)存映射原理

mmap內(nèi)存映射的實(shí)現(xiàn)過程,總的來說可以分為三個(gè)階段:

(一)進(jìn)程啟動映射過程,并在虛擬地址空間中為映射創(chuàng)建虛擬映射區(qū)域

1、進(jìn)程在用戶空間調(diào)用庫函數(shù)mmap,原型:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

2、在當(dāng)前進(jìn)程的虛擬地址空間中,尋找一段空閑的滿足要求的連續(xù)的虛擬地址

3、為此虛擬區(qū)分配一個(gè)vm_area_struct結(jié)構(gòu),接著對這個(gè)結(jié)構(gòu)的各個(gè)域進(jìn)行了初始化

4、將新建的虛擬區(qū)結(jié)構(gòu)(vm_area_struct)插入進(jìn)程的虛擬地址區(qū)域鏈表或樹中

(二)調(diào)用內(nèi)核空間的系統(tǒng)調(diào)用函數(shù)mmap(不同于用戶空間函數(shù)),實(shí)現(xiàn)文件物理地址和進(jìn)程虛擬地址的一一映射關(guān)系

5、為映射分配了新的虛擬地址區(qū)域后,通過待映射的文件指針,在文件描述符表中找到對應(yīng)的文件描述符,通過文件描述符,鏈接到內(nèi)核“已打開文件集”中該文件的文件結(jié)構(gòu)體(struct file),每個(gè)文件結(jié)構(gòu)體維護(hù)著和這個(gè)已打開文件相關(guān)各項(xiàng)信息。

6、通過該文件的文件結(jié)構(gòu)體,鏈接到file_operations模塊,調(diào)用內(nèi)核函數(shù)mmap,其原型為:int mmap(struct file *filp, struct vm_area_struct *vma),不同于用戶空間庫函數(shù)。

7、內(nèi)核mmap函數(shù)通過虛擬文件系統(tǒng)inode模塊定位到文件磁盤物理地址。

8、通過remap_pfn_range函數(shù)建立頁表,即實(shí)現(xiàn)了文件地址和虛擬地址區(qū)域的映射關(guān)系。此時(shí),這片虛擬地址并沒有任何數(shù)據(jù)關(guān)聯(lián)到主存中。

(三)進(jìn)程發(fā)起對這片映射空間的訪問,引發(fā)缺頁異常,實(shí)現(xiàn)文件內(nèi)容到物理內(nèi)存(主存)的拷貝

注:前兩個(gè)階段僅在于創(chuàng)建虛擬區(qū)間并完成地址映射,但是并沒有將任何文件數(shù)據(jù)的拷貝至主存。真正的文件讀取是當(dāng)進(jìn)程發(fā)起讀或?qū)懖僮鲿r(shí)。

9、進(jìn)程的讀或?qū)懖僮髟L問虛擬地址空間這一段映射地址,通過查詢頁表,發(fā)現(xiàn)這一段地址并不在物理頁面上。因?yàn)槟壳爸唤⒘说刂酚成洌嬲挠脖P數(shù)據(jù)還沒有拷貝到內(nèi)存中,因此引發(fā)缺頁異常。

10、缺頁異常進(jìn)行一系列判斷,確定無非法操作后,內(nèi)核發(fā)起請求調(diào)頁過程。

11、調(diào)頁過程先在交換緩存空間(swap cache)中尋找需要訪問的內(nèi)存頁,如果沒有則調(diào)用nopage函數(shù)把所缺的頁從磁盤裝入到主存中。

12、之后進(jìn)程即可對這片主存進(jìn)行讀或者寫的操作,如果寫操作改變了其內(nèi)容,一定時(shí)間后系統(tǒng)會自動回寫臟頁面到對應(yīng)磁盤地址,也即完成了寫入到文件的過程。

注:修改過的臟頁面并不會立即更新回文件中,而是有一段時(shí)間的延遲,可以調(diào)用msync()來強(qiáng)制同步, 這樣所寫的內(nèi)容就能立即保存到文件里了。

mmap和常規(guī)文件操作的區(qū)別

對linux文件系統(tǒng)不了解的朋友,請參閱我之前寫的博文《從內(nèi)核文件系統(tǒng)看文件讀寫過程》,我們首先簡單的回顧一下常規(guī)文件系統(tǒng)操作(調(diào)用read/fread等類函數(shù))中,函數(shù)的調(diào)用過程:

1、進(jìn)程發(fā)起讀文件請求。

2、內(nèi)核通過查找進(jìn)程文件符表,定位到內(nèi)核已打開文件集上的文件信息,從而找到此文件的inode。

3、inode在address_space上查找要請求的文件頁是否已經(jīng)緩存在頁緩存中。如果存在,則直接返回這片文件頁的內(nèi)容。

4、如果不存在,則通過inode定位到文件磁盤地址,將數(shù)據(jù)從磁盤復(fù)制到頁緩存。之后再次發(fā)起讀頁面過程,進(jìn)而將頁緩存中的數(shù)據(jù)發(fā)給用戶進(jìn)程。

總結(jié)來說,常規(guī)文件操作為了提高讀寫效率和保護(hù)磁盤,使用了頁緩存機(jī)制。這樣造成讀文件時(shí)需要先將文件頁從磁盤拷貝到頁緩存中,由于頁緩存處在內(nèi)核空間,不能被用戶進(jìn)程直接尋址,所以還需要將頁緩存中數(shù)據(jù)頁再次拷貝到內(nèi)存對應(yīng)的用戶空間中。這樣,通過了兩次數(shù)據(jù)拷貝過程,才能完成進(jìn)程對文件內(nèi)容的獲取任務(wù)。寫操作也是一樣,待寫入的buffer在內(nèi)核空間不能直接訪問,必須要先拷貝至內(nèi)核空間對應(yīng)的主存,再寫回磁盤中(延遲寫回),也是需要兩次數(shù)據(jù)拷貝。

而使用mmap操作文件中,創(chuàng)建新的虛擬內(nèi)存區(qū)域和建立文件磁盤地址和虛擬內(nèi)存區(qū)域映射這兩步,沒有任何文件拷貝操作。而之后訪問數(shù)據(jù)時(shí)發(fā)現(xiàn)內(nèi)存中并無數(shù)據(jù)而發(fā)起的缺頁異常過程,可以通過已經(jīng)建立好的映射關(guān)系,只使用一次數(shù)據(jù)拷貝,就從磁盤中將數(shù)據(jù)傳入內(nèi)存的用戶空間中,供進(jìn)程使用。

總而言之,常規(guī)文件操作需要從磁盤到頁緩存再到用戶主存的兩次數(shù)據(jù)拷貝。而mmap操控文件,只需要從磁盤到用戶主存的一次數(shù)據(jù)拷貝過程。說白了,mmap的關(guān)鍵點(diǎn)是實(shí)現(xiàn)了用戶空間和內(nèi)核空間的數(shù)據(jù)直接交互而省去了空間不同數(shù)據(jù)不通的繁瑣過程。因此mmap效率更高。

mmap優(yōu)點(diǎn)總結(jié)

由上文討論可知,mmap優(yōu)點(diǎn)共有一下幾點(diǎn):

1、對文件的讀取操作跨過了頁緩存,減少了數(shù)據(jù)的拷貝次數(shù),用內(nèi)存讀寫取代I/O讀寫,提高了文件讀取效率。

2、實(shí)現(xiàn)了用戶空間和內(nèi)核空間的高效交互方式。兩空間的各自修改操作可以直接反映在映射的區(qū)域內(nèi),從而被對方空間及時(shí)捕捉。

3、提供進(jìn)程間共享內(nèi)存及相互通信的方式。不管是父子進(jìn)程還是無親緣關(guān)系的進(jìn)程,都可以將自身用戶空間映射到同一個(gè)文件或匿名映射到同一片區(qū)域。從而通過各自對映射區(qū)域的改動,達(dá)到進(jìn)程間通信和進(jìn)程間共享的目的。

     同時(shí),如果進(jìn)程A和進(jìn)程B都映射了區(qū)域C,當(dāng)A***次讀取C時(shí)通過缺頁從磁盤復(fù)制文件頁到內(nèi)存中;但當(dāng)B再讀C的相同頁面時(shí),雖然也會產(chǎn)生缺頁異常,但是不再需要從磁盤中復(fù)制文件過來,而可直接使用已經(jīng)保存在內(nèi)存中的文件數(shù)據(jù)。

4、可用于實(shí)現(xiàn)高效的大規(guī)模數(shù)據(jù)傳輸。內(nèi)存空間不足,是制約大數(shù)據(jù)操作的一個(gè)方面,解決方案往往是借助硬盤空間協(xié)助操作,補(bǔ)充內(nèi)存的不足。但是進(jìn)一步會造成大量的文件I/O操作,極大影響效率。這個(gè)問題可以通過mmap映射很好的解決。換句話說,但凡是需要用磁盤空間代替內(nèi)存的時(shí)候,mmap都可以發(fā)揮其功效。

mmap相關(guān)函數(shù)

函數(shù)原型

void *mmap(void *start, size_t length, int prot, int flags,int fd, off_t offset);

返回說明

成功執(zhí)行時(shí),mmap()返回被映射區(qū)的指針。失敗時(shí),mmap()返回MAP_FAILED[其值為(void *)-1],error被設(shè)為以下的某個(gè)值:

返回錯(cuò)誤類型

參數(shù)

start:映射區(qū)的開始地址

length:映射區(qū)的長度

prot:期望的內(nèi)存保護(hù)標(biāo)志,不能與文件的打開模式?jīng)_突。是以下的某個(gè)值,可以通過or運(yùn)算合理地組合在一起

prot

flags:指定映射對象的類型,映射選項(xiàng)和映射頁是否可以共享。它的值可以是一個(gè)或者多個(gè)以下位的組合體

flag

fd:有效的文件描述詞。如果MAP_ANONYMOUS被設(shè)定,為了兼容問題,其值應(yīng)為-1

offset:被映射對象內(nèi)容的起點(diǎn)

相關(guān)函數(shù)

int munmap( void * addr, size_t len ) 

成功執(zhí)行時(shí),munmap()返回0。失敗時(shí),munmap返回-1,error返回標(biāo)志和mmap一致;

該調(diào)用在進(jìn)程地址空間中解除一個(gè)映射關(guān)系,addr是調(diào)用mmap()時(shí)返回的地址,len是映射區(qū)的大小;

當(dāng)映射關(guān)系解除后,對原來映射地址的訪問將導(dǎo)致段錯(cuò)誤發(fā)生。 

int msync( void *addr, size_t len, int flags )

一般說來,進(jìn)程在映射空間的對共享內(nèi)容的改變并不直接寫回到磁盤文件中,往往在調(diào)用munmap()后才執(zhí)行該操作。

可以通過調(diào)用msync()實(shí)現(xiàn)磁盤上文件內(nèi)容與共享內(nèi)存區(qū)的內(nèi)容一致。

 mmap使用細(xì)節(jié)

1、使用mmap需要注意的一個(gè)關(guān)鍵點(diǎn)是,mmap映射區(qū)域大小必須是物理頁大小(page_size)的整倍數(shù)(32位系統(tǒng)中通常是4k字節(jié))。原因是,內(nèi)存的最小粒度是頁,而進(jìn)程虛擬地址空間和內(nèi)存的映射也是以頁為單位。為了匹配內(nèi)存的操作,mmap從磁盤到虛擬地址空間的映射也必須是頁。

2、內(nèi)核可以跟蹤被內(nèi)存映射的底層對象(文件)的大小,進(jìn)程可以合法的訪問在當(dāng)前文件大小以內(nèi)又在內(nèi)存映射區(qū)以內(nèi)的那些字節(jié)。也就是說,如果文件的大小一直在擴(kuò)張,只要在映射區(qū)域范圍內(nèi)的數(shù)據(jù),進(jìn)程都可以合法得到,這和映射建立時(shí)文件的大小無關(guān)。具體情形參見“情形三”。

3、映射建立之后,即使文件關(guān)閉,映射依然存在。因?yàn)橛成涞氖谴疟P的地址,不是文件本身,和文件句柄無關(guān)。同時(shí)可用于進(jìn)程間通信的有效地址空間不完全受限于被映射文件的大小,因?yàn)槭前错撚成洹?/p>

在上面的知識前提下,我們下面看看如果大小不是頁的整倍數(shù)的具體情況:

情形一:一個(gè)文件的大小是5000字節(jié),mmap函數(shù)從一個(gè)文件的起始位置開始,映射5000字節(jié)到虛擬內(nèi)存中。

分析:因?yàn)閱挝晃锢眄撁娴拇笮∈?096字節(jié),雖然被映射的文件只有5000字節(jié),但是對應(yīng)到進(jìn)程虛擬地址區(qū)域的大小需要滿足整頁大小,因此mmap函數(shù)執(zhí)行后,實(shí)際映射到虛擬內(nèi)存區(qū)域8192個(gè) 字節(jié),5000~8191的字節(jié)部分用零填充。映射后的對應(yīng)關(guān)系如下圖所示:

  

此時(shí):

(1)讀/寫前5000個(gè)字節(jié)(0~4999),會返回操作文件內(nèi)容。

(2)讀字節(jié)5000~8191時(shí),結(jié)果全為0。寫5000~8191時(shí),進(jìn)程不會報(bào)錯(cuò),但是所寫的內(nèi)容不會寫入原文件中 。

(3)讀/寫8192以外的磁盤部分,會返回一個(gè)SIGSECV錯(cuò)誤。

情形二:一個(gè)文件的大小是5000字節(jié),mmap函數(shù)從一個(gè)文件的起始位置開始,映射15000字節(jié)到虛擬內(nèi)存中,即映射大小超過了原始文件的大小。

分析:由于文件的大小是5000字節(jié),和情形一一樣,其對應(yīng)的兩個(gè)物理頁。那么這兩個(gè)物理頁都是合法可以讀寫的,只是超出5000的部分不會體現(xiàn)在原文件中。由于程序要求映射15000字節(jié),而文件只占兩個(gè)物理頁,因此8192字節(jié)~15000字節(jié)都不能讀寫,操作時(shí)會返回異常。如下圖所示:

此時(shí):

(1)進(jìn)程可以正常讀/寫被映射的前5000字節(jié)(0~4999),寫操作的改動會在一定時(shí)間后反映在原文件中。

(2)對于5000~8191字節(jié),進(jìn)程可以進(jìn)行讀寫過程,不會報(bào)錯(cuò)。但是內(nèi)容在寫入前均為0,另外,寫入后不會反映在文件中。

(3)對于8192~14999字節(jié),進(jìn)程不能對其進(jìn)行讀寫,會報(bào)SIGBUS錯(cuò)誤。

(4)對于15000以外的字節(jié),進(jìn)程不能對其讀寫,會引發(fā)SIGSEGV錯(cuò)誤。

情形三:一個(gè)文件初始大小為0,使用mmap操作映射了1000*4K的大小,即1000個(gè)物理頁大約4M字節(jié)空間,mmap返回指針ptr。

分析:如果在映射建立之初,就對文件進(jìn)行讀寫操作,由于文件大小為0,并沒有合法的物理頁對應(yīng),如同情形二一樣,會返回SIGBUS錯(cuò)誤。

但是如果,每次操作ptr讀寫前,先增加文件的大小,那么ptr在文件大小內(nèi)部的操作就是合法的。例如,文件擴(kuò)充4096字節(jié),ptr就能操作ptr ~ [ (char)ptr + 4095]的空間。只要文件擴(kuò)充的范圍在1000個(gè)物理頁(映射范圍)內(nèi),ptr都可以對應(yīng)操作相同的大小。

這樣,方便隨時(shí)擴(kuò)充文件空間,隨時(shí)寫入文件,不造成空間浪費(fèi)。

責(zé)任編輯:倪明 來源: 博客園
相關(guān)推薦

2017-04-14 10:11:37

閃存備份用例

2022-03-31 11:38:09

經(jīng)營分析傳統(tǒng)企業(yè)運(yùn)營商

2023-05-04 11:39:17

經(jīng)營分析流量項(xiàng)目

2021-09-26 05:45:52

邊緣分析數(shù)據(jù)分析網(wǎng)絡(luò)邊緣

2022-09-16 11:33:40

數(shù)據(jù)分析MVP

2021-03-14 15:17:13

前端開發(fā)架構(gòu)

2020-07-28 08:09:02

領(lǐng)域驅(qū)動設(shè)計(jì)

2018-02-07 00:00:00

數(shù)字化轉(zhuǎn)型

2018-08-02 15:24:05

RPCJava微服務(wù)

2022-04-07 11:27:15

數(shù)字孿生VR系統(tǒng)AI

2020-11-06 13:25:38

React Concu

2018-07-09 14:44:27

存儲

2018-07-18 15:02:54

混合云云戰(zhàn)略安全

2023-04-04 07:15:01

2022-07-14 07:17:11

LXCDocker語言

2024-06-05 09:26:07

2024-01-09 13:43:05

CMSCRM

2024-12-23 13:00:00

MySQLMVCC數(shù)據(jù)庫

2009-09-10 17:53:50

LINQ是什么

2009-12-23 13:50:28

WPF是什么
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

香蕉人妻av久久久久天天| 成人午夜视频在线观看免费| 区一区二在线观看| 神马久久av| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日本一区二区久久精品| 国产女人18毛片水18精| 99av国产精品欲麻豆| 一区二区在线视频| 免费黄视频在线观看| 国产色播av在线| 久久久91精品国产一区二区三区| 国产日韩中文字幕在线| 一级免费黄色录像| 欧美人与动xxxxz0oz| 日韩欧美高清在线视频| 日韩一本精品| 亚洲国产精品国自产拍久久| 日产欧产美韩系列久久99| 欧美乱人伦中文字幕在线| 久久av无码精品人妻系列试探| 视频欧美精品| 欧美日韩在线第一页| youjizz.com亚洲| 日韩欧美在线观看一区二区| 国产一区二区精品在线观看| 国产99久久精品一区二区| 久久免费看少妇高潮v片特黄| 天海翼亚洲一区二区三区| 91精品国产色综合久久| 国产福利影院在线观看| a级片免费在线观看| 国产精品美女一区二区| 免费久久久一本精品久久区| 丁香六月天婷婷| 日韩黄色小视频| 91国产高清在线| 国产精品久久久精品四季影院| 亚洲亚洲免费| 亚洲成色777777在线观看影院| 免费 成 人 黄 色| 欧美hdxxxxx| 自拍偷拍国产精品| 亚洲韩国在线| 国产成人天天5g影院在线观看| 国产精品中文欧美| 成人性生交大片免费看视频直播 | 中文成人av在线| 成人自拍偷拍| 精品国产伦一区二区三| 加勒比av一区二区| 国产精品自在线| 日韩欧美国产亚洲| 国产字幕视频一区二区| 久久精品久久久久久| 美女网站视频色| 红杏视频成人| 日韩欧美aaaaaa| 无码人妻久久一区二区三区蜜桃| 国产精品igao视频网网址不卡日韩| 欧美日韩黄色大片| 国产在线播放观看| 老司机在线永久免费观看| 91麻豆免费在线观看| 国产欧美一区二区三区另类精品| www.久久综合| 成人毛片老司机大片| 亚洲va欧美va国产综合剧情| 日韩中文字幕区一区有砖一区| 久久精品亚洲| 亚洲欧美日韩中文视频| 国产精品无码一区二区三区| 日本99精品| 欧美色图在线观看| 欧美黑人又粗又大又爽免费| 快播电影网址老女人久久| 午夜精品久久久| 欧洲黄色一级视频| 欧美电影网站| 欧美日韩aaaaaa| 国产精品探花在线播放| 欧美电影院免费观看| 欧美精品v国产精品v日韩精品 | 国产视频一区在线观看一区免费| 久久人人爽人人| 精品美女久久久久| 日日摸夜夜添夜夜添精品视频| 国产精品羞羞答答| 国产精品久久久久久久一区二区 | 欧美性猛交xxxx黑人| 无码aⅴ精品一区二区三区浪潮 | 可以免费看污视频的网站在线| 2020日本不卡一区二区视频| 国内精品一区二区| 都市激情一区| 国产精品天干天干在线综合| 成人性做爰片免费视频| 欧美xxxx视频| 欧美性极品少妇| 簧片在线免费看| 国产精品迅雷| 日韩三级视频在线观看| 这里只有久久精品| 中文在线日韩| 国产精品va在线| 狠狠躁夜夜躁人人爽视频| 免费观看在线色综合| 都市激情久久久久久久久久久| 免费av网站在线播放| 国产三级三级三级精品8ⅰ区| 亚洲欧美综合一区| 国产伦久视频在线观看| 欧美在线一区二区三区| 人妻av一区二区| 97精品一区| 欧美精品电影在线| 亚洲视频一区在线播放| 91亚洲国产成人精品一区二区三| 精品999在线观看| 成人国产免费电影| 精品高清一区二区三区| 中文字幕乱码在线人视频| 日韩精品社区| 欧美国产日韩xxxxx| 在线观看免费黄色小视频| www.欧美亚洲| 欧美h视频在线观看| 三级成人在线| 亚洲精品久久7777777| 久久免费看少妇高潮v片特黄| 水蜜桃久久夜色精品一区的特点| 91免费欧美精品| 黄色电影免费在线看| 欧美国产综合一区二区| 国产av麻豆mag剧集| 日韩三级网址| 亚洲视频一区二区三区| 日本一区二区三区免费视频| 精品亚洲成a人| 欧美凹凸一区二区三区视频| 超碰在线中文字幕| 欧美日韩午夜影院| 欧美bbbbb性bbbbb视频| 国内精品美女在线观看| 国产精品揄拍一区二区| 性网爆门事件集合av| 亚洲精品老司机| 91日韩视频在线观看| 欧美日韩国产免费观看视频| 77777亚洲午夜久久多人| 亚洲精品国产suv一区| 99精品欧美一区二区三区小说| 成年丰满熟妇午夜免费视频| 久久久91麻豆精品国产一区| 久久精品亚洲一区| 国产又粗又猛视频免费| av午夜一区麻豆| 亚洲色成人www永久在线观看 | 免费在线看黄| 欧美日韩国产高清一区二区| 国产精品无码在线| 国产日韩一区二区三区在线| 国产精品亚洲精品| 欧美一区二区三区少妇| 狠狠躁夜夜躁人人躁婷婷91| 成人精品在线观看视频| 视频一区欧美日韩| 亚洲国产婷婷香蕉久久久久久99| 日韩一区二区三区四区五区 | 欧美日韩一区国产| 国产美女久久久久久| 国产一区二区美女诱惑| 免费看欧美黑人毛片| a看欧美黄色女同性恋| 亚州av一区二区| 蜜桃视频在线观看网站| 欧美日韩在线播放三区四区| 免费看特级毛片| 成人国产电影网| 精品少妇无遮挡毛片| 国产韩日影视精品| 国内视频一区二区| 日本精品另类| 久久国产精品久久精品| 99久久精品国产成人一区二区| 亚洲第一搞黄网站| 中文字幕成人动漫| 国产成人亚洲综合色影视| 免费看又黄又无码的网站| 精品一区二区三区的国产在线观看| 日本欧美中文字幕| 欧美日韩视频在线播放| 亚洲第一页在线| 中文字幕乱码在线观看| 亚洲午夜电影在线| 中国极品少妇videossexhd| 免费在线观看成人| 免费无码毛片一区二三区| 亚洲自拍电影| 51精品国产人成在线观看| 中文不卡1区2区3区| 久久午夜a级毛片| 毛片免费在线观看| 欧美妇女性影城| 日韩成人一区二区三区| 久久丝袜美腿综合| 国产精品成人免费一区久久羞羞| 老司机精品久久| 性一交一乱一伧国产女士spa| 欧美日韩123| 国产日本欧美一区二区三区| 九色porny丨入口在线| 国产亚洲精品一区二区| 人妻偷人精品一区二区三区| 欧美午夜寂寞影院| 精品欧美一区二区三区免费观看 | 精品99一区二区三区| 日本熟女一区二区| 亚洲久草在线视频| 长河落日免费高清观看| 成人黄色在线网站| 奇米777在线| 美女国产一区二区| 日韩精品一区二区三区色欲av| 韩国在线一区| 亚洲午夜在线观看| 成人在线视频www| 国产精品精品国产| 色老太综合网| 欧美夜福利tv在线| 成人免费图片免费观看| 欧美成人精品xxx| 黄色av免费在线| 日韩电影网在线| va婷婷在线免费观看| 欧美日韩国产片| 日韩三级一区二区三区| 亚洲自拍与偷拍| 性生交大片免费全黄| 国产嫩草影院久久久久| 亚洲永久精品ww.7491进入| eeuss国产一区二区三区| 亚洲精品成人无码毛片| 福利一区在线观看| 野战少妇38p| 成人av网站在线观看| 91精产国品一二三| 国产成人福利片| 乱码一区二区三区| 成人精品鲁一区一区二区| 在线精品视频播放| 成人国产精品免费观看视频| 成人在线视频免费播放| 99久久99久久免费精品蜜臀| 波多野结衣先锋影音| 国产成人亚洲综合色影视| 无码人妻一区二区三区精品视频| 国产sm精品调教视频网站| 中文字幕99页| 国产mv日韩mv欧美| 中文成人无字幕乱码精品区| 97se亚洲国产综合在线| 女人又爽又黄免费女仆| 91在线免费视频观看| 高潮毛片无遮挡| 91麻豆123| 先锋影音av在线| 国产午夜精品美女毛片视频| 9.1片黄在线观看| 亚洲国产成人在线| 国产高清一区二区三区四区| 久久久www成人免费无遮挡大片| 亚洲熟女一区二区三区| 久久免费偷拍视频| 手机看片国产日韩| 亚洲永久精品国产| 精品在线视频免费| 欧美视频中文字幕在线| 依依成人综合网| 欧美色网站导航| 蜜桃视频污在线观看| 亚洲成色777777女色窝| 国产视频二区在线观看| 色偷偷噜噜噜亚洲男人| 二区三区四区高清视频在线观看| 久久久精品美女| 国产网站在线| 国产成人精品日本亚洲| 国产高清日韩| 欧美少妇一区| 久久久久久久久久久久久久| 国产欧美123| 在线不卡视频| 免费在线激情视频| 国产美女在线精品| 丰满少妇一区二区| 亚洲卡通欧美制服中文| 综合激情网五月| 91精品国产aⅴ一区二区| 国产精品欧美综合| 亚洲激情第一页| 乱人伦中文视频在线| 欧美最顶级的aⅴ艳星| 久久久久黄色| 国内一区二区在线视频观看| 日韩欧美字幕| 成人免费在线视频播放| 玖玖在线精品| 日本激情综合网| 国产一区在线不卡| 老熟女高潮一区二区三区| www.欧美色图| 中国一级片在线观看| 岛国视频午夜一区免费在线观看| 国产一级精品毛片| 亚洲精品二三区| 国产女人在线观看| 77777亚洲午夜久久多人| 欧美aaaaaaaa| 久久久久久国产精品免费免费| 天天做天天爱天天综合网| www.xxx麻豆| 久久精品日产第一区二区| 国产无套精品一区二区三区| 国产精品久久久久四虎| jizz国产在线观看| 亚洲精品v天堂中文字幕| 日本性爱视频在线观看| 成人av色在线观看| 欧美三级伦理在线| 97超碰在线人人| 国产一区二区三区观看| 美女100%露胸无遮挡| 欧美日韩在线第一页| 好吊视频一二三区| 欧美麻豆久久久久久中文 | 亚洲精品看片| 秋霞午夜鲁丝一区二区| 亚洲天堂精品视频| 在线播放亚洲精品| 精品国产拍在线观看| 一区二区三区电影大全| 国产盗摄xxxx视频xxx69| 久久99国产精品久久99大师| 国产3p露脸普通话对白| 粉嫩aⅴ一区二区三区四区| 国产一二三四在线| 精品国产免费一区二区三区香蕉| 国产在线更新| 成人免费视频97| 综合激情婷婷| wwwxxxx在线观看| 亚洲丶国产丶欧美一区二区三区| 好吊色视频一区二区| 欧美高清视频在线| 9l视频自拍蝌蚪9l视频成人| 夜夜爽www精品| 狠狠v欧美v日韩v亚洲ⅴ| 少妇被躁爽到高潮无码文| 91精品国产综合久久精品app| 国产在线观看高清视频| 国产精品久久久久久av| 九九久久成人| 久久婷婷国产91天堂综合精品| 中文天堂在线一区| 91成人一区二区三区| 久久久精品一区二区| 高清在线一区二区| 屁屁影院ccyy国产第一页| caoporen国产精品视频| 日批视频免费在线观看| 亚洲男女性事视频| 91精品论坛| 精品免费视频123区| 99pao成人国产永久免费视频| 少妇精品一区二区三区| 欧美日韩综合在线免费观看| 婷婷色在线视频| 午夜精品一区二区三区在线视频 | av老司机免费在线| 91最新国产视频| 亚洲成人资源| 亚洲综合第一区| 欧美日韩精品一区二区在线播放| 影音先锋在线视频| 久久人人九九| 激情小说亚洲一区| 日本天堂中文字幕| 国产视频久久久久| 成人豆花视频| 欧美s码亚洲码精品m码| 中文字幕欧美激情一区| 亚洲免费成人网| 国产精品激情自拍| 亚洲黄色精品| 亚洲色图欧美色| 亚洲精品国产精品久久清纯直播 | 一区免费视频| 婷婷综合在线视频| 亚洲国产精品高清久久久|