オペレーティングシステム入門
Last updated
Was this helpful?
Last updated
Was this helpful?
3.0 時間
この本は読んだことがある。基本的な OS の機能は知っている。
OS の概要を再確認し、OS がどのようなものなのか基本的なことを説明できるようになる
読書メモ
OS とはソフトウェアを動かすためのソフトウェア
資源の仮想化
CPU、主記憶装置、入出力装置の仮想化
プロセッサ -> プロセス(タスク、スレッド)
主記憶 -> 仮想記憶
2次記憶装置 -> ファイル、ディレクトリ(フォルダ)
通信装置 -> ソケット
ディスプレイ -> ウィンドウシステム
資源の効率的利用
高価なハードウェア資源の無駄を減らし、利用者の利便性を高めること
時分割
資源の割り当てを時間軸上で分割して、分割した単位ごとに割り当てる方法
TSS
空間分割
記憶を保持する空間を細かい単位に分割し、データの連続性などの制約を解消
オンデマンド
資源の割り当ての観点から本当に必要になったときに必要な量を割り当てることが望ましい
またアプリケーションは資源の割り当てから分離することが望ましいため、OS で割り当てる
実行時のプログラム、計算機システムの挙動を監視し、複数のプログラムの実行を考慮した上で動的に資源をアプリケーションに割り当てる
保護、セキュリティ
ハードウェアの独立性を確保するためには、アプリケーションからの計算機資源の操作を制限する必要がある
CPUと入出力はアプリケーションからの操作を制限
主記憶は不当なアクセスを検知、防御する機能をハードウェアと連携しながら実現している
認証情報を元に、ファイル操作、プログラム実行、各種資源の利用権限の正当性チェックを行う
OS はアプリケーションを実行するためにCPU、主記憶、入出力装置の資源を仮想化して実行環境を提供
実行環境はプロセス、タスク
アプリケーションの実行はプロセスまたはタスクとして実行
プロセスは、仮想化されたCPU、主記憶、ファイルやソケットのような入出力を利用可能
プロセス上のプログラムはCPUアーキテクチャの命令語とデータで構成され、ストアードプログラム方式に従ってプログラムが実行される
実計算機上に複数の独立師の仮想的な実行環境が提供されている
マルチプロセスのOS
仮想化された計算機は、OSのAPIとしてアプリケーションに提供されている
OSのAPIのことをシステムコールと呼び、仮想的な計算機へのプログラムインターフェースを提供する
OSのシステムコールはハードウェア資源の利用に関するもの
システムコールの仕様に基づいてプログラミングすることでアプリケーションを特定のハードウェアから独立させることができる
システムコールの具体的な仕様はOSごとに異なる
実行基盤はOSに依存する
システムコールの種類
プロセスに関するシステムコール
仮想的な実行環境の作成、消滅を行う
主記憶に関するシステムコール
メモリの確保、ファイルの主記憶への写像などの提供
入出力に関するシステムコール
ファイルのオープン、入出力、属性取得、ネットワークの接続、送受信などの機能を提供する
システムコール
アプリケーションを開発するプログラマからは OS のシステムコールもライブラリも同じ用に見える
OSのシステムコールは言語Cなどの高水準言語では関数として記述され、ライブラリ中の関数呼出しやサブルーチン呼出しと区別なく記述される
アセンブリ言語レベルでは、システムコールはサブルーチン呼出しではなく、OS呼出しの命令語(システムコール命令など)により実行される
プロセスからはOSの管理する資源、または他のプロセスが利用している資源を保護するため
プログラミングシステムの階層とOSの構造
ソフトウェアを実行するためのプログラミングシステムは階層構造になっている
対象を仮想化、論理化することで物理的特性を抽象化し、特定のハードウェアに依存しない体型を構築することが計算機科学・工学の大きな特徴の一つ
層と層の間にはインターフェースが存在する
同一層内では、機能ごとに分割して開発・運用・保守を容易にする
プログラム内を機能単位ごとに分割することはモジュール化と呼ぶ
アプリケーションでもOSでもモジュール化は必須で有用
OSを動作させるためにハードウェアからのサポートが不可欠
OSが前提とするハードウェアアーキテクチャの代表的な支援
割り込みと例外処理
実行モード
アドレス変換
入出力における完了判定をビジーウェイトで実装すると、リソースが無駄であり、煩雑になる
スロアードプログラム型の計算の思考は、CPU内のプログラムカウンタによって命令語を逐次読み込み、命令語を解釈して実行する
割り込みによって実行順序の系列を外部要因に基づいて不確定的に変更する
割り込みされたときにプログラムのPCをレジスタまたは主記憶に保存しておき、割り込み処理の終了時にPCに戻すことで処理を再開する
入出力処理を割り込み処理とすることでプログラム本体から入出力処理を独立にできる
CPUの処理と入出力処理を並行に行うことで計算機の利用率向上につながる
割り込みの実現方法
割り込みは入力データの到着や出力データの転送完了のフラグに該当する信号線をCPUに対して割り込みを発生させる指示として用いる
CPUが電気的に線を監視し、状態が変化すると実行系列を変更する
ハードウェアの大幅なコスト増加にはならない
命令語として割り込みの命令が増える
CPUでソフトウェアのエラーを例外処理として検出し、割り込みと等価な処理を行うことができる
実行機構上は割り込みと同じ
検出される代表的な要因
算術演算のオーバーフロー
不当なメモリ、実行されていないメモリのアクセス
存在しないビットパタンを命令語として実行
不当な命令語の実行
保護の目的から実行モードがある
ストアードプログラム型の計算機アーキテクチャの原型には、保護は考慮されていなかった
すべてのプログラムが、すべてのハードウェア資源を等しく操作できる
保護・保全の実現の基礎はアクセス制御で、正当な利用者に対して適切なアクセス権限を定義することが最も基礎的
資源管理を行い、ハードウェアを操作する特権的なプログラム(特権モード)
OS
資源管理や入出力処理を行わず、計算などの処理を行うプログラム(ユーザモード)
アプリケーション
実行モードは、CPU内の1ビットのレジスタとして実現されている
実行モードや演算結果の状態を格納したレジスタをPSW)Program Status Word)と呼ぶことがある
システムコール命令は、特定アドレスのプログラムを呼び出すだけでなく、実行モードがシステムコール命令により変化する
OSの処理後は実行モードをユーザモードに戻す
割り込みや例外処理も同様
メモリ管理
ストアードプログラム型の計算機アーキテクチャでは、命令語もデータも同じ形式で一緒に主記憶装置に格納することが前提
プログラムの実行も2つすべてが主記憶装置にあることが必要条件
主記憶は保護・保全でも重要な装置
ハードウェアの支援
主記憶のアドレス空間を実アドレス空間と仮想アドレス空間に分ける
仮想アドレス空間上の仮想アドレスは、ある形式に従って実アドレスに変換(アドレス変換)する
仮想アドレス空間は実行するプログラムごとに個別に定義する
プロセスはストアードプログラム型計算機のアーキテクチャを抽象化したプログラムの実行実体
プロセスは仮想化されたCPU、仮想化された主記憶、仮想化された入出力を持ち、ストアードプログラム型計算機の3第構成要素を仮想化したものになっている
ハードウェアからは独立している
一つの計算機上で複数のプロセスを同時に生成でき、実際のプロセッサ数よりも多くのプロセスが見かけ上同時に動作しているように見える計算環境をマルチプロセス環境と呼ぶ
マルチプロセスOS
見かけ上複数動作しているように見えるプロセスを並行プロセス、実際に同時に実行されるプロセスを並列プロセスと呼ぶことがある
複数のアプリケーションで共通の資源(ファイルへの書き込み、プリンタなど)を同時に利用する場合に正しい結果が得られないことがある
競合を回避するような枠組みが必要不可欠
並行プロセスの競合と強調を実現するための機能
同期
排他制御
プロセス間通信
複数のプロセスが強調して処理を進める場合、処理手続き上のある位置で、他のプロセスなどの計算の進行を一致させることを同期という
同期をとる位置は、プログラマが明示的に指示
wait といったシステムコールなど
同期によるプロセスの待ちが発生する
複数のプロセスが資源を共有している場合に、アプリケーションに適用可能な排他制御の枠組みが必要
不可分な処理の提供
処理が寸断されると不都合のある操作群
マルチプロセッサシステムでは、不可分な処理を提供する命令をCPUの命令セットに用意している
TAS(Test And Set)命令
際どい領域での実行可能プロセス数の限定
不可分な処理はプログラムのある連続した領域で、この領域を際どい領域という
OSは排他制御のシステムコールを提供している
プロセスでは排他制御のシステムコールを用いて、プロセス間での排他制御を行う
LOCKおよびUNLOCKシステムコールまたはPVセマフォのシステムコール
排他制御を行うときはビジーウェイトを起こすのではなく、CPU資源を消費しない方法を実現する
プロセスを待たせる際に、該当するプロセスを一時的に実行を中断し、他の実行可能なプロセスがあれば、そのプロセスを実行することでCPU資源を効率的に使用する
デッドロック
排他制御で二つの共有資源の獲得順序の誤りなど
プロセス間通信(IPC: Inter Process Communication)は、二つ以上のプロセスが協調するための手段をOSが提供
共有メモリ
二つ以上の間で主記憶を一部共有しデータの交換を行う
必要であれば排他制御を行う
Unix系ならmmapまたは共有メモリの機能が提供されている
主記憶を共有するので分散システムでは適用できない
仮想的な通信路
二つのプロセス間に、仮想的な通信路を形成し、その通信路を用いてデータの送受信を行う方式
データのやり取りと同期を行う
仮想通信路の本質は、メッセージ送受信にある
送信と受信するプロセスの間に仮想的な電線を形成し、メッセージとしてデータをやり取りする
手順はプロトコルとして確立する
メリット
プロセス間で資源を共有しないため、分散システムへの適用が容易
多種多様なプロセスと協調できる
共有メモリに比べてメモリに関するバグが発生しにくい
同期によりデータの到着などが判別できる
デメリット
データの保持はプログラマが明示的に記述する必要がある
データを共有しないため、二つのプロセスで情報を共有したい場合はプログラマが明示的に二つの情報の同一性を保証するために一貫性管理を行う必要があること
性能向上のためにプログラミングを工夫する必要がある
パイプ
同一計算機上のプロセス間の通信路
計算機資源の利用効率がよく、他の計算機からの侵入がないことからセキュア
実体はOS内に存在する主記憶
バッファである主記憶に、送信されたデータを順次蓄積し、受信側のプロセスはそのデータを読み出す
送受信はOSに対するシステムコールを実行する
ソケット
ソケットは計算機ネットワークで結合された計算機上で実行されているプロセスに対して、統一的かつ仮想的な通信路を提供する
仮想的な通信路を提供するとともに、通信ハードウェアの制御、TCP/IPなどの下部層のプロトコルを実行し、アプリケーションから実行を隠蔽する
通信エラーやデータの再送などは、OS内のプロトコルスタックが処理する
プロセッサの仮想化がプロセスだが、プロセスの基本的な着想はCPUを多重化すること
実在するCPUが一つだとしても、複数CPUがあるかのように見せかける技術の基礎が多重化
事象により実行するプログラムを切り替える
資源の時分割利用(TSS)
プログラムの状態
CPU内のレジスタの状態
PC、汎用レジスタ、PSWなど
主記憶上の機械語とデータ
入出力装置の実行状態
プログラム実行時のプロセッサの状態、特にCPU内のレジスタ小野値の集合をプロセッサコンテキストと呼ぶ
プロセスをプロセッサに割り当てて、実行する際は、主記憶上のプロセッサコンテキストの値をCPUに転送してプロセスを実行する
プロセスの実行を一時中断する場合は、CPU内のレジスタの値を主記憶上のプロセッサコンテキスト用の領域に書き戻す
プロセッサコンテキストをCPUと主記憶上の値で転送しあうことで、プログラム(プロセス)を切り替えて実行できる
プロセスの切り替えはOSが行う
プロセス切り替えは事象発生時に行う
マルチプロセスOSでは、ハードウェアによるタイマを用意し、一定時間経過後にタイマのハードウェアの割り込みを発生させ、必ずOSを起動するようにしている
タイマの割り込み周期をタイムクォンタム(time quantum)という
プロセス制御ブロック(Process Control Block: PCB)
プロセスの状態を表す情報、プロセッサコンテキスト、プロセスに割り当てられた主記憶の情報、プロセスが利用している入出力装置の情報
OSはPCBを操作することでプロセスの制御を行う