詳解 Linux カーネル第 3 版
ショウカイ リナックス カーネル
Linux 2.6 対応
- 著者:
- ダニエル・P.ボベット / マルコ・セサティ(ボベット, ダニエル・P. / セサティ, マルコ)
- 出版社:
- オーム社
- 出版日:
- 2007年02月
- ISBN:
- 9784873113135
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
本書は Linux のソースコードの恩恵を最大限に活かすための羅針盤です。複雑で難解な Linux カーネルの仕組みを、基礎からていねいに説明。Linux カーネルの基本機能を網羅し、ハードウェア依存部分についても踏み込んだ解説がなされています。第 3 版では、Linux2.6 を対象として改訂を行い、特にメモリとプロセススケジューリングについて大幅な変更と加筆がなされています。Linux のソースコードを理解するためのガイドブックとして、オペレーティングシステムの本格的な解説書として最適の 1 冊です。
技書の森解説
Linux カーネルがプロセスをどう切り替え、メモリをどう割り当て、ファイルへの読み書きをどう処理しているのかを、ソースコードの構造に沿って追いかける解説書です。『詳解 Linux カーネル 第 3 版』 (Daniel P. Bovet / Marco Cesati 著、高橋浩和 監訳、杉田由美子 / 清水正明 / 高杉昌督 / 平松雅巳 / 安井隆宏 訳、オライリー・ジャパン発行、オーム社発売、2007 年 2 月刊) は、原書 Understanding the Linux Kernel, 3rd Edition の日本語版で、版元は「Linux のソースコードの恩恵を最大限に活かすための羅針盤」と位置づけています。第 3 版は Linux 2.6 を対象に改訂され、版元紹介文によれば特にメモリとプロセススケジューリングについて大幅な変更と加筆が行われています。
全 20 章と付録 2 本の構成、メモリアドレッシングから Ext3 まで
構成は 1 章から 20 章までの全 20 章に、付録 A「システムの起動」と付録 B「モジュール」、参考文献、ソースコード索引が付きます。1 章「概要」で Linux とほかの UNIX 系カーネルの関係、ハードウェア依存、オペレーティングシステムの基本概念を押さえた後、2 章「メモリアドレッシング」でハードウェアのセグメント機構とページング機構、Linux のページング機構を扱います。3 章「プロセス」から 7 章「プロセススケジューリング」までは、プロセスディスクリプタとプロセス切り替え、割り込みと例外、カーネルの同期処理、時間管理、スケジューリングアルゴリズムと、カーネルが CPU 時間を配る仕組みが主題です。8 章「メモリ管理」と 9 章「プロセスアドレス空間」でページフレームの管理やスラブアロケータ、ページフォルト例外ハンドラを追い、10 章「システムコール」と 11 章「シグナル」を経て、12 章以降は仮想ファイルシステム (VFS)、I/O デバイスの管理、ブロック型デバイスドライバ、ページキャッシュ、ファイルアクセス、ページフレームの回収、Ext2、Ext3 ファイルシステム、プロセス間通信、プログラムの実行へと進みます。目次には scheduler_tick () 関数や schedule () 関数のように関数名がそのまま項目として並び、ソースコードの単位で読み進める本であることが分かります。
スケジューラとページキャッシュを実装から理解する技術背景
OS の入門書はプロセスや仮想メモリの概念を図で説明しますが、概念を知っているだけでは、負荷の高いサーバーで応答が遅れる理由や、メモリが足りているように見えてスワップが発生する理由までは説明できません。答えはスケジューラがどの基準で実行キューからプロセスを選ぶか、ページキャッシュがどのタイミングで汚れたページをディスクへ書き込むか、ページフレーム回収アルゴリズムがどのページを対象に選ぶかといった実装の側にあり、本書はそれらを担当する関数とデータ構造の単位で説明します。カーネルのコードが読みにくい理由は三つあります。セグメント機構やページング機構、割り込みといったハードウェアに依存する部分がソフトウェアの論理と密接に絡むこと、割り込みや複数 CPU による同時実行を前提にした同期処理が至るところに現れること、そしてプロセスやファイルという抽象が、プロセスディスクリプタや i ノード、d エントリといった複数のデータ構造の組み合わせとして実装されていることです。本書は 2 章のメモリアドレッシングでハードウェア側の仕組みを先に固め、5 章の同期処理を挟んでから各サブシステムへ進む順序を採っています。プロセスとスレッドの違い を教科書で学んだ人が 3.1 節「プロセス、軽量プロセス、スレッド」を読むと、ユーザー空間の概念とカーネル内部の実装単位がどう対応するのかが具体的に見えてきます。
C 言語と x86 の前提知識、2007 年刊行という時点の位置づけ
前提として、C 言語でポインタとデータ構造を読み書きできること、プロセス、仮想記憶、ファイルシステムといった OS の基本概念を入門書の水準で知っていることが必要です。目次には int $0x80 命令や sysenter 命令によるシステムコール発行、タスク状態セグメント、FPU レジスタ、MMX レジスタ、XMM レジスタの退避回復といった項目が並び、参考文献には PC アーキテクチャに関する本と Intel マイクロプロセッサのテクニカルマニュアルが挙げられているので、x86 系プロセッサの動作に馴染みがあるほど読み進めやすくなります。プログラムのメモリレイアウト を理解していれば、9 章のプロセスアドレス空間や 20 章のプログラムセグメントとプロセスメモリリージョンの説明が、自分の書いたプログラムがどう配置されるかという実感と結びつきます。また本書は 2007 年 2 月の刊行で、対象は刊行時点の Linux 2.6 であり、それ以降のカーネルで加わった変更は扱っていません。個々の関数名やデータ構造を刊行後のソースへそのまま当てはめるのではなく、設計の骨格と、なぜその構造が必要なのかという理由づけを動く実装に沿って確認する教材として位置づけるのが適切です。版元ページには第 1 刷の正誤表も掲載されています。
カーネル解説書として元が取れる読者と向かない使い方
元が取れるのは、Linux 上で動くシステムの性能問題や障害を切り分ける立場にいて、ユーザー空間から観測した現象をカーネルの動作で説明できるようになりたい人です。ページキャッシュとページフレームの回収、I/O スケジューラ、プロセススケジューリングの章を読み終えると、メモリ使用量やディスク I/O の数値を見たときに、その裏でカーネルが何を選択しているかを語れるようになります。カーネルモジュールやデバイスドライバに手を入れる人、大学でオペレーティングシステムを学び終えて実装で裏づけたい人にも、20 章と付録が長期のリファレンスとして機能します。一方、Linux のコマンド操作やサーバー構築を学びたい段階の人には向きません。そうした目的には OS / 低レイヤー本の選び方 にまとめた入門寄りの本から始め、ソースを読む必要が生じた段階で本書に戻るのが順序として無理がありません。
大部で難度も高い本ですが、Linux カーネルの仕組みを章ごとに切り分けて、関数とデータ構造の単位で確認できる日本語の解説書として、腰を据えて取り組む価値のある一冊です。通読を急がず、自分が追いかけたい現象に関係する章から入る読み方でも、投じた時間は十分に回収できます。
言及した記事 (18 件)
SREやクラウドエンジニアが読むと良さげな本まとめ
♡ 1246Linux, AWS, Cloud, インフラ, SRE低レイヤーを学ぶための技術書をまとめてみる
♡ 1239Linux, UNIX, OS, 低レイヤWebエンジニアが知るべき低レイヤーの技術とその学習方法
♡ 1189VM, CPU, メモリ, OS, コンピュータアーキテクチャLinux シグナルの基本と仕組み (カーネル v5.5 時点)
♡ 286Linux, kernel, まとめ, コードリーディング, signalLinux スケジューラーのコア実装とシステムコール
♡ 268Linux, ソースコードリーディング, スケジューラC言語で学ぶソケットAPI入門 第1回 サーバ編
♡ 236C, Linux, Network, TCP, ソケットNode.jsの実行モデルを理解するために必要な前提知識を説明していく
♡ 116Linux, Node.js, 新人プログラマ応援Linux メモリ断片化 (外部フラグメンテーション) の概要と解消方法
♡ 89Linux, kernel, メモリ管理新卒から2年間で読んだお勧め本
♡ 51Java, Ruby, Python, C, DockerC言語で学ぶソケットAPI入門 第3回 TCPサーバ/クライアント編 #1
♡ 30C, Linux, Network, TCP, ソケット
この本に興味がある方におすすめ
関連する本
関連記事
Linux 本ガイド - コマンドライン / しくみ / 性能の 3 層で選ぶ技術書
Linux を学ぶ技術書の選び方を 3 層 (コマンドラインの操作 → カーネルのしくみ → 性能と運用) で整理。新しい Linux の教科書や [試して理解] Linux のしくみなどの定番書の使い分けと、学ぶ順番を解説します。
技術書の知識を定着させる間隔反復法 - 読んだのに忘れる問題を解決する
技術書を読んでも内容を忘れてしまう原因を認知科学の観点から分析し、間隔反復法を使って知識を長期記憶に定着させる具体的な方法を紹介します。
技術書を読む順番の戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで、1 冊では届かない理解の深さと広さに達する方法を解説します。