目次
1.3 - プロセッサーと I/O デバイスの使用率を向上させる
2.2 - I/O システム内のさまざまなモジュール間の階層ビュー
I/O システムによって管理される主なオブジェクトは、I/O デバイスと対応するデバイス コントローラです。その最も重要なタスクは、ユーザーによって行われた I/O 要求を完了し、I/O 速度を高め、デバイスの使用率を向上させ、上位プロセスがこれらのデバイスを便利に使用するための手段を提供することです。
1. I/Oシステムの機能、モデル、インターフェース
(1) I/Oシステムの基本機能
1.1 - 物理デバイスの詳細を非表示にする
I/O デバイス コントローラは、制御コマンドを格納するためのいくつかのレジスタやパラメータを格納するためのレジスタを含む、さまざまなタイプの I/O デバイスを制御するために使用されるハードウェア デバイスです。これらのコマンドとパラメータを通じて、ユーザーは外部デバイスを制御して必要な操作を実行できます。
デバイスが異なれば、必要なコマンドとパラメータも異なります。たとえば、ディスクを操作する場合、今回は読み取りか書き込みかのコマンドを与えるだけでなく、ディスク番号、トラック番号、セクター番号など、ソース データまたはターゲット データの場所も指定する必要があります。ディスク。プログラマーやユーザーに、これらのデバイスに直接直面してプログラムを書くことを要求するのは非常に困難であることがわかります。したがって、I/O システムは、物理デバイスの実装の詳細を隠すためにデバイスを適切に抽象化し、読み取りや書き込みなどの少数の抽象読み取り/書き込みコマンドのみを上位層プロセスに提供する必要があります。// デバイスを使いやすくする
1.2 - デバイスの独立性
デバイスからの独立性は、物理デバイスの詳細を隠すことに基づいて実現されます。
一方で、ユーザーは抽象 I/O コマンドを使用できるだけでなく、抽象論理デバイス名を使用してデバイスを使用することもできます。たとえば、ユーザーが出力および印刷したい場合、読み取りコマンドを提供するだけで済みます。 (または書き込み) コマンド。/O)、どのプリンターであるかを指定せずに、/dev/printer などの抽象論理デバイス名を指定します。
一方で、OS の移植性と適応性も効果的に向上させることができるため、OS 自体については、新しい I/O デバイスのインストールを容易にするために、オペレーティング システム全体を再コンパイルすることなく新しいデバイス ドライバーを追加できるようにする必要があります。Windows と同様に、システムはプラグ アンド プレイを実現するために、新しい I/O デバイスのドライバーを自動的にインストールして検索できます。
1.3 - プロセッサーと I/O デバイスの使用率を向上させる
I/O システムでは、プロセッサと I/O デバイスの使用率を向上させるために、プロセッサと I/O デバイスが可能な限り並行して動作できるようにする必要があります。
- 一方で、プロセッサは、I/O デバイスができるだけ早く実行できるように、ユーザーの I/O 要求に迅速に応答する必要があります。
- 一方で、各 IO デバイスの動作中のプロセッサの介入時間も最小限に抑える必要があります。
1.4 - I/O デバイスの制御
I/O デバイスを制御するのはドライバーの機能です。現在、I/O デバイスには 4 つの制御方法があります。
- ポーリングによるプログラマブル I/O
- 割り込み付きのプログラマブル I/O
- ダイレクトメモリアクセスモード
- I/Oチャネルモード。
具体的な制御方法は、I/Oデバイスの伝送速度や伝送するデータ単位などに関係します。//例えば、送信されるデータがバイトなのかデータブロックなのかなど。
1.5 - デバイスの適切な共有を確保する
デバイスの共有属性から、システム内のデバイスは次の 2 つのカテゴリに分類できます。
- 排他的設備、プロセスはこの種の設備に相互に排他的にアクセスする必要があります。つまり、システムがこの種の設備を特定のプロセスに割り当てると、それが使い果たされて解放されるまで、プロセスによって排他的に使用されます。典型的な専用デバイスは、プリンター、テープ ドライブなどです。システムが排他的なデバイスを割り当てるときは、割り当てのセキュリティも考慮する必要があります。
- 共有デバイスとは、複数のプロセスが一定期間同時にアクセスできるデバイスを指します。典型的な共有デバイスはディスクであり、複数のプロセスがディスク上で読み取りおよび書き込み操作を実行する必要がある場合、読み取りおよび書き込み操作の正確さに影響を与えることなく、プロセスをインターリーブすることができます。
1.6 - エラー処理
ほとんどの機器には多くの機械部品や電気部品が含まれており、動作中にエラーや故障が発生しやすくなります。処理の観点から見ると、エラーは一時的なエラーと永続的なエラーに分類できます。
一時的なエラーの場合は、操作を再試行することで修正できますが、永続的なエラーが発生した場合にのみ、上位層に報告する必要があります。たとえば、ディスク送信中にエラーが発生した場合、システムはディスクに障害が発生したとはみなさず、再度再送信することができます。数回再送信してもエラーが解消されない場合、システムはディスクに障害が発生したと判断します。
ほとんどのエラーはデバイスに密接に関連しているため、エラー処理はできる限りハードウェア レベルに近づける必要があります。つまり、低レベルのソフトウェアで解決できるエラーは上位層には報告されません。上位層では認識できず、下位層のみ ソフトウェアで解決できないエラーは上位層に報告され、上位層ソフトウェアに解決が要求されます。//エラー解決の考え方と指導的イデオロギーはソフトウェアにも適用でき、エラーは可能な限り下部で解決されるべきです
要約:
- 側面 1 と側面 2 の機能は、ユーザーがI/O デバイスを使用する際の利便性を目的としています。
- 3 番目と 4 番目の側面の機能は、 CPU と I/O デバイスの使用率を向上させるために使用されます。
- 第 5 および第 6 の側面の機能は、機器を共有するときにユーザーに利便性を提供し、システムが正常に動作することを保証し、システムにエラーが発生した場合にエラーをすぐに発見できるようにすることです。エラーであっても自動的に修正できます。
(2) I/Oシステムの階層構造とモデル
I/O ソフトウェアには幅広い側面が含まれます。下位ではハードウェアと密接に関係し、上位ではファイル システム、仮想メモリ システム、およびユーザーと直接対話します。これらはすべて、I/O 操作を実装するために I/O システムを必要とします。非常に複雑な I/O ソフトウェアの構造を明確にし、移植性と適応性を高めるために、I/O システムの階層構造が一般的に採用されています。これは、システム内のデバイス管理モジュールをいくつかのレベルに分割することであり、各レベルは、その下位レベルによって提供されるサービスを使用して、入出力機能のいくつかのサブ機能を完了し、これらの機能の実装の詳細を保護して、上位レベルへのサービス。//コンピュータ ネットワークの指導的なイデオロギーも階層構造です。オブジェクト指向の観点からは、このアプローチはカプセル化と呼ばれます
2.1 - I/O ソフトウェアの階層
I/O ソフトウェアは、通常、下の図に示すように 4 つのレベルに編成されます。各レベルとその機能は次のとおりです。図内の矢印は、I/O の制御フローを示します。 //階層化は、問題を解決するための指針となるイデオロギーです。複雑な問題: 複雑な問題から単純な問題へ、簡単な問題から難しい問題へ
- ユーザー層 I/O ソフトウェアはユーザーと対話するためのインターフェースを実装しており、ユーザーはこの層が提供する I/O 操作に関連するライブラリ関数を直接呼び出してデバイスを操作できます。
- デバイス非依存ソフトウェアは、ユーザー プログラムとデバイス ドライバー間の統一インターフェイス、デバイスの命名、デバイスの保護、デバイスの割り当てと解放などを実現し、デバイスの管理とデータ送信に必要なストレージ領域を提供するために使用されます。
- デバイス ドライバーはハードウェアに直接関係しており、システムによってデバイスに発行された操作命令を実装し、I/O デバイスを動作させるために使用されます。
- 割り込みハンドラは、割り込み処理のCPU環境を保存し、対応する割り込みハンドラに転送して処理を行い、処理完了後に割り込み処理に戻り、割り込み処理の場面を再開するために使用されます。//コンピュータの構成については詳細な説明があります
2.2 - I/O システム内のさまざまなモジュール間の階層ビュー
《1》I/Oシステムの上位インターフェースと下位インターフェース
I/Oシステムインターフェース:I/Oシステムと上位システム間のインターフェースであり、デバイスを操作するための抽象的なI/Oコマンドを上位層に提供し、上位層によるデバイスの使用を容易にします。多くの OS は、ユーザーが使用できるユーザー層の I/O 操作に関連するライブラリ関数を提供します。上位システムにはファイルシステム、仮想メモリシステム、ユーザープロセスがあります。//デバイスを操作するための入り口
ソフトウェア/ハードウェア (RW/HW) インターフェイス: ソフトウェアとハードウェア間のインターフェイス。デバイスが多種多様であるため、非常に複雑です。
以下の図は、I/O システム内のさまざまなモジュール間の階層構造を明確に示しています。//複雑ではありません。見てください。
《2》I/Oシステムの階層化
I/O ソフトウェア組織の階層構造に対応して、I/O システム自体も次の 3 つのレベルに分割できます。
- 割り込みハンドラ。これは I/O システムの下部にあり、ハードウェアと直接対話します。
- デバイスドライバー。プロセスとデバイスコントローラー間の通信プログラムです。その主な機能は、上位層によって送信された抽象 I/O リクエストを I/O デバイスの特定のコマンドとパラメータに変換し、それをデバイス コントローラのコマンド レジスタとパラメータ レジスタにロードすること、またはその逆を行うことです。デバイス間の大きな違いにより、各タイプのデバイスのドライバーは異なるため、OS 設計者が設計するのではなく、デバイスの製造元がドライバーを提供する必要があります。したがって、新しいデバイスがシステムに追加されるたびに、インストール ベンダーから新しいドライバーが提供される必要があります。// ドライバーはデバイスのメーカーから提供されます
- デバイスに依存しないソフトウェア。最新の OS の I/O システムは、基本的にデバイス非依存性 (デバイス非依存ソフトウェアとも呼ばれます) を実装します。基本的な意味は、I/O ソフトウェアは使用される特定の物理デバイスから独立しているということです。最大の利点は、I/O システムの適応性と拡張性が向上することです。多くの種類の機器に適用でき、新しい機器の追加や古い機器の置き換えのたびにI/Oソフトウェアを変更する必要がなく、システムの更新や拡張が容易です。デバイス非依存ソフトウェアの内容には、デバイスのネーミング、デバイスの割り当て、データ バッファリング、データ高速バッファリングなどのソフトウェアが含まれます。
(3) I/Oシステムインターフェース
3.1 - ブロックデバイスインターフェイス
ブロックデバイスインターフェースは、ブロックデバイスマネージャーと上位層の間のインターフェースです。このインターフェイスは、ほとんどの磁気ディスク ストレージおよび光ディスク ストレージの基本的な特性を反映しており、そのようなデバイスの入力または出力を制御するために使用されます。
いわゆるブロックデバイスは、データアクセスと送信がデータブロックに基づいているデバイスを指します。典型的なブロックデバイスはディスクです。
このデバイスの基本的な特徴は、高い転送速度(通常は 1 秒あたり数メガバイトから数十メガバイト) です。もう一つの特徴は、データの入力元アドレスと出力先アドレスを指定でき、ディスク内の任意のブロックをランダムに読み書きできるアドレッサビリティであり、ディスク装置のI/OにはDMA方式が採用されることが多い。
3.2 - ストリームデバイスインターフェイス
ストリームデバイスインターフェースは、ストリームデバイスマネージャーと上位層の間のインターフェースです。このインターフェイスはキャラクタ デバイス インターフェイスとも呼ばれ、ほとんどのキャラクタ デバイスの本質的な特性を反映し、キャラクタ デバイスの入力または出力を制御するために使用されます。
いわゆるキャラクタデバイスとは、キーボードやプリンタなど、キャラクタ単位でデータにアクセスし、送信するデバイスを指します。
キャラクター デバイスの基本的な特性は、転送速度が低いことであり、通常は 1 秒あたり数バイトから数キロバイトです。また、アドレッサブルではない、つまりデータの入力元アドレスと出力先アドレスを指定できないことも特徴です。キャラクター デバイスは、入出力時に割り込み駆動されることがよくあります。
キャラクタデバイスはアドレス指定できないため、順次にのみアクセスできます。通常、キャラクタ デバイスに対してキャラクタバッファ(キュー) が確立され、デバイスの I/O キャラクタ ストリームがキャラクタ バッファに順次入力される (読み取り)、またはキャラクタ バッファからデバイスに順次送信されます (出力)。// バッチ I/O 読み取りおよび書き込みにより、I/O 効率が向上します
ほとんどのストリーム デバイスは排他的なデバイスであるため、相互に排他的な方法で共有する必要があり、この目的のために、ストリーム デバイス インターフェイスはオープン操作とクローズ操作を提供します。このタイプのデバイスを使用する場合は、まずオープン操作でデバイスを開く必要があります。デバイスがすでに開いている場合、そのデバイスは別のプロセスによって使用されています。
2.3 - ネットワーク通信インターフェース
最近のOSでは、ネットワークを中心とした機能が提供されています。ただし、最初に何らかの方法でコンピュータをネットワークに接続する必要があります。同時に、オペレーティング システムは、コンピュータがネットワーク上の他のコンピュータと通信したり、ネットワークを介してインターネットを閲覧したりできるように、対応するネットワーク ソフトウェアとネットワーク通信インターフェイスも提供する必要があります。//この部分はネットワークオペレーティングシステムで詳しく説明されています
2. I/Oデバイスとデバイスコントローラ
I/Oデバイスは一般に、I/O操作を実行する機械部品と制御I/Oを実行する電子部品で構成されます。通常これら2つの部分は分離されており、入出力処理を行う機械部分を一般入出力デバイス、制御入出力を行う電子部分をデバイスコントローラまたはアダプタと呼びます。
マイクロコンピュータやミニコンピュータのコントローラは、多くの場合、プリント回路カードの形で作られているため、コントロール カード、インターフェイス カード、またはネットワーク カードと呼ばれ、コンピュータの拡張スロットに挿入できます。一部の大規模および中規模のコンピュータ システムでは、I/O チャネルまたは I/O プロセッサも構成されます。
(1)I/O 设备
1.1 - I/O デバイスのタイプ
I/Oデバイスには多くの種類があり、ブロックデバイスとキャラクタデバイス、専用デバイスと共有デバイスに分けることができるほか、デバイスの利用特性からストレージデバイスとI/Oデバイスに分けることもできます。 ; スレーブデバイスの転送速度に基づいて、低速装置、中速度装置、高速装置に分類されます。// 概念的なものいろいろ
1.2 - デバイスとコントローラー間のインターフェース
通常、デバイスは CPU と直接通信するのではなく、デバイス コントローラーと通信します。したがって、I/O デバイスにはデバイス コントローラーとのインターフェイスが含まれている必要があります。このインターフェイスには 3 種類の信号があり、それぞれが信号に対応していますライン。
- データ信号線。このタイプの信号線は、デバイスとデバイス コントローラーの間でデータ信号を伝送するために使用されます。入力機器の場合、通常、外部から入力された信号がコンバータで変換された後、形成されたデータがまずバッファに送られ、データ量が一定のビット数(文字数)に達すると、データの集合がバッファに送られます。信号線はバッファを通過し、デバイスコントローラーに送信されます。出力デバイスでは、デバイスコントローラからデータ信号線を通じて送られてきたデータを一括してバッファに一時的に蓄え、コンバータで適切に変換した後、1文字ずつ出力します。//I/Oデータの転送に使用されます
- 制御信号線。これは、デバイス コントローラーが制御信号を I/O デバイスに送信するパスです。この信号は、読み取り操作 (デバイスからコントローラーへのデータの転送を指す) や書き込み操作 (コントローラーからのデータの受信)、またはヘッド移動などの操作の実行など、デバイスによって実行される操作を指定します。 。// 操作のタイプ (読み取りまたは書き込み) を指定するために使用されます
- ステータス信号線。この信号線は、デバイスの現在の状態を示す信号を伝送するために使用されます。デバイスの現在の状態は読み取り (または書き込み) です。デバイスは読み取り (書き込み) を完了し、新しいデータ送信の準備ができています。//デバイスステータスを送信
(2) デバイスコントローラ
デバイス コントローラの主な機能は、1 つ以上の I/O デバイスを制御して、I/O デバイスとコンピュータ間のデータ交換を実現することです。これは CPU と I/O デバイス間のインターフェイスであり、CPU からコマンドを受信して I/O デバイスの動作を制御し、プロセッサを複雑なデバイス制御タスクから解放します。デバイス コントローラはアドレス指定可能なデバイスです。1 つのデバイスのみを制御する場合、一意のデバイス アドレスは 1 つだけです。コントローラが複数のデバイスに接続できる場合は、複数のデバイス アドレスを含める必要があり、各デバイス アドレスは 1 つのデバイスに対応します。デバイス コントローラは、キャラクタ デバイスを制御するために使用されるコントローラと、ブロック デバイスを制御するために使用されるコントローラの 2 つのカテゴリに分類できます。
2.1 - デバイスコントローラーの基本機能
- コマンドを受信して認識します。デバイス コントローラーは、プロセッサーから送信されたさまざまなコマンドを受信して認識できます。コントローラには対応する制御レジスタがあり、受信したコマンドとパラメータを保存し、受信したコマンドをデコードするために使用されます。//コマンドデコーダを設定
- データ交換。デバイス コントローラーは、CPU とコントローラー間、およびコントローラーとデバイス間のデータ交換を可能にします。//データレジスタを設定
- デバイスのステータスを特定して報告します。コントローラーは、CPU が認識できるようにデバイスの状態を記録する必要があります。//ステータスレジスタを設定する
- 住所特定。デバイス コントローラーは、制御する各デバイスのアドレスを識別できなければなりません。// アドレスデコーダを設定する
- データバッファ。I/O デバイスのレートは低く、CPU とメモリのレートは高いため、コントローラにバッファを設定する必要があります。//バッファを設定する
- エラー制御。I/O デバイスによって送信されるデータについては、デバイス コントローラーがエラー検出も担当します。送信中にエラーが発生した場合、通常はエラー検出コードが設定されてCPUに通知されるため、CPUは今回送信したデータを破棄し、新たに送信を行います。これにより、正しいデータ入力が保証されます。
2.2 - デバイスコントローラーの構成
- デバイスコントローラーのプロセッサーへのインターフェース。CPUとデバイスコントローラ間の通信を実現するためのインターフェースであり、データ線、アドレス線、制御線の3種類の信号線があります。
- デバイス コントローラーのデバイスへのインターフェイス。
- I/Oロジック。ロジックはデバイスの制御を実装するために使用されます。一連の制御ラインを通じてプロセッサと対話し、プロセッサはこのロジックを使用して I/O コマンドをコントローラに送信します。
(3) メモリイメージI/O
ドライバは、抽象 I/O コマンドから変換された一連の特定のコマンド、パラメータ、その他のデータをデバイス コントローラの対応するレジスタにロードし、コントローラはこれらのコマンドを実行して I/Oデバイス の制御を実現します。これは次の 2 つの方法で実行できます。
- 特定の I/O 命令を使用する場合、このアプローチの主な欠点は、メモリへのアクセスとデバイスへのアクセスに 2 つの異なる命令が必要になることです。
- この方法では、メモリ マップド I/Oでは、アドレス指定においてメモリ ユニットのアドレスとデバイス コントローラのレジスタ アドレスが区別されなくなります。メモリイメージ I/O モードは、メモリとコントローラへのアクセス方法を統一するため、I/O のプログラミングを簡素化するのに役立ちます。
(4)I/O 通道
CPU と I/O デバイスの間にデバイス コントローラを追加すると、I/O に対する CPU の介入が大幅に軽減されますが、ホスト コンピュータが多数の周辺機器で構成されている場合、CPU への負担は依然として大きくなります。このため、CPUとデバイスコントローラの間にI/Oチャネル(I/O Channel)が追加されます。
その主な目的は、独立した I/O 操作を確立することであり、データ送信を CPU から独立させるだけでなく、I/O 操作の構成、管理、および終了処理を可能な限り独立させて、CPU がより多くの処理を実行できるようにすることです。言い換えれば、その目的は、CPU が本来処理していた I/O タスクの一部をチャネルに転送し、それによって CPU を複雑な I/O タスクから解放することです。//I/Oチャネルを使用する理由
チャネルを設定した後、CPU は I/O 命令をチャネルに送信するだけで済みます。チャネルはコマンドを受信すると、実行するチャネルプログラムをメモリから取り出して実行し、指定されたI/Oタスクが完了した場合のみCPUに割り込み信号を送ります。// I/O チャネルの仕組み
実際、I/O チャネルは特別な種類のプロセッサです。I/O コマンドを実行し、チャネル (I/O) プログラムを実行することによって I/O 操作を制御する機能があります。ただし、I/O チャネルは、主に次の 2 つの点で一般的なプロセッサとは異なります。
- 1 つは、命令タイプが シングル であることです。これは、チャネル ハードウェアが比較的単純で、実行できるコマンドが主に I/O 操作に関連する命令に限定されているためです。
- 2 つ目は、チャネルが独自のメモリを持たず、チャネルによって実行されるチャネル プログラムがホストのメモリに配置されることです。つまり、チャネルと CPU がメモリを共有します。