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

Linux下訪問匿名頁發生的神奇“化學反應”

系統 Linux
本文中,主要分析匿名頁的訪問將發生哪些可能顛覆我們認知的"化學反應"。

[[436312]]

 Linux中有后備文件支持的頁稱為文件頁,如屬于進程的代碼段、數據段的頁,內存回收的時候這些頁面只需要做臟頁的同步即可(干凈的頁面可以直接丟棄掉)。反之為匿名頁,如進程的堆棧使用的頁,內存回收的時候這些頁面不能簡單的丟棄掉,需要交換到交換分區或交換文件。本文中,主要分析匿名頁的訪問將發生哪些可能顛覆我們認知的"化學反應"。

1.實例代碼

首先以一個簡單的示例代碼來說明: 

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <unistd.h>  
  4. #include <string.h>  
  5. #include <sys/mman.h>  
  6. #define MAP_SIZE (100 * 1024 * 1024)  
  7. int main(int argc, char *argv[])  
  8.  
  9.  char *p;  
  10.  char val;  
  11.  int i; 
  12.  puts("before mmap ok, pleace exec 'free -m'!");  
  13.  sleep(5);  
  14.  //mmap  
  15.  p = mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);  
  16.  if(p == NULL) {  
  17.   perror("fail to malloc");  
  18.   return -1;  
  19.  }   
  20.  puts("after mmap ok, pleace exec 'free -m'!");  
  21.  sleep(5);  
  22.  //read  
  23.  for (i = 0; i < MAP_SIZE; i++) {  
  24.   val = p[i];  
  25.  }  
  26.  puts("read ok, pleace exec 'free -m'!");  
  27.  sleep(5);  
  28. #if 1  
  29.  //write  
  30.  memset(p, 0x55, MAP_SIZE);  
  31.  puts("write ok, pleace exec 'free -m'!");  
  32. #endif  
  33.  //sleep  
  34.  pause();  
  35.  return 0;  

代碼非常簡單:首先通過mmap分配100M的私有可讀可寫匿名頁面,然后進行讀寫訪問,分別在提示的時候在另外一個窗口執行free -m命令查看輸出結果。

程序執行結果如下: 

  1. $ ./anon_rw_demo  
  2. before mmap ok, pleace exec 'free -m'!  
  3. after mmap ok, pleace exec 'free -m'!  
  4. read ok, pleace exec 'free -m'!  
  5. write ok, pleace exec 'free -m'! 

命令執行結果如下: 

  1. $ free -m  
  2.               總計         已用        空閑      共享    緩沖/緩存    可用  
  3. 內存:       15729        8286        1945         895        5497        6220  
  4. 交換:       16290        1599       14691  
  5. $ free -m  
  6.               總計         已用        空閑      共享    緩沖/緩存    可用  
  7. 內存:       15729        8286        1945         895        5497        6220  
  8. 交換:       16290        1599       14691  
  9. $ free -m  
  10.               總計         已用        空閑      共享    緩沖/緩存    可用  
  11. 內存:       15729        8286        1945         895        5497        6220  
  12. 交換:       16290        1599       14691  
  13. $ free -m  
  14.               總計         已用        空閑      共享    緩沖/緩存    可用  
  15. 內存:       15729        8383        1848         895        5497        6123  
  16. 交換:       16290        1599       14691 

可以看到:

第一次提示執行free命令的時候,我們還沒有開始通過mmap分配內存,此時free命令輸出作為參考。

第二次提示執行free命令的時候,我們已經通過mmap分配了100M的內存,此時發現free命令輸出內存消耗基本沒有變化。

第三次提示執行free命令的時候,我們對于分配的匿名頁面進行了讀操作,此時發現free命令輸出內存消耗頁基本沒有變化, 這基本上會顛覆我們的認知。

第四次提示執行free命令的時候,我們對于分配的匿名頁面進行了寫操作,此時發現free命令輸出內存消耗大概為100M。

2.內核原理

