Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識 読みました

著者の武内さんより「[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識」を献本いただきました。ありがとうございますm( )m

f:id:masami256:20180218160317j:plain:w250

武内さんはQiitaなどでもわかりやすいカーネルの解説記事を書かれているので、記事を読んだことが有る方も多いかと思います。そして、今回「試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識」というOS・ハードウェアのしくみを手を動かして学ぶコンセプトの本を書かれました。

gihyo.jp

本書の「実験と図解で学ぶOSとハードウェアの基礎知識」というコンセプトはOSの解説本にしては珍しいと思います。しかし、何かを学ぶ上で実際に手を動かしたほうが勉強になるということを考えるとこのコンセプトは良いですよね。 また、図解の部分も丁寧に解説されています。第5章の仮想記憶、ページングの図解などはここまで細く説明されている文献はそうそうないと思います。もちろん5章だけでなく他の章も図が豊富に使われていて理解がはかどります。

章立ては1〜8章まであって、1章はコンピュータシステムの概要説明となり、以降の章に入る前の基礎知識を説明しています。2〜7章は基本的には他の章への依存は少ないので興味のあるところから読むというのも良いと思います。例えば、2章のプロセス生成では仮想記憶に関する知識も合ったほうがよく、仮想記憶の詳細は5章で解説しますという形になっています。 しかし、2章では仮想記憶の詳細がわからないくて理解できるようにプロセス管理についてを説明されているので、本を読み進めるために必要な前提知識といったハードルは低くなっています。

また、解説は本質的な内容の理解というところに注力していると思います。たとえば、Linuxx86_64ならユーザモードとカーネルモードの2種類のモードがあって、ユーザモードは実行可能な命令が制限されるというのがありますよね。これもcpuの機能だとx86Ring Protection機能が出てきたししますが、そういった詳細な部分には踏み込まずにモード分けることの意味について説明されているといった感じです。細かい内容はともかく一番大事なところの知識を得ることができます。詳細を知りたくなったら、あとがきに書かれている書籍にチャレンジしましょう!

自分はLinuxカーネルもくもく会というネタをLinuxカーネルに絞ったもくもく会を開催しているのですが、そうするとカーネルに興味があるけどどこから手を付ければ良いのか???というような悩みを聞くことがよくあります。カーネルに興味があって、その中でも明確にXXXという機能に興味があるという場合は良いですが、そうでない場合も結構ありますよね。そういう人には本当にオススメできる本だと思います。OSカーネルの解説本はLinuxに限らず色々出版されていてどれも良い内容なんですが、最初にどれを読めばいいか?と聞かれると意外と困ったりします。本を読むための前提知識といったハードルは極力低くしつつ、丁寧に解説がされていて、なおかつ手を動かして実際に試せるというところで本書のようなコンセプトの本は入門に最適です。

本書ではLinuxカーネルのコードの説明はしていなくて、普通のアプリケーションプログラムを使って/作ってLinuxのしくみを実験するという方針を取られています。そのため、Linuxカーネルにも手を出したいという場合は、本書とお好きなLinuxカーネルの解説本やカーネルソースコードを用意して本書を読みながらカーネルの実装を調べるという進め方になっていくと思います。といっても、カーネルに慣れていない場合はこのような読み方はしないで、まずは本書をじっくり読み進め、次に本書とカーネルのソースを読み進めるのがオススメな流れです。

OSやハードウェアについて知りたい方は読んで実験してみましょう!