二、 OMAP 處理器硬體及軟體開發環境
2.4 DSP/BIOS
2.4.3 DSP/BIOS 的執行緒(Thread)
DSP/BIOS 核心實行了執行時(Run-Time)由 DSP/BIOS APIs 所建構的應用程式。圖 2-7表示,DSP/BIOS 執行緒的關係,執行緒之間是各自獨立的 DSP 的命令,可以是中 斷要求(ISR,Interrupt Service Request)、副函式(Subroutine)或者是一個函式呼叫(Function Call)。例如,當一個硬體發出中斷,就是一個執行緒,這時會做出一個 ISR。
圖 2-7 DSP/BIOS 執行緒表示
資料來源:TMS320 DSP/BIOS User’s Guide Rev B[4]
單一處理器系統經由優先權(Priority)的安排,高優先權的執行緒,比低優先權的先 處理而達到多執行緒的應用。DSP/BIOS 提供了 30 個層級的權先權順序並分成四個明確 的類型,圖 2-8 表示。依優先順序可分成:
(1) 硬體中斷(Hardware interrupt,HWI):在 DSP 的環境下產生外部非同步的事件觸發的 回應。HWI 函式(或稱為一個 ISR,interrupt service routine)是在硬體發生中斷之後在 一定的時間內執行的一個 Critical Task。硬體中斷具有最高的優先權。
(2) 軟體中斷(Software interrupt,SWI):提供硬體中斷與一般執行緒間另一種優先順序 的選擇,與硬體中斷一樣,必須將中斷函式執行完畢才會將執行權釋出。通常軟體 中斷,排程會在 100 微秒(microseconds)或更久,才會執行。
(3) 一般工作(task,TSK):一般工作可以暫停(Suspend),等待一些必要資源齊全後再繼 續執行,DSP/BIOS 亦提供特殊結構,以利於一般工作間的通訊(inter-communication) 及同步功能,這些結構包括:Atomic Queue,QUE 模組、旗號(Semaphores,SEM 模 組)及 Mailbox,MBX 模組。優先權較 Background thread 來的高。
(4) 背景執行緒(Background thread):執行一個不工作的迴圈(IDle Loop, IDL) ,在 DSP/BIOS 內是最低優先權。
圖 2-8 DSP/BIOS 各種執行緒之優先順序 資料來源:TMS320 DSP/BIOS User’s Guide Rev B[4]
表 2-5是針對四種類型的特性做比較,表 2-6 則是強制性的比較說明。圖 2-9以表 Execution states
不執行,準備, 排程如何停止 HWI_disable SWI_dspable TSK_disable Program exit
如何輪詢或準備 Stack used
系統堆疊 System stack (1 per program)
系統堆疊 System stack (1 per program)
工作堆疊 Task stack (1 per task)
預設工作堆疊 Task stack used by default
本文儲存 Context saved
客製化 global variables
資料流 Stream,佇 global variables
執行緒同步 -Not Applicable- SWI mailbox
Semaphores , mailbox
-Not Applicable-
Dynamic creation Yes Yes Yes No
動態改變優先權 No Yes Yes Yes
1:結束一般工作管理對談通訊,IDL 執行緒才會去使用系統堆疊。
資料來源:TMS320 DSP/BIOS User’s Guide Rev B[4]
表 2-6 執行緒的相互強制性(Thread Preemption)
執行緒執行(Thread running)
執行緒發佈(Thread Posted) 硬體中斷 軟體中斷 一般工作 不工作迴圈
開始硬體中斷 可強制執行 可強制執行 可強制執行 可強制執行
結束硬體中斷 等待回應 等待回應 等待回應 等待回應
開始高優先權的軟體中斷 --- 可強制執行 可強制執行 可強制執行
結束軟體中斷 等待 等待回應 等待回應 等待回應
低優先權的軟體中斷 等待 等待 --- ---
開始高優先權的一般工作 --- --- 可強制執行 可強制執行
結束一般工作 等待 等待 等待回應 等待回應
低優先權的一般工作 等待 等待 等待 ---
資料來源:TMS320 DSP/BIOS User’s Guide Rev B[4]
圖 2-9 Preemption Scenario
資料來源:TMS320 DSP/BIOS User’s Guide Rev B[4]