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

Linux用戶空間與內核地址空間詳解

系統 Linux
Linux 操作系統和驅動程序運行在內核空間,應用程序運行在用戶空間,兩者不能簡單地使用指針傳遞數據,因為Linux使用的虛擬內存機制,用戶空間的數據可能被換出,當內核空間使用用戶空間指針時,對應的數據可能不在內存中。

[[374528]]

 Linux 操作系統和驅動程序運行在內核空間,應用程序運行在用戶空間,兩者不能簡單地使用指針傳遞數據,因為Linux使用的虛擬內存機制,用戶空間的數據可能被換出,當內核空間使用用戶空間指針時,對應的數據可能不在內存中。

Linux內核地址映射模型

x86 CPU采用了段頁式地址映射模型。進程代碼中的地址為邏輯地址,經過段頁式地址映射后,才真正訪問物理內存。

段頁式機制如下圖。


linux內核地址空間劃分

通常32位Linux內核地址空間劃分0~3G為用戶空間,3~4G為內核空間。注意這里是32位內核地址空間劃分,64位內核地址空間劃分是不同的。


Linux內核高端內存的由來

當內核模塊代碼或線程訪問內存時,代碼中的內存地址都為邏輯地址,而對應到真正的物理內存地址,需要地址一對一的映射,如邏輯地址0xc0000003對應的物理地址為0×3,0xc0000004對應的物理地址為0×4,… …,邏輯地址與物理地址對應的關系為

物理地址 = 邏輯地址 – 0xC0000000


假設按照上述簡單的地址映射關系,那么內核邏輯地址空間訪問為0xc0000000 ~ 0xffffffff,那么對應的物理內存范圍就為0×0 ~ 0×40000000,即只能訪問1G物理內存。若機器中安裝8G物理內存,那么內核就只能訪問前1G物理內存,后面7G物理內存將會無法訪問,因為內核 的地址空間已經全部映射到物理內存地址范圍0×0 ~ 0×40000000。即使安裝了8G物理內存,那么物理地址為0×40000001的內存,內核該怎么去訪問呢?代碼中必須要有內存邏輯地址 的,0xc0000000 ~ 0xffffffff的地址空間已經被用完了,所以無法訪問物理地址0×40000000以后的內存。

顯 然不能將內核地址空間0xc0000000 ~ 0xfffffff全部用來簡單的地址映射。因此x86架構中將內核地址空間劃分三部分:ZONE_DMA、ZONE_NORMAL和 ZONE_HIGHMEM。ZONE_HIGHMEM即為高端內存,這就是內存高端內存概念的由來。

在x86結構中,三種類型的區域如下:

ZONE_DMA 內存開始的16MB

ZONE_NORMAL 16MB~896MB

ZONE_HIGHMEM 896MB ~ 結束


Linux內核高端內存的理解

前面我們解釋了高端內存的由來。Linux將內核地址空間劃分為三部分ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM,高端內存HIGH_MEM地址空間范圍為 0xF8000000 ~ 0xFFFFFFFF(896MB~1024MB)。那么如內核是如何借助128MB高端內存地址空間是如何實現訪問可以所有物理內存?

當內核想訪問高于896MB物理地址內存時,從0xF8000000 ~ 0xFFFFFFFF地址空間范圍內找一段相應大小空閑的邏輯地址空間,借用一會。借用這段邏輯地址空間,建立映射到想訪問的那段物理內存(即填充內核PTE頁面表),臨時用一會,用完后歸還。這樣別人也可以借用這段地址空間訪問其他物理內存,實現了使用有限的地址空間,訪問所有所有物理內存。如下圖。


例 如內核想訪問2G開始的一段大小為1MB的物理內存,即物理地址范圍為0×80000000 ~ 0x800FFFFF。訪問之前先找到一段1MB大小的空閑地址空間,假設找到的空閑地址空間為0xF8700000 ~ 0xF87FFFFF,用這1MB的邏輯地址空間映射到物理地址空間0×80000000 ~ 0x800FFFFF的內存。映射關系如下:


當內核訪問完0×80000000 ~ 0x800FFFFF物理內存后,就將0xF8700000 ~ 0xF87FFFFF內核線性空間釋放。這樣其他進程或代碼也可以使用0xF8700000 ~ 0xF87FFFFF這段地址訪問其他物理內存。

從上面的描述,我們可以知道高端內存的最基本思想:借一段地址空間,建立臨時地址映射,用完后釋放,達到這段地址空間可以循環使用,訪問所有物理內存。

看到這里,不禁有人會問:萬一有內核進程或模塊一直占用某段邏輯地址空間不釋放,怎么辦?若真的出現的這種情況,則內核的高端內存地址空間越來越緊張,若都被占用不釋放,則沒有建立映射到物理內存都無法訪問了。

在 香港尖沙咀有些寫字樓,洗手間很少且有門鎖的。客戶要去洗手間的話,可以向前臺拿鑰匙,方便完后,把鑰匙歸還到前臺。這樣雖然只有一個洗 手間,但可以滿足所有客戶去洗手間的需求。要是某個客戶一直占用洗手間、鑰匙不歸還,那么其他客戶都無法上洗手間了。Linux內核高端內存管理的思想類 似。

Linux內核高端內存的劃分

內核將高端內存劃分為3部分:VMALLOC_START~VMALLOC_END、KMAP_BASE~FIXADDR_START和FIXADDR_START~4G。


對 于高端內存,可以通過 alloc_page() 或者其它函數獲得對應的 page,但是要想訪問實際物理內存,還得把 page 轉為線性地址才行(為什么?想想 MMU 是如何訪問物理內存的),也就是說,我們需要為高端內存對應的 page 找一個線性空間,這個過程稱為高端內存映射。

對應高端內存的3部分,高端內存映射有三種方式:

映射到”內核動態映射空間”(noncontiguous memory allocation)

這種方式很簡單,因為通過 vmalloc() ,在”內核動態映射空間”申請內存的時候,就可能從高端內存獲得頁面(參看 vmalloc 的實現),因此說高端內存有可能映射到”內核動態映射空間”中。

持久內核映射(permanent kernel mapping)

如果是通過 alloc_page() 獲得了高端內存對應的 page,如何給它找個線性空間?

內核專門為此留出一塊線性空間,從 PKMAP_BASE 到 FIXADDR_START ,用于映射高端內存。在 2.6內核上,這個地址范圍是 4G-8M 到 4G-4M 之間。這個空間起叫”內核永久映射空間”或者”永久內核映射空間”。這個空間和其它空間使用同樣的頁目錄表,對于內核來說,就是 swapper_pg_dir,對普通進程來說,通過 CR3 寄存器指向。通常情況下,這個空間是 4M 大小,因此僅僅需要一個頁表即可,內核通過來 pkmap_page_table 尋找這個頁表。通過 kmap(),可以把一個 page 映射到這個空間來。由于這個空間是 4M 大小,最多能同時映射 1024 個 page。因此,對于不使用的的 page,及應該時從這個空間釋放掉(也就是解除映射關系),通過 kunmap() ,可以把一個 page 對應的線性地址從這個空間釋放出來。

臨時映射(temporary kernel mapping)

內核在 FIXADDR_START 到 FIXADDR_TOP 之間保留了一些線性空間用于特殊需求。這個空間稱為”固定映射空間”在這個空間中,有一部分用于高端內存的臨時映射。

這塊空間具有如下特點:

(1)每個 CPU 占用一塊空間

(2)在每個 CPU 占用的那塊空間中,又分為多個小空間,每個小空間大小是 1 個 page,每個小空間用于一個目的,這些目的定義在 kmap_types.h 中的 km_type 中。

當要進行一次臨時映射的時候,需要指定映射的目的,根據映射目的,可以找到對應的小空間,然后把這個空間的地址作為映射地址。這意味著一次臨時映射會導致以前的映射被覆蓋。通過 kmap_atomic() 可實現臨時映射。

常見問題:

1、用戶空間(進程)是否有高端內存概念?