下面我們從Linux內核的層面來解析發生以上神奇現象的原理。

2.1 mmap的內存消耗

mmap申請匿名頁的時候,只是申請了虛擬內存(通過vm_area_struct結構來描述,如描述虛擬內存區域的地址范圍、訪問權限等,以下簡稱vma),實際的物理內存并沒有申請(除了用于管理虛擬內存區域的vma等結構內存的申請),當前虛擬內存和物理內存并沒有建立頁表映射關系,而真正的申請的匿名頁所對應的物理頁在實際訪問的時候按需分配獲得,所以此時我們看不到內存的消耗情況。

2.2 第一次讀匿名頁的內存消耗

通過mmap申請完虛擬內存之后,進程就可以按照之前申請vma的訪問權限進行訪問,第一發生讀訪問,這個時候由于虛擬內存和物理內存并沒有建立頁表映射關系,通過虛擬地址并不能查找到物理內存,所以會發生處理器的異常,最終分析是因為數據訪問異常導致,就由處理器架構相關的代碼進入了我們通用的缺頁異常處理例程中。

缺頁異常調用鏈如下: 

  1. "mm/memory.c" 
  2. 處理器架構相關異常處理代碼  
  3. -> handle_mm_fault  
  4.     -> __handle_mm_fault  
  5.         -> handle_pte_fault  
  6.             ->  if (!vmf->pte) {   ------------------- 1  
  7.                      if (vma_is_anonymous(vmf->vma))  ------------------- 2  
  8.                              return do_anonymous_page(vmf);   ------------------- 3 

缺頁異常進入handle_pte_fault后,在1標簽代碼處,來判斷訪問的虛擬內存頁的頁表項是否為空,為空說明這個這個虛擬頁沒有和物理頁建立映射關系。然后在2標簽代碼處判斷是否為匿名頁缺頁異常(實際上是判斷是否為私有的匿名頁,當前當前示例代碼場景申請的為私有匿名頁面)。在3標簽代碼處,進行真正的私有匿名頁缺頁異常處理。

下面主要看下第一次讀匿名頁的處理: 

  1. do_anonymous_page  
  2. ->pte_alloc(vma->vm_mm, vmf->pmd)   ------------------- 1  
  3. ->/* Use the zero-page for reads */  
  4. if (!(vmf->flags & FAULT_FLAG_WRITE) &&     ------------------- 2  
  5.                 !mm_forbids_zeropage(vma->vm_mm)) { ------------------- 3  
  6.         entry = pte_mkspecial(pfn_pte(my_zero_pfn(vmf->address),  
  7.                                         vma->vm_page_prot));  ------------------- 4  
  8.         vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,  
  9.                         vmf->address, &vmf->ptl);  ------------------- 5   
  10.           ...  
  11.         goto setpte; 
  12.  
  13. ->  page = alloc_zeroed_user_highpage_movable(vma, vmf->address); ------------------- 6  
  14. -> entry = mk_pte(page, vma->vm_page_prot);  ------------------- 7  
  15.  entry = pte_sw_mkyoung(entry); ------------------- 8  
  16.  if (vma->vm_flags & VM_WRITE)  
  17.          entry = pte_mkwrite(pte_mkdirty(entry));  ------------------- 9  
  18.  vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address,  
  19.                  &vmf->ptl); ------------------- 10               
  20.   ->set_pte_at(vma->vm_mm, vmf->address, vmf->pte, entry);  ------------------- 11 

1標簽處:判斷虛擬地址對應的pmd表項是否為空,為空來分配直接頁表設置到pmd表項中。

2標簽處:判斷是否是進行讀訪問。

3標簽處:判斷是否沒有禁止0頁。

4標簽處:就是對于沒有禁止0頁的匿名頁讀訪問設置頁表,這里通過0頁的頁幀號和mmap映射時指定的訪問權限組合頁表項的值。

5標簽處:通過發生缺頁的虛擬地址來計算出頁表項的地址保存在 vmf->pte。

