オペレーティング システムに関する注意事項 - デバイス管理

5. デバイス管理

5.1 I/O管理の概要

5.1.1 I/Oデバイスの分類とI/O管理のタスク

I/Oデバイスの分類

  • 機器の使用特性による分類

    • ストレージデバイス。ディスクやテープなど、さまざまな情報を保存するためにコンピュータで使用されるデバイスです。
    • 人間とコンピュータの対話装置。コンピュータとコンピュータユーザーとの間の対話のための装置であり、CPU に情報を送信したり、CPU によって処理された情報を出力したりするために使用されます。たとえば、キーボードは入力装置であり、モニタやプリンタは出力装置です。 。
    • ネットワーク通信機器。さまざまなネットワーク インターフェイス、モデムなど、リモート デバイスとの通信に使用されるデバイス。
  • 情報交換単位ごとに分類

    • キャラクターデバイス。情報を処理する基本単位は、キーボード、プリンター、モニターなどの文字です。
    • ブロックデバイス。情報処理の基本単位は文字ブロックです通常、文字ブロックのサイズは 512B ~ 4KB で、たとえばディスクはブロックデバイスです。
  • 通信速度による分類

    • 低速装備。キーボードやマウスなど、転送速度が 1 秒あたりわずか数バイトから数百バイトであるタイプのデバイスを指します。
    • 中速装備。ラインプリンターやレーザープリンターなど、1秒あたり数キロバイトから数万バイトの転送速度を持つ機器のことを指します。
    • 高速装備。テープ ドライブやディスクなど、1 秒あたり数十万バイトから 10 メガバイトの転送速度を持つ機器の一種を指します。
  • デバイスの共通属性による分類

    • 専用デバイス。これは、同時に 1 つのプロセスのみが使用できるデバイスを指し、重要なリソースです。システムがそのようなデバイスをプロセスに割り当てると、使い切って解放されるまで、そのデバイスはプロセスによって排他的に占有されます。低速デバイスのほとんどは、プリンタなどの専用デバイスです。
    • 共有設備。これは、複数のプロセスがアクセスできるデバイスを指します。たとえば、ディスクは非常に一般的な共有デバイスです。これにより、複数のプロセスが交互に情報の読み取りと書き込みを行うことができます。もちろん、デバイスは一度に 1 つのプロセスのみを許可します。アクセスしてください。
    • 仮想デバイス。仮想化技術を利用して、専用のデバイスを論理的に複数のプロセスで同時に使用できるようにするデバイスのことを指します。例えば、仮想化技術を利用したプリンタは、プリンタと同様に同時に印刷情報をプリンタに送信することができます。複数のプリンター。

I/O管理タスクと機能

デバイス管理の主なタスクは、ユーザーが行った I/O 要求を完了し、I/O デバイスをユーザーに割り当て、I/O デバイスの使用率を向上させ、ユーザーが I/O デバイスを使用しやすくすることです。上記のタスクを完了するには、デバイス管理には次の機能が必要です。

  • 装備の割り当て

    デバイスの種類と対応する割り当てアルゴリズムに従って、I/O デバイスがどのプロセスに割り当てられるかを決定します。I/O デバイスと CPU の間にデバイス コントローラとチャネルがある場合は、I/O デバイスと CPU の間に情報を送信するためのパスが存在することを保証するために、対応するデバイス コントローラとチャネルも割り当てる必要があります。必要なデバイスが割り当てられていないプロセスは、待機キューに入れる必要があります。デバイスの割り当てを実現するには、デバイスのステータスを記録するためにシステムにいくつかのデータ構造を設定する必要があります。

  • 機器の取り扱い

    デバイス ハンドラーは、CPU とデバイス コントローラー間の通信を実装するために使用されますI/O 操作を実行するとき、CPU はデバイス コントローラーに I/O 命令を発行して、I/O 操作のためにデバイスを起動します。I/O 操作が完了すると、CPU はデバイスによって送信された割り込み要求に応答して処理できます。タイムリーなやり方。

  • バッファ管理

    バッファを設定する目的は、CPU と I/O デバイス間の速度の不一致間の矛盾を軽減することですバッファ管理プログラムは、バッファの割り当て、解放、および関連する管理作業を完了する責任があります。

  • デバイスの独立性

    デバイスの独立性は、デバイスの独立性とも呼ばれ、アプリケーションが物理デバイスから独立していることを意味します。ユーザーは、アプリケーションをプログラミングするときに実際のデバイス名を直接使用しないようにする必要があります。プログラム内で実際のデバイス名を使用した場合、デバイスがシステムに継続的に存在しない場合やデバイスの故障時にユーザプログラムが動作できなくなるため、このプログラムを動作させたい場合はプログラムを修正する必要があります。ユーザプログラムが実際のデバイスを参照せずに論理デバイスを使用する場合、必要な入出力は物理デバイスに依存しません。デバイスに依存しないため、ユーザー プログラムの適応性が向上します

5.1.2 I/O制御モード

機器は一般に機械部品と電子部品から構成されており、機器の電子部品は通常機器コントローラと呼ばれます。デバイス コントローラーは CPU と I/O デバイスの間に位置し、CPU からコマンドを受け取り、I/O デバイスの動作を制御することで、プロセッサーを複雑なデバイス制御トランザクションから解放します。デバイス コントローラーはアドレス指定可能なデバイスです。1 つのデバイスのみを制御する場合、デバイス コントローラーは 1 つのデバイス アドレスしか持ちませんが、複数のデバイスに接続できる場合は、複数のデバイス アドレスを持つ必要があります。

