OS
■ OS。Operating System。 OSの主たる役割は以下の2点である。 (1) タスク管理 CPUの処理能力をアプリケーションに配分する。 (2) メモリ管理 メモリ(主記憶)の記憶空間を効率的に使用する。 ■ タスク OS側から見た仕事の実行単位のこと。 ■ マルチタスク環境。 CPUの処理時間を非常に短い間隔で区切り、 複数のタスクがこれを交互に使用することで、 1台のコンピュータ上で複数のプログラムが並行処理する環境。 現在のOSの多くは、マルチタスクOSである。 ■ タスクの状態遷移。 マルチタスク環境においては、 各タスクは、以下のように3つの状態を遷移しながら実行される。 ■ タスク管理の方法 (1) タスク管理の方法には、 プリエンプティブ方式とノンプリエンプティブ方式の2種類がある。 (1) プリエンプティブ方式。 CPUの実行権限をすべてOSが管理する方法。 OSがハードウェアタイマーを監視しながら、 CPUの処理能力を個々のプログラムに割り当てる。 現在のOSのほとんどがこの方式になっている。 (2) ノンプリエンプティブ方式。 処理の切り替えが、個々のアプリケーションに任されている方式。 実行中の各アプリケーションが、 自分が処理を行わない空き時間を自発的に開放することで、 他のアプリケーションと共存する。 ■ タスク管理の方法 (2) プリエンティブ方式のタスク管理は、 イベントドリブン方式とタイムスライス方式の2種類がある。 (1) イベントドリブン方式。 タスクの状態変化をトリガとしてスケジューリングする方式。 イベントドリブン方式では、入出力完了やコマンドの入力など、 イベントの発生を機にスケジューリングを行うので、 優先順位の高いタスクに適用すると効果的である。 (2) タイムスライス方式。 一定時間ごとに区切って、タスクを順番に切り替えて実行する方式。 タイムスライス方式では、処理開始までに遅延時間があることから、 優先順位の低いタスクに適用することが多い。 ■ タスク管理の方法 (3) タスクの優先順位は CPUバウンドのタスクとI/Oバウンドのタスクで異なる。 (1) CPUバウンドのタスク。 CPUの処理時間が多く、入出力にかかる時間がすくないタスク。 CPUバウンドのタスクに高い優先順位を与えてしまうと、 CPUを自ら離すことが少ないので、CPUを占有する状態になりやすい。 このため、CPUバウンドのタスクには低い優先順位を与え、 CPU時間を他のタスクに渡すようにする。 (2) I/Oバウンドのタスク。 入出力にかかる時間が多く、CPUの処理時間が少ないタスク。 I/Oバウンドのタスクは、CPU時間を与えられても、 入出力処理が必要になれば自らCPUを離すので、 高い優先順位を与えてもCPUを占有することがない。 ■ 優先度逆転。Priority Inversion。 優先順位の高いタスクが、 優先順位の低いタスクの処理結果を利用して計算する場合に やむを得ず、低順位のタスクに資源を譲り、 そのタスクが処理を終了して占有資源を解放するのを待つことがある。 もしもこのとき、両者の実行しているプロセスとは関係がないが、 中間の優先順位を持つタスクが存在し、同じ資源を要求していると、 当然このタスクが実行され、最低順位のタスクは一時中断される。 この結果、最高順位のタスクが、中間順位のタスクの処理時間分だけ、 さらに余分に待たなければならなくなる。 これを優先度逆転現象という。 ■ 優先度継承。Priority Inheritance。 優先度逆転が起こらないようにするための同期手法。 高優先順位タスクが低順位タスクの処理待ちをするとき、 低順位タスクの優先順位を、一時的に依頼側の高順位タスクと同一に引き上げること。 こうすることで、同じ資源を要求する中間順位のタスクが存在しても、 資源はこのタスクに移らないようになる。 もちろん、低順位タスクが処理を終えて資源を解放し、 資源が依頼元の高順位タスクに引き継がれたならば、 その時点で、低順位タスクは元の優先順位に戻される。 ■ メモリ管理。 メモリ(主記憶)を効率的に使用すること。 また、メモリの容量を補う機能を実現すること。 ■ フラグメンテーション。Fragmentation。 OSがメモリ領域の割当てと解放を繰り返すことによって、 メモリ上にコマ切れの未使用領域が多数できてしまうことを、 フラグメンテーションという。 フラグメンテーションを解消するために、 一定期間ごとにメモリの再配置を行うこと、 すなわち、未使用領域を解消してプログラムを連続した領域に集めることを、 リロケーション(Relocation)、またはコンパクション(Compaction)と呼ぶ。 ■ メモリリーク。Memory Leak。 アプリケーションプログラムによって動的に獲得されたメモリ領域が、 当該プログラムの不具合や異常終了などが原因で、 処理終了時に開放されずに残ってしまい、 システムで利用できなくなる現象のこと。 メモリリークが進行すると、 有効なメモリ容量が不足して、システムの動作が不安定になり、 システムダウンにつながることもある。 ■ 動的リンキング。Dynamic Linking。 さまざまなプログラムが共通で使う汎用的なプログラム部品を集めておき、 プログラムを実行している最中に、 必要となるプログラム部品にそのたびごとにリンクして、 メモリに呼び込むこと。 これに対して、プログラムの実行に先立って必要なプログラム部品をリンクしておき、 メモリに一括して読み込む方法を、静的リンキングと呼ぶ。 静的リンキングでは、メモリの使用量が大きくなる Windowsにおける拡張子.dllのファイルは、 この動的リンクライブラリ(DLL)である。 プログラムが必要なDLLファイルをリンクすることで、 DLLファイルの機能を利用することができる。 参考URL http://www.k-support.gr.jp/words/taG/ta-dynamiclinking.htm ■ 仮想メモリ。Virtual Memory。 メモリの内容を一時的に待避させておくために、 ハードディスク上に設けた専用の領域を、スワップ(Swap)ファイルと呼ぶ。 仮想メモリ方式では、 このスワップファイルがあたかもメモリの一部であるかのように扱うことで、 実際のメモリ容量を超えたメモリアクセスを可能にする。 なお、スワップファイルの内容を入れ替える動作を、スワップといい、 とくにメモリ(実記憶)からスワップに書き出すことをスワップアウト、 スワップからメモリ(実記憶)に書き戻すことをスワップインと呼ぶ。 ただし、ハードディスクはメモリよりずっと低速なので、 スワップ動作が頻繁に起こると、全体の処理速度は低下する。 ■ セグメント方式。Segmentation。 仮想メモリを実現する方式の1つ。 1つのプログラムを、メインルーチンやサブルーチンなどの 論理的に意味のある構成要素(セグメント)に分割して、 メモリ(実記憶)と仮想メモリの間で交換する方式。 セグメント方式では、 メモリ上または仮想メモリ上の区画単位が可変長となるため、 フラグメンテーションが発生する。 ■ ページング方式。Paging。 仮想メモリを実現する方法の1つ。 1つのプログラムを、 論理的に意味のない決められた大きさ(ページ)に区切って これをメモリ(実記憶)と仮想メモリの間で交換する方式。 メモリ上のページを入れ替える動作をページングといい、 とくに、不要なページをスワップに書き出すことをページアウト、 逆に必要なページをスワップから読み込むことをページインと呼ぶ。 ページング方式は、メモリや仮想メモリ上の区画単位が固定長のため、 記憶領域の利用効率が高くなる。 ■ ページの置き換え。Page Replacement。 もしも、プログラムの実行に必要なページがメモリになければ、 メモリ上のページをページアウトして、 必要なページをページインする必要がある。 このとき、ページアウトの対象となるページを選択するための アルゴリズムには以下の3種類がある。 (1) FIFO。First in First out。 最初にページインしたページから順にページアウトすること。 (2) LFU。Least Frequently Used。 最も参照頻度の少ないページをページアウトすること。 (3) LRU。Least Recently Used。 最も長い間参照されていないページをページアウトすること。 ■ スラッシング。Thrashing。 システムに多量のタスクを投入した結果、メモリ容量が大幅に不足し、 メモリ(実記憶)と仮想メモリの間で、ページの書き換えが頻発している状態を スラッシングという。 スラッシング状態では、 CPUの処理能力のほとんどがページイン/ページアウト処理に使われてしまい、 アプリケーションプログラムの処理が滞るため、 システムの性能は極端に低下する。 以上。 2004/03/10 pm