在PCI卡配置空间中,基地址寄存器的作用是什么?一个PCI设备最少可申请多少地址空间?最少可申请多少I/O空间?
正确答案:
P.CI总线上的设备采用“即插即用”的方法,所有设备使用的存储空间和IO空间的具体位置事先是不确定的,需要在系统初始化时通过“配置”过程来确定。PCI卡上的基地址寄存器有两个方面的作用:
(1)寄存器的最低的几位记录申请所需空间的类型(存储器空间/IO空间)、空间的大小等信息(寄存器的这几位是只读的)。
(2) 寄存器的高位用来纪录操作系统分配给它的存储空间/IO空间的起始地址(寄存器的这几位是部分可写的)。
由于有6个基地址寄存器,PCI设备最多可以申请6段地址空间。
对于申请存储空间的基地址寄存器,它的第0~3位是只读位,第4~31位用来表示申请地址空间的大小,因而一个PCI设备申请地址空间最少是16个byte。对于申请I/O空间的基地址寄存器,它的第0~1位是只读位,第2~31位用来表示申请地址空间的大小,因而申请I/O地址空间最少是4个byte。
例如,某PCI设备申请1MB的存储空间,它的基地址寄存器位0~位19均为只读。其中:位0固定为0,表示申请存储器空间;位1~2表示“映射”的类型,如果基地址寄存器为32位,可以“映射”到32位地址空间的任何位置,这两位可以固定为“00”;其余位均固定为0。
系统进行配置操作时,向该寄存器写入32位全“1”,然后读出该寄存器的内容。由于低20位均为只读位,所以实际读出的内容为高位12个“1”和低位20个“0”。其中位0~位2表示空间类型和“映射”类型,其它的“0”(位4~位19)表示了申请空间的大小。随后,系统根据各设备的请求进行空间的统一分配,将分配给该设备的存储空间首地址写入该基地址寄存器。对于1MB的空间而言,它首地址的低20位应为0,它的高12位反映了实际的起始地址。基地址寄存器的高12位正好能容纳这12位“有效”的起始地址。
(1)寄存器的最低的几位记录申请所需空间的类型(存储器空间/IO空间)、空间的大小等信息(寄存器的这几位是只读的)。
(2) 寄存器的高位用来纪录操作系统分配给它的存储空间/IO空间的起始地址(寄存器的这几位是部分可写的)。
由于有6个基地址寄存器,PCI设备最多可以申请6段地址空间。
对于申请存储空间的基地址寄存器,它的第0~3位是只读位,第4~31位用来表示申请地址空间的大小,因而一个PCI设备申请地址空间最少是16个byte。对于申请I/O空间的基地址寄存器,它的第0~1位是只读位,第2~31位用来表示申请地址空间的大小,因而申请I/O地址空间最少是4个byte。
例如,某PCI设备申请1MB的存储空间,它的基地址寄存器位0~位19均为只读。其中:位0固定为0,表示申请存储器空间;位1~2表示“映射”的类型,如果基地址寄存器为32位,可以“映射”到32位地址空间的任何位置,这两位可以固定为“00”;其余位均固定为0。
系统进行配置操作时,向该寄存器写入32位全“1”,然后读出该寄存器的内容。由于低20位均为只读位,所以实际读出的内容为高位12个“1”和低位20个“0”。其中位0~位2表示空间类型和“映射”类型,其它的“0”(位4~位19)表示了申请空间的大小。随后,系统根据各设备的请求进行空间的统一分配,将分配给该设备的存储空间首地址写入该基地址寄存器。对于1MB的空间而言,它首地址的低20位应为0,它的高12位反映了实际的起始地址。基地址寄存器的高12位正好能容纳这12位“有效”的起始地址。
答案解析:有
微信扫一扫手机做题