デバイス コントローラーには次の機能が必要です

  • CPUからの各種命令を受け取り認識する
  • CPUとデバイスコントローラ、デバイスコントローラとデバイス間のデータ交換を実現
  • CPUクエリのためにデバイスのステータスを記録します。
  • 制御されている各デバイスのアドレスを特定する
  • CPU が出力したデータ、またはデバイスが CPU に入力したデータをバッファリングします。
  • 入出力データのエラー制御

ほとんどのデバイス コントローラーは、デバイス コントローラーとプロセッサー間のインターフェイス、デバイス コントローラーとデバイス間のインターフェイス、および I/O ロジックの 3 つの部分で構成されます。

ここに画像の説明を挿入します

通常、I/O 制御方法には次の 4 種類があります

直接プログラム制御

初期のコンピュータ システムには割り込みシステムがなかったため、CPU と I/O デバイスが通信してデータを送信するとき、CPU は I/O デバイスよりもはるかに高速であるため、CPU は継続的に I/O デバイスをテストする必要がありました。この制御方法はポーリングまたはビジーとも呼ばれます。

ここに画像の説明を挿入します

データ入力を例にとると、ユーザー プロセスがデータを入力する必要がある場合、プロセッサはデバイス コントローラーに対して I/O 命令を発行し、入力のためにデバイスを起動します。デバイスがデータを入力している間、プロセッサはループ内でテスト命令を実行することでデバイスステータスレジスタの値を検出し続け、ステータスレジスタの値がデバイスの入力が完了したことを示すと、プロセッサはデータ内のデータを取り出します。レジスタを作成して指定されたメモリユニットに送信し、デバイスを起動して次のデータを読み取ります。逆に、ユーザー プロセスがデバイスにデータを出力する必要がある場合は、スタートアップ コマンドを発行してデバイス出力を開始し、出力操作が完了するまで待つ必要があります。

  • アドバンテージ。ダイレクトプログラム制御モードの作業プロセスは非常に簡単です。
  • 欠点がある。CPU 使用率はかなり低いです。I/O デバイスが遅すぎて CPU に追いつけないため、CPU は I/O デバイスがデータ送信を完了したかどうかのテストにほとんどの時間を費やし、結果として CPU を大量に浪費することになります。

割り込み制御モード

直接プログラム制御モードでの CPU 待機時間を短縮し、CPU とデバイス間の並列作業の度合いを向上させるために、現代のコンピュータ システムでは、IO デバイスを制御するために割り込み制御モードが広く使用されています。

ここに画像の説明を挿入します

データ入力を例にとると、ユーザー プロセスがデータを必要とする場合、CPU はデバイス コントローラーに起動コマンドを発行し、ペリフェラルを起動してデータを入力します。データの入力中、CPU は他の作業を行うことができます。入力が完了すると、デバイスコントローラはCPUに割り込み信号を送信し、CPUは割り込み信号を受信後、デバイス割り込みハンドラを実行しますデバイス割り込みハンドラは、入力を要求しているプロセスが使用できるように、入力データ レジスタ内のデータを特定のメモリ ユニットに転送し、デバイスを起動して次のデータを読み取ります。

  • アドバンテージ。直接プログラム制御に比べて、ハードウェアによる割り込みのサポートにより、CPU と I/O デバイスが並行して動作できるようになり、CPU は割り込み信号を受信した後に処理するだけで済むため、CPU 使用率が大幅に向上します。
  • 欠点がある。この制御方式では、各デバイスがデータの入出力のたびにCPUに割り込みを必要とするため、1回のデータ転送中に割り込みが多くなり、CPUを大量に消費するなどの問題点が残されています。時間。

割り込みハンドラ(I/O完了時に発行される割り込みのみを指します)の処理手順は以下のとおりです

  • ブロックされたドライバー (プログラム) プロセスをウェイクアップする: シグナル操作を使用するか、シグナルを送信して、ブロックされたドライバー (プログラム) プロセスをウェイクアップできます。
  • 中断されたプロセスの CPU 環境を保護: プロセッサ ステータス ワード PSW とプログラム カウンタ PC をスタックにプッシュして保存します。保護のためにスタックにプッシュする必要があるその他のものには CPU レジスタなどが含まれます。これらはすべてハードウェアによって完了します。
  • 目的のデバイス ハンドラにジャンプします。割り込みソースをテストして、割り込みを引き起こしたデバイス番号を特定します。
  • 割り込み処理: デバイスに対応する割り込みハンドラーを呼び出します。
  • 中断されたプロセスのシーンを復元します。その時点でプッシュされていた保護されたメモリなどのデータを取り出し、現在の CPU 実行コンテキストを復元します。

DMA制御方式

DMA 制御方式の基本的な考え方は、周辺機器とメモリの間に直接データ交換パスを開くことです。DMA 制御モードでは、デバイス コントローラの機能が強化され、その制御により、CPU を介さずにデバイスとメモリの間でデータを一括で交換できますこれにより、CPUの負荷が大幅に軽減されるだけでなく、I/Oデータの転送速度も大幅に向上します。この方法は、ブロックデバイスでのデータ送信に一般的に使用されます。

ここに画像の説明を挿入します

データ入力を例に挙げると、ユーザー プロセスがデータを必要とする場合、CPU は入力データが保存されているメモリの開始アドレスと転送されるバイト数をメモリ アドレス レジスタと転送バイト カウンタに送信します。それぞれの DMA コントローラを起動し、デバイスを起動してデータ入力を開始します。データの入力中、CPU は他のことを行うことができます入力デバイスは、CPU ワークサイクルを継続的に適用し、転送する必要のあるすべてのデータが完了するまで、データ レジスタ内のデータをメモリに継続的に書き込みます。DMA コントローラは転送が完了すると CPU に割り込み信号を送り、CPU は割り込み信号を受け取った後、割り込みハンドラに移行して実行し、割り込み終了後に割り込み元のプログラムに戻ります

