色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)任務(wù)如何擁有自己的CPU

j4AI_wujianying ? 來源:?jiǎn)纹瑱C(jī)精講吳鑒鷹 ? 2020-05-14 15:01 ? 次閱讀

這個(gè)是在網(wǎng)上看到的一篇文檔,作者的目的是設(shè)計(jì)一個(gè)簡(jiǎn)單的嵌入式操作系統(tǒng),只實(shí)現(xiàn)一個(gè)基本任務(wù)調(diào)度器的功能。正如作者所說,雖然不能稱為操作系統(tǒng),但已體現(xiàn)了小型嵌入式操作系統(tǒng)的精髓。對(duì)于我們來說是很好的學(xué)習(xí)資料,可以從中一窺操作系統(tǒng)的面目,今天分享給大家。

1、多任務(wù)機(jī)制

其實(shí)在單一CPU 的情況下,是不存在真正的多任務(wù)機(jī)制的,存在的只有不同的任務(wù)輪流使用CPU,所以本質(zhì)上還是單任務(wù)的。但由于CPU執(zhí)行速度非常快,加上任務(wù)切換十分頻繁并且切換的很快,所以我們感覺好像有很多任務(wù)同時(shí)在運(yùn)行一樣。這就是所謂的多任務(wù)機(jī)制。

實(shí)時(shí)系統(tǒng)的特征是延時(shí)可預(yù)測(cè),能夠在一個(gè)規(guī)定的時(shí)間內(nèi)(通常是 ms 級(jí)別的)對(duì)某些信號(hào)做出反應(yīng)。

2、任務(wù)的狀態(tài)


任務(wù)有下面的特性:任務(wù)并不是隨時(shí)都可以運(yùn)行的,而一個(gè)已經(jīng)運(yùn)行的任務(wù)并不能保證一直占有 CPU 直到運(yùn)行完。一般有就緒態(tài),運(yùn)行態(tài),掛起態(tài)等。

運(yùn)行態(tài):一個(gè)運(yùn)行態(tài)的任務(wù)是一個(gè)正在使用 CPU 的任務(wù)。任何時(shí)刻有且只有一個(gè)運(yùn)行著的任務(wù)。

就緒態(tài):一個(gè)就緒態(tài)任務(wù)是可運(yùn)行的,等待占有 CPU 的任務(wù)釋放 CPU。

掛起態(tài):某些條件不滿足而掛起不能運(yùn)行的狀態(tài)。

3、如何轉(zhuǎn)化為就緒態(tài)

INT32U OSRdyTbl; /* 就緒任務(wù)表 */

上面定義一個(gè) 32 位變量,每一位代表一個(gè)任務(wù),0 表示掛起狀態(tài),1 表示就緒狀態(tài)。它記錄了各任務(wù)的就緒與否狀態(tài),稱它為就緒表。OSRdyTbl 定義為 32 位變量,對(duì)應(yīng)32 個(gè)任務(wù)。當(dāng)然,定義為 64 位的話,便最多能支持 64 個(gè)任務(wù)。這樣,可以定義兩個(gè)宏,實(shí)現(xiàn)把任務(wù)的狀態(tài)變?yōu)榫途w或掛起態(tài)。

/* 在就緒表中登記就緒任務(wù) */

#define OSSetPrioRdy(prio) { OSRdyTbl |= 0x01<

/* 從就緒表中刪除任務(wù) */

#define OSDelPrioRdy(prio) { OSRdyTbl &= ~(0x01<

任務(wù)之間互相獨(dú)立,不存在互相調(diào)用的關(guān)系。所有任務(wù)在邏輯上都是平等的。由于任務(wù)之間互相看不見,所以他們之間的信息傳輸就無法當(dāng)面完成。這就需要各種通信機(jī)制如信號(hào)量,消息郵箱,隊(duì)列等來實(shí)現(xiàn)。

4、什么是搶占式調(diào)度?

調(diào)度的概念,通俗的說就是系統(tǒng)在多個(gè)任務(wù)中選擇合適的任務(wù)執(zhí)行。系統(tǒng)如何知道何時(shí)該執(zhí)行哪個(gè)任務(wù)?可以為每個(gè)任務(wù)安排一個(gè)唯一的優(yōu)先級(jí)別,當(dāng)同時(shí)有多個(gè)任務(wù)就緒時(shí),優(yōu)先運(yùn)行優(yōu)先級(jí)較高的任務(wù)。同時(shí),任務(wù)的優(yōu)先級(jí)也作為任務(wù)的唯一標(biāo)識(shí)號(hào)。代碼中都是對(duì)標(biāo)識(shí)號(hào)來完成對(duì)任務(wù)的操作的。

所謂“搶占式調(diào)度”是指:一旦就緒狀態(tài)中出現(xiàn)優(yōu)先權(quán)更高的任務(wù),便立即剝奪當(dāng)前任務(wù)的運(yùn)行權(quán),把CPU分配給更高優(yōu)先級(jí)的任務(wù)。這樣CPU 總是執(zhí)行處于就緒條件下優(yōu)先級(jí)最高的任務(wù)。

5、多任務(wù)系統(tǒng)的時(shí)間管理

與人一樣,多任務(wù)系統(tǒng)也需要一個(gè)“心跳”來維持其正常運(yùn)行,這個(gè)心跳叫做時(shí)鐘節(jié)拍,通常由定時(shí)器產(chǎn)生一個(gè)固定周期的中斷來充當(dāng)。

OSTimeDly 函數(shù)就是以時(shí)鐘節(jié)拍為基準(zhǔn)來延時(shí)的(在時(shí)鐘的中斷服務(wù)函數(shù)中,依次對(duì)各個(gè)延時(shí)任務(wù)的延時(shí)節(jié)拍數(shù)減1。若發(fā)現(xiàn)某個(gè)任務(wù)的延時(shí)節(jié)拍數(shù)變?yōu)?,則把它從掛起態(tài)置為就緒態(tài)。)。這個(gè)函數(shù)完成功能很簡(jiǎn)單,就是先掛起當(dāng)起當(dāng)前任務(wù),設(shè)定其延時(shí)節(jié)拍數(shù),然后進(jìn)行任務(wù)切換,在指定的時(shí)鐘節(jié)拍數(shù)到來之后,將當(dāng)前任務(wù)恢復(fù)為就緒狀態(tài)。任務(wù)必須通過OSTimeDly或 OSTaskSuspend 讓出CPU的使用權(quán)(延時(shí)或等待事件),使更低優(yōu)先級(jí)任務(wù)有機(jī)會(huì)運(yùn)行。

6、如何實(shí)現(xiàn)多任務(wù)?


只有一個(gè)CPU,如何在同一時(shí)間實(shí)現(xiàn)多個(gè)獨(dú)立程序的運(yùn)行?要實(shí)現(xiàn)多任務(wù),條件是每個(gè)任務(wù)互相獨(dú)立。人如何才能獨(dú)立,有自己的私有財(cái)產(chǎn)。任務(wù)也一樣,如果一個(gè)任務(wù)有自己的CPU,堆棧,程序代碼,數(shù)據(jù)存儲(chǔ)區(qū),那這個(gè)任務(wù)就是一個(gè)獨(dú)立的任務(wù)。(CPU是通過多任務(wù)機(jī)制獲得的,其他的需要你分配)

TIPS:

如果一個(gè)任務(wù)正在運(yùn)行某個(gè)公共函數(shù)時(shí)(如Printf), 被另一個(gè)高優(yōu)先級(jí)的任務(wù)搶占,那么當(dāng)這個(gè)高優(yōu)先級(jí)的任務(wù)也調(diào)用同一個(gè)公共函數(shù)時(shí),極有可能破壞原任務(wù)的數(shù)據(jù)。因?yàn)閮蓚€(gè)任務(wù)可能共用一套數(shù)據(jù)。為了防止這種情況發(fā)生,常采用兩種措施:可重入設(shè)計(jì)和互斥調(diào)用。

可重入函數(shù)中所有的變量均為局部變量,局部變量在調(diào)用時(shí)臨時(shí)分配空間,所以不同的任務(wù)在不同的時(shí)刻調(diào)用該函數(shù)時(shí),它們的同一個(gè)局部變量所分配的存儲(chǔ)空間并不相同(任務(wù)私有棧中),互不干擾。另外,如果可重入函數(shù)調(diào)用了其他函數(shù),則這些被調(diào)用的函數(shù)也必須是可重入函數(shù)。

實(shí)現(xiàn)互斥(獨(dú)占)訪問的方法有關(guān)中斷,關(guān)調(diào)度,互斥信號(hào)量,計(jì)數(shù)信號(hào)量等。

6.1 一個(gè)任務(wù)如何擁有自己的程序代碼

對(duì)于如何實(shí)現(xiàn)多任務(wù),首先是程序代碼,每個(gè)任務(wù)的程序代碼與函數(shù)一樣,與51 的裸奔程序一樣,每個(gè)任務(wù)都是一個(gè)大循環(huán)。然后是數(shù)據(jù)存儲(chǔ)區(qū),由于全局變量是系統(tǒng)共用的,各個(gè)任務(wù)共享,不是任務(wù)私有,所以這里的數(shù)據(jù)存儲(chǔ)區(qū)是指任務(wù)的私有變量,如何變成私有?局部變量也。編譯器是把局部變量保存在棧里的,所以好辦,只要任務(wù)有個(gè)私有的棧就行。

TIPS:

臨界資源是一次僅允許一個(gè)任務(wù)使用的共享資源。每個(gè)任務(wù)中訪問臨界資源的那段程序稱為臨界區(qū)。

在多任務(wù)系統(tǒng)中,為保障數(shù)據(jù)的可靠性和完整性,共享資源要互斥(獨(dú)占)訪問,所以全局變量(只讀的除外)不能同時(shí)有多個(gè)任務(wù)訪問,即一個(gè)任務(wù)訪問的時(shí)候不能被其他任務(wù)打斷。共享資源是一種臨界資源。

6.2 一個(gè)任務(wù)如何擁有自己的堆棧、數(shù)據(jù)存儲(chǔ)區(qū)

私有棧的作用是存放局部變量,函數(shù)的參數(shù),它是一個(gè)線性的空間,所以可以申請(qǐng)一個(gè)靜態(tài)數(shù)組,把棧頂指針SP指向棧的數(shù)組的首元素(遞增棧)或最后一個(gè)元素(遞減棧)。即可打造一個(gè)人工的棧出來。每個(gè)任務(wù)還要有記錄自己棧頂指針的變量,保存在任務(wù)控制塊(TCB)中。

什么是任務(wù)控制塊?

系統(tǒng)中的每個(gè)任務(wù)具有一個(gè)任務(wù)控制塊,任務(wù)控制塊記錄任務(wù)執(zhí)行的環(huán)境,這里的任務(wù)控制塊比較簡(jiǎn)單,只包含了任務(wù)的堆棧指針和任務(wù)延時(shí)節(jié)拍數(shù)。任務(wù)控制塊是任務(wù)的身份證。它把任務(wù)的程序與數(shù)據(jù)聯(lián)系起來,找到它就可以得到任務(wù)的所有資源。

6.3 一個(gè)任務(wù)如何擁有自己的CPU

最后來看看任務(wù)是如何“擁有”自己的CPU 的。只有一個(gè) CPU,各個(gè)任務(wù)共享,輪流使用。如何才能實(shí)現(xiàn)?我們先來看看中斷的過程,當(dāng)中斷來臨時(shí),CPU 把當(dāng)前程序的運(yùn)行地址,寄存器等現(xiàn)場(chǎng)數(shù)據(jù)保存起來(一般保存在棧里),然后跳到中斷服務(wù)程序執(zhí)行。待執(zhí)行完畢,再把先前保存的數(shù)據(jù)裝回CPU 又回到原來的程序執(zhí)行。這樣就實(shí)現(xiàn)了兩個(gè)不同程序的交叉運(yùn)行。

