午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Linux內核設備驅動之內核的時間管理筆記整理

Linux內核設備驅動之內核的時間管理筆記整理

熱門標簽:云會外呼系統 外呼系統不彈窗 外呼系統的經營范圍 涪陵商都400電話開通辦理 柳州市機器人外呼系統報價 廈門營銷外呼系統平臺 申請400電話價格多少 智能電話機器人坐席 安陽ai電銷機器人軟件
/******************
 * linux內核的時間管理
 ******************/

(1)內核中的時間概念

時間管理在linux內核中占有非常重要的作用。

相對于事件驅動而言,內核中有大量函數是基于時間驅動的。

有些函數是周期執行的,比如每10毫秒刷新一次屏幕;

有些函數是推后一定時間執行的,比如內核在500毫秒后執行某項任務。

要區分:

  • *絕對時間和相對時間
  • *周期性產生的事件和推遲執行的事件

周期性事件是由系統系統定時器驅動的

(2)HZ值

內核必須在硬件定時器的幫助下才能計算和管理時間。

定時器產生中斷的頻率稱為節拍率(tick rate)。

在內核中指定了一個變量HZ,內核初始化的時候會根據這個值確定定時器的節拍率。

HZ定義在<asm/param.h>,在i386平臺上,目前采用的HZ值是1000。

也就是時鐘中斷每秒發生1000次,周期為1毫秒。即:

#define HZ 1000

注意!HZ不是個固定不變的值,它是可以更改的,可以在內核源代碼配置的時候輸入。

不同的體系結構其HZ值是不一樣的,比如arm就采用100。

如果在驅動中要使用系統的中斷頻率,直接使用HZ,而不要用100或1000

a.理想的HZ值

i386的HZ值一直采用100,直到2.5版后才改為1000。

提高節拍率意味著時鐘中斷產生的更加頻繁,中斷處理程序也會更頻繁地執行。

帶來的好處有:

  • *內核定時器能夠以更高的頻率和更高的準確度運行
  • *依賴定時器執行的系統調用,比如poll()和select(),運行的精度更高
  • *提高進程搶占的準確度

(縮短了調度延時,如果進程還剩2ms時間片,在10ms的調度周期下,進程會多運行8ms。
由于耽誤了搶占,對于一些對時間要求嚴格的任務會產生影響)

壞處有:

*節拍率要高,系統負擔越重。

中斷處理程序將占用更多的處理器時間。

(3)jiffies

全局變量jiffies用于記錄系統啟動以來產生的節拍的總數。

啟動時,jiffies初始化為0,此后每次時鐘中斷處理程序都會增加該變量的值。

這樣,系統啟動后的運行時間就是jiffies/HZ秒

jiffies定義于<linux/jiffies.h>中:

extern unsigned long volatile jiffies;

jiffies變量總是為unsigned long型。

因此在32位體系結構上是32位,而在64位體系上是64位。對于32位的jiffies,如果HZ為1000,49.7天后會溢出。雖然溢出的情況不常見,但程序在檢測超時時仍然可能因為回繞而導致錯誤。linux提供了4個宏來比較節拍計數,它們能正確地處理節拍計數回繞。

#include <linux/jiffies.h>
#define time_after(unknown, known)    // unknow > known
#define time_before(unknown, known)   // unknow < known
#define time_after_eq(unknown, known)  // unknow >= known
#define time_before_eq(unknown, known)  // unknow <= known

unknown通常是指jiffies,known是需要對比的值(常常是一個jiffies加減后計算出的相對值)例:

