たなしょのメモ

日々勉強していることをつらつらと

Linuxのしくみを読んだの感想を書く

Linuxのしくみを読んだの感想を書く

www.amazon.co.jp

低レイヤーを勉強して行く中でとてもよい書籍だと評判なので読んだ。
結論はとてもわかり易い書籍だった。
特に図が豊富なのとCやShellで書かれたプログラムを実行してタスクの稼働状況見る部分や その他コマンドラインで使われていたコマンドもとても参考になるものが多く勉強になった。
(この書籍のおかげで最近メインの開発PCのOSをUbuntuに変更した。)

1章

カーネルにはどのような機能があるのかの簡単な説明がされいる。
これから各章ごとにその機能についてかぼっていく内容に軽く触れいている。

2章

straceコマンドを使ってCのプログラムが内部でどのように動くのかを解説していて良かった。
Pythonのプログラムでもどうようにstraceしてみてちょっと長くなるけど同様な結果(writeシステムコールが呼び出されている)になることの確認をする。
親プロセスを得るgetppid()やプロセスがユーザーモードカーネルモードどちらかで実行されているか確認するsarコマンドの存在を知ることができた。
(sarコマンドはUbuntuには標準で入っていないのでインストール必要があった)

3章

fork.cというプログラムを作って親プロセスと子プロセスを作成して、メモリの動きをみた。
それぐらいしかできなかった汗

4章

プロセス1つないし複数動かしてCPU時間を使う処理を書いてプロセスの複数実行について学んだ。
プロセス複数あればレイテンシーは遅くなるし単体で動いていれば速くなる。
ps asコマンドでプロセスをkillしていて便利だなと思った。(Linuxを使ってる人には当然できることだと思うんだけど汗)
スケジューラがラウンドロビン方式でないと複数のタスクを実行するととても時間がかかることがわかった。
(どおりで応用情報技術者の問題で頻繁に出題されてるわけだ。)
niceシステムコールでプロセスに優先度をつけることができるらしい。

5章

ページフォールトの説明がわかりやすかった。
ページフォールトが起こるとページフォールトハンドラという処理が動くんだな。
mmapというシステムコールを使って新規メモリを要求するプログラムを書いた。
malloc()は内部的にmmap()を呼び出してるということだ。
メモリを退避する領域をスワップ領域というらしい。(だからArch Linuxのインストールガイドにswapのパーティションを切っている例が記載されているのか)

6章

キャッシュメモリを使用するプログラムを書いた。
データサイズを倍々に増やしていくと処理時間が遅くなっていくよねっていう実験をした。
キャッシュメモリの説明が主で後半でハイパースレッドなどにも触れていた。

7章

ext4、XFSもファイルシステムの仲間なんだな。
ファイルシステム不整合にことが書いてあったがイマイチ理解できなかった…
マルチボーリュームの図がとてもわかり易かった(Arch Linuxのインストールしていたらあーこのこといあってるのねと納得すると思う。)

8章

HDDの書き込みについて説明がされていて、応用情報の午前問題でよく問題をといたなーと懐かしい気持ちになった。
違うセクタにいるときの読み出し方法も図示されていたのでわかりやすかった。
HDDとSSDの呼び出しの速さの違いもグラフにされていてこれもわかりやすかった。

所感

一回で理解するのはなかなか難しいので低レイヤーを学ぶ中で、この本を片手に困ったらこの本を引くことで少しずつ理解できるのではないかと思っている。
この本の中にも紹介されていた「ふつうのLinuxプログラミング」を読む際にもう一度振り返ると思う。