概要
情報技術の基礎として理解しておきたい OSとミドルウェア について、OSの機能、ジョブ管理、タスク管理、スケジューリング、記憶管理、ミドルウェアを整理する。
タスクが動けない理由を状態遷移で分け、短い仕事と長い仕事の完了時刻を比較する。仮想アドレスの変換とページ置換も具体的な番地や参照列で追う。
この記事の構成
- OSの機能
OS(Operating System)とはコンピュータシステムを動作させるための基盤となるシステムのこと。 - ジョブ管理の制御
複数ジョブの実行状態とジョブ単位の実行状態を制御。 - タスク管理の制御
タスクの生成、 実行、 消滅状態を制御。 - タスクスケジューリング
5秒と1秒の仕事を並べ、方式による完了時刻と公平性の違いを比較。 - リアルタイムOS(RTOS)
リアルタイムOSは定められた時間制約の中で処理を完了できるようにタスクを管理するOSで、優先度付きプリエンプティブ方式などがよく用いられる。 - 主記憶装置と補助記憶装置のデータ連携
アドレス変換と置換順序を計算し、ページ表・FIFO・LRUの働きを確認。 - プログラム実行時の記憶管理
プログラム実行時はプログラム単位で次の記憶領域が確保される。 - ミドルウェア
ミドルウェアとはOSとアプリケーションソフトの中間的な処理を担うソフトウェアのことで、WEBサーバー、APサーバー、DBサーバーなどがある。
OSの機能
OS(Operating System)とはコンピュータシステムを動作させるための基盤となるシステムのこと。
OSを基盤としてミドルウェアがあり、その上でその他のアプリケーションソフトが動作している。
PC起動直後にOSが自動起動し、必要なプログラムを起動する一連の流れをブートまたはブートストラップという。
OSはアプリケーションプログラムを同時実行する際のリソースを管理し、利用効率を高くするため、次の管理機能をもっている。
-
ジョブ管理
ジョブは動かすための要素となるジョブステップ(プログラムやバッチなどの処理)から構成され、ジョブステップごとに管理される。
→ ジョブ管理の制御 -
タスク管理
プロセスはOSが資源を管理するプログラムの実行単位で、一つ以上のスレッドを持つ。
スレッドはCPUが実行を切り替える単位となり、単一CPUコアでは一時点に原則一つの実行スレッドを処理。複数コアでは複数のスレッドを並列に実行できる。
→ タスク管理の制御 -
記憶管理
プロセスごとに仮想アドレス空間を提供し、必要なページを主記憶装置へ配置。主記憶に置けないページは必要に応じて補助記憶装置上の領域へ退避する。
仮想記憶は単に主記憶の容量不足を補うだけでなく、プロセス間の分離や連続したアドレス空間の提供にも使われる。補助記憶装置について
→ 主記憶装置と補助記憶装置のデータ連携 -
データ/入出力管理
データ管理は補助記憶装置へのアクセスを管理し、入出力管理は入出力装置へのアクセスを行う。
また、スプーリングではプリンタなどへの入出力データをいったん補助記憶装置上の待ち行列へ保存し、低速な装置の処理完了を待たずにプログラムを進められる。
ジョブ管理の制御
複数ジョブの実行状態とジョブ単位の実行状態を制御する。
メインフレーム(大型汎用機)ではOSに組込まれており、JCL(Job Control Language)というジョブ制御用のスクリプト言語を使用して、バッチ処理やプロセス起動などを制御している。
タスク管理の制御
タスクの生成、実行、消滅状態を制御する。
タスク生成後の実行では以下実行可能状態、実行状態、待ち状態の3つの状態で管理する。
-
実行可能状態
タスクが生成されると実行可能状態となり、CPUに空きができると実行状態に移る。 -
実行状態
実行状態に移ると即タスク実行される。そのまま実行が完了した場合、タスクが消滅し処理を終える。
実行中に入出力が必要な処理など、CPU以外を使用する処理に入った場合は待ち状態に移る。また、タイムクォンタム(タスク別に与えられるCPU時間でタスクを切替える時間)を使い切るか、実行状態のタスクを中断させるプリエンプションが発生した場合は実行可能状態に戻る。
-
待ち状態
待ち状態に移り、入出力が完了すると再度実行可能状態に移る。
-
CPUを譲った理由によって移る状態が違う
実行中のタスクがディスクの読み込み完了を待つなら、待ち状態に移る。その間はCPUを割り当てられても必要なデータがないため、処理を続けられない。入出力が終わると実行可能状態へ戻り、CPUの割当てを待つ。これに対して割り当て時間を使い切ってCPUを譲ったタスクは、通常は実行可能状態へ戻る。必要なデータを待っているわけではない。どちらも画面上では「動いていない」ように見えるが、再開に必要な条件が異なる。
タスクスケジューリング
タスクの実行順については次の代表的なスケジューリング方式で分類される。
-
到着順方式
実行可能状態になったタスクを到着順で処理する方式でFIFO(First In First Out)またはFCFS(First Come First Served)とも呼ばれる。 -
処理時間順方式
処理時間の短いタスクから順に処理する方式でSPT(Shortest Processing Time first)とも呼ばれる。 -
優先度順方式
タスクに優先度を設定し、優先度順に処理する方式。 -
ラウンドロビン方式
各タスクに同じタイムクォンタムを割当て、一定時間ごとに処理する方式。 -
プリエンプション方式(プリエンプティブ方式)
OSが実行中のタスクを中断し、別のタスクへCPUを割り当てる方式。高優先度タスクの実行可能化だけでなく、ラウンドロビンの時間片の終了による切替えもプリエンプションの例になる。 -
多段フィードバック待ち行列
優先度を持つ待ち行列から優先度が高い行列順に順次処理していく方式。
低い優先度で長時間待っているタスクの優先度を上げたり、一度実行したタスクの優先度を下げるなどのフィードバック調整を行う。 -
イベントによるタスク切替え
割込みや入出力完了などのイベントにより高優先度タスクが実行可能になると、プリエンプティブ方式では実行中のタスクを中断して切り替える。
-
短い仕事をどこまで待たせるかを時系列で比較する
時刻0にCPUを5秒使うAと1秒使うBがこの順で到着したとする。入出力待ちと切替えコストは無視する。方式 実行順序 Aの完了時刻 Bの完了時刻 平均ターンアラウンド時間 FCFS Aを0〜5秒、Bを5〜6秒 5秒 6秒 5.5秒 ラウンドロビン(時間片1秒) Aを0〜1秒、Bを1〜2秒、残りのAを2〜6秒 6秒 2秒 4秒 処理時間の短い順 Bを0〜1秒、Aを1〜6秒 6秒 1秒 3.5秒 すべての仕事が終わる時刻は6秒でも、Bが結果を受け取る時刻は異なる。短い仕事を優先する方式には処理時間の見積りが必要で、長い仕事が待たされ続ける問題もある。平均値だけでなく、公平性や応答の速さも選択条件になる。
リアルタイムOS(RTOS)
リアルタイムOSは定められた時間制約の中で処理を完了できるようにタスクを管理するOSで、優先度付きプリエンプティブ方式などがよく用いられる。RTOSによっては協調的なタスク切替えも選択できる。
時間制約を守ることが最優先されるため、リアルタイム性が要となる産業ロボットや輸送機械など、主に組み込み機器向けのOSとして使用されている。
-
平均が速いことと期限を守れることは異なる
仮に10 ms以内の応答が必要な処理で、平均1 msだが負荷によって12 msかかる方式と、平均8 msで想定条件下の最大値が9 msに収まる方式を比較する。平均では前者が速いが、期限の条件を満たすのは後者である。リアルタイム性を考えるときはCPUの計算だけでなく、優先度の高い処理による待ち、ロック待ち、割込み処理なども含めて期限を評価する。「リアルタイム」という言葉は単に高性能・低遅延という意味ではない。
主記憶装置と補助記憶装置のデータ連携
データ管理部で制御される主記憶装置と補助記憶装置へのデータ連携方法。
-
オーバーレイ方式
主記憶装置の容量を超えるプログラムを実行するための仕組み。
同時には使用しない部分を複数のセグメントに分け、同じ主記憶領域へ必要な部分だけを入れ替えて読み込む。ファーストフィット方式やベストフィット方式は可変長の空き領域を割り当てる別の手法となる。ファーストフィット方式、ベストフィット方式について
→ 応用情報技術 - メモリとバス > 記憶領域の管理方式 -
スワッピング方式
プログラムを読み込む領域が主記憶装置に不足している場合、実行に影響しないプログラムを補助記憶装置に退避させる仕組み。
補助記憶装置に退避させることをスワップアウト、主記憶装置に戻すことをスワップインという。 -
ページング方式
仮想アドレス空間を固定長のページに分け、主記憶側も同じ大きさのページ枠として管理する方式。
主記憶上のページを補助記憶装置へ退避することをページアウト、必要なページを主記憶へ読み込むことをページインという。
アクセスしたページが主記憶上にないときに発生する例外をページフォールトという。実メモリ不足などによりページフォールトとページイン・ページアウトが過度に繰り返され、実際の処理がほとんど進まない状態をスラッシングという。仮想記憶方式には上記のページング方式(固定長ページ管理)とセグメント方式(可変長区画管理)があり、現代の多くのOSではページング方式が用いられている。代表的なページ置換アルゴリズムには次の種類がある。
- FIFO(First In First Out)方式
ページインした順にページアウトさせる方式(先入れ先出し)。 - LRU(Least Recently Used)方式
最後の使用から最も時間が経過したページから順にページアウトさせる方式。 - LFU(Least Frequently Used)方式
使用頻度が低いページから順にページアウトさせる方式。
- FIFO(First In First Out)方式
-
ページ番号とページ内の位置を分けてアドレスを変換する
ページサイズが4 KiB、すなわち4096 byteなら、仮想アドレス9000は \(9000=2\times4096+808\) と分けられる。仮想ページ番号は2、ページ内の位置は808になる。ページ表が仮想ページ2を物理フレーム5へ対応させていれば、物理アドレスは \(5\times4096+808=21288\) となる。対応表で変わるのはページの置き場所で、ページ内の位置808は変わらない。
ページが現在主記憶にない場合は、その理由に応じたページフォールト処理が必要になる。ただし、無効な領域へのアクセスなら、読み込んで続行できるとは限らない。
-
FIFOとLRUが別のページを追い出す例
保持できるページを2枚とし、最初は空で、A→B→A→Cの順に参照する。AとBを読み込んだ後のAへの参照はヒットになる。Cを入れるとき、FIFOは「先に入ったA」を追い出す。LRUは「最後に参照された時刻が古いB」を追い出す。FIFOの順序はヒットしても変わらないが、LRUはヒットしたことも次の判断に反映する。両者が管理する「古さ」は投入時刻と最終参照時刻という別の情報である。
プログラム実行時の記憶管理
プログラム実行時はプログラム単位で次の記憶領域が確保される。
-
テキスト領域
プログラム本体を格納する領域。 -
静的領域
グローバル変数や静的変数を格納する領域。 -
スタック領域
関数呼出しに伴う戻り先アドレス、引数、ローカル変数などを格納する領域。実際に何をスタックへ置くかは処理系や呼出し規約によって異なる。 -
ヒープ領域
プログラム内で動的に確保したデータを格納する領域で、メモリ確保命令(インスタンス生成命令)により確保される。
※ 手動でメモリを管理する言語では不要になった領域を解放しないと、メモリリークが発生。ガベージコレクションを備えた言語でも、不要な参照を保持し続けるとメモリを解放できない場合がある。
ミドルウェア
ミドルウェアとは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とアプリケーションの間で複数のアプリケーションが利用する共通機能を提供する。
- 実行可能状態と待ち状態は再開の条件が異なる。スケジューリングは平均時間と公平性、ページ置換は投入順と最終参照時刻の違いに着目して比べる。