unsigned long timeout = jiffies + HZ/2; /* 0.5秒后超時 */
...
if(time_before(jiffies, timeout)){
/* 沒有超時,很好 */
}else{
/* 超時了,發生錯誤 */

time_before可以理解為如果在超時(timeout)之前(before)完成

*系統中還聲明了一個64位的值jiffies_64,在64位系統中jiffies_64和jiffies是一個值。

可以通過get_jiffies_64()獲得這個值。

*使用

u64 j2;
j2 = get_jiffies_64();

(4)獲得當前時間

驅動程序中一般不需要知道墻鐘時間(也就是年月日的時間)。但驅動可能需要處理絕對時間。
為此,內核提供了兩個結構體,都定義在<linux/time.h>:

struct timeval {
 time_t tv_sec; /* seconds */
 suseconds_t tv_usec; /* microseconds */
};
//較老,但很流行。采用秒和毫秒值,保存了1970年1月1日0點以來的秒數
struct timespec {
 time_t tv_sec; /* seconds */
 long tv_nsec; /* nanoseconds */
};
//較新,采用秒和納秒值保存時間。

do_gettimeofday()該函數用通常的秒或微秒來填充一個指向struct timeval的指針變量,原型如下:

#include <linux/time.h>
void do_gettimeofday(struct timeval *tv);

current_kernel_time()該函數可用于獲得timespec

#include <linux/time.h>
struct timespec current_kernel_time(void);
/********************
 *確定時間的延遲執行
 *******************/

設備驅動程序經常需要將某些特定代碼延遲一段時間后執行,通常是為了讓硬件能完成某些任務。

長于定時器周期(也稱為時鐘嘀嗒)的延遲可以通過使用系統時鐘完成,而非常短的延時則通過軟件循環的方式完成

(1)短延時

對于那些最多幾十個毫秒的延遲,無法借助系統定時器。

系統通過軟件循環提供了下面的延遲函數:

#include <linux/delay.h> 
/* 實際在<asm/delay.h> */
void ndelay(unsigned long nsecs); /*延遲納秒 */
void udelay(unsigned long usecs); /*延遲微秒 */
void mdelay(unsigned long msecs); /*延遲毫秒 */

這三個延遲函數均是忙等待函數,在延遲過程中無法運行其他任務。

實際上,當前所有平臺都無法達到納秒精度。

(2)長延時

a.在延遲到期前讓出處理器

while(time_before(jiffies, j1))
schedule();

在等待期間可以讓出處理器,但系統無法進入空閑模式(因為這個進程始終在進行調度),不利于省電。

b.超時函數

#include <linux/sched.h>
signed long schedule_timeout(signed long timeout);

使用方式:

set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(2*HZ); /* 睡2秒 */

進程經過2秒后會被喚醒。如果不希望被用戶空間打斷,可以將進程狀態設置為TASK_UNINTERRUPTIBLE。

msleep
ssleep  // 秒

(3)等待隊列

使用等待隊列也可以實現長延遲。

在延遲期間,當前進程在等待隊列中睡眠。

進程在睡眠時,需要根據所等待的事件鏈接到某一個等待隊列。

a.聲明等待隊列

等待隊列實際上就是一個進程鏈表,鏈表中包含了等待某個特定事件的所有進程。

#include <linux/wait.h>
struct __wait_queue_head {
    spinlock_t lock;
    struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;

要想把進程加入等待隊列,驅動首先要在模塊中聲明一個等待隊列頭,并將它初始化。

靜態初始化

DECLARE_WAIT_QUEUE_HEAD(name);

動態初始化

wait_queue_head_t my_queue;
init_waitqueue_head(&my_queue);

b.等待函數

進程通過調用下面函數可以在某個等待隊列中休眠固定的時間:

#include <linux/wait.h>
long wait_event_timeout(wait_queue_head_t q,condition, long timeout);
long wait_event_interruptible_timeout(wait_queue_head_t q, condition, long timeout);

調用這兩個函數后,進程會在給定的等待隊列q上休眠,但會在超時(timeout)到期時返回。

如果超時到期,則返回0,如果進程被其他事件喚醒,則返回剩余的時間數。

如果沒有等待條件,則將condition設為0

使用方式:

wait_queue_head_t wait;
init_waitqueue_head(&wait);
wait_event_interruptible_timeout(wait, 0, 2*HZ); 
/*當前進程在等待隊列wait中睡2秒 */

(4)內核定時器

還有一種將任務延遲執行的方法是采用內核定時器。與前面幾種延遲方法不同,內核定時器并不會阻塞當前進程,啟動一個內核定時器只是聲明了要在未來的某個時刻執行一項任務,當前進程仍然繼續執行。不要用定時器完成硬實時任務

定時器由結構timer_list表示,定義在<linux/timer.h>

struct timer_list{
struct list_head entry; /* 定時器鏈表 */
unsigned long expires; /* 以jiffies為單位的定時值 */
spinlock_t lock;
void(*function)(unsigned long); /* 定時器處理函數 */
unsigned long data; /* 傳給定時器處理函數的參數 */
}

內核在<linux/timer.h>中提供了一系列管理定時器的接口。

a.創建定時器

struct timer_list my_timer;

b.初始化定時器

init_timer(&my_timer);
/* 填充數據結構 */
my_timer.expires = jiffies + delay;
my_timer.data = 0;
my_timer.function = my_function; /*定時器到期時調用的函數*/

c.定時器的執行函數

超時處理函數的原型如下:

void my_timer_function(unsigned long data);

可以利用data參數用一個處理函數處理多個定時器。可以將data設為0

d.激活定時器

add_timer(&my_timer);

定時器一旦激活就開始運行。

e.更改已激活的定時器的超時時間

mod_timer(&my_timer,
    jiffies+ney_delay);

可以用于那些已經初始化但還沒激活的定時器,如果調用時定時器未被激活則返回0,否則返回1。一旦mod_timer返回,定時器將被激活。

f.刪除定時器

del_timer(&my_timer);

被激活或未被激活的定時器都可以使用,如果調用時定時器未被激活則返回0,否則返回1。不需要為已經超時的定時器調用,它們被自動刪除

g.同步刪除

del_time_sync(&my_timer);

在smp系統中,確保返回時,所有的定時器處理函數都退出。不能在中斷上下文使用。

/********************
 *不確定時間的延遲執行
 *******************/

(1)什么是不確定時間的延遲

前面介紹的是確定時間的延遲執行,但在寫驅動的過程中經常遇到這種情況:用戶空間程序調用read函數從設備讀數據,但設備中當前沒有產生數據。此時,驅動的read函數默認的操作是進入休眠,一直等待到設備中有了數據為止。

這種等待就是不定時的延遲,通常采用休眠機制來實現。

(2)休眠

休眠是基于等待隊列實現的,前面我們已經介紹過wait_event系列函數,但現在我們將不會有確定的休眠時間。

當進程被置入休眠時,會被標記為特殊狀態并從調度器的運行隊列中移走。

直到某些事件發生后,如設備接收到數據,則將進程重新設為運行態并進入運行隊列進行調度。

休眠函數的頭文件是<linux/wait.h>,具體的實現函數在kernel/wait.c中。

a.休眠的規則

  • *永遠不要在原子上下文中休眠
  • *當被喚醒時,我們無法知道睡眠了多少時間,也不知道醒來后是否獲得了我們需要的資源
  • *除非知道有其他進程會在其他地方喚醒我們,否則進程不能休眠

b.等待隊列的初始化

見前文

c.休眠函數

linux最簡單的睡眠方式為wait_event宏。該宏在實現休眠的同時,檢查進程等待的條件。

1. void wait_event(
   wait_queue_head_t q, 
   int condition);

2. int wait_event_interruptible(
   wait_queue_head_t q, 
   int condition);
  • q: 是等待隊列頭,注意是采用值傳遞。
  • condition: 任意一個布爾表達式,在條件為真之前,進程會保持休眠。
  • 注意!進程需要通過喚醒函數才可能被喚醒,此時需要檢測條件。
  • 如果條件滿足,則被喚醒的進程真正醒來;
  • 如果條件不滿足,則進程繼續睡眠。

d.喚醒函數

當我們的進程睡眠后,需要由其他的某個執行線程(可能是另一個進程或中斷處理例程)喚醒。喚醒函數:

#include <linux/wait.h>
1. void wake_up(
  wait_queue_head_t *queue);

2. void wake_up_interruptible(
  wait_queue_head_t *queue);

wake_up會喚醒等待在給定queue上的所有進程。而wake_up_interruptible喚醒那些執行可中斷休眠的進程。實踐中,約定做法是在使用wait_event時使用wake_up,而使用wait_event_interruptible時使用wake_up_interruptible。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

標簽:福州 孝感 晉城 蕪湖 綏化 撫順 南充 巴中

巨人網絡通訊聲明:本文標題《Linux內核設備驅動之內核的時間管理筆記整理》,本文關鍵詞  Linux,內核,設備驅動,之,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux內核設備驅動之內核的時間管理筆記整理》相關的同類信息!
  • 本頁收集關于Linux內核設備驅動之內核的時間管理筆記整理的相關信息資訊供網民參考!
  • 推薦文章
    亚洲五月六月| 日韩欧美国产一区在线观看| 91人妻一区二区三区| 国产一区二区三区在线看| 日韩精品乱码免费| 成人观看免费完整观看| 亚洲欧美日韩直播| 黄一区二区三区| 亚洲一区二区三区观看| 久久久免费精品视频| a美女胸又www黄视频久久| 亚洲黄色小说视频| 114国产精品久久免费观看| 一区二区在线电影| 日本午夜在线观看| 久久综合伊人77777麻豆| 国产亚洲欧美在线精品| 欧美日韩亚洲一区二区三区在线观看 | 日韩在线国产| 日韩免费性生活视频播放| 天堂av在线一区| 久草综合在线观看| 成人av色在线观看| 一本久道久久综合无码中文| 日本久久高清视频| 在线电影中文日韩| 337p粉嫩大胆色噜噜噜噜亚洲| 九九热免费在线| 日本一区高清不卡| 中文字幕v亚洲ⅴv天堂| 国产女人水真多18毛片18精品视频| 久草免费在线观看视频| 午夜视频久久久| 中文字幕在线看视频国产欧美| 久久综合九色综合97婷婷女人| 国模无码国产精品视频| 国产欧美综合一区| 国产精品久久久久影院色老大| 亚洲国产精品第一页| 成人永久免费| 亚洲免费视频网站| ...av二区三区久久精品| 国产ts人妖调教重口男| 国产白嫩美女无套久久| 欧美少妇一区| 欧美极品少妇全裸体| 日韩欧美一区二区三区久久| 人妻va精品va欧美va| 波多野吉衣中文字幕| 50度灰在线观看| 日本午夜精品理论片a级appf发布| 色先锋资源久久综合| 麻豆精品视频在线观看免费| 性高潮久久久久久久| 精品中文字幕人| 欧美成人午夜激情在线| 欧美色另类天堂2015| 国产成人免费视频网站高清观看视频| 日韩 欧美 中文| 亚洲综合自拍网| 国产中文字幕乱人伦在线观看| 日本久久久久久久久久久| 日本一区中文字幕| 亚洲精品乱码久久久久久不卡| 亚洲ai欧洲av| 国产精品综合网站| 中文字幕日韩av电影| 欧美色精品天天在线观看视频| 91尤物视频在线观看| 色噜噜在线播放| 无码人妻精品一区二区三区蜜桃91 | 97在线视频人妻无码| 国产馆在线观看| 女王人厕视频2ⅴk| 久久精品无码中文字幕| 麻豆成人av| 88xx成人精品| 色播久久人人爽人人爽人人片视av| 色综合久久天天综合网| 中文字幕精品—区二区四季| 麻豆成人91精品二区三区| 国产熟女一区二区三区四区| 日韩成人短视频| 欧美黄色一级生活片| 亚洲网中文字幕| 亚洲成成品网站| 在线观看国产日韩| 懂色av影视一区二区三区| www欧美成人18+| 精品一区二区三区在线观看国产| 精品国产伦一区二区三区| 久草视频免费在线| b站大片免费直播| 少妇性l交大片7724com| www.好吊操| 免费一级淫片aaa片毛片a级| 咪咪色在线视频| 日韩电影大全在线观看| 91精品国产一区二区三区动漫| 国产精品久久久久久久久久久久久 | 欧美精品第一页| 欧美日韩黄色一区二区| 欧美伊人久久久久久久久影院| 午夜精品福利一区二区三区av| 国产精品福利影院| 一区二区三区免费| 欧美日韩在线视频观看| 91国偷自产一区二区三区观看| 色婷婷久久综合| 欧美主播一区二区三区| 久久精品综合| 国产精品久久777777换脸| 国产性生活视频| 国产情侣免费视频| 特级丰满少妇一级aaaa爱毛片| 性高潮久久久久久久久久| 麻豆精品国产91久久久久久| 美女一区二区视频| 高清在线观看日韩| 久久精品人人爽人人爽| 亚洲另类一区二区| 欧美精品日韩综合在线| 日韩视频免费直播| 色偷偷偷综合中文字幕;dd| 久久频这里精品99香蕉| 欧美一级高清免费播放| 国产精品亚洲片夜色在线| 久久一区二区三区av| 26uuu成人| 日本中文字幕精品—区二区| 日本精品久久久久中文| 在线观看免费视频a| 日本不卡高清视频| 中文字幕一区日韩精品欧美| 午夜av区久久| 亚洲精品成人久久电影| 2019av中文字幕| 久久久久久久久久久一区| 一区二区精品在线观看| 一级做a免费视频| 日本女人性生活视频| 中文字幕永久在线视频| 国产精品一级黄| 亚洲一区二区三区中文字幕在线| 亚洲精品第一页| 国产精品久久婷婷六月丁香| 久久久久久久久久久一区| av污在线观看| 久久艹免费视频| 久久99久久久久| 亚洲精品成人少妇| 亚洲国产精品成人一区二区| 国产精品香蕉在线观看| 国产av天堂无码一区二区三区| 深爱五月激情网| 男人天堂一区二区| 136国产福利精品导航| 欧美一级高清片| 国产精品1区2区在线观看| 精品在线不卡| 丝袜熟女一区二区三区| 国产精品露脸视频| 成人av手机在线观看| 欧美日韩一区二区在线观看 | 亚洲国产婷婷香蕉久久久久久| 欧美另类99xxxxx| 精品国产一区二区三区四区vr| 又色又爽又黄视频| 少妇太紧太爽又黄又硬又爽| 国产精品1区2区| 欧美va亚洲va香蕉在线| 91精品视频免费看| 潘金莲激情呻吟欲求不满视频| 日本黄色一级视频| 中文字幕av一区二区三区| 精品免费国产二区三区| 日本一本a高清免费不卡| 国产熟女高潮视频| 加勒比在线一区| 91老司机福利 在线| 亚洲欧美国产日韩天堂区| 国语精品中文字幕| 久久久久久久久久久久| 日本麻豆一区二区三区视频| 黄色成人在线播放| 国产精品大陆在线观看| 五月激情婷婷在线| 亚洲免费成人在线| 欧美日韩一二三四五区| 国产精品美女视频网站| 国产男女无遮挡猛进猛出| 超碰在线播放97| 欧美无乱码久久久免费午夜一区| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 免费不卡在线视频| 日韩av在线免费观看一区| 日韩三级在线播放| 中文字幕在线观看2018| 国产偷国产偷精品高清尤物 | 午夜精品成人在线| 最近更新的2019中文字幕 | 国产在线精品播放| 午夜理伦三级做爰电影| 久久久美女毛片| 国产日韩中文字幕| 波多野结衣一区二区三区在线| 五月天一区二区| 欧美连裤袜在线视频| www.久久视频| 亚洲精品美女久久久久| 国产理论在线播放| 国产激情一区二区三区| 欧美性受xxxx黑人猛交| 在线免费观看日韩av| 成人欧美一区二区三区视频网页| 91pron在线| 国产一级片一区二区| 精品久久久三级丝袜| 国产视频1区2区3区| 久久久综合视频| 国产日本欧美在线| 97精品人妻一区二区三区香蕉| 精品成人佐山爱一区二区| 一级做a免费视频| 中文字幕一区二区三区在线不卡| 久久综合狠狠综合久久综青草| 国产一区二区视频免费观看| 日韩中文字幕免费看| 波多野结衣家庭教师在线观看| 欧美综合一区二区| 亚洲欧美激情网| 亚洲视频一区在线| 国产免费一区二区三区四在线播放| 日韩高清中文字幕一区| 国产精品久久久久77777| 伊人久久久久久久久久久久| 精品偷拍各种wc美女嘘嘘| 污污污www精品国产网站| 午夜久久福利影院| 免费av手机在线观看| 久久婷婷成人综合色| 5月婷婷6月丁香| 日韩电影在线免费观看| 欧美精品激情视频| av资源免费观看| 久久久国产一区| 日韩免费av片| 久久久av免费| 日韩在线视频免费播放| 中文字幕少妇一区二区三区| 日韩在线观看视频一区二区| 欧美一卡二卡三卡四卡| 亚洲熟女乱综合一区二区| 天天色综合天天| 午夜免费看毛片| 性做久久久久久免费观看| 成人在线免费观看av| 国产精品乱人伦| 国产免费观看高清视频| 亚洲天堂av一区| 国产免费黄色av| 亚洲综合丁香婷婷六月香| 欧美 日韩 国产一区| 亚洲日本va在线观看| 日韩在线视频在线观看| 一区二区三区日韩欧美精品| 成年人免费在线播放| 亚洲综合区在线| 向日葵污视频在线观看| 欧美日韩一区精品| 六月婷婷七月丁香| 亚洲欧美中文另类| 青青草综合视频| wwwav国产| 色777狠狠综合秋免鲁丝| 久久这里只有精品国产| 深夜精品寂寞黄网站在线观看| 国产成人亚洲精品自产在线| 美女性感视频久久久| 一级黄色小视频| 亚洲精品免费网站| 岛国精品在线观看| 日韩中文字幕在线不卡| 亚洲国产视频直播| 99免费观看视频| 日韩精品福利在线| 无码人妻丰满熟妇区bbbbxxxx| 在线精品视频一区二区三四| 在线不卡av电影| 欧美超级乱淫片喷水| 亚洲爆乳无码一区二区三区| 国产精品一区在线播放| 国产欧美综合在线观看第十页 | 欧美自拍丝袜亚洲| 免费看日本黄色片| 久久久亚洲国产| 蜜桃视频第一区免费观看| 美国av在线播放| 欧洲一区二区三区在线| 极品色av影院| 国内偷自视频区视频综合| 久久精品国产一区二区| 欧美在线观看www| 91国产福利在线| 欧美国产日韩在线观看成人| 2020久久国产精品| 国产91在线观看| 亚洲乱码国产一区三区| 日韩三级视频在线看| 国产a一区二区| 性xxxx视频| 在线观看17c| 日韩一区二区三区免费观看| 久草视频在线观| 国产综合欧美在线看| 亚洲久本草在线中文字幕| 国产又粗又长又爽| 国内久久久精品| 91热门视频在线观看| 丰满人妻一区二区三区大胸| 91麻豆精品国产自产在线| 99久久久无码国产精品免费蜜柚| 国产精品久久久一区二区三区| 中文字幕日韩精品一区| eeuss中文字幕| 666精品在线| 欧美午夜影院在线视频| 免费av中文字幕| 91成人免费看| 在线精品视频小说1| 中文字幕一区2区3区| 精品免费久久久久久久| 亚洲成人av片| 日本视频一区二区| 极品白嫩的小少妇| 97香蕉超级碰碰久久免费软件| 毛片不卡一区二区| 美女黄色一级视频| 国产欧美精品在线| 91精品办公室少妇高潮对白| 一二三四区视频| 亚洲黄色a v| 欧美中文在线视频| 亚洲最大成人综合| 一区二区不卡视频在线观看| 日韩精品一区二区三区色欲av| 欧美xxxx14xxxxx性爽| 国产精品久久午夜夜伦鲁鲁| 久久免费激情视频| 妞干网视频在线观看| 欧美日本黄视频| 亚洲国产裸拍裸体视频在线观看乱了 | 成人情视频高清免费观看电影| 婷婷综合五月天| 97人妻人人澡人人爽人人精品 | 精品国产乱码91久久久久久网站| 成人动漫中文字幕| 亚洲欧美综合自拍| 国产精品区在线| 91国产在线免费观看| 日韩精品极品在线观看播放免费视频| 波多野结衣视频一区| 夜夜爽妓女8888视频免费观看| 国内自拍视频网| 成人www视频在线观看| 精品性高朝久久久久久久| 亚洲欧美一区二区三区孕妇| 天堂av2024| 麻豆国产尤物av尤物在线观看| 公共露出暴露狂另类av| 日韩av大片在线| 日韩电影第一页| 激情久久av一区av二区av三区| 日日骚欧美日韩| 人人爽人人爽人人片av| 这里只有精品在线观看视频| 青春草国产视频| 成人在线观看av| 7m第一福利500精品视频| 精品国精品自拍自在线| 国产精品私人自拍| 老司机午夜精品99久久| 91在线精品入口| 五月综合色婷婷| 亚洲免费在线播放视频| 日韩视频在线观看视频| 91丝袜脚交足在线播放| 欧美洲成人男女午夜视频| 亚洲欧美日韩综合| 欧美乱妇23p| 玉足女爽爽91| 中文字幕av不卡| 99久久婷婷国产综合精品| 天堂成人国产精品一区| 伊人网免费视频| 国产一级精品视频| 国产精品成人在线视频| 中文字幕免费看| 伦理片一区二区| 国产污在线观看| 国产污在线观看| av2014天堂网| 国产97在线播放| 国产精品综合在线| 日本系列第一页| 欧美精品乱码视频一二专区| 欧洲一级黄色片| 日本xxx在线播放| 播金莲一级淫片aaaaaaa| 亚洲a v网站|