思想解读:optee中的多线程处理
快速鏈接:
.
👉👉👉 個(gè)人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
思考:
1、optee中到底是否支持多線程?
2、您想問的是optee os是否支持多線程? 還是optee環(huán)境中的TA或應(yīng)用程序中是否支持多線程?
說明: 這里需要明確一點(diǎn): 你看到的官方文檔中也不一定對(duì)。
我們通常所說的多線程,一般是這樣產(chǎn)生的:
1、在kernel中,調(diào)用了kthead_create之類的函數(shù),產(chǎn)線一個(gè)kernel線程
2、在某一個(gè)應(yīng)用程序中,調(diào)用pthread_create之類的函數(shù),產(chǎn)線了一個(gè)user線程
在這么的一個(gè)大系統(tǒng)通,也許只有8個(gè)core,但確運(yùn)行著數(shù)十個(gè)或數(shù)百個(gè)線程,他們以task_struct結(jié)構(gòu)體的形式表述。 然后再有內(nèi)核的調(diào)度程序來選擇執(zhí)行,從而達(dá)到了一個(gè)硬件分時(shí)復(fù)用的效果。
那么在optee中是怎樣的呢?
在optee中沒有創(chuàng)建kernel線程的接口、在TA和應(yīng)用程序中也沒有創(chuàng)建user線程的接口,那么就意味著沒有多線程了嗎? 燃鵝,卻有著另外的一種形式,也是可以產(chǎn)線多線程,總結(jié)如下:
- optee中有一個(gè)threads[CFG_NUM_THREADS]變量,用于存放沒有處理完成的線程,變量類型為thread_ctx結(jié)構(gòu)體(類似于linux kernel中的task_struct),暫且認(rèn)為它也表示一個(gè)task吧
- 當(dāng)一個(gè)用戶程序正在執(zhí)行時(shí),由于RPC或中斷返回到REE了,在返回之前會(huì)將該線程的信息保存到threads數(shù)組中, 這時(shí)就相當(dāng)于創(chuàng)建了一個(gè)線程。
- 當(dāng)cpu從REE調(diào)用到TEE時(shí),TEE會(huì)先檢查是否還有未處理的線程,如果有則執(zhí)行。 這就相當(dāng)于線程的調(diào)度了。
總結(jié):
1、optee os 沒有內(nèi)核線程
2、TA 不支持多線程
3、一個(gè)應(yīng)用程序看做一個(gè)任務(wù)( 這句話非常正確!!!),optee支持多任務(wù),optee內(nèi)部沒有調(diào)度程序,所以多個(gè)任務(wù)也是按照順序依次調(diào)用。對(duì)于一個(gè)cpu來說,它只有完全執(zhí)行完了一個(gè),它才會(huì)再調(diào)用另外一個(gè)。 注意:optee os是支持多核的,所以會(huì)出現(xiàn)多個(gè)任務(wù)被多個(gè)核調(diào)用的point,所以需要考慮并發(fā)。
總結(jié)
以上是生活随笔為你收集整理的思想解读:optee中的多线程处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CoreLink CCI-550的概念介
- 下一篇: 微信公众号开发(python+werob