借鑒這種思想不就能實(shí)現(xiàn)多任務(wù)了嗎!模仿中斷的過程就可以實(shí)現(xiàn)任務(wù)切換運(yùn)行。任務(wù)切換時(shí),把當(dāng)前任務(wù)的現(xiàn)場(chǎng)數(shù)據(jù)保存在自己的任務(wù)棧里面,再把待運(yùn)行的任務(wù)的數(shù)據(jù)從自己的任務(wù)棧裝載到CPU中,改變 CPU 的 PC,SP,寄存器等。可以說,任務(wù)的切換是任務(wù)運(yùn)行環(huán)境的切換。而任務(wù)的運(yùn)行環(huán)境保存在任務(wù)棧中,也就是說,任務(wù)切換的關(guān)鍵是把任務(wù)的私有堆棧指針賦予處理器的堆棧指針SP。

創(chuàng)建一個(gè)任務(wù)。它接收三個(gè)參數(shù),分別是任務(wù)的入口地址,任務(wù)堆棧的首地址和任務(wù)的優(yōu)先級(jí)。調(diào)用本函數(shù)后,系統(tǒng)會(huì)根據(jù)用戶給出的參數(shù)初始化任務(wù)棧,并把棧頂指針保存到任務(wù)控制塊中,在任務(wù)就緒表標(biāo)記該任務(wù)為就緒狀態(tài)。最后返回,這樣一個(gè)任務(wù)就創(chuàng)建成功了。

當(dāng)一個(gè)任務(wù)將要運(yùn)行時(shí),便通過取得它的堆棧指針(保存在任務(wù)控制塊中)將這些寄存器出棧裝入CPU 相應(yīng)的位置即可。

6.4 如何實(shí)現(xiàn)搶占式調(diào)度?

基于任務(wù)優(yōu)先級(jí)的搶占式調(diào)度,也就是最高優(yōu)先級(jí)的任務(wù)一旦處于就緒狀態(tài),則立即搶占正在運(yùn)行的低優(yōu)先級(jí)任務(wù)的處理器資源。為了保證CPU 總是執(zhí)行處于就緒條件下優(yōu)先級(jí)最高的任務(wù),每當(dāng)任務(wù)狀態(tài)改變后,即判斷當(dāng)前運(yùn)行的任務(wù)是否是就緒任務(wù)中優(yōu)先級(jí)最高的,否則進(jìn)行任務(wù)切換。

任務(wù)狀態(tài)會(huì)在什么時(shí)候發(fā)生改變呢?有下面兩種情況:

1、高優(yōu)先級(jí)的任務(wù)因?yàn)樾枰撤N資源或延時(shí),主動(dòng)請(qǐng)求掛起,讓出處理器,此時(shí)將調(diào)度就緒狀態(tài)的低優(yōu)先級(jí)任務(wù)獲得執(zhí)行,這種調(diào)度稱為任務(wù)級(jí)的切換。如任務(wù)執(zhí)行OSTimeDly()或OSTaskSuspend()把自身掛起就屬于這種。

2、高優(yōu)先級(jí)的任務(wù)因?yàn)闀r(shí)鐘節(jié)拍到來,或在中斷處理結(jié)束后,內(nèi)核發(fā)現(xiàn)更高優(yōu)先級(jí)任務(wù)獲得了執(zhí)行條件(如延時(shí)的時(shí)鐘到時(shí))則在中斷后直接切換到更高優(yōu)先級(jí)任務(wù)執(zhí)行。這種調(diào)度也稱為中斷級(jí)的切換。

6.5 掛起/恢復(fù)任務(wù)

1. 掛起任務(wù)

通過 OSTaskSuspend()可以主動(dòng)掛起一個(gè)任務(wù)。OSTaskSuspend()會(huì)把任務(wù)從任務(wù)就緒表中移出,最后重新啟動(dòng)系統(tǒng)調(diào)度。這個(gè)函數(shù)可以掛起任務(wù)本身也可以掛起其他任務(wù)。

2 .恢復(fù)任務(wù)(OSTaskResume())

可以讓被 OSTaskSuspend 或 OSTimeDly 掛起的任務(wù)恢復(fù)就緒態(tài),然后進(jìn)行任務(wù)調(diào)度。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5089

    文章

    19170

    瀏覽量

    306792
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10899

    瀏覽量

    212607

