【読後メモ】オペレーティングシステム IT Text 野口健一郎 著

オペレーティングシステム プログラミング

セキュリティ界隈の書籍やブログ記事を読んでいると、計算機アーキテクチャについて改めて学びたい衝動に駆られ、本書を1日で読んでしまった。

まとめ

この本は情報系学部生の教科書で、図がとても多くOS(特にカーネル)の概要を掴むには最適の書籍だった。

第8章の多重プロセス(マルチプロセス)が非常に分かり易かった。
セマフォによる排他制御を、分かりやすい図で説明されていた。
また、プロセス間のイベント通知にセマフォを活用できることは、目から鱗だった。セマフォについて知りたい場合は本書おすすめする。

第10章の仮想メモリも非常に勉強になった。
複数プロセスの仮想アドレス空間と実メモリ空間のアドレスの対応付けと、カーネルの関わりがイメージできるようになった。

以下、興味深かった章を読んだときに思った感想です。

第4.3章 オペレーティングシステムの核:カーネル
Systemcallはカーネル呼出し割込みであり、カーネル内で特権レベルでのみ許された処理が実行される。
Systemcallを呼出したユーザーモードのプロセスはsleepし、カーネルに処理を奪われる形になる。(自分で割込み発行し、カーネルにsleepさせられた形)
カーネルの処理は割込みを契機に実行されるため、カーネル処理中は割込み禁止モードとなること。(他の割込みはキューへ)
Systemcallはユーザーモードとカーネルモードのインタフェースであり、system callからKernelコードを見ると処理が分かりやすそう

第5.3節入出力の効率化
アプリケーションがwrite関数(内部でwriteシステムコールを発行)を実行するときブロッキングという仕組みで、システムコールを発行する回数を減らしている。
ブロッキングは、複数のシステムコールを溜めて、一度に発行するものとのこと。
また、CPUとストレージの間に、高速なキャッシュを置くことで、書込み要求を早く捌ける。
ブロッキングによりシステムコールは溜まり、書込みデータはキャッシュに溜まる。
キャッシュに書き込んだデータがディスクにどのタイミングで書き込まれるかはデバイスドライバやストレージ側の書込みアルゴリズムに依存するはず。
このため、キャッシュにしか書き込めてない状態で、電源断した場合、データは無くなる。
ジャーナリングシステムの大切さを感じる章だった。

第6.6節ファイルシステムの内部構造
ディスクボリュームの構成やinode(index node)について説明がある。
ファイルには容量が小さいものもあれば、大きなものもある。
メモリ上に効率的にファイルを割り当てるために、小さなブロック(4KB)を多数用意して分割して割り当てる。
第9.5 メモリ領域割当てアルゴリズムにも似た話がある。
メモリ割当ては一般的な話(例えば、SQL内部でレコードデータをどのようにメモリ割当てするか)であり、改めて勉強になった。

第8.3節プロセス間の同期機能:排他制御
ユーザーモードとカーネルモードで同一資源にアクセスさせないようにする必要がある。
そのために、lock/unlockシステムコールや、セマフォが排他制御を可能とする訳だが、この説明が非常に分かり易かった。
セマフォを用いた排他制御を知りたい場合は、この章を読むことをおすすめする。

第10章 仮想メモリ
”プログラムにとって、実質的なメモリは仮想メモリである。そして実メモリは仮想メモリを実現する際に利用される記憶用の資源である”
仮想アドレスから実アドレスへの変換について、分かりやすく説明されている。
必要なデータがメモリ上に存在するかは、アドレス変換表の存在ビットを見ている。
存在しなければ、アドレス変換例外割込みが発生し、メモリのページング(ページイン+ページアウト)が実行される。

コメント