オリジナルOS「MicrOS」の設計と実装(4) ―― リアルタイム性の確保

田口 信夫

tag: 組み込み

技術解説 2008年10月14日

3.多重割り込み処理



 多重割り込み処理を行うかどうかは,リアルタイム・システムを作る上で大きな問題となります.
 リアルタイムの説明で外部割り込みの処理フローを示しました.それをここで,コメント付きで再掲します(リスト3)
 外部割り込み発生
 (A)までの処理に必要なレジスタをスタックにセーブ(LRレジスタを含めて3~4)
  if( OldPSWをチェック,割り込み処理中?){
    そのほかのレジスタをスタックにセーブ
  } else {
    システム・コントロール・ブロックのカレントTCBを取得
    if( 実行中タスクはあるか?){
       SPレジスタをセーブ
       TCBに残りのレジスタをセーブ
    }
  }
↑この部分を取り除くと多重割り込みを行わなくなる
 (A)外部割り込みのPSW(OldPSW)とPC(OldPC)をバリアブル・レジスタにセーブ
  割り込みコントローラから割り込みベクタ番号を取得し,個別の割り込み処理をレジスタにロード
  ei(多重割り込み処理のため)
  個別の割り込み処理をコール
  EOI処理
  di(割り込みを再度禁止)
  if( OldPSWは割り込み処理中?){
    OldPSW,OldPCを外部割り込みに戻す
    スタックからレジスタをリストア
    reti
  } else if( 実行中タスクあり?){
    if( タスク・スイッチあり?)){
      OldPSW,OldPCをTCBのPSWとPCにセット
      Aまでの処理でスタックにセーブしたレジスタをTCBの所定の位置へ
      TCBをレディ・プールへ登録
    } else {
      OldPSW,OldPCを外部割り込みに戻す
      TCBからレジスタをリストア
      Aまでの処理でスタックにセーブしたレジスタをスタックから戻す
      reti
    }
  }
  ディスパッチャへジャンプする


リスト3 MicrOSの外部割り込み処理の流れ

 このフローの中でOldPSWを判定する部分と,ei,diを取り除けば多重割り込みを行わないことになります.また,多重割り込みを行わないことによって,レジスタのセーブ方法を工夫して処理ステップを多少省略できるかもしれません.しかしそれによる省略は微々たるものです.そうすると,実際に実行されるステップ数の増減は7~8ステップということになります.

● 割り込み処理方法の比較

 外部割り込みにおける個別割り込み処理には3種類あります.一つは,その個別の割り込み処理の中で本質的な処理を行ってしまう場合(割り込み処理方式)です.二つ目は,割り込み処理の中では単にタスクのウェイトを解くだけにして,本質的な処理はタスク側で行う方法(タスク方式)です.最後に,一部だけを割り込み処理で行い,残りをタスクで処理させる方式(混合方式)があります.この三つの方式を比較してみましょう.

● 混合方式の場合

 まず,混合方式です.このような方式を取るのはある一定の時間周辺機器が特定のモードにあり,そのモードにある間,1件1件のデータの処理が割り込み処理の中では処理しきれない処理量があって,その応答をこの1件1件に対してではなく,モードに対して行えばいいような場合に限って適用する割り込み処理方式です.このモードの次の段階で処理されなければならない時間的制限に間に合えばよい割り込み処理では,周辺装置から受け取ったデータをリストにして割り込みタスクに引き継ぐことになります.このように頻繁な状態が常に発生して,一つ一つの割り込みに対する処理が割り込み処理の中で処理しきれないような状態であれば,この周辺機器を制御するのは不可能です.この処理方法は,割り込み処理の最後の段階に行う処理の性格によってタスク方式に還元できます.

 このような割り込みが発生する可能性のあるシステムでは,処理能力の限界を回復するまでは多重割り込み処理によって,この割り込みより高いプライオリティの割り込みを受け付けることはできても,プライオリティの低い割り込みは処理できません.そのため,処理能力の限界を回復する時間によっては,発生した割り込みのすべてを処理できなくなる可能性があることを認識しておかねばなりません.また,その間タスクの処理は待たされます.

 通常の組み込みシステムでは,処理能力の限界を超えるような事態は発生しないように設計されるはずです(もし処理能力の限界を超えた場合,ソフトウェアの処理に問題がなければ,ハードウェアの動作速度を疑うべきである.意外なところに問題のある可能性がある.例えばメモリへのアクセス速度が意図した通りに設定されていないなど).図3の例でいえば,ほかの割り込みとの関係で一時的に処理能力の限界を超えたとしても,次の割り込み発生時にはそれを受けて処理し,処理能力の限界を回復できる能力辺りが限界でしょう.

zu03_01.gif
図3 処理能力

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日