• <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在线视频只有这里精品首页| 成年女人毛片免费观看观看9| 国产探花在线观看一区二区| 国内精品美女久久久久久| 国产精品久久久久久精品电影| 免费大片18禁| 97超级碰碰碰精品色视频在线观看| 亚洲 欧美一区二区三区| 成人特级黄色片久久久久久久| 一区福利在线观看| 亚洲五月天丁香| 婷婷丁香在线五月| 少妇熟女aⅴ在线视频| 久久久久亚洲av毛片大全| 国产黄a三级三级三级人| 美女cb高潮喷水在线观看 | 啦啦啦免费观看视频1| 欧美一区二区国产精品久久精品| 嫁个100分男人电影在线观看| 欧美国产日韩亚洲一区| 精品不卡国产一区二区三区| 久久天堂一区二区三区四区| 精品久久久久久久末码| 国产av一区在线观看免费| 激情在线观看视频在线高清| 亚洲国产精品sss在线观看| 综合色av麻豆| 国产麻豆成人av免费视频| 一级毛片女人18水好多| 999久久久国产精品视频| 亚洲av成人av| 真人一进一出gif抽搐免费| 国产激情久久老熟女| 日日摸夜夜添夜夜添小说| 不卡一级毛片| 长腿黑丝高跟| 1024手机看黄色片| 午夜日韩欧美国产| 最好的美女福利视频网| 亚洲七黄色美女视频| 欧美中文日本在线观看视频| 成年版毛片免费区| 亚洲美女视频黄频| 亚洲aⅴ乱码一区二区在线播放| 亚洲精品456在线播放app | 动漫黄色视频在线观看| 手机成人av网站| 免费av不卡在线播放| 国产视频一区二区在线看| 999久久久精品免费观看国产| 国产乱人视频| 少妇人妻一区二区三区视频| 国产精品av视频在线免费观看| 五月玫瑰六月丁香| 色综合站精品国产| 99国产精品一区二区蜜桃av| 国产欧美日韩一区二区精品| 久久久久久久久中文| 亚洲av成人不卡在线观看播放网| 日本免费a在线| 三级毛片av免费| 身体一侧抽搐| www.999成人在线观看| 国产精品日韩av在线免费观看| av国产免费在线观看| 999精品在线视频| 亚洲成人免费电影在线观看| 又粗又爽又猛毛片免费看| 日本 av在线| 90打野战视频偷拍视频| 禁无遮挡网站| 久久久久久久久中文| 午夜免费成人在线视频| av视频在线观看入口| 色av中文字幕| 日韩中文字幕欧美一区二区| 老汉色av国产亚洲站长工具| 最新在线观看一区二区三区| 亚洲色图av天堂| 成年女人看的毛片在线观看| 中文字幕人妻丝袜一区二区| 老司机午夜十八禁免费视频| 国产伦在线观看视频一区| 久久久国产欧美日韩av| 少妇裸体淫交视频免费看高清| 性欧美人与动物交配| 天天一区二区日本电影三级| 亚洲激情在线av| 亚洲五月婷婷丁香| 日韩欧美在线乱码| 国产真人三级小视频在线观看| 国产成人精品无人区| 蜜桃久久精品国产亚洲av| 国产乱人伦免费视频| 久久精品国产亚洲av香蕉五月| 丝袜人妻中文字幕| 黑人欧美特级aaaaaa片| 日韩精品中文字幕看吧| 日韩欧美 国产精品| 最好的美女福利视频网| 一进一出好大好爽视频| 亚洲欧美日韩高清专用| 亚洲自偷自拍图片 自拍| 五月伊人婷婷丁香| 国产精品爽爽va在线观看网站| 美女cb高潮喷水在线观看 | 色综合亚洲欧美另类图片| a在线观看视频网站| 久久久久久久久免费视频了| 国产三级在线视频| 久久久久国内视频| 午夜日韩欧美国产| 日韩欧美精品v在线| 免费搜索国产男女视频| 在线播放国产精品三级| 一进一出抽搐gif免费好疼| 一个人免费在线观看的高清视频| 国产v大片淫在线免费观看| 手机成人av网站| 久久中文看片网| 最近在线观看免费完整版| 天堂av国产一区二区熟女人妻| 日本五十路高清| 亚洲七黄色美女视频| 亚洲第一电影网av| 男人舔女人的私密视频| 免费搜索国产男女视频| 国产伦精品一区二区三区四那| av中文乱码字幕在线| 亚洲欧美日韩卡通动漫| 脱女人内裤的视频| 国产真人三级小视频在线观看| 中国美女看黄片| 夜夜躁狠狠躁天天躁| 日韩欧美国产一区二区入口| cao死你这个sao货| 亚洲人成网站高清观看| 97碰自拍视频| 老鸭窝网址在线观看| xxx96com| 无遮挡黄片免费观看| 日本 欧美在线| 国产成人av激情在线播放| 男人舔奶头视频| av在线天堂中文字幕| 色av中文字幕| 日本黄色视频三级网站网址| 免费看美女性在线毛片视频| 高清在线国产一区| 老熟妇仑乱视频hdxx| 欧美性猛交╳xxx乱大交人| 国产v大片淫在线免费观看| 在线a可以看的网站| 99在线人妻在线中文字幕| 国内精品久久久久久久电影| 成年版毛片免费区| 一个人免费在线观看的高清视频| 欧美大码av| 好男人电影高清在线观看| 精品免费久久久久久久清纯| 国内精品久久久久精免费| 国产乱人视频| 这个男人来自地球电影免费观看| 成人精品一区二区免费| 久久精品国产亚洲av香蕉五月| 麻豆国产av国片精品| 国产精品亚洲美女久久久| 九九久久精品国产亚洲av麻豆 | av天堂中文字幕网| 噜噜噜噜噜久久久久久91| 欧美极品一区二区三区四区| 日韩免费av在线播放| 91在线精品国自产拍蜜月 | 国产午夜福利久久久久久| 90打野战视频偷拍视频| 国产 一区 欧美 日韩| 好男人电影高清在线观看| 国产高清有码在线观看视频| 波多野结衣巨乳人妻| 搡老岳熟女国产| 国产亚洲av嫩草精品影院| 9191精品国产免费久久| 国产高清视频在线观看网站| 校园春色视频在线观看| 身体一侧抽搐| 国产伦人伦偷精品视频| 国内精品久久久久精免费| 久久国产乱子伦精品免费另类| 麻豆av在线久日| 一区二区三区国产精品乱码| 日本 av在线| 操出白浆在线播放| 国产亚洲av高清不卡| 亚洲无线在线观看| 黑人欧美特级aaaaaa片| 精品国产三级普通话版| bbb黄色大片| 精品福利观看| 久久久国产精品麻豆| 欧洲精品卡2卡3卡4卡5卡区| 亚洲乱码一区二区免费版| 这个男人来自地球电影免费观看| 又黄又粗又硬又大视频| 成年女人永久免费观看视频| 天堂影院成人在线观看| 国产精品久久久av美女十八| 黄色片一级片一级黄色片| 老司机在亚洲福利影院| 亚洲九九香蕉| 脱女人内裤的视频| 国产私拍福利视频在线观看| 99久久综合精品五月天人人| 午夜视频精品福利| 国产成人影院久久av| netflix在线观看网站| 男女做爰动态图高潮gif福利片| 亚洲成人久久爱视频| 亚洲精品一卡2卡三卡4卡5卡| 视频区欧美日本亚洲| 欧洲精品卡2卡3卡4卡5卡区| 欧美av亚洲av综合av国产av| 热99re8久久精品国产| 国产精品99久久99久久久不卡| 亚洲国产欧美人成| 欧美大码av| 午夜影院日韩av| 免费观看的影片在线观看| 国产成+人综合+亚洲专区| 88av欧美| 成人三级做爰电影| 性欧美人与动物交配| av天堂中文字幕网| 亚洲av熟女| 啦啦啦韩国在线观看视频| 精华霜和精华液先用哪个| 欧美色视频一区免费| 岛国在线观看网站| 国内毛片毛片毛片毛片毛片| 精品熟女少妇八av免费久了| 亚洲欧美精品综合一区二区三区| 久久久国产精品麻豆| 国产精品 欧美亚洲| 国产精品影院久久| 成人av在线播放网站| 91在线观看av| 他把我摸到了高潮在线观看| 欧美丝袜亚洲另类 | 一夜夜www| 一级毛片女人18水好多| 国产精品,欧美在线| 欧美黄色淫秽网站| 神马国产精品三级电影在线观看| 1024手机看黄色片| 亚洲 欧美 日韩 在线 免费| 免费搜索国产男女视频| 超碰成人久久| 国产精品精品国产色婷婷| 制服人妻中文乱码| 亚洲国产精品999在线| 麻豆成人午夜福利视频| 全区人妻精品视频| 日本 欧美在线| 国产伦在线观看视频一区| 久久精品影院6| 亚洲国产中文字幕在线视频| 最好的美女福利视频网| 国产成人一区二区三区免费视频网站| 三级国产精品欧美在线观看 | 国产99白浆流出| 色播亚洲综合网| 亚洲国产日韩欧美精品在线观看 | 日本 av在线| 狂野欧美白嫩少妇大欣赏| 欧美乱码精品一区二区三区| 国产精品av视频在线免费观看| aaaaa片日本免费| 国产午夜福利久久久久久| 啪啪无遮挡十八禁网站| 一个人看视频在线观看www免费 | 日本黄色片子视频| 成人国产一区最新在线观看| 别揉我奶头~嗯~啊~动态视频| 国产精品一区二区精品视频观看| 久久久久久久精品吃奶| 亚洲最大成人中文| 免费大片18禁| 好看av亚洲va欧美ⅴa在| 19禁男女啪啪无遮挡网站| av黄色大香蕉| 久久这里只有精品中国| 成人亚洲精品av一区二区| 日本五十路高清| 亚洲国产色片| 欧美日韩黄片免| 国产精品 国内视频| 中文资源天堂在线| 国产一区二区三区在线臀色熟女| 少妇的逼水好多| 欧美黄色片欧美黄色片| 在线播放国产精品三级| 热99在线观看视频| 中出人妻视频一区二区| 亚洲欧美日韩无卡精品| bbb黄色大片| 色哟哟哟哟哟哟| 免费看十八禁软件| 国产精品1区2区在线观看.| 日本免费a在线| 人人妻人人看人人澡| АⅤ资源中文在线天堂| 精品国内亚洲2022精品成人| 国产高清视频在线观看网站| 精品久久久久久久久久免费视频| 黄色女人牲交| 精品久久久久久久久久久久久| 美女午夜性视频免费| 桃色一区二区三区在线观看| 免费看a级黄色片| 狂野欧美白嫩少妇大欣赏| 三级国产精品欧美在线观看 | 午夜福利在线在线| 午夜激情欧美在线| 国产三级中文精品| 三级毛片av免费| 国产高潮美女av| 国产精华一区二区三区| 亚洲电影在线观看av| 这个男人来自地球电影免费观看| 亚洲人成网站在线播放欧美日韩| 一边摸一边抽搐一进一小说| 国产亚洲av高清不卡| a级毛片在线看网站| 在线十欧美十亚洲十日本专区| 久久久精品欧美日韩精品| 免费观看精品视频网站| АⅤ资源中文在线天堂| 国产欧美日韩精品一区二区| 久久久久久久午夜电影| 日韩欧美在线乱码| 俄罗斯特黄特色一大片| 欧美乱码精品一区二区三区| 免费观看人在逋| 搡老熟女国产l中国老女人| 午夜福利免费观看在线| 亚洲国产欧美网| 国产精品九九99| 怎么达到女性高潮| 久久香蕉国产精品| 99国产精品99久久久久| 九九热线精品视视频播放| 99久久精品一区二区三区| 99在线人妻在线中文字幕| 亚洲在线观看片| 97超视频在线观看视频| 亚洲在线观看片| 深夜精品福利| 啦啦啦韩国在线观看视频| 一二三四社区在线视频社区8| 精品一区二区三区av网在线观看| 天堂√8在线中文| 日韩大尺度精品在线看网址| 国产黄a三级三级三级人| 免费在线观看日本一区| 国产三级黄色录像| 久久久久久久久中文| 综合色av麻豆| 久久精品亚洲精品国产色婷小说| 观看美女的网站| 特级一级黄色大片| 99国产精品一区二区蜜桃av| av福利片在线观看| 午夜福利视频1000在线观看| 免费在线观看影片大全网站| 国产美女午夜福利| 午夜免费成人在线视频| 久久草成人影院| www日本黄色视频网| 亚洲精品456在线播放app | 国产综合懂色| 波多野结衣高清作品| 人妻丰满熟妇av一区二区三区| www.999成人在线观看| 日韩大尺度精品在线看网址| 久久久国产精品麻豆| 精品久久久久久久人妻蜜臀av| 日韩三级视频一区二区三区| 国产精品久久电影中文字幕| 亚洲中文字幕日韩| 亚洲无线在线观看| 欧美日韩亚洲国产一区二区在线观看| 变态另类成人亚洲欧美熟女| 欧美性猛交黑人性爽| 高清在线国产一区| 久久久久亚洲av毛片大全| 丝袜人妻中文字幕| 日韩国内少妇激情av| 亚洲精品粉嫩美女一区| 黄色丝袜av网址大全| 亚洲自拍偷在线| 精品一区二区三区视频在线 | 国内精品久久久久久久电影| 国产精品亚洲一级av第二区| 亚洲七黄色美女视频| 看黄色毛片网站| 美女高潮喷水抽搐中文字幕| e午夜精品久久久久久久| 成年女人看的毛片在线观看| 免费观看人在逋| 色综合婷婷激情| 男女床上黄色一级片免费看| 亚洲国产精品久久男人天堂| 午夜a级毛片| 国产精品 欧美亚洲| 1024香蕉在线观看| 窝窝影院91人妻| 亚洲av电影在线进入| 91九色精品人成在线观看| 黄频高清免费视频| av天堂中文字幕网| 精品一区二区三区视频在线 | 久久久久久久午夜电影| 特级一级黄色大片| 国产精品久久视频播放| 麻豆久久精品国产亚洲av| 一进一出抽搐动态| 久久国产乱子伦精品免费另类| 色av中文字幕| 欧美黄色片欧美黄色片| 亚洲中文日韩欧美视频| 日本免费a在线| 老熟妇乱子伦视频在线观看| 给我免费播放毛片高清在线观看| 成年女人看的毛片在线观看| 欧美成人一区二区免费高清观看 | 五月玫瑰六月丁香| 亚洲一区高清亚洲精品| 国产亚洲av高清不卡| 日本免费a在线| www国产在线视频色| 亚洲精品一区av在线观看| 很黄的视频免费| 精品人妻1区二区| 99在线视频只有这里精品首页| 一二三四在线观看免费中文在| 日本免费a在线| 脱女人内裤的视频| 美女免费视频网站| 桃红色精品国产亚洲av| 成人永久免费在线观看视频| 19禁男女啪啪无遮挡网站| 中文字幕最新亚洲高清| 巨乳人妻的诱惑在线观看| 99久久国产精品久久久| 欧美日韩黄片免| 国产成人影院久久av| 757午夜福利合集在线观看| 免费看美女性在线毛片视频| 99国产精品99久久久久| 十八禁网站免费在线| 级片在线观看| 亚洲美女视频黄频| 欧美成人免费av一区二区三区| 少妇裸体淫交视频免费看高清| 法律面前人人平等表现在哪些方面| 欧美日本亚洲视频在线播放| 国产成人aa在线观看| 欧美乱色亚洲激情| 国产欧美日韩精品亚洲av| 黄色丝袜av网址大全| 日韩 欧美 亚洲 中文字幕| 国产单亲对白刺激| 女人高潮潮喷娇喘18禁视频| 狂野欧美白嫩少妇大欣赏| 黄色 视频免费看| 欧美成狂野欧美在线观看| 亚洲专区国产一区二区| 99久久无色码亚洲精品果冻| 在线十欧美十亚洲十日本专区| 偷拍熟女少妇极品色| 国产精品电影一区二区三区| www.999成人在线观看| 黑人欧美特级aaaaaa片| 久久天堂一区二区三区四区| 蜜桃久久精品国产亚洲av| 国产真人三级小视频在线观看| 亚洲精品456在线播放app | 亚洲熟妇中文字幕五十中出| 亚洲中文日韩欧美视频| 一个人观看的视频www高清免费观看 | 婷婷精品国产亚洲av在线| 亚洲av电影不卡..在线观看| 天堂动漫精品| 特级一级黄色大片| 禁无遮挡网站| 亚洲美女黄片视频| 最近最新中文字幕大全电影3| 亚洲av日韩精品久久久久久密| 欧美乱色亚洲激情| 日本一二三区视频观看| 午夜视频精品福利| 麻豆成人午夜福利视频| 亚洲人成网站在线播放欧美日韩| 两个人视频免费观看高清| 在线国产一区二区在线| 九色成人免费人妻av| 精品99又大又爽又粗少妇毛片 | 激情在线观看视频在线高清| 久久久国产精品麻豆| 观看免费一级毛片| 国产真人三级小视频在线观看| 无人区码免费观看不卡| 成人永久免费在线观看视频| 九色成人免费人妻av| 级片在线观看| 美女午夜性视频免费| 国内精品久久久久久久电影| 午夜福利在线观看免费完整高清在 | 亚洲国产精品sss在线观看| 高清毛片免费观看视频网站| 欧美乱码精品一区二区三区| 亚洲精品色激情综合| 午夜福利成人在线免费观看| 成人国产一区最新在线观看| 一边摸一边抽搐一进一小说| 免费看光身美女| 精品久久久久久久毛片微露脸| 天堂网av新在线| 丰满的人妻完整版| 久久草成人影院| 国产精品影院久久| 99在线视频只有这里精品首页| 三级男女做爰猛烈吃奶摸视频| 观看美女的网站| 午夜日韩欧美国产| 天堂√8在线中文| 国产又黄又爽又无遮挡在线| av国产免费在线观看| 国产日本99.免费观看| 国产精品综合久久久久久久免费| 免费看十八禁软件| 婷婷亚洲欧美| 黄频高清免费视频| 亚洲午夜理论影院| 国产黄a三级三级三级人| 男女那种视频在线观看| 九九久久精品国产亚洲av麻豆 | 在线国产一区二区在线| 亚洲熟妇熟女久久| 国产又黄又爽又无遮挡在线| 国产高清激情床上av| 欧美成人免费av一区二区三区| 2021天堂中文幕一二区在线观| 黄色片一级片一级黄色片| av在线蜜桃| 亚洲成av人片免费观看| av福利片在线观看| 免费搜索国产男女视频| 一二三四在线观看免费中文在| 国产精品 国内视频| 免费无遮挡裸体视频| 男人和女人高潮做爰伦理| 亚洲国产高清在线一区二区三| 麻豆成人午夜福利视频| av中文乱码字幕在线| 人妻久久中文字幕网| 国产精品一及| 国产激情偷乱视频一区二区| 国产精品精品国产色婷婷| 亚洲国产精品合色在线| 亚洲精品久久国产高清桃花| 黄色 视频免费看| 日本撒尿小便嘘嘘汇集6| 亚洲国产看品久久| 国产人伦9x9x在线观看| 国产成人福利小说| 91九色精品人成在线观看| 99国产精品一区二区蜜桃av| 国产视频一区二区在线看| 1024手机看黄色片| 人人妻人人澡欧美一区二区| 美女扒开内裤让男人捅视频| 久久亚洲精品不卡| 在线播放国产精品三级| 国产成人福利小说| 超碰成人久久| 欧美黑人巨大hd| 人妻夜夜爽99麻豆av| 很黄的视频免费| 最新中文字幕久久久久 | 国内精品一区二区在线观看| 18美女黄网站色大片免费观看| 国产乱人伦免费视频| 母亲3免费完整高清在线观看| 免费看光身美女| 久久精品91无色码中文字幕| 久久精品91蜜桃| 国产精品美女特级片免费视频播放器 | 九色成人免费人妻av| 欧美乱码精品一区二区三区| 色播亚洲综合网| 亚洲中文字幕一区二区三区有码在线看 | 日韩大尺度精品在线看网址| 综合色av麻豆| 手机成人av网站| 欧美成狂野欧美在线观看| 神马国产精品三级电影在线观看| 亚洲欧美精品综合久久99| 欧美午夜高清在线| 国产av麻豆久久久久久久| 一个人免费在线观看电影 | 亚洲五月天丁香| 12—13女人毛片做爰片一| 国产69精品久久久久777片 | 亚洲国产精品久久男人天堂|