2019-04-28

"詳解 Linux カーネル" Daniel P. Bovet & Marco Cesati 著

入手したはいいが、その場しのぎで、十年、二十年と放置してきた奴らがいる。ヘネパタか、パタヘネか、こいつらはその代表。本書もその類いで、章ごとに完結し、元が辞書的な構成になっている。そして、心の奥から貧乏性がつぶやいてやがる。せっかく買ったんだから... って。そろそろ引退勧告されそうな身で、再トライ!といこう。こいつを拾い読みするだけで書籍代も助かるし...

Linux のソースコードは自由に目にすることができ、その気になれば自分なりにカスタマイズすることもできる。とはいえ、いきなりコードを手にしても、途方に暮れるばかり。そんな時に指南役となってくれるのが、この詳解である。
おそらく、ソフトウェア屋さん向けに書かれたものであろう。だが、CPU を活かすためのカーネルという見方をすれば、ハードウェアの仕組みにも踏み込む。実際、コードのカスタマイズが求められるケースは、ハードウェア依存の高い部分が多い。おいらはプログラマではないが、それでも、割り込みベクタ、例外ハンドラ、同期処理、MMU、あるいは、ブートシーケンスぐらいは基本知識として持っておいて損はない。実際、知らなければ、プロセッサや周辺回路の設計で困るし...
本書の有り難いところは、コードの実装イメージを優先してくれることである。もちろんコードの厳密性も重要だけど、少々の効率性は犠牲にしてでも。例えば、schedule() 関数のカスタマイズでは、かなり教育を意識している。著者の二人はローマ大学の先生で、この詳解はイタリアの有数の工科大学で教材にされているそうな...

マルチタスク環境で主役を演じる機能といえば、プロセスの切り替えやそのスケジューリングといったところ。プロセスの切り替えでは、時間間隔、すなわちクォンタムが、システムの最適値として問われる。
さらに、今日当たり前となったマルチプロセッサ環境では、プリエンプティブか、ノンプリエンプティブか、がより重視される。Unix 環境では、ジョブに一定時間を割り当てるプリエンプティブな方式が当たり前のように用いられるが、リアルタイム処理ではそうはいかない。Linux の場合、ユーザプロセスがプリエンプティブでも、ノンプリエンプティブな部分も混在しており、本書は、負荷の高いシステムでは既定のクォンタムでは大きすぎることを指摘している。
また、スワップとキャッシュの位置づけを明確にしている。今日の OS は、幸いにも物理メモリをすべて管理する必要はない。ハードウェアの強力な支援があるからである。それだけに、スワップとキャッシュのトレードオフはより顕著化する。キャッシュは、メモリ領域を犠牲にしてでもパフォーマンスを向上させ、スワップはアクセス速度を犠牲にして、利用可能なメモリ領域を拡大させる。すべてキャッシュで済めばいいが、スワップはメモリ不足時の最終手段という考え方もできる。いわば保険として。そして、ゾンビプロセスとの葛藤では、今日のガベージコレクションを思い浮かばせる。

個人的には、モノリシックカーネルという特徴も味わいたい。本来の Unix 思想は、メモリ管理やファイルシステムなどを独立させて小さな部品を集めてシステムを構築するというものだが、あえて Linux は、これらすべてをカーネルに取り込んで一つのアドレス空間で実行させようとする。しかも、カーネルモジュールに対して、機能のアップデートや削除を動的に行える仕組みを備えている。
... こうした技を魅せつけられれば、いくらアホな天の邪鬼でもちょっといじってみたくなる。この酔いどれ庶民には高価なシステムは高嶺の花で、非力な x86 系のためのチューニング思想の方がありがたい。
近年の Linux は行儀よくなったもので、あのメッセージに出くわす機会がぐっと減った。ちと淋しいけど。歳のせいか、安定志向に走り、CentOS に鞍替えしてからは、とんとご無沙汰。そこで、わざと発生させて、心のオアシスを求めるのであった...
Kernel Panic !!!

ところで、「プロセス」という概念は、あまりに慣れ親しみ過ぎて、その意味を問うたこともない。簡単に言えば、「プログラムの実行時におけるインスタンス」として定義される。通常、割り込みは、「プロセッサが実行する命令列を変更するイベント」として定義されるとか。
こうした用語の捉え方を眺めるだけでも、当たり前といえばそうなのだが、その意味を再確認する上で古典を読む意義は大きい。いや、愉快!
尚、デッドロック回避に用いられる「セマフォ」という概念には苦労した記憶が蘇る。考え方は単純でも、抽象化されたデータ型に馴染むには、ちと時間がかかる。抽象数学に悩まされてきたように...

0 コメント:

コメントを投稿