用戶進程沒有高端內存概念。只有在內核空間才存在高端內存。用戶進程最多只可以訪問3G物理內存,而內核進程可以訪問所有物理內存。

2、64位內核中有高端內存嗎?

目前現實中,64位Linux內核不存在高端內存,因為64位內核可以支持超過512GB內存。若機器安裝的物理內存超過內核地址空間范圍,就會存在高端內存。

3、用戶進程能訪問多少物理內存?內核代碼能訪問多少物理內存?

32位系統用戶進程最大可以訪問3GB,內核代碼可以訪問所有物理內存。

64位系統用戶進程最大可以訪問超過512GB,內核代碼可以訪問所有物理內存。

4、高端內存和物理地址、邏輯地址、線性地址的關系?

高端內存只和邏輯地址有關系,和邏輯地址、物理地址沒有直接關系。

5、為什么不把所有的地址空間都分配給內核?

若把所有地址空間都給內存,那么用戶進程怎么使用內存?怎么保證內核使用內存和用戶進程不起沖突?

(1)讓我們忽略Linux對段式內存映射的支持。在保護模式下,我們知道無論CPU運行于用戶態還是核心態,CPU執行程序所訪問的地址都是虛擬地址,MMU 必須通過讀取控制寄存器CR3中的值作為當前頁面目錄的指針,進而根據分頁內存映射機制(參看相關文檔)將該虛擬地址轉換為真正的物理地址才能讓CPU真 正的訪問到物理地址。

(2)對于32位的Linux,其每一個進程都有4G的尋址空間,但當一個進程訪問其虛擬內存空間中的某個地址時又是怎樣實現不與其它進程的虛擬空間混淆 的呢?每個進程都有其自身的頁面目錄PGD,Linux將該目錄的指針存放在與進程對應的內存結構task_struct.(struct mm_struct)mm->pgd中。每當一個進程被調度(schedule())即將進入運行態時,Linux內核都要用該進程的PGD指針設 置CR3(switch_mm())。

(3)當創建一個新的進程時,都要為新進程創建一個新的頁面目錄PGD,并從內核的頁面目錄swapper_pg_dir中復制內核區間頁面目錄項至新建進程頁面目錄PGD的相應位置,具體過程如下:

do_fork() --> copy_mm() --> mm_init() --> pgd_alloc() --> set_pgd_fast() --> get_pgd_slow() --> memcpy(&PGD + USER_PTRS_PER_PGD, swapper_pg_dir + USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t))

這樣一來,每個進程的頁面目錄就分成了兩部分,第一部分為“用戶空間”,用來映射其整個進程空間(0x0000 0000-0xBFFF FFFF)即3G字節的虛擬地址;第二部分為“系統空間”,用來映射(0xC000 0000-0xFFFF FFFF)1G字節的虛擬地址。可以看出Linux系統中每個進程的頁面目錄的第二部分是相同的,所以從進程的角度來看,每個進程有4G字節的虛擬空間, 較低的3G字節是自己的用戶空間,最高的1G字節則為與所有進程以及內核共享的系統空間。

(4)現在假設我們有如下一個情景:

在進程A中通過系統調用sethostname(const char *name,seze_t len)設置計算機在網絡中的“主機名”.

