真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SylixOS下優(yōu)先級(jí)反轉(zhuǎn)與解決方案

1. 概念

    一個(gè)高優(yōu)先級(jí)線程通過(guò)信號(hào)量機(jī)制訪問(wèn)共享資源時(shí),該信號(hào)量已被一個(gè)低優(yōu)先級(jí)線程占有,而這個(gè)低優(yōu)先級(jí)線程在訪問(wèn)共享資源時(shí)被其他的一些中等優(yōu)先級(jí)線程搶占,因此造成高優(yōu)先級(jí)線程被許多具有較低優(yōu)先級(jí)的線程阻塞,稱此現(xiàn)象為優(yōu)先級(jí)反轉(zhuǎn)。
    優(yōu)先級(jí)反轉(zhuǎn)會(huì)導(dǎo)致低優(yōu)先級(jí)任務(wù)先于高優(yōu)先級(jí)任務(wù)運(yùn)行,在實(shí)時(shí)系統(tǒng)中會(huì)導(dǎo)致不可控的現(xiàn)象發(fā)生,因此,優(yōu)先級(jí)反轉(zhuǎn)在實(shí)時(shí)系統(tǒng)中是不可接受的。

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)范縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

2. 解決優(yōu)先級(jí)反轉(zhuǎn)

    高優(yōu)先級(jí)任務(wù)不能執(zhí)行的原因是因?yàn)榈蛢?yōu)先級(jí)占用了資源,而低優(yōu)先級(jí)不能獲得CPU,無(wú)法釋放資源,所以解決優(yōu)先級(jí)反轉(zhuǎn)的原則是讓低優(yōu)先級(jí)任務(wù)盡快執(zhí)行,釋放資源。
SylixOS下解決優(yōu)先級(jí)反轉(zhuǎn)有優(yōu)先級(jí)天花板策略(priority ceiling)和優(yōu)先級(jí)繼承策略(priority inheritance),且SylixOS下互斥信號(hào)量同時(shí)支持這兩種策略。

2.1優(yōu)先級(jí)天花板

    優(yōu)先級(jí)天花板策略是指將占有某資源的任務(wù)的優(yōu)先級(jí)提高,提升到可能訪問(wèn)該資源的所有任務(wù)中最高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)(這個(gè)優(yōu)先級(jí)稱為該資源的優(yōu)先級(jí)天花板)。

2.2優(yōu)先級(jí)繼承

    當(dāng)發(fā)現(xiàn)高優(yōu)先級(jí)的任務(wù)因?yàn)榈蛢?yōu)先級(jí)任務(wù)占用資源而阻塞時(shí),就將低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)提升到等待它所占有的資源的最高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)。

3. 互斥量解決優(yōu)級(jí)反轉(zhuǎn)

3.1互斥量屬性塊

    互斥量在創(chuàng)建時(shí),需先創(chuàng)建互斥量屬性塊,SylixOS下互斥量屬性塊結(jié)構(gòu)如程序清單 3.1所示。

程序清單 3.1 互斥量屬性塊結(jié)構(gòu)

typedef struct {
    int          	PMUTEXATTR_iIsEnable;     	/*  此屬性塊是否有效           */
    int             	PMUTEXATTR_iType;       	/*  互斥量類型                 */
    int             	PMUTEXATTR_iPrioceiling;	/*  天花板優(yōu)先級(jí)               */
    unsigned long	PMUTEXATTR_ulOption;       	/*  算法類型                   */
} pthread_mutexattr_t;

    初始化互斥量時(shí),如果不為互斥量屬性塊進(jìn)行初始化,則使用默認(rèn)屬性,SylixOS互斥量默認(rèn)屬性塊如程序清單 3.2所示。

程序清單 3.2 默認(rèn)互斥量屬性塊

