Yuki Watanabe's Blog

Yuki Watanabe's Blog

エンジニアリングと子育てについて

『[試して理解]Linuxのしくみ』を読んだ

『[試して理解]Linuxのしくみ』を読んだ。

過去に第1版を読んだことがあり、Linux OSの知識が業務で役立つ機会に何度も遭遇したため、第2版も楽しみつつ読めた。

これまで

低レイヤーの技術は定期的に学習し、これまでにいくつか書籍を読んだことがあるため、メモリやCPU、プロセス、スレッドについてはなんとなくわかる状態だった。

  • プログラムはなぜ動くのか
  • なるほどUnixプロセス
  • Goならわかるシステムプログラミング
  • ふつうのLinuxプログラミング

感想

第2版も自分にとって役立つ内容が多かった。 カラフルなイラストが豊富で読み進めやすく、サンプルコードを動かしながらハンズオンで理解できる点が自分に合っている。

低レイヤーの用語は忘れてしまいやすいため整理しながら読んだ。今までGistで管理していたけど、ファイル数が増えGitHubに1リポジトリにまとめたほうが管理しやすくなってきたため、GitHubに移行した。

github.com

ここからは、本書の特に良かった点について書く。

バックエンドエンジニアにとって活かせる点が多い

私は主にバックエンドエンジニアとしてアプリケーション開発やインフラ監視に携わっている。 普段の業務で毎日OSのしくみを意識しているかといえばそんなことはないが、とはいえOSのしくみの理解が必要な業務もそこそこにある。

  • SLIを満たせるか検証するために負荷試験をする
  • サービスのパフォーマンスの低下原因をDATADOGから読み取る
  • サービスへの膨大なリクエストを効率的にさばけるようにする

これらの業務をこなすために、都度OSの勉強をするのはあまりにも時間がかかってしまうので、1つの書籍で体系的に学べるのは本当にありがたい。

書籍に収まらない内容でも、著者の記事が紹介されているため書籍の延長として知識を拡充できるのも良かった。

手を動かしながらOSの挙動を理解できる

サンプルコードが公開されているため、Cloneして手元で動かせるのは親切で、字面だけだとわかったようなわからないような曖昧になりがちな点を手を動かしながら理解できる。

github.com

使用されている言語は第1版はC言語であり、第2版からPythonやGoがメインとなった。Go使いの自分にとってはありがたい限り。

書籍で紹介されていた、各種コマンドは普段はあまり使わないものもあけど、しかるべき時にサクッと使えるよう慣れておきたいと思っている。

  • ps←これはよく使う
  • time
  • free
  • sar
  • top

(参考)Ubuntuの動作環境

実験プログラムは、物理マシン上にインストールしたUbuntu20.04/x86_64上で動かすことを想定しています。

と本書にある通りUbuntuの環境を想定している。

私はM1 Macを利用しているため、仮想環境を利用してUbuntuの環境を用意した。初めはVirtual Boxを使ってみたがうまく動かせなくて他のツールを探したら、UTMというツールを知った。

UTMはとても使いやすい。 UTMでUbuntu環境を起動し、MacからSSHで接続をして、本書のサンプルコードを動かした。

しかし、Pythonとライブラリを使ってグラフを描画するサンプルコードに限っては、自分の環境ではうまく動かせなかった。デバッグに時間がかかりそうだったため書籍に掲載されているグラフを読んで理解するにとどめ、グラスを作成することは諦めて先へ進めることにした。

UTMのセットアップで参考にした記事はこちら。

oopsoop.com

今後

今後も低レイヤーの技術の学習は定期的にやっていきたい。 興味のある分野としては、システムのパフォーマンス改善や並行処理に関するテーマであり、それぞれ気になっている書籍があるので、また時間を見つけて読んでいく。

他にも、ハンズオン系の学習が好きなのでミドルウェアの自作に興味がある。