基本概念の勉強
割り込み処理
3つの要点
- 割り込み発生時に実行させたい処理を、割り込みハンドラとして登録しておく
- 割り込みが発生した際には、現在実行中の処理を中断し、登録しておいた割り込みハンドラが実行される。
- 割り込みハンドラの実行後に、中断していた本来の処理に戻る。
この最後の本来の処理に戻るために、一般的なCPUでは、
- プログラム・カウンタ
- モードレジスタ
の2つを割り込み発生時に退避させる。
実装
割込みベクタの位置は、メモリの先頭アドレスである0x000000以降の256バイト(0x000000~0x0000ff)
割込みベクタはROM上にあるので、割込みベクタの内容を決め打ちで設定しておく。
つまり、OS側の割込みハンドラのアドレスは固定となる。
なかなか融通がきかない。
また、割込みベクタ64コに固定の割込みハンドラを割り当てると、かなりのサイズになってしまう。
そこで実装は以下の方針とする。
ブートローダ側で割込みハンドラを用意する。その中でRAMのOS側の割込みハンドラへ飛ぶようにする
つまり、二段階の構成とする。
- 割込みベクタ(ROM)を見ると、ブートローダ側の割込みハンドラのアドレス(RAM)が書いてある。
- ブートローダ側のハンドラでは、いくつか用意してあるOS側のハンドラへ飛ぶ。(こちらをソフトウェア割込みベクタとよんでいる)
- OS側のハンドラはmain()の中で設定しておく.
ソフトウェア割込みベクタは3種類用意する
疑問
割込みベクタとか内蔵ROMとか内蔵RAMとかアドレス空間はどうやって決めたのか。
…でもよく考えたら、それを電子回路で割りつけているという話だった。