DMA 制御方式の特徴は、データ転送の基本単位がデータ ブロックであること、データはデバイスからメモリへ直接送信、またはその逆の一方向送信であること、CPU 介入が必要なのは最初と最後だけであることです。 1つ以上のデータブロックを送信することにより、データブロック全体の送信がコントローラの制御下で完了する

DMA 制御モードと割り込み制御モードの主な違いは次のとおりです。割り込み制御モードはデータ転送が完了するたびにCPUに割り込みを行いますが、DMA制御モードは転送に必要なデータがすべて転送された場合にのみCPUに割り込みを行い、割り込み制御モードでのデータ転送は制御の下で完了します。割り込み処理中に CPU の制御が行われ、DMA コントローラの制御により DMA 制御メソッドが完了します。

DMA コントローラには主に 4 種類のレジスタが含まれており、ホストとコントローラの間でブロック データを交換するために使用されます

  • コマンド/ステータス レジスタ (CR): CPU から送信された I/O コマンドまたは関連する制御情報、またはデバイスのステータスを受信するために使用されます。
  • メモリ アドレス レジスタ (MAR): メモリから内部へ、またはメモリからデバイスへの転送に使用されるメモリ アドレス。
  • データ レジスタ (DR) は、デバイスからメモリへ、またはメモリからデバイスへデータを保存するために使用されます。
  • データカウンタ(DC):今回送信するワード数を格納します。

アドバンテージ。DMA 制御モードでは、デバイスと CPU が並行して動作することができ、CPU の介入なしにデバイスとデバイス間のデータ交換速度が高速化されます。

欠点がある。DMA 制御方式には依然としていくつかの制限があり、たとえば、データ送信の方向、入力データを格納するメモリの開始アドレス、送信データの長さはすべて CPU によって制御され、各デバイスには DMA が必要です。デバイスの数が増えると、複数の DMA コントローラを使用することも不経済になります。

チャネル制御モード

チャネル制御方式はDMA制御方式に似ており、デバイスとメモリ間で直接データのやり取りを実現するメモリ中心の制御方式です。DMA 制御方式と比較して、CPU の介入が少なく、1 つのチャネルで複数のデバイスを制御できるため、CPU の負担がさらに軽減されます。チャネルは本質的に単純なプロセッサです。CPU から独立しています。演算および制御ロジックがあり、独自の命令システムを持ち、プログラム制御の下でも動作します。特に入出力制御を担当し、次の機能を備えています。 I/O 命令の実行 チャネル I/O プログラムを実行して I/O 動作を制御します。

CPU とは異なり、チャネルの命令タイプは 1 つです。これは、チャネル ハードウェアが比較的単純であるためです。実行できるコマンドは主に I/O 操作に関連する命令に限定されており、チャネルには独自のメモリがありません。チャネルによって実行されるチャネル プログラムはホストのメモリに配置されます。つまり、チャネルと CPU はメモリを共有します

  • バイト多重チャネル

    バイト多重化は、データがバイト単位で転送される複数の低速および中速デバイスを接続するために使用されます。端末機器などは1バイトごとに送信するのに時間がかかります。したがって、チャネルはバイトインターリーブ方式で複数のペリフェラルに順番にサービスを提供し、チャネルの使用率を高めることができます。このチャネルのデータ幅は通常シングルバイトです

    ここに画像の説明を挿入します

  • アレイ選択チャネル

    バイト多重チャネルは高速デバイスの接続には適していないため、アレイでのデータ転送用のアレイ選択チャネルの形成が促進されます。この種のチャネルは複数の高速デバイスを接続できますが、配信サブチャネルが 1 つしか含まれていないため、データ送信のために 1 つのデバイスを制御するために一定時間内に 1 つのチャネル プログラムしか実行できません。デバイスがチャネルを占有 その後はそのチャネルが占有され、データ送信がなくチャネルがアイドル状態であっても、デバイスが送信を完了してチャネルを解放するまで、他のデバイスはそのチャネルを使用できません。このチャネルの使用率が非常に低いことがわかります。

  • アレイマルチチャンネル

    アレイ選択チャネルは高い転送速度を持っていますが、一度にデータを転送できるデバイスは 1 つだけです。アレイマルチチャネルチャネルは、アレイ選択チャネルの高い伝送速度と、マルチバイトマルチチャネルチャネルの各サブチャネル(デバイス)の時分割並列動作の利点を組み合わせて形成される新しいチャネルですこれには複数の未割り当てのサブチャネルが含まれているため、このチャネルは満足のいくチャネル使用率を達成しながら高いデータ転送速度を達成できます。このため、このチャネルは複数の高速および中速度の周辺機器を接続するために広く使用でき、データ伝送はアレイ方式で行われます

I/O チャネル方式は DMA 方式を発展させたもので、データ送信の制御における CPU の関与をさらに軽減します。データ ブロックのグループの読み取り (または書き込み) および関連する制御と管理へのデータ ブロックの読み取り (または書き込み) の介入を減らします。同時に、CPU、チャネル、I/O デバイスの並列動作を実現できるため、システム全体のリソース使用率がより効果的に向上します。

データ入力を例にとると、ユーザー プロセスがデータを必要とする場合、CPU は起動コマンドを発行して、実行する I/O 操作、使用するデバイスおよびチャネルを指定します。対応するチャネルはCPUからスタートコマンドを受け取ると、メモリに格納されているチャネルプログラムを読み出して実行し、メモリ上の指定された領域にデータを転送するようにデバイスを制御します。デバイスが入力を取得している間、CPU は他の作業を行うことができます。データ転送が終了すると、デバイスコントローラはCPUに割り込み要求を送信し、割り込み要求を受け取ったCPUは割り込みハンドラに移行して実行し、割り込み終了後、割り込み先のプログラムに戻ります。

  • アドバンテージ。チャネル制御方式は、I/O 操作の独立性と各コンポーネントの作業の並列性を解決します。チャネルにより、CPU は煩雑な入出力操作から解放されます。チャネルテクノロジーの採用により、CPUとチャネルの並列動作が実現できるだけでなく、チャネル間の並列動作も実現し、各チャネル上のペリフェラルも並列動作できるようになり、性能向上の基本的な目的を達成できます。システム全体の効率。
  • より多くのハードウェア (チャネル プロセッサ) が必要となるため、コストが高くなります。チャネル制御方法は通常、大規模なデータ対話の状況で使用されます。

チャネル制御モードと DMA 制御モードの違い: まず、DMA 制御モードでは、CPU は送信するデータ ブロックのサイズと転送するメモリを制御する必要がありますが、チャネル制御モードでは、これらの情報はチャネルによって制御および管理されます。 1つのデバイスに対応し、メモリにデータを転送するため、1つのチャネルで複数のデバイスとメモリ間のデータ交換を制御できます。

5.1.3 I/O ソフトウェア階層

I/O ソフトウェア設計の基本的な考え方は、デバイス管理ソフトウェアを階層構造に編成することです。低レベルのソフトウェアはハードウェアに関連しており、ハードウェアの特定の詳細を保護するために使用されますが、高レベルのソフトウェアはユーザーに使いやすく、明確で統一されたインターフェイスを提供しますI/O デバイス管理ソフトウェアは通常、割り込みハンドラー、デバイス ドライバー、デバイス独立ソフトウェア、ユーザー層ソフトウェアの 4 つの層に分かれています。

階層の概要

ここに画像の説明を挿入します

ユーザー プログラムがファイルからデータのブロックを読み取る場合は、オペレーティング システムを通じて行う必要があります。デバイス非依存ソフトウェアは、まずキャッシュ内でこのデータ ブロックを検索します。見つからない場合は、デバイス ドライバーを呼び出してハードウェアに対応するリクエストを発行し、ユーザーはデータ ブロックが読み取られるまでブロックを処理します。ディスク操作が完了すると、ハードウェアは割り込みを生成し、割り込みハンドラーに転送します。割り込みハンドラーは割り込みの原因を確認し、デバイスから必要な情報を取得してから、スリープ状態のプロセスを起動して I/O 要求を終了し、ユーザー プロセスが実行を継続できるようにします。

割り込みハンドラ

割り込み処理は、入出力デバイスとメモリと CPU 間のデータ転送を制御するための主な方法です割り込みはハードウェアに依存し、I/O デバイスの割り込みサービス ルーチンのコードはどのプロセスからも独立しています。I/O 操作が完了すると、デバイスは CPU に割り込み信号を送信し、CPU は割り込みに応答して割り込みハンドラーに切り替わります。

中断のプロセスは次のとおりです。

  • ブロックされたドライバープロセスを起動する
  • 中断されたプロセスのCPU環境を保護する
  • 中断の原因を分析する
  • 割り込み処理を実行する
  • 中断されたプロセスのシーンを復元する

デバイスドライバ

デバイス関連のコードはすべてデバイス ドライバーに配置されます。デバイス ドライバーはデバイスと密接に関係しているため、デバイスの種類ごとにドライバーを構成する必要があります。

デバイス ドライバーのタスクは、上位層のデバイス独立ソフトウェアから抽象的な要求を受け入れ、これらの要求をデバイス コントローラーが受け入れられる特定のコマンドに変換し、これらのコマンドをデバイス コントローラーに送信して、これらのコマンドが正しく実行されるように監視することです。リクエストが到着したときにデバイス ドライバがアイドル状態であれば、デバイス ドライバはすぐにリクエストの実行を開始し、デバイス ドライバがリクエストを実行中の場合、新しいリクエストは待機キューに挿入されます。デバイス ドライバーは、デバイス コントローラーに設定されているレジスターの数とそれらの用途を認識しているオペレーティング システム内の唯一のプログラムです

デバイスドライバーの処理:

  • 抽象的な要件を具体的な要件に変換する
  • I/Oリクエストの有効性をチェックする
  • デバイスのステータスを読み取って確認する
  • 必要なパラメータを渡す
  • 作業をセットアップする
  • I/Oデバイスの起動

デバイスに依存しないソフトウェア

I/O ソフトウェアの一部 (デバイス ドライバーなど) はデバイスに依存しますが、ほとんどのソフトウェアはデバイスに依存しません。デバイス ドライバーとデバイスに依存しないソフトウェアの境界については、オペレーティング システムによって異なります。具体的な分割原則は、システム設計者がシステムとデバイスの独立性、デバイス ドライバーの動作効率などをどのように考慮するかによって決まります。他の要因。デバイスに依存しない方法で実装される一部の機能については、効率などの理由からデバイス ドライバーによって実装することもできます。

デバイス非依存ソフトウェアの基本的なタスクは、一般的なデバイスに必要な I/O 機能を実装し、ユーザー空間ソフトウェアに統一されたインターフェイスを提供することです通常、デバイス非依存ソフトウェアが実装する必要がある機能には、デバイス ドライバーの統一インターフェイス、デバイスの命名、デバイスの保護、デバイスに依存しない論理ブロックの提供、バッファーとストレージ デバイスのブロック割り当て、排他的デバイスの割り当てと解放、およびエラー処理が含まれます。

ユーザーレベルのソフトウェア

