ハードウェアリソースとは
ハードウェアリソースとは、次の四つのことです。
- IRQ
- DMAチャンネル
- I/Oポートアドレス
- メモリアドレス
ハードウェアリソースの割り当てのほとんどはOSが管理しています。 しかしながら、OSが起動する前の、パソコンが起動するために必要な最低限のハードウェアリソースの割り当てはBIOSが行います。
IRQ
あるデバイスが、CPUに対して、別のデバイスの処理を一時的に中断させて、自分自身の処理を優先させることを割り込みといいます。 IRQ(Interrupt ReQuest)とは、デバイスからCPUへ割り込みを要求するときに用いられる信号です。
つまり、割り込みを要求するということを、そのための信号をCPUへ送ることによって実現しているので、その信号をIRQと呼ぶわけです。 実際には、CPUとデバイスとの間には割り込みコントローラと呼ばれる、割り込みを制御するためのLSIが仲介しています。
IRQのための信号線は、IRQ0〜IRQ15までの16個のチャンネルしか設けられていません。
しかも、キーボードやマウスなど、パソコンに必須の機器がいくつかのIRQを占有しています。
したがって、残りのチャンネルをデバイスどうしで共有したり、奪い合ったりしています。
IRQ | デバイス |
---|---|
0 | システムタイマー |
1 | キーボード |
2 | IRQ8〜IRQ15にカスケード |
3 | シリアルポート(COM2) |
4 | シリアルポート(COM1) |
5 | 未使用 |
6 | フロッピーディスクコントローラ |
7 | パラレルポート(LPT1) |
8 | リアルタイムクロック |
9 | 未使用 |
10 | 未使用 |
11 | 未使用 |
12 | PS/2マウス |
13 | 数値演算コプロセッサ |
14 | IDEコントローラ(プライマリ) |
15 | IDEコントローラ(セカンダリ) |
初期のAT互換機(パソコン)では、IRQのチャンネルはIRQ0からIRQ7までの8つしかありませんでした。 後になって、IRQのチャンネルを増やすために、もう一つの割り込みコントローラをIRQ2につないで(カスケード接続して)増設しました。
PCIコントローラは、IRQステアリングと呼ばれる機能により、一つのチャンネルに対して最大四つまで機器を管理できます。 これにより、PCIに対応した複数の拡張カードで一つのIRQを共有することで、IRQ不足を解消しています。
拡張カードに割り当てられるIRQは拡張カードのスロットにより変わります。 そのため、IRQの割り当てがうまくいかないことが原因で拡張カードが使用できないとき、 差し込むスロットを変更することで解決できる場合があります。
DMAチャンネル
DMA(Direct Memory Address)転送とは、CPUを介さずにメインメモリとその他のデバイスとで直接データのやりとりをすることです。 これにより、CPUへの負担を軽くすることができます。
本来は、DMAコントローラと呼ばれる制御用のLSIが仲介します。 DMA転送を行うために利用する信号線がDMAチャンネルです。 DMA0〜DMA7までの8個の番号が用意されています。
DMA | デバイス |
---|---|
0 | 未使用 |
1 | 未使用 |
2 | フロッピーディスクコントローラ |
3 | 未使用 |
4 | DMA0にカスケード |
5 | 未使用 |
6 | 未使用 |
7 | 未使用 |
最近ではDMAコンローラはほとんど使用されていません。
IDEやSCSIにおけるDMA転送は、IDEコントローラやSCSIコントローラが制御しており、 DMAコントローラやDMAチャンネルは関わっていません。
DMAコントローラ以外のコントローラによって制御されるDMA転送を、バスマスタ転送と呼びます。
I/Oポートアドレス
デバイスには、CPUがそのデバイスを制御するためのレジスタと、データをやりとりするためのバッファが内蔵されています。 このレジスタやバッファにCPUがアクセスするために割り振られるアドレス(番地)がI/Oポートアドレスです。
I/Oポートアドレスには16進数で0000からFFFFまでの番号が用意されています。 今のAT互換機が昔の仕様を引き継いでいるために、そのうち通常使用するものは0000から03FFまでに限られています。 さらに0000から00FFまではマザーボード上のチップセットや各種コントローラが占有しています。 したがって、それ以外のデバイスが使用できるのは0100から03FFまでです。
なお、Windows95以降のWindowsでは、I/Oポートアドレスを使わずにデバイスを制御しています。
メモリアドレス
一般に、メモリアドレスとは、メインメモリにおける位置を指し示す番号のことをいいます。 そもそもメモリアドレスという概念は、物理的(ハードウェア的)なものではなく、論理的(ソフトウェア的)なものです。 記憶装置(物理的なもの)と、アドレス(論理的なもの)とをどのように対応させるかという問題は重要です。
だだし、ハードウェアリソースとしてのメモリアドレスとは、 デバイスのメインメモリへのアクセスを制御するために割り当てられるメモリアドレスのことです。
メモリアドレスに関しては、次の二つの問題が生じます。
- メモリアドレスを使い切った時点で、たとえ物理的にメインメモリの空き容量があっても、それ以上デバイスのためにメインメモリは使用できない。
- メモリアドレスを先にたくさん用意しすぎると、メモリアドレスを目一杯使用したとき、メインメモリの物理的な容量が追いつかない。
Windowsは、仮想メモリ機能により、 仮想メモリアドレスと呼ばれる16進数で00000000からFFFFFFFFまでの番号を用意して、 まるですべての番号がメインメモリに対応しているかのように見せかけます。
仮想メモリ機能とは、物理的にメインメモリが不足しても、 ハードディスクに一時的に格納する(スワップする)ことによって不足を補う機能のことです。 これにより、常に4GB分の記憶領域を確保することができます。
つまり、Windowsは、仮想メモリ機能により、メモリアドレスに関する上記の二つの問題を解消しています。
プラグアンドプレイ
プラグアンドプレイは、接続したデバイスを自動的に認識する機能です。次の三つの機能を持っています。
- ハードウェアリソースをデバイスに自動的に割り当てる。
- 初めてデバイスを接続したとき、デバイスドライバを自動的にインストールする。
- デバイスの着脱時に、自動的に、デバイスドライバを有効または無効にする。