FreeBSD QandA 646

FreeBSD QandA

Q. IRQ や DRQ という略語をよく見かけますが、どういう意味でしょう。

A. 言葉の意味としては次のようになります。

   ・IRQ: Interrupt ReQuest (割り込み要求)
   ・DRQ: DMA ReQuest       (DMA - CPUを使わないデータ転送 - 要求)

   また同じような意味で次のようなものも使われます。

   ・INT
     PC98 では IRQ の他に INT という用語も使われます。基本的に INT と IRQ 
     は同じようなものですが、番号の対応が異なります (IRQ3 と INT3 は異な
     ります)。[管理番号 242] を見てください。注意として PCI デバイスにお
     いても INT という用語が出てきますが、これとは別ものです。
   ・DMA
    DRQ と同じ意味で単に DMA を使う場合もあります。このときは DMA の番号
     をそのまま DRQ の値にすればいいです。例えば、「DMA1」の場合は「DRQ1」
     とすればいいわけです。

   いずれも本来はAT(ISA)バスなどに出ている信号線の名称からきています。IRQ
   は割り込みコントローラ8259Aの信号線、DRQはDMAコントローラ8237Aの信号線
   の名称でした。それぞれのコントローラ1個あたりIRQは8本、DRQ4本あり、ど
   ちらのコントローラも2個AT互換機にあるためIRQは0から15、DRQは0から7番ま
   でとなります。

   このうちにはシステム上であらかじめ利用されているために他の目的には利用
   できない番号がいくつかあります。現在のマザーボードではチップセット内に
   これらのコントローラは含まれているために単独の部品としては存在しません。

   それぞれ PCのシステムに対して入出力にかかわる特定の処理の開始タイミン
   グを知らせるための信号です。例えばキーボードからの入力やシリアル回線
   からデータを取り込む時にはIRQが使用されます。

   一般のPCユーザにとっては拡張カードの設定等の時にお目にかかることが多い
   でしょう。

   IRQやDRQの信号によってOSは「開始タイミング」を知る事ができますが、それ
   が何の開始であるかはそれぞれの信号線の番号に役割を割り当てるか、何らか
   の仕組みを工夫してOSが信号を受け取った時に原因を知る事ができるようにす
   る必要があります。

   信号線の番号への割り当ては「電話のベルを4回ならした後に切ったら、私か
   らの電話だから、その直後にかけた電話を取ってほしい」、とか「5回ならし
   てから切ったら、ここに電話して欲しい」というような取り決めをしておく事
   と似ています。

   例えば3人以上の間でこのような取り決めをした場合「5回ならしたら私の所へ
   電話して欲しい」という取り決めが複数あった場合、どちらに電話したらいい
   か分からなくなります。これと同じで複数のデバイスが割り込み番号を共有し
   た場合に問題が起きます。これがいわゆるIRQやDRQの「衝突」です。

   PCIの場合はOS側で何から要求があったかを知る事ができるための仕組みを作っ
   てあるためIRQ等を共有することができます。これは先の例で言えばメッセー
   ジ機能のあるポケベルを使い、メッセージに用件を入れているようなものです。

   以上のような理由でISAバスのデバイスではIRQやDRQを複数のカードで同じ番
   号を割り当てると問題が起きます。PCI の場合は自動設定機能に加えIRQの共
   有が可能であるため多くの場合で気にしないで済みます。

   ただし実際に共有ができるかどうかはデバイスの性質、ドライバの作り方に依
   存するため、RIVA128を使ったビデオカードのようにIRQを他のカードと共有し
   て割り当てると Windowsでは問題ないが XFree86 では問題が出る、といった
   事も起きることもあります。

   FreeBSDの場合、PnPに対応しているドライバは今の所少なく、また、ISAデバ
   イスのIRQなどの番号の認識を誤る事もトラブルの原因としては比較的多く見
   られるようです。このため、Windows 等を利用する場合に比較するとより注意
   深くカードなどの設定を確認しておく必要があります。

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。