20楼#
发布于:2003-04-17 21:20
[quote]再问一下,《programing the wdm》一书中提到将不连续的物理 如果是这样,那么所谓总线地址的概念似乎就接近虚拟地址了. [/quote] 但《programing the wdm》中的确这末说,而且肯定不是虚拟地址。 因为提供连续的总线地址的目的是给没有分散集中能力的pci桥实现dma用的。将连续的总线地址赋给 pci桥,映射积存器将其映射为不连续的物理地址,进而又对应连续的虚拟地址。我现在被几种地址弄的 一头雾水。 |
|
|
21楼#
发布于:2003-04-18 04:14
pci板卡的物理地址分配,启动时由bios实现,但我记得win2000下pnp管理器可以根据资源情况再行分配。 fwzfwz1你说得很对。资源再分配是PnP的主要特征,不管你的OS和CPU是哪家的,只要符合PnP规范就可以资源再分配。资源再分配是很有用的,如笔记本计算机的PCMCIA插卡,当你插入一个只能用COM1口的猫时系统自动把原来的COM1口改成COM2口,这就是资源动态再分配。 关于逻辑地址应该理解为“一个地址可以使设备完成一个逻辑功能”。他可以是一个实地址也可以是一个虚地址。如果把1+2=3比喻为物理地址,把A+B=C比喻成逻辑地址,那么PCI就是A+B=C。只有当特例A=1,B=2时物理地址=逻辑地址。 再次,就算我们讨论win2000,IA体系,用WDM,当然就有DeviceEntry和AddDevice.那么也无非存在两种情况,一种系统分配了资源,可是这时配置寄存器里还是物理地址,另一种当然是没有分配资源,这时配置寄存器里是无效的0,最直接的证明就是直接使用物理地址的硬件访问,硬件访问是不会使用虚拟地址的.至于具体的驱动程序,显然是调用了AddDevice后系统才分配资源的,但很可惜,PCI配置寄存器是系统写的,你自己不能随便写,驱动里你可以得到分配的物理地址(其实就是从PCI基址寄存器里得到的),然后可以映射成虚拟地址,用户态程序可以用这个地址访问,但是配置寄存器里绝对不会是这个地址. jst7792看来你还是没有理解两个函数的区别。这里没有任何对人的攻击,只是希望通过这个KEY加深人们对PnP的理解。 |
|
22楼#
发布于:2003-04-18 17:25
对于x86保护模式,将虚拟地址通过分段机制转换成线性地址,
通过分页机制将线性地址转换为物理地址。 而关于nt,2000的书,只子不提分段。又谈到nt采用平面地址体系。 是否nt,2000下不采用分段机制,只用分页机制。其线性地址就是 虚拟地址。我目前是这样理解的。请各位高手指点! |
|
|
23楼#
发布于:2003-04-18 19:14
呵呵,原来我的概念全搞错了!
不好意思了,回去再找本书看看。 |
|
24楼#
发布于:2003-04-18 21:07
to x_ray:
首先我觉得你的讨论有些文不对题,最初的问题是配置寄存器里是否就是确切的物理地址,你的回答成了PNP的地址是否是可变的. COM口的问题有它的特殊性,我们甚至可以把并不在自己设备上的一台远程设备映射成自己的COM口.如果我没有曲解你的意思的话,这应当就是你所说的逻辑地址的概念的一个明显例子.但这显然和PCI配置寄存器没有关系.至于COM口的动态分配,具体问题还是应当具体分析,对于严格使用file操作实现com口控制的应用来说,动态的分配简单的说实际上是在改变符号链接名,但如果是要通过使用端口或指针实现.那么就必须改变配置寄存器的内容(VXD不讨论),但是毫无疑问此时配置寄存器里仍然是物理地址. 驱动我只写过7~8个,虽然不必要每次都去修改DeviceEntry和AddDevice例程,但这两者的区别至少我认为自己还是非常清楚的,如果你认为我的观点有什么缺陷,请具体说明,我不喜欢卖关子. 我们的问题是PCI的配置寄存器里是否就是物理地址,我的答案是毫无疑问的是,如果有不同论点,请针对这个问题,不要扯远. |
|
|
25楼#
发布于:2003-04-18 21:09
[quote][quote]再问一下,《programing the wdm》一书中提到将不连续的物理 如果是这样,那么所谓总线地址的概念似乎就接近虚拟地址了. [/quote] 但《programing the wdm》中的确这末说,而且肯定不是虚拟地址。 因为提供连续的总线地址的目的是给没有分散集中能力的pci桥实现dma用的。将连续的总线地址赋给 pci桥,映射积存器将其映射为不连续的物理地址,进而又对应连续的虚拟地址。我现在被几种地址弄的 一头雾水。 [/quote] 我查了一下<<the windows 2000 device driver book>>,映射寄存器是提供给集散模式DMA使用的,至少我的书上是这么写的.不支持集散模式的DMA只能在非分页内存里分配空间,然后还要通过驱动程序才能被用户使用.我这里仍然没有找到使用总线地址这个名词的地方,也找不到所谓总线地址的明确概念. [编辑 - 4/18/03 by jst7792] |
|
|
26楼#
发布于:2003-04-18 21:11
对于x86保护模式,将虚拟地址通过分段机制转换成线性地址, 关于地址的概念我觉得讨论的乱了一点,下面的这段话是教科书上的,比自己组织语言说得清楚多了. \"从软件角度上看,地址是由两部分组成的:选择器和偏移地址(V86模式下是段和偏移地址).这种形式的地址被称作逻辑地址.当软件使用这种地址的时候,处理器酒吧这种逻辑地址转换成一种中间形式的地址:线性地址.然后再转换成物理地址.物理地址才是真正放在总线上并被内存或设备译码的地址.\" 概念是有相对性的,平面地址的对应概念就是段页地址.物理地址的对应概念是逻辑地址(在采用VMM的系统中就对应虚拟地址),线性地址是一个中间概念,32为保护模式下的线性地址到物理地址的转换是在页面表中实现的,所以线性地址不是虚拟地址. |
|
|
27楼#
发布于:2003-04-18 21:28
松涛,我传上<<programing the wdm>>一书,里面提到总线地址。
你看一看!有什么观点在说一说! |
|
|
28楼#
发布于:2003-04-18 21:47
松涛,我给你发到邮箱了,共7M.邮箱够大不?
|
|
|
29楼#
发布于:2003-04-19 11:49
to x_ray: 不是卖关子,是不喜欢打字。 “我们的问题是PCI的配置寄存器里是否就是物理地址,我的答案是毫无疑问的是,如果有不同论点,请针对这个问题,不要扯远.” 我没说不是物理地址,只是此物理地址非常规概念的物理地址。由于我看出他的理解有些片面,给他提个醒,让他少走弯路,因为他按此地址设计硬件或编软件一定失败。 |
|
30楼#
发布于:2003-04-19 14:07
松涛,我传上<<programing the wdm>>一书,里面提到总线地址。 找到这一段了,里面提到了alpha处理器,我现在手头上没有alpha处理器的体系结构的说明.关于alpha的map register具体怎样工作以及在系统中的地位还不清楚. 里面提到的不支持集散模式的DMA的工作包含两种情况,一种使用分页内存,这在公共缓冲区内一般得到的都小于页边界(有时也可能存在物理连续的两页甚至更多),如果大于就必须多次启动DMA,每次只完成物理连续的一部分.另一种办法是使用非分页内存,这里可以得到大的连续物理空间,但必须复制到分页内存中使用. 至于总线地址,我的感觉这个名词有些使用的不准确,DMA这一章中只使用了2次, \"On many CPU architectures, a logical address will be a physical memory address that the CPU understands. On other architectures, it might be an address that only the I/O bus understands. Perhaps bus address would have been a better term.\" 很明显,我们通常说的逻辑地址,物理地址概念在IA体系下还是清楚的,但扩展到其他体系概念就乱了,他这里打算使用总线地址概念,这在以后的设计里可能很有用,比如1394.但现在似乎仍然不是很明确的提出,具体问题还是具体分析的好一点. |
|
|
上一页
下一页