亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務(wù)器 > Linux服務(wù)器 > 正文

Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核的時(shí)間管理筆記整理

2024-09-05 23:05:27
字體:
供稿:網(wǎng)友
/****************** * linux內(nèi)核的時(shí)間管理 ******************/

(1)內(nèi)核中的時(shí)間概念

時(shí)間管理在linux內(nèi)核中占有非常重要的作用。

相對(duì)于事件驅(qū)動(dòng)而言,內(nèi)核中有大量函數(shù)是基于時(shí)間驅(qū)動(dòng)的。

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

有些函數(shù)是推后一定時(shí)間執(zhí)行的,比如內(nèi)核在500毫秒后執(zhí)行某項(xiàng)任務(wù)。

要區(qū)分:

  • *絕對(duì)時(shí)間和相對(duì)時(shí)間
  • *周期性產(chǎn)生的事件和推遲執(zhí)行的事件

周期性事件是由系統(tǒng)系統(tǒng)定時(shí)器驅(qū)動(dòng)的

(2)HZ值

內(nèi)核必須在硬件定時(shí)器的幫助下才能計(jì)算和管理時(shí)間。

定時(shí)器產(chǎn)生中斷的頻率稱為節(jié)拍率(tick rate)。

在內(nèi)核中指定了一個(gè)變量HZ,內(nèi)核初始化的時(shí)候會(huì)根據(jù)這個(gè)值確定定時(shí)器的節(jié)拍率。

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

也就是時(shí)鐘中斷每秒發(fā)生1000次,周期為1毫秒。即:

#define HZ 1000

注意!HZ不是個(gè)固定不變的值,它是可以更改的,可以在內(nèi)核源代碼配置的時(shí)候輸入。

不同的體系結(jié)構(gòu)其HZ值是不一樣的,比如arm就采用100。

如果在驅(qū)動(dòng)中要使用系統(tǒng)的中斷頻率,直接使用HZ,而不要用100或1000

a.理想的HZ值

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

提高節(jié)拍率意味著時(shí)鐘中斷產(chǎn)生的更加頻繁,中斷處理程序也會(huì)更頻繁地執(zhí)行。

帶來的好處有:

  • *內(nèi)核定時(shí)器能夠以更高的頻率和更高的準(zhǔn)確度運(yùn)行
  • *依賴定時(shí)器執(zhí)行的系統(tǒng)調(diào)用,比如poll()和select(),運(yùn)行的精度更高
  • *提高進(jìn)程搶占的準(zhǔn)確度

(縮短了調(diào)度延時(shí),如果進(jìn)程還剩2ms時(shí)間片,在10ms的調(diào)度周期下,進(jìn)程會(huì)多運(yùn)行8ms。
由于耽誤了搶占,對(duì)于一些對(duì)時(shí)間要求嚴(yán)格的任務(wù)會(huì)產(chǎn)生影響)

壞處有:

*節(jié)拍率要高,系統(tǒng)負(fù)擔(dān)越重。

中斷處理程序?qū)⒄加酶嗟奶幚砥鲿r(shí)間。

(3)jiffies

全局變量jiffies用于記錄系統(tǒng)啟動(dòng)以來產(chǎn)生的節(jié)拍的總數(shù)。

啟動(dòng)時(shí),jiffies初始化為0,此后每次時(shí)鐘中斷處理程序都會(huì)增加該變量的值。

這樣,系統(tǒng)啟動(dòng)后的運(yùn)行時(shí)間就是jiffies/HZ秒

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

extern unsigned long volatile jiffies;

jiffies變量總是為unsigned long型。

因此在32位體系結(jié)構(gòu)上是32位,而在64位體系上是64位。對(duì)于32位的jiffies,如果HZ為1000,49.7天后會(huì)溢出。雖然溢出的情況不常見,但程序在檢測超時(shí)時(shí)仍然可能因?yàn)榛乩@而導(dǎo)致錯(cuò)誤。linux提供了4個(gè)宏來比較節(jié)拍計(jì)數(shù),它們能正確地處理節(jié)拍計(jì)數(shù)回繞。

