免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: new_learner
打印 上一主题 下一主题

<系统虚拟化>一书中的两个疑问:(1)总线地址(2)APIC [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-01-12 12:43 |只看该作者
原帖由 snail_314 于 2010-1-12 12:29 发表
bios os都要做.并且互不干扰.os不会假设bios已经做过枚举了.


似乎不是这样的。

Linux的枚举代码只是利用配置机制1或者MMCFG来读deviceid枚举出设备是否存在,然后会尽量利用BIOS分配好的BAR和BUS 号,如果有错误才会重新分配来修正。

论坛徽章:
0
12 [报告]
发表于 2010-01-12 13:05 |只看该作者
多谢楼上各位的解释。

但对于我而言,又引入了几个不懂的概念:

solaris12说道:
对PCI设备来说,firmware负责枚举PCI设备分配BUS号,设备内存地址,把他们写到每个设备配置空间去,OS靠ACPI来定位设备的配置空间的地址,然后设备驱动就利用内核的接口得到自己内存空间分配的物理地址。

IOAPIC可以有多个,所以可以扩展引脚数。另外,对支持MSIX中断的设备来说,IOAPIC已经是不需要的了,一个设备理论上可以支持2048个中断。


1. 不太清楚您这里提到的firmware在PC中具体是指什么?是bios吗?
2. 这里的ACPI是什么东东呢?north bridge里的一块芯片?(我晚上回家再google下,现在没啥概念)
3. MSIX中断是什么东东呢?(继续google之...)

albcamus说道:
Solaris12的意思,应该是指MMCONFIG方式的PCIE枚举,是通过读ACPI的MCFG表去获得信息的。

1. 不太清楚您这里提到的MMCONFIG是什么?(继续google之...)

[ 本帖最后由 new_learner 于 2010-1-12 13:07 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2010-01-13 01:42 |只看该作者

回复 #7 Solaris12 的帖子

明白了. 同时多谢albcamus 老兄的解释. 我对PCIE不是很熟悉. 正在学习中

论坛徽章:
0
14 [报告]
发表于 2010-01-13 01:51 |只看该作者

回复 #12 new_learner 的帖子

1.FIRMWARE应该是BIOS

2.APIC 和ACPI是不一样的.

APIC的全写是Advanced Programmable Interrupt Controller,用来管理中断的。注意不要和ACPI(Advanced Configuration and Power Interface电源管理)搞混。
可以看看我的这个帖子:
http://linux.chinaunix.net/bbs/thread-1149880-1-3.html

3. MSIX. MSI(MESSAGE SIGNALED INTERRUPTS). MSI-X是MSI的升级版. 具体区别我也不是很清楚.

4. MMCONFIG哪个我也不太懂. 等高手来解答. 不过从7楼已经可以猜到一些东西.

论坛徽章:
0
15 [报告]
发表于 2010-01-13 13:24 |只看该作者
原帖由 accessory 于 2010-1-13 01:51 发表

3. MSIX. MSI(MESSAGE SIGNALED INTERRUPTS). MSI-X是MSI的升级版. 具体区别我也不是很清楚.

4. MMCONFIG哪个我也不太懂. 等高手来解答. 不过从7楼已经可以猜到一些东西.
.


3. 关于MSI/MSIx,看PCI规范3.0

http://blog.csdn.net/yayong/archive/2010/01/13/5185129.aspx

4. Memory Mapped Configuration table,在ACPI里叫MCFG table,在PCI firmware规范里有讲解。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
16 [报告]
发表于 2010-01-14 15:14 |只看该作者
关于第一点,如果了解PCI就清楚了.
起源得从更早的ISA说起:
CPU看到只有内存空间和IO空间,CPU的寻址丢到北桥,被北桥转到总线上.局部总线的含义就是,总线地址继承(也可能就是等于)了CPU所寻的地址.
ISA各个设备在一次寻址中可能为主设备,可能为从设备也可能都不是,这就有个地址映射的问题.
假设主设备在总线上放了个地址来寻址,一个从设备怎么知道是找自己的呢?原理在ISA体系结构 一书总说了:用手动跳线来"编程"设备的地址译码器. 这就是"总线"的含义,一个寻址在总线上,每个设备都能看到, 到底如何识别这个地址是不是找自己的,就在于这个地址译码器.

那PCI总线比ISA进步的一大特点就是不用手动设置地址译码器.而是程序自动来配置地址译码器,就是所说的写 PCI BAR. 通过写BAR就能改变地址译码器, 那么就是相当于分配了"物理地址",其实应该叫总线地址,但是从CPU来看就无所谓什么地址了.


然后就是鸡和蛋的问题, 写BAR是访问的PCI配置空间,这不同于访问PCI的内存空间或IO空间,因为后面的2个空间地址都是分配的,那么配置空间的访问,更早的由硬件来决定,具体可以看<PCI系统结构> 大致上说PCI总线地址线在做pci设备的配置寻址时不同与内存寻址和IO寻址.另外有根线idsel线,来帮助定位设备.

论坛徽章:
0
17 [报告]
发表于 2010-01-16 16:55 |只看该作者
原帖由 smalloc 于 2010-1-14 15:14 发表
关于第一点,如果了解PCI就清楚了.
起源得从更早的ISA说起:
CPU看到只有内存空间和IO空间,CPU的寻址丢到北桥,被北桥转到总线上.局部总线的含义就是,总线地址继承(也可能就是等于)了CPU所寻的地址.
ISA各个设备 ...

谢谢你的回复!

先看了下《PCI Express System Architecture》这本书的一些章节,在下面一段描述中找到了答案。

PCI Address Space Map

PCI architecture supports 3 address spaces shown in Figure 1-11. These are the memory, IO and configuration address spaces. The memory address space goes up to 4 GB for systems that support 32-bit memory addressing and optionally up to 16 EB (exabytes) for systems that support 64-bit memory addressing. PCI supports up to 4GB of IO address space, however, many platforms limit IO space to 64 KB due to X86 CPUs only supporting 64 KB of IO address space. PCI devices are configured to map to a configurable region within either the memory or IO address space



PCI device configuration registers map to a third space called configuration address space. Each PCI function may have up to 256 Bytes of configuration address space. The configuration address space is 16 MBytes. This is calculated by multiplying 256 Bytes, by 8 functions per device, by 32 devices per bus, by 256 buses per system. An x86 CPU can access memory or IO address space but does not support configuration address space directly. Instead, CPUs access PCI configuration space indirectly by indexing through an IO mapped Address Port and Data Port in the host bridge (North bridge or MCH). The Address Port is located at IO address CF8h-CFBh and the Data Port is mapped to location CFCh-CFFh.


所以,这里可以看出,CPU是通过IO端口CF8H-CFFH来配置PCI设备的memory or register的访问方式的. CPU访问这些IO端口(CF8H-CFFH)其实是访问到了north bridge,然后由north bridge来做具体的配置工作。那也就是说,north bridge是有配置PCI配置空间的逻辑的。

BTW问个问题,对CPU而言,north bridge是可编程的么?

论坛徽章:
0
18 [报告]
发表于 2010-01-17 11:06 |只看该作者
north bridge提供了一个PCI DEVICE接口,有一些寄存器。可以改一些设置。不知道这算不算可编程?:wink:

其实NB, SB的DATA SHEET都可以从INTEL网上下载到。不过INTEL的叫法不一样。NB叫memory controller hub (MCH) . SB叫IO CONTROLLER HUB (ICH).

PS:最近在看ACPI. 里面又有一堆的地址空间。好像有7,8个。个数远远超出一般用到的2个(I/O, MEMORY).

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
19 [报告]
发表于 2010-01-17 15:29 |只看该作者

回复 #17 new_learner 的帖子

NB是可编程的么?
---也许吧,至少书里提到的IOMMU是可编程的.
只因zx_wing和各位高人没来.胡乱说了2句.

从你的回复看,对配置空间的理解还可加一步.
再明确点说,PCI32位地址-数据线,在地址周期,上面的地址定义就是总线地址,在X86下,总线地址等于物理地址,所以上面就是确确实实的物理地址,当然为了区别mem和IO,同CPU引出了地址线一样,也包含一根MEM/IO线来区分.

当然这里的有些区别的就是有些地址不会从CPU出来直接放在PCI地址线上,比如那个IO里面的0CF8,CPU对这个地址的访问被北桥处理了.
已经知道这个地址是用来配置PCI的.
那么CPU访问这个地址,北桥会转为访问PCI配置空间.已经知道PCI配置空间的寄存器是放到PCI设备上的,就是说一次配置动作的寻址要跨越PCI那数十根槽线,那么这次地址线定义就不同了,具体看看<  PCI体系结构> 或者规范,每个PCI设备上有个IDSEL接线,就是片选线,不同的设备的这个线接在不同的地址线上,,那一次对配置空间的寻址被转化为用地址线片选设备,当然这个逻辑是在NB上做的.

PCI体系结构 书说上说如何用地址线对应设备的片选有比较灵活的定义,这个可能有厂商自己决定.

多说2句废话:从PCI设备的角度看,北桥是个PCI设备,在网卡设备做DMA的时候,北桥表现为一个从设备.也就是MEM/IO寻址的角度,北桥和其他设备是无差别的(或许吧...)
回到对书上第一个问题的疑问上来就是,寻址是CPU和总线的事情, 设备上有个PCI接口,他拿到地址怎么使用,比如怎么转为访问设备上的内存或者寄存器都是它自己的逻辑.当然在访问时间上要符合PCI规范的要求. 有些访问也经历千辛万苦,比如设备上有如果有个EEPROM,是串行接口,而且规范和访问方式都和PCI千差万别,那么如果上面存了PCI设备配置空间信息,那对它的访问就要经历 配置空间寻址-本设备主处理器寻址(或者一个简单点的配置线转换逻辑寻址)-EEPROM上串行设备寻址.

在做配置的时候,北桥是个独一无2的设备,应该叫" PCI主控器"(不知道有没有这么一说)

[ 本帖最后由 smalloc 于 2010-1-17 15:51 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2010-01-17 19:11 |只看该作者
多谢回复,非常详尽!

原帖由 smalloc 于 2010-1-17 15:29 发表
NB是可编程的么?
---也许吧,至少书里提到的IOMMU是可编程的.
只因zx_wing和各位高人没来.胡乱说了2句.

我理解的IOMMU应该是在PCI设备上的吧?
不太清楚north bridge上的IOMMU,能否提供一些权威的参考资料,偶想学习下。。。

原帖由 smalloc 于 2010-1-17 15:29 发表
从你的回复看,对配置空间的理解还可加一步.
再明确点说,PCI32位地址-数据线,在地址周期,上面的地址定义就是总线地址,在X86下,总线地址等于物理地址,所以上面就是确确实实的物理地址,当然为了区别mem和IO,同CPU引出了地址线一样,也包含一根MEM/IO线来区分.

我对配置空间的理解确实比较浅,谢谢提醒。我接下来打算结合代码详细了解下linux对于PCI设备enumeration的过程。

另外我问一下,X86的地址总线和数据总线是公用的,通过周期来区分的?

偶大学时不用功,计算机组成原理基本上没学懂,考完就全部忘光了,兄弟能否推荐一两本这方面的经典的书?最好是X86的,谢过先!

原帖由 smalloc 于 2010-1-17 15:29 发表
当然这里的有些区别的就是有些地址不会从CPU出来直接放在PCI地址线上,比如那个IO里面的0CF8,CPU对这个地址的访问被北桥处理了.

我理解的是:CPU放出的所有总线地址都会被北桥处理吧。不管是外设IO还是外设MMIO还是memory,北桥应该起一个总控作用(北桥里集中了memory controller, PCI host bridge, Graphic Interface controller and so on...)。在PCI结构中,CPU是不可见的,CPU的所有行为,都需要经过HOST bridge来代理。cpu只是一个trigger而已,从CPU发起的对PCI device或bridge所有的transaction,都是由north bridge(host bridge)来代理完成的,最后再由north bridge(host bridge)给CPU一个交代。

我的理解对吗?

原帖由 smalloc 于 2010-1-17 15:29 发表
在做配置的时候,北桥是个独一无2的设备,应该叫" PCI主控器"(不知道有没有这么一说)

在PCIE中应该是这样。PCIE中,north bridge就是root complex。在配置的时候,只能由root complex往downstream这个方向发起(当然也是由CPU驱动,让root complex代理),不能由endpoint或switch发起。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP