《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 其他 > Linux教學——mmap實現詳解

Linux教學——mmap實現詳解

2022-09-29
作者:songsong001
來源:一口Linux
關鍵詞: Linux mmap 中斷處理

  故事的開始是這樣的,某天在脈脈上看到有人發了下面的帖子:

微信截圖_20220929173630.png

  想不到 mmap 都成了黑科技了,為了讓大家都能了解這個黑科技,所以還是寫篇文章來詳細介紹一下 mmap 的實現吧。

  其實,源碼分析是比較難寫的,主要有兩個原因:

  一方面是源碼實現一般會涉及多個知識點,所以在分析源碼時需要穿插多個知識點,從而增加分析的難度。另一方面是源碼實現會處理很多細節問題,這些細節問題雖然不是設計的主要框架,但忽略了有時會讓人摸不著頭腦。

  所以,為了降低分析的難度和讓讀者能夠更容易看懂,在分析源碼時更注重知識點的實現,而在不影響理解的情況下,我會忽略一些細節問題。而對于穿插其他知識點的時候,會先跳過其實現,并且在后續的文章對其進行分析。

  mmap 原理

  在之前的文章中,我們也介紹過 mmap 的原理,比如這篇:《原來 mmap 這么簡單》。當然這篇文章只是簡單介紹了 mmap 的原理,但是 mmap 的實現遠不止那么簡單,這是因為 mmap 涉及多個子系統,如:內存管理、文件系統、中斷處理等。

  好消息是,這幾個子系統我們都有對應的文章介紹過:

  內存管理:Linux虛擬內存空間管理》
       文件系統:《 什么是頁緩存》
       中斷處理:《Linux中斷處理》

  在閱讀本文前,最好復習一下上面的文章。

  雖然在《原來 mmap 這么簡單》一文中,我們簡單介紹過 mmap 的原理。但為了方便分析源碼,下面還是簡單回顧一下 mmap 的原理吧。

  mmap 的全稱是 memory map,中文意思是 內存映射。其用途是將文件映射到內存中,然后可以通過對映射區的內存進行讀寫操作,其效果等同于對文件進行讀寫操作。

  下面我們通過一幅圖來對 mmap 的原理進行闡述:

