阅读:1513回复:9
系统是如何实现地址动态分配的?
我一直无法理解,系统是如何实现地址动态分配的?
是PCI卡实现的地址动态分配,还是操作系统或主板实现的地址动态分配,还是PCI上的芯片的固定管脚接到PCI的固定管脚上自动实现的地址动态分配? 相信我说的都不对,还请大家给我一些帮助 什么是PCI-PCI桥?什么是CardBus桥? |
|
|
沙发#
发布于:2002-02-23 18:24
是由cpu进行地址的分配
|
|
|
板凳#
发布于:2002-02-25 16:12
准确的说是BIOS实现的.这方面有具体的规范.
PCI_PCI桥好像没什么不可理解的吧. CARD_BUS很类似于PCI,PCMCIA的一种 |
|
|
地板#
发布于:2002-02-25 16:41
多谢指点
|
|
|
地下室#
发布于:2002-02-25 16:46
非常感谢楼上的答复
但我还是有几点不清楚 PCI配置寄存器中的信息在每次停电后都会丢失吗?如果会丢失是不是每次启动都由BIOS为配置寄存器初始化? 如果PCI设备可以由BIOS通知系统分配的地址,那么驱动程序如何知道PCI设备被分配的地址呢? |
|
|
5楼#
发布于:2002-02-25 22:03
当然会丢失,每次启动都会重新分配,当然如果硬件没什么变化,同样的算法分配的地址是一样的。
如果是WDM的驱动,驱动程序你感觉不到操作了具体物理地址,系统提供了足够的调用。系统可以知道设备地址,configure register的访问有两种办法,PCI规范里有详细描述。 |
|
|
6楼#
发布于:2002-04-18 16:34
是BIOS分配的,就问BIOS要就好了.BIOS中断1AH就是这个功能.另外CARDBUS不能说是PCMCIA的一种.它只是借用了PCMCIA的机械尺寸,外形,但它是32位的,基于PCI的协议规范.而PCMCIA是基于ISA的规范.
|
|
|
7楼#
发布于:2002-04-18 16:45
PCI设备都会有一个寄存器(一般用便宜的I2C ROM实现),里面保存了设备所要求的资源,包括基地址,长度,中断,等等.系统上电的时候PCI控制器会扫描每个设备,将其请求的资源报告BIOS,BIOS将根据情况分配资源给每个设备.就是说,不是你想要什么就能得到什么的.譬如对于中断,大家都知道PCI上只有4个中断信号线.大家都请求INTA(单功能设备要求只能接这个),最后每个设备得到的中断都是不一样的(够用的情况下,大家可以想想是怎么作到这一点的?).如果超过4个设备了,肯定得共享中断.
|
|
|
8楼#
发布于:2002-04-18 16:50
说错了,好象不是存在I2C ROM里的,那里面只是VENDOR ID等一些内容.
|
|
|
9楼#
发布于:2002-04-18 17:00
突然想到一个问题.BIOS是可以把PCI等配置信息保存下来的,BIOS中有这么一个PNP的信息块.只要硬件不变,它就不必每次开机都为设备重新分配资源.因为有的BIOS厂商的格式和MICROSOFT有冲突,很多机器在启动WINDOWS的时候都会出现那个什么ESCD....的信息,那就是因为WINDOWS不认识就会按自己的格式重写BIOS里的这部分内容.
|
|
|