一般に、ほとんどの I/O ソフトウェアはオペレーティング システムに含まれていますが、一部のソフトウェアは依然としてユーザー プログラムとリンクされたライブラリ関数で構成されている場合や、カーネルの外部で実行されるプログラムでさえ構成されています一般的なシステム コールには、ライブラリ関数によって実装される I/O システム コールが含まれます。SPOOLing システムもこのレベルです。

5.2 I/Oコアサブシステム

I/O コア サブシステムは、さまざまなデバイス制御方法であり、主に I/O スケジューリング、キャッシュおよびバッファ デバイスの割り当てとリサイクル、スプーリング テクノロジなどのサービスを提供します。

5.2.1 I/O スケジューリングの概念

I/O スケジューリングは、I/O リクエストを実行する適切な順序を決定することです。アプリケーションによって発行されるシステム コールの順序は、常に最適な選択であるとは限りません。そのため、システム全体のパフォーマンスを向上させ、プロセス間でのデバイス アクセスの公平な共有を可能にし、I/O に必要な平均待機時間を短縮するには、I/O スケジューリングが必要です。 /O 完了です

オペレーティング システムは、各デバイスの要求キューを維持することによってスケジューリングを実装します。アプリケーションがブロッキング I/O システム コールを実行すると、リクエストは対応するデバイスのキューに追加されます。I/O スケジューリングはキューを並べ替えて、システム全体の効率とアプリケーションの平均応​​答時間を向上させます。

I/O サブシステムがコンピュータの効率を向上させる方法には、I/O スケジューリングや、バッファリング、キャッシュ、スプーリングなどのメイン メモリまたはディスク上の記憶領域テクノロジの使用が含まれます。

5.2.2 キャッシュとバッファ

プロセッサと周辺機器間の並列度を向上させるもう 1 つのテクノロジは、バッファリング テクノロジです。

キャッシュの導入

割り込み、DMA、およびチャネル制御技術により、システム内のデバイスとデバイス、デバイスと CPU の並列実行が可能になりますが、デバイスと CPU 間の処理速度の不一致の問題が客観的に存在し、この問題がコンピュータ システムのパフォーマンスのさらなる向上を制限します。

バッファの導入により、CPU とデバイスの速度間の矛盾が軽減され、デバイスと CPU の並列動作の度合いが向上し、システムのスループットとデバイスの使用率が向上します。さらに、バッファリングの導入により、CPU へのデバイス割り込みの頻度が減り、割り込み応答時間の制限が緩和されます

キャッシュを実装するには 2 つの方法があります。

  • ハードウェアバッファを使用して実装されていますが、コストが高いため、一部の重要な部分を除いて一般的には使用されていません。
  • メモリ上には、入出力データを一時的に保存するための専用の記憶領域が確保されており、この領域をバッファと呼びます。

キャッシュの分類

システムに応じて設定されるバッファ数, バッファリング技術は、シングルバッファリング、ダブルバッファリング、循環バッファリング、バッファプールに分類できます

  • 単一バッファ

    ここに画像の説明を挿入します

    シングル バッファリングは、オペレーティング システムが提供するバッファリングの最も単純な形式です。ユーザー プロセスが I/O 要求を発行すると、オペレーティング システムはメモリ内にその要求にバッファを割り当てます。バッファが 1 つだけ設定されているため、デバイスとプロセッサがデータを交換するときは、交換するデータを最初にバッファに書き込み、次にデータを必要とするデバイスまたはプロセッサがバッファからデータを取得する必要があります。バッファ操作は次のとおりです。シリアル

  • ダブルバッファリング

    ここに画像の説明を挿入します

    ダブルバッファリングの導入により、処理と準備の並行操作の度合いを高めることができます。ブロック デバイスに入力する場合、入力デバイスは最初に最初のバッファにデータを書き込み、入力デバイスが 2 番目のバッファにデータを入れる間に、オペレーティング システムはプロセッサが処理できるように最初のバッファのデータをユーザー領域に転送できます。最初のバッファー内のデータが処理され、2 番目のバッファーがいっぱいになると、プロセッサーは 2 番目のバッファー内のデータを処理でき、入力デバイスは最初のバッファーを埋めることができます。明らかに、ダブル バッファリングを使用すると、プロセッサと入力デバイスが並行して動作できる度合いが高まります。両方のバッファーが空で、プロセスがデータを抽出する必要がある場合にのみ、プロセスはブロックされます。

  • 循環バッファ

    デバイスの入出力速度がプロセッサのデータ処理速度と基本的に一致している場合、ダブル バッファリング ソリューションはより良い結果を達成できますが、2 つの速度が大きく異なる場合、ダブル バッファリングの効果は理想的ではありません。この目的のために、循環バッファリング技術が導入されました。

    ここに画像の説明を挿入します

    循環バッファには同じサイズの複数のバッファが含まれます。各バッファには次のバッファを指すリンク ポインタがあり、最後のバッファのポインタは最初のバッファを指すため、複数のバッファがリングを形成します循環バッファーが入出力に使用される場合、im と out の 2 つのポインターも必要です。入力の場合、まずデバイスからバッファにデータを受信する必要があり、in ポインタはデータを入力できる最初の空のバッファを指します。ユーザー プロセスがデータを必要とするとき、データで満たされたバッファが循環バッファから取り出されます。データを抽出するには、アウト ポインタは、データを抽出できる最初の完全なバッファを指します。出力の場合はその逆で、プロセスは出力する必要がある処理済みデータを空のバッファに送信し、デバイスがアイドル状態になると、データはフル バッファから取り出され、デバイスによって出力されます。

  • バッファプール

    循環バッファリングは一般に、特定の I/O プロセスや計算プロセスに適用されるため、システム内に多数のプロセスがある場合、そのようなバッファが多数存在し、大量のメモリ空間を消費するだけでなく、使用率も低くなります。 。現在、コンピュータシステムではバッファプールが広く使われており、バッファプールは複数のバッファで構成され、複数のプロセスで共有でき、入力と出力の両方に使用できます。

    ここに画像の説明を挿入します

    バッファー プール内のバッファーは、用途に応じて次の 3 つのキューを形成できます。

    • 空のバッファキュー
    • 入力データで満たされたバッファキュー (入力キュー)
    • 出力データで満たされたバッファキュー (出力キュー)

    4種類のワークバッファ:

    • 入力データを保持するための作業バッファ
    • 入力データを抽出するために使用される作業バッファー
    • 出力データを保持するための作業バッファ
    • 出力データを抽出するために使用される作業バッファー

    入力プロセスは、データを入力する必要がある場合、空のバッファー キューの先頭から空のバッファーを取得し、それを作業バッファーとして使用して入力データを収容し、そのバッファーにデータを入力して、入力キューにハングします。いっぱいになったら列の終わり。計算プロセスは、データを入力する必要がある場合、入力データを抽出するための作業用バッファとして入力キューからバッファを取得し、そこからデータを抽出し、データが使い果たされた後、空の末尾までハングアップします。バッファキュー。計算プロセスがデータを出力する必要がある場合、出力データを収容するための作業バッファとして空のバッファ キューの先頭から空のバッファを取得し、出力データでいっぱいになると、出力キューの末尾にハングします。 。出力が必要な場合、出力プロセスは出力データを抽出するための作業用バッファとして出力キューから出力データで満たされたバッファを取得し、抽出後のデータは空のバッファキューの最後尾にハングされます。

    キャッシュとバッファ

    キャッシュはデータのコピーを保持できる高速メモリです。キャッシュへのアクセスは、元のデータにアクセスするよりも効率的かつ高速ですキャッシュとバッファはどちらも高速デバイスと低速デバイスの間にありますが、キャッシュはバッファと同等ではありません、それらの間には大きな違いがあります

  • 両者に保存されるデータは異なります。キャッシュに配置されるのは、低速デバイス上の一部のデータのバックアップです。つまり、キャッシュ上のデータは低速デバイス上にある必要がありますバッファには低速デバイスから高速デバイスに渡されるデータが含まれます。データは低速デバイスからバッファに渡され、その後バッファから高速デバイスに送信されます。低速デバイスのバックアップにはなりません。

  • 両者の目的は異なります。キャッシュは、低速デバイス上で頻繁にアクセスされるデータのバックアップを保存するために導入されており、これにより、高速デバイスが低速デバイスに毎回アクセスする必要がなくなります。ただし、アクセスするデータがキャッシュにない場合、 、その後、高速デバイスは引き続き低速デバイスへのアクセスを必要としますバッファは、高速デバイスと低速デバイス間の速度の不一致を軽減するために使用されます。高速デバイスと低速デバイス間のすべての通信はバッファを通過する必要があります。高速デバイスが低速デバイスに直接アクセスすることはありません。

