「Linuxのしくみ」を読んで
はじめに
gihyo.jp
を読みました。
感想
低レイヤ寄りのことを知りたかったので読み始めました。
基本的な用語でも分かってないことがあったので為になりました。
この仕組みで複雑なアプリケーションが動いてるの凄すぎて気持ち悪い。
7章ぐらいから飽きてきてあんまりきちんと読めていないので、そのうち読み直します。
次は、OSの作り方でも読もうかと思います。
メモ
ただのメモ。
3章 プロセス管理
- fork関数(コピー)、execve関数(丸ごと書き換え)の動き
- デバイスドライバ、OSの仕事
4章 プロセススケジューラ
- スループットとレイテンシ
- プロセスのスケジューリング(niceで優先度設定ができる)
5章 メモリ管理
- taskset(cpu指定(それ以外にも色々機能がありそう)),time,ps(時間計測,ユーザ/カーネルモード)
- OOM killer(Out Of Memory)(メモリが足りなくなった時に適当に要らなそうなやつをkillする機能、vm.panic_on_oom)
- プロセス毎に 物理メモリに割り当て→ページテーブル(カーネルのメモリ上)作成(mmap)
- mmap()でページ単位で確保→mallocは内部でそれを切りわけて使っている
- 無駄なメモリ確保を防ぐデマンドページング(カーネルが初アクセス時に物理メモリへ割り当てる)
- Copy On Writeとは何か(fork()システムコールの時に仮想記憶が役に立っている、fork後が書き換えられた時にコピーする)
- OOMの救済にSwap、メモリ↔ストレージのスワップ領域
- メジャーフォールト(ストレージへのアクセスが発生)←こっちが重い、マイナーフォールト(ストレージへはアクセスしない)
- ヒュージページ(ページテーブルのメモリを減らす機構、まとめるページ単位を大きくまとめる)
- トランスペアレントヒュージページ(自動でヒュージページと通常モードを切り替える、Ubuntu16.04ではデフォで有効)
6章 記憶階層
- ライトバック方式(所定のタイミングでバックグラウンドでメモリに書き込む)、ライトスルー方式(キャッシュラインがダーティになった瞬間にメモリに書き込む)
- L3キャッシュはCPUで共有してたりする
- 参照の局所性(近い場所の又近い時間でデータにアクセスすることが多いので基本的にキャッシュが働く)
- キャッシュでは、物理メモリのページテーブル参照は高速化されない→Translation Lookaside BufferというCPUの機能がある
- ↑トランスレーション・ルックアサイド・バッファ - Wikipedia MMUがやってるらしい
- ページキャッシュ(メモリ↔ストレージ)の話、こっちはキャッシュライン単位でなくページ単位で扱う(キャッシュメモリはCPU↔キャッシュメモリ↔メモリ)
- ダーティページのライトバック周期はvm.dirty_writeback_centisecsパラメータで設定できる
- or vm.dirty_background_bytesの割合が超えた時ライトバック発生
- ハイパースレッド機能(よく分からんから後で調べる)
7章 ファイルシステム
- 容量制限=クォータ(ディレクトリ、ユーザ、サブボリューム等ごとに制限が掛けれる)
- ファイルシステムの不整合を防ぐ方式→ジャーナリング(トランザクションみたいな)、コピーオンライト(アホほどコピーとる)
- それでも駄目な時はfsck、だけど時間かかる割に望んだ結果にならないことが多い
- キャラクタデバイス、ブロックデバイスとは?(よく分かってないから後で調べる)
- tmpfs、メモリ上のファイルシステム、凄そうだけどこれもよく理解できてない
- ネットワークファイルシステム、Windows→cifs、Linux→nfs
- プロセスの情報は/proc以下にマウントされたprocfsで分かる(top,freeはここから採取)
- sysfsはprocfsの濫用を防ぐためにできた
- cgroupでリソース(CPU、メモリ)使用量に制限を掛けられる
- Btrfs、ファイルシステムのすごいやつらしい
あとでやる
- sarの使い方をまとめる
- ふつうのLinuxを読む
- OSの作り方を読む