在一个系统中,除了CPU,还有大量的外部设备,这些设备通过各种总线连接,包括我们主要讲的PCIe。而每个外设都是通过读写其寄存器来控制使用,寄存器也称为I/O端口。外设上也同样拥有自己的存储空间,称为I/O内存。在X86的系统中,对于内存访问和IO访问是独立编址的,而其他架构的CPU系统,如RISC指令系统的ARM、PowerPC等,采用统一编址。

这部分内容不做详细的讲解,各位有兴趣可以找度娘。我们关心的是对于PCIe设备,它拥有两个重要的资源:IO和Memory

(此图来自网络https://blog.csdn.net/xin15200793067/article/details/42809499)

在x86系统中,I/O空间大小为64K,所以就要求单个PCIe设备的I/O空间大小最大为256B;事实上,这个I/O空间的存在,只是在PCI规范上继承,为了兼容传统的一些设备。我们实际工作中几乎不会用到。在驱动程序中,访问I/O空间需要特殊的操作指令,如in、out。

        相对I/O,Memory就要大的多了。最大大小取决于系统的地址空间,在32位系统中,就可以到4GB 。Memroy空间通常用于数据传输。大部分的PCIe设备也有一部分Memory空间用于寄存器的访问。

        还是以上期的Radeon来举例,如下这个音频PCIe设备有一个16K的内存资源。

而这个显示的PCIe设备则不仅有IO资源,而且还有内存资源。注意看,其中一个内存资源大小是256M,这就是我们常说的某显卡有xxx M显存的由来。So,我这张显卡是256MB的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注