5.2.3 機器の割り当てとリサイクル

デバイス割り当てはデバイス管理の機能の 1 つであり、プロセスがシステムに対して I/O 要求を行うと、デバイス割り当てプログラムは特定の割り当て戦略に従って必要なデバイスを割り当て、さらに対応するデバイス コントローラとチャネルも割り当てます。 CPU とデバイス間の通信を確保します。

デバイス管理のデータ構造

I/Oデバイスの管理・制御を実現するには、各デバイス、チャネル、デバイスコントローラの関連情報を記録する必要があります。デバイス割り当てに基づく主なデータ構造は、デバイス コントロール テーブル (DCT)、デバイス コントローラー コントロール テーブル (COCT)、チャネル コントロール テーブル (CHCT)、およびシステム デバイス テーブル (SDT) です。機器に制御テーブルが必要なだけでなく、コントローラにも制御テーブルが必要で、コントローラを制御するチャネルにも制御テーブルが必要ですが、同時に最終リソースである機器にもテーブルが必要です。システムデバイステーブル

ここに画像の説明を挿入します

  • DCT。システムは、デバイスの特性と I/O コントローラの接続ステータスを記録するために、デバイスごとにデバイス管理テーブルを構成しますこのうち、デバイス ステータスはデバイスの現在の状態 (ビジー/アイドル) を示すために使用され、デバイス待機キュー ポインタはデバイスの使用を待機しているプロセスで構成される待機キューを指し、コントローラ制御テーブル (COCT) ポインタは、は、デバイスに接続されているデバイス コントローラーを指します。
  • COCT。各コントローラは、このようなコントローラ管理テーブルを備えており、デバイスコントローラの使用状況やチャネルとの接続状況を反映するために使用される
  • CHCT。また、各チャネルにはチャネル管理テーブルがあり、チャネルの状態などを反映するために使用されます
  • SDT。システム デバイス テーブルはシステム全体に 1 つだけ存在し、システムに接続されているすべての物理デバイスのステータスを記録し、各物理デバイスが 1 つのエントリを占有しますSDT の各エントリには、デバイス タイプ、デバイス識別子、デバイス制御テーブル ポインタなどの情報が含まれます。このうち、デバイス制御テーブル(DCT)ポインタは、デバイスに対応するデバイス制御テーブルを指す。

デバイス割り当て戦略