在該情景中我們勢必涉及到從用戶空間向內核空間傳遞數據的問題,name是用戶空間中的地址,它要通過系統調用設置到內核中的某個地址中。讓我們看看這個 過程中的一些細節問題:系統調用的具體實現是將系統調用的參數依次存入寄存器ebx,ecx,edx,esi,edi(最多5個參數,該情景有兩個 name和len),接著將系統調用號存入寄存器eax,然后通過中斷指令“int 80”使進程A進入系統空間。由于進程的CPU運行級別小于等于為系統調用設置的陷阱門的準入級別3,所以可以暢通無阻的進入系統空間去執行為int 80設置的函數指針system_call()。由于system_call()屬于內核空間,其運行級別DPL為0,CPU要將堆棧切換到內核堆棧,即 進程A的系統空間堆棧。我們知道內核為新建進程創建task_struct結構時,共分配了兩個連續的頁面,即8K的大小,并將底部約1k的大小用于 task_struct(如#define alloc_task_struct() ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))),而其余部分內存用于系統空間的堆棧空間,即當從用戶空間轉入系統空間時,堆棧指針 esp變成了(alloc_task_struct()+8192),這也是為什么系統空間通常用宏定義current(參看其實現)獲取當前進程的 task_struct地址的原因。每次在進程從用戶空間進入系統空間之初,系統堆棧就已經被依次壓入用戶堆棧SS、用戶堆棧指針ESP、EFLAGS、 用戶空間CS、EIP,接著system_call()將eax壓入,再接著調用SAVE_ALL依次壓入ES、DS、EAX、EBP、EDI、ESI、 EDX、ECX、EBX,然后調用sys_call_table+4*%EAX,本情景為sys_sethostname()。

(5)在sys_sethostname()中,經過一些保護考慮后,調用copy_from_user(to,from,n),其中to指向內核空間 system_utsname.nodename,譬如0xE625A000,from指向用戶空間譬如0x8010FE00。現在進程A進入了內核,在 系統空間中運行,MMU根據其PGD將虛擬地址完成到物理地址的映射,最終完成從用戶空間到系統空間數據的復制。準備復制之前內核先要確定用戶空間地址和 長度的合法性,至于從該用戶空間地址開始的某個長度的整個區間是否已經映射并不去檢查,如果區間內某個地址未映射或讀寫權限等問題出現時,則視為壞地址, 就產生一個頁面異常,讓頁面異常服務程序處理。過程如 下:copy_from_user()->generic_copy_from_user()->access_ok()+__copy_user_zeroing().

(6)小結:

*進程尋址空間0~4G

*進程在用戶態只能訪問0~3G,只有進入內核態才能訪問3G~4G

*進程通過系統調用進入內核態

*每個進程虛擬空間的3G~4G部分是相同的

*進程從用戶態進入內核態不會引起CR3的改變但會引起堆棧的改變

Linux 簡化了分段機制,使得虛擬地址與線性地址總是一致,因此,Linux的虛擬地址空間也為0~4G。Linux內核將這4G字節的空間分為兩部分。將最高的 1G字節(從虛擬地址0xC0000000到0xFFFFFFFF),供內核使用,稱為“內核空間”。而將較低的3G字節(從虛擬地址 0x00000000到0xBFFFFFFF),供各個進程使用,稱為“用戶空間)。因為每個進程可以通過系統調用進入內核,因此,Linux內核由系統 內的所有進程共享。于是,從具體進程的角度來看,每個進程可以擁有4G字節的虛擬空間。

Linux使用兩級保護機制:0級供內核使用,3級供用戶程序使用。從圖中可以看出(這里無法表示圖),每個進程有各自的私有用戶空間(0~3G),這個空間對系統中的其他進程是不可見的。最高的1GB字節虛擬內核空間則為所有進程以及內核所共享。

1.虛擬內核空間到物理空間的映射

內核空間中存放的是內核代碼和數據,而進程的用戶空間中存放的是用戶程序的代碼和數據。不管是內核空間還是用戶空間,它們都處于虛擬空間中。讀者會問,系 統啟動時,內核的代碼和數據不是被裝入到物理內存嗎?它們為什么也處于虛擬內存中呢?這和編譯程序有關,后面我們通過具體討論就會明白這一點。

雖 然內核空間占據了每個虛擬空間中的最高1GB字節,但映射到物理內存卻總是從最低地址(0x00000000)開始。對內核空間來說,其地址映射是很簡單 的線性映射,0xC0000000就是物理地址與線性地址之間的位移量,在Linux代碼中就叫做PAGE_OFFSET。

我們來看一下在include/asm/i386/page.h中對內核空間中地址映射的說明及定義:

