ここでいう基本ソフトウエアとは「広義のOS」であり、制御プログラム、汎用言語
プロセッサ、サービスプログラムを含む。
<OSの目的>
・スループット向上
・ターンアラウンドタイム、レスポンスタイム短縮
・使用環境、安全性の向上(PC、WS)
・操作性向上、システム資源の有効利用(メインフレーム)
それに対し、「狭義のOS」は制御プログラムのみのこと。
・ファイルシステム
ディスク上のファイル管理を行う。
・デバイスドライバ
入出力処理を行う。
・カーネル(スーパバイザ)
実行中プログラムからの要求(システムコール、スーパバイザコール)に対して
サービスを行う。ジョブ管理、タスク管理、記憶管理など。
◎OSの機能・種類・特徴
●Windows
Microsoft社のGUI OSのシリーズ名。
●Mac OS
Apple社のGUI OSのシリーズ名。
●UNIX
移植性の高いC言語で記述されたCUI OS。
●LINUX
UNIX互換のGUI OS。
◎プログラム制御
●リエントラント(再入可能)プログラム
同一の共有ルーチンが複数のタスクから同時に呼び出されても、それぞれのタスク
に対して正しい結果を返すことができるプログラム。変数をタスク単位に格納しな
ければならない。
●リカーシブ(再帰的)プログラム
プログラムルーチン内から自分自身のルーチンを呼び出しても正しく動作するプロ
グラム。
●リユーザブル(再利用可能)プログラム
一度実行した後、ロードし直さずに再び実行を繰り返しても、正しい結果が得られ
るプログラム。
●リロケータブル(再配置可能)プログラム
動的アドレスを変換して、任意の記憶領域に格納されたプログラムの格納位置を
別の任意の記憶領域(ベースレジスタ)に再配置できる。
※動的再配置
実行中のプログラムを主記憶の異なった領域で実行するために、実行中に新たな
絶対アドレスを割り当てる処理。
※スレッド
プロセス内部に含まれている論理的な並列処理の最小単位。
処理装置(CPU)の割り当てだけを受け、主記憶や補助記憶装置などは、親プロセスの
もの(アドレス空間)を共有する「軽量プロセス」。個別に主記憶などの資源を
割り当てなくてはならないプロセスを生成するよりも、スレッドのほうが資源の
利用効率が良く負荷も少ない。
逆に、CPUレジスタ郡の退避域、スタック領域、プログラムカウンタなどはスレッド
ごとに用意されている。
・マルチスレッド:複数のスレッドが並行して動作するもの
◎ジョブ管理
効率良く実行できるよう、ジョブの順序を制御すること。
ジョブ制御の機能により、プログラムが読み込まれ、実行が開始される。そして
「オープン命令が発行されるときに」ファイルなどのデータセットとの結び付けが
完了する。
ジョブってなに?
>ユーザー側から見た仕事の単位
◎タスク管理
それぞれのタスクのCPUタイムの割り当てを制御すること。
タスクってなに?
>マルチプログラミングにおける一つ一つの実行中プログラム。
プログラムがCPUタイムの割り当てを受ける単位。
●スケジューリングの種類
スケジューリングってなに?
>複数のタスクから実行させるべきタスクを選択すること。
「ディスパッチャ」というルーチンで制御している。
タスクディスパッチングってなに?
>タスクの切り替え。コンテキスト切り替えとも言う。
コンテキストってなに?
>タスクの内部状態、置かれた状況、与えられた条件など、
タスクの実行に必要な各種情報のこと
<タスク切り替えタイミング方式>
以下2つの方式は1つのシステムで共存してもよい。
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
○イベントドリブン方式
ハードウェア割り込みやユーザプログラム割り込みなど、状態遷移がトリガと
なって切り替わる。リアルタイム処理に適する。
▲▲▲▲▲▲▲▲
○タイムスライス方式
一定時間(タイムクォンタム)ごとに切り替わる。
<タスクの実行順位方式>
○FIFO(First In First Out:到着順)方式
要求された順番にCPU時間を割り当てる方式。
優先順位をつけない「ノンプリエンティブ方式。」
タスクの生成順ではなく実行可能となった順に実行される。
○ラウンドロビン方式
各プロセスを待ち行列に置かれた順にタイムクォンタムずつ処理し、
終了しないときは同じ優先順位の待ち行列の最後尾につなぐ。
▲▲▲▲▲▲
各タスクが公平にサービスされる長所があり、
TSS(タイムシェアリング)で用いられる方式。
OSに採用されているタスクスケジューリング方式。
○動的優先順位方式
優先度の高いタスクから処理を行う方式。
OSには不向きなタスクスケジューリング方式。
・SJF(Shortest Job First:短縮ジョブ優先)方式
指定された処理時間の短いタスクを先に実行する方式。
平均応答時間を最小にする意味がある。
・多重待ち行列(フィードバック待ち行列)方式
優先度順方式と同様、優先度毎に実行待ち行列を作成するが、
まず、優先度を高くし、CPUタイムを短く割り当て、
そのCPUタイムを使い切ると優先度を低くしCPUタイムを長くする。
▲▲▲▲▲▲▲
・エージング方式
実行時間を監視し、待ち時間が長くなると優先順位を高くする。
※プライオリティインヘリタンス
プライオリティバージョン(資源の割り当てが優先されているにもかかわらず
他のタスクに処理を譲る必要のある状態)を解消するため、使用中タスクの
優先順位を一時的に実行したいタスクと同じ優先順位とまで引き上げることで
優先順位の高いタスクが低いタスクに資源を奪われることを防ぐ。
●タスクの状態遷移
┌────→実行───────────→タスク消滅
タスク選出│┌────状態────┐入出力要求
切り替え ││ │
|│時間切れ※ │----P(S)(S<1)
|↓ ↓ ~~~~他のプロセスがリソースを
実行可能状態←──────待機状態 使用しているとき
↑ 入出力完了
│
タスク生成─┘ ※プリエンプション
・タイムクウォンタム終了(タイムスライス方式)
・イベントドブリン(イベントドリブン方式)(割り込み)
●タスク間通信(IPC:Inter-Process Communication)
複数プログラムが同時並行処理を行うときにタスクどうしで行うデータ受け渡し手段。
○共有ライブラリ
複数のタスクから参照・使用されるデータやルーチン。
動的リンキング(DLL:Dynamic Link Library)ってなに?
>タスク実行時に動的に共用ライブラリやシステムコールライブラリ(カーネル)の
モジュールをロードする。
○パイプファイル
複数タスクがデータの受け渡しを行うための擬似的な入出力ファイル。
○ルーチンコール
タスクを呼び出すこと。
RPC(Remote Procedure Call)
ネットワーク上で、別のコンピュータ上にあるタスクを呼び出すこと。
LPC(Local Procedure Call)
自コンピュータ上にあるタスクを呼び出すこと。
○ランデブ
タスク間通信のうち、「何かを依頼してその結果を受け取る」といった機能を実現
する場合に用いる。
○メールボックス
複数のタスク間でメッセージを交換するための仕組み。
○イベントフラグ
他のタスクから条件の成立したタスク全ての待ち状態を同時に解除できるタスク間
同期制御方式。
●割り込み後のプロセス実行方式
○プリエンティブ(Preemptive)方式
割り込みによりプロセスが中断された後、より優先度の高いプロセスを実行する
Windows95やNTなど。
○ノンプリエンティブ(Non-Preemptive)方式
割り込み中断後、割り込まれたプロセスを引き続いて実行する
アプリケーションプログラムがループするとOSに制御が戻らない欠点がある。
Windows3.1など。
◎記憶管理
●記憶装置階層
実行中のプログラムは、大部分をディスク上に置き、そこから実行中モジュールや
頻繁に使用される機能を主記憶装置にロードする。さらにその一部を高速なキャッ
シュメモリに置くことにより実行効率化をはかっている。
CPU
キャッシュメモリ
主記憶装置(=実記憶装置)
ディスク装置(=補助記憶装置)
●アドレス変換方式
プログラム内の論理アドレス空間を物理アドレス空間に割り当てること。
OSの記憶領域管理機能の一つ。
論理アドレスってなに?
>プログラムの先頭から割り振られたアドレス。
物理アドレスってなに?
>主記憶装置に割り振られた実際のアドレス。
アドレス空間ってなに?
>アドレスによって決められる記憶領域。
○実アドレス方式
論理アドレスと物理アドレスとを一致させる方式。
よってアドレス変換機能がない。
○ベースアドレス方式
物理アドレスを、ベースアドレスと論理アドレスとの加算で変換する方式。
実行中に格納アドレスを変更したときは、ベースアドレスのみを変更する
だけで良い。
ベースアドレスってなに?
>主記憶装置内の先頭アドレス。
○動的アドレス変換(DAT:Dynamic Address Translation)方式
仮想記憶上の論理アドレスをテーブルを使って実記憶上の物理アドレスに変換
する。(ベースアドレスは使わない。)
●プログラム分割方式
○セグメント方式
プログラムの論理的な構造にもとづいてセグメントと呼ばれる単位に
分割する(セグメンテーション)。可変長なため、フラグメンテーションが
起こる。
メモリリークってなに?
>プロセスの獲得したメモリが不要になった後も解放されずシステムで使用でき
るメモリが徐々に減少する状態。
フラグメンテーションってなに?
>ガ-べジ(メモリ上のすきま)が多くなり十分な容量であっても
それらが断片化しているためにプログラムが実行できないこと。
これを回避するため、「ガーベジコレクション」や「メモリコンパクション」
を行う。
ガーベジコレクションってなに?
>プログラムが使用しなくなったヒープ領域(変数領域など動的に
割り付けられるための領域)を回収して再利用可能にする処理。
▲▲▲▲▲
データベースへのデータの追加・削除更新が繰り返され、
データベースの格納効率が低下したときも行う。
※動的再配置
メモリを有効に利用するために、オブジェクトモジュールを主記憶上で移動させ
プログラムを実行すること。
※デフラグ
Windows上で行うガーベジコレクションのようなものだが、ガベージコレクショ
ンは使用済みですでにいらなくなったものを回収し再利用可能にする。
デフラグの場合は、ゴミもいっしょに移動し、再利用可能にはしない。
メモリコンパクションってなに?
>主記憶(メモリ)を対象に実施するガベージコレクション。
○ページング方式--------------------------------------------主記憶と仮想記憶
プログラムを強制的に固定長のページという単位に分割する。 ▲▲▲▲▲▲▲▲
仮想記憶装置ではこちらの方式のほうが多い。主記憶が不足すると発生。
▲▲▲▲▲▲
あくまで補助記憶装置上に高速かつ大容量の主記憶装置が存在するかのように見
せる。
・FIFO(First In First Out)
一番古くから存在するものをページアウトする。
・LRU(Least Recently Used)
最後に参照されてからの時間が最も長いものをページアウトする。
・LFU(Least Frequently)
参照回数の一番少ないページをページアウトする。
※ページフォールト
必要なページが主記憶にないこと。
割当て主記憶容量(x)とページフォルトの発生率(y)の関係。
y│*
│*
│ *
│ *
│ **
│ ***
└───────
x
※デマンドページング
プログラムの実行時に主記憶に存在しないページが必要になった時点で
そのページを主記憶に読み込む。
※スラッシング
複数のタスクが実記憶を求めて競合し、十分な実記憶を得られないページ
フォールトが多発し、ページングに大半の時間が消費されて、プログラムの
実行が進まないこと。
※ワーキングセット
ある時点から一定時間前にプログラムが参照したページの集合。
●プログラムロード方式
○スワッピング方式------------------------------------主記憶と補助記憶(HD)
プログラムを主記憶装置にロードするとき補助記憶装置 ▲▲▲▲▲▲▲▲▲▲
に退避(ロールアウト)し、主記憶装置に空きができた
ら復活(ロールイン)させる方式。ページサイズを大き
くすると、スワップが発生しやすくなる。
○オーバレイ方式
プログラムを主記憶装置にロードするときに上書きする方式。
主記憶の容量を超えるプログラムを実行できるようにするための方式で、
プログラムをセグメントに分割し、プログラムの実行時には必要なセグメント
のみを主記憶にロードする。
●記憶保護方式
○限界レジスタ方式(保護境界レジスタ方式)
許容記憶領域の境界をレジスタに入れ、アクセスごとにチェックする。
○保護キー方式
記憶装置のブロック単位に記憶キーを設け比較する。
○リング保護方式
保護優先度に応じて番号付与し、アクセス領域の番号と比較して制御する。
(優先度をリング状にみたて、内側のリングほど優先度を高くする。)
◎ブートストラップ
コンピュータを起動すること。また、人間がコンピュータに電源を投入してから、操作
可能な状態になるまでに自動的に行われる一連の処理。
電源が入るとまずマザーボードに記憶されたIPL(Initial Program Loader)という
プログラムが起動し、ハードディスクの先頭にあるMBR(Master Boot Record)とい
う領域を読み込む。MBRの内容からHD内のどの領域(パーティション)からOSを
起動するかを選択し、そのパーティションのブートセクタと呼ばれる領域に記録された
プログラムを呼び出す。ブートセクタに記録されたプログラムはディスクからOSをメ
モリに読み込んで起動し、操作可能な状態になる。
◎ミドルウエア
OS上で動作し、アプリケーションソフトに対してOSよりも高度で具体的な機能を提供
するソフトウェア。OSとアプリケーションソフトの中間的な性格を持っている。
例)データベース管理システム(DBMS)
TPモニタ(トランザクション処理機能を提供)
ORB(分散オブジェクト環境を提供)
◎ファイル編成
●順編成
データがキー順に記憶されているので、レコードの順次アクセスはできるが、レコ
ードキーを指定した特定レコードの直接アクセスはできない。
●直接編成
レコードキーが異なるにもかかわらず、キー変換によって求めた格納アドレスが同
じになるシノニムが発生することがある。
●索引順編成
あふれ域をもつことによって、ファイル全体を書き直すことなくデータを追加でき
るが、処理時間を短縮するためには再編成が必要である。
●区分編成
複数のメンバを一つのファイルにまとめ、ディレクトリによって個々のメンバを管理
する。メンバの更新を行うたびに再使用できない領域ができるので、メンバ領域の再
編成が必要である。
◎アクセス手法
●順次アクセス
順編成のようにレコードの先頭から順順に呼んでいくアクセス方式。
●直接アクセス
直接編成や索引順編成のように指定したレコードだけを読むアクセス方式。
◎排他制御
●セマフォ
ダイグストラによって提唱された、クリティカルセクション(危険域)に対する
相互排他制御技術。タスクの同期を取るために用いられる。
ソフトウェアレベルでプロセス間の同期を取る方法。
クリティカルセクション
>共有資源に対して同時に複数のタスクから更新処理を行うとエラーになる処理部分
プロセス1 変数値
↓ │
P操作──────→│
│ デクリメント ↓
続行│ 0
↓ │←─────P操作
V操作──────→│ │
インクリメント↓ │待機
1 │
│ ↓
│←─────P操作(再実行)
↓デクリメント │
0 │続行
↓
s:セマフォ(>0)
t:sの初期値(>0)
p:P操作の回数
v:V操作の回数
とすると s=t-p+v
※バイナリセマフォ
1と0の値しかとらないセマフォ(リソースが1つだけ)。初期値は「1」。
※ゼネラルセマフォ
Nから0の値をとるセマフォ。初期値は「N」。
●デッドロック
複数のプロセスが同資源に対して互いに専有ロックをかけあうことで待ち状態と
なり行き詰まり状態に陥ること。
プロセスA プロセスB
│ │
↓ ↓
専有 要求─┬──→X←┐ ┌──要求 専有
│ │ └─│┐ │
↓ │ ││ ↓
待ち 要求─│─┬→Y←┬─┘├─要求 待ち
│ │ │ │ │ │
↓ │ │ │ │ ↓
待ち 開放─┘ │ │ └─開放 待ち
│ │ │ │
↓ │ │ ↓
待ち 開放───┘ └────開放 待ち
◎リカバリ
チェックポイント
>データベースの書き出しとログの書き出しを一致させる時点。
<障害発生した際のための処理>
○ログ(ジャーナル)
更新したトランザクションの内容、および更新前の内容(ビフォアイメージ)と
更新後の内容(アフタイメージ)を記録。
○ミラーリング(バックアップ)
障害回復時のバックアップのため、全く同じ更新を複数の磁気ディスクに対して
行う二重化を実施。
<障害発生時の処理>
○ロールバック(後退復帰)
トランザクション障害発生時に用いる方法。
ログ(ジャーナル)を使用して、更新前状態に戻すこと。
▲▲▲
○ロールフォワード(前進復帰)
媒体障害発生時に用いる方法。
ミラーリング(バックアップ)を使用して、障害前状態まで戻す。
▲▲▲
コミットってなに?
>メモリ上の更新情報をデータベースに反映させること。
障害発生直前の
チェックポイント システム障害発生
│ │
────┼─────────────┼───→時間
T1 │ T2 T3 │
←─→ │←─→ ←────→
│ T4 │
←─┼─────────────┼─→
│T5 │
←───→ │
│ │
T1:チェックポイント・障害発生以前に完了しているのでリカバリは行われない。
T3,T4:障害発生時更新中であるため、更新前状態に戻す。(ロールバック)
T2,T5:障害発生以前に完了しているので障害前状態まで戻す。(ロールフォワード)
◎開発ツール
●CASE(Computer Aided Software Engineering)ツール
コンピュータ支援によるソフトウェア工学でソフトウェア開発や保守作業の自動化
を支援するソフトウェア。
┌─┐ ┌───────┐ ┌─┐ ┌────┐
│統│ │要求定義 │ │共│←→│ 上流 │
│合│ │外部設計 │ │通│←→│CASE│
│C│ │内部設計 │ │C│←→├────┤
│A│←→│プログラム設計│←→│A│←→│ 下流 │
│S│ │プログラミング│ │S│←→│CASE│
│E│ │ テスト │ │E│←→└────┘
└─┘ │運用・保守 │ └─┘←→保守CASE
└───────┘
↑
↓
開発プラットフォームサービス提供CASE
↑
↓
リポジトリ
(格納庫)
リポジトリ(ソフトウェアデータベース)
>各種の情報を1元管理する開発設計情報データベース。
※API(Application Program Interface)
開発を容易にするために用意された関数、コマンド、ユーティリティなどの
インターフェース。
●静的テスト用ツール
静的テスト:プログラムを実行せずにプログラムのソースコードを解析するなどし
てデバッグを行う。
○トレーサ
誤りの箇所が特定できないときに、実行順に命令とその実行結果を出力する。
○記号実行ツール
プログラムの実行結果を記号によってシミュレートするツール。
○構文チェッカ
プログラムのソースコードを解析してシミュレートするツール。
○コードオーディッタ
コーディング規約に違反する部分を検出する。
○アサーションチェッカ
アサーション(論理的に成立すべき関係や条件を記述した論理式の表明)を挿入
し、その成立状況を調べるチェッカ。
●動的テスト用ツール
動的テスト:テストデータをもとに実際にプログラムを実行して結果を確認しなが
ら進めていくテスト方法。
○カバレージモニタ
実行したプログラム中の命令の情報(行番号など)を蓄積しておき、網羅率など
をレポートする。
◎OSS(Open Source Software)の特徴
○プログラムのソースコードを入手可能
○プログラムの改良が可能
○プログラムのコピーや配布が自由
○利用制限なし、商用利用可能
◎OSS(Open Source Software)の種類
○OS
Linux
○Webサーバソフト
Apache
○データベース
MySQL
○スクリプト
Perl、PHP
◎LAMPとLAPP
○LAMP:Linux+Apache+MySQL+PHP
○LAPP:Linux+Apache+PostgreSQL+PHP