最11標簽處:將4標簽初組合出的頁表項的值寫入到5標簽初計算出的頁表項中。

以上分析可知:對于私有的匿名頁,第一次讀訪問的時候都會發生缺頁異常,然后通過頁表映射0頁,這個0頁沒有什么特殊之處,只不過它是在系統啟動過程中初始化好的一塊內容全為0的頁面,這樣做可以為進程分配了內存只進行讀訪問節省大量物理內存。

2.3 第一次寫匿名頁的內存消耗

大家可以將示例代碼中,讀訪問屏蔽掉只進行寫訪問,觀察內存消耗。

這個時候發生缺頁異常時,不會在走2 3 4 5 便簽處代碼,而在6處分配了一個物理頁面,在7 8 9組合頁表項的值, 10處計算出頁表項的地址,最后把組合的值設置到頁表項中。

需要注意第9處,如果是寫訪問會設置頁表項的可寫標志位。

以上分析可知:對于私有的匿名頁,第一次寫訪問的時候都會發生缺頁異常,會真正分配一個物理頁面,然后將虛擬頁面通過頁面映射到物理頁面,所以我們能觀察到寫之后發生了大量內存消耗。

2.4 第一次讀然后寫匿名頁的內存消耗

這種場景就是示例代碼中所做的實驗,可以看到讀的時候基本上沒有內存消耗,寫的時候發生了大量內存消耗。

關于第一次讀,上面已經做過解釋,下面主要看讀完之后的頁面發生寫訪問的情況。

2.4.1 從mmap說起

實際上,對于一個私有的內存映射,在mmap的時候為頁表映射準備訪問權限的時候并不是給予所有的權限,而是把可寫屬性去掉了。

我們可以從源代碼找到答案: 

  1. "mm/mmap.c"  
  2. do_mmap  
  3. ->mmap_region  
  4.     ->vma_set_page_prot(vma)  
  5.         ->vm_page_prot = vm_pgprot_modify(vma->vm_page_prot, vm_flags);  ---------1  
  6.             ->pgprot_modify(oldprot, vm_get_page_prot(vm_flags))  
  7.         ->WRITE_ONCE(vma->vm_page_prot, vm_page_prot);  ---------------2     
  8.   /* description of effects of mapping type and prot in current implementation.  
  9.   * this is due to the limited x86 page protection hardware.  The expected  
  10.   * behavior is in parens:  
  11.   *  
  12.   * map_type     prot  
  13.   *              PROT_NONE       PROT_READ       PROT_WRITE      PROT_EXEC  
  14.   * MAP_SHARED   r: (no) no      r: (yes) yes    r: (no) yes     r: (no) yes  
  15.   *              w: (no) no      w: (no) no      w: (yes) yes    w: (no) no  
  16.   *              x: (no) no      x: (no) yes     x: (no) yes     x: (yes) yes 
  17.   *  
  18.   * MAP_PRIVATE  r: (no) no      r: (yes) yes    r: (no) yes     r: (no) yes  
  19.   *              w: (no) no      w: (no) no      w: (copy) copy  w: (no) no  
  20.   *              x: (no) no      x: (no) yes     x: (no) yes     x: (yes) yes  
  21.   */  
  22. ->vm_get_page_prot     
  23.   pgprot_t protection_map[16] __ro_after_init = {  
  24.         __P000, __P001, __P010, __P011, __P100, __P101, __P110, __P111,  
  25.         __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111  
  26. }; 

對于__Pxxx,  最后一個x表示vma屬性是否可讀,倒數第二個x表示vma屬性是否可寫,P后面的x表示是否可執行。

1標簽處根據mmap傳遞的訪問權限來構造最終的訪問權限標識。

2標簽處將構造好的訪問權限標識記錄到vma->vm_page_prot中,供缺頁異常設置頁表使用。

注釋中已經做了詳細的解釋,具體頁表屬性如何表示由各自的處理器架構相關代碼來做(eg: 對于x86架構 #define __P111  PAGE_COPY_EXEC),我們只需要知道:無論我們想讓vma具備那些屬性組合,都會屏蔽掉寫屬性,具體可以查看相關的處理器架構實現。

所以,再次回到缺頁異常處理代碼中。在2.2小節的4標簽處,使用mmap設置好的頁表訪問權限設置頁表屬性,當前場景我們知道,mmap中指定為私有的可讀可寫屬性,而頁表中只是設置為了只讀屬性。

2.4.2 寫時復制的觸發

讀訪問將虛擬頁以只讀的方式映射到了0頁,當再次發生寫操作時,就會再次觸數據訪問異常,最終進入缺頁異常處理例程中。

下面給出調用鏈: 

  1. "mm/memory.c"  
  2. handle_pte_fault  
  3. ->if (vmf->flags & FAULT_FLAG_WRITE) {  -----------1  
  4.         if (!pte_write(entry)) -----------2  
  5.                 return do_wp_page(vmf); -----------3 

可以看到最終也是在handle_pte_fault中處理:在1標簽處判斷是否為寫訪問。在2標簽處判斷頁表項的屬性是否是只讀。在3標簽處進行實際的寫時復制處理。

以上分析可知:發生寫訪問操作時,如果vma可寫,但是頁表屬性標識不可寫(只讀),會發生寫時復制缺頁異常,對于當前場景的0頁的寫訪問就是如此,在do_wp_page中會重新分配物理頁面映射到虛擬頁面,然后頁表設置為可寫屬性,就完成了缺頁處理。

3.總結

1)mmap分配私有匿名內存時,會設置vma的vm_page_prot成員,去除掉頁表的寫訪問標識。

2)第一次讀匿名頁時,對于可讀可寫的vma,虛擬頁會以只讀的方式映射到0頁。

3)第一次寫匿名頁時,對于可讀可寫的vma,會申請物理頁面,虛擬頁以可讀可寫的方式映射到此物理頁。

4)第一次讀匿名頁后,然后寫匿名頁,先只讀方式映射到0頁,然后發生寫時復制,分配物理頁,虛擬頁以可讀可寫的方式映射到此物理頁。

可以發現,訪問匿名頁面時發生的“化學反應”并不是那么的簡單,其中會涉及mmap的映射原則,0頁的映射,匿名頁面的處理,寫時復制的處理等等,而且讀寫順序不一樣,產生的結果也會不一樣,大家可以結合內核源代碼進行分析,希望對大家理解匿名頁缺頁異常有所幫助。 

 

責任編輯:龐桂玉 來源: 良許Linux
相關推薦

2024-02-29 16:51:36

GenAI運營供應鏈

2019-07-17 15:07:06

物聯網網絡安全技術

2015-11-13 10:35:05

大數據醫院信息化WOT

2018-10-18 14:37:01

國際貿易AI反應

2020-08-28 15:39:26

谷歌量子計算開發者

2019-07-08 08:54:38

5G網絡區塊鏈物聯網設備

2021-04-19 11:25:22

智能制造

2018-12-17 06:02:21

物聯網設備物聯網產業物聯網

2018-01-12 16:02:43

ETC

2020-08-21 18:47:25

阿里云釘釘IaaS

2023-05-31 07:27:54

筆記本電池單元

2023-12-09 15:21:47

模型分子

2021-04-20 19:15:51

瀏覽器網絡URL

2016-10-13 16:47:14

2019-03-19 07:32:32

華為生態大會智能攝像機

2011-03-04 15:38:54

Vsftpd

2010-03-04 14:44:18

2023-08-29 16:26:20

Linux命令行
點贊
收藏

51CTO技術棧公眾號

