オペレーティング システムのレビューのための I/O コア サブシステム

目次

1. I/O スケジューリング

2. バッファとキャッシュ

3. 機器の流通とリサイクル

4. スプーリング技術 SPOOLing


 I/O デバイスは多種多様であるため、デバイスの制御には複数の方法が必要です。これらのメソッドは合わせてオペレーティング システム カーネルの IO サブシステム (つまり、前のセクションのソフトウェア階層内の 3 つのソフトウェア プログラム) を構成し、カーネルの他の側面を負荷の高い I/O デバイス管理から解放します。I/O コア サブシステムによって提供されるサービスには、主に、I/O スケジューリングバッファリングとキャッシュデバイスの割り当てと回復スプーリングデバイス保護、およびエラー処理が含まれます。

1. I/O スケジューリング

概念:特定の戦略を使用して、より適切な I/O 要求シーケンスを決定します。アプリケーションによって発行されるシステム コールは常に最適な順序であるとは限らないため、システム全体のパフォーマンスを向上させ、I/O 完了に必要な平均待ち時間を短縮するには、I/O スケジューリングが必要です。

2. バッファとキャッシュ

(1) バッファバッファ

 バッファは、メモリをバッファとして使用できる記憶領域、または特殊なハードウェア レジスタで構成できる記憶領域です。

[注意]: バッファ内のデータが空でない場合、バッファにデータをフラッシュすることはできず、バッファからのデータの転送のみが可能です。バッファが空の場合、データをバッファにフラッシュできますが、バッファからデータを転送する前にバッファを埋める必要があります。

バッファの役割:

① CPUとI/Oデバイスの速度不一致の矛盾を緩和

②CPUの割り込み頻度を下げ、CPU割り込み相当時間の制限を緩和します。

③ データユニットサイズの不一致の問題を解決

④ CPUとI/Oデバイス間の並列性の向上

バッファテクノロジー:

1) シングルバッファ

  オペレーティング システムはメモリ内にバッファを設定します。デバイスと CPU がデータを交換するとき、交換されたデータはまずバッファに書き込まれ、次にデータが必要なデバイスまたは CPU がバッファからデータを取得します。

上の図に示すように、データの各ブロックの処理時間を計算します。

まず初期状態を設定します。ワークスペースはいっぱい、バッファは空です。

T>C の場合、1 つのデータを処理する平均時間は M+T です。

同様に、T<C の場合、1 つのデータを処理する平均時間は C+M です。

したがって、シングル バッファー戦略が採用され、1 つのデータの処理に費やされる平均時間は Max(C, T)+M になります。

[注]: 各種バッファリング技術の各データの処理時間を調べる場合、初期状態を仮定し、次にその状態に至るまでの時間を計算したものがデータの処理にかかる時間となります。

2) ダブルバッファリング 

入出力速度を高速化し、機器の使用率を向上させるために、シングルバッファに基づいてバッファが追加され、ダブルバッファメカニズムが設定されます

ダブルバッファメカニズムの計算では、作業領域が空、バッファの 1 つがいっぱい、もう 1 つのバッファが空の初期状態を仮定します。

T>C+M の場合、1 つのデータを処理する平均時間は T

 T<C+M の場合、1 つのデータを処理する平均時間は M+C です。

したがって、ダブルバッファリング戦略が採用され、データの処理にかかる平均時間は Max(M+C, T) になります。

3) 循環バッファリング

同じサイズの複数のバッファを循環キューにリンクします。入出力時には、インポインタとアウトポインタが必要です。In ポインタはデータを入力できる次の空のバッファを指し、out ポインタはデータを取り出せる次の満杯のバッファを指します。

4) バッファプール

バッファ プールは、システム全体で共有されるバッファで構成されます。これらのバッファは、使用状況に応じて、空のバッファキュー入力データでいっぱいのバッファキュー(入力キュー)出力データでいっぱいのバッファキュー(出力キュー)に分けることができます。

同時に、入力データを格納するための作業バッファ (hin)  、入力データを抽出するための作業バッファ (sin)、出力データを格納するための作業バッファ (hout)、出力データを抽出するための作業バッファ (sout) の 4 つの作業バッファが設定されます。

作業方法:

① 入力プロセスは入力データを要求します。空のバッファキューから作業バッファ (hin) をストレージ入力データとして取得し、データを埋めた後、バッファを入力キューの最後にハングします。

②計算プロセスは入力データを取得したいと考えています。次のように入力キューから入力データでいっぱいのバッファを取得します。

