这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [转帖]通过PCI接口访问SDRAM的问题

共1条 1/1 1 跳转至

[转帖]通过PCI接口访问SDRAM的问题

菜鸟
2003-01-18 00:02:09     打赏
发信人: ColdFire(天地一沙鸥), 信区: Embedded. 本篇人气: 38 标 题: [合集]通过PCI接口访问SDRAM的问题(在操作系统下) 发信站: 南京大学小百合站 (Fri Dec 6 13:48:12 2002), 站内信件 ColdFire (天地一沙鸥) 于Tue Dec 3 15:38:29 2002) 提到: 一直有一个疑问,请大家帮帮我,呵呵。 在一个系统中有PCI也有SDRAM,比如在PC下,SDRAM是接在北桥芯片下的, 即北桥芯片本身有SDRAM控制器,CPU访问SDRAM或PCI访问SDRAM, 都是通过北桥芯片来访问的,现在有个问题,操作系统一般是运行于SDRAM, 即CPU必须不断访问SDRAM,但是假如有一外部设备通过PCI接口 访问SDRAM(假定很频繁),则CPU在这段时间内无法访问SDRAM, 此时操作系统不是无法再运行了? 操作系统怎么解决这个矛盾呢?请各位说说吧。 iloveqhq (我爱你qhq!) 于Wed Dec 4 17:42:01 2002提到: RAM 可以通过 PCI 和前端总线分别访问? 不会有这么酷吧?DMA 的时候,CPU 是不是也无法访问 RAM? 那是怎么处理啊? ColdFire (天地一沙鸥) 于Thu Dec 5 09:01:04 2002) 提到: 没错的,sdram可以通过pci口访问的,比如RealTek的RTL8139的网卡, 他工作于PCI的主方式,当收到完整的一个包时,就直接从FIFO写到 SDRAM中去(不经过CPU的)。 DMA时,CPU肯定也无法访问RAM,不过我也不知道这时是怎么处理的。 iloveqhq (我爱你qhq!) 于Thu Dec 5 10:18:30 2002) 提到: 可是内存管理是CPU做的阿。网卡从PCI直接访问RAM,他怎么知道该写道 RAM 的什么位置?它应该还是通过DMA来处理吧?而DMA应该是前端总线上的事情。 是不是阿? ColdFire (天地一沙鸥) 于Thu Dec 5 10:52:22 2002) 提到: 内存管理是cpu做的。 系统的sdram可以通过pci控制器映射到不同的基址上,在pci控制器中有一基址寄存 器,里面就是memory的映射基址和空间大小。网卡从PCI直接访问SDRAM,是这样的方式: 网卡发起PCI MEMORY写方式即可,先写到PCI控制器的FIFO中,然后从FIFO写到SDRAM中去 的。 我不明白的是在此操作中间(或者是DMA操作期间),CPU和操作系统能做什么事情? 总得等操作完还是中间可以并行做其他工作? iloveqhq (我爱你qhq!) 于Thu Dec 5 11:20:01 2002) 提到: 你这样说就好理解了。CPU通过PCI控制器把一块内存划给网卡做DMA。 这个DMA从PCI总线上走道RAM。与此同时CPU仍可通过前端总线访问 RAM的其他部分。嗯,我猜是这样的过程。 ColdFire (天地一沙鸥) 于Thu Dec 5 12:18:09 2002) 提到: 错了 iloveqhq (我爱你qhq!) 于Thu Dec 5 13:05:36 2002) 提到: 那是怎么回事呢? ColdFire (天地一沙鸥) 于Thu Dec 5 13:46:29 2002) 提到: 发信人: soycola (要做就做最好), 信区: Embedded 标 题: Re: 通过PCI接口访问SDRAM的问题(在操作系统下) 发信站: BBS 水木清华站 (Wed Dec 4 11:37:51 2002), 转信 说一点我的粗浅的认识吧,俺对硬件其实很不通 我觉得其实你担心的并不是‘操作系统’和外部设备之间掐架 因为二者不是同一层次的概念,你担心的应该是外部设备长时间 霸占pci总线和ram控制器导致cpu无法访问ram。借用os设计里的概念, 其实这种情况给系统设计者出的问题是如何防止cpu被外设挤兑 饿死,我感觉这种问题首先是无法解决只能回避的:如果不让 外设访问ram可能cpu虽然工作正常了外设却饿死了。凡是共享资源 比如总线、贡献内存都有类似的问题,通常这些资源都有配套 的中央仲裁算法,比如时间片轮转、优先级仲裁等,但显而易见 仲裁算法也不能保证不出现饿死现象。所以可能只有两种方案: 要么修改外设设计,减少ram访问频度,要么提高总线和ram 工作效率,扩大瓶颈。 发信人: lulong666 (), 信区: Embedded 标 题: Re: 通过PCI接口访问SDRAM的问题(在操作系统下) 发信站: BBS 水木清华站 (Thu Dec 5 11:05:26 2002) 很好,我说的就是这个意思。 通过PCI总线访问SDRAM和CPU访问SDRAM及其他资源访问SDRAM,是有一套仲裁算法 PCI总线一般是33M的,因此他访问SDRAM比CPU访问SDRAM慢多了,因此可以用时间片轮转, 硬件上PCI访问SDRAM一般这样处理的: PCI总线进行MEMORY写操作时(假定为BURST方式的),他先把数据写到PCI控制器的FIFO 中,然后再从FIFO写到SDRAM中去的。 但其中的仲裁算法是如何的,我就不清楚了,有没有熟悉的人说说? ColdFire (天地一沙鸥) 于Thu Dec 5 13:54:16 2002) 提到: 通过PCI接口访问SDRAM和CPU访问SDRAM是不能同时的,因为它不是双端口的。 CPU访问SDRAM和PCI访问SDRAM用的是同一地址线 PlugPlay (饲养员何去何从?) 于Thu Dec 5 15:55:55 2002提到: 北桥芯片应该具有总线仲裁机制的,如果Master设备获得总线,则 CPU必须放弃RAM。但是一般CPU内部有L1,L2 Cache,现在一般系统的 cache命中都在99%以上,所以只要外设不是很长时间霸占总线,CPU 短时间内还是在执行cache里面的指令。 PCI规范定义了设备的MAX_LAT和MIN_GNT,这个可以控制PCI设备访问 总线的频度和时长。 具体的东东也许要看计算机体系结构和PCI总线规范 iloveqhq (我爱你qhq!) 于Thu Dec 5 16:00:28 2002) 提到: 读了半天文章,昏昏欲睡了。 PCI 处理 DMA 的方式和 ISA 的方式不同。 ISA 里面有一个 8237 DMA 控制器。这个控制器上面有 4 个 DMA Channels 能说说这四个 Channels 是怎么一会事吗?我怎么看到大家要竞争 DMA Channels 呢? 8237 是位于 Processor Bus 上的,是吧? 8237 做 DMA 时,Buffer 最大不能超过一个 Page,这样它就会很快做完, 做完了之后是用一个中断通知 CPU 吗?还是说 CPU 给 DMA 控制器下达 Go 的命令的 时候,这个操作会阻塞呢? iloveqhq (我爱你qhq!) 于Thu Dec 5 16:03:53 2002) 提到: 在 DMA 期间,processor bus 是被锁住了吗?还是说仍旧处在 公平竞争状态下? iloveqhq (我爱你qhq!) 于Thu Dec 5 16:09:57 2002) 提到: ft, 你前面跟我说可以从 PCI Bus 访问 SDRAM 嘛! 我估摸着没这么酷嘛。 现在这个搞清楚了,processor bus 上面有 cpu, mem 和 一个 pci 控制器,pci 控制器后面接着pci bus,pci 设备 从 pci 控制器,然后才到 mem 是不是啊? 就是 dma 我还是不清楚。还有,dma 的时候,processor bus 是被独占了呢, 还是仍旧跟原来一样是共享竞争的?如果是后者的话,你的问题就不存在了。 PlugPlay (饲养员何去何从?) 于Thu Dec 5 16:11:10 2002提到: Processor Bus 和 PCI Bus是两个总线,通过北桥相连 PCI访问RAM的时候,processor bus也就不能访问外设了 PlugPlay (饲养员何去何从?) 于Thu Dec 5 16:15:27 2002提到: mem不是挂在processor bus上的 pci master设备的确可以直接访问主存以及别的设备, 使用的都是物理地址,不需要CPU做地址转换。 iloveqhq (我爱你qhq!) 于Thu Dec 5 16:16:12 2002) 提到: 我画个图吧,呵呵。 mem cpu -----+-----+-----+-------- processor bus pci -----+-----------+-------- pci bus ne2k-pci pci 和 mem 做 dma 的时候,是霸占 processor bus 还是否? 我的意思是,他是要在整个 dma 过程中独占 bus 吗?当然,在某一定 的时刻,pci 和 cpu 只能一个单独访问 mem 啦。 iloveqhq (我爱你qhq!) 于Thu Dec 5 16:17:23 2002) 提到: 这个名词可能有点乱,我说的 processor bus 就是 mem 所在的 bus 我看 www.pcguide.org 上这样用的。呵呵。 iloveqhq (我爱你qhq!) 于Thu Dec 5 16:19:18 2002) 提到: 而且 pci master 和 pci bus 这是两个东西嘛。 还是区分开来说得好。名词太混乱了。 PlugPlay (饲养员何去何从?) 于Thu Dec 5 16:26:48 2002提到: ┌──┐ │CPUs│ └──┘ ┊ FSB ┊ ┌────┐ │ North │┈ RAM │ Bridge │┈ AGP └────┘ ┊ PCI ┊ ┌────┐ │ South │┈ IDE │ Bridge │┈ SCSI,ISA,USB └────┘ iloveqhq (我爱你qhq!) 于Thu Dec 5 16:37:18 2002) 提到: http://www.xml.com/ldd/chapter/book/figs/ldr2_1501.gif 你的图和我的图以及上面的图的区别,在于 ram 的位置。 也许在主板上看去,你的图更像一些。:) 但是从软件的角度,mem, cpu, pci bridge/master 是在同一个总线上的, pci bridge 后面又连着 pci bus,上面是各种 pci 设备,和 isa-pci bridge 等等。 ColdFire (天地一沙鸥) 于Thu Dec 5 16:50:44 2002) 提到: PlugPlay是对的,如果通过pci访问sdram则必须如此。 刚才PlugPlay说了一级和2级cache的问题,假如是cpu没有cache就不能用了? 即外部设备通过pci访问sdram不能实现?(好像是,呵呵,这个问题和外部设备通过 DMA访问SDRAM有点相似。) PlugPlay (饲养员何去何从?) 于Thu Dec 5 18:36:09 2002提到: 这个图来自PCI局部总线规范,是现在最流行的计算机南北桥架构 你那个图可能是另外一种Architecture,比如PC上很少用到PCI-to-PCI桥 而ISA桥已经集成到南桥芯片里面去了 iloveqhq (我爱你qhq!) 于Fri Dec 6 03:37:54 2002) 提到: 南桥北桥我不大清楚。但是从系统软件的角度,LDD 上的图明显是清楚的。 他说的就是 Linux Device Driver 的编写,当然说的是 PC 架构。 他的 Host Bridge 连出来就是 PCI Bus,如果需要在 PCI Bus 上再外接一个 PCI Bus 的话,需要用到 PCI-to-PCI Bridge。可能一般 PC 并不需要在 PCI 上再外接一个 PCI Bus。所以说很少看到。 从系统软件的角度,南桥北桥等于是什么都没有说。他的软件接口是什么? 我估计它只是一个电路上的集成的概念。系统软件看到的并不是南桥和北桥, 而是 Processor Bus 和 PCI Bus。 你那个图上,如果把南桥和北桥看成是 PCI Bus 的一部分,那么说 RAM 就是 连在 PCI Bus 上,然后再进入 Processor Bus,我觉得好相和我的理解不大一样。 呵呵。而且 AGP 似乎也是这样,AGP 并不要先经过 PCI Bus 的吧?否则的话 他的速度的提高在哪儿显现出来?这样猜测的话,你图上的北桥应该不是 PCI Bus 的一部分,PCI Bus 是在北桥之后开始的。呵呵。越猜越离谱了。 我猜我俩的误解主要是角度不同,一个从系统软件的角度看,一个从更加硬件底层 的角度看。呵呵。我猜猜而已了。PCI 的规范我还没来得及看。 iloveqhq (我爱你qhq!) 于Fri Dec 6 03:44:14 2002) 提到: 问题在于 PCI 设备,比如 ne2k-pci 不能直接访问 RAM, 他必须通过 PCI 控制器才行。而 PCI 控制器访问 RAM,只是 DMA 的一个具体应用。这里就是 DMA 我还不清楚。 这里面有好几个问题。一个是,PCI 的 DMA 是用的 Bus Mastering, 并不是 8237 DMA 控制器?这个是怎么回事? 二是 DMA 的过程如果很慢的话,它对于 Processor 和 Mem 所在的 Bus 可能并不是独占的。我这样猜测啊。等会儿看看 PCI 的规范。不过这种东西 看起来很费劲的。呵呵。 iloveqhq (我爱你qhq!) 于Fri Dec 6 05:41:49 2002) 提到: 我在 IRC 上问了一把。又看了一下 PCI Programming 的 Doc。 昨天下午太困了。呵呵。 基本上我的猜测是对的。DMA 或者说 PCI 设备开启 Bus mastering 的时候,他,也就是 DMA 控制器,或者是 PCI Host Bridge,是和 CPU 竞争对 RAM 的访问的,也就是竞争对 Processor Bus 的访问权。 这样,如果 DMA 很慢的话,CPU 仍旧可以访问 RAM 运行操作系统。 iloveqhq (我爱你qhq!) 于Fri Dec 6 06:05:20 2002) 提到: 前端的细节我还是不是很清楚。不过我想前端的细节在这里的讨论上暂时可以忽略吧。 因为,其实不同的 RAM Bank 都可能会挂到不同的 Bus 上去。CPU 局部的 BUS 是什么 样的,我也不是特别清楚。在 IRC 上碰到大名鼎鼎的 Rik van Riel 也没跟我说清楚。 呵呵。 不过可以差不多确定的一点是,在 DMA 的时候,CPU 和 PCI 控制器是在公平的竞争 对 RAM 的访问权。所以,我目前就把 CPU 和 RAM 和 PCI 控制器想像成是在一个 共同的 IO Bus 上面喽。这样看去的话,在 DMA 的时候,CPU 并不会完全被剥夺 对 RAM 的访问,所以操作系统在 DMA 的时候,仍旧可以运行下去。 另外一点,RAM 并没有连到 PCI Bus 上面,所以 PCI 设备卡不可能直接访问 RAM 的, 而必须要通过 PCI Host Bridge 才行。如果把 CPU,RAM,PCI Host Bridge 想像成 是在一个共同的 IO Bus 上面的话,那么从 PCI Host Bridge 访问 RAM,当然并不是 必须 CPU 的参与,因为都在一个 IO Bus 上,自己通过 Bus Address 就可以了。 但是,IO Bus Address 和 PCI Bus Address 除非是巧合,否则可能不大会一样的吧。 我在前面的几篇帖子里面,把 IO Bus 就叫做 Processor Bus。这里澄清一下喽。 iloveqhq (我爱你qhq!) 于Fri Dec 6 06:45:14 2002) 提到: OK. 我又看到别的文章把 CPU 和 MEM 所在的 Bus 称为 System BUS。呵呵。 这些名词我可管不了那么多啦。:) 把 PCI/ISA etc 统称为各种 I/O Bus。 这样的话,就和我下面的用法矛盾了。呵呵。 iloveqhq (我爱你qhq!) 于Fri Dec 6 06:51:52 2002) 提到: http://www.karbosguide.com/images/998.png iloveqhq (我爱你qhq!) 于Fri Dec 6 07:00:09 2002) 提到: http://www.karbosguide.com/images/_979.gif 呵呵,已经乱糟糟了。但是逻辑结构名没有错。还是那样的。 CPU, RAM, PCI Host Bridge, AGP 在一块儿。 然后 PCI 设备卡在一块儿,连到 PCI Host Bridge 上面。 ColdFire (天地一沙鸥) 于Fri Dec 6 10:06:24 2002) 提到: http://www.karbosguide.com/images/_979.gif 这个应该是没有错的。刚才看了另外一个芯片的资料,该芯片带一CPU核和PCI的接口 当外部设备通过pci接口访问sdram和cpu访问sdram时,两个请求是采用round rubin arbi tration(轮循调度)。 外部pci设备(如网卡)通过 PlugPlay (饲养员何去何从?) 于Fri Dec 6 13:05:07 2002提到: 不是很费劲的,看看Chapter 2,3,6就可以了。 第3章有PCI的Write/Read时序图,包括PCI Master直接读写MEM的 当然PCI总线地址和内存地址是两个概念,但是都是物理地址,北桥负责两者之间 的转换。 内存地址和所有PnP设备的地址是由BIOS在系统进入Windows或者别的操作系统之前 就指定了,而每个PnP设备都会“记住”自己的地址范围(Memory Maped/IO Maped) PCI设备在启动写时序之前,并不知道是写PCI Target或者是MEM,PCI总线 上的一切设备,包括Host Bridge,会自己判断是否是访问自己,如果是则应答。 当访问的地址落在Memory空间时,此时Host Bridge应答,并将总线地址转换为内存 地址从而直接访问Mem。 Peripheral Component Interlink,让外设相互访问,这也是PCI设计的初衷。 ilovehq大侠是学CS的吧?我们是EE的,希望多探讨:) PlugPlay (饲养员何去何从?) 于Fri Dec 6 13:18:20 2002提到: 网卡一般是Master设备,而且其请求总线的优先级还是比较高的 PCI和DMA,是很容易弄混的两个概念。两者有2个共同点: 1、都不需要CPU干预 2、都是实行Burst传送 但是DMA要主板上专门的DMA控制器来实现,而PCI Master本身就是一个 DMA控制器。另外,DMA开始之前已经知道传输的字节数,但是PCI传输 可以是无限长的,其结束由Master设备给出信号。 PlugPlay (饲养员何去何从?) 于Fri Dec 6 13:28:36 2002提到: 【 在 ColdFire (天地一沙鸥) 的大作中提到: 】 : PlugPlay是对的,如果通过pci访问sdram则必须如此。 : : 刚才PlugPlay说了一级和2级cache的问题,假如是cpu没有cache就不能用了? CPU至少有L1 Cache,一般都有L2 Cache. 如果CPU没有L2 Cache,主板上也会有。 现在的Celeron/Pentium/Athron都有L2 Cache,其性能提高可是数十倍的:) [align=right][color=#000066][此贴子已经被作者于2003-1-17 16:03:53编辑过][/color][/align]



关键词: 转帖     通过     接口     访问     SDRAM     问题     Cold    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]