91福利在线免费| 亚洲成人一二三区| 色999日韩| 精品国产百合女同互慰| 欧美视频第一区| 男人资源在线播放| www.视频一区| 国产精品羞羞答答| 日本一区二区欧美| 欧美电影《睫毛膏》| 亚洲黄色www网站| 欧美日韩中文不卡| 阿v视频在线观看| 国产精品久久久99| 蜜桃导航-精品导航| 国产露脸国语对白在线| 中文日韩欧美| 超薄丝袜一区二区| 精品国产成人亚洲午夜福利| 精品一区91| 在线免费精品视频| 国产精品无码免费专区午夜| 国产中文在线观看| a在线播放不卡| 91久久久久久久久久久| av手机天堂网| 国产精品毛片在线| 久久久久久久久久av| 午夜国产小视频| 免费国产自久久久久三四区久久| 欧美成人精品高清在线播放 | 国产一区二区三区自拍| 在线视频亚洲欧美| 日本少妇高潮喷水xxxxxxx| 99久久免费精品国产72精品九九| 欧美日韩高清在线| 国产三级日本三级在线播放| 久草在线中文最新视频| 一级日本不卡的影视| 亚洲最新在线| 精品视频一二区| 97久久精品人人爽人人爽蜜臀| 91中文字精品一区二区| 国产精品羞羞答答在线| 麻豆成人久久精品二区三区红 | 日韩精品一区二区三区四| 3p在线观看| 国产精品拍天天在线| 欧美资源一区| 久香视频在线观看| 久久久一区二区| 欧美一级爱爱| 国产一区电影| 中文字幕 久热精品 视频在线| 欧美日韩一区二区三区在线视频| 日韩二区三区| 国产日韩亚洲欧美综合| 日韩精品一区二区三区外面| 国产在线黄色| 亚洲国产高清不卡| 亚洲 国产 欧美一区| 91官网在线| 国产精品成人免费在线| 亚洲精品偷拍视频| 最新国产露脸在线观看| 一区二区三区丝袜| www.日本少妇| 97超碰人人干| 亚洲国产免费看| 97av在线视频免费播放| 欧美三级一区二区三区| 久热re这里精品视频在线6| 国产成人亚洲综合青青| 一区二区三区精| 国产一区二区三区高清播放| 操一操视频一区| 午夜福利一区二区三区| 国产三级一区二区| 中国一级黄色录像| 久草成色在线| 日韩欧美成人网| 色噜噜狠狠永久免费| 精品入口麻豆88视频| 精品国产乱码久久久久久浪潮| 中文字幕在线永久| 成人精品影视| 欧美寡妇偷汉性猛交| 91美女免费看| 激情综合网av| 久久99精品久久久久久秒播放器| 国产色a在线| 一区二区三区影院| 免费大片在线观看| 99综合久久| 日韩精品免费一线在线观看| 日本裸体美女视频| 狼人精品一区二区三区在线 | 91黄在线观看| 欧美日韩影视| 亚洲精品成人a在线观看| 欧美日韩二三区| 电影91久久久| 亚洲欧美日韩久久久久久| 男的操女的网站| 免费日韩一区二区| 超碰在线97av| 在线中文资源天堂| 欧美日韩亚洲系列| 韩国三级与黑人| 日韩欧美三级| 欧美中文在线字幕| 性欧美8khd高清极品| 中文字幕精品一区二区三区精品| 免费看毛片的网址| 2020国产精品小视频| 亚洲免费小视频| 久久久久无码国产精品| 激情久久五月天| 日本成人三级电影网站| 91桃色在线观看| 欧美一区二区啪啪| 天天操天天摸天天舔| 亚洲免费影院| 国产日本一区二区三区| 91一区二区三区在线| 欧美日韩一区精品| 亚洲人成人无码网www国产| 99精品国产福利在线观看免费| 91中文在线视频| 1024视频在线| 欧美专区在线观看一区| 成人午夜剧场视频网站| 99精品99| 国产精品嫩草影院精东| av中文字幕不卡| 国产美女视频免费| jvid一区二区三区| 亚洲美女精品久久| 激情五月色婷婷| 成人综合在线观看| 免费看污污视频| 91麻豆精品国产综合久久久| 中文字幕九色91在线| 精品久久久久久久久久久国产字幕| 99久久精品99国产精品| 精品视频在线观看一区| 高清精品xnxxcom| 久久久免费观看| 成人爽a毛片一区二区| 亚洲激情一二三区| 日本少妇一区二区三区| 亚洲国产精品日韩专区av有中文| 91久久久精品| 日韩激情美女| 精品久久久影院| 久青草视频在线观看| 国产精品 日产精品 欧美精品| 亚洲欧美一二三| 在线播放一区二区精品视频| 毛片精品免费在线观看| 国产福利资源在线| 偷拍一区二区三区四区| asian性开放少妇pics| 久久精品女人天堂| 视频一区二区综合| 亚洲ww精品| 欧美精品久久久久久久久| 午夜视频免费看| 色av成人天堂桃色av| 91精品国自产在线| 国内一区二区在线| 成人免费在线网| 免费看成人哺乳视频网站| 国产精品久久久亚洲| av网址在线免费观看| 精品国产伦一区二区三区观看体验| 日韩 欧美 综合| 国产日韩av一区| 亚洲一区二区图片| 香蕉久久夜色精品| 中文字幕久精品免| 国产图片一区| 国产女人18毛片水18精品| 在线看女人毛片| 亚洲欧美激情一区| 国产精品亚洲欧美在线播放| 性欧美疯狂xxxxbbbb| 国产又黄又粗的视频| 国产精品一区二区三区乱码| 无码人妻丰满熟妇区96| 三级电影一区| 精品卡一卡二| 精品国产欧美| 欧美中文在线字幕| 色女人在线视频| 亚洲香蕉成视频在线观看| 国产99999| 在线观看视频欧美| 国产精久久久久久| 国产精品视频第一区| 黄色国产在线视频| 久久精品久久久精品美女| 少妇无码av无码专区在线观看| 第九色区aⅴ天堂久久香| 成人黄视频免费| 欧美性www| 日本欧美黄网站| 欧美videossex另类| 色妞色视频一区二区三区四区| 天堂v在线观看| 欧美日韩免费观看一区二区三区| 日韩欧美激情视频| 亚洲男人都懂的| 丰满的亚洲女人毛茸茸| 99这里都是精品| 伊人精品视频在线观看| 日产国产高清一区二区三区| 久久综合色视频| 欧美日韩国产探花| 乱子伦一区二区| 久久一区91| 日韩av电影免费观看| 97视频一区| 亚洲一区二区中文| 亚洲欧洲一二区| 国产精品视频自在线| 欧美大片免费高清观看| 韩国精品久久久999| 人人超在线公开视频| 免费不卡欧美自拍视频| 日本综合在线| 在线成人中文字幕| 国产色a在线| 伊人精品在线观看| 男生女生差差差的视频在线观看| 亚洲激情视频网站| 黑人精品一区二区| 精品国产欧美一区二区| 草草视频在线播放| 日韩美女视频在线| 亚洲精品一区二区三区蜜桃| 日韩三级中文字幕| av中文字幕免费| 日韩一级二级三级| a天堂视频在线| 欧美成人欧美edvon| 丰满肉肉bbwwbbww| 亚洲国产成人精品久久| 无码国产精品96久久久久| 亚洲精品按摩视频| 三级视频在线| 亚洲天堂av在线播放| 国产三级视频在线看| 在线a欧美视频| 91大神xh98hx在线播放| 精品国内亚洲在观看18黄| 操你啦视频在线| 欧美黄色性视频| 国产在线天堂www网在线观看| 日本sm极度另类视频| 全球最大av网站久久| 国产日韩欧美夫妻视频在线观看 | 亚洲色图欧美另类| 97se亚洲国产综合自在线| 亚洲精品乱码久久久久久久久久久久| 国产亚洲成年网址在线观看| 天海翼在线视频| 性欧美疯狂xxxxbbbb| 亚洲av综合一区| 在线播放/欧美激情| 亚洲精品人妻无码| 亚洲人成在线观看网站高清| av在线之家电影网站| 欧美大胆在线视频| 丝袜老师在线| 国产美女搞久久| 国产精品巨作av| 日本视频一区在线观看| 国产韩日影视精品| 一二三四视频社区在线| 日本中文在线一区| 欧美成人精品一区二区综合免费| 26uuu亚洲综合色欧美| 国产福利在线导航| 午夜精品成人在线| 中文字幕一区二区在线视频| 日韩欧美国产三级电影视频| 涩涩视频在线观看免费| 久久精品电影网站| 亚洲欧洲日本韩国| 91gao视频| 国产乱码精品一区二区亚洲 | 日韩欧美精品三级| 极品白浆推特女神在线观看| 欧美精品一区在线播放| 午夜av成人| 激情小说综合区| 亚洲人metart人体| 亚洲 中文字幕 日韩 无码| 成人免费视频网站在线观看| 国产午夜精品福利视频| 五月天婷婷综合| 国产999久久久| 在线观看日韩av| 国产在线精彩视频| 99久久久精品免费观看国产| 日韩欧美一区二区三区在线视频| 国产美女主播在线播放| 国产一区二区精品久久99| 人人妻人人澡人人爽| 福利一区福利二区微拍刺激| 国产成人久久精品77777综合| 在线成人激情黄色| 波多野结衣久久精品| 成人午夜影院在线观看| 亚洲一区在线| 色乱码一区二区三区在线| xf在线a精品一区二区视频网站| 欧美黄色一级网站| 欧美精品乱人伦久久久久久| 成人免费一区二区三区视频网站| 69久久夜色精品国产69乱青草| 亚州一区二区| 日韩精品一区二区三区电影| 久久精品理论片| 手机看片国产日韩| 欧美在线观看一二区| 欧美女同网站| 茄子视频成人在线| 天堂99x99es久久精品免费| 妺妺窝人体色777777| 成人亚洲一区二区一| 青春草免费视频| 日韩丝袜美女视频| 新版中文在线官网| 亚洲一区二区久久久久久久| 香蕉av一区二区| 欧美又黄又嫩大片a级| 亚洲欧洲精品一区二区三区不卡| 在线观看亚洲一区二区| 日日骚久久av| 免费视频观看成人| 一区二区三区不卡在线| 久久国产麻豆精品| 国产91在线播放九色| 欧美高清一级片在线| 黄色av电影在线播放| 91中文字幕在线观看| 国产综合激情| 亚洲av永久无码精品| 黑人极品videos精品欧美裸| 青青草在线播放| 国产精品日韩在线| 偷偷www综合久久久久久久| 手机在线视频一区| 亚洲午夜久久久久久久久久久 | 视频精品国内| 久久久亚洲国产精品| 久久色成人在线| 中文字幕 亚洲视频| 久久精品小视频| 77成人影视| 精品www久久久久奶水| 国产精品―色哟哟| 亚洲av少妇一区二区在线观看| 久久久久久久久网站| 九色精品国产蝌蚪| 777视频在线| 亚洲一区免费在线观看| 亚洲色欧美另类| 国产精品嫩草影院久久久| 亚洲成人日韩| 亚洲精品乱码久久久久久久| 欧美视频一区二| 少女频道在线观看高清| 麻豆av一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 日韩激情一区二区三区| 国产一区二区美女视频| 欧美国产亚洲精品| 日本精品久久久久中文字幕| 亚洲欧洲精品一区二区三区 | 91蜜桃视频在线| 中文字幕av资源| 欧美精品电影在线| 日韩精品久久| 亚洲精品乱码久久久久久蜜桃图片| 一本大道久久a久久精二百| www红色一片_亚洲成a人片在线观看_| 狠狠干一区二区| 国产一区二区在线免费观看| 国产成人免费看| 欧美另类老女人| 日本成人小视频| 老司机午夜免费福利| 欧美日韩亚洲丝袜制服| 操人在线观看| 强开小嫩苞一区二区三区网站 | 成人毛片18女人毛片| 久久久av亚洲男天堂|