「入力データの作業バッファを抽出する (sin)」、バッファは空に読み取られた後、空のバッファキューにハングされます。

③ 計算プロセスは、準備されたデータをバッファにフラッシュしたいと考えています。空のバッファキューから「出力データ格納用ワークバッファ(hout)」としてブロックを取り出し、データがいっぱいになったら出力キューの最後尾にバッファをハングさせる

④ 出力プロセスは出力データを要求します。出力キューから出力データが詰まったバッファを「出力データ抽出用ワークバッファ(sout)」として取得し、バッファを空読みした後、空のバッファキューに吊るします。

(2) キャッシュディスクキャッシュ

キャッシュは、データのコピーを保護する高速メモリです。CPU と I/O 速度の不一致の矛盾を解決するために、OS ではディスク キャッシュ テクノロジが使用され、ディスク I/O 速度が向上し、元のデータ アクセスよりもキャッシュ コピーへのアクセスの方が効率的になります。

ディスクキャッシュ技術とは、通常の意味でのCPUとメモリ間の小容量高速メモリとは異なり、メモリ上の記憶空間を利用して、ディスクから読み取った一連のディスクブロック内の情報を一時的に格納する技術を指します。したがって、ディスク キャッシュは論理的にはディスクに属しますが、物理的にはメモリ内に存在するディスク ブロックです。

キャッシュはメモリ内で 2 つの形式に分けられ、1 つは固定サイズのヒットディスク キャッシュとしてメモリ内に別の記憶領域を開く方法、もう 1 つはページング システムとディスク VO を要求するときに未使用のメモリ領域を共有用のバッファ プールとして使用する方法です

3. 機器の流通とリサイクル

(1) 設備配置の考慮要素

デバイスの固有のプロパティ:

① 専用デバイス: 1つのプロセスにのみ時間を割り当てることができます(プリンタなど)

②共有デバイス:複数のプロセス(ディスクなど)に同時に1つを割り当てることができ、マクロレベルでは各プロセスがデバイスを同時に共有し、ミクロレベルでは交互に使用することが多いです。

③仮想デバイス:SPOOLing技術を利用して専用デバイスを仮想共有デバイスに変換し、同時に複数のプロセスに割り当てることができます(SPOOLing技術による共有プリンタなど)

機器割り当てのアルゴリズム:一般的に使用されるアルゴリズムは先着順、優先度の高いものが優先、短いタスクが優先

デバイス割り当てのセキュリティ:

①セキュリティ割り当て:デバイスをプロセスに割り当てた後、プロセスはブロックされ、この I/0 が完了した後にプロセスが起動されます。(例: プリンターに出力の印刷を要求するプロセスを考えてみましょう) 各プロセスは一度に 1 つのデバイスしか使用できません

長所: 「リクエストとホールド」状態を解消し、デッドロックが発生しない

欠点: プロセスの場合、CPU と /O デバイスはシリアルでしか動作できません。

② 安全でない割り当てプロセスが I/O リクエストを送信した後、システムはそのプロセスに I/O デバイスを割り当て、プロセスは実行を継続し、その後新しい I/O リクエストを発行できます。プロセスは、I/O 要求を満たすことができない場合にのみブロックされます。プロセスは複数のデバイスを同時に使用できます

利点: プロセスの計算タスクと I/O タスクを並行して処理できるため、プロセスを迅速に進めることができます。

デメリット:デッドロックが発生する可能性がある(デッドロックの回避、デッドロックの検出と解除が必要)

(2) 設備の配置方法

① 静的割り当て:主に排他的なデバイスの割り当てに使用され、プロセスの実行前に必要なリソースをすべて割り当て、実行終了後にリソースを返却する方式で、リクエストやホールドの条件が破棄されるためデッドロックは発生しませんが、デバイスの使用効率が低くなります

②動的割り当て:プロセスの実行中にデバイス リソースを動的に適用します。デバイスの使用率が向上しますが、デッドロックが発生する可能性があります。

(3) デバイス割り当てのデータ構造

 機器割り当てに基づく主なデータ構造は、機器制御テーブルコントローラ制御テーブルチャネル制御テーブルシステム機器テーブルです。

①デバイス制御テーブルDCT:システムは各デバイスに対してDCTを設定し、テーブル内のエントリはデバイスの属性です

 ② コントローラ管理テーブル COCT:各デバイスコントローラは COCT に対応し、OS は COCT 情報に従ってコントローラを管理します。

