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)
页面执行时间:207.364毫秒