9.2 オペレーティングシステム

Download Report

Transcript 9.2 オペレーティングシステム

第9章 ソフトウェア技術
9.1 プログラミング言語
9.2 オペレーティングシステム
9.3 データベース技術
9.4 マルチメディア技術
9.5 ソフトウェア開発
9.2 オペレーティングシステム
9.2.1
9.2.2
9.2.3
オペレーティングシステムとは
制御プログラム
サービスプログラム
9.2.1 オペレーティングシステムとは
(1) オペレーティングシステムの意味
オペレーティングシステム(OS)は,
広義にはコンピュータシステムのハードウェア資源や
情報資源など各種資源を有効に活用するためのソフトウェア全般を指す。
狭義には,タスクのスケジューリングや入出力制御,
データ管理等を行う制御プログラムを指す。
(2) オペレーティングシステムの目的
オペレーティングシステムの目的は次のとおりである。
① ハードウェア資源の有効利用
② 処理能率の向上
③ 信頼性と安全性の向上
なお,ネットワーク経由を前提としたサービス提供のためのOSを
ネットワークOSと呼ぶ。
代表例はNetWareやLAN Managerであるが,
現在ではOSがネットワーク機能を持つのが普通になっているので,
ネットワークOSという用語はほとんど用いられない。
(3) オペレーティングシステムの構成
応
用
プ
ロ
グ
ラ
ム
ミ ド ル ウ ェ ア
広義のOS
処理プログラム
汎用言語プロセッサ
サービスプログラム
制御プログラム(狭義のOS)
運 用 管 理
障 害 管 理
ジ
ョ
タ ス ク 管 理
記 憶 管 理
(カーネル)
ブ
管
理
データ管理
(ファイルシステム)
入出力管理
通信管理
(デバイスドライバ)
ハ ー ド ウ ェ ア
9.2.2 制御プログラム
(1) ジョブ管理 (a)ジョブとJCL
ジョブとは,汎用コンピュータにおける利用者から見た処理の単位であり,
ジョブステップとはプログラムの処理単位である。
通常,1つのジョブは1つ以上のジョブステップからなり,
あるジョブステップの出力結果を,
別のジョブステップの入力として連続実行する。
これを常に人手でオペレーションするとミスが起きるだけでなく,
ジョブステップとジョブステップの間に遊んでいる時間が生じることになる。
そこで,決まりきったジョブステップの組合せで実行する場合,
ジョブ制御言語(JCL : Job Control Language)で指定して,
ジョブステップの連続自動実行を行うこととなる。
(b)パソコンにおけるバッチ処理
パソコン等では,ジョブステップという用語を遣わないが,
決まりきったプログラムの連続自動実行を
バッチファイルで指定することができる。
(c)ジョブ管理の手順
① ジョブ定義を読込み,ジョブ定義に記述されたプログラムや入出力定義等を
入力ジョブ待ち行列に保管する。(ジョブ読取りプログラムまたはリーダ)
② 入力ジョブ待ち行列の中で最も優先順位の高いジョブを選択し,
ジョブやジョブステップが必要としている入出力機器やファイル等の資源を
割り当てる。(ジョブ開始プログラムまたはイニシエータ)
③ ジョブ及びジョブステップの実行。
④ ジョブやジョブステップが使用した入出力機器やファイルなどの資源を解放し,
標準出力機器等への情報があれば,出力待ち行列に格納。
(ジョブ終了プログラムまたはターミネータ)
⑤ 出力待ち行列に格納されている制御情報から,出力の優先順位等を判別して
プリンタ等への出力指示を出す。(ジョブ書出しプログラムまたはライタ)
(d)スプーリング
低速の入出力装置とCPUが直接やり取りをしないようにすることによって,
処理効率を向上させる方法をスプーリングと呼ぶ。
スプーリング用に補助記憶装置に用意されたファイルをスプールファイルと呼ぶ。
ワークステーションやパソコン等でもLANに接続されたプリンタに出力する際に,
印刷が完了していなくても他の操作ができるようにするために,
出力データを補助記憶装置に格納しておくことをスプーリングと呼ぶ。
(スプーラを使わない場合)
ジョブA
ジョブA出力
ジョブB
ジョブB出力
ジョブC
ジョブD
(スプーラを使う場合)
ジョブA
ジョブB
ジョブC
ジョブA出力
ジョブD
: スプールファイルへの出力
ジョブB出力
スプーラの実行
(e)ジョブスケジューラとマスタスケジューラ
① ジョブスケジューラ
ジョブ管理とスプーラを制御するプログラム
② マスタスケジューラ
操作卓からの指示を解読し,
該当プログラムに知らせる制御プログラム
(2) タスク管理
(a)タスク管理の概要
コンピュータ資源を使用するための処理の最小単位をタスク(プロセス)と呼ぶ。
タスク管理における状態遷移は,汎用コンピュータ,ワークステーション,
パソコン等のOSだけでなく,ワンボードコンピュータ等における
リアルタイムモニタ等でも同様である。
タスク生成
入出力割込み
ジョブ開始
実行可能状態
待ち状態
タスク
タスク待ち行列
タイマ割込み
ディスパッチ
SVC割込み
タスク消滅
ジョブ終了
実行状態
① ジョブ開始による実行可能状態への移行
起動されたタスクは,タスク待ち行列に入り,
まず実行可能状態(READY状態とも呼ぶ)に入る。
タスク生成
入出力割込み
ジョブ開始
実行可能状態
待ち状態
タスク
タスク待ち行列
タイマ割込み
ディスパッチ
SVC割込み
タスク消滅
ジョブ終了
実行状態
実行可能状態とは,OSで決められたスケジューリング方法によって
CPUの割当を受ければ,すぐにでも実行できる状態である。
② タイムスケジューラによって選択されて実行状態へ移行
実行可能状態のタスクは,タスクスケジューラによって選択され,
実行状態(RUN状態とも呼ぶ)に入る。
タスク生成
入出力割込み
ジョブ開始
実行可能状態
待ち状態
タスク
タスク待ち行列
タイマ割込み
ディスパッチ
SVC割込み
タスク消滅
ジョブ終了
実行状態
1個のCPUで構成されているコンピュータでは,1個のタスクだけが選ばれる。
タスクが選ばれて実行状態に入ることをディスパッチと呼ぶ。
③ 実行状態から実行可能状態への移行
実行状態のタスクは,タイマ割込みがあるとタスクスケジューラによって,
続行しても良いかどうかが判別される。他のタスクが選択されると,
後で実行を再開するための情報,すなわち,現在の割込みアドレスや
レジスタの値等を保存して実行可能状態に戻る。
タスク生成
入出力割込み
ジョブ開始
実行可能状態
待ち状態
タスク
タスク待ち行列
タイマ割込み
ディスパッチ
SVC割込み
タスク消滅
ジョブ終了
実行状態
このようにスケジューラが実行状態のタスクを強制的に実行可能状態に移す,
すなわち実行権を奪うことを横取り(preempt)と呼ぶ。
④ 入出力により待ち状態に移行
SVC割込み等により入出力を行うタスクは,待ち状態に入る。
その間,他のタスクが実行状態に入る。
タスク生成
入出力割込み
ジョブ開始
実行可能状態
待ち状態
タスク
タスク待ち行列
タイマ割込み
ディスパッチ
SVC割込み
タスク消滅
ジョブ終了
実行状態
実行状態にあるタスクが何らかの入出力を行うとき,実行権を他のタスクに
明渡し,自分自身のタスクを一時停止する。すなわちタスクからSVC
(Supervisor Call)割込みをかけることで,待ち状態に入る。
⑤ 待ち状態から実行可能状態への移行
待ち状態に入っているタスクが起動された入出力が完了することで,
CPUに入出力割込みが発生し,タスクは実行可能状態に復帰する。
タスク生成
入出力割込み
ジョブ開始
実行可能状態
待ち状態
タスク
タスク待ち行列
タイマ割込み
ディスパッチ
SVC割込み
タスク消滅
ジョブ終了
実行状態
入出力が完了すると入出力チャネルから完了情報が通知され,
この結果,入出力割込みが発生する。入出力割込みが発生すると,
スケジューラは待ち状態のタスクを実行可能状態に遷移させる。
(b)プリエンティブとノンプリエンティブ
① プリエンプティブ(preemptive : 横取り可能)方式
タイマ割込みによって,マルチタスクを実現すること。
② ノンプリエンプティブ(non-preemptive:横取り不能)方式
実行中タスクが,意識的に他のタスクに実行権を明渡す方法。
CPUを長い時間占有するようなタスクが存在したり,
実行中タスクが暴走してループ状態に入った場合,
プロセスの切り替えができなくなり危険である。
(c)タスクスケジューリング方式
実行可能状態のタスクを実行状態に移すことをタスクスケジューリング,
またはプロセススケジューリングと呼ぶ。
代表的なスケジューリング方式としては,次のような方法がある。
① 到着順方式(FCFS : First Come First Serve)
② 優先度順方式
③ 最短ジョブ優先(SJF : Shortest Job First)
④ ラウンドロビン方式
⑤ 多重待ち行列方式
⑥ フィードバック待ち行列方式
⑦ イベントドリブンスケジューリング方式
① 到着順方式(FCFS : First Come First Serve)
実行可能となった順に待ち行列に並べ,待ち行列の先頭から順に
実行状態にする。
○ ノンプリエンティブ的なスケジューリングのひとつ。
○ 最も単純でオーバーヘッドが少ない。
○ ただし,CPUを占有する割合が高く入出力が少ないタスクを,
優先的に実行状態にしてしまう可能性が高い。
② 優先度順方式
それぞれのタスクに優先度を付け,優先度にただしCPUを割り当てる。
○ ノンプリエンティブ的なスケジューリング。
○ 優先度の低いプロセスにいつまでも実行権が渡されないという事態が生じる。
これをスタベーション(starvation:無期延期)と呼ぶ。
③ 最短ジョブ優先(SJF : Shortest Job First)
連続してCPUを使用する時間が短いジョブを優先する方式。
○ ノンプリエンティブ的なスケジューリング。
○ 全ジョブの平均ターンアラウンド時間を最小にすることができる。
○ ただし,CPUを使用する時間をあらかじめ予想することが困難であるため
実現は難しい。
④ ラウンドロビン方式
[ラウンドロビン方式]
各プロセスに一定のタイムスライスを与え,タイムスライスを
使いきったプロセスを実行可能とし,待ち行列の末尾に置く
プリエンティブな方式。
各プロセスに公平に実行権を与えることができ,
かつ比較的単純なスケジューリングであるため,
初期のTSS(Time Sharing System)でも採用されていた。
⑤ 多重待ち行列方式
[多重待ち行列方式]
ラウンドロビン方式に優先度を付けたプリエンティブな方式。
⑥ フィードバック待ち行列方式
疑似的にSJFを実現するために開発された方式で,
多重待ち行列における優先度を拡張している。
① 起動直後のタスクに最も高い優先度と短いタイムスライスを与える。
② タイムスライス内に終了しなかった場合,
1段低い優先度と1段長いタイムスライスを設定して
待ち行列に位置付ける。
③ 以後,これを繰り返すことにより,
短いタスクほど起動直後の高い優先順位を与えられた状態で
終了する可能性が高く,SJFに近い結果が期待できる。
⑦ イベントドリブンスケジューリング方式
入出力チャネルや周辺機器からの信号などの
イベントの発生に従ってスケジューリングを行う。
① システムの利用に対話型処理が多い場合に適している。
② ラウンドロビン方式等と組合わせられることが多い。
(d)デッドロックと排他制御
マルチタスクでは,複数のタスクが並列に実行されているので,
共有メモリや入出力など共有資源をアクセスするタイミングを
調整する必要がある。
① あるタスクが共有資源をアクセスしている間,
他のタスクがアクセスできないようロックする必要がある。
② ロックのタイミングを間違えると,タスク同士でロックしあって
処理が進まない状態に陥る。これをデッドロック状態と呼ぶ。
デッドロックが起きないよう,また起きた場合の解除を制御することを
同期・排他制御と呼ぶ。
セマフォシステム
(マルチタスクでの同期・排他制御を行う仕組みのひとつ)
セマフォは,カウンタ,待ち行列,2つの操作(P操作とV操作)で実装される。
① 最初,カウンタは1になっている。
② 共有資源をロックしようとするタスクAは,P操作を実行する。
P操作によってカウンタは1マイナスされ0になる。
③ 別のタスクBがP操作を実行すると,カウンタは1マイナスされて-1に
なる。カウンタが負になると,P操作を行ったタスクのIDが待ち行列に
置かれる。さらに他のタスクがP操作を実行すると,同様にカウンタは
マイナスされ,カウンタが負であるため,タスクIDが待ち行列に入る。
④ タスクAが処理を終わり,共有領域をアンロックするにはV操作を行う。
V操作でカウンタは1プラスされる。V操作の結果,カウンタが0以下の
場合,待ち状態のタスクが存在すると判定し,待ち行列からタスクIDを取
り出し,実行可能状態に遷移させる。
この方式は,同期・排他制御に待ち行列を利用した方式として考えてよい。
さらに,タスク間のメッセージ交換においても同様の待ち行列が使われる。
(3) 記憶管理
記憶管理には,実記憶管理と仮想記憶管理がある。
実記憶管理は実メモリの管理である。
仮想記憶管理は,実メモリが不足している場合に補助記憶装置を
実メモリの替わりに使い,仮想的に大きな容量のメモリがあるかのように
処理する場合の管理である。
① 仮想的なメモリ
仮想記憶と呼び,仮想記憶に付けられたアドレスを論理アドレスと呼ぶ。
② 実記憶管理の方式
パーティション方式,スワッピング方式,オーバレイ方式
③ 仮想記憶管理の方式
ページング方式,セグメントページング方式
(a) パーティション方式
メインメモリの領域を複数の区画に分割して管理する方式。
固定区画(静的分割)と可変区画(動的分割)がある
固定区画方式には,単一区画方式と複数区画方式がある。
固定区画(静的分割)
単一区画方式
複数区画方式
可変区画(動的分
割)
制御プログラム
制御プログラム
制御プログラム
制御プログラム
処理プログラム
処理プログラム
処理プログラム1
処理プログラム1
処理プログラム2
処理プログラム3
処理プログラム4
処理プログラム2
処理プログラム3
可変区画方式
実行する処理プログラムの大きさに対応した区画を作成する方式。
ただし,大きさの異なるプログラムを繰り返し実行していく過程の途中で,
区画間に断片化した隙間(ガーベジ)が生じる。
ガーベジを集めれば格納できるプログラムでも,ガーベジが散在しているため
格納できない現象が起きることになる。これをフラグメンテーションと呼ぶ。
このフラグメンテーションを解消することをメモリコンパクションまたは
ガーベジコレクションと呼ぶ。これらの処理を行う方式を動的再配置と呼ぶ。
動的再配置を行わない方法を静的再配置と呼ぶ。
動的再配置を行うシステムでは,実行中に実アドレスが変更されるので,
ベースアドレス指定や相対アドレス指定が可能な
ハードウェアでなければならない。
(b) スワッピング方式
スワッピングとは,メインメモリの情報と補助記憶装置の内容を入れ換えること。
一般にジョブまたはプログラム単位に行う。
① ジョブを格納するメモリが不足している場合,
先行ジョブの中で優先度の低いジョブを補助記憶に追い出すことを
スワップアウトまたはロールアウトという。
② 再実行される時点で,再度メモリに読込まれることを
スワップインまたはロールインという。
スワップインやスワップアウトが頻繁に起こり
効率が悪くなっている状態をスラッシングと呼ぶ。
(c) オーバレイ方式
プログラムをセグメントという単位に分割し,実行に必要な部分だけを
主記憶領域に割りつける方法。分割や割り付ける方法は,プログラム作成時に
計画する。
分割や割り付けプログラムの呼び出し関係や共通領域との関係に配慮する
必要があり,これらを間違うとプログラムが動かなくなる場合も生じる。
150 K byte
Segment A
(50 K byte)
A
A
Segment B
(100 K byte)
B
C
Segment C
(120 K byte)
170 K byte
ダイナミックリンク
ライブラリが必要になった時点で動的にメモリに格納する方法。
この方法を動的リンクと呼ぶ。
動的にリンクされるライブラリを
動的リンクライブラリ(DLL:Dynamic Link Library)という。
(d) ページング方式
メモリ配置
仮想記憶や実記憶領域をページという単位に分けて管理する方式。
ページは,4Kバイトや8Kバイト等の固定サイズである。
実記憶上のページの記憶単位はページフレームあるいはページ枠と呼ばれ,
仮想記憶の論理ページが読込まれる枠組みとなる。
実行するためのプログラム及びデータは,ページの大きさに分割され,
論理アドレス空間(実体は補助記憶装置。これを仮想記憶装置と呼ぶ)に
配置される。
仮想記憶(実体は補助記憶装置)
実記憶
ページインとページアウト
プログラムの実行に必要なページがページ枠にない場合
(この状態をページフォルトまたはページ不在と呼ぶ),
仮想記憶上のページを実記憶のページ枠に読み込む(ページインと呼ぶ)。
実記憶のページ枠が不足している場合は逆に,
実記憶のページ枠を仮想記憶に書き戻す(ページアウトと呼ぶ)。
これらの管理を行うことで,実記憶が少ない場合でも
プログラムの実行が可能となる。
仮想記憶方式は,パソコン等でも,
実メモリ不足を解消するため一般に使われている。
動的アドレス変換
ページングの管理を行うには,仮想記憶上のページとページ枠を対応付ける
ための対応表(ページテーブルと呼ぶ)が必要である。
更に,このページテーブルを使って,プログラム内で参照され
るアドレスを実記憶上のアドレスに変換する必要がある。
この変換は,命令が実行される際,動的に行われるので動的アドレス変換
(DAT:Dynamic Address Translation)と呼ばれる。
仮想記憶装置
Page 00
ページテーブル
ページ番号 ページ枠アドレス
00
2000
○
Page 01
01
3000
○
Page 02
02
2000
×
Page 03
03
1000
○
Page 04
04
3000
×
ページ番号
03
ページ内相対
7A0
実記憶
標識
17A0
1000+7A0
ページインとページアウト
ページインとページアウトが繰り返されると,
仮想記憶を採用したために性能が落ちることになるので,
使用頻度の高いページをなるべく実記憶内に置いておくほうが良い。
[ページング方法]
① FIFO(First In First Out)法
最も古く格納されたページをページアウト。
② LRU( Least Recently Used )法
最後に参照されてから最も長く参照されていないページをページアウト。
FIFO法
LRU法
ページインの時間
参照ページ
古
↑
新
実記憶の
ページ
ページインの時間
参照ページ
古
↑
新
実記憶の
ページ
1 2 3
1 1 1
2 2
3
1
1
2
3
4
2
3
4
5
3
4
5
1
4
5
1
4
4
5
1
2
5
1
2
4
1
2 赤い部分で
4 ロールアウト
1 2 3
1
1 2
1 2 3
1
2
3
1
4
3
1
4
5
1
4
5
1
4
5
1
4
5
1
4
2
1
4
2
4
1
2
4
(e) セグメントページング方式
複数のページをまとめた記憶単位(セグメントと呼ぶ)を使用して,
セグメントテーブル,ページテーブルの2段階で
実記憶装置のアドレスに変換する。
この方式では,ページテーブル自体が仮想記憶として管理され,
複数プログラムの仮想記憶を実現できる方式である。
ただし,仮想記憶装置内のアドレスは,
セグメント番号,セグメント内ページ番号,ページ内アドレスで表現される。
① アドレス変換では,セグメントを検索しページテーブル自体の
ページ枠アドレスを求める。
② 実記憶装置内になければ,ページテーブルをページインする。
③ セグメント内ページ番号からページテーブルを索引して
ページ枠アドレスを求め,ページ内アドレスを加算する。
(4) データ管理
ファイルシステムとも呼ばれ,コンピュータシステム内の各種のデータを
管理する。
① ファイルのアクセス方式としては
・順次アクセス
・直接アクセス
がある。
② ファイルを格納する形式(ファイル編成)としては
・順編成ファイル
・直接編成ファイル
・区分編成ファイル
・索引付順編成ファイル
・VSAMファイル
等の種類があり,これらのアクセス方式や編成方法に従って,
ユーザのプログラムによって容易にアクセスする手段を提供する。
その他のデータ管理
コンピュータシステム内の膨大なファイルの中から必要なファイルを
素早く見つけ出すためのカタログ管理もデータ管理のひとつである。
カタログ管理では,
・装置名
・ボリューム名
・ボリューム内のファイル記録場所
等の情報を記録し管理する。
(5) 運用管理
コンピュータシステムの運用状況や,稼動状況等を把握できるようにし,
障害対応のための記録,記憶情報の機密保護管理等を行う。
運用管理機能は,以下の機能からなる。
① システム運転管理機能
プログラム実行,ファイルアクセス等のログを記録する。
② ユーザ管理機能
利用者毎のプログラムやファイル等のアクセス管理等を行う。
(6) 障害管理
障害が起きたとき,他への影響をなるべく少なくするための
管理を行う。
障害回復の機能だけでなく,システムの信頼性を高めるための
①
②
③
④
⑤
ハードウェアの多重化
データの多重化
一時的な障害に対する再試行
障害発生箇所の切り離し(局所化)
予防保守に必要なログ情報解析
等の機能も障害管理に含まれる。
(7) 入出力管理と通信管理
[入出力管理]
複数のプログラムから,
1つの入出力装置に対して要求が出されたとき,
どの順序で入出力を行うかを管理する。
[通信管理]
複数のコンピュータ間で通信を行うための機能。
①
②
③
④
回線制御機能
伝送制御機能
端末制御機能
メッセージ制御機能
等からなる。
9.2.3 サービスプログラム
(1) 連係編集プログラム
言語プロセッサで翻訳されたオブジェクトモジュールを組合わせて,
実行可能なロードモジュールを組み立てる(リンケージ)ソフト。
リンケージエディタとも呼ばれる。
パソコン等の言語プロセッサの中には,
直接,実行可能モジュールを生成するものもあり,
この機能が必要ないこともある。
(2) ローダ
実行に先だって,実行可能モジュールを主記憶内に
読込む(ロードまたはローディング)するプログラム。
ただし,OS等の基本ソフトウェアをロードするプログラムは
IPL(Initial Program Loader),またはBoots Strap Loader等と区別される。
(3) 整列・併合プログラム
事務処理等のとき,
データを特定の項目の順序にあらかじめ並び替え(整列)たり,
複数のファイルを1つのファイルにする(併合)ための
サービスプログラム。
(4) システム生成プログラム
コンピュータシステム毎にシステム構成や使用目的が異なるため,
前もって制御テーブルや,制御プログラムの構成定義等を定義する
システム生成(SG:System Generation)作業が必要である。
このシステム生成を支援するためのプログラムを
システム生成プログラムという。
なお,ワークステーションやパソコン等では,OSや新たなプログラムを
コンピュータシステム内に取りこむことを
・インストール
・セットアップ
等と呼ぶ。
9.2 オペレーティングシステム
完