Operating-system-os-io-hardware
オペレーティングシステム-I/Oハードウェア
オペレーティングシステムの重要な仕事の1つは、マウス、キーボード、タッチパッド、ディスクドライブ、ディスプレイアダプター、USBデバイス、ビットマップスクリーン、LED、A/Dコンバーター、On/オフスイッチ、ネットワーク接続、オーディオI/O、プリンターなど
I/Oシステムは、アプリケーションI/O要求を取得して物理デバイスに送信し、デバイスから返される応答をすべて取得してアプリケーションに送信する必要があります。 I/Oデバイスは2つのカテゴリに分けることができます-
- ブロックデバイス-ブロックデバイスとは、ドライバーがデータブロック全体を送信することで通信するデバイスです。 たとえば、ハードディスク、USBカメラ、Disk-On-Keyなど。
- キャラクターデバイス-キャラクターデバイスとは、ドライバーが単一の文字(バイト、オクテット)を送受信することで通信するデバイスです。 たとえば、シリアルポート、パラレルポート、サウンドカードなど
デバイスコントローラー
デバイスドライバーは、特定のデバイスを処理するためにOSにプラグインできるソフトウェアモジュールです。 オペレーティングシステムは、デバイスドライバーの助けを借りて、すべてのI/Oデバイスを処理します。
デバイスコントローラーは、デバイスとデバイスドライバー間のインターフェイスのように機能します。 I/Oユニット(キーボード、マウス、プリンターなど)は通常、機械コンポーネントと電子コンポーネントで構成され、電子コンポーネントはデバイスコントローラーと呼ばれます。
オペレーティングシステムと通信するために、各デバイスには常にデバイスコントローラーとデバイスドライバーがあります。 デバイスコントローラーは、複数のデバイスを処理できる場合があります。 インターフェイスとしての主なタスクは、シリアルビットストリームをバイトブロックに変換し、必要に応じてエラー修正を実行することです。
コンピューターに接続されているデバイスはすべてプラグアンドソケットで接続され、ソケットはデバイスコントローラーに接続されています。 以下は、CPU、メモリ、コントローラー、およびI/Oデバイスを接続するためのモデルで、CPUとデバイスコントローラーはすべて共通のバスを使用して通信します。
同期I/Oと非同期I/O
- *同期I/O *-このスキームでは、I/Oの進行中にCPUの実行が待機します
- *非同期I/O *-I/OはCPUの実行と同時に進行します
I/Oデバイスへの通信
CPUには、I/Oデバイスと情報をやり取りする方法が必要です。 CPUおよびデバイスと通信するには、3つのアプローチがあります。
- 特別な命令I/O
- メモリマップドI/O *ダイレクトメモリアクセス(DMA)
特別な命令I/O
これは、I/Oデバイスを制御するために特別に作成されたCPU命令を使用します。 通常、これらの命令により、データをI/Oデバイスに送信したり、I/Oデバイスから読み取ったりできます。
メモリマップドI/O
メモリマップドI/Oを使用する場合、同じアドレス空間がメモリとI/Oデバイスで共有されます。 このデバイスは特定のメインメモリロケーションに直接接続されているため、I/OデバイスはCPUを経由せずにデータブロックをメモリに転送できます。
メモリマップドIOの使用中、OSはメモリ内にバッファを割り当て、そのバッファを使用してCPUにデータを送信するようI/Oデバイスに通知します。 I/OデバイスはCPUと非同期に動作し、終了するとCPUに割り込みます。
この方法の利点は、メモリにアクセスできるすべての命令を使用してI/Oデバイスを操作できることです。 メモリマップドIOは、ディスク、通信インターフェイスなどのほとんどの高速I/Oデバイスに使用されます。
ダイレクトメモリアクセス(DMA)
キーボードなどの遅いデバイスは、各バイトが転送された後にメインCPUに割り込みを生成します。 ディスクなどの高速デバイスが各バイトの割り込みを生成した場合、オペレーティングシステムはこれらの割り込みの処理にほとんどの時間を費やします。 そのため、一般的なコンピューターは、ダイレクトメモリアクセス(DMA)ハードウェアを使用してこのオーバーヘッドを削減します。
ダイレクトメモリアクセス(DMA)は、CPUが関与せずにメモリの読み取りまたは書き込みを行うためのI/Oモジュール権限を付与することを意味します。 DMAモジュール自体は、メインメモリとI/Oデバイス間のデータ交換を制御します。 CPUは転送の開始と終了にのみ関与し、ブロック全体が転送された後にのみ中断されます。
ダイレクトメモリアクセスには、データ転送を管理し、システムバスへのアクセスを調停するDMAコントローラー(DMAC)と呼ばれる特別なハードウェアが必要です。 コントローラーは、ソースポインターと宛先ポインター(データの読み取り/書き込み先)、転送バイト数を追跡するカウンター、およびI/Oとメモリタイプ、CPUサイクルの割り込みと状態を含む設定でプログラムされます。
オペレーティングシステムは、次のようにDMAハードウェアを使用します-
Step | Description |
---|---|
1 | Device driver is instructed to transfer disk data to a buffer address X. |
2 | Device driver then instruct disk controller to transfer data to buffer. |
3 | Disk controller starts DMA transfer. |
4 | Disk controller sends each byte to DMA controller. |
5 | DMA controller transfers bytes to buffer, increases the memory address, decreases the counter C until C becomes zero. |
6 | When C becomes zero, DMA interrupts CPU to signal transfer completion. |
ポーリングと割り込みI/O
コンピューターには、あらゆるタイプの入力の到着を検出する方法が必要です。* ポーリング*と*割り込み*として知られる、これが起こる2つの方法があります。 これらの両方の手法により、プロセッサは、いつでも発生する可能性があり、現在実行中のプロセスに関連しないイベントを処理できます。
ポーリングI/O
ポーリングは、I/Oデバイスがプロセッサと通信するための最も簡単な方法です。 デバイスのステータスを定期的にチェックして、次のI/O操作の時間かどうかを確認するプロセスは、ポーリングと呼ばれます。 I/Oデバイスは単に情報をステータスレジスタに入れ、プロセッサが情報を取得する必要があります。
ほとんどの場合、デバイスは注意を必要とせず、ポーリングプログラムによって次に照会されるまで待機する必要があります。 これは非効率的な方法であり、プロセッサ時間の多くは不要なポーリングに無駄になります。
この方法を、クラスのすべての生徒に助けが必要かどうかを次々と尋ねる教師と比較してください。 明らかに、より効率的な方法は、学生が支援を必要とするたびに教師に通知することです。
I/Oに割り込みます
I/Oを処理するための代替スキームは、割り込み駆動方式です。 割り込みは、注意が必要なデバイスからマイクロプロセッサへの信号です。
デバイスコントローラーは、CPUが割り込みを受け取ったときにCPUの注意が必要な場合にバスに割り込み信号を送ります。現在の状態を保存し、割り込みベクター(さまざまなイベントを処理するOSルーチンのアドレス)を使用して適切な割り込みハンドラーを呼び出します。 割り込みデバイスが処理されると、CPUは割り込みされていないかのように元のタスクを続行します。