Linux 版 (精华区)

发信人: howdoit (教练让我上场!!!), 信区: Linux
标  题: IRQ、DMA和IO端口知识入门
发信站: 哈工大紫丁香 (Tue May 18 09:05:18 1999), 转信

《Linux公报》……让Linux更富魅力!

       IRQ、DMA和IO端口知识入门

                  作者 Eugene Blanchard    翻译 ober

    本文讨论了IBM兼容机上的IRQ、DMA和IO端口地址各自的功能以及

它们的分配问题。我发现有些IBM兼容机和外设的随机文档上虽然列隽松璞钢С值目赡

芘渲茫侨疵挥懈鋈绾巫试磁渲帽曜蓟矫娴娜魏谓ㄒ椤OM馄恼履芄辉RQ、

DMA和IO地址的选择方面为你提供一些参考。 

  

IRQ - 中断请求

    IRQ代表中断请求(Interrupt ReQuest)的意思。它是ISA槽中的

扩展卡给CPU发出的一个通知消息,表示相应的外部设备发生了一定的

事件(该技术同样应用于EISA和MCA扩展槽)。常见的外部设备包括:

调制解调器,网卡(NIC),声卡,SCSI适配卡,硬盘控制器,软盘控

制器, 串行口(COM端口)以及并行口(打印机端口)。 

    IRQ是硬件中断,也就是说主板上的每一个ISA扩展槽都有一条相

应的物理线路与之相连。有两种类型的ISA扩展槽:8位扩展槽和16位

扩展槽。16位的扩展槽既可以用作8位的扩展槽,也可以作为16位的增

强型ISA槽来使用。 

    主板上有8条IRQ(IRQ0-7)线连接到8位的ISA扩展槽。还有另外

的8条(IRQ8-15)连接到16位的增强型ISA槽。所以,在一台典型的

ISA总线的PC机中总共有16条IRQ请求线。其中,IRQ0优先级最高,

IRQ7的优先级最低。IRQ8-15的优先级有点特殊,下面还要详细解释。

    IBM开始生产AT机的时候加入了IRQ8-15。为了保持AT机(286)与

8位XT机(8088)的后向兼容性,同时也为可以提高新的IRQ线的优先

等级,IBM采用了串接两个中断控制器的办法。结果导致中断IRQ8-15

与IRQ2具有相同的优先等级。所谓的“优先等级”是指如果有两条IRQ

线同时发出中断请求,具有较高优先等级的IRQ线上的中断请求首先被

响应。 

    注意:一条IRQ请求线每次只能分配给一个活动设备。如果2个设

备共享同一条IRQ请求线,我们称之为冲突。这表示当这条IRQ线上发

生中断请求的时候,CPU无法判断应该与哪一个进行“对话”。例如,

如果调制解调器和网卡同时使用IRQ5作为自己的中断请求线,假设调

制解调器有一些数据需要传递给CPU,它会在IRQ5线上发出中断请求,

但是CPU在响应的时候无法判断到底应该与调制解调器进行对话还是与

网卡进行对话。计算机可能会挂起,也可能什么事情都不会发生。 

 *** IRQ冲突是PC机发生问题最可能的原因! *** 

    下面这张表是为PC机选择IRQ时的一个很好的推荐(指南)。IRQ

根据其优先级进行排列。(注意,我在上面声称所有的IRQ请求线都连

接到扩展槽的时候也许撒了一点谎。) 

  

IRQ号         功能                                          是否有物理线路 

   ISA总线类型 

IRQ0    系统时钟                        否              - 

IRQ1    键盘控制器                      否              - 

IRQ2    串接IRQ8-15                     否              - 

IRQ8    实时时钟(RTC)                 否              - 

IRQ9    *-可用(IRQ2)                  是              8/16

位 

IRQ10   网卡(NIC)                     是              16位 

IRQ11   SCSI控制器                      是              16位 

IRQ12   主板鼠标/可用                   是              16位 

IRQ13   数学协处理器                    否              - 

IRQ14   IDE控制器1                      是              16位 

IRQ15   IDE控制器2                      是              16位 

IRQ3    Com2/Com4                       是              8位 

IRQ4    Com1/Com3                       是              8位 

IRQ5    声卡/LPT2                       是              8位 

IRQ6    软盘控制器                      是              8位 

IRQ7    并行口LPT1                      是              8位

    *- IRQ9表现得就象原先的IRQ2。通常情况下不要使用它,因为这

样可能导致一些有趣的问题发生。它真的是IRQ9吗?也许它是串接到

IRQ9的IRQ2?你选择哪一个?如果你在一个16位的ISA扩展槽中使用一

个8位的ISA调制解调器会怎么样呢?你看,我的意思是… 

    在你为你的外设选择IRQ的时候,上面这张表是一个很好的推荐,

