新装改訂版 Linuxのブートプロセスをみる
3,080円 (2,800円+税)
関連サイト
本書の関連ページが用意されています。
内容紹介
本書はUNIX Magazineの2002年5月号から2003年6月号まで連載したものをまとめて書籍にした「Linuxのブートプロセスをみる」の改訂版です。
連載を開始した2002年5月から約10年が経ちました。そのときはカーネルバージョン2.4.17を使い、当時の主流だった32bit版のコードを解説しました。デスクトップPCのメモリもまだ4GBを超えていなかったと思います。
10年経った現在は、カーネルバージョンは2.6になり、デスクトップやノートPCは64bit CPUでメモリも4GB以上が普通になっています。かつてはメモリの大きさを気にしながらチューニングしていたカーネルパラメータも気にする必要がなくなりました。「古い知識では勘所がわからん!」と思い立ってバージョン2.6の64bitコードを読んでいたところに編集部から改訂版のお話をいただきました。
前書は周囲の予想に反して(嬉しいことですが)、細く長く購買者が続く本でした。さらに私の予想に反して、学生ではなく組み込みシステムの開発者の方々に多く読んでいただいていたようです。そして、編集部にもバージョン2.6の問い合わせが届いていたことにより、改訂版を書くことになりました。皆様のお声のおかげです。
本書は前書の内容をもとに、執筆開始当時の最新版だったバージョン3.3.4の64bit版を題材にして加筆修正しました。その他には、GRUB2ブートローダ、initrdの読み込み、QEMUを使ったデバッグ方法が前書の内容と異なります。
(「まえがき」より)
書誌情報
- 著者: 白崎博生
- 発行日: 2014-10-02 (紙書籍版発行日: 2014-10-02)
- 最終更新日: 2014-10-02
- バージョン: 1.0.0
- ページ数: 313ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: KADOKAWA/アスキー・メディアワークス
対象読者
著者について
白崎博生
1996年インターネットイニシアティブ入社。IIJサービスのバックエンドシステムの開発に携わる。2012年よりストラトスフィアにてSDN製品の研究開発をおこなっている。
目次
まえがき
第1章 ハードウェア
- 1.1 本書の目標
- 1.2 CPUの動作モード
- 1.2.1 リアルモード(real mode)
- 1.2.2 プロテクトモード(protect mode)
- 1.2.3 仮想8086モード(virtual 8086 mode)
- 1.2.4 64bitモード
- 1.2.5 互換モード
- 1.2.6 リアルモードからプロテクトモードへの移行
- 1.2.7 プロテクトモードからリアルモードへの移行
- 1.2.8 IA-32モードからIA-32eモードへの移行
- 1.2.9 IA-32eモードからIA-32モードへの移行
- 1.3 レジスタ
- 1.4 メモリ管理
- 1.4.1 セグメント
- 1.4.2 リアルモードのセグメント
- 1.4.3 プロテクトモードのセグメント
- 1.4.4 64bitモードのセグメント
- 1.4.5 ページング
- 1.4.6 ページングのアドレス変換
- 1.4.7 ページディレクトリとページテーブル
- 1.4.8 64bitモードのページング
- 1.4.9 TLB
- 1.5 保護機能
- 1.5.1 特権レベル
- 1.5.2 特権命令
- 1.5.3 セグメントへのアクセス
- 1.5.4 ページフレームへのアクセス
- 1.6 割込みと例外
- 1.6.1 割込みの発生源
- 1.6.2 例外の発生源
- 1.6.3 割込みと例外のベクタ
- 1.6.4 割込みのマスク
- 1.6.5 リアルモードの処理
- 1.6.6 プロテクトモードの処理
- 1.6.7 64bitモードの処理
- 1.7 外部機器との入出力
- 1.7.1 I/Oポートのアドレス
- 1.7.2 I/O命令
- 1.7.3 Memory Mapped I/O
- 1.7.4 I/Oアクセスの保護
- 1.8 PC/ATアーキテクチャ
- 1.8.1 予約されたアドレス領域
- 1.8.2 1MB以上のメモリ
- 1.8.3 A20
- 1.8.4 割込みコントローラ
- 1.8.5 BIOS
第2章 ブートローダからカーネル起動
- 2.1 ブートの概要
- 2.2 ブートローダ
- 2.2.1 いろいろなブートローダ
- 2.2.2 ソースコードについての注意
- 2.3 GRUB2のMBR
- 2.4 GRUB core
- 2.5 GRUB kernel
第3章 圧縮カーネルの解凍
- 3.1 解凍ルーチン概要
- 3.2 セグメント・レジスタの初期設定をおこなう
- 3.3 64bitモードに移行する
- 3.4 プログラムを移動する
- 3.5 圧縮カーネルの解凍
第4章 startup_64ルーチン
- 4.1 64bitカーネルのメモリマップ
- 4.1.1 第1段階のページテーブル
- 4.1.2 第2段階のページテーブル
- 4.1.3 Linuxのページテーブルの名称
- 4.2 startup_64コード解説
第5章 start_kernel()とsetup_arch()
- 5.1 x86_64_start_kernel()
- 5.2 start_kernel()
- 5.3 setup_arch()
- 5.4 init_memory_mapping()
- 5.5 early_memremap()
- 5.6 paging_init()
- 5.7 mm_init()
第6章 割込みの初期設定
- 6.1 3つの時計
- 6.1.1 リアルタイム・クロック
- 6.1.2 プログラマブル・インターバルタイマ
- 6.1.3 タイムスタンプ・カウンタ
- 6.2 trap_init()
- 6.3 init_IRQ()
- 6.4 timekeeping_init()
- 6.5 time_init()
- 6.6 setup_local_APIC()
- 6.7 setup_IO_APIC()
第7章 rest_init()とkernel_init()
- 7.1 rest_init()
- 7.2 cpu_idle()
- 7.3 kernel_init()
- 7.4 do_pre_smp_initcalls()とdo_basic_setup()
- 7.5 populate_rootfs()
- 7.6 kthreadd()
第8章 kernel_thread()
- 8.1 プロセスとスレッド
- 8.2 kernel_thread()
- 8.3 do_fork()
- 8.4 copy_process()
- 8.5 copy_thread()
- 8.6 alloc_pid()
- 8.7 kernel_thread_helper()
第9章 ユーザープロセスの起動とルートファイルシステムのマウント
- 9.1 linux_binfmt
- 9.2 kernel_execve()とsys_execve()
- 9.3 sys_execve()
- 9.4 copy_strings()
- 9.5 search_binary_handler()
- 9.6 load_script()
- 9.7 load_elf_binary()
- 9.8 kernel_execve()再び
- 9.9 インタープリタの起動
- 9.10 /initスクリプトの実行
第10章 QEMUを使ってカーネルデバッグ
- 10.1 ゲストOSの準備
- 10.2 GRUB2のデバッグ
- 10.3 gdbのコンパイル
- 10.4 Linuxカーネルのデバッグ