阅读:1201回复:5
系统是如何实现地址动态分配的?
我一直无法理解,系统是如何实现地址动态分配的?
是PCI卡实现的地址动态分配,还是操作系统或主板实现的地址动态分配,还是PCI上的芯片的固定管脚接到PCI的固定管脚上自动实现的地址动态分配? 相信我说的都不对,还请大家给我一些帮助 这贴子我在硬件开发中也发表过一次,但考虑到问题的内容,还是应该发表在这里。 |
|
|
沙发#
发布于:2002-02-25 15:55
PCI地址空间动态分配大致是这样的:(如有错误请大家指正)
1。PCI设备的接口控制芯片中,有256字节的配置寄存器,其中保存有该设备的Vid,Did,Ssid等,还有它需要的端口空间和内存空间配置,还有中断需求等等。。。,Pci协议中有详细的描述。 2。PCI桥得到它管辖的总线上的所有设备的物理地址,包括它自己。 3。BIOS在系统上电时通过桥枚举总线上的设备,及他们各自需要的I/O,MEM空间配置。进行一次分配。 4。操作系统,以windows为例,在系统加载时,重新枚举线上设备,并为之分配地址空间。 5。当一个设备被热插拔时,系统重新枚举设备,并重新分配地址。 所以,整个动态分配过程涉及到了PCI卡,主板上的桥,BIOS,和操作系统。 |
|
板凳#
发布于:2002-02-25 16:39
非常感谢楼上的答复
但我还是有几点不清楚 PCI配置寄存器中的信息在每次停电后都会丢失吗?如果会丢失是不是每次启动都由BIOS为配置寄存器初始化? 如果PCI设备可以由BIOS通知系统分配的地址,那么驱动程序如何知道PCI设备被分配的地址呢? |
|
|
地板#
发布于:2002-02-25 19:57
配置寄存器的内容在开发时写在PCI卡上的EEPROM中,上电时接口芯片Reset,将EEPROM中的信息Load进寄存器。
卡的基地址好象是在上电时由PCI BIOS分配的,具体情况我也没有研究过,我只对PCI卡有一些了解,你如果感兴趣可参考PCI BIOS规范。 配置寄存器中存的是希望分配的地址空间的相对地址(相对于基址)和空间大小。(这个是在论坛中看到有人如是说,PCI协议中好象没说清楚) 在windowsNT/2000中,ms的总线驱动在系统启动时枚举线上设备,将每个设备的资源分配结果写入注册表,如果是WDM驱动,在通知驱动开动设备时将设备的资源分配情况通过参数传递给驱动。 |
|
地下室#
发布于:2002-02-26 09:00
为什么我点击给分时提示我:你不是此帖的起帖人或此帖已经给分!
|
|
|
5楼#
发布于:2002-02-26 11:00
不应该吧,你再试试。
要不请 blue 给看看? |
|