或者说指南。例如,假设你的PC机没有使用SCSI适配卡,那么IRQ11就

可以用来支持另一块网卡或者其他设备。 

    大多数自动检测IRQ的软件,或者操作系统,例如Linux,假设的

IRQ分配就象上面所列出的那样。 

  

COM端口冲突

    注意到COM1(PC背板上的DB9连接器)和COM3口共享IRQ4。只要保

证每次只有一个设备是活动的,这种情况就是允许的。这意味着如果

你在COM1上连接了一个鼠标,那么你就无法将COM3口用于一个内置式

的调制解调器。否则你就会碰到冲突情况。有些通信软件包允许你这

样做,但是大多数情况下这样不行,或者会引起一些奇怪的操作。常

见的现象是:如果你移动鼠标,你的终端程序可能在屏幕上显示出一

些乱七八糟的内容。 

    COM2(PC背板上的DB25连接器)和COM4口具有同样的问题,只是

大多数人并不使用COM2口。通常情况下将COM4口分配给内置式的调制

解调器是安全的。如果你使用了COM2口,典型情况下它用于一个外置

式的调制解调器,或者是一个绘图仪。通常,这两个设备不会被同时

激活。 

  

标准的COM口分配方案

端口    IRQ     功能

COM1    4       鼠标

COM2    3       绘图仪/外置调制解调器/未用

COM3    4       未用(与鼠标有冲突)

COM4    3       内置调制解调器/未用

DMA -直接存储器存取(Direct Memory Access)

    DMA代表直接存储器存取(Direct Memory Access)。这是允许外

部设备打开某个通道,在不涉及CPU的情况下直接对存储器进行读/写

操作的一种办法。这种方案减轻了CPU的负担,使CPU可以进行执行更

重要的任务。 

    PC机上共有8个可用的DMA通道:DMA0-7。针对8位ISA扩展槽和16

位ISA扩展槽,这些通道也分为8位的通道和16位的通道两种。 

    下面这张表格可以作为选择DMA通道时的一个推荐: 

  

      DMA     功能                 物理线路        ISA总线类型

           通道宽度 

      DMA0    可用                    是              16位    

              8位 

      DMA1    声卡                    是              8位     

              8位 

      DMA2    软盘控制器              是              8位     

              8位 

      DMA3    ECP并行口               是              8位     

              8位 

      DMA4    * - 不可用              否              -       

              16位 

      DMA5    声卡                    是              16位    

              16位 

      DMA6    SCSI                    是              16位    

              16位 

      DMA7    可用                    是              16位    

              16位

注意: 

DMA0用于16位ISA槽但是仅有8位宽度。 

DMA4串接于第一个8位DMA控制器,不可利用。 

 *** DMA冲突是PC机发生问题第二个最可能的原因 *** 

    与IRQ资源类似,一个DMA通道每次只能分配给一个活动的设备。

否则就会有冲突产生,你的设备可能无法正常工作。请留意“活动”

这个词 - 这表示设备是打开的,并且有程序正在访问该设备。一个

DMA通道可以分配给两个设备,只要你保证每次只有一个设备是活动的

- 虽然有点冒险但这是允许的。  

I/O基地址

    I/O基地址也成为I/O端口,I/O地址,I/O端口地址或者I/O基本端

口。它们只是一些存储器的区域(译者注:原作者使用了“memory

 locations”这个词,但是在我们使用的Intel X86的PC机中,内存空

间与I/O空间是分离的),这些区域提供了操作系统与I/O设备(外

设)之间的接口。 外设与操作系统之间通过I/O基地址进行通讯。每

一个外设必须有单独的I/O基地址。 

    标准I/O基地址分配方案(h - 16进制): 

  

060h + 064h             键盘控制器

170h + 376h             第二个IDE硬盘控制器

1F0h + 3F6h             第一个IDE硬盘控制器

220h                    声卡

300h                    网卡

330h                    SCSI适配卡

3F2h                    软盘控制器

3F8h                    COM1

2F8h                    COM2

3E8h                    COM3

2E8h                    COM4

378h                    LPT1

278h                    LPT2

*** I/O地址冲突是PC机发生问题第三个最可能的原因 *** 

    不幸的是,上面这张表格中仅仅包含了一小部分I/O基地址。 到

底使用哪些I/O基地址取决于你的PC机上安装了哪些设备。 

  

Linux中的资源使用情况

    要察看你的Linux系统中的资源配置信息,可以看一下/proc目录

中的下列文本文件: 

cat  /proc/interrupts           列出正在使用的IRQ中断资源 

cat  /proc/ioports              列出正在使用的I/O端口地址 

cat  /proc/dma                  列出正在使用的DMA通道 

                       版权所有 (C) 1999 NJLUG

           出版于第38期《Linux公报》1999年3月 中文版第五期

                            


--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:211.180毫秒