● 输入/输出端口地址(I/O ,Input/Output)
CPU与设备通信时主要通过设备的输入/输出接口来完成,这个接口就叫做设备的输入/输出端口,即I/O端口。每个端口都有相应的号,这就是输入/输出端口的地址,即I/O地址。每一个端口都包含一组寄存器(包括数据寄存器、命令寄存器和状态寄存器)。每一个设备有不同的I/O地址,在计算机中共有1024个I/O地址。每个I/O通道地址都是由一个基地址和一个由参数指定的长度来组成。这些地址都是用十六进制数表示的。例如一块网卡的I/O地址范围可以是2000H`201H。
当一个设备向CPU发送中断请求时,CPU会检查内存中存储器的被该设备占用的I/O通道地址,以获取如何答复该设备请求的信息。由于I/O地址数量较多,所以很少出现冲突,特别对于即插即用设备更是这样。如果I/O通道地址出现冲突,那么通常是由于手动设置而使地址重叠。
● 内存范围
计算机中的每个程序和设备都会被分配内存范围,且这些范围对每个具体程序、设备而言必须是唯一的。内存范围是用八进制数的地址来指定的。例如,一块网卡被分配的内存地址范围可能是42000000H~42000FFFH。现在大多数芯片都采用扁平式的32位地址空间,可以最高支持4GB的内存范围,因此在比较新的操作系统中很少出现内存范围冲突。
一些设备在主内存中分配有内存范围。当安装、使用这样的设备时,这段内存范围被设备和CPU共享(运行设备驱动程序之后)。这段内存范围意味着设备和主内存之间“直接”传输数据,但并不是实际意义上的传输,而是由设备把数据放到它自己的内存中。
现在,对这4种资源的关系我有了一个系统的理解,这里以图示的方式记录下我的总结,以使自己在后续工作中能够继续使用。