#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是需要對(duì)比的值(常常是一個(gè)jiffies加減后計(jì)算出的相對(duì)值)例:

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

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

*系統(tǒng)中還聲明了一個(gè)64位的值jiffies_64,在64位系統(tǒng)中jiffies_64和jiffies是一個(gè)值。

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

*使用

u64 j2;j2 = get_jiffies_64();

(4)獲得當(dāng)前時(shí)間

驅(qū)動(dòng)程序中一般不需要知道墻鐘時(shí)間(也就是年月日的時(shí)間)。但驅(qū)動(dòng)可能需要處理絕對(duì)時(shí)間。
為此,內(nèi)核提供了兩個(gè)結(jié)構(gòu)體,都定義在<linux/time.h>:

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

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

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

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

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

設(shè)備驅(qū)動(dòng)程序經(jīng)常需要將某些特定代碼延遲一段時(shí)間后執(zhí)行,通常是為了讓硬件能完成某些任務(wù)。

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

(1)短延時(shí)

對(duì)于那些最多幾十個(gè)毫秒的延遲,無法借助系統(tǒng)定時(shí)器。

系統(tǒng)通過軟件循環(huán)提供了下面的延遲函數(shù):

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

這三個(gè)延遲函數(shù)均是忙等待函數(shù),在延遲過程中無法運(yùn)行其他任務(wù)。

實(shí)際上,當(dāng)前所有平臺(tái)都無法達(dá)到納秒精度。

(2)長延時(shí)

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

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

在等待期間可以讓出處理器,但系統(tǒng)無法進(jìn)入空閑模式(因?yàn)檫@個(gè)進(jìn)程始終在進(jìn)行調(diào)度),不利于省電。

b.超時(shí)函數(shù)

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

使用方式:

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

進(jìn)程經(jīng)過2秒后會(huì)被喚醒。如果不希望被用戶空間打斷,可以將進(jìn)程狀態(tài)設(shè)置為TASK_UNINTERRUPTIBLE。

msleepssleep  // 秒

(3)等待隊(duì)列

使用等待隊(duì)列也可以實(shí)現(xiàn)長延遲。

在延遲期間,當(dāng)前進(jìn)程在等待隊(duì)列中睡眠。

進(jìn)程在睡眠時(shí),需要根據(jù)所等待的事件鏈接到某一個(gè)等待隊(duì)列。

a.聲明等待隊(duì)列

等待隊(duì)列實(shí)際上就是一個(gè)進(jìn)程鏈表,鏈表中包含了等待某個(gè)特定事件的所有進(jìn)程。

#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;

要想把進(jìn)程加入等待隊(duì)列,驅(qū)動(dòng)首先要在模塊中聲明一個(gè)等待隊(duì)列頭,并將它初始化。

靜態(tài)初始化

DECLARE_WAIT_QUEUE_HEAD(name);

動(dòng)態(tài)初始化

wait_queue_head_t my_queue;init_waitqueue_head(&my_queue);

b.等待函數(shù)

進(jìn)程通過調(diào)用下面函數(shù)可以在某個(gè)等待隊(duì)列中休眠固定的時(shí)間:

#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);

調(diào)用這兩個(gè)函數(shù)后,進(jìn)程會(huì)在給定的等待隊(duì)列q上休眠,但會(huì)在超時(shí)(timeout)到期時(shí)返回。

如果超時(shí)到期,則返回0,如果進(jìn)程被其他事件喚醒,則返回剩余的時(shí)間數(shù)。

如果沒有等待條件,則將condition設(shè)為0

使用方式:

wait_queue_head_t wait;init_waitqueue_head(&wait);wait_event_interruptible_timeout(wait, 0, 2*HZ); /*當(dāng)前進(jìn)程在等待隊(duì)列wait中睡2秒 */

