「[試して理解]Linuxのしくみ【増補改訂版】」を紹介
コマンドの使い方から一歩進み、Linuxの内部で何が起きているのかを実験と図解で確かめる一冊です。
- 書名
- [試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】
- 著者
- 武内 覚
- 出版社
- 技術評論社
- 発売日
- 2022年10月17日
- ページ数
- 336ページ
- ISBN
- 978-4-297-13148-7
書誌情報と目次は技術評論社の書籍情報を参照しています。
Linuxでファイルを操作し、プロセスを確認し、Webサーバーを起動できるようになっても、「そのコマンドを実行したとき、OSの内部では何が起きているのか」までは見えにくいものです。CPUは複数のプログラムをどのように切り替え、メモリはどのように割り当てられ、書き込んだデータはいつストレージへ届くのでしょうか。
『[試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】』は、こうしたOSの働きを、実験プログラムの結果やグラフ、図解を通じて理解するための書籍です。Linuxを単に操作する対象としてではなく、観察し、測定し、仕組みを確かめられるシステムとして学べます。
コマンドを使えるだけでは見えないもの
Linuxの入門では、ディレクトリ移動、ファイル操作、権限、パッケージ管理などから学ぶのが一般的です。これらはLinuxを利用するために必要ですが、システムの性能や障害を考える段階になると、コマンドの手順だけでは説明できない疑問が増えてきます。
- 同時に起動したプロセスへCPU時間はどう割り当てられるのか
- 十分なメモリがあるのに、なぜ空き容量が少なく見えるのか
- ファイルへ書き込んだデータは、いつストレージへ保存されるのか
- ランダムアクセスとシーケンシャルアクセスで速度が変わるのはなぜか
- 仮想マシンとコンテナは、Linuxからどのように見えているのか
本書は、用語の定義だけを並べるのではなく、負荷を変えた実験や計測結果を示しながら、観察した現象をOSの機能に結び付けます。「こう動くと書いてある」から一歩進み、「実際にこう見えるから、この仕組みが働いている」と考えられるようになるのが大きな特徴です。
この本の特徴
実験結果からOSの動作を理解する
プロセス数を増やす、メモリアクセスの方法を変える、ストレージへの読み書き方を変えるなど、条件を変えた実験によってLinuxの挙動を観察します。結果がグラフで示されるため、スケジューリングやキャッシュの効果といった目に見えない働きを、数値の変化として捉えられます。
図解とフルカラーで関係を追いやすい
OSの説明には、プロセス、仮想アドレス、物理メモリ、ページキャッシュ、ストレージなど複数の要素が登場します。増補改訂版では全編がフルカラーになり、処理の流れや各層の関係を図から追いやすくなっています。文章だけでは混同しやすい概念を整理する助けになります。
基本機能から仮想化・コンテナまでつながる
前半でシステムコール、プロセス、スケジューラ、メモリといった土台を学び、後半でファイルシステム、記憶階層、ブロック層へ進みます。そのうえで仮想マシン、コンテナ、cgroupを扱うため、個々の技術を独立した用語ではなく、Linuxの既存機能を利用した仕組みとして理解できます。
実験コードがGoとPythonで書かれている
初版の実験コードはC言語でしたが、増補改訂版ではGoとPythonへ更新されています。コードを完全に読み解けなくても実験結果から学べますが、自分の環境で実行し、条件を変えて確かめることで、本書の「試して理解する」という学び方をより活かせます。
どのような内容を学べるのか
1. カーネル、システムコール、プロセス
アプリケーションは、ハードウェアを直接自由に操作するのではなく、システムコールを通じてカーネルへ処理を依頼します。本書は、プログラムとプロセスの違い、ユーザーモードとカーネルの役割、ライブラリとシステムコールの関係から説明を始めます。
続いて、fork() と execve() によるプロセス生成、親子関係、状態、終了、シグナル、ジョブ管理、デーモンなどを扱います。普段使うシェルの背後で、プロセスがどのように作られ、管理されているのかを整理できます。
2. CPU時間を配るプロセススケジューラ
実行可能なプロセスがCPU数より多い場合、Linuxは短い時間で実行対象を切り替えます。本書では、経過時間とCPU使用時間の違い、論理CPUがひとつの場合と複数の場合、タイムスライス、コンテキストスイッチなどを実験から確認します。
time コマンドなどで表示されるreal、user、sysの関係や、並列化すれば常に速くなるとは限らない理由を理解する土台にもなります。アプリケーションのCPU使用率や処理時間を調べる際に、数字を正しく読むための知識です。
3. 仮想記憶とメモリ管理
各プロセスは仮想アドレス空間を持ち、カーネルはページテーブルを使って物理メモリとの対応を管理します。本書では、仮想記憶が解決する課題、mmap()、デマンドページング、メモリの回収、階層化されたページテーブルなどへ進みます。
プロセス生成を高速化するコピーオンライトや、プロセス間通信、排他制御、マルチプロセスとマルチスレッドも扱われます。アプリケーションから見えるメモリと、OSが実際に管理するメモリが同じではないことを具体的に理解できます。
4. デバイス、ファイルシステム、記憶階層
Linuxではデバイスもファイルとして扱われます。本書はキャラクタデバイスとブロックデバイス、デバイスドライバ、割り込みなどを説明したあと、ファイルシステムの整合性、ジャーナリング、コピーオンライト、Btrfsの機能へ進みます。
さらに、CPUキャッシュ、ページキャッシュ、バッファキャッシュ、スワップなど、速度と容量の異なる記憶装置を階層として利用する仕組みを学びます。「メモリ使用量が増えた」「書き込みがすぐ終わった」といった観察結果を、キャッシュの働きも含めて考えられるようになります。
5. ストレージ性能とブロック層
HDDとSSDではデータへアクセスする仕組みが異なり、同じ容量の読み書きでもアクセスパターンによって性能が大きく変わります。本書ではブロック層の役割、性能指標、測定ツールのfioなどを取り上げ、単一プロセスと複数プロセスによるI/Oの違いを確認します。
ベンチマークの数字だけを見るのではなく、何を測り、どの層が結果に影響しているのかを考える視点が得られます。サーバーやデータベースの性能調査にもつながるテーマです。
6. 仮想マシン、コンテナ、cgroup
仮想化の章ではQEMUとKVMを題材に、ゲストOSがホストOSからどのように見えるのか、CPU、メモリ、ストレージI/Oがどのように扱われるのかを説明します。仮想マシンが完全に別世界で動いているのではなく、ホスト側のプロセスや資源管理と関係していることが分かります。
コンテナについては、仮想マシンとの違い、namespaceによる分離、セキュリティ上の注意点を扱います。続くcgroupではCPU時間などのリソースを制御する仕組みを学びます。Dockerなどの操作方法を覚える本ではありませんが、その土台となるLinuxカーネル機能を理解するのに役立ちます。
増補改訂版で追加・変更されたポイント
増補改訂版では、旧版の内容を現在の学習環境に合わせて更新し、扱う範囲も広げています。技術評論社の公式情報では、主に次の変更点が案内されています。
- 紙面を全面フルカラー化し、グラフや図解を見やすくした
- 実験用のソースコードをC言語からGoとPythonへ更新した
- 仮想化機能、コンテナ、cgroupなどの章を追加した
- プロセスやストレージなど既存テーマの説明を改訂した
クラウド環境やコンテナを日常的に使う現在では、Linuxの基本機能と仮想化技術を一続きに学べる意味は大きいでしょう。旧版を持っている場合も、新しい章とカラー化、実験環境の変更に価値を感じるかが買い替えの判断材料になります。
おすすめしたい人
- Linuxの基本コマンドを覚え、その内部動作にも興味が出てきた人
- OSの講義で学んだ概念を実際の挙動と結び付けたい学生
- サーバーのCPU、メモリ、I/Oを調査する機会があるエンジニア
- 仮想マシンとコンテナの違いを仕組みから理解したい人
- 性能測定の結果を根拠を持って考察できるようになりたい人
- 図解だけでなく、自分で実験しながらLinuxを学びたい人
購入前に確認したいこと
Linuxをまったく使ったことがない人には難しい
本書はOSの仕組みを基礎から説明しますが、ターミナルの開き方や基本コマンドを一つずつ練習する入門書ではありません。ファイルやプロセスという用語を知り、Linux環境でコマンドを実行した経験があるほうが、実験の目的を理解しやすくなります。
初めてLinuxに触れる場合は、まず仮想マシンやWSLなどで環境を用意し、cd、ls、ps、top、freeといった基本操作を試してから読むとよいでしょう。
カーネルのソースコードを読み解く本ではない
Linuxカーネルの機能を幅広く扱いますが、カーネルソースの関数を順番に追ったり、デバイスドライバを開発したりすることが中心ではありません。実験で観察できる挙動から、OSとハードウェアの概念を理解することに重点があります。
すべての実験を再現するには環境が必要
読むだけでも図とグラフから理解できますが、本書の良さを最大限に活かすにはLinux環境でコードやコマンドを実行する必要があります。仮想化支援機能やストレージ性能に関する実験では、利用するPC、仮想環境、クラウド環境によって結果や実行可否が変わることがあります。
おすすめの読み進め方
- 最初に全体の地図を作る:目次を眺め、プロセス、メモリ、ファイル、ストレージ、仮想化がどの順番でつながるかを確認します。
- 実験前に結果を予想する:条件を変えるとグラフや処理時間がどう変わるか考えてから結果を読みます。
- 図と用語を往復する:分からない用語が出たら、図のどの要素を指しているのか確かめます。
- 自分の環境で小さく試す:いきなり全実験を再現せず、実行しやすいコマンドや短いコードから始めます。
- 観測値と環境を記録する:CPU数、メモリ量、実行時間などを記録し、紙面との差を比較します。
- 実際の運用へ結び付ける:普段見るCPU使用率やメモリ統計、I/O待ちを、本書の仕組みから説明してみます。
すべての章を一度で覚える必要はありません。最初はプロセス、スケジューラ、メモリまで読み、Linuxを使う中でファイルシステムやI/Oの疑問が出たときに後半へ戻る方法も有効です。仮想マシンやコンテナを扱う人は、第10章以降を読んだあと、前半のプロセス管理とメモリ管理を再読すると関係が見えやすくなります。
学んだ知識をどう活かせるか
OSの仕組みを理解すると、監視画面に表示された数値を単なる良し悪しで判断せず、その背景を考えられるようになります。CPU使用率が高いのかI/O待ちなのか、メモリがアプリケーションに使われているのかキャッシュなのか、といった切り分けの土台になります。
アプリケーション開発でも、プロセスとスレッドの選択、ファイルへの書き込み、並列処理、メモリ使用量などを考える場面で役立ちます。また、コンテナの分離やリソース制限をnamespaceとcgroupから理解することで、設定値を暗記するだけでなく、できることと限界を判断しやすくなります。
まとめ
『[試して理解]Linuxのしくみ【増補改訂版】』は、Linuxの内部動作を実験、グラフ、図解によって学べる書籍です。システムコールやプロセスから始まり、スケジューラ、メモリ、ファイルシステム、ストレージ、仮想マシン、コンテナまで、現代のシステムを支える仕組みを一冊で見渡せます。
Linuxの操作方法を覚える本ではなく、操作した結果を説明できるようになるための本です。コマンドは使えるもののOS内部のイメージが曖昧な人や、性能や障害を根拠を持って調べられるようになりたい人にとって、知識と実際の挙動を結び付けるきっかけになる一冊です。
書籍の詳細を確認する
価格や在庫、電子書籍版の有無はAmazonの商品ページでご確認ください。
Amazonで見る →当サイトはAmazonアソシエイト・プログラムの参加者です。