• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于STM32的mbedOS優(yōu)先級反轉(zhuǎn)問題機制剖析

    2023-02-17 02:01:02葉柯陽王宜懷徐婷婷劉長勇
    計算機應(yīng)用與軟件 2023年1期
    關(guān)鍵詞:藍燈線程列表

    葉柯陽 王宜懷 徐婷婷 劉長勇

    1(蘇州大學計算機科學與技術(shù)學院 江蘇 蘇州 215006) 2(武夷學院數(shù)學與計算機學院 福建 武夷山 354300)

    0 引 言

    mbedOS是一款面向ARM Cortex-M系列處理器的開源實時操作系統(tǒng)(Real-Time Operating System,RTOS)[1]。它于2014年由ARM公司推出,專為物聯(lián)網(wǎng) (Internet of Things,IoT) 中的“物體”設(shè)計[2],包含了開發(fā)基于Arm Cortex-M微控制器的聯(lián)網(wǎng)產(chǎn)品所需的所有特性,包括安全性、連接性、RTOS傳感器和I/O設(shè)備的驅(qū)動程序,具有堆棧共用和事件驅(qū)動兩大代表性特點。

    目前,針對嵌入式實時操作系統(tǒng)優(yōu)先級反轉(zhuǎn)問題的研究集中在VxWorks操作系統(tǒng)、WinCE操作系統(tǒng)、μC/OS-Ⅱ操作系統(tǒng)等,而對mbedOS實時操作系統(tǒng)避免優(yōu)先級反轉(zhuǎn)問題的機制研究方面缺乏相關(guān)材料。為此,本文將利用Cortex-M4內(nèi)核的STM32微控制器,基于Kinetis Design Studio 3.1.0 IDE開發(fā)環(huán)境和SD-mbedOS工程框架[3],通過一個測試工程對mbedOS避免優(yōu)先級反轉(zhuǎn)問題的機制進行分析,剖析其從各線程啟動,到申請互斥量,再到最終釋放互斥量的全過程,結(jié)合相關(guān)函數(shù)、關(guān)鍵代碼、流程圖、時序圖等分析其實現(xiàn)的原理。通過對mbedOS避免優(yōu)先級反轉(zhuǎn)問題機制的剖析,可為 mbedOS的應(yīng)用研究和在不同微控制器上的移植提供基礎(chǔ),也可為不同實時操作系統(tǒng)下避免優(yōu)先級反轉(zhuǎn)問題機制的比較分析提供參考。

    1 優(yōu)先級反轉(zhuǎn)問題描述

    1.1 歷史問題

    “火星探路者”于1997年7月4日在火星表面著陸。在開始的幾天內(nèi)工作穩(wěn)定,并傳回大量數(shù)據(jù),但是幾天后,“探路者”開始出現(xiàn)系統(tǒng)復位、數(shù)據(jù)丟失的現(xiàn)象。究其原因是發(fā)生了優(yōu)先級反轉(zhuǎn)問題[4]。

    1.2 一般性描述

    當線程以獨占方式使用共享資源時,可能出現(xiàn)低優(yōu)先級線程先于高優(yōu)先級線程被運行的現(xiàn)象,這就是優(yōu)先級反轉(zhuǎn)問題,可進行如下一般性描述。

    假設(shè)有三個線程Ta、Tb、Tc,其優(yōu)先級分別記為Pa、Pb、Pc,且有Pa>Pb>Pc,Ta和Tc使用一個共享資源S,Tb并不使用共享資源S,用信號量x(x=0,1)標識對S的獨占訪問,初始時x=1,表示可獨占S。設(shè)t0時刻,Tc先運行并獲取信號量(即x由1變?yōu)?,表示S已被占用),使用S。t1時刻,Ta被調(diào)度運行,因為Pa>Pc,故搶占Tc獲得CPU使用權(quán)。Ta運行至t2時刻,需訪問S,但Tc并沒有釋放S(即x仍為0),所以Ta放入阻塞隊列,直到x=1,才能從阻塞隊列中移出,放入就緒隊列,被重新調(diào)度運行。t3時刻,Tb搶占Tc獲得運行,此時就出現(xiàn)了Tb雖然優(yōu)先級比Ta低,卻比Ta先運行的現(xiàn)象,不合理,這就是優(yōu)先級反轉(zhuǎn)問題。表1給出了上述過程的運行時序。

    表1 優(yōu)先級反轉(zhuǎn)過程

    1.3 避免優(yōu)先級反轉(zhuǎn)問題的意義

    對于嵌入式實時操作系統(tǒng)來說,最重要的指標在于確認線程執(zhí)行的時間是可預測的,即要確保在任何時刻執(zhí)行某個線程都不能超過某個特定的時間。然而由于本身基于優(yōu)先級設(shè)計的線程,每個優(yōu)先級不同的線程往往對應(yīng)著現(xiàn)實中執(zhí)行的任務(wù),若發(fā)生了優(yōu)先級反轉(zhuǎn),會導致低優(yōu)先級線程比高優(yōu)先級線程先執(zhí)行,造成線程調(diào)度時時間的不確定性,破壞實時系統(tǒng)的實時性,嚴重時可能導致系統(tǒng)崩潰。因此處理好這類問題對于實時操作系統(tǒng)的正常運行至關(guān)重要。

    2 優(yōu)先級反轉(zhuǎn)問題避免方法

    2.1 基本方法

    常見的避免優(yōu)先級反轉(zhuǎn)方法一般有兩種,分別為優(yōu)先級繼承和優(yōu)先級天花板。

    (1) 優(yōu)先級繼承。優(yōu)先級繼承(priority inheritance)是指通過臨時提升持有資源的低優(yōu)先級線程的優(yōu)先級至請求訪問同一資源的高優(yōu)先級線程的優(yōu)先級來避免優(yōu)先級反轉(zhuǎn)的方法[5]。

    (2)優(yōu)先級天花板。優(yōu)先級天花板(priority ceiling)是指通過將申請并得到資源的線程的優(yōu)先級臨時提升至所有可能使用該資源的線程中最高優(yōu)先級線程的優(yōu)先級(即天花板)來避免優(yōu)先級反轉(zhuǎn)的方法[5]。

    2.2 操作系統(tǒng)層面解決方法

    許多嵌入式實時操作系統(tǒng),例如μC/OS-Ⅱ、VxWorks、WinCE等針對這一問題都有自己的處理方式。μC/OS-Ⅱ操作系統(tǒng)提供互斥信號量mutex來避免優(yōu)先級反轉(zhuǎn),其利用的是優(yōu)先級置頂協(xié)議[6]。VxWorks操作系統(tǒng)對優(yōu)先級反轉(zhuǎn)問題采用優(yōu)先級繼承協(xié)議,整體上使用互斥信號量,按優(yōu)先級與先入先出隊列兩種方式排列等待對該互斥信號量進行上鎖的線程,在創(chuàng)建互斥信號量時,選擇SEM_INVERSION_ SAFE與SEM_Q_PRIORITY兩種選擇值的域,即可避免優(yōu)先權(quán)反轉(zhuǎn)[7]。WinCE實時操作系統(tǒng)軟件采用優(yōu)先級繼承方式來避免優(yōu)先級反轉(zhuǎn),當高優(yōu)先級線程被低優(yōu)先級線程阻塞時,會提升低優(yōu)先級線程的優(yōu)先級至高優(yōu)先級線程的優(yōu)先級,從而避免優(yōu)先級反轉(zhuǎn)現(xiàn)象[8]。

    3 mbedOS優(yōu)先級反轉(zhuǎn)問題機制流程分析

    本文將使用一個測試工程來對mbedOS避免優(yōu)先級反轉(zhuǎn)問題機制進行流程分析。首先對部分關(guān)鍵代碼進行分析,然后給出調(diào)度時序,最后對執(zhí)行流程進行分段解析。測試工程的功能是:創(chuàng)建三個用戶線程Ta、Tb、Tc,初始優(yōu)先級分別設(shè)置為26、25、24(在mbedOS中數(shù)字越大優(yōu)先級越高,將此處三個線程的優(yōu)先級分別命名為Pa、Pb、Pc),啟動運行順序為Tc、Ta、Tb,其中Tc和Ta使用同一互斥量來申請對共享資源S的獨占使用,Tb并不使用共享資源S。測試工程通過串口輸出三個線程調(diào)度時使用互斥量避免優(yōu)先級反轉(zhuǎn)的詳細過程。為了確保整體執(zhí)行流程能夠循環(huán)執(zhí)行,過程中使用到了延時函數(shù)(會將線程放入延時隊列),此處模擬線程到達的先后順序為:經(jīng)過1秒后Tc到達,再經(jīng)過4秒后Ta、Tb到達(注意此處到達順序為先Ta后Tb)。測試工程的執(zhí)行流程如圖1所示。

    圖1 測試工程執(zhí)行流程

    3.1 關(guān)鍵代碼分析

    3.1.1互斥量控制塊

    在mbedOS中使用互斥量控制塊的方式來描述互斥量,數(shù)據(jù)結(jié)構(gòu)如下:

    typedef struct osRtxMutex_s

    {

    uint8_t id;

    //互斥量ID

    uint8_t state;

    //互斥量狀態(tài)

    uint8_t flags;

    //互斥量標志

    uint8_t attr;

    //互斥量屬性

    const char *name;

    //互斥量名稱

    osRtxThread_t *thread_list;

    //互斥量阻塞隊列

    osRtxThread_t *owner_thread;

    //互斥量私有線程

    struct osRtxMutex_s *owner_prev;

    //指向前一個互斥量

    struct osRtxMutex_s *owner_next;

    //指向下一個互斥量

    uint8_t lock;

    //互斥鎖

    uint8_t padding[3];

    //保留

    } osRtxMutex_t;

    其中互斥量屬性attr包括嵌套型互斥量(osMutexRecursive)、內(nèi)部優(yōu)先級互斥量(osMutexPrioInherit)和健壯互斥量(osMutexRobust)。當高優(yōu)先級的線程等待已被低優(yōu)先級的線程鎖定互斥量時,若該互斥量擁有內(nèi)部優(yōu)先級屬性,則低優(yōu)先級的線程會以高優(yōu)先級線程的優(yōu)先級運行,這種方式是以繼承的形式進行傳遞的。當線程解鎖互斥量時,線程的優(yōu)先級自動變?yōu)樗瓉淼膬?yōu)先級。mbedOS正是利用了這一關(guān)鍵屬性來避免優(yōu)先級反轉(zhuǎn)問題。

    3.1.2互斥量鎖定函數(shù)

    在mbedOS中,線程可通過使用互斥量對象調(diào)用lock函數(shù)的方式申請鎖定互斥量。lock函數(shù)內(nèi)部調(diào)用順序為lock→osMutexAcquire→_ _svcMutexAcquire→觸發(fā)SVC中斷服務(wù)程序SVC_Handler→實際互斥量鎖定函數(shù)svcRtxMutexAcquire。

    其中涉及到優(yōu)先級部分的關(guān)鍵代碼如下:

    if ((mutex->attr & osMutexPrioInherit) !=0U) {

    if (mutex->owner_thread->prioritypriority) {

    mutex->owner_thread->priority=thread->priority;

    osRtxThreadListSort(mutex->owner_thread);

    }

    }

    代碼段分析:if((mutex->attr & osMutexPrioInherit)!=0U)語句表示判斷該互斥量對象是否具有內(nèi)部優(yōu)先級屬性,若包含則進一步判斷該互斥量私有線程的優(yōu)先級mutex->owner_thread->priority是否小于當前運行線程的優(yōu)先級thread->priority,若小于則將當前運行線程的優(yōu)先級賦值給該互斥量私有線程的優(yōu)先級,即所謂的優(yōu)先級繼承。

    3.1.3互斥量解鎖函數(shù)

    在mbedOS中,線程可通過使用互斥量對象調(diào)用unlock函數(shù)的方式申請解鎖互斥量。unlock函數(shù)內(nèi)部調(diào)用順序為unlock→osMutexRelease→_ _svcMutexRelease→觸發(fā)SVC中斷服務(wù)程序SVC_Handler→實際互斥量解鎖函數(shù)svcRtxMutexRelease。

    其中涉及到優(yōu)先級部分的關(guān)鍵代碼如下:

    if ((mutex->attr & osMutexPrioInherit)!=0U) {

    priority=thread->priority_base;

    mutex0=thread->mutex_list;

    while (mutex0 != NULL) {

    if ((mutex0->thread_list!=NULL) && (mutex0->thread_list->priority>priority)) {

    priority=mutex0->thread_list->priority;

    }

    mutex0=mutex0->owner_next;

    }

    thread->priority=priority;

    }

    代碼段分析:if((mutex->attr & osMutexPrioInherit)!=0U)語句表示判斷該互斥量是否具有內(nèi)部優(yōu)先級屬性,priority和mutex0均表示臨時局部變量,thread表示當前運行線程。若該互斥量包含內(nèi)部優(yōu)先級屬性,則首先獲取當前運行線程初始化時的優(yōu)先級thread->priority_base賦值給priority以及當前運行線程所擁有的互斥量列表指針thread->mutex_list賦值給mutex0。然后使用while循環(huán)找到mutex0所在的互斥量列表中的所有互斥量所擁有的所有線程,獲取優(yōu)先級最高的線程的優(yōu)先級并賦值給priority。最后將當前運行線程的優(yōu)先級變?yōu)閜riority。

    特別要指出的是,上述while循環(huán)語句是為了避免當?shù)蛢?yōu)先級線程與多個高優(yōu)先級線程嵌套使用多個互斥量時可能造成的優(yōu)先級反轉(zhuǎn)現(xiàn)象。由于只有當系統(tǒng)中存在三個或三個以上線程時才可能發(fā)生優(yōu)先級反轉(zhuǎn)現(xiàn)象,故此處以四個線程為例。假設(shè)有兩個高優(yōu)先級線程Ta和Tb、一個中優(yōu)先級線程Tc以及一個低優(yōu)先級線程Td,優(yōu)先級分別為Pa、Pb、Pc、Pd,其中Pa>Pb>Pc>Pd,Ta和Td使用同一互斥量mutex1共享資源S1, Tb和Td使用同一互斥量mutex2共享資源S2,且Td首先申請鎖定互斥量mutex2,再在釋放mutex2之前申請鎖定互斥量mutex1(連續(xù)鎖定多個互斥量遵循后進先出原則,即后鎖定的互斥量先釋放)。設(shè)t0時刻,Td首先到達并鎖定了互斥量mutex2和互斥量mutex1。t1時刻Ta和Tb到達,等待Td解鎖各自需要的互斥量。Tc也在t1時刻到達,由于Ta和Tb調(diào)用互斥量鎖定函數(shù)svcRtxMutexAcquire時已將Td的優(yōu)先級提升至最高值Pa,故Tc會進入等待狀態(tài),等待Td運行。t2時刻,Td解鎖互斥量mutex1,若此時未使用上述while循環(huán)語句,Td會直接降為其初始優(yōu)先級Pd,此時Ta會搶占Td獲得CPU使用權(quán),鎖定互斥量mutex1并執(zhí)行。t3時刻,Ta運行完畢,此時處于等待狀態(tài)的Td由于優(yōu)先級低于Tc,會被Tc搶占CPU使用權(quán),使得Td無法解鎖互斥量mutex2,從而導致優(yōu)先級低于Tb的線程Tc卻先于Tb運行,造成優(yōu)先級反轉(zhuǎn)現(xiàn)象,具體過程如表2所示。

    表2 四線程優(yōu)先級反轉(zhuǎn)過程

    續(xù)表2

    若只涉及到一個低優(yōu)先級線程和一個高優(yōu)先級線程對于同一個互斥量的使用,則在低優(yōu)先級線程(即上述代碼中的thread)解鎖互斥量的過程中,由于thread擁有的互斥量列表已在執(zhí)行上述代碼之前釋放,故mutex0為空,while循環(huán)實際上并不執(zhí)行,而是直接通過語句:

    priority=thread->priority_base;

    thread->priority=priority;

    將thread的優(yōu)先級轉(zhuǎn)變?yōu)槠涑跏純?yōu)先級。

    3.2 優(yōu)先級反轉(zhuǎn)問題測試工程執(zhí)行流程分析

    本文的測試工程在STM32微控制器[13]上進行。STM32片內(nèi)Flash存儲區(qū)大小為256 KB,一般用來存放中斷向量、程序代碼、常量等;片內(nèi)RAM存儲區(qū)大小為32 KB,一般用于存放初始化的全局變量、靜態(tài)變量、局部變量等。

    3.2.1線程調(diào)度時序分析

    測試工程涉及到的三個線程具體調(diào)度時序圖如圖2所示。

    圖2 線程調(diào)度時序圖

    其中“?”表示線程或隊列的有效運行時間,實線箭頭表示線程運行、進入隊列、申請互斥量或改變優(yōu)先級,虛線箭頭表示從隊列取線程(互斥量)或返回申請互斥量結(jié)果。

    3.2.2執(zhí)行流程分段解析

    目前,國內(nèi)外針對嵌入式實時操作系統(tǒng)的優(yōu)先級反轉(zhuǎn)問題采用的分析方法,大多為一個基于示例圖的淺層實驗[9-10],均沒有完整地將處理機制分析清楚。針對上述問題,本文將采用基于時序圖并在代碼中相應(yīng)位置插入printf語句的方法進行分析。插入printf語句的分析方式是應(yīng)用最廣泛的調(diào)試技術(shù)之一,可應(yīng)用于計算機視覺中來輸出中間結(jié)果[11],亦可應(yīng)用于程序功能分析中得到故障產(chǎn)生的信息[12]。該方法具有簡單、清晰、直觀等優(yōu)點。

    (1) 線程啟動。從芯片上電到mbedOS 啟動完成后,會最終轉(zhuǎn)到app_init函數(shù)執(zhí)行,然后可在app_init函數(shù)中創(chuàng)建用戶線程[3]。在該函數(shù)中創(chuàng)建并先后啟動了三個用戶線程Tc、Ta、Tb,然后阻塞該函數(shù)的運行。為確保線程能正常被創(chuàng)建,不被其他線程打斷,在創(chuàng)建用戶線程的過程中,使用了互斥量。

    printf輸出結(jié)果如下:

    0-1.當前運行的主線程(2000FF80)啟動線程Tc.

    4-1.互斥量(20001694)的互斥鎖=0,表示未鎖定,當前運行線程(2000FF80)可以申請該互斥量

    4-2.互斥鎖變?yōu)?,表示互斥量申請成功

    8.互斥鎖變?yōu)?,表示完全解鎖,將當前互斥量(20001694)從當前運行線程(2000FF80)擁有的互斥量列表(2000FFAC)中移除

    *9-1.當前線程=2000FF80的初始優(yōu)先級=24,當前優(yōu)先級=24

    *9-2.釋放互斥量后,當前線程=2000FF80的初始優(yōu)先級=24,當前優(yōu)先級=24

    0-2.當前運行的主線程(2000FF80)啟動線程Ta.

    4-1.互斥量(20001814)的互斥鎖=0,表示未鎖定,當前運行線程(2000FF80)可以申請該互斥量

    4-2.互斥鎖變?yōu)?,表示互斥量申請成功

    8.互斥鎖變?yōu)?,表示完全解鎖,將當前互斥量(20001814)從當前運行線程(2000FF80)擁有的互斥量列表(2000FFAC)中移除

    *9-1.當前線程=2000FF80的初始優(yōu)先級=24,當前優(yōu)先級=24

    *9-2.釋放互斥量后,當前線程=2000FF80的初始優(yōu)先級=24,當前優(yōu)先級=24

    0-3.當前運行的主線程(2000FF80)啟動線程Tb.

    4-1.互斥量(20001754)的互斥鎖=0,表示未鎖定,當前運行線程(2000FF80)可以申請該互斥量

    4-2.互斥鎖變?yōu)?,表示互斥量申請成功

    8.互斥鎖變?yōu)?,表示完全解鎖,將當前互斥量(20001754)從當前運行線程(2000FF80)擁有的互斥量列表(2000FFAC)中移除

    *9-1.當前線程=2000FF80的初始優(yōu)先級=24,當前優(yōu)先級=24

    *9-2.釋放互斥量后,當前線程=2000FF80的初始優(yōu)先級=24,當前優(yōu)先級=24

    ******Tc、Ta和Tb啟動完成,同時阻塞主線程******

    (2) Tc申請鎖定互斥量。阻塞主線程后,由于初始時Tc延時1秒,而Ta和Tb延時5秒,故Tc會先從延時隊列中移出放入就緒隊列,搶占空閑線程獲得CPU使用權(quán)。由于互斥鎖為0,Tc申請鎖定互斥量成功,互斥鎖變?yōu)?,同時點亮藍燈。

    printf輸出結(jié)果如下:

    5.當前就緒隊列中最高優(yōu)先級線程(20001834)取代當前運行線程(200016B4),開始運行

    1.Tc(200016B4)獲得CPU使用權(quán),藍燈亮

    1-1.Tc申請鎖定互斥量

    4-1.互斥量(20001880)的互斥鎖=0,表示未鎖定,當前運行線程(200016B4)可以申請該互斥量

    4-2.互斥鎖變?yōu)?,表示互斥量申請成功

    1-2.Tc鎖定互斥量成功,將鎖定15秒

    (3) Ta申請鎖定互斥量。在Tc鎖定互斥量4秒后,Ta和Tb從延時隊列中移出,放入到就緒隊列,由于Pa大于Pb,故mbedOS會從就緒隊列中取出Ta激活運行。又因為Pa大于Pc,故Ta會搶占Tc獲得CPU使用權(quán),Tc被放入就緒隊列,同時熄滅藍燈。

    但當Ta運行至申請鎖定互斥量時,由于此時互斥量已被Tc鎖定(互斥鎖為1),Ta申請互斥量失敗,因此會將Tc的優(yōu)先級提升至與Ta的優(yōu)先級相同(即使用優(yōu)先級繼承方法將Tc的優(yōu)先級提升至Pa),然后將Tc放入就緒隊列重新排序,Ta自身進入等待隊列和互斥量阻塞隊列,將CPU使用權(quán)讓給Tc,等待Tc解鎖互斥量。

    printf輸出結(jié)果如下:

    5.當前就緒隊列中最高優(yōu)先級線程(20001834)取代當前運行線程(200016B4),開始運行

    2.Ta(20001834)搶占Tc獲得CPU使用權(quán),藍燈暗

    2-1.Ta申請鎖定互斥量

    6.互斥鎖=1,表示已鎖定(其所有者線程=200016B4),互斥量申請失敗

    *7-1.優(yōu)先級繼承前,當前互斥量私有線程=200016B4的優(yōu)先級=24低于當前運行線程=20001834的優(yōu)先級=26

    *7-2.優(yōu)先級繼承后,當前互斥量私有線程=200016B4的優(yōu)先級被提升至與當前運行線程=20001834的優(yōu)先級=26相同

    *7-3.將當前互斥量私有線程=200016B4從互斥量私有線程列表中移出,并放到就緒隊列(200001D0)中重新排序

    6-1.將當前運行線程(20001834)放到等待隊列(200001E4)

    6-2.從就緒隊列(200001D0)獲取優(yōu)先級最高的線程(200016B4),并設(shè)置為激活態(tài)準備運行

    6-3.將當前運行線程(20001834)放入互斥量阻塞隊列(20001888):20001834->0->80019A9

    (4) Tc解鎖互斥量。Tc重新獲得CPU使用權(quán)后,繼續(xù)運行。由于互斥量是由Tc鎖定的,因此Tc能成功解鎖互斥量。在解鎖過程中,由于當前運行線程Tc將互斥量從它的互斥量列表中移出,故此時mutex0為空,因此在互斥量解鎖函數(shù)svcRtxReleaseMutex中會直接將Tc的優(yōu)先級降為其初始優(yōu)先級Pc。解鎖后互斥鎖為0,同時點亮藍燈,Tc放入就緒隊列,又開始等待執(zhí)行新一輪的執(zhí)行過程。此時互斥量會從互斥量列表移出,并移轉(zhuǎn)給正在等待互斥量的Ta,之后Ta放入就緒隊列,由于Pa>Pb>Pc,故在就緒隊列中Ta處于隊首位置。mbedOS從就緒隊列中取出優(yōu)先級最高的Ta激活運行,Ta成功鎖定互斥量,互斥鎖變?yōu)?。

    printf輸出結(jié)果如下:

    1-3.Tc解鎖互斥量成功,藍燈亮

    8.互斥鎖變?yōu)?,表示完全解鎖,將當前互斥量(20001880)從當前運行線程(200016B4)擁有的互斥量列表(200016E0)中移除

    *9-1.當前線程=200016B4的初始優(yōu)先級=24,當前優(yōu)先級=26

    *9-2.釋放互斥量后,當前線程=200016B4的初始優(yōu)先級=24,當前優(yōu)先級=24

    10-1.從互斥量阻塞隊列(20001888)中獲取優(yōu)先級最高的互斥量等待線程=20001834

    10-2.將線程(20001834)從等待隊列(200001E4)中移出

    10-3.將線程(20001834)放到就緒隊列(200001D0)

    11.此時就緒隊列=200001D0中的線程:20001834->20001774->20001328

    10-4.將剛獲取的線程(20001834)設(shè)置為互斥量所有者,互斥鎖變?yōu)?

    (5) Ta解鎖互斥量。Ta運行5秒后,由于互斥量是由Ta鎖定的,因此Ta能成功解鎖互斥量,解鎖后互斥鎖為0,同時熄滅藍燈?;コ饬繌幕コ饬苛斜硪瞥?,同時為了重復上述演示過程,Ta放入延時隊列5秒,5秒之后從延時隊列移出放入就緒隊列,又開始等待執(zhí)行新一輪的執(zhí)行過程。

    printf輸出結(jié)果如下:

    5.當前就緒隊列中最高優(yōu)先級線程(20001834)取代當前運行線程(200016B4),開始運行

    2-2.Ta鎖定互斥量成功,將鎖定5秒

    2-3.Ta解鎖互斥量成功,藍燈暗

    8.互斥鎖變?yōu)?,表示完全解鎖,將當前互斥量(20001880)從當前運行線程(20001834)擁有的互斥量列表(20001860)中移除

    *9-1.當前線程=20001834的初始優(yōu)先級=26,當前優(yōu)先級=26

    *9-2.釋放互斥量后,當前線程=20001834的初始優(yōu)先級=26,當前優(yōu)先級=26

    (6) Tb運行。在Ta進入延時隊列后,mbedOS從就緒隊列中取出優(yōu)先級最高的Tb激活運行。Tb運行5秒后釋放CPU使用權(quán),為了重復上述演示過程,Tb放入延時隊列4秒,之后從延時隊中移出放入就緒隊列,又開始等待執(zhí)行新一輪的執(zhí)行過程。printf輸出結(jié)果如下:

    3.Tb(20001774)獲得CPU使用權(quán),將運行5秒,成功避免優(yōu)先級反轉(zhuǎn)

    5.當前就緒隊列中最高優(yōu)先級線程(20001834)取代當前運行線程(20001774),開始運行

    3-1.taskB釋放CPU使用權(quán)

    其中地址2000FF80表示主線程,地址200016B4表示Tc,地址20001834表示Ta,地址20001774表示Tb,地址80019A9表示缺省處理函數(shù)DefaultISR,地址20001328表示空閑線程(系統(tǒng)中無運行線程時該線程被調(diào)度運行)。

    4 mbedOS優(yōu)先級反轉(zhuǎn)問題機制歸納

    通過上述流程分析,mbedOS中避免優(yōu)先級反轉(zhuǎn)問題機制可歸納如下:

    mbedOS整體上使用的是基于互斥量的優(yōu)先級繼承方法來避免優(yōu)先級反轉(zhuǎn),其中優(yōu)先級繼承方法包括優(yōu)先級提升與優(yōu)先級恢復兩部分。當線程調(diào)用svcRtxMutexAcquire函數(shù)申請鎖定互斥量時,系統(tǒng)首先判斷該互斥量是否已鎖定,若已鎖定,則進一步判斷該互斥量是否具有內(nèi)部優(yōu)先級屬性osMutexPrioInherit,若是,則通過語句mutex->owner_thread->priority=thread->priority將當前運行線程(thread)的優(yōu)先級賦給該互斥量的私有線程(mutex->owner_thread),即優(yōu)先級繼承方法中的優(yōu)先級提升;當線程調(diào)用svcRtxMutexRelease函數(shù)申請鎖定互斥量時,系統(tǒng)首先判斷該互斥量是否具有內(nèi)部優(yōu)先級屬性osMutexPrioInherit,若是,則獲取當前運行線程的互斥量列表,若除了該互斥量以外,還具有其他互斥量,則遍歷其他互斥量的私有線程列表,獲取其中最高優(yōu)先級線程的優(yōu)先級,并將其賦給當前運行線程,否則直接將當前運行線程優(yōu)先級變?yōu)槠涑跏純?yōu)先級,即優(yōu)先級繼承方法中的優(yōu)先級恢復。

    5 結(jié) 語

    優(yōu)先級反轉(zhuǎn)問題是每一個實時操作系統(tǒng)所必須要考慮到的問題,一旦出現(xiàn),就會破壞系統(tǒng)的實時性,輕則造成系統(tǒng)邏輯紊亂,嚴重時甚至會導致系統(tǒng)崩潰。本文首先通過歷史上出現(xiàn)過的問題引出優(yōu)先級反轉(zhuǎn),并分析其現(xiàn)象、避免的意義以及基本解決方案,然后利用Cortex-M4內(nèi)核的STM32微控制器,基于Kinetis Design Studio 3.1.0 IDE開發(fā)環(huán)境和SD-mbedOS工程框架,構(gòu)建一個測試工程對mbedOS避免優(yōu)先級反轉(zhuǎn)問題的機制進行了詳細剖析。通過剖析,有助于快速理解mbedOS中互斥量的使用以及避免優(yōu)先級反轉(zhuǎn)問題的詳細過程,可為 mbedOS的應(yīng)用研究和在不同微控制器上的移植提供基礎(chǔ),也可為不同實時操作系統(tǒng)下避免優(yōu)先級反轉(zhuǎn)問題機制的比較分析提供參考。

    猜你喜歡
    藍燈線程列表
    巧用列表來推理
    學習運用列表法
    擴列吧
    淺談linux多線程協(xié)作
    不含3-圈的1-平面圖的列表邊染色與列表全染色
    Linux線程實現(xiàn)技術(shù)研究
    么移動中間件線程池并發(fā)機制優(yōu)化改進
    JAVA多線程同步解決生產(chǎn)者—消費者問題
    日本 av在线| 亚洲欧美日韩东京热| 色精品久久人妻99蜜桃| 女人十人毛片免费观看3o分钟| 国产精品98久久久久久宅男小说| 此物有八面人人有两片| av福利片在线观看| 波多野结衣高清无吗| 欧美激情国产日韩精品一区| av福利片在线观看| av在线蜜桃| 免费观看精品视频网站| 国产精品久久久久久久久免 | 超碰av人人做人人爽久久| 久久精品人妻少妇| 日韩精品中文字幕看吧| 色综合婷婷激情| 免费观看精品视频网站| 欧美一级a爱片免费观看看| 国产精品久久电影中文字幕| 国产v大片淫在线免费观看| 免费在线观看亚洲国产| 亚洲国产色片| 亚洲av免费高清在线观看| 毛片一级片免费看久久久久 | 日韩国内少妇激情av| 精品国内亚洲2022精品成人| 精品午夜福利视频在线观看一区| 亚洲成a人片在线一区二区| 可以在线观看的亚洲视频| 久久99热6这里只有精品| 色播亚洲综合网| 亚洲av成人精品一区久久| 日韩欧美国产在线观看| 黄色配什么色好看| 网址你懂的国产日韩在线| 国产精品一区二区三区四区免费观看 | 人妻久久中文字幕网| 69人妻影院| 18禁在线播放成人免费| 国产黄a三级三级三级人| 女生性感内裤真人,穿戴方法视频| 亚洲av免费在线观看| av国产免费在线观看| 久久国产精品影院| 久久久久国产精品人妻aⅴ院| 国产亚洲精品av在线| 午夜日韩欧美国产| 蜜桃久久精品国产亚洲av| 国产视频内射| bbb黄色大片| 亚洲国产精品成人综合色| 美女xxoo啪啪120秒动态图 | 99久久无色码亚洲精品果冻| 一个人免费在线观看的高清视频| 国产高清视频在线观看网站| 亚洲精品日韩av片在线观看| 国产三级在线视频| 精品一区二区三区视频在线观看免费| h日本视频在线播放| 亚洲人成网站在线播| 日本撒尿小便嘘嘘汇集6| 1024手机看黄色片| 1024手机看黄色片| 亚洲最大成人手机在线| 一本久久中文字幕| 免费观看人在逋| 久久久久久国产a免费观看| 免费电影在线观看免费观看| 色综合亚洲欧美另类图片| 99久久精品热视频| 成人国产一区最新在线观看| 成人av一区二区三区在线看| 成人av一区二区三区在线看| 成年女人看的毛片在线观看| 亚洲中文字幕一区二区三区有码在线看| 女同久久另类99精品国产91| 欧美高清成人免费视频www| 日韩欧美在线二视频| 真人一进一出gif抽搐免费| 久久久精品欧美日韩精品| 欧美国产日韩亚洲一区| 国产美女午夜福利| 久99久视频精品免费| 老司机午夜十八禁免费视频| 午夜福利成人在线免费观看| 人妻久久中文字幕网| 亚洲人成伊人成综合网2020| 一级作爱视频免费观看| 男人和女人高潮做爰伦理| 久9热在线精品视频| 一本久久中文字幕| 精品欧美国产一区二区三| 麻豆成人午夜福利视频| 精品无人区乱码1区二区| 能在线免费观看的黄片| 国产精品美女特级片免费视频播放器| 国产亚洲精品久久久com| 久久6这里有精品| 欧美成人性av电影在线观看| 午夜老司机福利剧场| 国产亚洲av嫩草精品影院| 欧美成狂野欧美在线观看| 欧美色视频一区免费| 51国产日韩欧美| 99精品久久久久人妻精品| 一进一出抽搐动态| 亚洲人与动物交配视频| 久久99热6这里只有精品| 在线播放国产精品三级| 国产 一区 欧美 日韩| 日本在线视频免费播放| 亚洲av成人精品一区久久| 精品久久久久久久人妻蜜臀av| 亚洲中文日韩欧美视频| 欧美乱色亚洲激情| 在线a可以看的网站| 欧美区成人在线视频| 99久久久亚洲精品蜜臀av| 国产精品久久久久久亚洲av鲁大| 一进一出抽搐gif免费好疼| 人人妻人人澡欧美一区二区| 3wmmmm亚洲av在线观看| 国产精品一及| 噜噜噜噜噜久久久久久91| 亚洲aⅴ乱码一区二区在线播放| 精品久久久久久久末码| 成人av在线播放网站| 校园春色视频在线观看| 99热这里只有是精品50| 亚洲成av人片在线播放无| 免费看光身美女| 九九在线视频观看精品| 亚洲精品亚洲一区二区| 日本与韩国留学比较| www.色视频.com| 国产精品一及| a级毛片免费高清观看在线播放| 亚洲狠狠婷婷综合久久图片| 69av精品久久久久久| 欧美乱妇无乱码| 国产成人av教育| 精品午夜福利视频在线观看一区| 观看免费一级毛片| 18+在线观看网站| 国内精品一区二区在线观看| 亚洲第一区二区三区不卡| av天堂在线播放| 国产高清激情床上av| a级毛片a级免费在线| 夜夜爽天天搞| 国模一区二区三区四区视频| 国产成人aa在线观看| 人妻久久中文字幕网| 99精品在免费线老司机午夜| 91在线精品国自产拍蜜月| 最近中文字幕高清免费大全6 | 91狼人影院| 女同久久另类99精品国产91| 又粗又爽又猛毛片免费看| 最新中文字幕久久久久| 亚洲精品粉嫩美女一区| 亚洲七黄色美女视频| 国产亚洲精品久久久com| 欧美3d第一页| 真实男女啪啪啪动态图| 好看av亚洲va欧美ⅴa在| 亚洲电影在线观看av| 日韩欧美精品v在线| 久久久成人免费电影| 深夜精品福利| 国产成人福利小说| 69人妻影院| 麻豆国产av国片精品| 99久久精品国产亚洲精品| 亚洲av不卡在线观看| 九色国产91popny在线| 波多野结衣巨乳人妻| 又紧又爽又黄一区二区| 每晚都被弄得嗷嗷叫到高潮| 村上凉子中文字幕在线| 九九久久精品国产亚洲av麻豆| 色哟哟·www| а√天堂www在线а√下载| 欧美成人a在线观看| 国内精品久久久久久久电影| 精品久久久久久久久久久久久| 国产在线男女| 国产亚洲精品久久久久久毛片| 中文字幕av成人在线电影| 亚洲av.av天堂| 久久亚洲真实| xxxwww97欧美| 直男gayav资源| a级一级毛片免费在线观看| 网址你懂的国产日韩在线| 此物有八面人人有两片| 无遮挡黄片免费观看| 88av欧美| a级毛片免费高清观看在线播放| 国产精品久久视频播放| 亚洲人成电影免费在线| 欧美国产日韩亚洲一区| 色综合婷婷激情| 亚洲国产日韩欧美精品在线观看| 少妇高潮的动态图| 99久久久亚洲精品蜜臀av| 日本黄大片高清| 自拍偷自拍亚洲精品老妇| 国产高清激情床上av| 国产精品爽爽va在线观看网站| 在线观看午夜福利视频| 日本黄色片子视频| 夜夜躁狠狠躁天天躁| 老司机深夜福利视频在线观看| 国产亚洲精品久久久久久毛片| 国产男靠女视频免费网站| 精品乱码久久久久久99久播| 在线观看美女被高潮喷水网站 | 麻豆国产av国片精品| 91麻豆av在线| 欧美一级a爱片免费观看看| 久久久久久久久久成人| 麻豆久久精品国产亚洲av| 男人舔女人下体高潮全视频| 亚洲最大成人av| 欧美色视频一区免费| 久久99热6这里只有精品| 国内精品久久久久精免费| 波野结衣二区三区在线| 久久人人精品亚洲av| 精品久久久久久久久av| 97热精品久久久久久| 中出人妻视频一区二区| 亚洲午夜理论影院| 在线观看免费视频日本深夜| 精品人妻视频免费看| 88av欧美| 日韩欧美精品免费久久 | 国产一区二区三区视频了| 九九久久精品国产亚洲av麻豆| 午夜福利免费观看在线| 男人和女人高潮做爰伦理| 国产又黄又爽又无遮挡在线| 一个人看视频在线观看www免费| 精品一区二区三区人妻视频| 黄色女人牲交| 亚洲国产精品成人综合色| 麻豆av噜噜一区二区三区| 中文字幕高清在线视频| 日本黄色视频三级网站网址| 精品人妻视频免费看| 九色成人免费人妻av| 午夜老司机福利剧场| 91麻豆av在线| 国产伦一二天堂av在线观看| 在线观看av片永久免费下载| 久久婷婷人人爽人人干人人爱| 嫩草影院新地址| 能在线免费观看的黄片| 亚洲av成人精品一区久久| 免费av不卡在线播放| 久久精品久久久久久噜噜老黄 | 午夜视频国产福利| 夜夜看夜夜爽夜夜摸| 12—13女人毛片做爰片一| 久久99热这里只有精品18| 精品免费久久久久久久清纯| 又爽又黄无遮挡网站| 色5月婷婷丁香| 一进一出抽搐gif免费好疼| 亚洲激情在线av| 一区二区三区免费毛片| 很黄的视频免费| 99久久精品一区二区三区| 夜夜看夜夜爽夜夜摸| 国产私拍福利视频在线观看| 免费搜索国产男女视频| xxxwww97欧美| 中文字幕av在线有码专区| 悠悠久久av| 99热只有精品国产| 美女cb高潮喷水在线观看| 日本在线视频免费播放| 欧美日韩瑟瑟在线播放| 欧美bdsm另类| 欧美zozozo另类| 国产亚洲欧美98| 日韩欧美在线乱码| 91字幕亚洲| 久久久久久久午夜电影| 精品人妻熟女av久视频| 国产高清三级在线| 夜夜看夜夜爽夜夜摸| 免费电影在线观看免费观看| 一区二区三区四区激情视频 | 色综合欧美亚洲国产小说| 波多野结衣巨乳人妻| 国产伦一二天堂av在线观看| 九九在线视频观看精品| 国产主播在线观看一区二区| 国模一区二区三区四区视频| 一卡2卡三卡四卡精品乱码亚洲| 一个人看视频在线观看www免费| 亚洲精品在线观看二区| 国产精品精品国产色婷婷| 很黄的视频免费| 亚洲,欧美,日韩| 人人妻,人人澡人人爽秒播| 久久久久久久午夜电影| 美女 人体艺术 gogo| 18+在线观看网站| 中文字幕av成人在线电影| 长腿黑丝高跟| 久99久视频精品免费| 成人精品一区二区免费| 欧美又色又爽又黄视频| 国产精品精品国产色婷婷| 老司机午夜福利在线观看视频| 特级一级黄色大片| 人人妻,人人澡人人爽秒播| 免费观看人在逋| 午夜福利成人在线免费观看| 亚洲最大成人中文| 男女下面进入的视频免费午夜| 制服丝袜大香蕉在线| 婷婷丁香在线五月| 网址你懂的国产日韩在线| 亚洲激情在线av| 久久久久国内视频| 亚洲三级黄色毛片| 久久热精品热| 欧美一区二区亚洲| 精品无人区乱码1区二区| 色综合婷婷激情| 日本黄大片高清| 一二三四社区在线视频社区8| 国产精华一区二区三区| 夜夜躁狠狠躁天天躁| 久久久久久九九精品二区国产| 亚洲av日韩精品久久久久久密| 国产中年淑女户外野战色| 日韩大尺度精品在线看网址| 97碰自拍视频| 亚洲av一区综合| 免费在线观看亚洲国产| 免费人成在线观看视频色| 精品人妻偷拍中文字幕| 亚洲无线在线观看| 性欧美人与动物交配| 网址你懂的国产日韩在线| 免费电影在线观看免费观看| 国产美女午夜福利| 成人永久免费在线观看视频| 最新中文字幕久久久久| 俺也久久电影网| 免费一级毛片在线播放高清视频| 日韩人妻高清精品专区| 国产精品自产拍在线观看55亚洲| 久久草成人影院| 国产白丝娇喘喷水9色精品| 99热只有精品国产| 国产淫片久久久久久久久 | 亚洲经典国产精华液单 | www.熟女人妻精品国产| 久久香蕉精品热| 亚洲熟妇熟女久久| 97超级碰碰碰精品色视频在线观看| 欧美激情国产日韩精品一区| 国产一区二区在线观看日韩| 亚洲国产精品成人综合色| 欧美中文日本在线观看视频| av天堂中文字幕网| 国产精品日韩av在线免费观看| 可以在线观看的亚洲视频| 人妻制服诱惑在线中文字幕| 国产主播在线观看一区二区| 久久九九热精品免费| 赤兔流量卡办理| 久久亚洲精品不卡| 亚洲国产色片| 成人高潮视频无遮挡免费网站| 久久中文看片网| 两人在一起打扑克的视频| 亚洲av五月六月丁香网| 欧美精品国产亚洲| 亚洲欧美激情综合另类| 欧美不卡视频在线免费观看| 日韩欧美三级三区| 欧美日韩福利视频一区二区| 真人做人爱边吃奶动态| 色在线成人网| 夜夜看夜夜爽夜夜摸| 久久久久久国产a免费观看| 欧美黄色淫秽网站| 小说图片视频综合网站| 国产一区二区亚洲精品在线观看| 久久精品国产99精品国产亚洲性色| 18+在线观看网站| 大型黄色视频在线免费观看| 最近中文字幕高清免费大全6 | 久久精品影院6| 欧美黄色淫秽网站| 日本黄色视频三级网站网址| 成人特级av手机在线观看| 欧美成人免费av一区二区三区| 不卡一级毛片| 久久6这里有精品| 成人美女网站在线观看视频| 国产乱人视频| 夜夜爽天天搞| 亚洲午夜理论影院| 99久久精品热视频| 能在线免费观看的黄片| 日本熟妇午夜| 亚洲av成人av| 精品午夜福利视频在线观看一区| 亚洲成人免费电影在线观看| 亚洲内射少妇av| 直男gayav资源| 亚洲精品在线观看二区| 久久久久九九精品影院| 在线播放无遮挡| 亚洲片人在线观看| 国产真实乱freesex| 伦理电影大哥的女人| 免费高清视频大片| 国产日本99.免费观看| 亚洲成人免费电影在线观看| 日韩欧美免费精品| 直男gayav资源| 亚洲av成人不卡在线观看播放网| 成人午夜高清在线视频| 日韩大尺度精品在线看网址| 97人妻精品一区二区三区麻豆| 亚洲欧美清纯卡通| 亚洲无线观看免费| 亚洲av美国av| 欧美另类亚洲清纯唯美| 波多野结衣高清无吗| 久久性视频一级片| 伊人久久精品亚洲午夜| 露出奶头的视频| 国内精品久久久久久久电影| 国产精品亚洲一级av第二区| 国产一区二区亚洲精品在线观看| 欧美高清性xxxxhd video| ponron亚洲| 欧美成人一区二区免费高清观看| 在线国产一区二区在线| 久久久成人免费电影| 性欧美人与动物交配| 午夜福利高清视频| 午夜福利在线观看吧| 特级一级黄色大片| 亚洲内射少妇av| 直男gayav资源| 午夜福利18| 国产真实乱freesex| 国产乱人伦免费视频| 深爱激情五月婷婷| 国内精品久久久久精免费| 久久亚洲精品不卡| 欧美丝袜亚洲另类 | 激情在线观看视频在线高清| 色综合站精品国产| 国产 一区 欧美 日韩| 精品久久久久久久久亚洲 | 精品欧美国产一区二区三| 少妇高潮的动态图| 亚洲va日本ⅴa欧美va伊人久久| 欧美日本视频| 男女床上黄色一级片免费看| 老司机福利观看| 午夜福利在线在线| 一级作爱视频免费观看| 婷婷精品国产亚洲av| 免费看美女性在线毛片视频| 99热精品在线国产| 他把我摸到了高潮在线观看| 国产成人欧美在线观看| 久久欧美精品欧美久久欧美| 男人的好看免费观看在线视频| 天天一区二区日本电影三级| 国产精品爽爽va在线观看网站| 日本一本二区三区精品| 国产主播在线观看一区二区| 夜夜夜夜夜久久久久| 麻豆久久精品国产亚洲av| 欧美成人一区二区免费高清观看| 757午夜福利合集在线观看| or卡值多少钱| 脱女人内裤的视频| 国产成年人精品一区二区| 欧美国产日韩亚洲一区| 精华霜和精华液先用哪个| 中文字幕精品亚洲无线码一区| 日本黄色视频三级网站网址| 成人午夜高清在线视频| 91在线观看av| 国产一区二区在线av高清观看| 又爽又黄a免费视频| 精品国产三级普通话版| 蜜桃亚洲精品一区二区三区| 久久99热这里只有精品18| 99热6这里只有精品| 欧美日韩黄片免| 国产亚洲av嫩草精品影院| 精品不卡国产一区二区三区| 欧美zozozo另类| 国产免费男女视频| 露出奶头的视频| 可以在线观看毛片的网站| 波多野结衣高清作品| 99久久成人亚洲精品观看| 日韩中字成人| 亚洲成a人片在线一区二区| 国产乱人视频| 午夜精品久久久久久毛片777| 亚洲国产高清在线一区二区三| 亚洲精华国产精华精| 久久久久国产精品人妻aⅴ院| 中文字幕熟女人妻在线| 国产欧美日韩精品一区二区| 波多野结衣高清作品| 国产综合懂色| 婷婷六月久久综合丁香| 亚洲欧美精品综合久久99| 2021天堂中文幕一二区在线观| 热99re8久久精品国产| 12—13女人毛片做爰片一| 一本久久中文字幕| 亚洲专区国产一区二区| 免费搜索国产男女视频| 亚洲va日本ⅴa欧美va伊人久久| 中文字幕熟女人妻在线| 真人做人爱边吃奶动态| 变态另类丝袜制服| 精品一区二区三区av网在线观看| 91麻豆精品激情在线观看国产| 亚洲第一电影网av| 久久亚洲精品不卡| 欧美极品一区二区三区四区| 深夜a级毛片| 性欧美人与动物交配| 亚洲乱码一区二区免费版| 国产中年淑女户外野战色| 91午夜精品亚洲一区二区三区 | 91久久精品国产一区二区成人| 757午夜福利合集在线观看| 我要搜黄色片| 色5月婷婷丁香| 免费观看人在逋| 国产免费男女视频| 日本免费a在线| 国产伦在线观看视频一区| 90打野战视频偷拍视频| 窝窝影院91人妻| 久久精品影院6| 99久久精品一区二区三区| 国产成人福利小说| 国产精品电影一区二区三区| АⅤ资源中文在线天堂| 欧美潮喷喷水| 国产精品自产拍在线观看55亚洲| 91在线观看av| 51午夜福利影视在线观看| 两性午夜刺激爽爽歪歪视频在线观看| 深爱激情五月婷婷| 中文资源天堂在线| 男女之事视频高清在线观看| 成人永久免费在线观看视频| 国产精品女同一区二区软件 | 免费av观看视频| 亚洲国产欧美人成| 精品久久久久久久人妻蜜臀av| 色综合站精品国产| 亚洲中文日韩欧美视频| 中文字幕熟女人妻在线| 91狼人影院| 天美传媒精品一区二区| 亚洲一区二区三区不卡视频| 免费观看人在逋| 亚洲最大成人中文| 毛片一级片免费看久久久久 | av黄色大香蕉| 亚洲av美国av| 午夜精品一区二区三区免费看| 亚洲av成人av| 看黄色毛片网站| 最近视频中文字幕2019在线8| 亚洲成av人片在线播放无| 在线观看美女被高潮喷水网站 | 国产男靠女视频免费网站| 夜夜夜夜夜久久久久| 欧美在线黄色| 欧美国产日韩亚洲一区| 日韩欧美三级三区| 欧美潮喷喷水| 亚洲最大成人av| 好看av亚洲va欧美ⅴa在| 少妇裸体淫交视频免费看高清| 国内精品一区二区在线观看| 性插视频无遮挡在线免费观看| 日韩中文字幕欧美一区二区| 一本一本综合久久| 国产一级毛片七仙女欲春2| 国产欧美日韩一区二区精品| 又粗又爽又猛毛片免费看| 亚洲精品456在线播放app | 村上凉子中文字幕在线| 欧美丝袜亚洲另类 | 无遮挡黄片免费观看| 一卡2卡三卡四卡精品乱码亚洲| 九九久久精品国产亚洲av麻豆|