コンピュータ システムでは、デバイスにサービスを要求するプロセスの数がデバイスの数よりも多いことが多く、これにより、特定の種類のデバイスをめぐって複数のプロセス間で競合が発生するという問題が発生します。システムが正常に動作するようにするには、機器を割り当てるときにシステムで次の問題を考慮する必要があります。

  • 機器の使用の性質

    • 専用装備。排他的デバイスとも呼ばれる、排他的割り当て方法を使用する必要があります。つまり、デバイスがプロセスに割り当てられた後、プロセスが完了するかデバイスを解放するまで、そのデバイスは排他的に占有され、その後システムがデバイスを割り当てることができます。他のプロセスに。実際、ほとんどの低速デバイスはこの割り当てに適していますが、主な欠点は、I/O デバイスが十分に活用されていないことが多いことです。
    • 共有割り当て。共有デバイスの場合、システムはデバイスを複数のプロセスに同時に割り当てることができます。共有割り当て方法によりデバイスの使用率が大幅に向上しますが、デバイスへのアクセスは合理的にスケジュールする必要があります。
    • 仮想割り当て。仮想割り当ては仮想デバイス用です。プロセスが専用デバイスを申請すると、システムは共有デバイス上の記憶領域の一部をそのデバイスに割り当てます。プロセスがデバイスと情報を交換したい場合、システムは交換される情報を保存します。この部分では、ストレージスペース内で、必要に応じて、デバイス上の情報をストレージスペースに転送するか、ストレージスペースからデバイスに情報を転送します。
  • デバイス割り当てアルゴリズム

    • 早い者勝ち。キューはリクエストの時間順に形成され、デバイスは常に先頭プロセスに最初に割り当てられます。
    • 優先度が最も高いものが優先されます。デバイスは優先度に従って割り当てられ、優先度が同じ場合は先着順アルゴリズムに従って割り当てられます。
  • デバイス割り当てのセキュリティ

    いわゆるデバイス割り当てのセキュリティとは、デバイス割り当て中にプロセスのデッドロックが発生してはならないことを意味します。

    機器の割り当てには、静的割り当てと動的割り当てを使用できます。静的割り当てとは、ユーザージョブの実行を開始する前に、システムがジョブに必要なすべての機器、デバイスコントローラー、チャネルを一度に割り当て、一度割り当てられるとジョブがキャンセルされるまで占有されることを意味します。静的割り当てではデッドロックは発生しませんが、デバイスの使用効率は低くなります動的割り当てとは、プロセス実行中に実行ニーズに応じて機器を割り当てることを指します。プロセスで必要なときにデバイスを申請し、使用後はすぐに解放します。動的割り当てはデバイスの使用率を向上させるのに役立ちますが、割り当てアルゴリズムが不適切な場合はデッドロックが発生する可能性があります

    設備の動的割り当て方法は、安全な割り当てと非安全な割り当てに分けられます。

    • 安全な割り当て方法では、プロセスが I/O 要求を発行するたびにブロッキング状態になり、I/O が完了するまで起動されません。この割り当て方法は「リクエストアンドホールド条件」を放棄し、デッドロックは発生しないが、処理の進みが遅い
    • 安全でない割り当てモードでは、プロセスは I/O 要求の発行後に実行が許可され、I/O 要求を発行し続けることができるため、プロセスは複数のデバイスを同時に操作する可能性があります。プロセスを迅速に進めますが、死亡が発生する可能性がありますロックされるため、デバイスを割り当てる前にセキュリティチェックを実行する必要があります。

デバイスの独立性

デバイスの独立性は、アプリケーションが使用される特定の物理デバイスから独立しているという事実を指します。これにより、デバイスの割り当てとデバイスの使用率の柔軟性が向上します。オペレーティング システムの適応性と拡張性を向上させるために、最新のオペレーティング システムは例外なくデバイスの独立性 (デバイスの独立性とも呼ばれます) を実現しています。

デバイスの独立性を実現するには、論理デバイスと物理デバイスの 2 つの概念が導入され、各テーブル エントリに論理デバイス名、物理デバイス名が含まれる論理デバイス テーブル (LUT) をシステムにセットアップする必要があります。およびデバイスドライバーのエントリアドレスアプリケーションでは、論理デバイス名は特定の種類のデバイスの使用を要求するために使用され、このプロセスのためにシステムによって割り当てられた論理デバイスは、物理デバイスとデバイス ドライバのエントリ アドレスに対応します。この情報は、論理デバイス テーブルの項目。将来、プロセスが論理デバイス名を通じて I/O 操作を要求すると、対応する物理デバイスとドライバーのエントリ アドレスを見つけることができます。

デバイスの独立性の利点には、デバイス割り当ての柔軟性と I/O リダイレクトの容易さが含まれます。

デバイスの独立性を実現するには、すべての I/O デバイスに共通の操作を実行し、ユーザー層ソフトウェアに統一されたインターフェイスを提供するには、デバイス ドライバーの上にデバイス独立ソフトウェアの層をセットアップする必要があります。口。重要なのは、論理デバイスを物理デバイスにマップするには、システムに論理デバイス テーブルを設定する必要があるということです。各エントリには、論理デバイス名、物理デバイス名、デバイス ドライバ エントリ アドレスの 3 つの項目が含まれます。アプリケーションが論理デバイスを使用するときは、名前が I/O デバイスを要求する場合、システムは対応する物理デバイスをそれに割り当て、LUT にエントリを作成する必要があります。プロセスが論理デバイス名を使用して I/O 操作を要求する場合、プロセスは物理デバイスをLUT: デバイス名とドライバーのエントリーアドレス。

オペレーティング システムは、デバイス独立性ソフトウェアをセットアップし、論理デバイス テーブルを構成し、論理デバイスを物理デバイスにマッピングすることにより、デバイス独立性を実装します

