溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vxworks中Task的Hook怎么用

發(fā)布時(shí)間:2021-12-22 10:34:36 來源:億速云 閱讀:337 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家分享的是有關(guān)vxworks中Task的Hook怎么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

VxWorks里可以給Task注冊(cè)6種Hook,分別用于Create、Delete、Stop、Continue、Switch、Swap。

Create

vxworks中Task的Hook怎么用

其參數(shù)createHook是一個(gè)函數(shù),原型如下

vxworks中Task的Hook怎么用

這個(gè)taskCreateHookAdd()的作用是: 每次有Task在創(chuàng)建新Task的過程中,就會(huì)自動(dòng)調(diào)用注冊(cè)的函數(shù)createHook()

taskCreateHookDelete()負(fù)責(zé)刪除之前注冊(cè)的Hook

taskCreateHookAdd()可以注冊(cè)的Hook數(shù)量默認(rèn)為40

vxworks中Task的Hook怎么用

 

Delete

vxworks中Task的Hook怎么用

與Create的類似,每次有Task刪除其它Task時(shí),都會(huì)自動(dòng)調(diào)用函數(shù)deleteHook()

Stop

vxworks中Task的Hook怎么用

每次有Task在Stop其它Task時(shí),都會(huì)自動(dòng)調(diào)用函數(shù)stopHook()

可以注冊(cè)的Hook最多為4個(gè)

vxworks中Task的Hook怎么用

 

Continue

vxworks中Task的Hook怎么用

每次有Task在Continue其它Task時(shí),都會(huì)自動(dòng)調(diào)用函數(shù)contHook()

Switch

vxworks中Task的Hook怎么用

每次有Task切換執(zhí)行時(shí),都會(huì)調(diào)用函數(shù)switchHook()。例如Task B搶占了正在執(zhí)行的Task A,就會(huì)調(diào)用switchHook()。Task A再恢復(fù)執(zhí)行時(shí),就再次調(diào)用switchHook()。

可以注冊(cè)的Hook最多為16個(gè)

vxworks中Task的Hook怎么用

 

Swap

vxworks中Task的Hook怎么用

與Switch比較像,都是在Task切換時(shí)調(diào)用相應(yīng)的Hook。

區(qū)別是:Switch是每次Task切換都會(huì)調(diào)用相應(yīng)的Hook;而Swap注冊(cè)Hook后,只對(duì)taskSwapHookAttach()掛接的任務(wù)有效。而且taskSwapHookAttach()掛接時(shí),還可以指定是切入有效,還是切出有效。例如taskSwapHookAttach((FUNCPTR)swapHook,TaskA,1,0)表示TaskA被CPU執(zhí)行時(shí)才會(huì)調(diào)用swapHook(),即切入有效;而TaskA被其它Task搶占了,是不會(huì)觸發(fā)swapHook()的,即切出無效。

另外,Switch與Swap注冊(cè)的Hook是在Kernel的上下文里執(zhí)行,因此并不是所有的系統(tǒng)函數(shù)都可以在它們的Hook里調(diào)用??梢员徽{(diào)用的函數(shù)如下

vxworks中Task的Hook怎么用

 

下面我們看一個(gè)完整的Hook例子

先聲明幾個(gè)Hook函數(shù):Create、Delete、Stop和Continue的Hook都是打印Task的名字;Switch和Stop的Hook因?yàn)槟軌蛘{(diào)用的函數(shù)很有限,因此我們只是記錄一下切換的次數(shù)

vxworks中Task的Hook怎么用

 

然后分別注冊(cè)這些Hook。注冊(cè)Swap時(shí),我們?cè)诶又兄蛔?cè)一個(gè)方向,例如切入方向。

并啟動(dòng)一個(gè)test Task,它循環(huán)打印自己的執(zhí)行次數(shù),然后掛起自己。

vxworks中Task的Hook怎么用

在VxWorks里試試這個(gè)例子

執(zhí)行testHook(),可以看到createHook()提示Shell創(chuàng)建了T1。然后test()自己打印執(zhí)行了一次。

vxworks中Task的Hook怎么用

看一下切換次數(shù),是不是符合預(yù)期。swapOut為0,因?yàn)槲覀儧]有記錄它。

vxworks中Task的Hook怎么用

看看test的狀態(tài)

vxworks中Task的Hook怎么用

然后讓它再跑一圈,看看切換次數(shù)還對(duì)不對(duì)。swapOut保持不變,其它幾個(gè)計(jì)數(shù)器變大了

vxworks中Task的Hook怎么用

 

試試Stop和Continue,也沒問題

vxworks中Task的Hook怎么用

最后是Delete

vxworks中Task的Hook怎么用

是不是有點(diǎn)意思?

最后了才想起來要查看Task Name的話,可以直接使用 taskName(),沒必要訪問TCB的成員呀 ?

vxworks中Task的Hook怎么用

感謝各位的閱讀!關(guān)于“vxworks中Task的Hook怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI