カーネル認識割込みとカーネル非認識割込みに対応したRTOS
著者: Jean J. Labrosse氏、RTOSのエキスパート
割込みは、周辺デバイスによって生成されるイベントです。たとえばEthernetパケットを受信すると、周辺デバイスは割込みを使用して処理を要求します。デバイスからの割込みによって、CPUは強制的に割込みサービスルーチン(ISR)にジャンプします。割込みが、タスクの待っていたイベントであった場合、ISRは、そのイベントの処理に必要な作業のほとんどを担当することになるタスクに知らせます。この時、割込みがEthernetコントローラからのパケットの可用性を伝えれば、タスクは、ISRではなく受信したパケットのサービスを行います。このタイプのISRは、イベントについてタスクに通知する際にRTOSのカーネルから提供されたサービスを使うため、カーネル認識(KA:Kernel Aware)ISRと呼ばれます。RTOSは、ISRを行うタスクの重要度に基づいて、コンテキストスイッチが必要かどうかを判断します。
RTOSは、内部データ構造を操作している間、たとえば、連結リストなどの処理中は、その動作が確実に自動処理されるように割込みを無効にします。つまり、ISRは、周辺デバイスから割込み信号を受信した直後には起動されません。この遅延を割込みレイテンシと呼びます。タスクがデバイスに対してサービスを行うまでに要する時間は、割込み応答時間と呼ばれ、そのデバイスを扱うタスクの優先度によって変わります。サービスを行うタスクの優先度が低い場合、この遅延は問題になりません。RTOSは、優先度の高いタスクを常に先に実行するからです。
割込みの要求する処理が非常に小さい場合、たとえば、パルス幅変調(PWM)レジスタへの新しい値のリロードなどは、RTOSを介在させずにISRだけでその処理を行うことができます。このタイプの割込みは、KA割込みよりも常に優先度が高く、カーネル非認識(nKA:non-Kernel Aware)割込みと呼ばれます。nKA割込みはRTOSによって無効にすることができないため、応答時間が極めて短くなります。
以下に、nKA ISRとKA ISRの違いについて説明します。nKA割込みはRTOSによって無効にすることができないため、nKA ISRのレイテンシは非常に小さな値(通常、数CPUクロックサイクル)となります。KA ISRのレイテンシは、その割込みが無効にされる期間や、CPUがnKA割込みや他の優先度の高い割込みに応答中であるかどうかによって変わります。
では、ISRのKAまたはnKAはどのように決まるのでしょうか?実は、これはシステム設計者が決定します。ほとんどのCPUでは、割込みデバイスに対して優先度を割当てることができます。たとえば、Cortex-M MCU (ARMv7M)の多くは、ネスト型ベクタ割込みコントローラ(NVIC:Nested Vectored Interrupt Controller)の3ビットを使って、割込みデバイスの優先度を設定します。すなわち、最高優先度のレベル0から最低優先度のレベル7まで、8レベルの優先度を選択することができます。
RTOSは、コードのクリティカルセクションをアクセスする際は、割込みを(一時的に)無視する必要があります。そのため、Cortex-MのBASEPRIレジスタを変更してどの優先度からでも割込みを無効にできます。これにより、nKAとKA割込みの境界を容易に決めることができます。一例として、nKAとKAの境界を優先度3に設定した場合を下表に示します。このように、クリティカルセクションへのアクセス時、RTOSはBASEPRIを3に設定することで、割込み優先度3、4、5、6、7のデバイスからの割込みを防ぐことができます。
この設定によって、RTOSを中断できるのは、優先度0、1、2に設定されたデバイスのみとなります。さらに、これらのISRはRTOS API呼び出しができません。なぜなら、これらはカーネル非認識として定義されているからです。
すべてのRTOSがKA/nKAのコンセプトに対応しているわけではないため、ご使用のRTOSのドキュメントを参照するか、市販の製品である場合は製造元にお問い合わせください。
著者について
本稿は、RTOSを使用したアプリケーション開発をテーマとしたシリーズの一部です。
Jean Labrosse(ジーン・ラブロス)氏は、Micriumの創設者であり、広く普及しているuC/OS-IIおよびuC/OS-IIIカーネルの作成者です。組込みソフトウェアのuC/ラインの発展のために積極的に取り組んでいます。
組込みシステム市場での豊富な経験を有し、市場を知り尽くしているLabrosse氏は、Weston Embedded Solutionsの主席アドバイザおよびコンサルタントとして、現行のRTOS製品の将来的な方向性の策定に尽力しています。Weston Embedded Solutionsは、Micriumのコードベースから生まれた信頼性の高いCesium RTOSファミリー製品のサポートと開発を専門としています。