微信截圖_20220929173816.png

  從上圖可以看出,mmap 的原理就是將虛擬內存空間映射到文件的頁緩存,在《什么是頁緩存》一文中可知,對文件進行讀寫時需要經過頁緩存進行中轉的。所以當虛擬內存地址映射到文件的頁緩存后,就可以直接通過讀寫映射區內存來對文件進行讀寫操作。

  mmap 實現

  在分析 mmap 的實現前,最好先了解其使用方式,mmap 的使用可以參考《原來 mmap 這么簡單》這篇文章。

  1. 文件映射

  當我們使用 mmap() 系統調用對文件進行映射時,將會觸發調用 do_mmap_pgoff() 內核函數來完成工作,我們來看看 do_mmap_pgoff() 函數的實現(經過精簡后):

  unsigned long

  do_mmap_pgoff(struct file *file, unsigned long addr,

  unsigned long len, unsigned long prot,

  unsigned long flags, unsigned long pgoff)

  {

  ...

  // 1. 獲取一個未被使用的虛擬內存區

  addr = get_unmapped_area(file, addr, len, pgoff, flags);

  if (addr & ~PAGE_MASK)

  return addr;

  ...

  // 2. 調用 mmap_region() 函數繼續進行映射操作

  return mmap_region(file, addr, len, flags, vm_flags, pgoff, accountable);

  }

  經過精簡后的 do_mmap_pgoff() 函數主要完成 2 個工作:

  首先,調用 get_unmapped_area() 函數來獲取進程沒被使用的虛擬內存區,并且返回此內存區的首地址。然后,調用 mmap_region() 函數繼續進行映射操作。

  在 32 位的操作系統中,每個進程都有 4GB 的虛擬內存空間,應用程序在使用內存前,需要先向操作系統發起申請內存的操作。操作系統會從進程的虛擬內存空間中查找未被使用的內存地址,并且返回給應用程序。

  操作系統會記錄進程正在使用中的虛擬內存地址,如果內存地址沒被登記,說明此內存地址是空閑的(未被使用)。

  我們繼續來看看 mmap_region() 函數的實現,代碼如下(經過精簡后):

  unsigned long

  mmap_region(struct file *file, unsigned long addr,

  unsigned long len, unsigned long flags,

  unsigned int vm_flags, unsigned long pgoff,

  int accountable)

  {

  struct mm_struct *mm = current->mm;

  struct vm_area_struct *vma, *prev;

  int correct_wcount = 0;

  int error;

  ...

  // 1. 申請一個虛擬內存區管理結構(vma)

  vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);

  ...

  // 2. 設置vma結構各個字段的值

  vma->vm_mm = mm;

  vma->vm_start = addr;

  vma->vm_end = addr + len;

  vma->vm_flags = vm_flags;

  vma->vm_page_prot = protection_map[vm_flags & (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)];

  vma->vm_pgoff = pgoff;

  if (file) {

  ...

  vma->vm_file = file;

  /* 3. 此處是內存映射的關鍵點,調用文件對象的 mmap() 回調函數來設置vma結構的 fault() 回調函數。

  *    vma對象的 fault() 回調函數的作用是:

  *        - 當訪問的虛擬內存沒有映射到物理內存時,

  *        - 將會調用 fault() 回調函數對虛擬內存地址映射到物理內存地址。

  */

  error = file->f_op->mmap(file, vma);

  ...

  }

  ...

  // 4. 把 vma 結構連接到進程虛擬內存區的鏈表和紅黑樹中。

  vma_link(mm, vma, prev, rb_link, rb_parent);

  ...

  return addr;

  }

  mmap_region() 函數主要完成以下 4 件事情:

  申請一個 vm_area_struct 結構(vma),內核使用 vma 來管理進程的虛擬內存地址,關于 vma 的詳細介紹可以參考:《Linux虛擬內存空間管理》。設置 vma 結構各個字段的值。通過調用文件對象的 mmap() 回調函數來設置vma結構的 fault() 回調函數,一般文件對象的 mmap() 回調函數為:generic_file_mmap()。把新創建的 vma 結構連接到進程的虛擬內存區鏈表和紅黑樹中。

  內核使用 vm_area_struct 結構來管理進程的虛擬內存地址。當進程需要使用內存時,首先要向操作系統進行申請,操作系統會使用 vm_area_struct 結構來記錄被分配出去的內存區的大小、起始地址和權限等。

  我們來看看 vm_area_struct 結構的定義:

  struct vm_area_struct {

  struct mm_struct *vm_mm;

  unsigned long vm_start;              // 內存區的開始地址

  unsigned long vm_end;                // 內存區的結束地址

  struct vm_area_struct *vm_next;      // 把進程所有已分配的內存區鏈接起來

  pgprot_t vm_page_prot;               // 內存區的權限

  ...

  struct rb_node vm_rb;                // 為了加快查找內存區而建立的紅黑樹

  ...

  struct vm_operations_struct *vm_ops; // 內存區的操作回調函數集

  unsigned long vm_pgoff;

  struct file *vm_file;                // 如果映射到文件,將指向映射的文件對象

  ...

  };

  struct vm_operations_struct {

  // 當虛擬內存區沒有映射到物理內存地址時,將會觸發缺頁異常,

  // 而在缺頁異常處理函數中,將會調用此回調函數來對虛擬內存映射到物理內存。

  int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);

  ...

  };

  當把文件映射到虛擬內存空間時,需要把 vma 結構的 vm_file 字段設置為要映射的文件對象,然后調用文件對象的 mmap() 回調函數來設置 vma 結構的 fault() 回調函數。

  vma 結構的 fault() 回調函數的作用是:當虛擬內存區沒有映射到物理內存地址時,將會觸發缺頁異常。而在缺頁異常處理中,將會調用此回調函數來對虛擬內存映射到物理內存。

  我們來看看 generic_file_mmap() 函數是怎么設置 vma 結構的 fault() 回調函數的:

  struct vm_operations_struct generic_file_vm_ops = {

  .fault = filemap_fault, // 將 fault() 回調函數設置為:filemap_fault()

  };

  int generic_file_mmap(struct file *file, struct vm_area_struct *vma)

  {

  ...

  vma->vm_ops = &generic_file_vm_ops;

  ...

  return 0;

  }

  至此,文件映射的過程已經分析完畢。我們來看看其調用鏈:

  sys_mmap()

  └→ do_mmap_pgoff()

  └→ mmap_region()

  └→ generic_file_mmap()

  2. 缺頁異常

  前面介紹了 mmap() 系統調用的處理過程,可以發現 mmap() 只是將 vma 的 vm_file 字段設置為被映射的文件對象,并且將 vma 的 fault() 回調函數設置為 filemap_fault()。也就是說,mmap() 系統調用并沒有對虛擬內存進行任何的映射操作。

  我們在《漫畫解說 “內存映射”》一文中介紹過,虛擬內存必須映射到物理內存才能使用。如果訪問沒有映射到物理內存的虛擬內存地址,CPU 將會觸發缺頁異常。也就是說,虛擬內存并不能直接映射到磁盤中的文件。

  那么 mmap() 是怎么將文件映射到虛擬內存中呢?我們在《 什么是頁緩存》一文中介紹過,讀寫文件時并不是直接對磁盤上的文件進行操作的,而是通過 頁緩存 作為中轉的,而頁緩存就是物理內存中的內存頁。所以,mmap() 可以通過將文件的頁緩存映射到虛擬內存空間來實現對文件的映射。

  但我們在 mmap() 系統調用的實現中,也沒看到將文件頁緩存映射到虛擬內存空間。那么映射過程是在什么時候發生的呢?

  答案就是:缺頁異常。

  由于 mmap() 系統調用并沒有直接將文件的頁緩存映射到虛擬內存中,所以當訪問到沒有映射的虛擬內存地址時,將會觸發 缺頁異常。當 CPU 觸發缺頁異常時,將會調用 do_page_fault() 函數來修復觸發異常的虛擬內存地址。

  我們主要來看看 do_page_fault() 函數對文件映射的實現部分,其調用鏈如下:

  do_page_fault()

  └→ handle_mm_fault()

  └→ handle_pte_fault()

  └→ do_linear_fault()

  └→ __do_fault()

  所以我們直接來看看 __do_fault() 函數的實現:

  static int

  __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,

  unsigned long address, pmd_t *pmd, pgoff_t pgoff,

  unsigned int flags, pte_t orig_pte)

  {

  ...

  vmf.virtual_address = address & PAGE_MASK; // 要映射的虛擬內存地址

  vmf.pgoff = pgoff;                         // 映射到文件的偏移量

  vmf.flags = flags;                         // 標志位

  vmf.page = NULL;                           // 映射到虛擬內存中的物理內存頁

  // 1. 如果虛擬內存管理區提供了 falut() 回調函數,那么將調用此函數來獲取要映射的物理內存頁,

  //    我們在 mmap() 系統調用的實現中看到,已經將其設置為 filemap_fault() 函數了。

  if (likely(vma->vm_ops->fault)) {

  ret = vma->vm_ops->fault(vma, &vmf);

  ...

  }

  ...

  if (likely(pte_same(*page_table, orig_pte))) {

  ...

  // 2. 通過物理內存頁生成一個頁表項值(可以參考內存映射一文)

  entry = mk_pte(page, vma->vm_page_prot);

  if (flags & FAULT_FLAG_WRITE)

  entry = maybe_mkwrite(pte_mkdirty(entry), vma);

  // 3. 將虛擬內存地址映射到物理內存(也就是將進程的頁表項設置為剛生成的頁表項的值)

  set_pte_at(mm, address, page_table, entry);

  ...

  }

  ...

  return ret;

  }

  __do_fault() 函數對處理文件映射部分主要分為 3 個步驟:

  調用虛擬內存管理區結構(vma)的 fault() 回調函數(也就是 filemap_fault() 函數)來獲取到文件的頁緩存。通過頁緩存的物理內存頁來生成一個頁表項值,可以參考《漫畫解說 “內存映射”》一文。將虛擬內存地址映射到頁緩存的物理內存頁(也就是將進程的頁表項設置為上面生成的頁表項的值)。

  對于 filemap_fault() 函數是怎樣讀取文件頁緩存的,本文不作解釋,有興趣的可以自行閱讀源碼。

  最后,我們以一幅圖來描述一下虛擬內存是如何與文件進行映射的:

