Open11
並木美太郎「オペレーティングシステム入門」
全体
OSとその各機能について、導入された経緯、理想系、運用上の実装、ポリシーを区別して説明されておりとてもわかりやすい
オペレーテイングシステム入門 (Computer Science Library)
同時に読む本
-
ふつうのLinuxプログラミング
- 「オペレーティングシステム入門」で勉強した仕組みの具体を学べる本
- Linuxに搭載されているシステムコールやパイプ、ファイルディスクリプタ等の実装について説明している
第一章 OSの目的と背景
- 背景
- ソフトウェア開発時にハードウェア構成の変化を吸収してくれる層が必要
-
OSの主たる目的
- 資源の仮想化
- 資源の効率的管理
- 保護、セキュリティ
資源の仮想化
- そのOSが走るハードウェアはどのような構成になっているか、それをどのように用いるか
- = OSはハードウェアとソフトウェアの利用状況を反映したものになる
- 一般的な計算機の構成要素はCPU、主記憶装置、入出力装置
- 実現方法
- アプリケーションはハードウェアを直接操作せず、必ずOSを介して行う
- → そのAPIをシステムコールと呼ぶ
- アプリケーションはハードウェアを直接操作せず、必ずOSを介して行う
資源の効率的管理
- OSによる資源管理
- 時分割、空間分割、オンデマンド
保護、セキュリティ
- エンドユーザーの情報保護のことではなく、アプリケーション層のハードウェアアクセスの禁止やサンドボックスのこと
Screepsでは計算資源に上限があるため演算処理を分割する意味はないが、ひとつのプロセスが計算時間を占有しない仕組みは必要
CPU bucketを使い切るようなプロセスの考慮もしておくべきか
物理実体の情報と操作の管理が必要
- 資源の仮想化
- → 公式APIが提供する、物理実体に直接作用するオブジェクトはOSからのみ操作し、アプリケーション層はOSが用意したAPIを通じて物理を動かす
- 資源の効率的管理
- → 仮想オブジェクトに加えられた操作を総括して実際に行う操作を決定する
- 保護、セキュリティ
第二章 OSの機能と構成
- システムコール
- システムコールはそのOSが一般的に動作するハードウェア環境に共通する資源を操作するものとして用意される
- プロセスに関するシステムコール
- 主記憶に関するシステムコール
- 入出力に関するシステムコール
- システムコールはそのOSが一般的に動作するハードウェア環境に共通する資源を操作するものとして用意される
第三章 OSとハードウェアアーキテクチャ
第四章 並行プロセス
- Process
- 実在の計算機に依存することなくプログラムを実行するための枠組み
第五章 プロセス管理
- プロセスは仮想化された計算機の構成要素上でプログラムを実行するための枠組み
- プロセスの状態などのメタデータをプロセス制御ブロック(Process Control Block)と呼ぶ
- プロセススケジューリング
Screepsでは計算資源に上限があるため演算処理を分割する意味はないが、ひとつのプロセスが計算時間を占有しない仕組みは必要
プロセスの状態遷移はどのようなものになるか?
第六章 メモリ管理
ScreepsのローダーはMemoryからプロセスを復元する役割をもつ
(厳密に言えばheapが不足する状況は発生しうるが現状では考慮の必要はない
第七章 ページングによるメモリ管理
スレッド
- プロセスに対して仮想アドレス空間を用いることでメモリ保護を実現しているが、マルチプロセッサを用いる並列計算の個々の処理をプロセスの単位で分割するとリソースを共有できず都合が悪い
- → 資源を共有するプログラムの単位としてスレッドという考えが導入された
- スレッド固有の資源
- PC、汎用レジスタ
- スレッド間で共有される資源
- 仮想アドレス空間
- (仮想)入出力
第八章 入出力管理とデバイスドライバ
- 汎用的な仮想化ができない入出力装置の扱い
- OSはバイトデータの受け渡しのみを行い、実際の操作APIはドライバが提供する
- →その点でドライバはOSのレイヤーを拡張している
- OSはバイトデータの受け渡しのみを行い、実際の操作APIはドライバが提供する