(toppers-users 357) Re: Toppers CPU ロック状態について

Shigemitu Takata takata @ kyoto-sr.co.jp
2002年 1月 30日 (水) 16:22:06 JST


こんにちは
高田@京都ソフトウェアリサーチです。

  詳しい説明ありがとうございます。

> あくまでも
>  ・CPUロック状態  = カーネルが管理している割込み/例外ハンドラ/タスクへの
>                     ディスパッチ禁止
>  ・割込み禁止状態 = CPUが管理している割込み/例外要求の受付拒否
> であり、両者は独立だということです。

  はい、私もこのように解釈しております。

> しかし、ここで「割込み禁止 = CPUロック状態」としてしまうと、
> この割り込みハンドラ実行中は常にCPUロック状態だということになってしまい、
> ほとんどのAPIが実行できません。
> また、前の項目の「ハンドラ起動時はCPUロック解除状態であるべき」に反します。
>  #V850依存部のテストのときにこの現象を体験しました

  そうですね。まさしく上記の問題がおこるので再度確認させていただきました。
 
> ここまで書いていて気づいたのですが、「割込み禁止 = CPUロック状態」という
> 実装で一番厄介なケースが割込みハンドラ内のソフトウェア例外要求です。
>>>> 上記のようなケースの場合、TRAPでハンドラを起動する前に現在
> CPUロック状態であるかどうかを判定し、CPUロック状態であれば
> 要求をペンディングするような仕組みを設けるか、
> これらの例外をカーネルの管理外とするなどの対策法がありそうです。
> 
> 利用頻度によると思いますが、個人的にはサポート外とするのが妥当だと思います。
>  #関数呼び出しやタスク例外ではなく、
>  #TRAPで起動しようとする意図がちょっと思いつきません

  思いつくところでは、デバッカ上で動作するアプリケーションでしょうか。
デバッカは、デバックしているアプリケーションで指定した breakpoint に 
trap(break) 命令を埋め込んで例外を発生させ、デバッカに処理を引き渡します
から。 
#デバッカはカーネルから独立して動くべきものですから、このケースには当て
#はまらないですね。


  以上、ありがとうございます。
/*
Shigemitu Takata <takata @ kyoto-sr.co.jp>
*/