精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产免费成人| 触手亚洲一区二区三区| 欧美国产91| 精品国产凹凸成av人网站| 欧美aaa在线观看| a级片免费视频| 亚洲承认在线| 亚洲精品久久久久中文字幕欢迎你| 国产91xxx| 啊v在线视频| 国产精品乡下勾搭老头1| 久久久久久久久久久亚洲| 182在线视频| 欧美日韩国产网站| 亚洲三级在线播放| 精品日产一区2区三区黄免费| 九九热只有精品| 色综合久久中文| 欧美日韩国产小视频在线观看| 欧美 国产 精品| 91成人一区二区三区| 久久国产成人精品| 欧美精品一区二区三区久久久| 国产精品69页| 黄色网页在线观看| 99r国产精品| 91久久精品视频| 精品不卡一区二区| 亚洲欧洲日韩| 国产午夜精品一区二区三区| 男人女人拔萝卜视频| 丝袜美腿一区| 亚洲高清视频在线| 日韩欧美一区二区视频在线播放 | 国产精品一区一区三区| 韩剧1988在线观看免费完整版| www.av天天| 18国产精品| 欧美精品久久久久久久多人混战| 精品国产一区三区| 在线免费观看黄色| 99精品热视频| 国产精品免费视频一区二区| 日韩毛片在线播放| 欧美精品成人| 最新国产精品亚洲| 亚洲欧美综合视频| 国产剧情一区二区在线观看| 91激情在线视频| 男人日女人逼逼| 麻豆影院在线观看| 久久久久久久久久电影| 国内外成人免费视频| 中国老头性行为xxxx| 在线综合亚洲| 欧美黑人极品猛少妇色xxxxx| 国产亚洲精品熟女国产成人| 精品国产一区二区三区不卡蜜臂 | 无罩大乳的熟妇正在播放| 50度灰在线| 中文字幕一区二区三区乱码在线 | 精彩视频一区二区| 国产精品第一区| 国产一区二区视频网站| 最新精品国产| 欧美成人免费网| 成人免费精品动漫网站| 国产精品99久久久久久动医院| 在线午夜精品自拍| 麻豆视频免费在线播放| 成人毛片在线| 亚洲女人被黑人巨大进入al| 亚洲制服丝袜在线播放| 牛牛精品成人免费视频| 亚洲国产高潮在线观看| 丰满岳乱妇一区二区| 日本高清久久| 精品国产乱子伦一区| 中国特级黄色片| 中文字幕一区二区三区中文字幕| 91精品免费观看| 999久久久精品视频| 日本免费精品| 亚洲成人久久网| 亚洲调教欧美在线| 台湾色综合娱乐中文网| 亚洲女同性videos| 女人十八毛片嫩草av| 国产精品久久久久久麻豆一区软件 | 亚洲午夜精品久久久中文影院av| 国产h在线观看| 国产精品国产三级国产普通话三级 | 日韩女同一区二区三区 | 国产3p在线播放| 国产极品久久久久久久久波多结野| 欧美特级限制片免费在线观看| 亚洲一级免费在线观看| 成人精品一区二区三区电影| 欧美人动与zoxxxx乱| 91亚洲一区二区| 成人香蕉社区| 精品视频久久久久久| 亚洲熟女乱综合一区二区三区| 亚洲高清极品| 亚洲成avwww人| mm131丰满少妇人体欣赏图| heyzo久久| 另类色图亚洲色图| 日本视频www| 麻豆久久久久久久| 99精品99久久久久久宅男| 欧美精品少妇| 国产精品全国免费观看高清| 国产爆乳无码一区二区麻豆| 蜜臀国产一区| 91麻豆精品国产91久久久久久久久 | 日批免费在线观看| 日本一区二区三区在线观看| 日韩视频一二三| 蜜桃麻豆影像在线观看| 欧美精品久久99| av黄色在线网站| 国产一区二区高清在线| 国产偷国产偷亚洲清高网站| 久久丫精品忘忧草西安产品| 午夜激情一区| 国产精品久久久久7777婷婷| www.亚洲天堂.com| 国产欧美日韩在线| 麻豆tv在线播放| 国产一区二区三区国产精品| 欧美亚男人的天堂| 97精品人妻一区二区三区蜜桃| 成人综合久久| 欧美亚洲国产精品| www.成人在线观看| 国产日韩欧美一区二区三区乱码 | 日漫免费在线观看网站| 国产欧美一区二区三区在线看蜜臀| 日韩a级黄色片| 综合毛片免费视频| 3atv一区二区三区| 国产男女猛烈无遮挡a片漫画 | 亚洲精品中文综合第一页| 日本无删减在线| 777亚洲妇女| 天天躁日日躁狠狠躁av麻豆男男| 亚洲精品国产首次亮相| 国产精品旅馆在线| 精品久久久久一区二区三区| 精品国产福利视频| 国模大尺度视频| 国产一区二区三区电影在线观看 | 国产亚洲精久久久久久| 欧美极品欧美精品欧美| 成人另类视频| 欧美激情videoshd| 亚洲一级片免费看| 国产精品久久久久久久蜜臀| 国产日韩一区二区在线| 欧美专区视频| 欧美乱大交xxxxx另类电影| 91精品国产乱码久久久| 欧美国产丝袜视频| 日韩欧美国产综合在线| 麻豆一区二区| 欧美激情a∨在线视频播放| 国产又粗又猛又爽又黄的视频一| 国产精品网站导航| 2025韩国理伦片在线观看| 欧美大胆视频| 26uuu国产精品视频| 青青草在线视频免费观看| 欧美天天综合色影久久精品| 亚洲色图欧美日韩| 亚洲青涩在线| 欧美精品亚洲| 中老年在线免费视频| 亚洲久久久久久久久久| 无码人妻久久一区二区三区不卡| 久久综合色综合88| aaa毛片在线观看| 欧美熟乱15p| 国产日韩中文在线| 素人av在线| 日韩久久精品一区| 日韩伦人妻无码| 久久久久久久久久久久久夜| 99视频精品免费| 精品在线99| 91精品国产综合久久久久久蜜臀 | 国产在线观看a| 精品欧美久久久| 成年人视频在线免费看| 国产喷白浆一区二区三区| 深夜黄色小视频| 欧美精品国产一区二区| 91夜夜未满十八勿入爽爽影院| av网站在线看| 精品小视频在线| 日韩黄色三级视频| 中文字幕精品在线不卡| 国产精品探花在线播放| 亚洲久色影视| 日本不卡二区| 日韩伦理一区二区| 久久亚洲影音av资源网| 高清一区二区三区四区| 在线精品视频一区二区三四| 国产盗摄x88av| 26uuu色噜噜精品一区二区| 一区二区三区视频在线观看免费| 亚洲精品成人影院| 欧美精品一区二区三区在线看午夜 | 久久综合综合久久综合| 国产精品无码乱伦| 日韩在线你懂的| 国产精品极品美女粉嫩高清在线| 午夜伦理大片视频在线观看| 亚洲精品日韩欧美| 99久久久国产精品无码网爆| 欧美性xxxxxx| 久草免费在线观看视频| 91在线视频免费观看| 天天操夜夜操很很操| 老司机精品福利视频| 嫩草影院中文字幕| 色狮一区二区三区四区视频| 久久国产精品久久精品国产| 欧美特黄色片| 日韩av免费在线播放| 国产精品偷拍| 操91在线视频| 在线观看美女网站大全免费| 精品国产91洋老外米糕| 一级成人免费视频| 精品国产91久久久久久老师| 国产女人18水真多毛片18精品| 久久久午夜电影| 污污网站免费观看| 日韩av一区二区在线影视| 青青青国产在线观看| 欧美黄色免费| 五月天色一区| 一本色道久久综合狠狠躁的番外| 动漫一区二区在线| 日韩中文字幕| 亚洲一区二区三区乱码aⅴ蜜桃女| 在线观看操人| 久久视频在线视频| 一级毛片视频在线| 日韩av一区在线观看| 免费成人在线看| 日韩精品一区二区三区视频播放| 国产精品国产三级国产aⅴ| 午夜一区二区三区视频| 青娱乐国产精品| 中文字幕在线不卡一区| 欧美日韩国产黄色| 91一区在线观看| 黄色污在线观看| 972aa.com艺术欧美| 国产网站无遮挡| 国产一区二区三区在线观看免费| 久久婷五月综合| 免费高清不卡av| 欧美wwwwwww| 蜜桃传媒麻豆第一区在线观看| 中文字幕日本最新乱码视频| 国产日本精品| 影音先锋成人资源网站| 一区二区三区在线电影| 超碰在线免费观看97| 亚洲天堂免费| 精品少妇一区二区三区在线| 亚洲主播在线| 日本www.色| 国产一区二区美女诱惑| 无码国产69精品久久久久网站| 91色porny在线视频| 91中文字幕永久在线| 中文无字幕一区二区三区| 中文国语毛片高清视频| 香蕉成人啪国产精品视频综合网| 久久久久久91亚洲精品中文字幕| 日韩欧美在线观看视频| 国产偷人爽久久久久久老妇app| 在线不卡中文字幕| 四虎在线观看| 日韩视频免费大全中文字幕| 污的网站在线观看| 91av在线免费观看| 国语自产精品视频在线看抢先版结局 | 精品蜜桃传媒| blacked蜜桃精品一区| 六月婷婷激情网| 老牛国产精品一区的观看方式| 色呦色呦色精品| 成人动漫精品一区二区| 公肉吊粗大爽色翁浪妇视频| 亚洲三级在线看| 青青草视频在线观看免费| 69堂国产成人免费视频| 熟妇人妻一区二区三区四区| 在线视频欧美日韩| 伊人手机在线| 91精品国产综合久久香蕉最新版| ccyy激情综合| 亚洲一区二区三区涩| 一本色道久久精品| 丰满人妻一区二区三区53视频| 91看片淫黄大片一级在线观看| 爱爱视频免费在线观看| 欧美性猛交xxxx乱大交蜜桃| 国产精品欧美激情在线| 在线日韩日本国产亚洲| 爱情岛论坛亚洲品质自拍视频网站| 国产97在线播放| 亚州一区二区| 国产四区在线观看| 奇米在线7777在线精品| 中文字幕天堂网| 亚洲天堂成人在线观看| 69成人免费视频| 亚洲国产精品久久久久秋霞不卡| 免费看a在线观看| 日本一区二区不卡| 8848成人影院| 日本免费黄色小视频 | 国产精品嫩草影院8vv8| 久久久久亚洲综合| 久久机热这里只有精品| 欧美一区三区二区| 97电影在线看视频| 国产97免费视| 先锋影音国产精品| 青青草原成人网| 成人动漫一区二区在线| 日韩欧美一区二区三区四区五区| 91精品综合久久久久久久久久久| 国产高清av在线播放| 国产精品一区二区你懂的| 日韩黄色中文字幕| 欧美日韩免费在线视频| 黄网在线免费| 欧美一级片在线播放| 9l视频自拍九色9l视频成人| 17c丨国产丨精品视频| 国产精品资源在线| av激情在线观看| 91精品黄色片免费大全| 超鹏97在线| 91九色国产在线| 99久久精品费精品国产| 不卡的av中文字幕| 亚洲欧洲一区二区在线播放| 亚洲中文字幕一区二区| 一区二区在线免费视频| 巨胸喷奶水www久久久| 亚洲一区综合| 精品一区免费av| 2025国产精品自拍| 日韩欧美国产一区二区三区| 91色在线看| 麻豆传媒一区二区| 日韩精品国产精品| 九九九视频在线观看| 91麻豆精品国产91久久久久久久久| 日本精品在线| 91色视频在线观看| 欧美一区国产在线| 欧美bbbbb性bbbbb视频| 一本色道久久综合亚洲91| 国产天堂在线| 国产有码在线一区二区视频| 欧美女激情福利| 三级视频网站在线观看| 欧美日韩免费网站| 黄色在线播放| 亚洲淫片在线视频| 亚洲精品日韩久久| a毛片毛片av永久免费| 色欧美片视频在线观看在线视频| 色三级在线观看| 99re视频在线| 国产一区二区精品| av电影在线不卡| 日韩亚洲欧美一区| 婷婷电影在线观看| 亚洲国产精品一区二区第四页av | 亚洲欧美日韩小说| 国产综合在线播放| 欧美亚洲国产视频小说| 欧美丝袜一区| 喷水视频在线观看| 欧美日韩极品在线观看一区| 黑人精品视频| 在线观看日本一区| 99视频在线精品| 影音先锋国产资源|