• 検索結果がありません。

入出力管理・制御のソフトウェア階層

ドキュメント内 新潟大学学術リポジトリ (ページ 49-52)

イスドライバ」を呼び出す。

'

&

$

% 補足:

この機能ブロックの中では、ファイルアクセスを高速化するために「ブ ロッキング」,「バッファリング」,「キャッシング」といった工夫、信 頼性の高いファイルシステムを構築するための工夫が施される。

=詳しくは第7節で説明。

• デバイスドライバ: 装置制御のプログラムで、装置毎に用意される。一般には、呼 び出されたデバイスドライバは、指定された入出力を行うために装置固有のコマ ンドの列を生成し、このコマンドの列を入出力コントローラに処理させる。 入 出力コントローラからは、与えたコマンド列の実行が終了した時点で割込み信号 が送られ、その動作終了が報告される。

'

&

$

% 補足:

デバイスドライバの生成する装置固有のコマンドの列は一般にはコマ ンドプログラム,入出力プログラムと呼ばれ、メインフレームの場合 チャネルプログラムと呼ばれる。

DMAの場合は、一旦、DMAコントローラに対して 入出力装置, 出力操作,転送元と転送先のアドレス,転送バイト数 の設定を行なっ てから、DMAコントローラに指令を出す。

メインフレームの場合は、コマンド列(チャネルプログラム)は主記憶 上に生成され、この中のコマンドを1つずつチャネルが読み出して実 行する。

デバイスドライバの生成したコマンドの列の中のコマンドを1つずつ 入出力コントローラに送って処理をさせるという方式も考えられる。

しかし、これでは、与えたコマンドの実行が終了する度に入出力コン トローラから割込み信号が送られ、CPUへの負荷がかかる。

なぜデバイスドライバが必要か:

入出力装置は装置毎に固有の特性を持ち、その制御の仕方も各々に違う。

しかも、どの入出力装置を繋げるかはコンピュータによってまちまちであ り、追加や切り離しもあり得る。 従って、可能な全ての装置を対象として 装置制御のプログラムをOSの中に固定的に用意するのは得策ではなく、

不可能に近い。 そこで、装置制御のためのデバイスドライバと呼ばれる プログラムを個々の装置毎に作成し、必要に応じてそれらのプログラムを OSの中に登録して利用する、という手法がとられている。

• 割込みハンドラ(interrupt handler, 割込み処理ルーチン): 一般には、起こった割 込みに対する処置が書かれたプログラムで、割込みの種類毎に用意されている。

'

&

$

% 特に、

指示された入出力動作が完了して割込み信号がCPUに入った場合は、

制御をデバイスドライバに戻す処置がとられる。

これらのソフトウェアが階層的に呼び出されている様子を次に示す。

6.3. 入出力管理・制御のソフトウェア階層 45

OS プロセス(非特権状態)

(4) デバイス コントローラの レジスタに コマンドを設定し、

入出力の指令を 出す。

(5)終了報告 (割込み) (1)システムコール

(割込み)

磁気 ディスク

(特権状態)

入出力コントローラ

割込みハンドラ デバイスドライバ

ファイルシステム

(7) 再実行 の指令 (3)

該当するデバイスドライバに 入出力の指示を与える。

(6)デバイスドライバに 制御を戻す。

(8)完了報告

(9)要求のあったシステムコールに対する 処理を完了して制御をプロセスに戻す。

入出力制御 割込みハンドラ

(2)

この図の中のデバイスドライバにおける処理は少々複雑で、次の様になっている。

デバイスドライバ層における入出力機器の起動制御:

• 入出力要求は入出力装置毎に待ち行列で管理される。

要求種別 入出力の結果 を入れる領域 入出力データ を格納する 領域の情報

要求種別 入出力の結果 を入れる領域 入出力データ を格納する 領域の情報

要求種別 入出力の結果 を入れる領域 入出力データ を格納する 領域の情報

・・・・

NULL

成功、失敗(再実行の対象) 未処理など

'

&

$

% 補足:

優先度の高い入出力要求が発生した場合にそれを待ち行列の先頭に入れ るなどして、入出力のスケジューリングを行うこともある。 例えば、磁 気ディスクなどでは、磁気ヘッドの位置の移動時間を最小にする様にスケ ジューリングを行い、入出力のスループットを高める工夫も可能である。

=6.7節を参照。

• 入出力要求がカーネルに対して出されると、CPUの状態が特権状態に切替えられた上 でデバイスドライバが呼び出される。そこでは

(1) その要求が待ち行列に繋がれ、

(2) 入出力装置に対して処理の指令が出ていなければ指令が出される。

• 入出力装置から「入出力終了」の割り込み通知がCPU に対して出されると、CPUの 状態が特権状態に切替えられ、その装置を担当するデバイスドライバに制御が戻って 来る。 そこでは、

(1) 入出力動作が正常に行なわれたかどうかがチェックされ、もし正常に行なわれて いなければその入出力処理が再実行(ロールバック,rollback,と言う)される。

(2) コマンドプログラムが正常に完了したならば、

3 正常に終了した入出力要求を待ち行列から外す。

3 この装置の待ち行列を調べ、その先頭の入出力要求を(もしあれば)実行する。

一方では、

3 入出力動作の完了した入出力要求をファイルシステムに通知する。

開始

要求内容を待ち行列に繋ぐ

入出力装置が 動作している

入出力の指令を出す NO

YES

終了

入出力装置

開始

入出力動作が 正常に終了

NO YES

終了 正常に完了した 入出力要求を 待ち行列から外す 再実行の指令を出す

終了

待ち行列が 空でない

動作完了の入出力を ファイルシステムに 通知

入出力の指令を出す YES

NO 動作完了通知

(割込み信号)

ファイルシステム

入出力要求があると、... 動作終了の報告があると、...

デバイスドライバの処理

入出力コントローラ も含む

ドキュメント内 新潟大学学術リポジトリ (ページ 49-52)