オペレーティングシステム-I / Oハードウェア
オペレーティングシステムの重要な仕事の1つは、マウス、キーボード、タッチパッド、ディスクドライブ、ディスプレイアダプター、USBデバイス、ビットマップ画面、LED、アナログ-デジタルコンバーター、オン/などのさまざまなI / Oデバイスを管理することです。オフスイッチ、ネットワーク接続、オーディオI / O、プリンターなど。
I / Oシステムは、アプリケーションI / O要求を受け取り、それを物理デバイスに送信してから、デバイスから返される応答を受け取り、それをアプリケーションに送信する必要があります。I / Oデバイスは2つのカテゴリに分類できます-
Block devices−ブロックデバイスは、ドライバーがデータのブロック全体を送信することによって通信するデバイスです。たとえば、ハードディスク、USBカメラ、Disk-On-Keyなど。
Character devices−文字デバイスは、ドライバが単一の文字(バイト、オクテット)を送受信することによって通信するデバイスです。たとえば、シリアルポート、パラレルポート、サウンドカードなど
デバイスコントローラー
デバイスドライバーは、特定のデバイスを処理するためにOSにプラグインできるソフトウェアモジュールです。オペレーティングシステムは、デバイスドライバの助けを借りて、すべてのI / Oデバイスを処理します。
デバイスコントローラーは、デバイスとデバイスドライバー間のインターフェイスのように機能します。I / Oユニット(キーボード、マウス、プリンターなど)は通常、機械部品と電子部品で構成され、電子部品はデバイスコントローラーと呼ばれます。
オペレーティングシステムと通信するために、各デバイスには常にデバイスコントローラーとデバイスドライバーがあります。デバイスコントローラーは、複数のデバイスを処理できる場合があります。インターフェイスとしての主なタスクは、シリアルビットストリームをバイトブロックに変換し、必要に応じてエラー訂正を実行することです。
コンピューターに接続されているデバイスはすべてプラグとソケットで接続され、ソケットはデバイスコントローラーに接続されています。以下は、CPU、メモリ、コントローラー、およびI / Oデバイスを接続するためのモデルであり、CPUとデバイスコントローラーはすべて共通のバスを使用して通信します。
同期I / Oと非同期I / O
Synchronous I/O −このスキームでは、CPUの実行はI / Oが進行する間待機します
Asynchronous 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)と呼ばれる特別なハードウェアが必要です。コントローラは、ソースポインタとデスティネーションポインタ(データの読み取り/書き込み先)、転送されたバイト数を追跡するカウンタ、およびCPUサイクルのI / Oとメモリタイプ、割り込みと状態を含む設定でプログラムされます。
オペレーティングシステムは、次のようにDMAハードウェアを使用します-
ステップ | 説明 |
---|---|
1 | デバイスドライバは、ディスクデータをバッファアドレスXに転送するように指示されます。 |
2 | 次に、デバイスドライバーは、データをバッファーに転送するようにディスクコントローラーに指示します。 |
3 | ディスクコントローラがDMA転送を開始します。 |
4 | ディスクコントローラは、各バイトをDMAコントローラに送信します。 |
5 | DMAコントローラはバイトをバッファに転送し、メモリアドレスを増やし、CがゼロになるまでカウンタCを減らします。 |
6 | Cがゼロになると、DMAはCPUに割り込み、転送の完了を通知します。 |
ポーリングと割り込みI / O
コンピュータには、あらゆるタイプの入力の到着を検出する方法が必要です。これが発生する可能性のある2つの方法があります。polling そして interrupts。これらの手法はどちらも、プロセッサがいつでも発生する可能性があり、現在実行中のプロセスとは関係のないイベントを処理できるようにします。
ポーリングI / O
ポーリングは、I / Oデバイスがプロセッサと通信するための最も簡単な方法です。デバイスのステータスを定期的にチェックして、次のI / O操作の時間かどうかを確認するプロセスは、ポーリングと呼ばれます。I / Oデバイスは単に情報をステータスレジスタに入れるだけで、プロセッサが来て情報を取得する必要があります。
ほとんどの場合、デバイスは注意を必要とせず、注意が必要な場合は、次にポーリングプログラムによって問い合わせられるまで待つ必要があります。これは非効率的な方法であり、プロセッサ時間の多くは不要なポーリングに浪費されます。
この方法を、クラスのすべての生徒に助けが必要かどうかを次々と尋ね続ける教師と比較してください。明らかに、より効率的な方法は、生徒が支援を必要とするときはいつでも教師に通知することです。
I / Oを中断します
I / Oを処理するための代替スキームは、割り込み駆動方式です。割り込みは、注意が必要なデバイスからマイクロプロセッサへの信号です。
デバイスコントローラは、CPUが割り込みを受信したときにCPUの注意が必要なときに、バスに割り込み信号を置きます。現在の状態を保存し、割り込みベクトル(さまざまなイベントを処理するOSルーチンのアドレス)を使用して適切な割り込みハンドラを呼び出します。割り込みデバイスが処理されると、CPUは、割り込みが発生したことがないかのように元のタスクを続行します。