(4)內(nèi)核定時(shí)器

還有一種將任務(wù)延遲執(zhí)行的方法是采用內(nèi)核定時(shí)器。與前面幾種延遲方法不同,內(nèi)核定時(shí)器并不會(huì)阻塞當(dāng)前進(jìn)程,啟動(dòng)一個(gè)內(nèi)核定時(shí)器只是聲明了要在未來的某個(gè)時(shí)刻執(zhí)行一項(xiàng)任務(wù),當(dāng)前進(jìn)程仍然繼續(xù)執(zhí)行。不要用定時(shí)器完成硬實(shí)時(shí)任務(wù)

定時(shí)器由結(jié)構(gòu)timer_list表示,定義在<linux/timer.h>

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

內(nèi)核在<linux/timer.h>中提供了一系列管理定時(shí)器的接口。

a.創(chuàng)建定時(shí)器

struct timer_list my_timer;

b.初始化定時(shí)器

init_timer(&my_timer);/* 填充數(shù)據(jù)結(jié)構(gòu) */my_timer.expires = jiffies + delay;my_timer.data = 0;my_timer.function = my_function; /*定時(shí)器到期時(shí)調(diào)用的函數(shù)*/

c.定時(shí)器的執(zhí)行函數(shù)

超時(shí)處理函數(shù)的原型如下:

void my_timer_function(unsigned long data);

可以利用data參數(shù)用一個(gè)處理函數(shù)處理多個(gè)定時(shí)器。可以將data設(shè)為0

d.激活定時(shí)器

add_timer(&my_timer);

定時(shí)器一旦激活就開始運(yùn)行。

e.更改已激活的定時(shí)器的超時(shí)時(shí)間

mod_timer(&my_timer,    jiffies+ney_delay);

可以用于那些已經(jīng)初始化但還沒激活的定時(shí)器,如果調(diào)用時(shí)定時(shí)器未被激活則返回0,否則返回1。一旦mod_timer返回,定時(shí)器將被激活。

f.刪除定時(shí)器

del_timer(&my_timer);

被激活或未被激活的定時(shí)器都可以使用,如果調(diào)用時(shí)定時(shí)器未被激活則返回0,否則返回1。不需要為已經(jīng)超時(shí)的定時(shí)器調(diào)用,它們被自動(dòng)刪除

g.同步刪除

del_time_sync(&my_timer);

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

/******************** *不確定時(shí)間的延遲執(zhí)行 *******************/

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

前面介紹的是確定時(shí)間的延遲執(zhí)行,但在寫驅(qū)動(dòng)的過程中經(jīng)常遇到這種情況:用戶空間程序調(diào)用read函數(shù)從設(shè)備讀數(shù)據(jù),但設(shè)備中當(dāng)前沒有產(chǎn)生數(shù)據(jù)。此時(shí),驅(qū)動(dòng)的read函數(shù)默認(rèn)的操作是進(jìn)入休眠,一直等待到設(shè)備中有了數(shù)據(jù)為止。

這種等待就是不定時(shí)的延遲,通常采用休眠機(jī)制來實(shí)現(xiàn)。

(2)休眠

休眠是基于等待隊(duì)列實(shí)現(xiàn)的,前面我們已經(jīng)介紹過wait_event系列函數(shù),但現(xiàn)在我們將不會(huì)有確定的休眠時(shí)間。

當(dāng)進(jìn)程被置入休眠時(shí),會(huì)被標(biāo)記為特殊狀態(tài)并從調(diào)度器的運(yùn)行隊(duì)列中移走。

直到某些事件發(fā)生后,如設(shè)備接收到數(shù)據(jù),則將進(jìn)程重新設(shè)為運(yùn)行態(tài)并進(jìn)入運(yùn)行隊(duì)列進(jìn)行調(diào)度。

休眠函數(shù)的頭文件是<linux/wait.h>,具體的實(shí)現(xiàn)函數(shù)在kernel/wait.c中。

