ikemonn's blog

技術ネタをちょこちょこと

はじめて読む486 7章

割り込み

割り込みとは

  • 仕組み
    • プログラムの実行を何らかのきっかけで中断し、一時的に他のプログラムを実行すること
  • 流れ
    • 割り込みの発生
    • 割り込み処理ルーチンの呼び出し
    • 割り込み処理ルーチンの実行
    • 割り込み処理の終了
  • 種類
    • ハードウェア割り込み
      • 周辺機器からの信号によって発生する
    • 例外割り込み
      • トラップ: INT, INTO命令によって発生する(ソフトウェア割り込み)
      • フォールト: 保護機能、MMUのチェックによって発生する
      • アボート: 処理を続けられないエラーが起きた場合に発生する

ハードウェア割り込み

  • 486の割り込み入力端子に信号が送られてくることによって発生する
  • 周辺機器に操作が加えられたことや、周辺機器での実行が完了したことを通知するために使われる

  • 処理の手順

    • 割り込みの発生
      • 人間がキーボードのキーを押すと、キーボードを制御しているキーボードコントローラが割り込みコントローラに割り込み信号を送る
      • 割り込みコントローラは他の割り込み要因との調整を行って、486の割り込み入力端子に信号を送る
    • 割り込み処理ルーチンの呼び出し
      • 486は割り込み信号を受け付けると、さらに割り込み要因を受けとり、対応する割り込み処理ルーチンを選び出す
      • それまで実行していたプログラムを中断し、割り込み処理ルーチンの実行を開始する
    • 割り込み処理ルーチンの実行
      • キーボードに対応する割り込み処理ルーチンでは、キーボードコントローラーから押されたキーの情報をうけとり、割り込み処理ルーチンが管理するメモリ内に格納しておく

ハードウェアの割り込みと割り込み番号

  • 割り込み要因から対応する割り込み処理ルーチンを選択する仕組み
    • 割り込みコントローラは、複数の割り込み要因から送られてくる割り込み要求信号を調停して優先度の高いものを1つ選んで486に伝える
    • 割り込みコントローラは、割り込み要因も伝える
    • 割り込み要因に対応する「割り込み番号」をデータバスに通じて486に送る
    • 割り込み番号は1バイトの数値で256種類ある
    • 割り込みコントローラは割り込み信号線と、割り込み番号の対応表を内部に持っている
    • この表はシステム起動時にBIOSデバイスドライバソフトウェアのプログラムが設定する

割り込み許可フラグ

  • 486内部のフラグレジスタの第9ビットは「割り込み許可フラグ」と呼ばれ、ハードウェアの割り込みをコントロールする
    • CLI (Clear Interrupt Flag)は割り込み許可フラグを0にして禁止する
    • STI (Set Interrupt Enable Flag)は割り込み許可フラグを1にして割り込み許可状態にする

例外割り込み

  • トラップ

    • 「ソフトウェア割り込み」とも呼ばれ、マシン語命令の「INT命令」「INTO命令」が割り込み要因となって発生する
  • フォールト

    • マシンご命令を実行している時に検出された例外状態が割り込み要因となって発生する割り込み
  • アボート

    • フォールトと同じくマシン語命令を実行している時に検出された例外状態が割り込み要因となって発生する
    • フォールトよりも致命的なエラー

割り込み処理

  • リアルモードでの割り込み処理

    • リアルモードとプロテクトモードで割り込みの扱い方が違う
    • 割り込み番号と割り込み処理ルーチンの対応を割り込みベクタテーブルによって設定する
  • 処理の流れ

割り込みディスクリプタテーブル

  • プロテクトモードでは、「割り込みディスクリプタテーブル(IDT)」を使用して割り込み番号と割り込み処理ルーチンを対応させる

    • IDTはゲートディスクリプタを並べたもの
    • セグメントやコールゲートを記述するディスクリプタテーブルとは独立したもの
    • 各ゲートは格納されている順序で割り込み番号に対応付けられており、割り込みが発生すると、割り込み番号に対応する位置にあるゲートが呼び出される
  • 割り込みディスクリプタテーブルに格納するゲートには「割り込みゲート」「トラップゲート」「タスクゲート」の3種類がある

参考