【レビュー】[試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】


【PR】この記事には広告を含む場合があります
  • 出版情報
  • ・著者:武内覚/著
  • ・出版日:20221017
  • ・ページ数:336P
  • レビュー数
  • ・週間:0記事
  • ・月間:0記事
  • ・年間:3記事
  • ・全期間:3記事

ジャンルTop10選

目次

●序章 はじめに
●第1章 Linuxの概要
プログラムとプロセス
カーネル
システムコール
- システムコール発行の可視化
- システムコールを処理している時間の割合
- Column 監視、アラート、およびダッシュボード
- システムコールの所要時間
ライブラリ
- 標準Cライブラリ
- システムコールのラッパー関数
- 静的ライブラリと共有ライブラリ
- Column 静的リンクの復権
●第2章 プロセス管理(基礎編)
プロセスの生成
- 同じプロセスを2つに分裂させるfork()関数
- 別のプログラムを起動するexecve()関数
- ASLRによるセキュリティ強化
プロセスの親子関係
- Column fork()関数とexecve()関数以外のプロセス生成方法
プロセスの状態
プロセスの終了
ゾンビプロセスと孤児プロセス
シグナル
- Column 絶対殺すSIGKILLシグナルと絶対死なないプロセス
シェルのジョブ管理の実現
- セッション
- プロセスグループ
デーモン
●第3章 プロセススケジューラ
前提知識:経過時間と使用時間
1つの論理CPUだけを使う場合
複数の論理CPUを使う場合
realよりもuser+sysが大きくなるケース
タイムスライス
- Column タイムスライスの仕組み
コンテキストスイッチ
性能について
プログラムの並列実行の重要性
●第4章 メモリ管理システム
メモリ関連情報の取得
- used
- buff/cache
- sarコマンドによるメモリ関連情報の取得
メモリの回収処理
- プロセスの削除によるメモリの強制回収
仮想記憶
- 仮想記憶がない時の課題
- 仮想記憶の機能
- 仮想記憶による課題の解決
プロセスへの新規メモリの割り当て
- メモリ領域の割り当て:mmap()システムコール
- Column Meltdown脆弱性の恐怖
- メモリの割り当て:デマンドページング
- Column プログラミング言語処理系のメモリ管理
ページテーブルの階層化
- ヒュージページ
- トランスペアレントヒュージページ
●第5章 プロセス管理(応用編)
プロセス作成処理の高速化
- fork()関数の高速化:コピーオンライト
- execve()関数の高速化:デマンドページング再び
プロセス間通信
- 共有メモリ
- シグナル
- パイプ
- ソケット
排他制御
排他制御の堂々巡り
マルチプロセスとマルチスレッド
- Column カーネルスレッドとユーザスレッド
●第6章 デバイスアクセス
デバイスファイル
- キャラクタデバイス
- ブロックデバイス
- Column ループデバイス
デバイスドライバ
- メモリマップトI/O(MMIO)
- ポーリング
- 割り込み
- Column あえてポーリングを使う場合
デバイスファイル名は変わりうる
●第7章 ファイルシステム
ファイルへのアクセス方法
メモリマップトファイル
一般的なファイルシステム
容量制限(クォータ)
ファイルシステムの整合性保持
- ジャーナリングによる不整合の防止
- コピーオンライトによる不整合の防止
- 一にも二にもバックアップ
Btrfsが提供するファイルシステムの高度な機能
- スナップショット
- マルチボリューム
- Column 結局どのファイルシステムを使えばいいのか
データ破壊の検知/修復
その他のファイルシステム
- メモリベースのファイルシステム
- ネットワークファイルシステム
- procfs
- sysfs
●第8章 記憶階層
キャッシュメモリ
- 参照の局所性
- 階層型キャッシュメモリ
- キャッシュメモリへのアクセス速度の計測
Simultaneous Multi Threading(SMT)
- Column Translation Lookaside Buffer
ページキャッシュ
- ページキャッシュの効果
バッファキャッシュ
書き込みのタイミング
direct I/O
スワップ
統計情報
●第9章 ブロック層
HDDの特徴
ブロック層の基本機能
ブロックデバイスの性能指標と測定方法
- 1プロセスだけがI/O発行する場合
- 複数プロセスが並列にI/O発行する場合
- Column 推測するな、測定せよ
- 性能測定ツール:fio
ブロック層がHDDの性能に与える影響
- パターンAの測定結果
- パターンBの測定結果
- Column 何のための性能測定
- 技術革新に伴うブロック層の変化
ブロック層がNVMe SSDの性能に与える影響
- パターンAの測定結果
- パターンBの測定結果
- Column 現実世界の性能測定
●第10章 仮想化機能
仮想化機能とは何か
仮想化ソフトウェア
本章で使う仮想化ソフトウェア
- Column Nested Virtualization
仮想化を支援するCPUの機能
- QEMU+KVMの場合
- Column CPUによる仮想化機能が存在しない場合の仮想化
仮想マシンは、ホストOSからどう見えているか?
- ホストOSから見たゲストOS
- 複数マシンを立ち上げた場合
- Column IaaSにおけるオートスケールの仕組み
仮想化環境のプロセススケジューリング
- 物理マシン上でプロセスが動いている場合
- 統計情報
仮想マシンとメモリ管理
- 仮想マシンが使うメモリ
仮想マシンとストレージデバイス
- 仮想マシンにおけるストレージI/O
- ストレージデバイスへの書き込みとページキャッシュ
- 準仮想化デバイスとvirtio-blk
- Column ホストOSとゲストOSでストレージI/O性能が逆転?
virtio-blkの仕組み
- Column PCIパススルー
●第11章 コンテナ
仮想マシンとの違い
コンテナの種類
namespace
- pid namespace
- コンテナの正体
セキュリティリスク
●第12章 cgroup
cgroupが制御できるリソース
使用例:CPU使用時間の制御
- Column cgroup機能のLinuxカーネルへの取り込み経緯
応用例
- Column cgroup v2
●終章 本書で学んだことと今後への生かし方

概要

ITシステムやソフトウェアの基盤OSとして幅広く使われているLinux。エンジニアとしてLinuxに関する知識はいまや必須とも言えますが、あなたはそのしくみや動作を具体的にイメージすることができるでしょうか。
本書では、Linux OS における、プロセス管理、プロセススケジューラ、メモリ管理、記憶階層、ファイルシステム、記憶階層、そして仮想化機能、コンテナなど、OS とハードウェアに関するしくみがどのように動くのか、実験とその結果を示す豊富なグラフや図解を用いてわかりやすく解説します。

改訂に際しては全面フルカラー化。グラフや図解がさらにわかりやすくなり、ソースコードはC言語から、Go言語とPythonにアップデートしています。さらに仮想化、コンテナなどの章が加わりました。今どきのLinuxのしくみを本書でしっかり理解しておきましょう。

レビューの一覧

 ・未経験からWebエンジニアになった1年目に読んだ本19冊をふりかえる[2023-12-10に投稿]

 ・情報系学部2年生が1年間でやったことをまとめる(随時更新)[2023-12-03に投稿]

 ・Docker を使った [試して理解] Linuxの仕組みの為の環境構築[2023-07-06に投稿]


amazonで確認