③チャネル管理テーブル CHCT:各チャネルは CHCT に対応し、OS は CHCT の情報に従ってチャネルを操作・管理します。 

 ④システム機器テーブルSDT:システム内のすべての機器の状況を記録し、各エントリは1つの機器に対応します

(4) 設備割り当ての流れ

① プロセスが要求した物理デバイス名に基づいて SDT を検索します。

② SDT に従って DCT を検索し、デバイスがビジーの場合はプロセス PCB をデバイス待機キューにハングし、ビジーでない場合はデバイスをプロセスに割り当てます。

③DCT に従って COCT を検索し、コントローラーがビジーの場合はプロセス PCB をコントローラー待機キューにハングし、ビジーでない場合はコントローラーをプロセスに割り当てます。

④ COCT に従って CHCT を検索し、チャネルがビジーの場合はプロセス PCB をチャネル待機キューにハングし、ビジーでない場合はチャネルをプロセスに割り当てます。

(5) 設備割り当てプロセスの改善

上記のデバイス割り当てプロセスでは、ユーザーはプログラミング時に「物理デバイス名」を使用する必要があります。基礎となる詳細はユーザーには不透明なので、プログラミングには不便です。物理デバイスが交換されると、プログラムは実行できなくなります。プロセスによって要求された物理デバイスがビジー状態の場合、システム内に同じタイプのデバイスがあっても、プロセスはブロックされて待機する必要があります。

改善: 論理デバイス名と物理デバイス名の間のマッピング メカニズム (論理デバイス テーブル) を確立し、ユーザーはプログラミング時に論理デバイス名を指定するだけで済みます。

システム全体で LUT は 1 つだけです。各ユーザーが使用する論理デバイス名は繰り返すことができないため、シングルユーザーのオペレーティング システムに適しています。

ユーザーごとに 1 つの LUT: 異なるユーザーの論理デバイス名を繰り返すことができ、マルチユーザー オペレーティング システムに適しています。

4. スプーリング技術 SPOOLing

CPUの高速性とI/Oデバイスの低速性との矛盾を緩和するために、バッチ処理段階では、専用の周辺制御マシンを使用して、低速I/Oデバイス上のデータを高速ディスクに転送するオフライン入出力技術(テープコンプリーション)を導入しています。SPOOLing テクノロジは、ソフトウェアを使用してオフライン テクノロジをシミュレートします。

 (1) 入出力ウェル

ディスク上の 2 つのストレージ領域を開きます。入出力ウェルです。入力ウェルは、オフライン入力中にテープをシミュレートし、I/O デバイスによるデータ入力を保存するために使用されます。出力ウェルは、オフライン テープをシミュレートし、ユーザー プロセスの出力データを保存するために使用されます。

(2) I/Oバッファ

 入力バッファと出力バッファは、メモリ内で開かれた 2 つのバッファです。入力バッファは、入力デバイスによって送信されたデータを一時的に保存し、後で入力ウェルに送信するために使用されます。出力バッファは、出力ウェルから送信されたデータを一時的に保存し、後で出力デバイスに送信するために使用されます。

(3) 入出力処理

入力プロセスは、オフライン入力時に周辺制御マシンをシミュレートし、ユーザーが必要とするデータを入力マシンから入力バッファを介して入力バッファに送信します。

井戸に入ります。CPU はデータを入力する必要がある場合、入力ウェルからメモリにデータを直接読み取ります。出力プロセスは、オフライン出力時に周辺制御マシンをシミュレートし、ユーザーが必要とするデータ出力をメモリから出力ウェルに送信します。出力デバイスが空いている場合、出力ウェル内のデータは出力バッファを介して出力デバイスに送信されます。

(4) 共有プリンタの原理

共有プリンタはスプーリング テクノロジの一例であり、プリンタは専用デバイスから共有デバイスに変換されます。

複数のユーザー プロセスが出力印刷を要求すると、システムはその要求を許可しますが、プリンターは実際にはユーザー プロセスに割り当てられません。スプール管理プロセスは各プロセスに対して次の 2 つのことを行います。

(1) ディスク出力ウェル内のプロセス用の空きバッファー (つまり、このバッファーはディスク上にあります) を申請し、そこに印刷するデータを送信します。

(2) ユーザプロセス用の空の印刷要求フォームを申請し、そのフォームにユーザの印刷要求を記入し(実際には、ユーザの印刷データの保存場所などを説明するために使用されます)、そのフォームをスプールファイルのキューにハングします。

おすすめ

転載: blog.csdn.net/weixin_46516647/article/details/125105844