オペレーティングシステム-I / Oソフトウェア
I / Oソフトウェアは、多くの場合、次の層で構成されています-
User Level Libraries−これは、入力と出力を実行するためのユーザープログラムへのシンプルなインターフェイスを提供します。例えば、stdio は、CおよびC ++プログラミング言語によって提供されるライブラリです。
Kernel Level Modules −これにより、デバイスドライバーは、デバイスコントローラーおよびデバイスドライバーによって使用されるデバイスに依存しないI / Oモジュールと対話できます。
Hardware −このレイヤーには、実際のハードウェアと、デバイスドライバーと対話してハードウェアを稼働させるハードウェアコントローラーが含まれます。
I / Oソフトウェアの設計における重要な概念は、デバイスに依存せず、事前にデバイスを指定しなくても、任意のI / Oデバイスにアクセスできるプログラムを作成できるようにすることです。たとえば、ファイルを入力として読み取るプログラムは、デバイスごとにプログラムを変更することなく、フロッピーディスク、ハードディスク、またはCD-ROM上のファイルを読み取ることができる必要があります。
デバイスドライバ
デバイスドライバーは、特定のデバイスを処理するために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 / OSWへのインターフェイスを提供します。たとえば、putchar()、getchar()、printf()、scanf()は、Cプログラミングで使用できるユーザーレベルのI / Oライブラリstdioの例です。
カーネルI / Oサブシステム
カーネルI / Oサブシステムは、I / Oに関連する多くのサービスを提供する責任があります。以下は、提供されるサービスの一部です。
Scheduling−カーネルは、一連のI / O要求をスケジュールして、それらを実行する適切な順序を決定します。アプリケーションがブロッキングI / Oシステムコールを発行すると、要求はそのデバイスのキューに配置されます。カーネルI / Oスケジューラーは、キューの順序を再配置して、システム全体の効率とアプリケーションが経験する平均応答時間を改善します。
Buffering −カーネルI / Oサブシステムは、次のようなメモリ領域を維持します。 buffer2つのデバイス間、またはアプリケーション操作のあるデバイス間でデータが転送されるときにデータを保存します。バッファリングは、データストリームのプロデューサーとコンシューマーの間の速度の不一致に対処するため、またはデータ転送サイズが異なるデバイス間で適応するために行われます。
Caching−カーネルは、データのコピーを保持する高速メモリの領域であるキャッシュメモリを維持します。キャッシュされたコピーへのアクセスは、元のコピーへのアクセスよりも効率的です。
Spooling and Device Reservation−スプールは、インターリーブされたデータストリームを受け入れることができないプリンタなどのデバイスの出力を保持するバッファです。スプーリングシステムは、キューに入れられたスプールファイルを一度に1つずつプリンタにコピーします。一部のオペレーティングシステムでは、スプーリングはシステムデーモンプロセスによって管理されます。他のオペレーティングシステムでは、カーネルスレッドで処理されます。
Error Handling −保護されたメモリを使用するオペレーティングシステムは、さまざまな種類のハードウェアおよびアプリケーションのエラーから保護できます。