原文標(biāo)題:一個(gè)小型嵌入式操作系統(tǒng)設(shè)計(jì):精髓都有了!

文章出處:【微信號(hào):wujianying_danpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux之CPU調(diào)度策略和CPU親和性

    、調(diào)度策略 調(diào)度進(jìn)程 單個(gè) CPU次只能執(zhí)行個(gè)進(jìn)程,雖然 Linux 系統(tǒng)通過使用多任務(wù)
    的頭像 發(fā)表于 12-05 16:38 ?554次閱讀
    Linux之<b class='flag-5'>CPU</b>調(diào)度策略和<b class='flag-5'>CPU</b>親和性

    從零到:搭建屬于自己的海外IP代理池

    從零到搭建屬于自己的海外IP代理池是個(gè)復(fù)雜但具有挑戰(zhàn)性的任務(wù),它涉及多個(gè)步驟和考慮因素。
    的頭像 發(fā)表于 11-15 08:15 ?585次閱讀

    如何訓(xùn)練自己的AI大模型

    訓(xùn)練自己的AI大模型是個(gè)復(fù)雜且耗時(shí)的過程,涉及多個(gè)關(guān)鍵步驟。以下是個(gè)詳細(xì)的訓(xùn)練流程: 、明
    的頭像 發(fā)表于 10-23 15:07 ?2470次閱讀

    服務(wù)器cpu和臺(tái)式機(jī)cpu區(qū)別

    服務(wù)器CPU和臺(tái)式機(jī)CPU的區(qū)別是個(gè)復(fù)雜的話題,涉及到多個(gè)方面,包括設(shè)計(jì)、性能、功耗、可靠性、成本等。 服務(wù)器CPU和臺(tái)式機(jī)
    的頭像 發(fā)表于 10-10 15:12 ?1468次閱讀

    為什么外設(shè)要通過接口與CPU相連

    外設(shè)與CPU之間的連接是計(jì)算機(jī)系統(tǒng)中個(gè)非常關(guān)鍵的部分。外設(shè)(Peripherals)是指除了CPU、內(nèi)存和硬盤之外的所有設(shè)備,如鍵盤、鼠標(biāo)、打印機(jī)、顯示器等。這些設(shè)備需要與
    的頭像 發(fā)表于 09-30 14:10 ?1174次閱讀

    雙核cpu和單核cpu的區(qū)別

    理器核心連接起來,從而提高計(jì)算能力。這種設(shè)計(jì)使得處理器能夠同時(shí)執(zhí)行多個(gè)任務(wù),提高計(jì)算效率和性能。 單核CPU :只有個(gè)處理器核心,所有的計(jì)算任務(wù)
    的頭像 發(fā)表于 09-24 16:17 ?3639次閱讀

    freertos最多支持多少個(gè)任務(wù)

    FreeRTOS是個(gè)輕量級(jí)的實(shí)時(shí)操作系統(tǒng)(RTOS),其設(shè)計(jì)初衷就是為了提供簡(jiǎn)單、可靠且高效的實(shí)時(shí)任務(wù)管理。關(guān)于FreeRTOS最多支持多少個(gè)任務(wù)
    的頭像 發(fā)表于 09-02 14:21 ?1129次閱讀

    如何使用freeRTOS在兩個(gè)任務(wù)之間傳輸任務(wù)數(shù)據(jù)?

    的問題是不知道如何將傳感器的數(shù)據(jù)從個(gè)任務(wù)傳輸?shù)搅?b class='flag-5'>一個(gè)任務(wù)。 或許這根本就不是個(gè)好主意,應(yīng)該在
    發(fā)表于 07-03 07:55

    請(qǐng)問下FREERTOS只能創(chuàng)建4個(gè)任務(wù),修改哪個(gè)宏定義可以增加創(chuàng)建任務(wù)的數(shù)量?

    請(qǐng)問下FREERTOS只能創(chuàng)建4個(gè)任務(wù),修改哪個(gè)宏定義可以增加創(chuàng)建任務(wù)的數(shù)量?解決方法:增加FREERTOS的堆。
    發(fā)表于 05-13 06:44

    freertos任務(wù)創(chuàng)建,每一個(gè)任務(wù)分配的內(nèi)存是多大才好,怎么計(jì)算呢?

    小白剛剛接觸freertos,想問下就創(chuàng)建任務(wù)而言,每一個(gè)任務(wù)分配的內(nèi)存是多大才好,怎么計(jì)算呢? 另外,每個(gè)任務(wù)的執(zhí)行周期怎么確定?在
    發(fā)表于 04-23 06:39

    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程CPU密集型任務(wù)TaskPool】

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。 基于多線程并發(fā)機(jī)制處理
    的頭像 發(fā)表于 04-01 22:25 ?875次閱讀
    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程<b class='flag-5'>CPU</b>密集型<b class='flag-5'>任務(wù)</b>TaskPool】

    文詳解GPU硬件與CUDA開發(fā)工具

    CPU 和 GPU 的顯著區(qū)別是:個(gè)典型的 CPU 擁有少數(shù)幾個(gè)快速的計(jì)算核心,而
    的頭像 發(fā)表于 03-21 10:15 ?1302次閱讀
    <b class='flag-5'>一</b>文詳解GPU硬件與CUDA開發(fā)工具

    服務(wù)器中的CPU核心和線程到底是什么?

    CPU核心作為CPU(中央處理單元)的主要處理單元。該組件從計(jì)算機(jī)內(nèi)存中讀取并執(zhí)行指令。每個(gè)核心次只能運(yùn)行項(xiàng)任務(wù),因此具有多個(gè)核心的
    的頭像 發(fā)表于 03-04 17:09 ?1449次閱讀

    HarmonyOS CPU與I/O密集型任務(wù)開發(fā)指導(dǎo)

    。 基于多線程并發(fā)機(jī)制處理CPU密集型任務(wù)可以提高CPU利用率,提升應(yīng)用程序響應(yīng)速度。 當(dāng)進(jìn)行系列同步任務(wù)時(shí),推薦使用Worker;而進(jìn)行
    的頭像 發(fā)表于 02-18 10:17 ?992次閱讀
    HarmonyOS <b class='flag-5'>CPU</b>與I/O密集型<b class='flag-5'>任務(wù)</b>開發(fā)指導(dǎo)

    為什么GPU比CPU更快?

    GPU比CPU更快的原因并行處理能力:GPU可以同時(shí)處理多個(gè)任務(wù)和數(shù)據(jù),而CPU通常只能次處理項(xiàng)任務(wù)
    的頭像 發(fā)表于 01-26 08:30 ?2511次閱讀
    為什么GPU比<b class='flag-5'>CPU</b>更快?
    主站蜘蛛池模板: 青柠在线观看免费播放电影 | 暖暖视频免费观看视频| 国产在线观看黄| 国产成人在线小视频| 岛国片免费看| 囯产精品麻豆巨作久久| 成人小视频在线观看| GAY东北澡堂激情2022| 99久久夜色精品国产亚洲AV卜| 主播蜜汁丝袜精品自拍| 在线视频免费观看| 中文字幕在线观看网站| 最新国自产拍天天更新| 18岁男人女人插孔| 97视频在线免费| 99精品视频在线观看免费播放| 91精品国产色综合久久不| 97超碰97资源在线观看视频| 99精品小视频| 啊…嗯啊好深男男高h文总受| qq快播电影网| yellow免费观看直播| 成人无码在线视频区| 公交车轮C关老师| 国产精品久久久久a影院| 国产欧美精品国产国产专区| 国模沟沟一区二区三区| 久草色在线| 美女扒开腿让男生桶爽免费APP| 免费果冻传媒2021视频| 欧美极品尿交| 色屁屁影院| 新版孕妇bbwbbwbbw| 亚洲色婷婷久久精品AV蜜桃| 伊人影院2019| 99久久精品久久久久久清纯| 成年人视频在线免费看| 国产精品色欲AV亚洲三区软件 | 精子pk美女| 麻豆婷婷狠狠色18禁久久| 欧美性情一线免费http|