「試して理解 Linux のしくみ」を一応読み終わりました.
感想とについて書いていきます.
感想
"本格的な linux の仕組みについて学ぶ本"に手を出すのは初めてでした.
本書は,図解がふんだんに用いられており,抽象的な内容を丁寧に説明されていて,わかりやすいと思います.
PC が重くなったときにメモリの詳細な仕組みを知ると,適切に原因を理解できるようになったと思います
CPU は「PC の頭脳」と言われが,具体的な処理内容は知らなかったし,ファイルは「ファイルシステム」にのっとって動作しているのも,改めて説明されないと気づかない部分も多かったです.
難易度自体は高く感じました. これから Linux を学ぼうとしていてコマンドを知りたい人むけではなく,元々 Ubuntu や CentOS などを使っていて,システムに関連するコマンドを使ったことがある人が「パフォーマンスについて詳細な理解をしたい」,「自作 OS をしたい」などといった詳細な理解をしたい人むけだと感じました.
まとめ
ユーザモード,カーネルモード
- 安全な処理をするための,OS はユーザモードとカーネルモードの二つで動作をする.
プロセス管理,fork(),execuve()
- コマンドの処理は fork()によって複製し親プロセスと子プロセスを作る,execuve()によって子プロセスに違う処理をおこなう(PID がかわる)
プロセススケジューラ
- 単一 cpu のとき
- 一つの CPU 上で同時に動作に処理するプロセスは1つだけ
- 複数のプロセスが実行可能の場合,ここのプロセスを適当な長さの時間ごとに CPU 上で順番に処理する
- マルチ CPU 環境では
プロセスの状態
プロセスの一生は,以下の状態を行き来する
- 実行状態
- 実行待ち状態
- スリープ状態
- ゾンビ状態
メモリ管理
- free によって得られるメモリに関する情報
- total:全メモリの量
- free:見かけ上の空きメモリ
- buff/cache:バッファキャッシュ,およびページキャッシュが利用するメモリ
- available:実質的な空きメモリ
記憶階層
- 物理メモリを直接利用しようとしたときに発生する問題を解決できる
- メモリの断片化
- 物理メモリで断片化しているメモリが,仮想記憶では一塊にみえる
- 別用途のメモリにアクセスできてしまう
- 仮想記憶では,他のプロセスが見えずアクセスできなくなる
- マルチプロセスの扱いが困難
- 仮想アドレス空間は,プロセスごとに存在するため,他のプロセスとの干渉を気にしなくてよくなる
- メモリの断片化
仮想化記憶の応用
- ファイルマップ
- ファイルの仮想領域を仮想アドレス空間上にメモリマップするという機能
- デマンドページング
- メモリを獲得してから当分,あるいはプロセス終了まで使わない領域が存在することで発生する,「メモリの無駄な消費」を解決する方法.
- コピーオンライト方式の高速なプロセス生成
- 親プロセスあるいは子プロセスのどちらかが,ページのどこかを更新しようとしたときに,共有を解除する手順のこと
- スワップ
- 階層型ページテーブル
- ページテーブルに必要なメモリ量を節約するために階層型にしていること
- ヒュージページ
- 通常より大きなサイズのページのこと
- 仮想メモリをたくさん使うプロセスにおいて,ページテーブルに必要なメモリ量が減るメリットがあがる
キャッシュメモリ
- レジスタ上の計算とメモリアクセスの両者の計算時間を差を埋めるためのもの
階層型キャッシュメモリ
ページキャッシュ
- ストレージデバイス上のファイルデータをメモリにキャッシュするもの
ハイパースレッド機能
- CPU コアの中のレジスタなどの一部の資源を複数用意して,それぞれシステムからは論理 CPU として認識されるハイパースレッドというものに分割するハードウェア機構
ファイルシステム
ファイルの不整合への対処
仮想化ファイルシステム
- procfs
- プロセスの情報(cpu,メモリなど)を得るためのファイルシステム.
- /proc 以下にマウントされる.
- ps,sar,top,free などのコマンドは procfs から情報を得ている
- sysfs
- cgroupfs
- リソースの制限をかける「cgroup」を操作するときに仲介するファイルシステム.
- cpu,メモリなどの制限をする
Btrfs
Btrfs の一部機能
- マルチボリューム
- スナップショット
- RAID
- データ破損検知/修復