电脑技术学习

LPI 101 考试准备: 硬件和体系结构

dn001

中断

那么,CPU 如何知道最后一次输出何时完成?或者何时有数据在等待读取?通常,在一个状态寄存器中可以获得此信息,通过读取与某设备想关联的一个(或多个)IO 端口可以访问它。在这种情况下会出现两个问题。首先,CPU 不得不花费时间来检查状态。其次,如果设备持有来自某处的数据,比如连接的调制解调器,那些数据必须要及时被读取,否则就可能被下一个可用的数据字节所覆盖。

不浪费多余 CPU 周期,并确保数据能被及时读写,这两个问题是由 中断(interrupt) 的概念所解决的。中断也称为 中断请求(Interrupt Requests)IRQs。当设备中发生 CPU 需要知道的某事件时,设备就会发出一个中断,CPU 则临时停止正在做的其他工作,来处理那件事情。

根据上一节的经验,毫无疑问关于中断的信息也保存在 /proc 文件系统中,在 /proc/interrupts 中。运行 cat /proc/interrupts 命令,可以看到类似于清单 4 的输出。


清单 4. /proc/interrupts

					           CPU0  0:  226300426          XT-PIC  timer  1:      92913          XT-PIC  keyboard  2:          0          XT-PIC  cascade  5:          0          XT-PIC  usb-uhci  8:          1          XT-PIC  rtc  9:    2641134          XT-PIC  ehci-hcd, eth0, Intel ICH4 10:          0          XT-PIC  usb-uhci 11:     213632          XT-PIC  usb-uhci 14:    1944208          XT-PIC  ide0 15:    3562845          XT-PIC  ide1NMI:          0ERR:          0

;

这一次,中断数字是从 0 到 15 的十进制数。同样,将这些中断与清单 5 所示的 PC 标准 IRQ 分配进行比较。


清单 5. 标准 IRQ 设置

					IRQ 0 - System TimerIRQ 1 - KeyboardIRQ 2(9) - Video CardIRQ 3 - COM2, COM4IRQ 4 - COM1, COM3IRQ 5 - Available (LPT2 or Sound Card)IRQ 6 - Floppy Disk ControllerIRQ 7 - LPT1IRQ 8 - Real-Time ClockIRQ 9 - Redirected IRQ 2IRQ 10 - AvailableIRQ 11 - AvailableIRQ 12 - PS/2 MouseIRQ 13 - Math Co-ProcessorIRQ 14 - Hard Disk ControllerIRQ 15 - Available

;

最初,每个设备都有自己的私有 IRQ。做为示例,注意,在清单 5 中,IRQ5 通常用于声卡 或者 第二个并行端口(打印机)。如果两个都要使用,那么不得不去寻找一个能够配置的卡(通常是通过硬件跳线设置)来使用另一个 IRQ,比如 IRQ15。

目前的 PCI 设备是共享 IRQ 的,所以,当某个设备中断 CPU 时,会有一个中断处理程序检查它并判断那个中断是否为它所用的中断,如果不是,则将它传递给链中的下一个处理程序。清单 4 和 5 并没有向我们展示这种共享。在后面的教程中我们将会学习 grep 命令,不过,现在我们可以使用它来过滤 dmesg 命令的输出,来查看关于 IRQ 的引导消息,如清单 6 所示。在此突出显示了共享的中断。


清单 6. 引导过程中发现的中断

					[ian@lyrebird ian]$ dmesg | grep -i irqPCI: Discovered primary peer bus 01 [IRQ]PCI: Using IRQ router PIIX [8086/24c0] at 00:1f.0PCI: Found IRQ 5 for device 00:1f.1PCI: Sharing IRQ 5 with 00:1d.2Serial driver version 5.05c (2001-07-08) with MANY_PORTS MULTIPORT      SHARE_IRQ SERIAL_PCI ISAPNP enabledttyS0 at 0x03f8 (irq = 4) is a 16550AttyS1 at 0x02f8 (irq = 3) is a 16550APCI: Found IRQ 5 for device 00:1f.1PCI: Sharing IRQ 5 with 00:1d.2ICH4: not 100% native mode: will probe irqs lateride0 at 0x1f0-0x1f7,0x3f6 on irq 14ide1 at 0x170-0x177,0x376 on irq 15PCI: Found IRQ 11 for device 00:1d.0PCI: Sharing IRQ 11 with 00:02.0usb-uhci.c: USB UHCI at I/O 0x1800, IRQ 11PCI: Found IRQ 10 for device 00:1d.1usb-uhci.c: USB UHCI at I/O 0x1820, IRQ 10PCI: Found IRQ 5 for device 00:1d.2PCI: Sharing IRQ 5 with 00:1f.1usb-uhci.c: USB UHCI at I/O 0x1840, IRQ 5PCI: Found IRQ 9 for device 00:1d.7ehci-hcd 00:1d.7: irq 9, pci mem f885d000parport0: irq 7 detectedPCI: Found IRQ 9 for device 02:08.0PCI: Found IRQ 9 for device 02:08.0parport0: irq 7 detectedPCI: Found IRQ 11 for device 00:02.0PCI: Sharing IRQ 11 with 00:1d.0PCI: Found IRQ 9 for device 00:1f.5PCI: Sharing IRQ 9 with 00:1f.3i810: Intel ICH4 found at IO 0x18c0 and 0x1c00, MEM 0xc0080c00 and      0xc0080800, IRQ 9

;

标签: