本日10/23発売の「絵で見てわかるLinuxカーネルの仕組み」という本を自分含め6人で書きましたので、宣伝します。
本書はIT技術のさまざまな分野について視覚的に理解するための翔泳社の「絵で見てわかる」シリーズの中の一冊です。
このシリーズは、これまでに「ITインフラの仕組み」、「Webアプリ開発の仕組み」、「マイクロサービスの仕組み」など、さまざまなものを扱ってきました。本書は「Linuxカーネル*1の仕組み」を扱います。Linuxカーネルを絵から理解するというコンセプトの本です。
Linuxカーネルは Red Hat Enterprise LinuxやUbuntuといったLinuxディストリビューションの核(カーネル)となるソフトウェアです。いかなるLinuxディストリビューションもLinuxカーネル無しでは動きません。Linuxカーネルはまたスマートフォンのオペレーティングシステムとして知られるAndroidのカーネルでもあります。いかなるAndroid端末もLinuxカーネル無しでは動きません。本書はそんなソフトウェアを題材としています。
想定読者は、本書の前書きから抜粋すると「Linuxをある程度は使えるようになって、次のステップとしてカーネルについて学習したいと思われた方」です。もう少し言葉を足すと、「Linuxのコマンドは普段から実行しているけれどもカーネルは聞いたことがある」、あるいは「Linuxカーネルの概念は知っているが詳しくは知らない」、というくらいの人です。これに加えて、「Linuxカーネルの役割をある程度知っているけれども、ここ5年、10年の間に追加された機能についてはよく知らないな」といった人も対象となるでしょう。なぜならば、本書は個々の機能について深掘りはしないものの、扱う範囲は広く、かつ、最新機能もたくさん紹介しているからです。
本書の著者陣は全員が業務で日常的にLinuxカーネルを扱っているため、本書はLinuxカーネルの内部を知る人々が生きた知識をもとに書いたものです。書籍内で紹介されている様々な機能がどういうものかに加えて、著者陣がそれらについてどのような見方をしているかという観点で読むのも面白いかもしれません。
本書の特長の一つに、マシンリソースが限られる組み込み機器でよく使われる機能についての説明が手厚いことが挙げられます。著者陣のなかに、組み込みLinuxの分野に明るい人が多いことがその理由でしょう。わたしはLinuxカーネルについてはそれなりに詳しいですが、サーバOSとしてのLinux以外はほとんど知らなかったので、本書の中には新たな発見がたくさんありました。
本書の目次は以下の通りです。
第1章 Linuxカーネルの基本 第2章 プロセススケジューラ 第3章 メモリ管理 第4章 ファイルシステム 第5章 ブロックI/O 第6章 デバイスマッパ 第7章 LVM 第8章 ネットワーク 第9章 セキュリティ 第10章 ハイパーバイザと仮想化 第11章 コンテナ型仮想化 第12章 トラブルシューティング/デバッグ概要
第1章では本書を読むにあたっての基礎的な知識に加えて、カーネルのバージョンはどういう意味を持つか、どのようにビルドオプションを設定するのか、どのようにカーネルパラメタを設定するかといった様々な知識を学べます。
第2章から第5章、第8章は世間のOSカーネルについての本でよく扱われる、カーネルの基本機能を紹介しています。これまで書籍ではあまり触れられてこなかったプロセススケジューラの1つであるデッドラインスケジューラを紹介したり、Linuxカーネルの比較的新しい機能であるXDPというネットワーク機能を紹介していたりといった特色があります。
第6章、第7章は第5章の延長戦のようなものです。ディスクに1対1で直接対応するブロックデバイスとは異なり、スナップショットをとる、試験のために仮想的にエラーを発生させる、といった高度な機能を持つブロックデバイスを紹介しています。
第9章が扱うセキュリティは、セキュリティ脆弱性を突いた攻撃が日々世間を賑わせている現代では注目のトピックといえるでしょう。セキュリティ技術についてある程度詳しい人でも、OSカーネルのレイヤでのセキュリティ技術については、知っている人はそれほど多くないのではないでしょうか。
第10章、第11章はKVMなどによる仮想マシン、Dockerコンテナ、コンテナオーケストレーションKubernetesといった文脈で注目を集めている仮想化、コンテナ技術について説明しています。これらの技術とは切っても切り離せない関係である、リソース管理のためのcgroup,namespaceという機能も説明しています。
締めの第12章では、実務でLinuxカーネルを扱っている筆者陣が使っている、カーネルレイヤで実現するトラブルシューティング、デバッグ技法を紹介しています。「カーネルについての本なのでカーネル開発者用の機能なのでは?」と思われるかもしれませんが、そうではありません。ここで紹介するのは、カーネルの機能を使って実現するユーザ空間プログラム用の機能の紹介です。とっつきにくいですが、覚えてしまえば大きな力になってくれるでしょう。
上記の説明を見て興味が出た方はぜひ手に取ってご覧ください。おわり。
*1:正式名称は"Linux"ですが、ここでは"Linuxディストリビューション"と区別するために"Linuxカーネル"と明に書いています