Linux カーネル「概要」
OS関連の知識が欲しくて「LINUXカーネル」を読み始めたのだが,900ページ強もあり,中々続かない.
その上内容をすぐ忘れてしまい,何回も同じところを読んでいるので,今回は忘れないようにまとめておく.
本書は20章構成で,第一章は概要である. 報知的要約を書いてもあまり面白くないと思うので,興味を持ったいくつかのTOPICについて記述する.
カーネルアーキテクチャ
カーネルのアーキテクチャを大別すると,二つに分けることができる.
モノリシックカーネルは,OSを構成する一般的機能をカーネルに統合し,同一のメモリ空間に実装するアーキテクチャであり,LinuxやUnixはこのアーキテクチャを採用している.一方で,マイクロカーネルは,OSを構成する一般的機能をカーネルから分離し,モジュールとして実装するアーキテクチャである.
学術的には,マイクロカーネルの方向に進んではいるものの,モジュール間のメッセージパッシングに時間的コストを要するため,実行速度の面では,モノリシックカーネルに軍杯が上がる.
これらのアーキテクチャを巡る有名な論争として,「アンドリュー・タネンバウムとリーヌス・トーヴァルズの議論」がある.また,Linusの自伝「それがぼくには楽しかったから」でも触れていて,この本は読み物としても面白かったです.
他にも,これらを組み合わせた”ハイブリットカーネル”や,"ナノカーネル","モジュラカーネル","エクソカーネル"などがある.
シグナルとプロセス間通信
UNIXシグナルは,プロセス・スレッド間でシステムに通知する仕組みです.
非同期通知としては,C-c によるユーザ割り込みがありSIGINTをフォアグランドプロセスに通知する.
同期通知としては,プロセスが無効なアドレスにアクセスしたときのSIGSEGVシグナルがある.
POSIX標準では20個のシグナルがある(Wikipedia シグナル)).
一方で,AT&TのUnix System V では,UNIXシグナルとは異なる通信が導入されている. これは,セマフォ,メッセージキュー,共有メモリで構成されていて,System V IPC と呼ばれています.
システムコール
OSの機能を呼び出す仕組み.一章にして知らないシステムコールばかりでした. システムコールに関しては,かなりの数があるので,別途ページにまとめていこうと思います.