微信截圖_20220929174107.png

  從上圖可以看出,mmap() 是通過將虛擬內存地址映射到文件的頁緩存來實現的。當對映射后的虛擬內存進行讀寫操作時,其效果等價于直接對文件的頁緩存進行讀寫操作。對文件的頁緩存進行讀寫操作,也等價于對文件進行讀寫操作。

  

更多信息可以來這里獲取==>>電子技術應用-AET<<

微信圖片_20210517164139.jpg

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 欧美激情免费视频 | 手机在线精品视频 | 黄色一级片免费播放 | 久久久久中文 | 国产高清免费 | 日韩人妻熟女中文字幕a美景之屋 | 亚洲一区影视 | 国产情侣酒店自拍 | 久久久久噜噜噜亚洲熟女综合 | 日韩精品成人无码专区免费 | 久久久成人精品视频 | 成人羞羞视频国产 | 粉嫩av一区二区三区免费野 | 国产最新在线 | 大黄一级片 | 亚洲三级在线视频 | 免费毛片播放 | 亚洲美女福利 | 欧美精品一区二区三区制服首页 | 中文字幕第35页 | 欧美在线视频播放 | 亚洲国产精品无卡做爰天天 | 一级黄色片免费看 | 色羞羞 | 国产人妖在线观看 | 97国产资源| 性做爰的免费视频 | 国产美女mm131爽爽爽免费 | 一级黄色免费网站 | 日日夜夜艹 | 国产午夜在线视频 | 亚洲天堂网址 | 国产精品手机在线观看 | 成人做爰视频www | 福利影院av | 一区视频 | 欧美激情专区 | 免费看污视频的网站 | 少妇又紧又色 | 亚洲视频播放 | 久久视频一区二区 | 久久先锋男人av资源网站 | 欧美日本国产在线 | 性欧美18| 欧洲色视频 | 国产在线精品一区二区三区不卡 | 成人精品免费网站 | 波多野结衣www | 伊人久色 | 狂野猛交ⅹxxx吃奶 狂野欧美性猛交xxⅹ李丽珍 | 欧美精品一区二区三区在线 | 国产亚洲精品久 | 手机免费看av片 | 亚洲精品伊人 | 欧美18videosex性欧美黑吊 | 色噜噜狠狠狠综合曰曰曰88av | 国产欧美一区二区白浆黑人 | 99青青草| 懂色av色香蕉一区二区蜜桃 | 成年人免费小视频 | 偷拍亚洲 | 曰本黄色片| 国产在线精品一区二区三区 | 免费啪| av中文字幕在线免费观看 | 国产偷国产偷亚洲清高动态图 | 日日爱99 | av青草| 国产精品久久久久久久久婷婷 | 国产精品一区在线免费观看 | 婷婷六月天在线 | 香蕉视频1024| 成年人在线视频网站 | 欧美激情16p | 精品久久久久成人码免费动漫 | 91精品在线国产 | 夜夜高潮夜夜爽国产伦精品 | 99精品视频在线观看免费播放 | avtt在线| 中文字幕在线精品 | 日日操视频 | 欧美激情国产日韩精品一区18 | 美女爽到呻吟久久久久 | 久久久久免费视频 | 免费啪视频 | 欧美成人在线影院 | 亚洲精品久久久久玩吗 | 91在线免费看 | 中文字幕一区二区三区四区五区 | 亚洲乱码国产乱码精品精不卡 | 最近中文字幕在线观看视频 | 日韩免费成人 | 国产日韩欧美中文字幕 | 亚洲毛片网站 | 内地级a艳片高清免费播放 内谢老女人视频在线观看 嫩草99 | 51福利视频 | 亚洲高清免费观看 | 无码av中文一区二区三区桃花岛 | 欧美另类xxxxx | jizz在线观看视频 | 男人天堂综合 | 国产精品久久福利 | 亚洲色图制服诱惑 | 免费中文字幕av | 久久久久中文字幕 | 乌克兰t做爰xxxⅹ性 | 伊人av超碰久久久麻豆 | 激情六月天 | 一区视频在线 | 日本一区二区在线播放 | 欧美激情视频一区二区三区在线播放 | 久久亚洲欧美国产精品 | 中文字幕制服狠久久日韩二区 | 日韩毛片基地 | 中国人与牲禽动交精品 | 国产性猛交╳xxx乱大交 | 中文字幕在线观看英文怎么写 | 日本三级吃奶头添泬无码苍井空 | 国产成a人亚洲精v品无码性色 | 天天曰天天操 | 免费国精产品—品二品 | 中文字幕av网址 | 岛国av资源| 国产又粗又硬又大爽黄老大爷视 | 国内av自拍| 激情国产一区二区三区四区小说 | 91av影视| 成人国产片 | 亚洲精品~无码抽插 | 天堂av手机版 | 欧美毛片在线观看 | 国产一级精品绿帽视频 | 国产网红女主播免费视频 | 插久久| 国产又粗又大又爽视频 | 国产亚洲视频中文字幕97精品 | 狠狠干香蕉 | 少妇与公做了夜伦理 | 精品欧美一区免费观看α√ | 色哟哟精品观看 | 亚洲精品久久久久久婷婷 | 国产乱弄免费视频 | 中文字幕一区二区三区精彩视频 | 成人影院中文字幕 | 国内色视频 | www.伊人网 | 久久综合精品国产丝袜长腿 | 免费日韩欧美 | 午夜性影院 | 久久久久夜 | 国产av无码久久精品 | 精品国产乱码久久久久久闺蜜 | 国产三级网址 | 8ⅹ8x擦拨擦拨成人免费视频 | 91精品国产福利在线观看 | 一本色综合亚洲精品 | 国产麻豆乱码精品一区二区三区 | 国产高潮流白浆视频 | 视频二区在线 | 亚洲黄色片视频 | av免费看在线 | 岛国大片在线观看 | 免费成人蒂法网站 | xnxx女第一次 | 在线播放少妇奶水过盛 | 国产精品v欧美精品v日韩精品 | 中文字幕日韩精品亚洲一区小树林 | 国产精品亚亚洲欧关中字幕 | 亚洲午夜精品a片久久www慈禧 | 欧美皮鞭调教www..com | 日韩国产人妻一区二区三区 | 艳妇臀荡乳欲伦交换h在线观看 | 亚洲国产精品视频 | 黄色美女视频网站 | 国内自拍99 | 黄色一级视频在线观看 | 妖精视频一区二区三区 | 中文字幕在线观看一区 | 老司机午夜福利视频 | 中国美女黄色一级片 | 欧美风情第一页 | 激情深爱五月 | 深夜视频免费在线观看 | 一级片在线免费观看视频 | 成人做爰69片免费看网站 | 99亚洲精品在线 | 少妇激情偷人三级 | 成人午夜高潮a∨猛片 | 老头把我添高潮了a片 | 久久久久久曰本av免费免费 | 在线观看一区 | 国产极品视觉盛宴 | 一级片aaa| 亚洲精品影院 | 精品久久久爽爽久久男人和男人 | 大尺度一区二区 | www.youjizz.com国产| 超碰免费公开在线 | 91蝌蚪| 国产大屁股视频免费区 | 97国产精品欲 | 午夜激情四射 | av网址免费在线观看 | 国产伦精品一区二区三区免费优势 | 国色天香婷婷综合网 | 寂寞少妇让水电工爽了一小说 | 国产精品亚洲欧美日韩在线观看 | 在线毛片基地 | 97国内揄拍国内精品对白 | 久久黄色网络 | 日本三级黄在线观看 | 成人午夜免费福利 | 中文字幕日本最新乱码视频 | 桃色一区二区三区 | 少妇大叫太大太爽受不了 | 青青青国产在线 | 久久99精品久久久久久久久久久久 | 欧美性生交大片免费看 | а√中文在线资源库 | 国产自在自线午夜精品 | 国产女人精品视频国产灰线 | 亚洲伊人色综合网站小说 | 国产无套精品一区二区 | 久久精品亚洲酒店 | 人妻精品久久久久中文字幕69 | 国产在线精品无码二区 | 色香色香欲天天天影视综合网 | 老妇高潮潮喷到猛进猛出 | 一本a道新久花碟 | 91精品国自产在线观看 | 精品国产乱码久久久久久鸭王1 | 精品国产一区二区三区粉芽 | 午夜一区二区国产好的精华液 | 最近中文字幕在线观看视频 | 青青青青青手机视频在线观看视频 | 久久精品国产99国产精品 | 欧美疯狂xxxxbbbb喷潮 | 曰批女人视频在线观看 | 日本aⅴ写真网站免费 | 欧美人与动物xxxx | 免费av观看网址 | 我看午夜视频 | 色综合色综合网色综合 | 成年美女黄网站色大免费全看 | 大陆明星乱淫(高h)小说 | 欧美激情国产精品日韩 | 天堂а√在线中文在线最新版 | 国产精品奇米一区二区三区小说 | 国产伦精品一区二区三区妓女下载 | 免费成人黄色 | 国产精品久久久久久久久久大牛 | 宅男噜噜噜66网站在线观看 | 色狠狠一区二区三区香蕉 | 五月天色丁香 | 99精品偷自拍 | 国产熟人av一二三区 | 国产视频观看 | a级在线看 | 久久成人国产精品 | 国产三级在线视频 一区二区三区 | 青青青草视频 | 天天爽天天操 | 日本成熟老妇乱 | 久久在线视频 | 国产理论片在线观看 | 亚洲精品三级 | 免费无码不卡视频在线观看 | 香蕉久久精品日日躁夜夜躁夏 | 国产精品国产三级国产有见不卡 | 国产成人一区二区三区别 | 久久久久日韩精品久久久男男 | 亚洲人女屁股眼交3之懂色 亚洲人屁股眼子交1 | 怡红院av亚洲一区二区三区h | 91在线高清视频 | 伊人免费 | 少妇坐莲好爽91 | 免费在线看黄网址 | 内射干少妇亚洲69xxx | 日韩欧美第一页 | 日本少妇又色又爽又高潮看你 | 日本中文字幕在线播放 | 国产精品国产自线拍免费软件 | 五月天婷婷免费视频 | 日本福利在线观看 | 亚洲91视频| 波多野结衣久久久久 | 日韩中文字幕综合 | 国产精品天干天干在线 | 欧美日韩精品在线 | 五月天综合网站 | 色翁荡熄又大又硬又粗又视频 | 成人一区二区毛片 | 脱岳裙子从后面挺进去在线观看 | 亚洲影院丰满少妇中文字幕无码 | 亚洲色欲色欲www在线观看 | 噜噜噜在线观看免费视频日本 | av在线男人天堂 | 黄91在线观看 | 日本三级欧美三级高潮365 | 国模福利视频 | 色五月五月丁香亚洲综合网 | 国产精品后入内射日本在线观看 | 一区二区三区视频在线播放 | 风间由美不戴奶罩邻居勃起av | 日本h在线| 亚洲女同一区二区 | 婷婷久久五月 | 中文字幕久精品免费视频 | 在线免费看黄视频 | 国产做爰视频免费播放 | 丨国产丨调教丨91丨 | 懂色一区二区三区av片 | 精品日韩在线播放 | 97se亚洲国产综合在线 | 伊人久久无码中文字幕 | 欧美性猛交xxxx乱大交极品 | 夜夜添无码一区二区三区 | 国产精品国产三级国产aⅴ无密码 | 人妻天天爽夜夜爽一区二区 | 狠狠躁18三区二区一区张津瑜 | 国模张文静啪啪私拍150p | 久国久产久精永久网页 | 神马午夜嘿嘿 | 天天综合天天做 | 青青超碰 | 国产精品一区在线看 | 亚洲人午夜射精精品日韩 | 久操免费在线视频 | 最近中文字幕2019视频1 | 久久综合噜噜激激的五月天 | 日韩一区二区精品葵司在线 | 国产视频污 | 六月丁香久久 | 欧美色视频在线观看 | 国产成人一区二区三区视频 | 久久久噜噜噜久久中文福利 | 91com在线观看 | 18禁黄网站男男禁片免费观看 | 亚洲成人a v| 天天鲁一鲁摸一摸爽一爽 | 国产伦精品一区二区三区免费观看 | av官网在线观看 | 精品人妻系列无码人妻免费视频 | 女性向av片在线观看免费 | 国产精品女同磨豆腐磨出水了 | 丰满少妇xbxb毛片日本 | 少妇呻吟白浆高潮啪啪69 | 亚洲精品国产精品乱码视色 | 亚洲精品自在在线观看 | 成人无码在线视频网站 | 免费网站日本a级淫片免费看 | 女人天堂av | 久久中文字幕人妻熟av女蜜柚m | 日韩欧美一区二区三区免费观看 | 黄色一级片儿 | 久久露脸国语精品国产91 | 一级黄色片在线观看 | 日本熟妇乱子伦xxxx | 色情无码一区二区三区 | 成人性生生活a | 在线看免费视频 | 国产人伦精品一区二区三区 | 久久久久久片 | 欧美日韩视频免费观看 | 午夜福利一区二区三区在线观看 | 国产性猛交xxxx免费看久久 | 日本一区二区三区爆乳 | 五月天天丁香婷婷在线中 | 欧美性成人| 国产精品88 | av在线黄色| 国产精品国产免费无码专区不卡 | 美女搞黄视频网站 | 亚洲第一大综合区 | 四虎永久在线精品免费一区二区 | www夜夜| 亚洲婷婷免费 | 欧美天天爽 | 国内自拍欧美 | 国产成人午夜精品5599 | 91成人短视频免费版 | 欧美xxxxhd| 亚洲一区在线观看视频 | 亚洲在线一区 | 亚洲精品国产精品乱码不卡√香蕉 | 香蕉精品在线 | 天天夜碰日日摸日日澡性色av | 日韩精品高清在线 | 国产专区在线播放 | 国产精品成人免费一区久久羞羞 | 精品久久久久久久免费人妻 | 国产免费一区二区三区免费视频 | 精品国产一区二区三区2021 | 88xx永久免费看大片 | 日本激情网站 | 色琪琪丁香婷婷综合久久 | 91爽爽| 久久综合爱 | 国产成人精品日本亚洲直播 | 国产欧美高清在线观看 | 91文字幕巨乱亚洲香蕉 | 中文字幕乱码在线观看 | 麻豆文化传媒精品一区观看 | 中文国产日韩精品av片 | 在线色播 | 午夜精品久久久久久久99黑人 | 国产成人午夜精品5599 | 欧美精品一区二区三区在线 | 97干视频| 亚洲一区在线免费 | 欧美亚洲系列 | 亚洲欧美第一 | 中文高清av | 久久99精品国产麻豆91樱花 | 国产精品高潮呻吟av久久 | 国产高中女学生第一次 | 我的公把我弄高潮了视频 | 国产精品一国产精品 | 久久精品视 | 日韩av福利 | 78色淫网站女女免费 | cao在线| 亚洲精品一区二区久久 | 精品人妻av一区二区三区 | 精品无人乱码一区二区 | 久久久国产精品一区二区三区 | 青春草国产视频 | √最新版天堂资源网在线 | 亚洲性无码av在线 | 欧美顶级少妇做爰hd | a级毛片黄免费观看 m | 久久综合久久美利坚合众国 | 少妇人妻系列无码专区视频 | 久久久久综合精品福利啪啪 | 免费看国产曰批40分钟 | 国产a级网站 | 一二区免费视频 | 久久国产剧情 | 国产中文字字幕乱码无限 | 亚洲精品久久久久58 | 婷婷四房综合激情五月 | xx性欧美肥妇精品久久久久久 | 黄色顶级片| 中国特级毛片 | 一本一道色欲综合网中文字幕 | 欧美黄大片 | 午夜看片网站 | 少妇又色又爽又刺激视频 | 美国美女群体交乱 | 无码中文字幕色专区 | 伊人网在线观看 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 爱爱视频日本 | 一级做人爰全过程 | 国产在线永久视频 | 91久久国产综合久久91 | 蜜桃tv一区二区三区 | 成人午夜免费在线观看 | 中文字幕丝袜第1页 | 永久免费成人代码 | 免费黄色国产视频 | 高清中文字幕在线a片 | 男人扒开添女人下部免费视频 | 久久久精品视 | 精品超清无码视频在线观看 | 男女超爽视频免费播放 | 一色桃子在线精品播放 | 在线播放免费播放av片 | 亚洲色图欧美视频 | 成人夜晚视频 | 日韩欧美一区视频 | 国产最爽乱淫视频免费 | www国产国人免费观看视频 | 欧美亚洲天堂网 | 天天干夜夜嗨 | 少妇放荡的呻吟干柴烈火动漫 | 天天干,夜夜操 | 91午夜精品亚洲一区二区三区 | 午夜精品在线 | 天天躁日日躁狠狠躁欧美老妇小说 | 99热在线只有精品 | 国产a一级| 亚洲国产欧美一区二区三区丁香婷 | 日本少妇高潮喷水视频 | 亚洲网友自拍 | 成人久色 | 久久香蕉影视 | 岳狂躁岳丰满少妇大叫 | 国产又粗又黄又猛 | 国产区一区二区三 | 国内极品少妇1000激情啪啪千 | 国产免费观看久久黄av片 | 日产精品高潮呻吟av久久 | 日本精品久久久久久 | 天天操天天曰 | 91免费在线视频观看 | 国产又粗又硬又大爽黄老大爷视 | 少妇精品偷拍高潮白浆 | 国产99视频精品免视看9 | 国产欧美一区二区三区沐欲 | 欧美亚洲三级 | 久久精品欧美日韩精品 | 强制中出し~大桥未久在线 | 99久久精品国产毛片 | 黑人借宿巨大中文字幕 | 久久久久久影院 | 成人免费视频在线看 | 祥仔av免费一区二区三区四区 | 99国产精品久久久久久久日本竹 | 国产精品无码av一区二区三区 | 美女自卫慰免费视频www免费 | 日日摸天天摸爽爽狠狠97 | 国产三级中文字幕 | 97免费视频在线 | 国产主播福利在线 | 色999日韩 | 狠狠综合久久av一区二区老牛 | 丝袜+亚洲+另类+欧美+变态 | 亚洲婷婷在线 | 天堂a免费视频在线观看 | 国产在线精品一区在线观看 | 欧美射图 | 国产精品涩涩屋www在线观看 | 日韩国产在线播放 | 欧美视频在线观看一区 | 91日批 | www中文字幕| 午夜精品福利一区二区蜜股av | 亚洲成人精品一区二区三区 | 免费成人在线观看视频 | 日批视频 | 免费国产成人高清在线观看网站 | 国产成人综合亚洲 | 天天干天天干天天 | 国产精品无码mv在线观看 | 亚洲一区二区三区在线 | 欧洲精品欧美精品 | 亚洲精品久久久久久中文传媒 | 高h1v| 亚洲精品久久久久国色天香 | 久久久久99一区二区三区 | 少妇精品无码一区二区免费视频 | 最新国产视频 | 国产乱对白精彩 | а√天堂8资源在线官网 | wwwxx国产| 日韩精品免费看 | 久久久久久久久久久久久久久久久久 | 亚洲自拍色 | 亚洲中文字幕无码久久精品1 | 日韩在线观看一区 | 婷婷五月六月激情综合色中文字幕 | 老妇荒淫牲艳史 | 九色影视| 少妇熟女视频一区二区三区 | 精品不卡一区二区 | 久草这里只有精品 | 久久久国产乱子伦精品作者 | 成人免费观看视频网站 | 人妻系列无码专区无码中出 | 俺也去综合 | 日韩人妻ol丝袜av一二区 | 女生毛片| 中国人与牲禽动交精品 | 成人网在线看 | 女女同性女同区二区国产 | 91夜色视频 | 午夜香蕉视频 | 日本高清www免费视频 | 成人精品视频在线看 | 好紧好湿太硬了我太爽了视频 | 中文字幕+乱码+中文字幕明步 | 伊人中文在线 | 欧美精品影院 | 精品亚洲一区二区三区四区五区 | 草逼视频网 | 伊人春色网站 | 在线观看av网站永久 | 日本一区二区三区视频在线 | 中文字幕人妻无码视频 | 欧美丰满少妇xxxxx | 国产精品久久久久久久久久99 | 小日本xxx| 国产在热线精品视频 | 少妇高潮流白浆在线观看 | 天天插美女 | 强奷乱码中文字幕熟女一 | 久久99精品久久久久婷婷 | 成人黄色片网站 | 性欧美17一18内谢 | 18分钟处破好疼哭视频在线观看 | www亚洲人 | 亚洲第一黄色 | 中文字幕在线不卡 | 穿越异世荒淫h啪肉np文 | 91国产视频在线观看 | 亚洲国产无| 91porny真实丨国产18 | 国产伦精品一区二区三区视频新 | 日本高清视频www | 亚洲色图小说 | 一本一道人人妻人人妻αv 自拍日韩亚洲一区在线 | 天堂网在线中文 | 亚洲国产天堂一区二区三区 | 97热久久| 野草社区在线观看 | 最新激情网 | 91在线播放国产 | 日本一区二区成人 | 国产国拍亚洲精品av | 精品无码一区二区三区水蜜桃 | 国产视频二区三区 | 国产欧美精品一区二区色综合 | 爆操网站 | 日本一级二级三级久久久 |