DSP/BIOSのスレッドの種類
こんにちはuzakadeuです。
今回はDSP/BIOSのスレッドの種類についてお話しします。
四種類のプログラム・スレッド
DSP/BIOSは四種類のプログラム・スレッドを提供しています。
- HWI(ハードウェア割り込み) - DSP/BIOSチックを実現するCLKを含む。
- SWI(ソフトウェア割り込み) - ソフトタイマーを提供するPRDを含む。
- TSK(タスク)
- IDL(バックグランド・スレッド)
各プログラム・スレッドのごく一部の特性を下表に比較しました。
特性 | HWI | SWI | TSK | IDL |
---|---|---|---|---|
スレッド種間の優先順 | 最高 | 2番目 | 3番目 | 最低 |
スレッド種内の優先度数 | DSP CPUに依存 | 15 | 16 | 1 |
優先度の動的変更 | 不可 | 可能 | 可能 | なし*1 |
待ち状態の有無 | なし | なし | あり | あり*2 |
使用するスタック | システム | システム | タスク別 | 専用 |
HWI(ハードウェア割り込み)
ハードウェア割り込み発生時に、割り込みコンテキストで実行されます。
DSPの割り込み - uzakadeuのブログやDSP/BIOSの割り込みディスパッチャー - uzakadeuのブログもご覧下さい。
SWI(ソフトウェア割り込み)
よく汎用プロセッサに存在するソフトウェア例外を使った特権実行モードとは全く異なるものです。完全にソフトウェアのみで実現された、優先度の高い、走り切り*3のプログラム・スレッドです。
SWIは、実行優先順位がHWIより低くTSKより高い、いったん実行を開始したら走りきりである、という特徴を生かし、次の用途で用いました。
- HWIの後半部。割り込みコンテキストで実行されるHWIでは必要最小限のことだけ行い、残りの時間のかかる処理はSWIに任せる。
- ハードウェア制御。あるハードウェアを複数のTSKから制御すると、制御手順の途中で他のTSKに実行権が移って、制御手順が守れない可能性がある。ハードウェア制御を一つのSWIに任せればこのような問題は発生しようがない。鍵が10個ついた金庫を混乱なく運用するには、すべての鍵を持った唯一人の管理者が常に操作するのが一番簡単であるのと同じ手法である。
- 一時的な高優先度。ごく簡単な処理を他のTSKに邪魔されないで実行したいことがある場合、SWIを使うと効率がよい*4。
TSK(タスク)
多くのOSで提供されるタスク/スレッドと同等のものです。
セマフォやキューといった同期オブジェクトを使ったり、TSKスケジューリング用のAPIを使って、実行権を保留/譲渡することができるので、かなり使い出のあるプログラム・スレッドです。
DSPの機能のほとんどをTSKで実現し、TSKにはできないことだけSWI,IDLで実現するという設計方針でたいていOKです。
IDL(バックグランド・スレッド)
他に何も実行していない時に、先頭から実行されます。
他に何も実行していない時は電力を消費したくないので、ここでDSPを省電力モードに遷移させる処理を行っていました。簡単に省電力機能を導入できます、便利ですね。