0から作るOS開発 Vol.4 カーネル編 割り込み ~IDTとPICとPIT~
価格: ¥0
C言語で0から作るOSを開発について説明していきます。このシリーズではカーネルの開発について説明しています。
今回は、割り込みについて見ていきます。割り込みベクターをIDTで作成してプロセッサーが割り込みを受け付け準備を行います。そして、外部デバイスからのIRQを統括するICであるPICについて制御を行います。また、昔にタイマーとして使用されていたPITの制御とタイマー割り込みハンドラーを作成して実際にタイマー割り込みが入ってくるところまで見ていきます。
補足でGDTをC言語で構築する場合についての説明もしていきます。
[目次]
前回までの内容
割り込み
例外(Exception)
割り込み要求(IRQ:InterRupt Request)
ソフトウェア割り込み
割り込みベクターと割り込みハンドラー
割り込みベクタと例外
IDT(Interrupt Descriptor Table)
IDTのディスクリプター
IDTR(Interrupt Descriptor Table Register)
IDTをC言語で構築する
ゲートディスクリプターからIDTを作る
IDTRの定義
ゲートディスクリプターをセットアップする
ゲートディスクリプターのフラグ定義
割り込みゲートディスクリプターのセットアップ
IDTRに読み込ませるデータを設定する
IDTをLIDT命令で読み込む
GDTをC言語で構築する
セグメントディスクリプタの定義
セグメントディスクリプターからGDTを作る
セグメントディスクリプターをセットアップする
グローバルディスクリプターのフラグ定義
セグメントディスクリプタのセットアップ
GDTRの定義
GDTRに読み込ませるデータを設定する
GDTをLGDT命令で読み込む
GRUBからカーネルをロードする場合について
PIC(Programmable Interrupt Controller)
割り込みとPIC
PICの特徴
8259Aのハードウェア
8259Aをカスケード接続する
ハードウェアが割り込みを要求したときの動作
ハードウェアが割り込みを要求
CPUはPICから割り込信号を受け付けます
割り込みハンドラを実行する
そして割り込みハンドラーが実行される
8259Aのレジスター構成
コマンドレジスター
ステータスレジスター
割り込み要求レジスター(IRR:Interrupt Request Register)
割り込み中レジスター(ISR)
割り込みマスクレジスター(IMR)
8259Aのポートアドレス
ポートにアクセスする関数を作る
OUT命令
IN命令
8259Aの初期化コマンド
初期化制御コマンドICW(Initialization Control Words)
ICW1(Intialization Control Word1)
ICW2(Initialization Control Word2)
ICW3(Initialization Control Word3)
ICW4(Initialization Control Word4)
(補足)ネストモードについて
(補足)AEOIについて
8259Aの操作コマンド
OCW1(Operation Command Word1)
OCW2(Operation Command Word2)
EOIコマンド
(補足)自動ローテーションコマンド
(補足)特定優先度ローテーション
OCW3(Operation Command Word3)
8259Aの内部レジスター読み込み
スベシャルマスクについて
ポールコマンドについて
PICの初期化コマンドをプログラムする
IRQの割り込みベクター
IRQをマスクする
PIT(Programmable Interval Timer)
8253のハードウェア
8253のタイマー
カウンター
CLK
OUT
GATE
チャンネル0
チャンネル1
チャンネル2
8253のモード
モード0(タイマー)
モード1(ワンショットタイマ)
モード2(パルス生成モード)
モード3(矩形波生成モード)
モード4(ソフトウェアトリガーモード)
モード5(ハードウェアトリガーモード)
8253のレジスター
カウンターレジスター
制御コマンド(Control Word)レジスター
PITのまとめ
割り込みハンドラー
割り込み・例外ハンドラーの実行
現在実行中のプログラムの特権レベルよりゲートディスクリプターの特権レベルの方が低い場合
現在実行中のプログラムの特権レベルとゲートディスクリプターの特権レベルが同じ場合
割り込み・例外時のスタック操作
エラーコード
割り込み・例外処理からの復帰
タイマー割り込みハンドラー
割り込みハンドラーの入り口
割り込みハンドラー(IRQ)の終了通知
割り込みハンドラーの出口
タイマー割り込みハンドラーのまとめ
タイマー割り込みハンドラーのIDTへの登録