7.2を読み直しました。H8/3069Fの割込み処理についての解説です。

・割込みベクタは、0x000000~0x0000ffの256バイト。
・1つの割込みベクタは4バイトなので最大64個の割込みベクタが持てる。
・割込み要因は、リセットが1つ、NMIが1つ、トラップ命令が4つ、外部割込みが6つ、他に内蔵I/O割込み等。
・リセット割込み入力は負論理なのでLowでリセットがかかりHighでリセットが解除されリセット割込みがかかる。
・H8ではシステムコールはトラップ命令を実行することによって発生するトラップ割込みを使って実現される。
・コンディションコードレジスタCCRには割込みを有効/無効にするビットが含まれる。他にオーバーフローやキャリーフラグも存在する。
・割込みが発生するとCCRの1バイトとPCの3バイトの計4バイトがスタックに積まれる。H8/3069Fのアドレス線は24本なので3バイトで足りる。
・割込みコントローラにはNMIと外部割込み入力がつながっていて割込みに優先順位を持たせる等細かい制御が可能。
・CCRの最上位ビットを1にすると割込み禁止になる。上位から2番目のUIビットは他のレジスタの設定次第では割込み禁止ビットとして使うことも可能になる。
・割込み復帰命令はrte。

当分先に進める程には時間がとれないので再確認のためにやると割り切ったのが良かったようで案外勉強ができています。

4/30のもくもく会で7.3の途中までやったのですが、またまた間が空いてすっかり忘れてしまったので7.1から読み直しました。

割込みに関してハードとソフトの役割分担は、

・割込み発生時は、モードレジスタとプログラムカウンタを保存し、その後でモードレジスタを割込み禁止かつ特権モードに設定変更する。←ハードがやる
・割込みハンドラの頭でレジスタを保存し、割込みハンドラで割込み復帰命令を実行する前にレジスタを復旧する。対象のレジスタは必要なものに限定できる。割込み要因はクリアしておく。←ソフトでやる
・割込み復帰命令を実行するとモードレジスタとプログラムカウンタが元に戻る。←ハードがやる

一応分かってはいましたが曖昧なところもあったので再確認できてよかったです。

カーネル自身はプロセスじゃないんですね。今まで考えたこともなかったですが。

PPNの値はだれがいつセットするのかは今のところ分かりません。本資料を先まで読み進めれば分かるのかな。

The first process

プロセスは、プログラムに他のプロセスから読み書きできない占有のメモリやアドレス空間を提供する。これにより1つのプログラムのバグが他に悪影響を与えないようにできる。

Paging hardware

・x86のページングハードウェアはvirtual address(x86の命令が使用するアドレス)をphysical address(プロセッサがメインメモリに送る)に変換する。
・x86のページテーブルには2の20乗のエントリー(PTE)がある。
・PTEには20ビットのphysical page number(PPN)と12ビットのフラグがある。
・virtual addressの上位10ビットでpage directory内のエントリを指し、その中のPPNが1つのpage tableを指し、virtual addressの中位10ビットでpage table内のエントリを指し、その中のPPNとvirtual addressの下位12ビットでphysical addressを決める。どちらかのエントリが存在しなければページングハードウェアはfaultを発生する。
・4096(2の12乗)バイトの塊がページ。
・page directoryとpage tableには12ビットのフラグ領域があり、どちらにもPTE_P(PTEが存在するか)、PTE_W(ページに書き込みできるか)、PTE_U(ユーザープログラムがページを使って良いか、だめならカーネルのみ使える)のビットがある。他にWT(ライトスルー)、CD(キャッシュディスエーブル)、A(アクセスされた)、D(ダーティ)、AVL(システムが使用可)もある。
・physical memoryはDRAM内のストレージセルである。1バイト毎にアドレスがある。