概要
情報技術の基礎として理解しておきたいOSとミドルウェアについて、OSの機能、ジョブ管理、タスク管理、スケジューリング、記憶管理、ミドルウェアを整理する。
OSは、ハードウェア資源を管理し、アプリケーションが動作する土台を提供する。
タスク、メモリ、入出力、ファイルなどをどう管理するかを理解すると、プログラム実行時の挙動を追いやすくなる。
この記事の構成
- OSの機能
OS(Operating System)とは、コンピュータシステムを動作させるための基盤となるシステムのこと。 - ジョブ管理の制御
複数ジョブの実行状態とジョブ単位の実行状態を制御。 - タスク管理の制御
タスクの生成、 実行、 消滅状態を制御。 - タスクスケジューリング
タスクの実行順については、次の代表的なスケジューリング方式で分類される。 - リアルタイムOS(RTOS)
リアルタイムOSは、定められた時間制約の中で処理を完了できるようにタスクを管理するOSで、優先度付きプリエンプティブ方式などがよく用いられる。 - 主記憶装置と補助記憶装置のデータ連携
データ管理部で制御される主記憶装置と補助記憶装置へのデータ連携方法。 - プログラム実行時の記憶管理
プログラム実行時は、プログラム単位で次の記憶領域が確保される。 - ミドルウェア
ミドルウェアとは、OSとアプリケーションソフトの中間的な処理を担うソフトウェアのことで、WEBサーバー、APサーバー、DBサーバーなどがある。
OSの機能
OS(Operating System)とは、コンピュータシステムを動作させるための基盤となるシステムのこと。
OSを基盤として、ミドルウェアがあり、その上でその他のアプリケーションソフトが動作している。
PC起動直後にOSが自動起動し、必要なプログラムを起動する一連の流れをブートまたはブートストラップという。
OSは、アプリケーションプログラムを同時実行する際のリソースを管理し、利用効率を高くするため、次の管理機能をもっている。
-
ジョブ管理
ジョブは、動かすための要素となるジョブステップ(プログラムやバッチなどの処理)から構成され、ジョブステップごとに管理される。
→ ジョブ管理の制御 -
タスク管理
プロセスはOSが資源を管理するプログラムの実行単位で、一つ以上のスレッドを持つ。
スレッドはCPUが実行を切り替える単位となり、単一CPUコアでは一時点に原則一つの実行スレッドを処理。複数コアでは、複数のスレッドを並列に実行できる。
→ タスク管理の制御 -
記憶管理
プロセスごとに仮想アドレス空間を提供し、必要なページを主記憶装置へ配置。主記憶に置けないページは、必要に応じて補助記憶装置上の領域へ退避する。
仮想記憶は、単に主記憶の容量不足を補うだけでなく、プロセス間の分離や連続したアドレス空間の提供にも使われる。補助記憶装置について
→ 主記憶装置と補助記憶装置のデータ連携 -
データ/入出力管理
データ管理は補助記憶装置へのアクセスを管理し、入出力管理は入出力装置へのアクセスを行う。
また、スプーリングではプリンタなどへの入出力データをいったん補助記憶装置上の待ち行列へ保存し、低速な装置の処理完了を待たずにプログラムを進められる。
ジョブ管理の制御
複数ジョブの実行状態とジョブ単位の実行状態を制御する。
メインフレーム(大型汎用機)では、OSに組込まれており、JCL(Job Control Language)というジョブ制御用のスクリプト言語を使用して、バッチ処理やプロセス起動などを制御している。
タスク管理の制御
タスクの生成、実行、消滅状態を制御する。
タスク生成後の実行では、以下実行可能状態、実行状態、待ち状態の3つの状態で管理する。
-
実行可能状態
タスクが生成されると実行可能状態となり、CPUに空きができると実行状態に移る。 -
実行状態
実行状態に移ると即タスク実行される。そのまま実行が完了した場合、タスクが消滅し処理を終える。
実行中に入出力が必要な処理など、CPU以外を使用する処理に入った場合は待ち状態に移る。また、タイムクォンタム(タスク別に与えられるCPU時間でタスクを切替える時間)を使い切るか、実行状態のタスクを中断させるプリエンプションが発生した場合は実行可能状態に戻る。
-
待ち状態
待ち状態に移り、入出力が完了すると再度実行可能状態に移る。
タスクスケジューリング
タスクの実行順については、次の代表的なスケジューリング方式で分類される。
-
到着順方式
実行可能状態になったタスクを到着順で処理する方式でFIFO(First In First Out)またはFCFS(First Come First Served)とも呼ばれる。 -
処理時間順方式
処理時間の短いタスクから順に処理する方式でSPT(Shortest Processing Time first)とも呼ばれる。 -
優先度順方式
タスクに優先度を設定し、優先度順に処理する方式。 -
ラウンドロビン方式
各タスクに同じタイムクォンタムを割当て、一定時間ごとに処理する方式。 -
プリエンプション方式(プリエンプティブ方式)
タスクに優先度を持たせた状態で処理しつつ、優先度が高いタスクが実行可能状態になるとプリエンプションを発生させ、順に処理していく方式。 -
多段フィードバック待ち行列
優先度を持つ待ち行列から優先度が高い行列順に順次処理していく方式。
低い優先度で長時間待っているタスクの優先度を上げたり、一度実行したタスクの優先度を下げるなどのフィードバック調整を行う。 -
イベントによるタスク切替え
割込みや入出力完了などのイベントにより高優先度タスクが実行可能になると、プリエンプティブ方式では実行中のタスクを中断して切り替える。
リアルタイムOS(RTOS)
リアルタイムOSは、定められた時間制約の中で処理を完了できるようにタスクを管理するOSで、優先度付きプリエンプティブ方式などがよく用いられる。RTOSによっては協調的なタスク切替えも選択できる。
時間制約を守ることが最優先されるため、リアルタイム性が要となる産業ロボットや輸送機械など、主に組み込み機器向けのOSとして使用されている。
主記憶装置と補助記憶装置のデータ連携
データ管理部で制御される主記憶装置と補助記憶装置へのデータ連携方法。
-
オーバーレイ方式
主記憶装置の容量を超えるプログラムを実行するための仕組み。
同時には使用しない部分を複数のセグメントに分け、同じ主記憶領域へ必要な部分だけを入れ替えて読み込む。ファーストフィット方式やベストフィット方式は、可変長の空き領域を割り当てる別の手法となる。ファーストフィット方式、ベストフィット方式について
→ 応用情報技術 - メモリとバス > 記憶領域の管理方式 -
スワッピング方式
プログラムを読み込む領域が主記憶装置に不足している場合、実行に影響しないプログラムを補助記憶装置に退避させる仕組み。
補助記憶装置に退避させることをスワップアウト、主記憶装置に戻すことをスワップインという。 -
ページング方式
仮想アドレス空間を固定長のページに分け、主記憶側も同じ大きさのページ枠として管理する方式。
主記憶上のページを補助記憶装置へ退避することをページアウト、必要なページを主記憶へ読み込むことをページインという。
アクセスしたページが主記憶上にないときに発生する例外をページフォールトという。実メモリ不足などによりページフォールトとページイン・ページアウトが過度に繰り返され、実際の処理がほとんど進まない状態をスラッシングという。仮想記憶方式には、上記のページング方式(固定長ページ管理)と、セグメント方式(可変長区画管理)があり、現代の多くのOSではページング方式が用いられている。代表的なページ置換アルゴリズムには次の種類がある。
- FIFO(First In First Out)方式
ページインした順にページアウトさせる方式(先入れ先出し)。 - LRU(Least Recently Used)方式
最後の使用から最も時間が経過したページから順にページアウトさせる方式。 - LFU(Least Frequently Used)方式
使用頻度が低いページから順にページアウトさせる方式。
- FIFO(First In First Out)方式
プログラム実行時の記憶管理
プログラム実行時は、プログラム単位で次の記憶領域が確保される。
-
テキスト領域
プログラム本体を格納する領域。 -
静的領域
グローバル変数や静的変数を格納する領域。 -
スタック領域
関数呼出しに伴う戻り先アドレス、引数、ローカル変数などを格納する領域。実際に何をスタックへ置くかは、処理系や呼出し規約によって異なる。 -
ヒープ領域
プログラム内で動的に確保したデータを格納する領域で、メモリ確保命令(インスタンス生成命令)により確保される。
※ 手動でメモリを管理する言語では不要になった領域を解放しないと、メモリリークが発生。ガベージコレクションを備えた言語でも、不要な参照を保持し続けるとメモリを解放できない場合がある。
ミドルウェア
ミドルウェアとは、OSとアプリケーションソフトの中間的な処理を担うソフトウェアのことで、WEBサーバー、APサーバー、DBサーバーなどがある。
以下、ミドルウェアを含め、OSとアプリケーションを支える代表的なソフトウェアやインターフェース。
-
API(Application Programming Interface)
アプリケーションをプログラムするためのインターフェースのこと。
Webサイトで外部連携するAPIをWebAPIという。 -
シェル
ユーザー指示をコマンドで受付け、プログラム制御やOSの中核であるカーネルを呼出す役割も持つ。 -
デーモン
Unix系(UNIX、Linux、macOSなど)で、バックグラウンドに常駐してサービスを提供するプロセス。名称の末尾に「d」を付ける慣習があるが、すべてのデーモンに当てはまるわけではない。- 例:システムログを扱う syslogd、プリンタを管理する lpd、サーバー管理の httpd など。
-
開発フレームワーク
システム開発を効率化するために標準化した枠組みのことで、例えばWebアプリケーションフレームワーク(Apache Struts、Ruby on Rails など)がある。 -
分散処理技術
大規模データを複数のサーバ上に分散し、処理する技術のこと。
この分散処理を実現するためにソフトウェアフレームワークがあり、その代表的なものにオープンソースのApache Hadoopがある。
まとめ
- OSはCPU、メモリ、入出力、ファイルなどの資源を管理。
- ジョブは利用者から見た仕事の単位、タスクはOSが管理する実行単位。プロセスは資源を持つ単位、スレッドはプロセス内の実行単位。
- タスク管理では、実行可能、実行中、待ちなどの状態遷移を扱い、スケジューリング方式によってCPUを割り当てる順序を決める。
- ページングはページ単位でメモリを管理し、スワッピングは主記憶と補助記憶の間で処理内容を退避・復帰する。
- RTOSは決められた時間内に応答することを重視する。
- ミドルウェアはOSとアプリケーションの間で、複数のアプリケーションが利用する共通機能を提供する。