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

Linux內核態搶占機制分析

系統 Linux
本文首先介紹非搶占式內核(Non-Preemptive Kernel)和可搶占式內核(Preemptive Kernel)的區別。接著分析Linux下有兩種搶占:用戶態搶占(User Preemption)、內核態搶占(Kernel Preemption)。然后分析了在內核態下:如何判斷能否搶占內核;何時觸發重新調度;搶占發生的時機;什么時候不能搶占內核。最后分析了2.6kernel中如何支持搶占內核。

Linux內核態搶占機制分析

本文首先介紹非搶占式內核(Non-Preemptive Kernel)和可搶占式內核(Preemptive Kernel)的區別。接著分析Linux下有兩種搶占:用戶態搶占(User Preemption)、內核態搶占(Kernel Preemption)。然后分析了在內核態下:如何判斷能否搶占內核(什么是可搶占的條件);何時觸發重新調度(何時設置可搶占條件);搶占發生的時機(何時檢查可搶占的條件);什么時候不能搶占內核。***分析了2.6kernel中如何支持搶占內核。

1. 非搶占式和可搶占式內核的區別

為了簡化問題,我使用嵌入式實時系統uC/OS作為例子。首先要指出的是,uC/OS只有內核態,沒有用戶態,這和Linux不一樣。

多任務系統中,內核負責管理各個任務,或者說為每個任務分配CPU時間,并且負責任務之間的通訊。內核提供的基本服務是任務切換。調度(Scheduler),英文還有一詞叫dispatcher,也是調度的意思。這是內核的主要職責之一,就是要決定該輪到哪個任務運行了。多數實時內核是基于優先級調度法的。每個任務根據其重要程度的不同被賦予一定的優先級。基于優先級的調度法指,CPU總是讓處在就緒態的優先級***的任務先運行。然而,究竟何時讓高優先級任務掌握CPU的使用權,有兩種不同的情況,這要看用的是什么類型的內核,是不可剝奪型的還是可剝奪型內核。

非搶占式內核

非搶占式內核是由任務主動放棄CPU的使用權。非搶占式調度法也稱作合作型多任務,各個任務彼此合作共享一個CPU。異步事件還是由中斷服務來處理。中斷服務可以使一個高優先級的任務由掛起狀態變為就緒狀態。但中斷服務以后控制權還是回到原來被中斷了的那個任務,直到該任務主動放棄CPU的使用權時,那個高優先級的任務才能獲得CPU的使用權。非搶占式內核如下圖所示。

非搶占式內核的優點有:

  • 中斷響應快(與搶占式內核比較);
  • 允許使用不可重入函數;
  • 幾乎不需要使用信號量保護共享數據。運行的任務占有CPU,不必擔心被別的任務搶占。這不是絕對的,在打印機的使用上,仍需要滿足互斥條件。

非搶占式內核的缺點有:

  • 任務響應時間慢。高優先級的任務已經進入就緒態,但還不能運行,要等到當前運行著的任務釋放CPU。
  • 非搶占式內核的任務級響應時間是不確定的,不知道什么時候***優先級的任務才能拿到CPU的控制權,完全取決于應用程序什么時候釋放CPU。

搶占式內核

使用搶占式內核可以保證系統響應時間。***優先級的任務一旦就緒,總能得到CPU的使用權。當一個運行著的任務使一個比它優先級高的任務進入了就緒態,當前任務的CPU使用權就會被剝奪,或者說被掛起了,那個高優先級的任務立刻得到了CPU的控制權。如果是中斷服務子程序使一個高優先級的任務進入就緒態,中斷完成時,中斷了的任務被掛起,優先級高的那個任務開始運行。搶占式內核如下圖所示。

搶占式內核的優點有:

  • 使用搶占式內核,***優先級的任務什么時候可以執行,可以得到CPU的使用權是可知的。使用搶占式內核使得任務級響應時間得以***化。

搶占式內核的缺點有:

  • 不能直接使用不可重入型函數。調用不可重入函數時,要滿足互斥條件,這點可以使用互斥型信號量來實現。如果調用不可重入型函數時,低優先級的任務CPU的使用權被高優先級任務剝奪,不可重入型函數中的數據有可能被破壞。

2. Linux下的用戶態搶占和內核態搶占

Linux除了內核態外還有用戶態。用戶程序的上下文屬于用戶態,系統調用和中斷處理例程上下文屬于內核態。在2.6 kernel以前,Linux kernel只支持用戶態搶占。

2.1 用戶態搶占(User Preemption)

在kernel返回用戶態(user-space)時,并且need_resched標志為1時,scheduler被調用,這就是用戶態搶占。當kernel返回用戶態時,系統可以安全的執行當前的任務,或者切換到另外一個任務。當中斷處理例程或者系統調用完成后,kernel返回用戶態時,need_resched標志的值會被檢查,假如它為1,調度器會選擇一個新的任務并執行。

中斷和系統調用的返回路徑(return path)的實現在entry.S中(entry.S不僅包括kernel entry code,也包括kernel exit code)。

2.2 內核態搶占(Kernel Preemption)

在2.6 kernel以前,kernel code(中斷和系統調用屬于kernel code)會一直運行,直到code被完成或者被阻塞(系統調用可以被阻塞)。在 2.6 kernel里,Linux kernel變成可搶占式。當從中斷處理例程返回到內核態(kernel-space)時,kernel會檢查是否可以搶占和是否需要重新調度。kernel可以在任何時間點上搶占一個任務(因為中斷可以發生在任何時間點上),只要在這個時間點上kernel的狀態是安全的、可重新調度的。

3. 內核態搶占的設計

3.1 可搶占的條件

要滿足什么條件,kernel才可以搶占一個任務的內核態呢?

  • 沒持有鎖。鎖是用于保護臨界區的,不能被搶占。
  • Kernel code可重入(reentrant)。因為kernel是SMP-safe的,所以滿足可重入性。

如何判斷當前上下文(中斷處理例程、系統調用、內核線程等)是沒持有鎖的?Linux在每個每個任務的thread_info結構中增加了preempt_count變量作為preemption的計數器。這個變量初始為0,當加鎖時計數器增一,當解鎖時計數器減一。

3.2 內核態需要搶占的觸發條件

內核提供了一個need_resched標志(這個標志在任務結構thread_info中)來表明是否需要重新執行調度。

3.3 何時觸發重新調度

set_tsk_need_resched():設置指定進程中的need_resched標志

clear_tsk need_resched():清除指定進程中的need_resched標志

need_resched():檢查need_ resched標志的值;如果被設置就返回真,否則返回假

什么時候需要重新調度:

  • 時鐘中斷處理例程檢查當前任務的時間片,當任務的時間片消耗完時,scheduler_tick()函數就會設置need_resched標志;
  • 信號量、等到隊列、completion等機制喚醒時都是基于waitqueue的,而waitqueue的喚醒函數為default_wake_function,其調用try_to_wake_up將被喚醒的任務更改為就緒狀態并設置need_resched標志。
  • 設置用戶進程的nice值時,可能會使高優先級的任務進入就緒狀態;
  • 改變任務的優先級時,可能會使高優先級的任務進入就緒狀態;
  • 新建一個任務時,可能會使高優先級的任務進入就緒狀態;
  • 對CPU(SMP)進行負載均衡時,當前任務可能需要放到另外一個CPU上運行;

3.4 搶占發生的時機(何時檢查可搶占條件)

  • 當一個中斷處理例程退出,在返回到內核態時(kernel-space)。這是隱式的調用schedule()函數,當前任務沒有主動放棄CPU使用權,而是被剝奪了CPU使用權。
  • 當kernel code從不可搶占狀態變為可搶占狀態時(preemptible again)。也就是preempt_count從正整數變為0時。這也是隱式的調用schedule()函數。
  • 一個任務在內核態中顯式的調用schedule()函數。任務主動放棄CPU使用權。
  • 一個任務在內核態中被阻塞,導致需要調用schedule()函數。任務主動放棄CPU使用權。

3.5 禁用/使能可搶占條件的操作

對preempt_count操作的函數有add_preempt_count()、sub_preempt_count()、inc_preempt_count()、dec_preempt_count()。

使能可搶占條件的操作是preempt_enable(),它調用dec_preempt_count()函數,然后再調用preempt_check_resched()函數去檢查是否需要重新調度。

禁用可搶占條件的操作是preempt_disable(),它調用inc_preempt_count()函數。

在內核中有很多函數調用了preempt_enable()和preempt_disable()。比如spin_lock()函數調用了preempt_disable()函數,spin_unlock()函數調用了preempt_enable()函數。

3.6 什么時候不允許搶占

preempt_count()函數用于獲取preempt_count的值,preemptible()用于判斷內核是否可搶占。

有幾種情況Linux內核不應該被搶占,除此之外,Linux內核在任意一點都可被搶占。這幾種情況是:

  • 內核正進行中斷處理。在Linux內核中進程不能搶占中斷(中斷只能被其他中斷中止、搶占,進程不能中止、搶占中斷),在中斷例程中不允許進行進程調度。進程調度函數schedule()會對此作出判斷,如果是在中斷中調用,會打印出錯信息。
  • 內核正在進行中斷上下文的Bottom Half(中斷的下半部)處理。硬件中斷返回前會執行軟中斷,此時仍然處于中斷上下文中。
  • 內核的代碼段正持有spinlock自旋鎖、writelock/readlock讀寫鎖等鎖,處干這些鎖的保護狀態中。內核中的這些鎖是為了在SMP系統中短時間內保證不同CPU上運行的進程并發執行的正確性。當持有這些鎖時,內核不應該被搶占,否則由于搶占將導致其他CPU長期不能獲得鎖而死等。
  • 內核正在執行調度程序Scheduler。搶占的原因就是為了進行新的調度,沒有理由將調度程序搶占掉再運行調度程序。
  • 內核正在對每個CPU“私有”的數據結構操作(Per-CPU date structures)。在SMP中,對于per-CPU數據結構未用spinlocks保護,因為這些數據結構隱含地被保護了(不同的CPU有不一樣的per-CPU數據,其他CPU上運行的進程不會用到另一個CPU的per-CPU數據)。但是如果允許搶占,但一個進程被搶占后重新調度,有可能調度到其他的CPU上去,這時定義的Per-CPU變量就會有問題,這時應禁搶占。

4. Linux內核態搶占的實現

4.1 數據結構

[cpp] view plain copy

  1. struct thread_info {   
  2.  
  3.     struct task_struct  *task;      /* main task structure */   
  4.  
  5.     struct exec_domain  *exec_domain;   /* execution domain */   
  6.  
  7.     /**  
  8.  
  9.      * 如果有TIF_NEED_RESCHED標志,則必須調用調度程序。  
  10.  
  11.      */   
  12.  
  13.     unsigned long       flags;      /* low level flags */   
  14.  
  15.     /**  
  16.  
  17.      * 線程標志:  
  18.  
  19.      *     TS_USEDFPU:表示進程在當前執行過程中,是否使用過FPU、MMX和XMM寄存器。  
  20.  
  21.      */   
  22.  
  23.     unsigned long       status;     /* thread-synchronous flags */   
  24.  
  25.     /**  
  26.  
  27.      * 可運行進程所在運行隊列的CPU邏輯號。  
  28.  
  29.      */   
  30.  
  31.     __u32           cpu;        /* current CPU */   
  32.  
  33.     __s32           preempt_count; /* 0 => preemptable, <0 => BUG */   
  34.    
  35.  
  36.     mm_segment_t        addr_limit; /* thread address space:  
  37.  
  38.                            0-0xBFFFFFFF for user-thead  
  39.  
  40.                            0-0xFFFFFFFF for kernel-thread  
  41.  
  42.                         */   
  43.  
  44.     struct restart_block    restart_block;    
  45.    
  46.  
  47.     unsigned long           previous_esp;   /* ESP of the previous stack in case  
  48.  
  49.                            of nested (IRQ) stacks  
  50.  
  51.                         */   
  52.  
  53.     __u8            supervisor_stack[0];   
  54.  
  55. };   

 

4.2 代碼流程

禁用/使能可搶占條件的函數

[cpp] view plain copy

  1. #ifdef CONFIG_DEBUG_PREEMPT   
  2.  
  3.   extern void fastcall add_preempt_count(int val);   
  4.  
  5.   extern void fastcall sub_preempt_count(int val);   
  6.  
  7. #else   
  8.  
  9. # define add_preempt_count(val) do { preempt_count() += (val); } while (0)   
  10.  
  11. # define sub_preempt_count(val) do { preempt_count() -= (val); } while (0)   
  12.  
  13. #endif    
  14.    
  15.  
  16. #define inc_preempt_count() add_preempt_count(1)   
  17.  
  18. #define dec_preempt_count() sub_preempt_count(1)   
  19.    
  20.  
  21. /**  
  22.  
  23.  * 在thread_info描述符中選擇preempt_count字段  
  24.  
  25.  */   
  26.  
  27. #define preempt_count() (current_thread_info()->preempt_count)      
  28.  
  29. #ifdef CONFIG_PREEMPT      
  30.  
  31. asmlinkage void preempt_schedule(void);    
  32.    
  33.  
  34. /**  
  35.  
  36.  * 使搶占計數加1  
  37.  
  38.  */   
  39.  
  40. #define preempt_disable() \   
  41.  
  42. do { \   
  43.  
  44.     inc_preempt_count(); \   
  45.  
  46.     barrier(); \   
  47.  
  48. } while (0)   
  49.    
  50.  
  51. /**  
  52.  
  53.  * 使搶占計數減1  
  54.  
  55.  */   
  56.  
  57. #define preempt_enable_no_resched() \   
  58.  
  59. do { \   
  60.  
  61.     barrier(); \   
  62.  
  63.     dec_preempt_count(); \   
  64.  
  65. } while (0)    
  66.    
  67.  
  68. #define preempt_check_resched() \   
  69.  
  70. do { \   
  71.  
  72.     if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \   
  73.  
  74.         preempt_schedule(); \   
  75.  
  76. } while (0)    
  77.    
  78.  
  79. /**  
  80.  
  81.  * 使搶占計數減1,并在thread_info描述符的TIF_NEED_RESCHED標志被置為1的情況下,調用preempt_schedule()  
  82.  
  83.  */   
  84.  
  85. #define preempt_enable() \   
  86.  
  87. do { \   
  88.  
  89.     preempt_enable_no_resched(); \   
  90.  
  91.     preempt_check_resched(); \   
  92.  
  93. } while (0)   
  94.  
  95.    
  96.  
  97. #else    
  98.    
  99.  
  100. #define preempt_disable()       do { } while (0)   
  101.  
  102. #define preempt_enable_no_resched() do { } while (0)   
  103.  
  104. #define preempt_enable()        do { } while (0)   
  105.  
  106. #define preempt_check_resched()     do { } while (0)    
  107.    
  108.  
  109. #endif   

 

設置need_resched標志的函數

[cpp] view plain copy

 

  1. static inline void set_tsk_need_resched(struct task_struct *tsk)   
  2.  
  3. {   
  4.  
  5.     set_tsk_thread_flag(tsk,TIF_NEED_RESCHED);   
  6.  
  7. }    
  8.    
  9.  
  10. static inline void clear_tsk_need_resched(struct task_struct *tsk)   
  11.  
  12. {   
  13.  
  14.     clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED);   
  15.  
  16. }   
責任編輯:龐桂玉 來源: 嵌入式Linux中文站
相關推薦

2021-05-19 07:56:26

Linux內核搶占

2025-10-17 09:24:51

2025-10-31 01:22:00

2023-10-26 11:39:54

Linux系統CPU

2025-09-26 02:22:00

2014-07-29 15:44:33

Linux內核Crash

2021-12-20 09:53:51

用戶態內核態應用程序

2009-10-29 09:41:01

Linux內核DeviceMappe

2021-02-07 09:32:02

惡意軟件黑客網絡攻擊

2019-04-10 13:43:19

Linux內核進程負載

2020-11-20 07:55:55

Linux內核映射

2025-10-09 11:10:00

開發操作系統Linux

2021-09-28 07:12:09

Linux內核入口

2021-09-06 07:45:08

LinuxLinux內核

2025-04-18 04:05:00

2017-01-16 14:48:42

Linux信號機制分析

2017-01-16 15:05:17

Linux信號機制分析

2017-03-17 15:05:05

Linux內核源碼do_fork

2009-12-11 15:10:22

2021-08-31 07:54:24

TCPIP協議
點贊
收藏

51CTO技術棧公眾號

