第4章まで読んだので一旦まとめたいと思います。ちなみに私はLinuxを使うことはありますが、中身については無知です。
第1章 コンピューターシステムの概要
重要なことを一点挙げると、CPUにはユーザモードとカーネルモードがあるということです。 プロセス管理システム、プロセススケジューラ、メモリ管理システムなど「通常のプロセスから実行できると困る処理」はカーネルモードで動作します。
ちなみにカッコつきなのは本文からの引用なのに加えて、じゃあなぜ困るんじゃって聞かれてもうまく答えられないからです。(´;ω;`)
第2章 ユーザモードで実現する機能
ここで取り上げられていたのはシステムコールです。通常ユーザモードで処理されているプロセスが発行するもので、カーネルに処理を依頼します。
実験プログラムでは、ユーザモードとカーネルモードを行き来するプログラムを動かしました。
第3章 プロセス管理
プロセス管理のために、fork()とexecve()の2つの関数があります。
と、章の冒頭でいきなり宣言されて、???という感じでした。しかし、章を最後まで読むと、プロセスを複製する場合はfork()単体で、全く別のプロセスを新規生成する場合はfork()とexecve()を組み合わせるという使用法があるということがわかりました。
また、プログラムファイルの構造を示されてこれまた???となりましたが、プログラムをメモリ上にマップするための情報とわかり納得できました。
第4章 プロセススケジューラ
Linuxカーネルが複数プロセスを同時に動作させる仕組みを解説しています。冒頭にある
- 1つのCPU上で同時に処理するプロセスは1つだけ
- 複数プロセスが実行可能な場合、個々のプロセスを適当な長さの時間(=タイムスライス)ごとにCPU上で順番に処理する。
という原則で以降の説明が理解できるので、比較的わかりやすい章でした。
コンテキストスイッチの説明で「ソース上では次の行にある処理であっても、直後に呼ばれるとは限らない」ということがしっかり理解できたのが良かったです。
おわりに
第4章はあまり自分で手を動かしていないのですが、それでも非常に理解しやすく、初学者向けに丁寧に書かれていると感じました。 目的に沿った実験、わかりやすい図表がその原因なのかなと思いました。図表の充実っぷりは本当にすごいと思います。