/*

* This handles the memory map.. We could make this a config

* option, but too many people screw it up, and too few need

* it.

*

* A __PAGE_OFFSET of 0xC0000000 means that the kernel has

* a virtual address space of one gigabyte, which limits the

* amount of physical memory you can use to about 950MB.

*

* If you want more physical memory than this then see the CONFIG_HIGHMEM4G

* and CONFIG_HIGHMEM64G options in the kernel configuration.

*/

#define __PAGE_OFFSET (0xC0000000)

……

#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)

#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)

#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))

源 代碼的注釋中說明,如果你的物理內存大于950MB,那么在編譯內核時就需要加CONFIG_HIGHMEM4G和CONFIG_HIGHMEM64G選 項,這種情況我們暫不考慮。如果物理內存小于950MB,則對于內核空間而言,給定一個虛地址x,其物理地址為“x- PAGE_OFFSET”,給定一個物理地址x,其虛地址為“x+ PAGE_OFFSET”。

這里再次說明,宏__pa()僅僅把一個內核空間的虛地址映射到物理地址,而決不適用于用戶空間,用戶空間的地址映射要復雜得多。

2.內核映像

在下面的描述中,我們把內核的代碼和數據就叫內核映像(kernel image)。當系統啟動時,Linux內核映像被安裝在物理地址0x00100000開始的地方,即1MB開始的區間(第1M留作它用)。然而,在正常 運行時, 整個內核映像應該在虛擬內核空間中,因此,連接程序在連接內核映像時,在所有的符號地址上加一個偏移量PAGE_OFFSET,這樣,內核映像在內核空間 的起始地址就為0xC0100000。

例如,進程的頁目錄PGD(屬于內核數據結構)就處于內核空間中。在進程切換時,要將寄存器CR3設置成指 向新進程的頁目錄PGD,而該目錄的起始地址在內核空間中是虛地址,但CR3所需要的是物理地址,這時候就要用__pa()進行地址轉換。在 mm_context.h中就有這么一行語句:

