会计考友 发表于 2012-8-4 12:13:19

linux学习:LPI硬件和体系结构(三)

 IO 端口   当 CPU 需要与某个外围设备通信时,它要通过一个 IO 端口(有时只是简单的 端口)。当 CPU 需要向外围设备发送数据或者控制信息时,它向某个端口写入数据。当设备为 CPU 准备好了数据或者状态,CPU 从某个端口去读取数据或状态。大部分设备都拥有不止一个与之相关联的端口,通常是 2 的若干次幂(指数较小),比如 8、16 或者 32。数据传输通常是每次一个或两个字节。设备不能共享端口,所以,如果有 ISA 卡,那么必须确保每个设备都有其分配到了自己的端口。以前,这需要通过设备卡上的开关或者跳线来实现。一些晚期的 ISA 卡使用了一个名为 Plug and Play (PnP)的系统,本节稍后将讨论到。 PCI 卡全都有 PnP 配置。
  在 /proc 文件系统中,/proc/ioports 文件告诉我们关于系统中可用 IO 端口的信息。运行 cat /proc/ioports 命令可以看到类似清单 2 所示的输出。
  清单 2. /proc/ioports
  0000-001f : dma1
  0020-003f : pic1
  0040-005f : timer
  0060-006f : keyboard
  0070-007f : rtc
  0080-008f : dma page reg
  00a0-00bf : pic2
  00c0-00df : dma2
  00f0-00ff : fpu
  0170-0177 : ide1
  01f0-01f7 : ide0
  02f8-02ff : serial(auto)
  0376-0376 : ide1
  0378-037a : parport0
  03c0-03df : vga+

会计考友 发表于 2012-8-4 12:13:20

linux学习:LPI硬件和体系结构(三)

03f6-03f6 : ide0   03f8-03ff : serial(auto)
  0cf8-0cff : PCI conf1
  1800-181f : Intel Corp. 82801DB USB (Hub #1)
  1800-181f : usb-uhci
  1820-183f : Intel Corp. 82801DB USB (Hub #2)
  1820-183f : usb-uhci
  1840-185f : Intel Corp. 82801DB USB (Hub #3)
  1840-185f : usb-uhci
  1860-186f : Intel Corp. 82801DB Ultra ATA Storage Controller
  1860-1867 : ide0
  1868-186f : ide1
  1880-189f : Intel Corp. 82801DB/DBM SMBus Controller
  18c0-18ff : Intel Corp. 82801DB AC'97 Audio Controller
  18c0-18ff : Intel ICH4
  1c00-1cff : Intel Corp. 82801DB AC'97 Audio Controller
  1c00-1cff : Intel ICH4
  2000-203f : Intel Corp. 82801BD PRO/100 VE (LOM) Ethernet Controller
  2000-203f : e100
  端口编号是十六进制的(基数为 16)。肯定会发现有一些看起来很熟悉,比如键盘、计时器、并行端口(打印机)、串行端口(调制解调器)和显示器(vga+)。将这些与清单 3 中给出了在 PC 中某些标准 IO 端口分配进行比较。例如,要注意的是,在 /proc/ioports 中为第一个并行端口(parport0)分配的地址范围是从 0378 到 037A,而标准中允许它(LPT!)使用的是从 378 到 37F。
  清单 3. 标准 I/O 端口设置
  1FO-1F8 - Hard Drive Controller, 16-bit ISA
  200-20F - Game Control

会计考友 发表于 2012-8-4 12:13:21

linux学习:LPI硬件和体系结构(三)

 210 - Game I/O   220 - Soundcard
  278-27F - LPT2
  2F8-2FF - COM2
  320-32F - Hard Drive Controller, 8-bit ISA
  378-37F - LPT1
  3B0-3BF - Monochrome Graphics Adapter (MGA)
  3D0-3DF - Colour Graphics Adapter (CGA)
  3F0-3F7 - Floppy Controller
  3F8-3FF - COM1
  中断
  那么,CPU 如何知道最后一次输出何时完成?或者何时有数据在等待读取?通常,在一个状态寄存器中可以获得此信息,通过读取与某设备想关联的一个(或多个)IO 端口可以访问它。在这种情况下会出现两个问题。首先,CPU 不得不花费时间来检查状态。其次,如果设备持有来自某处的数据,比如连接的调制解调器,那些数据必须要及时被读取,否则就可能被下一个可用的数据字节所覆盖。
  不浪费多余 CPU 周期,并确保数据能被及时读写,这两个问题是由 中断(interrupt) 的概念所解决的。中断也称为 中断请求(Interrupt Requests) 或 IRQs。当设备中发生 CPU 需要知道的某事件时,设备就会发出一个中断,CPU 则临时停止正在做的其他工作,来处理那件事情。
  根据上一节的经验,毫无疑问关于中断的信息也保存在 /proc 文件系统中,在 /proc/interrupts 中。运行 cat /proc/interrupts 命令,可以看到类似于清单 4 的输出。
页: [1]
查看完整版本: linux学习:LPI硬件和体系结构(三)