(toppers-users 564) CPU 例外と CPU ロック状態

Tatsuhiko Matsukawa KFC00725 @ nifty.ne.jp
2002年 9月 24日 (火) 20:24:53 JST


お世話になっております。

CPU例外とCPUロック状態について教えてください。

仕様書3.5.4の[補足説明]に
「また、CPUハンドラからのリターン直後は、CPU例外ハンドラからCPUロック
状態でリターンした場合にはCPUロック状態、CPUロック解除状態でリターンし
た場合にはCPUロック解除状態になる。」
とありますが、これは、CPU例外ハンドラの中で、CPUロック状態を変更した場
合、CPU例外が発生した側の状態は、CPU例外発生の前後で、状態が変わってし
まう、ということでしょうか。

例えば、
 タスクコンテキスト
    ↓
    ↓CPUロック解除状態で、タスクコンテキスト実行中
    ↓
    ↓(CPU例外発生)
                      CPU例外ハンドラ
                         ↓
                         ↓iloc_cpu()
                         ↓return ;
    ↓戻った時にはCPUロック状態
    ↓
逆に、
    ↓
    ↓CPUロック状態で、タスクコンテキスト実行中
    ↓
    ↓(CPU例外発生)
                      CPU例外ハンドラ
                         ↓
                         ↓iunl_cpu()
                         ↓return ;
    ↓戻った時にはCPUロック解除状態
    ↓
とならなければならない、という理解でいいのでしょうか。


多くのCPUでも同様だと思いますが、Xstormy16の場合、CPU例外は、割り込み
とほとんど同じ動作をします(割り込み・例外の発生で、PCとともにPSWも保存
される)。CPU例外ハンドラからのリターン時に、CPU例外ハンドラ内でのCPUロ
ック(解除)状態を継続させるには、スタックの中を直接操作するしか、方法が
思いつきません。

他のCPUでは、この部分、どのように実装されていますでしょうか?

以上、アドバイス、ご意見いただけたら幸いです。


************************
松川竜彦
KFC00725 @ nifty.ne.jp
************************