設備割り当てプログラム

  • シングルチャネル I/O システムのデバイス割り当て

    プロセスが I/O 要求を行うと、システムのデバイス割り当てプログラムは次の手順に従ってデバイスを割り当てることができます。

    • 装備の割り当て
    • デバイスコントローラーの割り当て
    • チャンネルの割り当て

    割り当て中に、対応するデバイスがビジー状態の場合、プロセスは対応する待機キューに挿入されます。

  • マルチチャネル I/O システムのデバイス割り当て

    システムの柔軟性を向上させるために、通常、マルチチャネル I/O システム構造が採用されます。つまり、デバイスは複数のデバイス コントローラに接続され、デバイス コントローラも複数のチャネルに接続されます。プロセスが I/O 要求を行うと、システムはこのタイプのデバイスをプロセスに割り当てることを選択できます。手順は次のとおりです。

    • デバイス タイプに応じて、システム デバイス制御テーブルを取得し、最初のアイドル デバイスを見つけて、割り当ての安全性を検出します。安全な場合は割り当てます。安全でない場合は、デバイスをこのタイプのデバイスの待機キューに挿入します。
    • デバイスの割り当て後、デバイス コントローラ管理テーブルを検索して、割り当てられたデバイスに接続されている最初の空きデバイス コントローラを見つけます。空きデバイスがない場合は、手順 1) に戻って次の空きデバイスを見つけます。
    • デバイス コントローラが割り当てられると、それに接続されているチャネルも検索され、最初のアイドル チャネルが見つかります。アイドル チャネルがない場合は、ステップ 2) に戻って、次のアイドル デバイス コントローラを見つけます。空きチャネルがあればデバイスの割り当ては成功し、該当するデバイス、デバイスコントローラ、チャネルがプロセスに割り当てられ、I/Oデバイスが起動され情報送信が開始されます。

機器のリサイクル

プロセスが対応する I/O デバイスの使用を終了すると、占有されていたデバイス、デバイス コントローラ、およびチャネルが解放され、システムはそれをリサイクルし、次の割り当てで使用するために対応するデータ構造を変更します。

5.2.4 スプーリング技術

システム内の専用デバイスの数は限られており、多くの場合、システム内の複数のプロセスのニーズを満たすことができないため、システムの「ボトルネック」となり、待機により多くのプロセスがブロックされます。さらに、専用デバイスに割り当てられたプロセスは、実行期間全体を通じてデバイスを頻繁に占有しますが、使用頻度は低いため、デバイスの使用率が低くなります。この欠点を克服するために人々は、共有デバイスを利用して専用デバイスを仮想化し、専用デバイスを共有デバイスに変換することで、デバイスの利用率やシステム効率を向上させる技術をSPOOLing技術と呼びます。

スプールとは、オンラインで同時に動作する周辺機器を意味し、スプール入出力動作とも呼ばれます。スプーリング テクノロジは、実際には、キュー ダンプ テクノロジとしても知られるペリフェラル同時オンライン操作テクノロジです。システムのスプールは、オフラインの方法とは異なります。

ここに画像の説明を挿入します

スプーリング技術は、低速の入出力デバイスをホストと交換する技術であり、オフラインの効果をオンラインで得ることを基本的な考え方としています。低速デバイスは、ホスト メモリにあるチャネルおよびバッファ メモリを介して高速デバイスに接続されます (通常、高速デバイスは補助メモリです)。低速デバイスから入力された情報を記憶するために、メモリ内にバッファを形成し、高速デバイス上に出力ウェルと入力ウェルを形成し、送信時には低速デバイスから情報を転送します。高速デバイスからバッファ、次に高速デバイスの入力ウェル、そしてそこから 高速デバイスの出力はバッファに渡され、最後に低速デバイスに渡されます

SPOOLingシステムの構成

  • 入力ウェルと出力ウェル。入力ウェルと出力ウェルは、ディスク上に開かれた 2 つの記憶領域です。入力ウェルは、オフライン入力中にディスクをシミュレートし、I/O デバイスによって入力されたデータを保存するために使用されます。オフライン出力時に、ユーザプログラムの出力データを格納するディスクを出力およびシミュレートします。

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

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

専用プリンターを複数のユーザーが共有できるプリンターに変換することは、SPOOLing テクノロジーの典型的な適用例です。具体的な方法は、ユーザーの印刷出力の場合、システムはユーザー プロセスに実際にプリンターを割り当てるのではなく、まず出力ウェル内の空きディスク領域を適用し、そこに印刷するデータを送信し、その後でユーザーのプロセスに適用され、入力されます。印刷テーブルを要求し、そのテーブルを印刷要求キューにハングします。プリンタがアイドル状態の場合、出力プログラムは要求元の印刷キューの先頭からテーブルを取得し、印刷するデータを出力ウェルからメモリ バッファに転送し、印刷キューが空になるまで印刷を続けます

SPOOLing技術の特徴

  • I/O速度が向上しました。低 I/O デバイスでの動作から、オフライン動作と同様の入力ウェルまたは出力ウェルでの動作まで、I/O 速度が向上し、CPU と低速 I/O デバイス間の速度の不一致の矛盾が軽減されます。
  • デバイスはどのプロセスにも割り当てられていません。入力ウェルまたは出力ウェルでは、プロセスに記憶領域が割り当てられ、I/O 要求のテーブルが確立されます。
  • 仮想デバイス機能を実装しました。排他的なデバイスを複数のプロセスが同時に使用し、各プロセスがそのデバイスを排他的に扱うことで、デバイスの仮想的な割り当てを実現します。ただし、デバイスは論理デバイスです。
  • スプーリングは、速度マッチング テクノロジであるだけでなく、仮想デバイス テクノロジでもあります。あるタイプの物理デバイスを使用して別のタイプの物理デバイスをシミュレートするため、各ジョブは実行中に物理専用デバイスを直接使用するのではなく、仮想デバイスのみを使用します。この技術により、専用機器を共有可能な機器に変えることができ、機器の稼働率やシステム効率を向上させることができます。

おすすめ

転載: blog.csdn.net/pipihan21/article/details/129809470