static const pthread_mutexattr_t  _G_pmutexattrDefault = {
    1,
    PTHREAD_MUTEX_DEFAULT,                       	/*  允許遞歸調(diào)用               */
    PTHREAD_MUTEX_CEILING,
    (LW_OPTION_INHERIT_PRIORITY | 
    LW_OPTION_WAIT_PRIORITY) 				/*PTHREAD_PRIO_NONE	       */
};

    由默認(rèn)互斥量默認(rèn)屬性塊可知,SylixOS下默認(rèn)解決優(yōu)先級(jí)反轉(zhuǎn)方案是優(yōu)先級(jí)繼承策略。

3.2提高優(yōu)先級(jí)

    低優(yōu)先級(jí)的任務(wù)占有資源,且高任務(wù)的優(yōu)先級(jí)請(qǐng)求資源時(shí),會(huì)嘗試提高低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí),在申請(qǐng)資源時(shí)調(diào)用_EventPrioTryBoost函數(shù)嘗試提高任務(wù)優(yōu)先級(jí)。

#include 
VOID  _EventPrioTryBoost (PLW_CLASS_EVENT  pevent, PLW_CLASS_TCB  ptcbCur)

    函數(shù)_EventPrioTryBoost原型分析:

  • 參數(shù)pevent為資源所屬的事件控制塊;

  • 參數(shù)ptcbCur為當(dāng)前任務(wù)控制塊。

    該函數(shù)根據(jù)互斥量屬性塊的屬性設(shè)置,確定選用優(yōu)先級(jí)繼承策略或者天花板策略(SylixOS下默認(rèn)是使用優(yōu)先級(jí)繼承策略),調(diào)用_SchedSetPrio函數(shù)改變?nèi)蝿?wù)的優(yōu)先級(jí)。

3.3恢復(fù)優(yōu)先級(jí)

    低優(yōu)先級(jí)任務(wù)釋放互斥量時(shí),調(diào)用EventPrioTryResume嘗試恢復(fù)任務(wù)的優(yōu)先級(jí)。

#include 
VOID  _EventPrioTryResume (PLW_CLASS_EVENT  pevent, PLW_CLASS_TCB   ptcbCur)

    函數(shù)_EventPrioTryResume原型分析:

  • 參數(shù)pevent為資源所屬的事件控制塊;

  • 參數(shù)ptcbCur為當(dāng)前任務(wù)控制塊。

    低優(yōu)先級(jí)任務(wù)刪除互斥量時(shí),會(huì)嘗試恢復(fù)任務(wù)優(yōu)先級(jí),代碼片段如程序清單 3.3所示。

程序清單 3.3 嘗試恢復(fù)優(yōu)先級(jí)

if (ptcb) {
        ucPriority = (UINT8)pevent->EVENT_ulMaxCounter;	       /*  獲得原線程優(yōu)先級(jí)           */
	/*
	 *  擁有者優(yōu)先級(jí)發(fā)生了變化,還原優(yōu)先級(jí)
	 */
        if (!LW_PRIO_IS_EQU(ucPriority, ptcb->TCB_ucPriority)) {
        _SchedSetPrio(ptcb, ucPriority);
    }
}

4. 優(yōu)先級(jí)設(shè)置函數(shù)

    在使用互斥量時(shí),嘗試提高或恢復(fù)任務(wù)優(yōu)先級(jí),調(diào)用SchedSetPrio函數(shù)進(jìn)行優(yōu)先級(jí)設(shè)置。

#include 
VOID  _SchedSetPrio (PLW_CLASS_TCB  ptcb, UINT8  ucPriority)

    函數(shù)_SchedSetPrio原型分析:

  • 參數(shù)ptcb為當(dāng)前任務(wù)控制塊;

  • 參數(shù)ucPriority為需設(shè)置的優(yōu)先級(jí)。

    _SchedSetPrio函數(shù)改變?nèi)蝿?wù)的優(yōu)先級(jí),實(shí)現(xiàn)流程如圖 4.1所示。

 SylixOS下優(yōu)先級(jí)反轉(zhuǎn)與解決方案

圖 4.1 優(yōu)先級(jí)設(shè)置流程


本文標(biāo)題:SylixOS下優(yōu)先級(jí)反轉(zhuǎn)與解決方案
分享鏈接:http://weahome.cn/article/ghiios.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部