• 検索結果がありません。

割込み処理モデル

ドキュメント内 μITRON4.0仕様書(Ver ) (ページ 73-76)

第 3 章 µITRON4.0仕様の概念と共通定義 49

3.3 割込み処理モデル

3.3.1 割込みハンドラと割込みサービスルーチン

µITRON4.0仕様では,外部割込み(以下,単に割込みと呼ぶ)によって起動さ れる処理として,割込みハンドラと割込みサービスルーチンがある.

割込みハンドラは,プロセッサの機能のみに依存して起動することを基本とす る.したがって,割込みコントローラ(IRC;Interrupt Request Controller)の操 作は,カーネルではなく,割込みハンドラで行う.割込みハンドラの記述方法 は,一般にはプロセッサの割込みアーキテクチャや用いるIRCなどに依存する ため,実装定義とする.割込みハンドラをそのままの形で異なるシステムに移 植することはできない.

それに対して割込みサービスルーチンは,割込みハンドラから起動するルーチ ンで,プロセッサの割込みアーキテクチャや用いるIRCなどに依存せずに記述 することができる.すなわち,IRCの操作は割込みサービスルーチンを起動す る割込みハンドラで行われ,割込みサービスルーチンではIRCを操作する必要 はない.

µITRON4.0仕様では,アプリケーションが用意した割込みハンドラを登録する

ためのAPI(DEF_INHなど)と,割込みサービスルーチンを登録するための

API(ATT_ISRなど)の両方を規定しており,実装ではそのいずれかのAPIを

提供すればよい.割込みハンドラを登録するためのAPIを提供する場合,割込 みハンドラの起動の前後に行うべき処理を含むルーチン(これを,割込みハン ドラの出入口処理と呼ぶ)をカーネルで用意し,割込みハンドラ属性によって は,用意した出入口処理を経由して割込みハンドラを起動することができる.

割込みサービスルーチンを登録するためのAPIのみを提供する場合には,割込 みサービスルーチンを起動する割込みハンドラは,カーネルが用意する.ま た,両方のAPIを提供することも可能であるが,その場合,両方のAPIを併用 した場合の振舞いは実装定義とする.

カーネルは,ある優先度よりも高い優先度を持つ割込み(禁止できない割込み を含む)を,管理しないものとすることができる.このような割込みを,カー ネルの管理外の割込みと呼ぶ.どの優先度より高い優先度を持つものをカーネ ルの管理外の割込みとするかは,実装定義である.カーネルの管理外の割込み によって起動される割込みハンドラからは,カーネルのサービスコールを呼び 出すことができない.この仕様書で,割込み(ないしは,割込みハンドラ)と いう場合には,カーネルの管理外の割込み(ないしは,それによって起動され る割込みハンドラ)は含まないものとする.

図3-3にµITRON4.0仕様における割込み処理の概念モデルを示す.ただし,こ

の図はあくまでも概念モデルを示すものであり,実際の実現方法は実装やアプ リケーション毎に自由に決定することができる.

図3-3. 割込み処理モデル 割込み ハンドラ 割込みハンドラの

出入口処理

割込みサービス ルーチン

A 外部割込み

IRC の操作

リターン

タスクディスパッチ

B

【補足説明】

割込みハンドラの出入口処理で必要な処理として,割込みハンドラ内で使用す るレジスタの保存と復帰,スタックの切替え,タスクディスパッチ処理,プロ セッサレベルでの割込みハンドラからの復帰が挙げられる.この中で実際にど の処理が必要かは,場合によって異なる.また,これらの処理の中で,どれを カーネルが用意する出入口処理で行い,どれをアプリケーションが登録する割 込みハンドラで行わなければならないとするかは,実装定義である(割込みハ ンドラ属性によっても異なる).

割込みサービスルーチンを起動する際に,割込みハンドラで行わなければなら ないIRCの操作として,IRCからの割込み要因の取り出し,取り出した割込み 要因による分岐,IRCのエッジトリガのクリア,IRCの割込みサービス中フラ グのクリアが挙げられる.また,割込みサービスルーチンを起動する前に,CPU ロック解除状態にすることが必要である.

割込みサービスルーチンを起動する際のオーバヘッドを削減するために,割込 みハンドラの出入口処理と割込みハンドラを一体で用意する方法や,割込みハ ンドラ内に割込みサービスルーチンをインライン展開する方法を採ることが できる.

【スタンダードプロファイル】

スタンダードプロファイルでは,割込みハンドラを登録するためのAPIと割込 みサービスルーチンを登録するためのAPIのいずれかをサポートしなければな らない.

【仕様決定の理由】

アプリケーションの割込み処理部分の移植性を向上させるために,割込みハン ドラよりも高い移植性を持つ割込みサービスルーチンを導入した.一方,移植 性の低い割込みハンドラを残したのは,用いるIRCに依存しない形でカーネル を提供できるようにするためである.

3.3.2 割込みの指定方法と割込みサービスルーチンの起動

µITRON4.0仕様では,割込みを指定するための方法として,割込み番号と割込 みハンドラ番号の2つがある.また,割込みサービスルーチンは,ID番号で識 別される.

割込みハンドラ番号(INHNO型)は,割込みハンドラを登録する際に,割込 みハンドラを登録する対象となる割込みを指定するために用いる番号である.

指定された割込みは,IRCを操作しない範囲で判別できるのが基本であること から,一般的な実装では,プロセッサの割込みベクトル番号に対応する.割込 みベクトルを持たないプロセッサにおいては,指定することができる割込みハ ンドラ番号は一つのみとなる場合もある.

割込み番号(INTNO型)は,割込みサービスルーチンを登録する際に,割込み サービスルーチンを登録する対象となる割込みを指定するために用いる番号

である.また,割込み番号は,割込みを個別に禁止/許可するためのサービス コール(dis_int,ena_int)で,禁止/許可の対象となる割込みを指定するため にも用いられる.割込みサービスルーチンの起動や,割込みの個別の禁止/許 可は,IRCを操作して実現することを想定していることから,一般的な実装で は,割込み番号はIRCへの割込み要求入力ラインに対応する.

割込みサービスルーチンは,デバイスからの割込み要求ラインに対応して用意 するのを基本とする.IRCへの一つの割込み要求入力ラインには,複数のデバ イスからの割込み要求が接続される場合があるため,一つの割込み番号に対し て複数の割込みサービスルーチンを登録することができる.割込み番号で指定 された割込みが発生した場合には,その割込み番号に対して登録されたすべて の割込みサービスルーチンを順に起動する.割込みサービスルーチンを起動す る順序は実装依存である.一つの割込み番号に対して登録された複数の割込み サービスルーチンを区別するために,割込みサービスルーチンはID番号を用 いて識別する.

【補足説明】

IRCの一つの割込み要求入力ラインに複数のデバイスからの割込み要求が接続 されていても,割込みを要求したデバイスがプロセッサに割込みベクトル番号 を供給する場合には,プロセッサレベルで割込み要因を判別することができ る.このような場合,異なる割込みベクトル番号を供給する割込みは,異なる 割込み番号を持つものと解釈することができる.

ドキュメント内 μITRON4.0仕様書(Ver ) (ページ 73-76)