久久久国产精华液| 亚洲精品一区二区18漫画| av电影在线观看一区二区三区| 日韩高清在线观看| 麻豆国产精品va在线观看不卡| 小日子的在线观看免费第8集| 国产777精品精品热热热一区二区| 久久九九99视频| 亚洲va男人天堂| 日韩视频免费观看高清| 91亚洲国产成人久久精品| 欧美成人aa大片| 午夜激情在线观看视频| 韩国日本一区| 中文字幕永久在线不卡| 国产在线一区二区三区播放| 在线免费观看一级片| 在线精品亚洲| 久久精品国产亚洲精品| 欧美丰满少妇人妻精品| 久久99成人| 欧美日韩一区视频| 日韩在线一级片| 91福利国产在线观看菠萝蜜| 欧美国产综合色视频| 国产一区二区精品在线| 国产视频在线一区| 免费成人在线视频观看| 欧美中文在线字幕| 精品视频在线观看免费| 在线精品视频在线观看高清| 一区二区亚洲欧洲国产日韩| 日本少妇色视频| 99精品在免费线中文字幕网站一区 | 中文字幕乱码亚洲无线精品一区| 亚洲一级黄色av| 国产精品久久AV无码| 网站一区二区| 91精品国产综合久久久久| 亚洲色图 在线视频| 欧美电影免费观看高清完整| 午夜久久久久久| 激情成人开心网| 日本在线免费| 中文字幕不卡在线| 日韩精品欧美专区| 久久综合九色综合久| 99久久综合狠狠综合久久| 产国精品偷在线| 国产丰满美女做爰| 国产高清精品在线| 成人片在线免费看| 狠狠躁夜夜躁av无码中文幕| 国产91丝袜在线18| 国产精品久久久久久久久久久久冷| 国产男女猛烈无遮挡| 久久99精品国产麻豆婷婷洗澡| 国产精品日本精品| 在线观看国产精品入口男同| 免费欧美日韩国产三级电影| 国产精品青青在线观看爽香蕉| 天天天天天天天干| 蜜桃视频在线观看一区二区| 国产剧情日韩欧美| 国产精品久久久久久无人区| 国产一区二区导航在线播放| 99国产超薄丝袜足j在线观看 | 性欧美超级视频| 在线视频一区二区免费| 尤蜜粉嫩av国产一区二区三区| 成人精品国产| 欧美一区二区在线播放| 日本黄色www| 国产精品sss在线观看av| 亚洲精品电影网在线观看| 日本xxx在线播放| 成人在线视频免费观看| 欧美大尺度在线观看| 亚洲国产精品午夜在线观看| 日韩精品每日更新| 91精品视频在线免费观看| 亚洲AV无码一区二区三区性| 97精品超碰一区二区三区| 亚洲春色在线视频| 五月花成人网| 色噜噜狠狠色综合欧洲selulu | 成人精品视频一区二区三区| 就去色蜜桃综合| 日韩黄色影院| 亚洲成人综合视频| 欧美成人黄色网址| 91麻豆精品国产91久久久久推荐资源| 日韩精品免费在线播放| 99久久99久久精品免费| 韩日精品视频| 国产精品国产三级国产aⅴ9色| 国产亲伦免费视频播放| 成人免费视频视频| 午夜欧美性电影| 波多野结衣乳巨码无在线观看| 在线观看一区不卡| 亚洲美女高潮久久久| 女人av一区| 欧美激情欧美激情在线五月| 91视频在线视频| 国产99久久久精品| 亚洲欧美综合一区| 美国十次av导航亚洲入口| 一区二区高清视频在线观看| 成人免费毛片网| 亚洲精品tv| 亚洲精品久久在线| 青青青在线免费观看| 久久九九99| 官网99热精品| 久草资源在线| 91国偷自产一区二区三区观看| 人妻精品久久久久中文字幕69| 国产一区二区三区四区| 久久久久日韩精品久久久男男| 亚洲专区第一页| 久久婷婷色综合| 青草视频在线观看视频| www.久久久久爱免| 国产亚洲美女精品久久久| 日韩三级视频在线播放| 国产二区国产一区在线观看| 一本一道久久a久久综合精品| 忘忧草在线影院两性视频| 日韩欧美另类在线| 极品美妇后花庭翘臀娇吟小说| 久久久综合网| 鲁鲁狠狠狠7777一区二区| 7777kkk亚洲综合欧美网站| 欧美一二三在线| 欧美性猛交xxxx乱大交少妇| 日韩精品成人一区二区三区| 欧美国产视频在线观看| 男人av在线播放| 亚洲精品wwww| 日本一区二区免费在线观看| 福利一区二区在线| 国产黄色激情视频| 日韩精品视频在线看| 另类美女黄大片| 国产99久久九九精品无码免费| 中文字幕一区二区三区在线观看| 高清一区在线观看| 久久综合电影| 国产精品视频色| 国产精品二线| 在线观看www91| 亚洲午夜精品久久久久久高潮| 日韩精品乱码av一区二区| 日韩欧美亚洲精品| 国产第一精品| 久久亚洲精品网站| www黄色在线观看| 一卡二卡三卡日韩欧美| 中文字幕在线国产| 亚洲久色影视| 女女同性女同一区二区三区91| 亚洲天堂导航| 亚洲小视频在线| 影音先锋黄色网址| 亚洲日本va午夜在线影院| 一起草最新网址| 超碰在线观看免费| 欧美精品一二三| 五月天av网站| jvid福利写真一区二区三区| 国产麻花豆剧传媒精品mv在线| 国产探花一区| 成人免费高清完整版在线观看| 黄色动漫在线| 亚洲国产小视频在线观看| 中文字幕视频网站| 国产精品电影一区二区三区| 色偷偷中文字幕| 99在线热播精品免费99热| 日本一区二区在线| 99精品在线免费观看| 欧美激情在线播放| 免费毛片在线| 制服丝袜av成人在线看| 青青草激情视频| 91亚洲精品一区二区乱码| 日韩av片网站| 欧美精品偷拍| 欧美亚洲国产免费| 国产精品xnxxcom| 91精品国产91久久久久久最新| 韩国中文字幕2020精品| 欧美一区二视频| 潘金莲一级淫片aaaaaa播放| 中文字幕在线不卡一区| 粉嫩av懂色av蜜臀av分享| 老色鬼精品视频在线观看播放| 国产美女在线一区| 日韩综合网站| 蜜桃狠狠色伊人亚洲综合网站| 日韩福利在线观看| 欧美在线观看一区二区三区| 男人在线资源站| 亚洲欧美另类自拍| 国产夫妻自拍av| 欧美亚洲精品一区| 国产污片在线观看| 亚洲欧美日韩在线| 人人人妻人人澡人人爽欧美一区| 国产成人精品免费| 男生操女生视频在线观看| 销魂美女一区二区三区视频在线| 欧美图片激情小说| 国产精品国产一区| 日韩欧美一区二区三区四区五区| 97久久综合区小说区图片区| 成人免费视频在线观看超级碰| 中文在线免费视频| 欧美劲爆第一页| 好操啊在线观看免费视频| 亚洲图片在线综合| 天堂网在线播放| 日韩欧美国产不卡| 97国产成人无码精品久久久| 91黄色免费网站| 在线观看免费av片| 偷拍亚洲欧洲综合| 久久久久无码国产精品不卡| 中文字幕日韩一区二区| 久久丫精品忘忧草西安产品| 99久久久精品免费观看国产蜜| 欧美熟妇精品一区二区| 国产在线观看一区二区| 污版视频在线观看| 美女视频一区在线观看| 一路向西2在线观看| 久久久夜精品| 手机看片福利日韩| 日韩国产欧美视频| 尤蜜粉嫩av国产一区二区三区| 久久先锋影音| 国产成人精品无码播放| 久久天天综合| 九九热免费精品视频| 视频一区二区国产| 污污动漫在线观看| 久久精品国产网站| 91丝袜超薄交口足| 国产精品一区二区x88av| 善良的小姨在线| 国产高清一区日本| fc2成人免费视频| 成人avav影音| 精品国产人妻一区二区三区| av午夜精品一区二区三区| 亚洲蜜桃精久久久久久久久久久久| 成人性生交大合| 日本一卡二卡在线| 91丨九色丨蝌蚪丨老版| 国产亚洲无码精品| 中文字幕精品三区| 老熟妻内射精品一区| 亚洲视频在线一区| 天天看片中文字幕| 午夜精品久久久久久| 欧美日韩精品区| 欧美在线free| 国产99久久九九精品无码免费| 精品成人一区二区三区| 亚洲欧洲视频在线观看| 亚洲一区二区久久| 99福利在线| 97精品国产97久久久久久免费| 中文在线最新版地址| 国产精品视频男人的天堂| 国产精品久久久久久久久久辛辛 | 91在线观看高清| 中文字幕第二区| 亚洲免费在线观看视频| 日本三级片在线观看| 日本道色综合久久| 国产三级漂亮女教师| 日韩av在线免费观看| av午夜在线| 欧美极品欧美精品欧美视频| 黄色综合网址| 91美女片黄在线观看游戏| 波多野结衣在线一区二区| 欧美亚洲免费高清在线观看| 欧美96在线丨欧| 91蝌蚪视频在线观看| 国产精品一区二区你懂的| 免费黄色在线视频| 亚洲男人的天堂在线观看| 羞羞影院体验区| 91精品国产综合久久久蜜臀粉嫩| 天天射天天操天天干| 中文字幕一区二区精品| 91九色国产在线播放| 国产女人18毛片水18精品| 黄色欧美在线| 婷婷视频在线播放| 久久午夜av| 少妇熟女视频一区二区三区| 国产精品久久久久久久久搜平片| 国产精品xxxx喷水欧美| 在线电影一区二区三区| 青青国产在线| 欧美精品激情在线| 天堂综合在线播放| 日本精品一区二区三区不卡无字幕| 国产精品vip| 日韩av卡一卡二| 久久久综合网站| 国产一级一级片| 在线成人高清不卡| 国产一二三区在线视频| 国产69精品久久久| 欧美不卡在线观看| 亚洲视频欧美在线| 日韩中文字幕1| 一级国产黄色片| 一区二区三区在线视频免费观看| 中文字幕av在线免费观看| 日韩久久免费视频| 岛国av在线播放| 国产精品区一区二区三在线播放| 亚洲综合专区| www激情五月| 亚洲天堂久久久久久久| 国产又粗又黄又爽| 中文字幕自拍vr一区二区三区| 欧美黑人一区| 久久久久久久久四区三区| 亚洲日本国产| 国产+高潮+白浆+无码| 亚洲综合999| 国产哺乳奶水91在线播放| 欧美成人精品不卡视频在线观看| 亚洲91在线| 懂色av一区二区三区四区五区| 男人的j进女人的j一区| 亚洲一级片在线播放| 欧美性猛交xxxxxx富婆| 粉嫩av一区| 国产一区二区在线免费| 色中色综合网| 日本美女视频一区| 亚洲欧美成aⅴ人在线观看| 97人妻人人澡人人爽人人精品| 日韩在线观看免费av| 国产精品igao视频网网址不卡日韩| 亚洲精品偷拍视频| 国产精品2024| 精品无码久久久久久久| 亚洲第一网站男人都懂| 擼擼色在线看观看免费| 久久亚洲高清| 免费成人美女在线观看.| 91狠狠综合久久久| 日韩一区二区在线观看视频播放| 污污片在线免费视频| 国产一区二区三区四区hd| 中文高清一区| 久久国产柳州莫菁门| 欧美日韩免费观看一区三区| 黄色在线论坛| 国产精品成人一区二区三区| 国产农村妇女精品一区二区| 亚洲图片另类小说| 欧美精选午夜久久久乱码6080| 伊人手机在线| 久久精品一二三区| 蜜臀91精品一区二区三区 | 国产精品中文字幕久久久| 中文字幕av亚洲精品一部二部| 国产chinese中国hdxxxx| 色婷婷综合久色| 国产视频在线播放| 激情一区二区三区| 免费成人性网站| 国产第一页第二页| 国产亚洲a∨片在线观看| 国产精品一区二区三区四区在线观看 | 国产精品自拍偷拍| 亚洲精品电影| 一区二区不卡免费视频| 欧美精品在线一区二区三区| 136福利第一导航国产在线| 亚欧洲精品在线视频免费观看| 国产高清精品久久久久| 懂色av中文字幕| 久久91精品国产91久久久| 国产99精品| 又大又长粗又爽又黄少妇视频| 欧美中文字幕一区二区三区| 国精产品一区一区三区mba下载| 亚洲v国产v| 91亚洲永久精品|