Operating-system-os-io-software

提供:Dev Guides
移動先:案内検索

オペレーティングシステム-I/Oソフトウェア

I/Oソフトウェアは、多くの場合、次の層で構成されています-

  • ユーザーレベルライブラリ-これは、入力と出力を実行するユーザープログラムへのシンプルなインターフェイスを提供します。 たとえば、 stdio はCおよびC ++プログラミング言語によって提供されるライブラリです。
  • カーネルレベルモジュール-これは、デバイスドライバーが使用するデバイスコントローラーおよびデバイスに依存しないI/Oモジュールと対話するデバイスドライバーを提供します。
  • ハードウェア-この層には、デバイスドライバーと対話し、ハードウェアをアクティブにする実際のハードウェアとハ​​ードウェアコントローラーが含まれます。

I/Oソフトウェアの設計における重要な概念は、デバイスを事前に指定しなくても、任意のI/Oデバイスにアクセスできるプログラムを作成できる場合、デバイスに依存しないことです。 たとえば、ファイルを入力として読み取るプログラムは、デバイスごとにプログラムを変更することなく、フロッピーディスク、ハードディスク、またはCD-ROM上のファイルを読み取ることができる必要があります。

I/Oソフトウェア

デバイスドライバ

デバイスドライバーは、特定のデバイスを処理するためにOSにプラグインできるソフトウェアモジュールです。 オペレーティングシステムは、デバイスドライバーの助けを借りて、すべてのI/Oデバイスを処理します。 デバイスドライバーは、デバイスに依存するコードをカプセル化し、コードにデバイス固有のレジスタ読み取り/書き込みが含まれるように標準インターフェイスを実装します。 通常、デバイスドライバーは、デバイスの製造元によって作成され、デバイスと共にCD-ROMで提供されます。

デバイスドライバは、次のジョブを実行します-

  • 上記のデバイスに依存しないソフトウェアからのリクエストを受け入れるため。
  • デバイスコントローラーと対話してI/Oを取得および提供し、必要なエラー処理を実行します。
  • リクエストが正常に実行されることを確認する

デバイスドライバーが要求を処理する方法は次のとおりです。要求がブロックNを読み取るようになったとします。 ドライバーは、リクエストの到着時にアイドル状態の場合、すぐにリクエストの実行を開始します。 それ以外の場合、ドライバーが他の要求で既にビジーである場合、新しい要求を保留中の要求のキューに入れます。

割り込みハンドラー

割り込みサービスルーチンまたはISRとしても知られる割り込みハンドラーは、ソフトウェアの一部、より具体的にはオペレーティングシステム、より具体的にはデバイスドライバーのコールバック関数であり、その実行は割り込みの受信によってトリガーされます。

割り込みが発生すると、割り込みプロシージャは、割り込みを処理するために必要な処理をすべて実行し、データ構造を更新し、割り込みの発生を待っていたプロセスを起動します。

割り込みメカニズムは、アドレス、つまり小さなセットから特定の割り込み処理ルーチン/機能を選択する番号を受け入れます。 ほとんどのアーキテクチャでは、このアドレスは割り込みベクターテーブルと呼ばれるテーブルに格納されたオフセットです。 このベクトルには、特殊な割り込みハンドラのメモリアドレスが含まれています。

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

デバイスに依存しないソフトウェアの基本的な機能は、すべてのデバイスに共通のI/O機能を実行し、ユーザーレベルのソフトウェアに統一されたインターフェイスを提供することです。 完全にデバイスに依存しないソフトウェアを作成することは困難ですが、すべてのデバイスに共通するモジュールをいくつか作成できます。 以下は、デバイスに依存しないI/Oソフトウェアの機能のリストです-

  • デバイスドライバーの均一なインターフェイス
  • デバイスの命名-メジャーおよびマイナーデバイス番号にマッピングされたニーモニック名
  • デバイス保護
  • デバイスに依存しないブロックサイズを提供する
  • デバイスから送信されるデータを最終的な宛先に保存できないため、バッファリング。
  • ブロックデバイス上のストレージ割り当て
  • 専用デバイスの割り当てと解放
  • エラー報告

ユーザースペースI/Oソフトウェア

これらは、カーネルの機能にアクセスするための、または最終的にデバイスドライバーと対話するための、よりリッチで簡素化されたインターフェイスを提供するライブラリです。 ユーザーレベルのI/Oソフトウェアのほとんどは、マルチプログラミングシステムで専用I/Oデバイスを処理する方法であるスプーリングシステムのようないくつかの例外を含むライブラリプロシージャで構成されています。

I/Oライブラリ(stdioなど)はユーザー空間にあり、OSに常駐するデバイスに依存しないI/O SWへのインターフェイスを提供します。 たとえば、putchar()、getchar()、printf()、およびscanf()は、Cプログラミングで利用可能なユーザーレベルのI/Oライブラリstdioの例です。

カーネルI/Oサブシステム

カーネルI/Oサブシステムは、I/Oに関連する多くのサービスを提供します。 以下は、提供されるサービスの一部です。

  • スケジューリング-カーネルは一連のI/O要求をスケジュールして、それらを実行する適切な順序を決定します。 アプリケーションがブロッキングI/Oシステムコールを発行すると、そのデバイスのキューに要求が置かれます。 カーネルI/Oスケジューラは、キューの順序を並べ替えて、システム全体の効率とアプリケーションが受ける平均応答時間を改善します。
  • バッファリング-カーネルI/Oサブシステムは、2つのデバイス間またはアプリケーション操作のあるデバイス間で転送されるデータを保存する*バッファ*と呼ばれるメモリ領域を維持します。 バッファリングは、データストリームのプロデューサーとコンシューマー間の速度の不一致に対処するため、または異なるデータ転送サイズを持つデバイス間で適応するために行われます。
  • キャッシュ-カーネルは、データのコピーを保持する高速メモリの領域であるキャッシュメモリを維持します。 キャッシュされたコピーへのアクセスは、オリジナルへのアクセスよりも効率的です。
  • スプーリングとデバイス予約-スプールは、インターリーブされたデータストリームを受け入れることができないプリンターなどのデバイスの出力を保持するバッファーです。 スプーリングシステムは、キューに入れられたスプールファイルを一度に1つずつプリンターにコピーします。 一部のオペレーティングシステムでは、スプーリングはシステムデーモンプロセスによって管理されます。 他のオペレーティングシステムでは、カーネルスレッドによって処理されます。
  • エラー処理-保護されたメモリを使用するオペレーティングシステムは、多くの種類のハードウェアおよびアプリケーションエラーから保護できます。