目次
イントロダクション
コンピュータが数を数えるしくみとC言語への応用
- 0.1 コンピュータが数を数えるしくみ
- 0.2 C言語の基礎
- 0.3 C言語の構造とフローチャート
第1部 コンピュータの基礎を理解する
第1章 ハードウェアの基礎
- 1.1 ハードウェアで何ができるのか
- 1.2 ハードウェアに計算させる方法
- 1.3 計算に必要なハードウェア
- 1.4 外部記憶装置のしくみ
第2章 ソフトウェアの基礎
- 2.1 チューリングマシン――問題解決の手順
- 2.2 OSの主な役割
- 2.3 プロセスとは何か
- 2.4 カーネルとは何か
- 2.5 同期処理の必要性とその実現方法
- 2.6 デッドロックの発生要因とその回避方法
- 2.7 スケジューリング――プロセスの実行を制御する手法
第3章 メモリ管理のしくみ
- 3.1 メモリの種類と用途
- 3.2 セクションとメモリの関係
- 3.3 メモリを効率的に利用する手法
第4章 ファイルシステムのしくみ
- 4.1 ファイル情報――属性とデータの管理
- 4.2 ファイル操作――汎用的なインターフェイス
- 4.3 通常ファイルと特殊ファイル
- 4.4 シーケンシャルアクセスとランダムアクセス
- 4.5 ファイルシステムの階層構造
- 4.6 ファイル名――記録データの識別方法
- 4.7 ディレクトリ――論理的グループによるデータ管理
- 4.8 ブロック単位でのデータ管理方法
第5章 入出力のしくみ
- 5.1 入出力デバイスの種類
- 5.2 入出力ソフトウェアの階層構造
第2部 x86系PCのアーキテクチャを理解する
第6章 コンピュータの基本構成
- 6.1 CPU,メモリ,外部記憶装置の関係
- 6.2 電源投入時に行われる処理
- 6.3 入出力装置(ポート)の役割
- 6.4 割り込みコントローラの役割
第7章 CPUの基本機能
- 7.1 8086のレジスタ
- 7.2 80386のレジスタ
- 7.3 外部インターフェイス――CPUと周辺機器の接続
第8章 CPU命令の使い方
- 8.1 CPU命令によるプログラムの作成手順
- 8.2 CPU命令とその使用例
- 8.3 リアルモードとプロテクトモードの違い
第9章 アセンブラ(NASM)の使い方
- 9.1 アセンブルの手順
- 9.2 擬似命令とその使用例
- 9.3 プリプロセッサとその使用例
第10章 周辺機器の制御方法
- 10.1 メモリマップ――メモリの配置を確認する
- 10.2 I/Oマップ――接続されている周辺機器を確認する
- 10.3 ビデオ出力――VGAハードウェアを制御する方法
- 10.4 キーボードコントローラ(8042)の機能と使い方
- 10.5 割り込みコントローラ(8259)の機能と使い方
- 10.6 RTC(リアルタイムクロック)の機能と使い方
- 10.7 タイマー(8254)の機能と使い方
- 10.8 数値演算コプロセッサの機能と使い方
- 10.9 大容量記憶装置――複数のファイルシステムを管理する
第11章 BIOSの役割
- 11.1 BIOSが提供するサービス
- 11.2 ビデオサービスとその使用例
- 11.3 ディスクサービスとその使用例
- 11.4 システムサービスとその使用例
- 11.5 キーボードサービスとその使用例
- 11.6 その他のサービス
- 11.7 ACPIによる電源管理と制御例
第3部 OSを実装する
第12章 開発環境を構築する
- 12.1 作業ディレクトリを作成する
- 12.2 アセンブラの使用環境を整える
- 12.3 ソースファイルを作成する
- 12.4 アセンブルを行う
- 12.5 短いコマンドに置き換える
- 12.6 マウス操作で開発環境を開く
- 12.7 動作確認を行う
第13章 アセンブラによる制御構文と関数の記述例
- 13.1 if文を記述する
- 13.2 switch~case文を記述する
- 13.3 do~while文を記述する
- 13.4 for文を記述する
- 13.5 関数を作成する
第14章 リアルモードでの基本動作を実装する
- 14.1 「何もしない」ブートプログラムを作成する
- 14.2 BIOSパラメータブロックの領域を確保する
- 14.3 ブートプログラム内にデータを保存する
- 14.4 文字を表示する
- 14.5 文字列を表示する
- 14.6 数値を表示する
- 14.7 コンピュータを再起動する
- 14.8 セクタを読み出す
- 14.9 セクタ読み出し関数を作成する
- 14.10 ドライブパラメータを取得する
- 14.11 BIOSのフォントデータを取得する
- 14.12 メモリの実装状況を確認する
- 14.13 KBC(キーボードコントローラ)を制御する
- 14.14 A20ゲートを有効化する
- 14.15 キーボードLEDを制御する
- 14.16 カーネルをロードする
- 14.17 ビデオモードを変更する
第15章 プロテクトモードへの移行を実現する
- 15.1 セグメントディスクリプタを作成する
- 15.2 割り込みディスクリプタテーブルを作成する
- 15.3 プロテクトモードへ移行する
- 15.4 カーネルを起動する
第16章 プロテクトモードでの画面出力を実現する
- 16.1 文字の表示位置からVRAMアドレスを計算する
- 16.2 プレーンを選択する
- 16.3 表示色とプレーンを制御する
- 16.4 文字を描画する
- 16.5 フォントを一覧表示する
- 16.6 文字列を描画する
- 16.7 カラーバーを表示する
- 16.8 点を描画する
- 16.9 線を描画する
- 16.10 矩形を描画する
第17章 現在時刻を表示する
- 17.1 現在時刻を取得する(RTCの読み込み)
- 17.2 数値を文字に変換する
- 17.3 現在時刻を表示する
- 17.4 RTCへのアクセスタイミングを制御する
第18章 プロテクトモードでの割り込みを実現する
- 18.1 デフォルトの割り込み処理を作成する
- 18.2 割り込みゲートディスクリプタを作成する
- 18.3 ゼロ除算割り込みを実装する
- 18.4 割り込みと例外の違いを確認する
- 18.5 割り込みコントローラを再設定する
- 18.6 RTC割り込みを実装する
- 18.7 デフォルトの割り込み処理を修正する
- 18.8 キーボード割り込みを実装する
- 18.9 タイマー割り込みを実装する
第19章 マルチタスクを実現する
- 19.1 タスクの生成とTSSの関係を確認する
- 19.2 タスクごとのメモリ空間を定義する
- 19.3 協調型マルチタスクの動作を確認する
- 19.4 プリエンプティブなマルチタスクを実現する
第20章 特権状態を管理する
- 20.1 タスクの特権レベルを制限する
- 20.2 コールゲートを実装する
- 20.3 トラップゲートを実装する
- 20.4 システムコールを実装する
- 20.5 同期処理を実現する
第21章 小数演算を行う
- 21.1 FPUの動作を確認する
- 21.2 複数のタスクで小数演算を行う
- 21.3 バラ曲線を描画する
第22章 ページング機能を利用する
- 22.1 ページ変換テーブルを作成する
- 22.2 ページフォルト例外の動作を確認する
第23章 コードを共有する
- 23.1 TSSを作成する
- 23.2 TSSをGDTに登録する
- 23.3 タスクごとのパラメータを設定する
- 23.4 タスクごとのページ変換テーブルを作成する
- 23.5 タイマー処理を修正する
第24章 ファイルシステムを利用する
- 24.1 BPBを作成する
- 24.2 ディレクトリエントリを確認する
- 24.3 メディアをフォーマットする
第25章 モード移行を実現する
- 25.1 リアルモードへ移行する
- 25.2 プロテクトモードへ復帰する
- 25.3 リアルモードへの移行関数を呼び出す
第26章 ファイルの読み出しを実現する
- 26.1 起動時の割り込み設定を復元する
- 26.2 ファイルを検索する
第27章 PCの電源を切る
- 27.1 電断契機を検出する
- 27.2 電断処理を実装する
付録
仮想環境を構築する方法
- A.1 QEMUの利用方法
- A.2 Bochsの利用方法
実機での確認方法
- B.1 Rufusの利用方法