现代PC机主板主要由2个超大规模芯片组或芯片集组成:北桥芯片(Northbridge)和南桥(Southbridge)芯片。北桥芯片用于与CPU、内存和AGP视频接口,这些接口具有很高的传输速率,北桥芯片还起着存储器控制作用,因此Intel把该芯片标号为MCH(Memory Controler Hub)芯片。南桥芯片用于管理中、低速组件。例如PCI总线、IDE硬盘接口、USB端口等,因此南桥芯片的名称为ICH(I/O Controler Hub)芯片。之所以用“南、北”桥来分别统称这两个芯片,原因为在Intel公司公布的典型PC机主板上,他们分别位于主板的下端和上端位置,并起着与CPU进行通道桥接的作用。
通常一个I/O控制器包含访问数据的数据端口、输出命令的命令端口和访问控制器执行状态的状态端口。端口地址的设置方法一般有统一编址和独立编址这两种。
端口统一编址的原理是把I/O控制器中的端口地址归入存储器寻址地址空间范围内,因此这种编址方式也称为存储器映像编址。CPUT访问一个端口的操作与访问内存的操作一样,也使用访问内存的指令。
端口独立编址的方法是把I/O控制器和控制卡的寻址空间单独作为一个独立的空间地址对待,称为I/O地址空间,每个端口有一个I/O地址空间与之对应,并且使用专门的I/O指令来访问端口。
端口统一编址的原理是把I/O控制器中的端口地址归入存储器寻址地址空间范围内,因此这种编址方式也称为存储器映像编址。CPUT访问一个端口的操作与访问内存的操作一样,也使用访问内存的指令。
端口独立编址的方法是把I/O控制器和控制卡的寻址空间单独作为一个独立的空间地址对待,称为I/O地址空间,每个端口有一个I/O地址空间与之对应,并且使用专门的I/O指令来访问端口。
IBM PC及其兼容性微型机主要使用独立编址方式,采用了一个独立的I/O地址空间对控制设备中的寄存器进行寻址和访问。
使用ISA总线结构的传统PC机及其I/O地址空间的范围为0x000~0x3FF,有1024个I/O端口地址可供使用。
IBM PC机也部分地使用了统一编址方式。例如CGA显示卡上的显示内存的地址就直接占用了存储器地址空间0xB800~0xBC00范围。因此若要让一个字符显示在屏幕上,可以直接使用内存操作指令往这个内存区域执行写操作。
对于使用EISA和PCI等总线结构的现代PC机,有64KB的I/O寻址空间可供使用,在linux系统上可通过查看/proc/ioports文件(cat /proc/ioports)得到相关控制器或设置使用的I/O地址范围。
PC机I/O接口传输数据控制方式一般可采用程序循环查询方式、中断处理方式和DMA(Direct memory access)传输方式。