a.休眠的規(guī)則

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

b.等待隊(duì)列的初始化

見前文

c.休眠函數(shù)

linux最簡單的睡眠方式為wait_event宏。該宏在實(shí)現(xiàn)休眠的同時(shí),檢查進(jìn)程等待的條件。

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

d.喚醒函數(shù)

當(dāng)我們的進(jìn)程睡眠后,需要由其他的某個(gè)執(zhí)行線程(可能是另一個(gè)進(jìn)程或中斷處理例程)喚醒。喚醒函數(shù):

#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會(huì)喚醒等待在給定queue上的所有進(jìn)程。而wake_up_interruptible喚醒那些執(zhí)行可中斷休眠的進(jìn)程。實(shí)踐中,約定做法是在使用wait_event時(shí)使用wake_up,而使用wait_event_interruptible時(shí)使用wake_up_interruptible。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到服務(wù)器教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产一区二区三区四区五区传媒| 亚洲精品ady| 在线视频一区二区三区| 成年人视频在线观看免费| 成人综合婷婷国产精品久久蜜臀| 亚洲黄色av| 成人一区二区三区视频| 激情视频免费| 国产主播一区| 五月天中文字幕一区二区| 日本乱子伦xxxx| 日韩一区二区在线观看视频| 欧美一级爱爱视频| 九七午夜视频| 久色乳综合思思在线视频| 欧美日韩亚洲第一页| 国产片一区二区三区| 蜜桃视频在线观看www社区| www.aqdy爱情电影网| 久久香蕉国产线看观看99| 欧美国产精品人人做人人爱| 97久久精品视频| 国产日韩一区二区三区在线播放| 无码国产69精品久久久久网站| 欧美午夜黄色| 精品人妻伦九区久久aaa片| 岛国视频午夜一区免费在线观看| 亚洲国产精品无码久久久久高潮| 国产在线播放一区二区三区| 97干在线视频| 亚洲精品毛片一区二区三区| 啪啪国产精品| 欧美日韩不卡视频| 日韩精品影院| 欧美三级日韩三级国产三级| 香蕉视频黄色片| 日韩欧美激情一区二区| 意大利激情丛林无删减版dvd| 亚洲最大在线| 超碰97在线资源站| 亚洲日本中文字幕| 国产精品一区二区在线观看网站| 亚洲伊人第一页| 色悠久久久久综合先锋影音下载| 欧美黄色一区二区三区| 色婷婷国产精品综合在线观看| 日韩av在线电影| 日韩一区精品字幕| av在线你懂的| heisi视频网在线观看| 国产精品区免费视频| 热久久最新网址| 久久综合色88| 先锋影视中文字幕| 2001个疯子在线观看| 日韩av在线网| 久久精品官网| 精精国产xxxx视频在线中文版| 亚洲一区久久久| 2023国产精华国产精品| 久久免费精品国产| 久久综合久久久久| 日本午夜在线视频| 免费精品国产自产拍在| 99在线精品视频免费观看软件| 在线精品视频免费播放| 另类视频一区二区三区| 网红女主播少妇精品视频| 男女羞羞视频在线观看| 黄色毛片av| 成人福利在线| 96日本xxxxxⅹxxx17| 亚洲国产成人精品无码区99| 欧美日韩国产精品一区二区三区四区| 337p日本欧洲亚洲大胆色噜噜| 国产中文在线观看| 成人综合av网| 欧美精品一区三区在线观看| 色综合久久久久久久| 色欧美88888久久久久久影院| 欧美午夜电影在线观看| 欧美精品一区二区三| 久久精品女同亚洲女同13| 日韩精品一区二区三区三区免费| 久久久精品中文字幕| 久草国产在线视频| 亚洲欧洲制服丝袜| 香蕉成人av| 2019男人天堂| 日本成人一区| 美日韩在线观看| 精品国产黄a∨片高清在线| 亚洲福利国产| sm国产在线调教视频| 老司机一区二区三区| 全亚洲最色的网站在线观看| 亚洲激情久久| 国产69久久| 夜夜嗨aⅴ免费视频| 狼人精品一区二区三区在线| 国产盗摄在线观看| 欧美亚州韩日在线看免费版国语版| www.com操| 中文字幕中文字幕在线中心一区| 亚洲一区在线观看免费观看电影高清| 亚洲综合偷拍欧美一区色| 国产亚洲欧美在线视频| 精品视频第一区| 久久亚洲综合国产精品99麻豆精品福利| 国产精品视频免费在线观看| 91中文字幕在线视频| 三级影片在线看| 国产精品999久久久| 国产日韩欧美高清在线| 视频一区二区三| 久久午夜无码鲁丝片午夜精品| 肉丝美足丝袜一区二区三区四| 99久久999| 国产精品九九久久久久久久| 男人猛进猛出女人屁股视频| 国产老头老太做爰视频| 国产精品入口免费软件| 亚洲盗摄视频| 欧美成人专区| 韩国免费在线视频| 国产精品99久久99久久久| http;//www.99re视频| 一区二区三区日韩在线| 手机视频在线观看| 免费看日批视频| 自拍偷拍亚洲欧美| 久久国产小视频| 精品久久电影| 嫩草香蕉在线91一二三区| 欧美激情日韩图片| 中文字幕免费精品一区高清| 蜜桃av麻豆av天美av免费| av中文字幕第一页| 久草这里只有精品视频| 亚洲精品成人区在线观看| 国产成人自拍高清视频在线免费播放| 成人精品一区二区三区校园激情| 亚洲一卡二卡三卡四卡无卡网站在线看| 国产高清视频一区三区| xxxx国产视频| 91精品啪在线观看国产60岁| 精品国产乱码久久久久久免费| 国产精品区一区二| 日韩av影片在线观看| 精品少妇一二三区| 国产精选久久| 一本色道久久综合狠狠躁的番外| 午夜精品影院| 国产wwwwxxxx| 黄瓜视频在线免费观看| 亚洲蜜桃av| 91精品国产福利在线观看麻豆| 亚洲少妇30p| 亚洲精品大尺度| 成年人午夜视频在线观看| 国产91精品一区二区麻豆亚洲| 69久久夜色精品国产7777| 97成人在线观看| 亚洲色图自拍| 亚洲成人av免费在线观看| 欧美一区,二区| 一区二区三区视频播放| 性xxxx丰满孕妇xxxx另类| 亚洲色图校园春色| 美女做a视频| caoporn-草棚在线视频最| 精品日韩欧美一区| 一区二区不卡免费视频| 大伊香蕉精品视频在线| 3751色影院一区二区三区| 黄色片在线免费| 伊人色综合久久| 在线观看一区欧美| 性一爱一乱一交一视频| 91精品秘密在线观看| 国产精品自产拍在线观看中文| 在线免费看v片| 在线精品国精品国产尤物884a| 91老师片黄在线观看| 中文字幕国产亚洲2019| 日本午夜精品视频在线观看| 亚洲精品免费观看| 国产精品久久久久久久久久10秀| 超碰在线97观看| 日韩美女天天操| 国内精品久久久久久中文字幕| 亚洲国产高清aⅴ视频| 亚洲熟女乱综合一区二区三区| 免费黄网站欧美| 91一区一区三区| 国产www.大片在线| 国产午夜精品久久久久久免费视| 日韩专区在线观看| 成人免费网站观看| 黄色网战入口| 成人午夜在线视频一区| 三妻四妾的电影电视剧在线观看| 国外成人性视频| 色网站在线视频| 亚洲一级二级三级| 九九这里只有精品视频| 久久66热re国产| 国产精品蜜臀在线观看| 欧美日韩夫妻久久| 免费在线观看羞羞视频| www.四虎影视.com| 黄网址在线观看| 日本超碰在线观看| 欧美国产不卡| 日韩精品免费一区二区在线观看| 亚洲天堂精品视频| 亚洲最新永久观看在线| 国产乱理伦片a级在线观看| 一本久久a久久精品亚洲| 午夜精品免费在线观看| 国产精品一区二区三区毛片淫片| 欧美一区二区在线不卡| 四虎4hu影库永久地址| 五月天天在线| 老司机在线看片网av| 日本高清不卡中文字幕| 久久一区二区三区四区| 国产日韩亚洲精品| 日韩欧美在线视频播放| 中文字幕系列一区| 欧亚一区二区三区| 大乳护士喂奶hd| 国产三级做爰高清在线| 国产另类在线| 黄色一级大片在线免费看国产一| 日韩午夜电影在线观看| 亚洲色图在线播放| 色哟哟日韩精品| 久久久久久久久久久久久久久国产| 久久99蜜桃综合影院免费观看| 瑟瑟视频在线免费观看| 久久久国产精品一区| 色婷婷视频在线观看| 日本高清不卡aⅴ免费网站| 精品久久久中文| 在线免费观看污视频| 国产精品久久免费观看| av不卡中文字幕| 久久久久久国产精品免费无遮挡| 182在线播放| 日韩欧美黄色动漫| 午夜国产不卡在线观看视频| 综合久久2o19| 久久久国产一区二区| 亚洲欧洲视频在线| 中文字幕亚洲一区二区三区五十路| 亚洲视频自拍偷拍| 自拍偷自拍亚洲精品被多人伦好爽| 免费av一区二区三区| 日韩中文字幕三区| 尤物在线精品视频| 中文字幕亚洲欧美在线| 久久久久久国产精品一区| 黄漫在线观看| 7777免费精品视频| 美女被啪啪一区二区| sm性调教片在线观看| 中文字幕第2页| 真实的国产乱xxxx在线91| 日韩精品成人| 五月天色网站| 一区二区三区 日韩| 久久久久99精品久久久久| 97久久国产亚洲精品超碰热| 欧美日本乱大交xxxxx| 五月婷婷亚洲| 色婷婷**av毛片一区| 国产美女情趣调教h一区二区| 亚洲成av人片一区二区梦乃| 国产精品九九九九九| 老熟妇仑乱视频一区二区| 精品一区在线视频| 最新欧美人z0oozo0| 伊人久久精品| 国产精品久久久久7777婷婷| 日韩不卡高清视频| 手机成人在线| 久久av中文字幕片| 日韩视频精品在线观看| 懂色av一区| 丝袜亚洲另类欧美综合| 性感女国产在线| 婷婷综合国产| 欧美亚洲国产日韩2020| 色一情一乱一伦一视频免费看| 国产三级在线免费| 可以在线观看的黄色| 免费看成年人视频在线观看| 狠狠狠色丁香婷婷综合久久五月| 一级中文字幕一区二区| 国内老熟妇对白hdxxxx| 国产v亚洲v天堂无码| 国产伦精品一区二区三区免费视频| 婷婷综合在线| 欧美精彩一区二区三区| 国产成人精品无码高潮| 中文字幕精品一区二区三区在线| 天天碰免费视频| 九九热视频免费在线观看| 欧美丰满美乳xxx高潮www| 国产一区二区三区蝌蚪| 人与牲动交xxxxbbbb高清| 国产精品久久久久久av福利| 亚洲综合色噜噜狠狠| 91精品久久久久久久久久另类| 亚洲中文无码av在线| 91抖音在线观看| 夜色资源网av在先锋网站观看| 欧美伦理片在线看| 亚洲av成人无码网天堂| 激情黄色小视频| 亚洲国产欧美一区二区三区不卡| 国产精品午夜一区二区| 日本中文字幕免费| 欧美精品日韩三级| 美女禁区视频免费观看精选| 久久综合激情| 麻豆视频一区二区|