“[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識” という本を読んだのでメモ。
感想
本書は以下のような構成になっていて、概要の話からプロセス→メモリ→キャッシュ→ファイルシステム→ストレージとどんどん下の階層?に降りていくような進め方になっている。
- コンピュータシステムの概要
- ユーザモードで実現する機能
- プロセス管理
- プロセススケジューラ
- メモリ管理
- 記憶階層
- ファイルシステム
- ストレージデバイス
ただしくみを説明するだけではなく、本当にそういう挙動をするのか実験コードを書いて実際に試したり、Linuxのutil系コマンドを使いながら挙動を確認しながら進めているのが本当に参考になった。
プロセスのコンテキストスイッチが発生しているのを確かめたり、メモリのデマンドページングが実際に発生している様子を確認したり、最後にはHDDの物理的な特性を解説して実際にシーケンシャルアクセスやランダムアクセスのパフォーマンスを検証したりしていて、小学生のころの理科の実験のようなワクワク感を思い出した。
最初Twitterで話題になってたのを見ててちょっと気になってはいたのだけど、ぱっと見た感じ図ばっかりで薄そうだなーと思ってスルーしててゴメンナサイ。
実際読んだら図表がかなり多かったのだけど、そのおかげでかなり理解しやすくスラスラと読み進めることができて、約270ページ1冊丸々4時間くらいで読めた。 本当は解説されているコマンドを試したりしていると数日がかりになると思うが、全体を把握するためにさっと読む分には時間に対する理解のコスパが非常に良い本なのでぜひ読んでみて欲しい!
主要なコマンドリスト
以下本書で使用した便利なコマンドの備忘録。Ubuntuで確認してます。Macじゃ無理。
strace
: 引数に指定したプログラムの実行時に発行するシステムコールを表示してくれるコマンドsar
: 一定間隔ごとにCPUが%user
,%nice
,%system
,%iowait
,%steal
,%idle
のそれぞれどの割合で実行しているかを表示するldd
: 引数に指定したプログラムがどのようなライブラリをリンクしているのか表示readelf
: 引数に指定したプログラムの持つコードやデータのファイル内オフセット、サイズ、開始アドレスなどを表示する。 Executable and Linkable Format (ELF)を読み込むコマンドということらしいtaskset
: 引数に指定したプログラムを指定した論理CPUのみで実行させることができるコマンドtime
: 引数に指定したプログラムを実行するのにかかった時間を表示する。ユーザモードやカーネルモードでそれぞれどのくらいの時間実行したかがわかる。nice
: 引数に指定したプログラムの優先度を指定して実行するfree
: 使用中のメモリに関する情報を表示するswapon
: システムのスワップ領域の情報を表示するdd
: ファイルをコピーしたり変換したりするコマンド。デバイスファイルを対象にできるため本書では/dev/zero
を利用して1GBのからファイルをページキャッシュを使わずに作成するという用途で用いていた。dd if=/dev/zero of=testfile oflag=direct bs=1M count=1K
sysctl
: カーネルパラメータを変更できるコマンドdf
: ファイルシステムのストレージ使用量を表示するstrings
: バイナリやデータファイルから文字列の箇所のみを表示するiostat
デバイスのIO情報を表示する
リンク
本書で使用したソースコードがgithubで公開されている。CDが付属していた時代がなつかしい。。。
若干間違いが多いので、読んでいるときにアレ?って思ったら正誤表を確認してみるといいかも