[試して理解] Linux のしくみ ― 実験と図解で学ぶ OS とハードウェアの基礎知識』を読んだのでその読書メモ・感想です。

読書メモ

  • 第 1 章「コンピュータシステムの概要」
    • 後続章への導入のためにコンピュータシステムの構成についてざっくり解説した章だった。書名の通り、図解が多い。
  • 第 2 章「ユーザモードで実現する機能」
    • ユーザモードとカーネルモード、システムコール、strace、標準 C ライブラリや OS の提供するライブラリ、ldd、など。strace で時間取れるの知らなかった。
  • 第 3 章「プロセス管理」
    • fork() や execve() などによるプロセスの生成と実行、プログラムのメモリへのマッピング、_exit() によるプロセスの終了処理、など。
    • exit_group() 知らなかった。Linux プログラミングインタフェースで確認したところ、NPTL 対応のときにプロセス内の全スレッドを終了させるために導入されたらしい。プロセスの終了処理って何してるのかよく分かってないのでソースコード読んでみようかな。
  • 第 4 章「プロセススケジューラ」
    • 実験プログラムを動かして性能をグラフ化することでスケジューラの挙動を確認するという内容。プロセス数や論理 CPU 数、優先度などを変えて実験している。コンテキストスイッチ、プロセスの状態遷移、スループットとレイテンシ、などの説明。
    • オペレーティングシステムの授業を受けたり教科書を読んだことがある人なら大体分かってる内容だと思うけど、それを実験して確かめる方法 (プログラム) や実際に動かした結果を提示しているところが良かった。自分がそれをしなきゃいけない状況になったときに参考になる
  • 第 5 章「メモリ管理」
    • メモリの統計情報の見方、OOM、仮想記憶、(階層型) ページテーブル、ファイルマップ、デマンドページング、(メジャー・マイナー) ページフォールト、CoW、ページング、(トランスペアレント) ヒュージページ、そしてこれらの実験、など。
    • 前章までと比べるとボリュームも多いし、少し難易度が高くなったと感じた。sar -B でページングに関する情報を見れるのと、swapon でスワップ領域に関する情報を見れるのは知らなかった。
    • 全然本と関係ない話だけど、ページフォールトを使った Copy-on-Write と、階層型ページテーブルの仕組みってすごいよね。こんなエレガントな仕組みを考えた人はすごいなって思う。似た話で、CPU/GPU 間のメモリ転送をページフォールトを使ってやるやつ (ユニファイドメモリ) も最初聞いた時感動した。
  • 第 6 章「記憶階層」
    • キャッシュメモリ、参照の局所性、TLB、ページキャッシュ、同期書き込み、バッファキャッシュ、ページキャッシュに関するパラメータの変更方法、ハイパースレッド、そしてそれらの実験、など。
  • 第 7 章「ファイルシステム」
    • ファイルシステムの仕組み、データとメタデータ、データの不整合、ジャーナリング、コピーオンライト、キャラクタデバイス、ブロックデバイス、オンメモリ FS、ネットワーク FS、仮想 FS (procfs, sysfs など)、Btrfs、など。
    • ブロックデバイスを直接操作してファイルシステムのデータを書き換える実験が面白かった。最後の Btrfs の話題は難易度が高くなってるのと、内容が若干浮いている気がする。コピーオンライトは dedup の話もあると良いかも?
  • 第 8 章「ストレージデバイス」
    • HDD や SSD の仕組みと性能特性、ブロックデバイス層、I/O スケジューラ、先読み、など。HDD と SSD の違いやカーネルの支援機能の有無による性能特性の違いを実験によって確かめていて面白かった。I/O スケジューラ回りの話が勉強になった。

感想

  • Linux のしくみについて良い意味で広く浅く学べる本で、一見当たり前に思えることを実験によってちゃんと確かめている点が他書と大きく違う点だった。これは自分が実験をするときにも役に立ちそう。
  • OS について何も知らない人が一冊目に読む本というよりは、OS のざっくりとした概要を入門書で学んだ人がさらに深掘りする前に読むと良さそうな印象を受けました。