「Linuxのしくみ」を読みました

積ん読してあった本を2ヶ月ほどかけて消化していくことになったので, まず一冊目.

全体として非常に図がわかりやすく, スラスラ読み終わることができました. この本では以下のようなことを扱います.

  • システムコール

  • CPUのモード遷移 (ユーザーモードカーネルモード)

  • プロセス生成 (fork (子プロセスを生成)とexecve (現在のプロセスを別のプロセスで置き換える))

  • コンテキストスイッチ (CPU上で動作するプロセスが切り替わる)

  • プロセスの状態 (実行, 実行待ち, スリープ, ゾンビ)

  • CPUのアイドル状態 (論理CPUが何のプロセスも実行してない状態)

  • OOMキラー

  • ページテーブル (仮想アドレスと物理アドレスの対応表)

  • ページフォールト(プロセスが物理アドレスが割り振られてない仮想アドレスにアクセスした際におこる割り込み)

  • デマンドページング (仮想アドレスにアクセスしてから, 初めて物理メモリが割り当てられる)

  • コピーオンライト

  • スワップアウト (物理メモリが枯渇した際にストレージ領域に一部を退避させる)

  • 階層型ページテーブル・ヒュージページ

  • キャッシュメモリ (書き込まれたらダーティになる, 時間的・空間的局所性により多くのプログラムで効果的)

  • ページキャッシュ (読み出しの場合最初にカーネルのメモリにコピーして, 次にプロセスのメモリにコピー. 書き出しもカーネルのメモリを経由する)

  • ハイパースレッド (見かけの論理CPU数が増える)

  • ファイルシステム

  • クォータ (ファイルシステムの容量を制限)

  • ジャーナリングとコピーオンライトによるファイルシステムの不整合の解決

  • キャラクタデバイス (端末やキーボードなど)とブロックデバイス(HDDとSSD) (Linuxはハードウェアデバイスを全てファイルで表現)

  • シーケンシャルアクセスとランダムアクセス

  • I/Oスケジューラー (マージ・ソート, 先読み)

ソースコードもついているので, 実際に手を動かしながら上記の項目について 体感ができる良書だと感じました.