• 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写 分类: 浅谈PCI 2013-07-22 16:27 329人阅读 评论(0) 收藏


    PCI设备向“可Cache的存储器空间”进行读操作的过程相对简单。对于x86处理器或者PowerPC处理器,如果访问的数据在Cache中命中,CPU会通知FSB总线,PCI设备所访问的数据在Cache中。

    首先HOST主桥发起存储器读总线事务,并在Request Phase中,提供地址。Snoop AgentSnoop Phase进行总线监听,并通过HIT#HITM#信号将监听结果通知给Response Agent。如果Cache行的状态为E时,Response Agent将提供数据,而CPU不必改变Cache行状态。如果Snoop Agent可以直接将数据提供给HOST主桥,无疑数据访问的延时更短,但是采用这种方法无疑会极大的提高Cache Memory系统的设计难度,因此采用这种数据传送方式的处理器[1]并不多。

    如果Cache行的状态为M时,Response AgentResponse Phase阶段,要求Snoop AgentsCache中数据回写到存储器,并将Cache行状态更改为ESnoop AgentsData Phase,将Cache中数据回写给存储器控制器,同时为HOST主桥提供数据。Snoop Agents也可以直接将数据提供给HOST主桥,不需要进行数据回写过程,也不更改Cache行状态,但是采用这种方法会提高Cache Memory系统的设计难度。

    如果PCI设备访问的数据没有在Cache中命中,Snoop Agents会通知FSB总线,PCI设备所访问的数据不在Cache中,此时存储器控制器(Response Agent)将在Data PhaseHOST主桥提供数据。

    PCI设备向“可Cache的”存储器区域进行写操作,无论对于PowerPC处理器还是x86处理器,都较为复杂。当HOST主桥通过FSB将数据发送给存储器控制器时,在这个系统总线上的所有CPU都需要对这个PCI写操作进行监听,并根据监听结果,合理地改动Cache行状态,并将数据写入存储器。

    下文以3?7所示的SMP处理器系统为例,说明PCI设备对“可Cache的存储器空间”进行DMA写的实现过程。

    3.3.3 PCI设备对可Cache的存储器空间进行DMA读写 - maoxingbing - 毛毛虫的爹

    3?7所示的处理器系统中,存在4CPU,这4CPU通过一条FSB连接在一起,而CPU之间使用MESI协议进行Cache一致性处理,而HOST主桥和存储器控制器与FSB直接相连。HOST主桥向存储器控制器传递数据时,需要处理Cache的一致性。

    在这个处理器系统中,当PCI设备,如PCI设备01,进行DMA写操作时,数据将首先到达HOST主桥,而HOST主桥将首先接管该PCI设备数据访问并将其转换为FSB总线事务,并在Request Phase中,提供本次FSB总线事务的地址。CPU将在Snoop Phase对这个地址进行监听,判断当前地址在Cache中的命中情况。

    HOST主桥访问的地址不在Cache中命中时,此时在处理器系统中,所有CPU都没有驱动HIT#HITM#信号,HIT#HITM#信号都为1,表示HOST主桥访问的地址没有在CPUCache中命中,HOST主桥可以简单地将数据写入存储器。当HOST主桥访问的存储器地址在Cache中命中时,Cache行的状态可以为SE或者为M,此时处理器系统的处理过程相对较为复杂,下一节将专门讨论这种情况。


    [1] 目前Cortex A8/A9IntelNehelem处理器支持这种方式。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Csharp: ASP.NET Core 3.1 Razor Pages Query and Pagination
    人脸识别示例
    C# 调用WCF服务的两种方法
    linux磁盘空间满处理情况
    linux上PGI编译器安装
    jeecgboot中自定义sql分页实现
    顺畅访问github的一种新思路和方案
    eduYouke在线教育点播系统
    基于SpringBoot的在线教育系统【源码开源】【建议收藏】
    解决ThinkPHP6 控制器不存在:app\controller\Index
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706979.html
Copyright © 2020-2023  润新知