日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux进程的创建函数fork()及其fork内核实现解析

發布時間:2025/4/14 linux 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux进程的创建函数fork()及其fork内核实现解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
進程的創建之fork()Linux系統下,進程可以調用fork函數來創建新的進程。調用進程為父進程,被創建的進程為子進程。fork函數的接口定義如下:
  • #include <unistd.h>
  • pid_t fork(void);
  • 與普通函數不同,fork函數會返回兩次。一般說來,創建兩個完全相同的進程并沒有太多的價值。大部分情況下,父子進程會執行不同的代碼分支。fork函數的返回值就成了區分父子進程的關鍵。fork函數向子進程返回0,并將子進程的進程ID返給父進程。當然了,如果fork失敗,該函數則返回-1,并設置errno。
    從2.6.24起,Linux采用完全公平調度(Completely Fair Scheduler,CFS)。用戶創建的普通進程,都采用CFS調度策略。對于CFS調度策略,procfs提供了如下控制選項:
  • /proc/sys/kernel/sched_child_runs_first
  • 該值默認是0,表示父進程優先獲得調度。如果將該值改成1,那么子進程會優先獲得調度。

    fork之后父子進程的內存關系fork之后的子進程完全拷貝了父進程的地址空間,包括棧、堆、代碼段等。通過下面的示例代碼,我們一起來查看父子進程的內存關系:
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <unistd.h>
  • #include <string.h>
  • #include <errno.h>
  • #include <sys/types.h>
  • #include <wait.h>
  • int g_int = 1;//數據段的全局變量
  • int main()
  • {
  • int local_int = 1;//棧上的局部變量
  • int *malloc_int = malloc(sizeof(int));//通過malloc動態分配在堆上的變量
  • *malloc_int = 1;
  • pid_t pid = fork();
  • if(pid == 0) /*子進程*/
  • {
  • local_int = 0;
  • g_int = 0;
  • *malloc_int = 0;
  • fprintf(stderr,"[CHILD ] child change local global malloc value to 0\n");
  • free(malloc_int);
  • sleep(10);
  • fprintf(stderr,"[CHILD ] child exit\n");
  • exit(0);
  • }
  • else if(pid < 0)
  • {
  • printf("fork failed (%s)",strerror(errno));
  • return 1;
  • }
  • fprintf(stderr,"[PARENT] wait child exit\n");
  • waitpid(pid,NULL,0);
  • fprintf(stderr,"[PARENT] child have exit\n");
  • printf("[PARENT] g_int = %d\n",g_int);
  • printf("[PARENT] local_int = %d\n",local_int);
  • printf("[PARENT] malloc_int = %d\n",local_int);
  • free(malloc_int);
  • return 0;
  • }
  • 這里刻意定義了三個變量,一個是位于數據段的全局變量,一個是位于棧上的局部變量,還有一個是通過malloc動態分配位于堆上的變量,三者的初始值都是1。然后調用fork創建子進程,子進程將三個變量的值都改成了0。按照fork的語義,子進程完全拷貝了父進程的數據段、棧和堆上的內存,如果父子進程對相應的數據進行修改,那么兩個進程是并行不悖、互不影響的。因此,在上面示例代碼中,盡管子進程將三個變量的值都改成了0,對父進程而言這三個值都沒有變化,仍然是1,代碼的輸出也證實了這一點。
  • [PARENT] wait child exit
  • [CHILD ] child change local global malloc value to 0
  • [CHILD ] child exit
  • [PARENT] child have exit
  • [PARENT] g_int = 1
  • [PARENT] local_int = 1
  • [PARENT] malloc_int = 1

  • 前文提到過,子進程和父進程執行一模一樣的代碼的情形比較少見。Linux提供了execve系統調用,構建在該系統調用之上,glibc提供了exec系列函數。這個系列函數會丟棄現存的程序代碼段,并構建新的數據段、棧及堆。調用fork之后,子進程幾乎總是通過調用exec系列函數,來執行新的程序。在這種背景下,fork時子進程完全拷貝父進程的數據段、棧和堆的做法是不明智的,因為接下來的exec系列函數會毫不留情地拋棄剛剛辛苦拷貝的內存。為了解決這個問題,Linux引入了寫時拷貝(copy-on-write)的技術。寫時拷貝是指子進程的頁表項指向與父進程相同的物理內存頁,這樣只拷貝父進程的頁表項就可以了,當然要把這些頁面標記成只讀(如圖4-4所示)。如果父子進程都不修改內存的內容,大家便相安無事,共用一份物理內存頁。但是一旦父子進程中有任何一方嘗試修改,就會引發缺頁異常(page fault)。此時,內核會嘗試為該頁面創建一個新的物理頁面,并將內容真正地復制到新的物理頁面中,讓父子進程真正地各自擁有自己的物理內存頁,然后將頁表中相應的表項標記為可寫。從上面的描述可以看出,對于沒有修改的頁面,內核并沒有真正地復制物理內存頁,僅僅是復制了父進程的頁表。這種機制的引入提升了fork的性能,從而使內核可以快速地創建一個新的進程。查看下copy_one_pte函數中有如下代碼:
  • /*如果是寫時拷貝, 那么無論是初始頁表, 還是拷貝的頁表, 都設置了寫保護
  • *后面無論父子進程, 修改頁表對應位置的內存時, 都會觸發page fault
  • */
  • if (is_cow_mapping(vm_flags)) {
  • ptep_set_wrprotect(src_mm, addr, src_pte);//設置為寫保護
  • pte = pte_wrprotect(pte);
  • }
  • 該代碼將頁表設置成寫保護,父子進程中任意一個進程嘗試修改寫保護的頁面時,都會引發缺頁中斷,內核會走向do_wp_page函數,該函數會負責創建副本,即真正的拷貝。寫時拷貝技術極大地提升了fork的性能,在一定程度上讓vfork成為了雞肋。

    父子進程共用了一套文件偏移量
    文件描述符還有一個文件描述符標志(file descriptor flag)。目前只定義了一個標志位:FD_CLOSEXEC,這是close_on_exec標志位。細心閱讀open函數手冊也會發現,open函數也有一個類似的標志位,即O_CLOSEXEC,該標志位也是用于設置文件描述符標志的。那么這個標志位到底有什么作用呢?如果文件描述符中將這個標志位置位,那么調用exec時會自動關閉對應的文件。可是為什么需要這個標志位呢?主要是出于安全的考慮。對于fork之后子進程執行exec這種場景,如果子進程可以操作父進程打開的文件,就會帶來嚴重的安全隱患。一般來講,調用exec的子進程時,因為它.會另起爐灶,因此父進程打開的文件描述符也應該一并關閉,但事實上內核并沒有主動這樣做。試想如下場景,Webserver首先以root權限啟動,打開只有擁有root權限才能打開的端口和日志等文件,再降到普通用戶,fork出一些worker進程,在進程中進行解析腳本、寫日志、輸出結果等操作。由于子進程完全可以操作父進程打開的文件,因此子進程中的腳本只要繼續操作這些文件描述符,就能越權操作root用戶才能操作的文件。為了解決這個問題,Linux引入了close on exec機制。設置了FD_CLOSEXEC標志位的文件,在子進程調用exec家族函數時會將相應的文件關閉。而設置該標志位的方法有兩種:
    ·open時,帶上O_CLOSEXEC標志位。·open時如果未設置,那就在后面調用fcntl函數的F_SETFD操作來設置。建議使用第一種方法。原因是第二種方法在某些時序條件下并不那么絕對的安全。考慮圖4-7的場景:Thread 1還沒來得及將FD_CLOSEXEC置位,由于Thread 2已經執行過fork,這時候fork出來的子進程就不會關閉相應的文件。盡管Thread1后來調用了fcntl的F_SETFD操作,但是為時已晚,文件已經泄露了。注意 圖4-7中,多線程程序執行了fork,僅僅是為了示意,實際中并不鼓勵這種做法。正相反,這種做法是十分危險的。多線程程序不應該調用fork來創建子進程,第8章會分析具體原因。前面提到,執行fork時,子進程會獲取父進程所有文件描述符的副本,但是測試結果表明,父子進程共享了文件的很多屬性。這到底是怎么回事?讓我們深入內核一探究竟。在內核的進程描述符task_struct結構體中,與打開文件相關的變量如下所示:
  • struct task_struct {
  • ...struct files_struct *files;...
  • }
  • 調用fork時,內核會在copy_files函數中處理拷貝父進程打開的文件的相關事宜:
  • static int copy_files(unsigned long clone_flags,
  • struct task_struct *tsk)
  • {
  • struct files_struct *oldf, *newf;
  • int error = 0;
  • oldf = current->files;//獲取父進程的文件結構體
  • if (!oldf)
  • goto out;
  • /*創建線程和vfork, 都不用復制父進程的文件描述符, 增加引用計數即可*/
  • if (clone_flags & CLONE_FILES) {
  • atomic_inc(&oldf->count);
  • goto out;
  • }
  • /*對于fork而言, 需要復制父進程的文件描述符*/
  • newf = dup_fd(oldf, &error); //復制一份文件描述符
  • if (!newf)
  • goto out;
  • tsk->files = newf;
  • error = 0;
  • out:
  • return error;
  • }
  • CLONE_FILES標志位用來控制是否共享父進程的文件描述符。如果該標志位置位,則表示不必費勁復制一份父進程的文件描述符了,增加引用計數,直接共用一份就可以了。對于vfork函數和創建線程的pthread_create函數來說都是如此。但是fork函數卻不同,調用fork函數時,該標志位為0,表示需要為子進程拷貝一份父進程的文件描述符。文件描述符的拷貝是通過內核的dup_fd函數來完成的。
  • struct files_struct *dup_fd(struct files_struct *oldf,
  • int *errorp)
  • {
  • struct files_struct *newf;
  • struct file **old_fds, **new_fds;
  • int open_files, size, i;
  • struct fdtable *old_fdt, *new_fdt;
  • *errorp = -ENOMEM;
  • newf = kmem_cache_alloc(files_cachep, GFP_KERNEL);
  • if (!newf)
  • goto out;
  • dup_fd函數首先會給子進程分配一個file_struct結構體,然后做一些賦值操作。這個結構體是進程描述符中與打開文件相關的數據結構,每一個打開的文件都會記錄在該結構體中。其定義代碼如下:
  • struct files_struct {
  • atomic_t count;
  • struct fdtable __rcu *fdt;
  • struct fdtable fdtab;
  • spinlock_t file_lock ____cacheline_aligned_in_smp;
  • int next_fd;
  • struct embedded_fd_set close_on_exec_init;
  • struct embedded_fd_set open_fds_init;
  • struct file __rcu * fd_array[NR_OPEN_DEFAULT];
  • };
  • struct fdtable //文件描述符表
  • {
  • unsigned int max_fds;
  • struct file __rcu **fd; /* current fd array */
  • fd_set *close_on_exec;
  • fd_set *open_fds;
  • struct rcu_head rcu;
  • struct fdtable *next;
  • };
  • struct embedded_fd_set {
  • unsigned long fds_bits[1];
  • };
  • 初看之下struct fdtable的內容與struct files_struct的內容有頗多重復之處,包括close_on_exec文件描述符位圖、打開文件描述符位圖及file指針數組等,但事實上并非如此。struct files_struct中的成員是相應數據結構的實例,而struct fdtable中的成員是相應的指針。
    Linux系統假設大多數的進程打開的文件不會太多。于是Linux選擇了一個long類型的位數(32位系統下為32位,64位系統下為64位)作為經驗值。以64位系統為例,file_struct結構體自帶了可以容納64個struct file類型指針的數組fd_array,也自帶了兩個大小為64的位圖,其中open_fds_init位圖用于記錄文件的打開情況,close_on_exec_init位圖用于記錄文件描述符的FD_CLOSEXCE標志位是否置位。只要進程打開的文件個數小于64,file_struct結構體自帶的指針數組和兩個位圖就足以滿足需要。因此在分配了file_struct結構體后,內核會初始化file_struct自帶的fdtable,代碼如下所示:
  • atomic_set(&newf->count, 1);
  • spin_lock_init(&newf->file_lock);
  • newf->next_fd = 0;
  • new_fdt = &newf->fdtab;
  • new_fdt->max_fds = NR_OPEN_DEFAULT;
  • new_fdt->close_on_exec = (fd_set *)&newf->close_on_exec_init;
  • new_fdt->open_fds = (fd_set *)&newf->open_fds_init;
  • new_fdt->fd = &newf->fd_array[0];
  • new_fdt->next = NULL;
  • 初始化之后,子進程的file_struct的情況如圖4-8所示。注意,此時file_struct結構體中的fdt指針并未指向file_struct自帶的struct fdtable類型的fdtab變量。原因很簡單,因為此時內核還沒有檢查父進程打開文件的個數,因此并不確定自帶的結構體能否滿足需要。
    接下來,內核會檢查父進程打開文件的個數。如果父進程打開的文件超過了64個,struct files_struct中自帶的數組和位圖就不能滿足需要了。這種情況下內核會分配一個新的struct fdtable,代媽如下:
  • spin_lock(&oldf->file_lock);
  • old_fdt = files_fdtable(oldf);
  • open_files = count_open_files(old_fdt);
  • /*如果父進程打開文件的個數超過NR_OPEN_DEFAULT*/
  • while (unlikely(open_files > new_fdt->max_fds)) {
  • spin_unlock(&oldf->file_lock); /* 如果不是自帶的fdtable而是曾經分配的fdtable, 則需要先釋放*/
  • if (new_fdt != &newf->fdtab)
  • __free_fdtable(new_fdt);
  • /*創建新的fdtable*/
  • new_fdt = alloc_fdtable(open_files - 1);
  • if (!new_fdt) {
  • *errorp = -ENOMEM;
  • goto out_release;
  • }
  • /*如果超出了系統限制, 則返回EMFILE*/
  • if (unlikely(new_fdt->max_fds < open_files)) {
  • __free_fdtable(new_fdt);
  • *errorp = -EMFILE;
  • goto out_release;
  • }
  • spin_lock(&oldf->file_lock);
  • old_fdt = files_fdtable(oldf);
  • open_files = count_open_files(old_fdt);
  • }
  • alloc_fdtable所做的事情,不過是分配fdtable結構體本身,以及分配一個指針數組和兩個位圖。分配之前會根據父進程打開文件的數目,計算出一個合理的值nr,以確保分配的數組和位圖能夠滿足需要。
    無論是使用file_struct結構體自帶的fdtable,還是使用alloc_fdtable分配的fdtable,接下來要做的事情都一樣,即將父進程的兩個位圖信息和打開文件的struct file類型指針拷貝到子進程的對應數據結構中,代碼如下:
  • old_fds = old_fdt->fd; /*父進程的struct file 指針數組*/
  • new_fds = new_fdt->fd; /*子進程的struct file 指針數組*/
  • /* 拷貝打開文件位圖 */
  • memcpy(new_fdt->open_fds->fds_bits,old_fdt->open_fds->fds_bits, open_files/8);
  • /* 拷貝 close_on_exec位圖 */
  • memcpy(new_fdt->close_on_exec->fds_bits,old_fdt->close_on_exec->fds_bits, open_files/8);
  • for (i = open_files; i != 0; i--) {
  • ?struct file *f = *old_fds++;
  • if (f) {
  • ?get_file(f); /* f對應的文件的引用計數加1 */
  • ?}?else {
  • FD_CLR(open_files - i, new_fdt->open_fds);
  • }
  • /* 子進程的struct file類型指針, *指向和父進程相同的struct file 結構體*/
  • rcu_assign_pointer(*new_fds++, f); ?
  • }
  • spin_unlock(&oldf->file_lock);/* compute the remainder to be cleared */
  • size = (new_fdt->max_fds - open_files) * sizeof(struct file *);
  • /*將尚未分配到的struct file結構的指針清零*/
  • ????memset(new_fds, 0, size);/*將尚未分配到的位圖區域清零*/
  • ????if (new_fdt->max_fds > open_files) {
  • int left = (new_fdt->max_fds-open_files)/8;
  • int start = open_files / (8 * sizeof(unsigned long));
  • memset(&new_fdt->open_fds->fds_bits[start], 0, left);
  • memset(&new_fdt->close_on_exec->fds_bits[start], 0, left);
  • }
  • ????rcu_assign_pointer(newf->fdt, new_fdt);
  • ????return newf;
  • out_release:
  • ????kmem_cache_free(files_cachep, newf);
  • out:
  • ????return NULL;
  • }
  • 通過對上述流程的梳理,不難看出,父子進程之間拷貝的是struct file的指針,而不是struct file的實例,父子進程的struct file類型指針,都指向同一個struct file實例。fork之后,父子進程的文件描述符關系如圖4-10所示。
    進程的創建之vfork()在早期的實現中,fork沒有實現寫時拷貝機制,而是直接對父進程的數據段、堆和棧進行完全拷貝,效率十分低下。很多程序在fork一個子進程后,會緊接著執行exec家族函數,這更是一種浪費。所以BSD引入了vfork。既然fork之后會執行exec函數,拷貝父進程的內存數據就變成了一種無意義的行為,所以引入的vfork壓根就不會拷貝父進程的內存數據,而是直接共享。再后來Linux引入了寫時拷貝的機制,其效率提高了很多,這樣一來,vfork其實就可以退出歷史舞臺了。除了一些需要將性能優化到極致的場景,大部分情況下不需要再使用vfork函數了。vfork會創建一個子進程,該子進程會共享父進程的內存數據,而且系統將保證子進程先于父進程獲得調度。子進程也會共享父進程的地址空間,而父進程將被一直掛起,直到子進程退出或執行exec。
    注意,vfork之后,子進程如果返回,則不要調用return,而應該使用_exit函數。如果使用return,就會出現詭異的錯誤。請看下面的示例代碼:
  • #include<stdio.h>
  • #include <stdlib.h>
  • #include <unistd.h>
  • int glob = 88 ;
  • int main(void) {
  • int var;
  • var = 88;
  • pid_t pid;
  • if ((pid = vfork()) < 0) {
  • printf("vfork error");
  • exit(-1);
  • } else if (pid == 0) { /* 子進程 */
  • var++;
  • glob++;
  • return 0;
  • }printf("pid=%d, glob=%d, var=%d\n",getpid(), glob, var);
  • return 0;
  • }
  • 調用子進程,如果使用return返回,就意味著main函數返回了,因為棧是父子進程共享的,所以程序的函數棧發生了變化。main函數return之后,通常會調用exit系的函數,父進程收到子進程的exit之后,就會開始從vfork返回,但是這時整個main函數的棧都已經不復存在了,所以父進程壓根無法執行。于是會返回一個詭異的棧地址,對于在某些內核版本中,進程會直接報棧錯誤然后退出,但是在某些內核版本中,有可能就會再次進出main,于是進入一個無限循環,直到vfork返回錯誤。筆者的Ubuntu版本就是后者。返回。一般來說,vfork創建的子進程會執行exec,執行完exec后應該調用_exit,注意是_exit而不是exit。因為exit會導致父進程stdio緩沖區的沖刷和關閉。我們會在后面講述exit和_exit的區別。

    來自為知筆記(Wiz)

    轉載于:https://www.cnblogs.com/zengyiwen/p/5755193.html

    總結

    以上是生活随笔為你收集整理的Linux进程的创建函数fork()及其fork内核实现解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    黄色日本免费 | 久久久久久久久久久久国产精品 | 黄色免费网战 | 青青草国产成人99久久 | 午夜精品久久久久久久99 | 国产美女在线免费观看 | 亚洲精品色视频 | 国产精品白丝jk白祙 | 国产精品视频一二三 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 国产精品久久久久久吹潮天美传媒 | 免费高清无人区完整版 | 免费看精品久久片 | 97久久久免费福利网址 | 人人添人人澡人人澡人人人爽 | 日韩在线观看精品 | av天天干 | 黄色av免费| 91看片淫黄大片一级在线观看 | 亚洲成人黄色在线观看 | 国产一级片免费视频 | a在线免费观看视频 | 国产在线观看免费观看 | 欧美性做爰猛烈叫床潮 | 99视频这里有精品 | 日本99热 | www中文在线| 色婷婷狠狠干 | 91成人在线免费观看 | 天天天插| 激情五月***国产精品 | 黄色动态图xx | 日本久久精 | 久久精品网站免费观看 | 国产一区二区三区视频在线 | 日韩中文字幕在线看 | 国产69精品久久久久99尤 | 97视频在线免费播放 | 天天爽天天碰狠狠添 | 欧美天天综合 | 91九色成人蝌蚪首页 | 色偷偷男人的天堂av | 91电影福利| 成人网中文字幕 | 91视频免费 | 欧美日韩一区二区在线观看 | 国产又粗又猛又色又黄网站 | 婷婷电影在线观看 | 免费h精品视频在线播放 | 国产中文字幕亚洲 | 99久久精品费精品 | 国产精品99久久99久久久二8 | 激情影音 | 麻豆91在线播放 | 亚洲精品在线免费看 | 欧美精品在线一区二区 | 日韩av区| 99久久婷婷国产精品综合 | 日韩免费专区 | 天天看天天操 | 福利av影院 | 91久久精品日日躁夜夜躁国产 | 青草草在线 | 亚洲一级电影在线观看 | 欧美伦理一区 | 丁香五香天综合情 | 香蕉免费在线 | 毛片1000部免费看 | 五月婷在线播放 | 久久免费视频播放 | 欧美调教网站 | 正在播放五月婷婷狠狠干 | 97福利视频| 黄色av一区二区三区 | 在线播放 一区 | 精品夜夜嗨av一区二区三区 | 免费视频网 | 日本久久中文 | 天天干天天干 | 国产一级免费观看视频 | 91亚洲视频在线观看 | 欧美性久久久久久 | 欧美日韩中文在线 | 色99视频 | 欧美日韩在线精品一区二区 | 国产一区在线免费观看 | www九九热 | 国产精华国产精品 | 国产裸体视频网站 | 日韩试看 | 毛片在线播放网址 | 97超碰香蕉| 欧美日韩色婷婷 | 在线观看av网站 | 精品美女视频 | 一区二三国产 | 免费男女网站 | 亚洲午夜精品一区二区三区电影院 | 天天拍夜夜拍 | www.久久久.cum | 精品在线免费视频 | 日韩高清观看 | 日韩久久久久久 | 日韩91在线 | 欧美日韩国产网站 | 精品久久久久久久久亚洲 | 日韩激情中文字幕 | 不卡的av电影在线观看 | 欧美性脚交| 久久久久电影网站 | 久久国产精品一国产精品 | 一级片视频免费观看 | 欧洲精品亚洲精品 | 91网址在线 | 一区二区三区精品在线视频 | 久久中文字幕导航 | 四虎在线免费视频 | 欧美日韩中文另类 | 国产成人在线精品 | 亚洲 欧洲av | 六月婷婷久香在线视频 | 日韩资源在线播放 | 日本不卡123 | 91完整版 | a天堂免费 | 日韩精品一区二区三区水蜜桃 | 丁香五月缴情综合网 | 久久精品日本啪啪涩涩 | 91在线视频播放 | 中文字幕影片免费在线观看 | 国产一区成人 | 欧美精品资源 | 天堂资源在线观看视频 | 69精品久久久 | 欧美视频日韩视频 | 免费看污黄网站 | 黄色录像av | 午夜精品中文字幕 | 精品久久久久久电影 | 夜夜夜影院 | 三级av在线免费观看 | 日韩在线视频观看免费 | 操操操人人| 久久精品亚洲 | 欧美日韩xxxxx| 色婷婷一| av电影免费 | 免费看片网页 | 亚洲成年人在线播放 | 国产剧情在线一区 | 亚洲综合激情五月 | 欧美日韩午夜 | 美女网站视频免费黄 | 色久综合 | 久久九九国产精品 | 成人免费大片黄在线播放 | 免费看精品久久片 | 亚洲激情电影在线 | 亚洲三级在线免费观看 | 国产精品免费观看视频 | 天天插夜夜操 | 在线日韩一区 | 精品国产一二三 | 国产香蕉视频在线观看 | 国产亚洲情侣一区二区无 | 视频91| 欧美在线一级片 | 国产欧美日韩一区 | 中文字幕精 | 精品视频免费久久久看 | 天天亚洲综合 | 四虎成人精品永久免费av九九 | 五月天综合网 | 日本一区二区三区免费观看 | 五月婷婷一级片 | 亚洲视频综合在线 | 综合铜03 | 亚洲特级片 | 亚洲乱码在线观看 | 久久精品美女 | 久草在线网址 | 黄色com| 国产伦精品一区二区三区四区视频 | 久久黄色片子 | 亚洲欧美日韩在线一区二区 | 国产精品久久久久av | 97夜夜澡人人双人人人喊 | 国产成人免费网站 | 免费看在线看www777 | 黄污视频网站 | 成人国产一区二区 | 久久天天躁狠狠躁夜夜不卡公司 | 亚洲开心色 | 国产剧情一区二区在线观看 | 欧美在线观看视频免费 | 国产一区二区三区免费观看视频 | 国产特级毛片aaaaaaa高清 | 亚洲国产精品视频在线观看 | 婷五月天激情 | 狠狠色噜噜狠狠狠狠 | 一色av | 婷婷综合导航 | 日韩精品短视频 | 国产高清av免费在线观看 | 日日爽夜夜操 | 午夜精品电影一区二区在线 | 国产精品私人影院 | 国模一区二区三区四区 | av线上看| 婷婷五月在线视频 | 日韩黄色中文字幕 | 成年人免费在线观看网站 | 国产区在线看 | 日韩欧美91 | 欧美色图亚洲图片 | 免费看黄的 | 天天射天天爱天天干 | 婷婷色站 | 亚洲开心激情 | 久久久久久久精 | 国产一区欧美二区 | a v在线观看 | 99精品免费网 | 国产一区免费在线 | 欧美日韩免费一区二区三区 | 在线视频电影 | 国产黄色免费观看 | 午夜视频免费播放 | 欧美日韩国产色综合一二三四 | 久久精品国产免费 | 久久精品视频网站 | 久草视频网 | 精品九九九 | 久久久性 | 亚洲另类交 | 久久香蕉一区 | av电影在线观看完整版一区二区 | 五月视频| 成人在线你懂得 | 亚洲波多野结衣 | 国际精品久久久 | 91视频91蝌蚪 | 亚洲国产剧情 | 免费看黄在线观看 | 婷婷精品视频 | 亚洲五月激情 | 91麻豆网 | 色综合久久五月天 | 久久综合久久88 | 国产99久久99热这里精品5 | 免费在线观看一级片 | 久久综合九色综合网站 | 久久久久这里只有精品 | 精品在线观看一区二区 | 成人免费看片网址 | 久久小视频 | av一级免费| 国产97在线视频 | 中文字幕在线视频一区二区三区 | 久草视频免费在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 西西www4444大胆在线 | 黄色软件视频大全免费下载 | 98超碰在线| 91精品视频在线 | 亚洲 欧美 综合 在线 精品 | 中文字幕在线观看免费高清完整版 | 国产96在线 | 丁香六月婷婷开心婷婷网 | 成人一级电影在线观看 | 日韩91精品| 超碰大片 | 精品久久在线 | 韩国视频一区二区三区 | 日韩a级免费视频 | 欧美一级免费 | 九九热在线精品 | 亚洲欧美成人在线 | 免费特级黄色片 | 国产日韩视频在线观看 | 国产1区2区3区精品美女 | 欧美日韩久久一区 | 久久久久久国产精品 | 国产亚洲精品成人av久久影院 | 国产免费专区 | 99久久精品电影 | 国产在线色视频 | 日韩视频中文字幕在线观看 | 亚洲精品h | 国产亚洲精品久久19p | 天天做天天干 | 亚洲 成人 欧美 | 美女视频黄网站 | 午夜精品一区二区三区在线播放 | 在线观看亚洲成人 | 91中文字幕在线播放 | 欧美成人黄 | 国产精品对白一区二区三区 | www.激情五月.com | 99se视频在线观看 | 日韩欧美精品一区二区三区经典 | 亚洲精品小视频在线观看 | 麻豆传媒视频在线 | 91在线精品秘密一区二区 | bbb搡bbb爽爽爽 | 黄色网免费 | 国产精品久久久久久久久久久久冷 | 国产欧美日韩精品一区二区免费 | 在线精品视频免费播放 | 欧美国产不卡 | 国产成人三级三级三级97 | 日韩理论在线视频 | 麻豆视频大全 | 十八岁免进欧美 | 96精品视频 | av免费播放 | 麻豆视频一区 | 黄色片视频在线观看 | 久久天天综合网 | 欧美经典久久 | 在线小视频你懂得 | 亚洲欧美怡红院 | 日韩精品中文字幕久久臀 | 日本精品一区二区在线观看 | 国产精品一区二区免费在线观看 | 色婷丁香 | 在线观看视频日韩 | 2000xxx影视| 在线播放 日韩专区 | 日韩在线观看视频中文字幕 | 91久草视频 | 色婷婷久久久综合中文字幕 | 开心激情婷婷 | 国产一二三四在线观看视频 | 国产高清在线免费视频 | 久久视频一区二区 | 欧美成人基地 | 久久九九国产视频 | 久久久国产精品久久久 | 久久精品国产亚洲aⅴ | 国产成人精品一区二区三区福利 | 国产精品99久久久久久武松影视 | 最近最新最好看中文视频 | 国产视频69 | 中文字幕av在线电影 | 亚洲黄色免费网站 | 日韩网站免费观看 | 97超碰成人| 亚洲最新视频在线播放 | 久久大片 | 五月天激情开心 | 免费观看91视频大全 | 国产vs久久 | 国产日韩精品一区二区 | 韩国一区二区三区视频 | 亚洲爽爽网 | 国产成人精品午夜在线播放 | 久久免费观看视频 | 午夜精品久久久久久中宇69 | 丁香 婷婷 激情 | 国产精品久久久久免费观看 | 亚洲作爱| 国产亚洲字幕 | www.天天综合 | 2019精品手机国产品在线 | 精品国产伦一区二区三区免费 | 欧美在线观看视频一区二区三区 | 亚洲一区精品二人人爽久久 | 337p欧美| 天天操天天怕 | 天天色天天上天天操 | 日韩免费观看一区二区 | 欧美精品网站 | 国产做aⅴ在线视频播放 | 999久久久国产精品 高清av免费观看 | 婷婷av资源 | 精品综合久久久 | 欧美日韩不卡一区 | 在线播放一区二区三区 | 在线天堂中文www视软件 | 久久久久久中文字幕 | 欧美与欧洲交xxxx免费观看 | 99爱精品在线 | 日韩视频在线播放 | 中文字幕在线观看一区 | 久草在线99 | 久久综合给合久久狠狠色 | 亚洲黄色免费电影 | 久久婷婷国产色一区二区三区 | 波多野结衣精品 | 欧美在线18 | 午夜精品久久久久久中宇69 | 国产精品视屏 | 二区精品视频 | 91视频 - x99av | 麻豆视频国产精品 | 麻花天美星空视频 | 热久久国产 | 最新极品jizzhd欧美 | 91九色网站 | 激情av在线播放 | 中文字幕在线观看91 | 97精品国产97久久久久久粉红 | 国产高清第一页 | 福利视频一区二区 | 91精品国自产在线观看欧美 | 黄色a在线 | 色婷av | 91精品国产三级a在线观看 | 婷婷精品| 成年人在线观看 | 免费av在| 韩国av不卡 | 国产免费成人 | 天天天干天天射天天天操 | 天天爱天天爽 | 中文一区在线观看 | 友田真希x88av | 亚洲精品在线免费播放 | 日韩影视在线观看 | 日日夜夜天天久久 | 亚洲精品一区二区18漫画 | 最近日韩中文字幕中文 | 伊人日日干| 一区二区三区日韩在线观看 | 91av美女| 国产高清第一页 | 成年人免费看片 | 在线看成人av | 欧美一级片免费 | 午夜在线观看一区 | 精品一二三四在线 | 久久久久一区二区三区四区 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 色99网 | 天天操天天爱天天爽 | 久久久久草 | 91视频com | 日韩69av | 91av在线看 | 日本中文字幕在线免费观看 | 亚洲精品一区二区三区四区高清 | 亚洲不卡av一区二区三区 | 免费看日韩 | 久久少妇免费视频 | 久久久久久久久免费 | 超碰97免费在线 | 中文av字幕在线观看 | 激情网站免费观看 | 色综合久 | 亚洲精品视频免费在线 | 在线观看免费高清视频大全追剧 | 男女全黄一级一级高潮免费看 | 国产美腿白丝袜足在线av | 激情图片久久 | 国产91在线观看 | 日韩一区二区三免费高清在线观看 | av看片在线观看 | 成人羞羞视频在线观看免费 | 91精品国产九九九久久久亚洲 | 久久久久久麻豆 | 国产精品永久在线 | 国产精品久久久久一区二区 | 色噜噜狠狠狠狠色综合久不 | 国产精品久久久久久久久久不蜜月 | 一区二区三区久久精品 | 欧美日韩久久不卡 | 热久在线 | 久久久久久毛片 | 国产一区二区日本 | 精品女同一区二区三区在线观看 | 国产精品视频免费看 | 色哟哟国产精品 | 日韩美女一级片 | 在线免费91 | 国产九色在线播放九色 | 国产色爽| www久久com | 久久久久久久精 | 国内精品久久久久久中文字幕 | 国产97视频在线 | 国产馆在线播放 | 中文字幕免费高 | 91av视频在线播放 | 激情综合亚洲精品 | 亚洲蜜桃在线 | 天天躁日日躁狠狠躁av中文 | 91精品影视 | 91综合久久一区二区 | 国产精品福利久久久 | 色婷婷在线播放 | 国产精品自产拍在线观看中文 | 久久精品国产精品亚洲 | 国产精品免费视频观看 | 六月丁香激情综合色啪小说 | 九九热.com| 日韩一区二区三 | 日韩欧美电影网 | 亚洲激情在线视频 | 人人爽爽人人 | 国产欧美日韩一区 | 欧美成人精品三级在线观看播放 | 黄色在线观看免费网站 | 久久久久久久久久久精 | 欧美少妇的秘密 | 国产成人精品亚洲 | 天天曰| 欧美日本不卡视频 | 香蕉免费在线 | 亚洲午夜精品在线观看 | 国产一区精品在线 | 亚洲永久精品视频 | 日韩在线理论 | 午夜a区| 超碰官网| 日韩中文字幕在线不卡 | 国产精品久久视频 | 国产裸体bbb视频 | 免费黄色在线播放 | 国产婷婷vvvv激情久 | 欧美小视频在线 | 成人永久免费 | 黄色小说免费在线观看 | 国产在线1区 | 午夜精品一区二区三区在线播放 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 色五月情| 午夜精品一区二区三区视频免费看 | 中文字幕av日韩 | 99国产在线观看 | 日韩成人av在线 | 国产精品国产三级国产不产一地 | 久草久草在线 | 久久成人在线 | 久久精品成人欧美大片古装 | 五月婷婷av在线 | 日日夜夜精品免费观看 | 久久精品96 | 缴情综合网五月天 | www色| 日本激情视频中文字幕 | av九九 | 91免费的视频在线播放 | 91精品国产91热久久久做人人 | 国产日韩欧美网站 | 亚洲激情久久 | 久久影视网 | 国产精品一区二区视频 | 狠狠的干狠狠的操 | 国产精品第72页 | 国产一区二区在线免费视频 | 成人福利在线 | 国产人成免费视频 | 日本在线观看一区二区三区 | caobi视频 | 日韩精品一卡 | 91精品影视 | 91大神免费在线观看 | 久久精品—区二区三区 | 久99视频| 四虎成人精品永久免费av | 久久99久久精品国产 | 久久人人看 | 中文字幕在线观看第二页 | 亚洲成人家庭影院 | 日韩在线电影观看 | 99久久婷婷国产综合亚洲 | 在线电影中文字幕 | 亚洲一二三久久 | 美女久久视频 | 97品白浆高清久久久久久 | 国产精品视频专区 | 精品美女视频 | 国产日韩在线视频 | 天天操天天爱天天干 | 国产成人精品亚洲a | 国产探花视频在线播放 | 成人免费在线观看av | 久久久99国产精品免费 | 黄色小说网站在线 | 午夜精品视频一区二区三区在线看 | 国产91免费在线 | 麻豆视频免费看 | 欧美a性| 欧美日韩国产在线精品 | 91av影视| 日韩精品一区二区三区电影 | 精品国产一二三四区 | 国色天香在线观看 | 国产成人精品女人久久久 | 日韩综合在线观看 | 精品视频免费播放 | 国产亚洲精品久久久久久网站 | 久久综合操 | 精品在线免费观看 | 国产区 在线 | 久久国产免 | 欧美日韩国产欧美 | 麻豆免费在线播放 | 亚洲人xxx| 亚洲精品视频在线看 | 97在线观 | 日韩欧美视频一区二区 | 五月天视频网站 | 精品国自产在线观看 | 国产精品久久久久久久久久免费看 | 日韩精品一区二区在线 | 国产视频一区在线 | 九九免费观看全部免费视频 | 91精品少妇偷拍99 | 国产精品美女视频 | 精品久久久久久久久久岛国gif | 天天躁日日躁狠狠躁av麻豆 | 国产精品自产拍在线观看中文 | 亚洲 欧洲 国产 日本 综合 | 91女神的呻吟细腰翘臀美女 | 国产综合在线观看视频 | 午夜精品一区二区三区四区 | 欧美日韩一区三区 | 激情校园亚洲 | 免费看成人av | 欧美视频网址 | 久久精品视频观看 | 日韩精品一区二区三区中文字幕 | 视频在线91 | 久久久精品久久日韩一区综合 | 国产中文字幕网 | 欧美日韩中文国产 | 亚洲国产日韩av | 在线 视频 一区二区 | 国产精品黄色 | 五月婷婷综合在线 | av夜夜操 | 黄色软件网站在线观看 | 精品久久一区二区三区 | 日韩特级毛片 | 97成人精品视频在线播放 | 偷拍区另类综合在线 | 欧美日韩在线网站 | 欧美日韩视频在线一区 | 在线看国产 | 九九欧美 | 日韩在线观看你懂的 | 国产精品video | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲欧洲av在线 | 日韩久久精品一区二区 | 国产香蕉久久精品综合网 | 最近能播放的中文字幕 | 最近中文字幕久久 | 色天天综合久久久久综合片 | 欧美激情精品久久久久久变态 | 久久手机精品视频 | 久久成人亚洲欧美电影 | 久久黄色片 | 亚洲精品视频大全 | 91麻豆产精品久久久久久 | 美女黄视频免费 | 天天操夜夜操天天射 | 亚洲高清在线精品 | 2023国产精品自产拍在线观看 | 日本精品一区二区三区在线播放视频 | 正在播放国产一区 | 久久久久在线观看 | 久久免费在线 | 在线观看精品黄av片免费 | 九九精品毛片 | 国产精品久久久久久久电影 | 日韩精品在线播放 | 视频在线99 | 国产在线一卡 | 四虎成人精品永久免费av九九 | 久久69精品久久久久久久电影好 | 欧美成人h版在线观看 | 国产精品第一视频 | 91九色最新 | 99自拍视频在线观看 | 免费的国产精品 | 日韩有码中文字幕在线 | a级片网站| 成人久久亚洲 | 国产日韩精品一区二区 | 免费亚洲视频 | av免费观看网站 | 午夜精品久久久久久久久久久 | 在线免费观看羞羞视频 | 国精产品999国精产品视频 | 国产午夜精品福利视频 | 日韩激情网 | 成人毛片在线观看 | 久久久久久综合网天天 | 99色资源| 免费av网站观看 | 国产美女永久免费 | 中文十次啦| 国产免费又黄又爽 | 丁香视频全集免费观看 | 91久久一区二区 | 日韩av资源在线观看 | 国产色道| 亚洲精品黄| 天天操天天操一操 | 五月婷婷香蕉 | 欧美精品在线一区 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产黄色免费看 | av黄色成人 | 成人全视频免费观看在线看 | 成人va天堂 | 欧美激情一区不卡 | 国产欧美综合视频 | 久久午夜精品影院一区 | 992tv成人免费看片 | 国产精品成人品 | 免费99精品国产自在在线 | 亚洲精品视频在线观看免费视频 | 欧美日本一区 | 天天色棕合合合合合合 | 视频一区二区免费 | 免费看黄在线 | 精品视频在线播放 | 丁香六月婷婷综合 | 久久综合中文字幕 | 国产xxxx做受性欧美88 | 91成人免费在线 | 国产美女网站在线观看 | 日韩精品一区二区免费 | 首页中文字幕 | 91精品久久久久 | 亚洲国产经典视频 | 丝袜美腿在线播放 | 久久久91精品国产一区二区精品 | 天天干天天在线 | 九九免费在线观看视频 | 亚洲 成人 欧美 | 国产成人精品一区二区三区在线观看 | 亚洲午夜精品久久久久久久久 | 日韩精品久久久免费观看夜色 | 国产精品欧美在线 | 久久五月婷婷丁香 | 久久不射电影院 | 色www.| 成年人免费在线观看 | 美女视频久久久 | 亚洲小视频在线观看 | 天堂av在线免费观看 | 久久夜色精品国产欧美乱 | 91精品国产综合久久久久久久 | 国产91大片| 亚洲国产精品一区二区久久,亚洲午夜 | 欧产日产国产69 | 久草青青在线观看 | 国产爽视频 | 欧美日韩视频在线观看免费 | 成人毛片一区二区三区 | 久久亚洲影院 | 天天爱天天操天天爽 | 99精品欧美一区二区三区黑人哦 | 久久毛片高清国产 | 亚洲日本激情 | 在线国产99 | 人成在线免费视频 | 国产精品久久久久一区二区国产 | 天天干夜夜擦 | 亚洲天堂精品视频在线观看 | 国产精品久久久久aaaa九色 | 97久久久免费福利网址 | av在线播放中文字幕 | 欧美一二三区在线观看 | 男女精品久久 | 欧美日韩高清国产 | 国产伦精品一区二区三区… | 久久免费视频5 | 在线导航福利 | 日韩免费在线网站 | 成人一级电影在线观看 | 久久免费在线观看 | 少妇按摩av | 综合激情 | 成 人 黄 色 免费播放 | 天天干天天干天天干天天干天天干天天干 | 久久久综合九色合综国产精品 | 在线日本看片免费人成视久网 | 久久激情电影 | 中文字幕av在线不卡 | 91看片一区二区三区 | 成片人卡1卡2卡3手机免费看 | 日韩精品欧美一区 | 丝袜美女在线 | 97精品国产 | 久久精品4 | 99r在线观看 | 在线观看色网 | 婷婷色5月 | 欧美成人h版在线观看 | 亚洲一区美女视频在线观看免费 | 九九久久影视 | 一区二区三区四区久久 | 99视频网站 | 精品久久久久久国产偷窥 | 亚洲人xxx | 日本久久电影网 | 人人插人人艹 | 婷久久 | 狠狠色丁香久久婷婷综合_中 | 久久综合久久综合九色 | 一本之道乱码区 | 日韩三级不卡 | 成年人免费看片网站 | 久久调教视频 | 81国产精品久久久久久久久久 | 国产亚洲综合精品 | 国产伦精品一区二区三区四区视频 | 国产精品6 | 中文字幕一区在线观看视频 | 婷婷深爱网 | 国产精品 中文在线 | 欧美日韩一区久久 | 成人在线视频一区 | 国产毛片久久久 | 国产精品免费观看久久 | 中文字幕中文字幕在线一区 | 夜夜夜夜夜夜操 | 五月婷婷中文字幕 | 国产91精品一区二区 | 久久久久久久久久亚洲精品 | 欧美天天射| 久青草视频 | 91九色蝌蚪视频在线 | 区一区二区三区中文字幕 | 伊人成人精品 | 久久网页 | 在线观看中文字幕av | 亚洲天堂色婷婷 | 公开超碰在线 | 久久成人综合 | 中文在线字幕免 | 在线观看91久久久久久 | 成年人在线观看免费视频 | 欧美一级片在线播放 | 久久电影中文字幕视频 | 丁五月婷婷 | 国产亚洲免费观看 | 五月天狠狠操 | 激情五月在线观看 | 天天干天天碰 | 国产高清在线免费视频 | av电影 一区二区 | 久久国产色 | 99热这里有| 免费在线观看成人小视频 | 美女网站黄在线观看 | 久久亚洲综合色 | 亚洲老妇xxxxxx | 久久久久美女 | 国产艹b视频 | 国产精品自拍av | 日韩电影在线观看中文字幕 | 99草视频在线观看 | 狠狠狠狠狠狠 | 五月天激情婷婷 | 亚洲黄色免费在线看 | 亚洲乱亚洲乱亚洲 | 久久99视频 | 精品在线播放 | 亚洲观看黄色网 | 久久久久久久影院 | 久久综合狠狠综合久久综合88 | 一区二区伦理电影 | 亚洲伦理中文字幕 | 超碰人人99 | 99精品热| 91激情视频在线 | 成人在线播放网站 | 久日精品 | 成人va在线观看 | 看黄色.com| 日韩一二三| 日韩在线观看网站 | 久久久久久免费视频 | 首页av在线| 91亚洲成人 | 97国产情侣爱久久免费观看 | 欧美精品乱码久久久久久 | 日韩视频免费看 | 91新人在线观看 | 久久精品国产精品亚洲精品 | 亚洲精品免费在线观看 | 久99久精品 | 91自拍视频在线 | 国产黄在线 | 久久成人免费电影 | 国产一级二级三级视频 | 久久免费的视频 | 日韩av中文在线观看 | 国产色在线,com| 国产精品美女在线 | 成人午夜免费剧场 | 亚洲精品国产区 | av在线网站大全 | 日韩在线视频免费播放 | 91传媒视频在线观看 | 亚洲综合视频在线 | 日韩欧美在线观看一区二区三区 | 日韩中文字幕免费视频 | 精品久久久久久国产91 | www.com久久久 | 久久伊99综合婷婷久久伊 | 免费开视频 | 久久精品国产一区二区三 | 国产在线一区二区三区播放 | 成人午夜电影网站 | 国产精品大片在线观看 | 久久精品久久精品久久 | 色瓜| 亚洲激情婷婷 | 999久久精品 | 日日夜夜天天干 | 国产视频1区2区3区 久久夜视频 | 日韩另类在线 | 午夜精品电影一区二区在线 | 色婷婷丁香| 349k.cc看片app | 337p欧美 | 中文字幕成人在线观看 | 久久综合欧美精品亚洲一区 | 99亚洲精品视频 | 手机看片久久 | 国产高h视频| 国产精品二区三区 | 国产中文字幕视频 | 视频一区久久 | 久久成人福利 | 欧美日韩国产二区三区 | 99爱国产精品 | 免费涩涩网站 | 午夜精选视频 | 日韩xxxbbb | 美女天天操 | 在线看片一区 | 在线韩国电影免费观影完整版 | 一级黄色片在线免费观看 | 国产 色| 网站在线观看你们懂的 | 麻豆91精品91久久久 | 亚洲美女在线一区 | 婷婷精品国产欧美精品亚洲人人爽 | www.午夜色.com| 91在线观看视频 | 国产资源精品在线观看 | 插综合网 | 久久久久久久久影院 | 97超碰人人澡 | 久久黄色网址 | 欧美一级xxxx | 少妇激情久久 | 日韩精品免费一区二区三区 | 亚洲综合狠狠干 | 在线播放第一页 | 国产色视频网站2 | 91热精品视频 | 久久久久久久久久久免费视频 | 国产日韩欧美在线一区 | 日韩激情久久 | www.久久久.cum | 天天天综合 | 99国产精品视频免费观看一公开 | 中文字幕国语官网在线视频 | 国产精品一码二码三码在线 | 9797在线看片亚洲精品 | 深爱五月激情五月 | 精品亚洲免费 | 在线一区观看 | 国产自产在线视频 | 日韩在线三级 | 国产成人久久精品亚洲 | 欧美精品首页 | 999视频在线观看 | 久久不射电影院 | 日韩欧美高清在线 | 国产成人一区二区三区久久精品 | 91麻豆高清视频 | 国产精品美女久久久久久免费 | 国产成人91| 久久国产网 | 久久久国产在线视频 | 狠狠操狠狠干天天操 | 亚洲成人家庭影院 | 色婷婷一 | 国产69久久 | 久久国产品 | 日韩精品免费一区二区在线观看 | 国产精品 中文在线 | 国产99爱| 精品国产一区二区三区久久久蜜月 | 日韩三级成人 | 激情婷婷在线 | a精品视频 |