(toppers-users 2244) Re: 管理外割込みと例外について

TAKADA Hiroaki hiro @ ertl.jp
2006年 1月 5日 (木) 13:08:56 JST


酔漢様

あけましておめでとうございます。名古屋大学の高田です。

> TOPPERS/JSPというよりITRON4についてですが、管理外割込みからの戻りに付い
> て質問させてください。
(中略)
> しかし、Blackfinプロセッサは例外を割込みよりも高い優先順位としているた
> め、以下のようなネストが発生しえます。
> 
> タスク
> 管理外割込み
> 例外
> 
> 現在の実装では例外から戻るときには「ネスト中である」と判断してディスパッ
> チやタスク例外処理を行いません。したがって、タスクに戻ったときに発生すべ
> きディスパッチや例外がおきないことがあります。

ご指摘ありがとうございます。カーネルの管理外の割込みについては、仕様を
細かく詰めきれていないところがあり、これは考えていなかった状況です。

筋として次の通りです。

カーネルの管理外の割込みの中では、サービスコールは一切発行できない。よっ
て、カーネルの管理外の割込みの中で発生したCPU例外ハンドラ中でも、サー
ビスコールは一切発行できない。その結果、CPU例外ハンドラの中でタスクディ
スパッチが起こることはなく、上記の問題は起こらない。

残る問題は、CPU例外ハンドラの中で、「サービスコールは一切発行できない」
ことをどうやって知るかです。

TOPPERS標準割込み処理モデル(これは、まだTOPPERS会員外には出していない
資料です)では、xsns_dpnとxsns_xpnがいずれもTRUEを返すことで、他のサー
ビスコールが発行できないことがわかりますので、問題なしです。

# 「TOPPERS標準割込み処理モデル」のドキュメントに、この状況について記
# 述するようにします。という意味では、大変ありがたいご指摘でした。

μITRON4.0仕様では、カーネルの管理外の割込みが動いていることを判別する
ための標準的な方法は規定されていません(さらに言えば、割込みロック中も
判別できないという問題があります。これは known problem です)。μITRON
4.0仕様では、CPU例外ハンドラについてはほとんどが実装定義ですので、この
ような方法を実装定義で用意してあげれば良いということになります。

高田広章
名古屋大学