- Amazon.co.jp ・本 (86ページ)
感想・レビュー・書評
-
参考になったことの要約。
1. Linuxカーネル
ユーザがハードウェア意識せずにアプリを作成できるように、ハードウェアと協調して動作するOSの中核をになうソフトウェアがLinuxカーネル。デバイスドライバも一部含まれる。一方で、アプリなどのソフトウェア開発者が制御するものがユーザプロセス。ユーザプロセスが使用するメモリ領域をユーザ空間、カーネルが使用するメモリはカーネル空間と呼ぶ。ユーザ空間はユーザプロセスごとに管理されており、あるユーザプロセスが不正動作しても他のユーザプロセスやシステムには影響しないようになっている。カーネル空間はそのような制限がなくなんでもできてしまうが、反面不正動作するとシステムが停止してしまうため動作するソフトェアは高品質が求められる。ユーザプロセスが暴走した際にそのユーザプロセスを強制終了するのもLinuxカーネルの仕事。
2. Linux起動時の動作
PCに電源供給するとスタンバイ電源が入る。これにより電源ボタンを押したかどうかを検知したり、WakeOnLanに対応できたりする。
電源ボタンを押すとBIOSが起動する。BIOSはハードウェアの初期化や異常検知をする。また、OSからみてハードウェアを抽象化させており、ハードウェアの情報をOSに渡して起動させている。ハードウェアのラッパーのような役割をすることでOSを汎用的な設計にできるようにしている。最近のPCではBIOSではなくUEFIが使われている。BIOSはOSを起動する準備を終えるところまで役目を終える。
BIOSが起動したら、BIOSがディスクからブートローダを読み込み起動する。ブートローダではどのOSで起動するか選択することができる。また、OSの起動パラメータを指定できる(シングルユーザモードとか)。LinuxではブートローダにGRUBを使う。ブートローダのなかでLinuxカーネルも起動する。
Linuxカーネルの起動が完了すると、initデーモンを呼び出す。これにより起動時に実行する(ユーザ?)プロセスを起動する。
3. 仮想メモリ
ユーザプロセスにはそれぞれ仮想メモリが割り当てられており、プロセスごとの独立性が担保されている。また、物理メモリに直接アクセスさせず、プロセスがアクセスできるメモリ領域を制限することができる。このようにユーザプロセスをあるサイズごとのメモリ(通常4KB)を割り当てて管理することをページング方式と呼ぶ。実際のデータは物理メモリに存在するため、仮想アドレスを物理アドレスに変換する必要がある。アドレスの変換は、ページテーブルと呼ばれる変換表にあらかじめ登録しておき、メモリアクセスの際に参照する。ユーザプロセスが使用するメモリが足りなくなってきたら、使っていないメモリをハードディスクに退避して物理メモリに空きを作る。これをスワップと呼ぶ。スワップされたデータにアクセスする場合はハードディスクから物理メモリにデータを移動する。このようにスワップが発生すると低速なハードディスクにアクセスするため性能が劣化する。源内はメモリ量が潤沢になってきたので、スワップが発生しないようなメモリ量に設計する必要がある。
4. プロセスとスレッド
ユーザプロセス同士は独立している。forkをすると新しいユーザプロセスを生成する。プロセス同士は親子関係ができるが、親も子もユーザプロセスとしては別々でメモリ領域も別々。cloneをすると新しくスレッドを生成することができる。スレッドはユーザプロセスの内部に生成されメモリ領域をユーザプロセスと共有する。そのため、あるユーザプロセスが異常になっても別のユーザプロセスには影響しないが、あるスレッドが異常終了すると他のスレッドも含めて該当のユーザプロセス自体が異常終了する。Linuxカーネルはある意味一つのユーザプロセスでありその中に多数のスレッドをかかえている。そのため、他のプロセスとは独立しているものの、中の処理が異常となるとカーネル自体が異常になってしまう。詳細をみるコメント0件をすべて表示 -
6章あたりは参考になった。
基本的なことなので、たまに見返したい。 -
コツを共有してくれるありがたい本。
-
linux kernelを読み進めるにあたり、知っておくと理解しやすい情報を紹介してくれている。gccの-save-tempsオプションは知らなかったし便利。