asm volatile(“movl %0,%%cr3”: :”r” (__pa(next->pgd));

這是一行嵌入式匯編代碼,其含義是將下一個進程的頁目錄起始地址next_pgd,通過__pa()轉換成物理地址,存放在某個寄存器中,然后用mov指令將其寫入CR3寄存器中。經過這行語句的處理,CR3就指向新進程next的頁目錄表PGD了

 

責任編輯:姜華 來源: 一口Linux
相關推薦

2021-03-22 11:43:07

Linux運維Linux系統

2021-01-14 09:37:20

內核空間用戶

2022-02-18 00:15:58

Linux指令CPU

2010-05-13 09:45:26

Linux地址空間

2017-08-24 11:00:56

Linux用戶空間內核空間

2009-12-07 09:31:23

Linux系統調用表地址

2016-08-10 12:52:31

2018-05-18 09:07:43

Linux內核內存

2009-11-24 17:20:48

Oracle查看用戶表

2012-05-21 17:02:19

Linux審計

2019-07-10 12:40:29

Linux虛擬地址空間物理地址空間

2009-09-07 09:20:34

2012-05-03 08:27:20

Linux進程

2022-06-16 10:02:50

地址空間重定位

2018-05-18 08:43:27

Linux內存空間

2009-10-22 13:06:00

Linux磁盤管理

2010-01-06 16:47:53

Linux內核

2011-10-28 15:50:45

C程序

2020-12-09 05:25:23

Linux內存進程

2019-01-29 10:10:09

Linux內存進程堆
點贊
收藏

51CTO技術棧公眾號

136国产福利精品导航网址应用| 九色视频在线观看免费播放| 欧美日本三区| 亚洲第一天堂av| 少妇人妻互换不带套| 欧美一区二区三区| 成人av第一页| 国产精品久久久久一区二区 | 亚洲av无码国产精品永久一区 | www.激情小说.com| 少妇av在线| 中文字幕免费不卡| 精品麻豆av| 国产三级三级在线观看| 国产精品日韩| 久久亚洲欧美日韩精品专区| 久久国产精品无码一级毛片| 国内精品视频| 欧美综合一区二区三区| 国产玉足脚交久久欧美| 日本中文字幕在线看| 91在线视频在线| 亚洲free性xxxx护士hd| 波多野结衣电影在线播放| 好吊视频一区二区三区四区| 色七七影院综合| 一级片手机在线观看| 一区二区三区四区视频免费观看| 欧美主播一区二区三区| 少妇高潮喷水久久久久久久久久| av毛片在线免费看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 天堂中文在线资源| 奇米影视777在线欧美电影观看| 色88888久久久久久影院按摩| 男女日批视频在线观看| 成人午夜在线影视| 中文字幕av一区二区三区高| 久久波多野结衣| 高h震动喷水双性1v1| 国产综合色产在线精品| 国产精品精品一区二区三区午夜版 | 69国产精品成人在线播放| 欧美成人免费看| 亚洲天天综合| 久久精品夜夜夜夜夜久久| 一级肉体全黄裸片| 国产精品欧美日韩一区| 日韩国产在线播放| 最新在线黄色网址| 秋霞蜜臀av久久电影网免费| 精品va天堂亚洲国产| 激情av中文字幕| 久久久精品区| 日韩精品专区在线影院观看| 91丨porny丨九色| 日本一区二区三区播放| 日韩一区二区三免费高清| 天天操天天干天天做| 996久久国产精品线观看| 91精品国产一区二区人妖| 中文字幕66页| 一区二区三区在线资源| 亚洲国产欧美一区二区丝袜黑人 | 中文字幕一区二区三区不卡在线| 亚洲欧洲一区二区福利| 免费高清完整在线观看| 亚洲丝袜美腿综合| 国产高清www| 香蕉伊大人中文在线观看| 色综合久久99| 在线观看日本一区二区| 午夜电影一区| 日韩精品免费综合视频在线播放| 香蕉网在线播放| 欧美伦理影院| 久久999免费视频| 成人精品在线看| 美腿丝袜在线亚洲一区 | 91人人澡人人爽人人精品| 欧美一级网址| 精品国产伦一区二区三区观看方式 | 丁香六月激情婷婷| 日韩欧美精品一区二区三区| 欧美在线观看18| 青娱乐国产精品视频| 另类ts人妖一区二区三区| 亚洲天堂男人天堂| 看免费黄色录像| 国产九九精品| 91久久久在线| 偷拍自拍在线视频| 亚洲视频每日更新| 色综合久久久久无码专区| jizz欧美| 亚洲精品久久久久久久久久久久| 69视频在线观看免费| 欧美日韩中文| 国产女人18毛片水18精品| 亚洲免费一级片| 亚洲国产精品成人综合色在线婷婷| 毛片在线视频观看| 91看片一区| 精品成人在线观看| 欧美日韩午夜视频| 久久久999| 动漫精品视频| 免费网站成人| 一本大道久久a久久精品综合| 想看黄色一级片| 免费视频亚洲| 欧美激情在线播放| 国产精品久久久久久久久毛片| 波多野结衣一区二区三区 | 日韩伦理在线观看| 日韩欧美国产一区二区| www.欧美com| 日韩精品免费一区二区三区| 77777亚洲午夜久久多人| 一区二区三区日| 国产欧美日韩另类一区| 男的插女的下面视频| 久久久久久久久成人| 色偷偷av一区二区三区乱| 69国产精品视频免费观看| 丁香网亚洲国际| 国产树林野战在线播放| 69堂精品视频在线播放| 亚洲美女免费精品视频在线观看| 波多野结衣爱爱视频| 日韩精品乱码av一区二区| 国产区一区二区| 俄罗斯一级**毛片在线播放| 在线播放91灌醉迷j高跟美女 | 国产精品wwwwww| 五月婷婷狠狠干| 亚洲国产日产av| 波多野吉衣在线视频| 欧美国产专区| 99在线高清视频在线播放| 国产一二区在线| 欧美乱熟臀69xxxxxx| 呻吟揉丰满对白91乃国产区| 日韩国产成人精品| 日韩电影免费观看在| 超碰一区二区| 国产一区二区三区在线看| 久久人妻免费视频| 久久免费精品国产久精品久久久久 | 国产精品一二三区在线观看| 蜜桃久久av| 色播五月综合| 巨大黑人极品videos精品| 日韩在线观看免费| 国产精品美女一区| 一区二区三区久久| 人妻换人妻a片爽麻豆| 99国产精品自拍| 欧美极品日韩| 国产成人精品一区二区三区在线 | 激情五月激情综合| 黄色日韩网站视频| 日韩一区二区高清视频| 久久综合社区| 国产成人高清激情视频在线观看 | 涩涩网站在线看| 欧美在线黄色| 韩日午夜在线资源一区二区| 亚洲1234区| 综合网中文字幕| 国产成人三级在线播放| 调教+趴+乳夹+国产+精品| 91精彩刺激对白露脸偷拍| 麻豆精品精品国产自在97香蕉| 视色,视色影院,视色影库,视色网| 日韩在线网址| 国产a∨精品一区二区三区不卡| p色视频免费在线观看| 日韩欧美中文字幕一区| 天码人妻一区二区三区在线看| 国产精品久久久久一区| 国产精品果冻传媒| 日韩高清在线观看| 国产高清不卡无码视频| 综合伊思人在钱三区| 成人国产精品久久久久久亚洲| 俺来俺也去www色在线观看| 亚洲人成人99网站| 午夜精品久久久久久久99老熟妇 | 最新中文字幕一区二区三区| 极品白嫩的小少妇| 老司机精品视频在线| 每日在线观看av| 999国产精品999久久久久久| 国产精品制服诱惑| 日本成人在线网站| 57pao国产精品一区| 日韩在线资源| 亚洲免费福利视频| av老司机久久| 狠狠色狠色综合曰曰| 色综合99久久久无码国产精品| 国产精品1区2区| 久久久久久久久久久久91| 亚洲一级影院| 宅男一区二区三区| 久久av中文| 国产精品久久久久久久免费大片 | 国产精品一区二区av| 韩国精品视频在线观看 | 亚洲 自拍 另类小说综合图区| 日韩av久操| 欧美日韩国产不卡在线看| 伊色综合久久之综合久久| 国产精品美女视频网站| 在线精品亚洲欧美日韩国产| 欧美韩国理论所午夜片917电影| 大地资源中文在线观看免费版| 亚洲精品大尺度| 成 人片 黄 色 大 片| 欧美日韩三级一区| 日日夜夜狠狠操| 红桃视频成人在线观看| 欧美日韩中文视频| 一区二区三区四区精品在线视频 | 国产午夜视频在线观看| 日韩电影网在线| 人人妻人人澡人人爽精品日本 | 久久精品无码一区二区三区毛片| 日本欧美久久久久免费播放网| 丰满爆乳一区二区三区| 伊人激情综合| 日韩欧美中文字幕在线视频 | 欧美xxxx黑人又粗又长密月| 人人爱人人干婷婷丁香亚洲| 国产美女91呻吟求| 草民电影神马电影一区二区| 日韩av手机在线| 黄色综合网址| 日本精品久久久久影院| 牛牛精品一区二区| 午夜精品久久久久久99热软件| 久草在线视频网站| 欧美国产第二页| 日本成人不卡| 午夜精品久久久久久99热| 精精国产xxx在线视频app| 91精品国产91久久| 在线免费看h| 日韩免费在线播放| 福利一区二区免费视频| 成人欧美一区二区三区在线 | 五码日韩精品一区二区三区视频| 免费一区二区| 亚洲人成影视在线观看| 97精品国产福利一区二区三区| 亚洲欧美一区二区原创| 欧美mv日韩| 欧美日韩激情四射| 亚洲看片一区| 97公开免费视频| 久久99精品国产麻豆婷婷洗澡| 国产成人在线综合| 国产99久久久国产精品| 国产草草浮力影院| 久久久久久久电影| 天堂а√在线中文在线鲁大师| 中文字幕日韩欧美一区二区三区| 五月天丁香激情| 午夜电影久久久| 天堂免费在线视频| 日韩亚洲欧美综合| 日中文字幕在线| 色偷偷噜噜噜亚洲男人的天堂| 日韩三级免费| 日韩av片永久免费网站| 国产999精品在线观看| 国产日产精品一区二区三区四区| 国产成人手机高清在线观看网站| 亚洲一区二区在线免费观看| 欧美日韩国产欧| 青青在线视频免费| 国产一区二区三区久久悠悠色av| 国产 xxxx| 国产精品嫩草影院com| 国产无套在线观看| 欧美性生活久久| 国产香蕉在线观看| 在线一区二区日韩| av免费在线视| 成人免费看吃奶视频网站| 精品亚洲精品| 在线观看视频黄色| 另类av一区二区| 18禁一区二区三区| 中文天堂在线一区| 亚洲国产成人精品激情在线| 欧美日韩国产综合视频在线观看 | 欧美一区二区三区爽大粗免费 | 久久精品aⅴ无码中文字字幕重口| 国产日韩欧美精品电影三级在线| 欧美又粗又大又长| 欧美午夜在线观看| 香蕉视频网站在线| 色综合天天综合网国产成人网 | 成人女同在线观看| 国产日韩欧美中文| 国产影视一区| 国产在线精品91| 韩国一区二区三区| 91资源在线播放| 日韩欧美在线观看视频| 亚洲精品视频91| 日韩中文字幕在线观看| 在线国产成人影院| 精品国产一区二区三区免费| 国产精品jizz在线观看美国| 国产3p在线播放| 国产精品视频第一区| 99精品人妻国产毛片| 亚洲第一天堂av| 国产第一页在线| 91在线无精精品一区二区| 成人在线亚洲| 国产成人无码av在线播放dvd| 成人av网在线| 国产第一页第二页| 日韩精品一区二区在线| 国产传媒在线播放| 91精品在线国产| 亚洲一本二本| 涩多多在线观看| 亚洲色图欧洲色图婷婷| 国产精品久久久久毛片| 中文字幕欧美在线| 欧洲亚洲精品久久久久| 亚洲一区二区在线看| 精品一区二区三区免费观看 | 男人天堂网在线| 欧美专区在线播放| 国产99久久| 男人天堂成人在线| 国产视频一区二区三区在线观看| 中文字幕黄色片| 亚洲亚裔videos黑人hd| 九九九伊在线综合永久| 亚洲激情电影在线| 久久99九九99精品| 色欲人妻综合网| 日韩女优视频免费观看| 欧美人与禽猛交乱配| 激情五月综合色婷婷一区二区| 亚洲精品麻豆| 日韩精品电影一区二区| 欧美亚洲国产怡红院影院| 午夜视频成人| av成人在线电影| 99精品免费网| 欧美18—19性高清hd4k| 欧美人牲a欧美精品| av片在线观看| 国产一区二区免费电影| 久久都是精品| 欧美大片xxxx| 亚洲国产高清福利视频| 国产精品久久久久av电视剧| 亚洲欧洲精品一区| 国产99久久久国产精品| 性欧美激情精品| 精精国产xxxx视频在线野外| 蜜桃视频日韩| 久久99精品久久久久婷婷| 久久久香蕉视频| 亚洲一级免费视频| 免费精品一区| 国产精品秘入口18禁麻豆免会员| 日本一区二区视频在线| 国产视频一二三四区| 午夜精品在线观看| 日韩欧美高清| 男人的天堂影院| 欧美中文字幕一区二区三区| 亚洲欧美成人影院| 欧洲av一区| 国产精品一二一区| 色老头在线视频| 九色精品美女在线| 国产欧美日韩精品一区二区免费| av噜噜在线观看| 欧美日韩国产麻豆| 麻豆传媒视频在线观看| 精品国产_亚洲人成在线| 精品一二三四在线| 亚洲va在线观看| 久久99精品久久久久久青青91| 亚洲欧洲免费| 中文字幕99页| 欧美人伦禁忌dvd放荡欲情| 三级在线看中文字幕完整版| 97超碰人人爱|