ブログ記事
io.Writerからシステムコールへ:『Goならわかるシステムプログラミング』
システムプログラミングは敷居が高く感じられがちだが、見慣れたコードを起点にすれば近づきやすくなる。渋川よしき『Goならわかるシステムプログラミング 第2版』は、Goの身近なインターフェースからOSの低レイヤへと地続きに降りていく構成で、システムの動作原理を学べる一冊だ。
1. 見慣れたコードから低レイヤへ降りる
本書はC言語でカーネルをボトムアップに学ぶのではなく、普段使う io.Writer や io.Reader を出発点にする。
これらのシンプルなインターフェースが、実はOSのファイル操作や低レベルなシステムコールの鏡写しになっていることを解き明かす。自分が書いたアプリケーションコードが起点になるため、低レイヤの挙動が「自分に関係のある身近な領域」として見えてくる。小さなインターフェースを組み合わせて高度な機能を作るGoらしい設計も同時に学べる。
2. なぜGoは速いのか:goroutineの軽さとミニOS構造
「Goは並行処理が得意」と言われる理由を、本書はOSのプロセスやスレッドとの比較で明らかにする。
OSスレッドは起動時に大きなスタックメモリを消費し、切り替えのたびにカーネルを介した重い処理が発生する。一方、Goのgoroutineは初期スタックがごく小さく、Goランタイム自身がスレッド上でgoroutineを管理する仕組みを採る。この構造により、切り替えコストを抑えながら大量の並行処理を捌ける。本書はGoランタイムを一種の「ミニOS」として説明し、並行処理パターンまで体感的に学ぶ道筋を示す。
3. 第2版の加筆:シェルと起動プロセスで全体を繋ぐ
第2版では、コマンドシェルとプロセス起動に関する新しい章が加わった。
ターミナルに打ったコマンドをシェルがどう解釈し、環境変数を読み込んで子プロセスを生成するのか。ビルドされたバイナリがメモリ上にどう配置され、ランタイムの初期化を経て main 関数が動き出すのか。プログラムがOS上で生まれ、動き、終わるまでの一連の流れをコードで追える。この全体像は、コンテナ環境でのデバッグや最適化の土台になる。
DevBookPath のマップで確認する
この本の前後の読書順は、DevBookPath のグラフで確認できます。
本記事のリンクには Amazon アソシエイト等の広告が含まれる場合があります。リンク経由の購入で運営者に紹介料が支払われることがあります。
この記事を共有
この地図を共有