PCI Express 体系结构导读摘录(二)

2024-09-05 18:44

本文主要是介绍PCI Express 体系结构导读摘录(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

系列文章目录


PCI Express 体系结构导读摘录(一)
PCI Express 体系结构导读摘录(二)


文章目录

  • 系列文章目录
  • 第Ⅱ篇  PCI Express 体系结构概述
  • 第 4 章  PCIe 总线概述
    • 4. 1  PCIe 总线的基础知识
      • 4. 1. 1  端到端的数据传递
      • 4. 1. 2  PCIe 总线使用的信号
      • 4. 1. 3  PCIe 总线的层次结构
      • 4. 1. 4  PCIe 链路的扩展
      • 4. 1. 5  PCIe 设备的初始化
    • 4. 2  PCIe 体系结构的组成部件
      • 4. 2. 1  基于 PCIe 架构的处理器系统
      • 4. 2. 2  RC 的组成结构
      • 4. 2. 3  Switch
      • 4. 2. 4  VC 和端口仲裁
      • 4. 2. 5  PCIe⁃to⁃PCI / PCI⁃X 桥片
    • 4. 3  PCIe 设备的扩展配置空间
      • 4. 3. 1  Power Management Capability 结构
      • 4. 3. 2  PCI Express Capability 结构
    • 4. 4 小结
  • 第 5 章  Montevina 的 MCH 和 ICH
    • 5. 1  PCI 总线 0 的 Device 0 设备
      • 5. 1. 1  EPBAR 寄存器
      • 5. 1. 2  MCHBAR 寄存器
      • 5. 1. 3  其他寄存器
    • 5. 2  Montevina 平台的存储器空间的组成结构
      • 5. 2. 1  Legacy 地址空间
      • 5. 2. 2  DRAM 域
      • 5. 2. 3  存储器域
    • 5. 3  存储器域的 PCI 总线地址空间
      • 5. 3. 1  PCI 设备使用的地址空间
      • 5. 3. 2  PCIe 总线的配置空间
    • 5. 4  小结
  • 第 6 章  PCIe 总线的事务层
  • 6. 1  TLP 的格式
      • 6. 1. 1 通用 TLP 头的 Fmt 字段和 Type 字段
      • 6. 1. 2  TC 字段
      • 6. 1. 3  Attr 字段
      • 6. 1. 4  通用 TLP 头中的其他字段
    • 6. 2  TLP 的路由
      • 6. 2. 1  基于地址的路由
      • 6. 2. 2  基于 ID 的路由


第Ⅱ篇  PCI Express 体系结构概述

    PCIe 总线由若干层次组成, 包括事务层、 数据链路层和物理层。 PCIe 总线使用数据报文进行数据传递, 这些数据报文需要通过 PCIe 总线的这些层次。 PCIe 总线的这种数据传递方式与互联网使用 TCP / IP 协议进行数据传递有类似之处。

第 4 章  PCIe 总线概述

4. 1  PCIe 总线的基础知识

    与 PCI 总线不同, PCIe 总线使用端到端的连接方式, 在一条 PCIe 链路的两端只能各连接一个设备, 这两个设备互为数据发送端和数据接收端。 PCIe 总线除了总线链路外, 还具有多个层次, 发送端发送数据时将通过这些层次, 而接收端接收数据时也使用这些层次。 PCIe 总线使用的层次结构与网络协议栈较为类似。

4. 1. 1  端到端的数据传递

    PCIe 链路使用 “端到端的数据传送方式” , 发送端和接收端中都含有 TX (发送逻辑) 和 RX (接收逻辑) , 其结构如图 4-1 所示。

在这里插入图片描述

    由上图所示, 在 PCIe 总线的物理链路的一个数据通路 ( Lane) 中, 有两组差分信号, 共 4 根信号线。 其中发送端的 TX 部件与接收端的 RX 部件使用一组差分信号连接, 该链路 也被称为发送端的发送链路, 也是接收端的接收链路; 而发送端的 RX 部件与接收端的 TX 部件使用另一组差分信号连接, 该链路也被称为发送端的接收链路, 也是接收端的发送链路。 一个 PCIe 链路可以由多个 Lane 组成。

    PCIe 链路可以由多条 Lane 组成, 目前 PCIe 链路可以支持 1、 2、 4、 8、 12、 16 和 32 个 Lane, 即 × 1、 × 2、 × 4、 × 8、 × 12、 × 16 和 × 32 宽度的 PCIe 链路。 每一个 Lane 上使用的总线频率与 PCIe 总线使用的版本相关。

在这里插入图片描述

4. 1. 2  PCIe 总线使用的信号

  1. PERST#信号
    该信号为全局复位信号, 由处理器系统提供, 处理器系统需要为 PCIe 插槽和 PCIe 设备提供该复位信号。

  2. REFCLK + 和 REFCLK - 信号
    PCIe 设备与 PCIe 插槽都具有 REFCLK + 和 REFCLK - 信号, 其中 PCIe 插槽使用 这组信号与处理器系统同步。
    在这里插入图片描述

  3. WAKE#信号
    当 PCIe 设备进入休眠状态, 主电源已经停止供电时, PCIe 设备使用该信号向处理器系 统提交唤醒请求, 使处理器系统重新为该 PCIe 设备提供主电源 Vcc

  4. SMCLK 和 SMDAT 信号
    SMCLK 和 SMDAT 信号与 x86 处理器的 SMBus ( System Mangement Bus) 相关。 SMBus 于 1995 年由 Intel 提出, SMBus 由 SMCLK 和 SMDAT 信号组成。

  5. JTAG 信号
    JTAG ( Joint Test Action Group) 是一种国际标准测试协议, 与 IEEE 1149. 1 兼容, 主要
    用于芯片内部测试。

  6. PRSNT1#和 PRSNT2#信号
    PRSNT1#和 PRSNT2#信号与 PCIe 设备的热插拔相关。

4. 1. 3  PCIe 总线的层次结构

    PCIe 总线采用了串行连接方式, 并使用数据包 (Packet) 进行数据传输, 采用这种结构有效去除了在 PCI 总线中存在的一些边带信号, 如 INTx 和 PME# 等信号。 在 PCIe 总线中, 数据报文在接收和发送过程中, 需要通过多个层次, 包括事务层、 数据链路层和物理层。 PCIe 总线的层次结构如图 4-4 所示。

在这里插入图片描述

    PCIe 总线的层次组成结构与网络中的层次结构有类似之处, 但是 PCIe 总线的各个层次都是使用硬件逻辑实现的。 在 PCIe 体系结构中, 数据报文首先在设备的核心层 ( Device Core) 中产生, 然后再经过该设备的事务层 ( Transaction Layer) 、 数据链路层 ( Data Link Layer) 和物理层 (Physical Layer) , 最终发送出去。 而接收端的数据也需要通过物理层、 数 据链路和事务层, 并最终到达核心层。

  1. 事务层
        事务层定义了 PCIe 总线使用总线事务, 其中多数总线事务与 PCI 总线兼容。 这些总线事务可以通过 Switch 等设备传送到其他 PCIe 设备或者 RC。 RC 也可以使用这些总线事务访问 PCIe 设备。
       
        事务层接收来自 PCIe 设备核心层的数据, 并将其封装为 TLP (Transaction Layer Packet) 后, 发向数据链路层。 此外事务层还可以从数据链路层中接收数据报文, 然后转发至 PCIe 设备的核心层。
  2. 数据链路层
        数据链路层保证来自发送端事务层的报文可以可靠、 完整地发送到接收端的数据链路 层。 来自事务层的报文在通过数据链路层时, 将被添加 Sequence Number 前缀和 CRC 后缀。 数据链路层使用 ACK / NAK 协议保证报文的可靠传递。
       
        PCIe 总线的数据链路层还定义了多种 DLLP (Data Link Layer Packet) , DLLP 产生于数 据链路层, 终止于数据链路层。 值得注意的是, TLP 与 DLLP 并不相同, DLLP 并不是由 TLP 加上 Sequence Number 前缀和 CRC 后缀组成的。 数据链路层的详细描述见第 7 章。
  3. 物理层
        物理层是 PCIe 总线的最底层, 将 PCIe 设备连接在一起。 PCIe 总线的物理电气特性决定 了 PCIe 链路只能使用端到端的连接方式。 PCIe 总线的物理层为 PCIe 设备间的数据通信提供 传送介质, 为数据传送提供可靠的物理环境。
       
        物理层是 PCIe 体系结构最重要, 也是最难以实现的组成部分。 PCIe 总线的物理层定义 了 LTSSM (Link Training and Status State Machine) 状态机, PCIe 链路使用该状态机管理链路 状态, 并进行链路训练、 链路恢复和电源管理。

4. 1. 4  PCIe 链路的扩展

    PCIe 链路使用端到端的数据传送方式。 在一条 PCIe 链路中, 这两个端口是完全对等的, 分别连接发送与接收设备, 而且一个 PCIe 链路的一端只能连接一个发送设备或者接收设备。 因此 PCIe 链路必须使用 Switch 扩展 PCIe 链路后, 才能连接多个设备。 使用 Switch 进 行链路扩展的实例如图 4-5 所示。

    在 PCIe 总线中, Switch(本节出现的 Switch 指传统的 Switch, 在 MR⁃IOV 规范定义的 Switch 与此并不相同, 详见第 13. 3. 2 节。)是一个特殊的设备, 该设备由 1 个上游端口和 2 ~ n 个下游端 口组成。 PCIe 总线规定, 在一个 Switch 中可以与 RC 直接或者间接相连(所谓间接相连是指通过其他 Switch 再与 RC 相连。) 的端口为上游端口, 在 PCIe 总线中, RC 的位置一般在上方, 这也是上游端口这个称呼的由来。 在 Switch 中除了上游端口外, 其他所有端口都被称为下游端口。 下游端口一般与 EP 相连, 或者连接下一级 Switch 继续扩展 PCIe 链路。 其中与上游端口相连的 PCIe 链路被称为上游链路, 与下游端口相连的 PCIe 链路被称为下游链路。

在这里插入图片描述

    上游链路和下游链路是相对的概念。 如图 4 - 5 所示, Switch 与 EP2 连接的 PCIe 链路, 对于 EP2 而言是上游链路, 而对 Switch 而言是下游链路。

    在 Switch 中, 还有两个与端口相关的概念, 分别是 Egress (出口)端口和 Ingress(入口) 端口。 这两个端口与通过 Switch 的数据流向有关。 其中 Egress 端口指发送端口, 即数据离开 Switch 使用的端口; Ingress 端口指接收端口即数据进入 Switch 使用的端口。

    Egress 端口和 Ingress 端口与上下游端口没有对应关系。 在 Switch 中, 上下游端口可以 作为 Egress 端口, 也可以作为 Ingress 端口。

    PCIe 总线还规定了一种特殊的 Switch 连接方式, 即 Crosslink 连接模式。 支持这种模式的 Switch, 其上游端口可以与其他 Switch 的上游端口连接, 其下游端口可以与其他 Switch 的下游端口连接。

    PCIe 总线提供 CrossLink 连接模式的主要目的是为了解决不同处理器系统之间的互连, 如图 4-6 所示。 使用 CrossLink 连接模式时, 虽然从物理结构上看, 一个 Switch 的上/ 下游端 口与另一个 Switch 的上/ 下游端口直接相连, 但是这个 PCIe 链路经过训练后, 仍然是一个端 口作为上游端口, 而另一个端口作为下游端口。

在这里插入图片描述

4. 1. 5  PCIe 设备的初始化

    PCIe 总线规定了两大类复位方式, 一种是传统的复位方式 ( Conventional Reset) , 另一 种是 FLR (Function⁃Level Reset,功能级别复位) 方式。

    其中 PCIe 总线的传统复位方式由两大类组成, 一个是 Fundamental Reset, 而另一个是 Non⁃Fundamental Reset。 Fundamental Reset 方式包括 Cold 和 Warm Reset 方式, 可以将 PCIe 设备中的绝大多数内部寄存器和内部状态都恢复成初始值; 而 Non⁃Fundamental Reset 方式指 Hot Reset 方式。

  1. 传统复位方式
        传统复位方式分为 ColdWarmHot Reset。 PCIe 设备可以根据当前设备的运行状态选 择合适的复位方式, PCIe 总线提供多种复位方式的主要原因是减小 PCIe 设备的复位延时。 其中传统复位方式的延时大于 FLR 方式。 使用传统复位方式时, Cold Reset 使用的时间最长, 而 Hot Reset 使用的时间最短。
  2. FLR 方式
        系统软件填写某些寄存器时, PCIe 设备将使用 FLR 方式进行复位。 支持 FLR 方式的 PCIe 设备需要在其 BAR 空间中提供 一个寄存器, 当系统软件对该寄存器的 Function Level Reset 位写 1 时, PCIe 设备将使用 FLR 方式复位 PCIe 设备的内部逻辑。 FLR 方式对于 PCIe 设备是可选的, PCIe 总线规范并没有定 义 FLR 方式的具体实现过程, 但是定义了 FLR 方式的适用范围。

4. 2  PCIe 体系结构的组成部件

4. 2. 1  基于 PCIe 架构的处理器系统

  1. 处理器系统 A
        在有些处理器系统中, 没有直接提供 PCI 总线, 此时需要使用 PCIe 桥, 将 PCIe 链路转换为 PCI 总线之后, 才能连接 PCI 设备。 在 PCIe 体系结构中, 也存在 PCI 总线号的概念, 其编号方式与 PCI 总线兼容。 一个基于 PCIe 架构的处理器系统 A 如图 4-7 所示。
       
    在这里插入图片描述
       
        在图4-7 的结构中, 处理器系统首先使用一个虚拟的 PCI 桥分离处理器系统的存储器域与 PCI 总线域。 FSB 总线下的所有外部设备都属于 PCI 总线域。 与这个虚拟 PCI 桥直接相连 的总线为 PCI 总线 0。 这种架构与 Intel 的 x86 处理器系统较为类似。
       
        在这种结构中, RC 由两个 FSB⁃to⁃PCIe 桥和存储器控制器组成。 值得注意的是在图 4-7 中, 虚拟 PCI 桥的作用只是分离存储器域与 PCI 总线域, 但是并不会改变信号的电气特性。 RC 与处理器通过 FSB 连接, 而从电气特性上看, PCI 总线 0 与 FSB 兼容, 因此在 PCI 总线 0 上挂接的是 FSB⁃to⁃PCIe 桥, 而不是 PCI⁃to⁃PCIe 桥。
       
        在 PCI 总线 0 上有一个存储器控制器和两个 FSB⁃to⁃PCIe 桥。 这两个 FSB⁃to⁃PCIe 桥分别推出一个 × 16× 8PCIe 链路, 其中 × 16 的 PCIe 链路连接显卡控制器 (GFX) , 其编号为 PCI 总线 1; × 8 的 PCIe 链路连接一个 Switch 进行 PCIe 链路扩展。 而存储器控制器作为 PCI 总线 0 的一个 Agent 设备, 连接 DDR 插槽或者颗粒。

  2. PowerPC 处理器
        PowerPC 处理器挂接外部设备使用的拓扑结构与 x86 处理器不同。 在 PowerPC 处理器 中, 虽然也含有 PCI / PCIe 总线, 但是仍然有许多外部设备并不是连接在 PCI 总线上的。
       
        如图 4-8 所示, P4080 处理器的设计重点并不是 E500mc 内核, 而是 CoreNet。 CoreNet 内部由全互连网络组成, 其中任意两个端口间的通信并不会影响其他端口间的通信。 与 MPC8548 处理器相同, P4080 处理器也使用 OceaN(OCeaN 是一个基于交叉矩阵的总线结构, 连接在 OCeaN 中的外部设备可以直接通信, 而不相互干扰。)结构连接 PCIe 与 RapidIO 接口。
       
    在这里插入图片描述
       
        在 P4080 处理器中不存在 RC 的概念, 而仅存在 PCIe 总线控制器, 当然也可以认为在 P4080 处理器中, PCIe 总线控制器即为 RC。 P4080 处理器内部含有 3 个 PCIe 总线控制器, 如果该处理器需要连接更多的 PCIe 设备时, 需要使用 Switch 扩展 PCIe 链路。

  3. 基于 PCIe 总线的通用处理器结构
        本节并不对 x86 和 PowerPC 处理器使用的 PCIe 总线结构做进一步讨论, 而只介绍这两种结构的相同之处。 一 个通用的、 基于 PCIe 总线的处理器系统如图 4-9 所示。
       
    在这里插入图片描述
       
        图中所示的结构将 PCIe 总线端口、 存储器控制器等一系列与外部设备有关的接口都集成在一起, 并统称为 RC。 RC 具有一个或者多个 PCIe 端口, 可以连接各类 PCIe 设备。 PCIe 设备包括 EP (如网卡、 显卡等设备) 、 Switch 和 PCIe 桥(PCI Express⁃to⁃PCI 桥简称为 PCIe 桥)。

4. 2. 2  RC 的组成结构

    RC 是 PCIe 体系结构的一个重要组成部件, 也是一个较为混乱的概念。 RC 的提出与 x86 处理器系统密切相关。 事实上, 只有 x86 处理器才存在 PCIe 总线规范定义的 “标准 RC” , 而在多数处理器系统中, 并不含有在 PCIe 总线规范中涉及的与 RC 相关的全部概念。

4. 2. 3  Switch

    一个 PCIe 链路需要挂接多个 EP 时, 需要使用 Switch 进行链路扩展。 一个标准 Switch 具有一个上游端口和多个下游端口。 上游端口与 RC 或者其他 Switch 的下游端口相连, 而下 游端口可以与 EP、 PCIe⁃to⁃PCI⁃X / PCI 桥或者下游 Switch 的上游端口相连。

    PCIe 总线规范还支持一种特殊的连接方式, 即 Crosslink 连接方式。 使用这种方式时, Switch 的下游端口可以与其他 Switch 的下游端口直接连接, 上游端口也可以其他 Switch 的上 游端口直接连接。 在 PCIe 总线规范中, Crosslink 连接方式是可选的, 并不要求 PCIe 设备一 定支持这种连接方式。

    而从系统软件的角度上看, Switch 内部由多个 PCI⁃to⁃PCI 桥组成, 其中每一个上游和下游端口都对应一个虚拟 PCI 桥。 在一个 Switch 中有多少个端口, 在其内部就有多少个虚拟 PCI 桥, 就有多少个 PCI 桥配置空间。 值得注意的是, 在 Switch 内部还具有一条虚拟的 PCI 总线, 用于连接各个虚拟 PCI 桥, 系统软件在初始化 Switch 时, 需要为这条虚拟 PCI 总线编号。 Switch 的组成结构如图 4-10 所示。

在这里插入图片描述

    Switch 需要处理 PCIe 总线传输过程中的 QoS 问题 。 PCIe 总线的 QoS 要求 PCIe 总线区别对待优先权不同的数据报文, 而且无论 PCIe 总线的某一个链路多么拥塞, 优先级高的报文, 如等时报文 ( Isochronous Packet) 都可以获得额定的数据带宽。 而且 PCIe 总线需要保证优先级较高的报文优先到达。 PCIe 总线采用虚拟多通路 VC 技术(有关多通路 VC 的详细说明见第 9 章。) , 并在这些数据报文中 设定一个 TCTraffic Class) 标签, 该标签由 3 位组成, 将数据报文根据优先权分为 8 类, 这 8 类数据报文可以根据需要选择不同的 VC 进行传递。

4. 2. 4  VC 和端口仲裁

    在 Switch 中存在多个端口, 其中来自不同 Ingress 端口的报文可以发向同一个 Egress 端 口, 因此 Switch 必须要解决端口仲裁和路由选径的问题。 所谓端口仲裁指来自不同 Ingress 端口的报文到达同一个 Egress 端口的报文通过顺序, 端口仲裁机制如图 4-11 所示。

在这里插入图片描述

    在一个 Switch 中设有仲裁器, 该仲裁器规定了数据报文通过 Switch 的规则。 在 PCIe 总线中存在两种仲裁机制, 分别是基于 VC 和基于端口的仲裁机制。 端口仲裁机制主要针对 RCSwitch, 当多个 Ingress 端口需要向同一个 Egress 端口发送数据报文时需要进行端口仲裁。 具体地讲, 在 PCIe 体系结构中有三个端口, 需要进行端口仲裁。

  • Switch 的 Egress 端口。 当 EP A 和 EP B 同时访问 EP C, D 或者 DDR⁃SDRAM 时, 需要 通过 Switch 的 Egress 端口 C。 此时 Switch 需要进行端口仲裁确定是 EP A 的数据报文 还是 EP B 的数据报文优先通过 Egress 端口 C。
  • 多端口 RC 的 Egress 端口。 当 RC 的端口 1 和端口 3 同时访问 Endpoint C 时, RC 的端 口 2 需要进行端口仲裁, 决定来自 RC 哪个端口的数据可以率先通过。
  • RC 通往主存储器的端口。 当 RC 的端口 1、 端口 2 和端口 3 同时访问 DDR 控制器时, 这些数据报文将通过 RC 的 Egress 端口 4, 此时需要进行端口仲裁。

    在 PCIe 体系结构中, 链路的端口仲裁需要根据每一个 VC 独立设置, 而且可以使用不 同的算法进行端口仲裁。

    下文以图 4-11 中, Switch 的两个 Ingress 端口 A 和 B 向 Egress 端口 C 发送数据报文为 例, 简要说明端口仲裁和 VC 仲裁的使用方法, 其过程如图 4-12 所示。

    基于 VC 的仲裁是指发向同一个端口的数据报文, 根据使用的 VC 而进行仲裁的方式。 当来自端口 B 和端口 A 数据报文 (分别使用 VC0 和 VC1 通路) 在到达端口 C 之前, 需要首 先进行端口仲裁后, 才能进行 VC 仲裁。 PCIe 总线规定了 3 种 VC 仲裁方式, 分别为 Strict PriorityRR (Round Robin)WRR (Weighted Round Robin) 算法。

在这里插入图片描述

    PCIe 总线规定, 系统设计者可以使用以下三种方式进行端口仲裁。

  1. Hardware⁃fixed 仲裁策略。 如在系统设计时, 采用固化的 RR 仲裁方法。 这种方法 的硬件实现原理较为简单, 此时系统软件不能对端口仲裁器进行配置。
  2. WRR 仲裁策略, 即加权的 RR 仲裁策略, 该算法和 Time⁃Based WRR 算法的描述见 第 4. 3. 3 节。
  3. Time⁃Based WRR 仲裁策略, 基于时间片的 WRR 仲裁策略, PCIe 总线可以将一个 时间段分为若干个时间片 (Phase) , 每个端口占用其中的一个时间片, 并根据端口使用这些 时间片的多少对端口进行加权的一种方法。 使用 WRR 和 Time⁃Based WRR 仲裁策略, 可以 在某种程度上提高 PCIe 总线的 QoS。

4. 2. 5  PCIe⁃to⁃PCI / PCI⁃X 桥片

4. 3  PCIe 设备的扩展配置空间

    本书在第 2. 3. 2 节讲述了 PCI 设备使用的基本配置空间。 这个基本配置空间共由 64 个 字节组成, 其地址范围为 0x00 ~ 0x3F, 这 64 个字节是所有 PCI 设备必须支持的。 事实上, 许多 PCI 设备也仅支持这 64 个配置寄存器。

    此外 PCI / PCI⁃X 和 PCIe 设备还扩展了 0x40 ~ 0xFF 这段配置空间, 在这段空间主要存放一些与 MSI 或者 MSI⁃X 中断机制和电源管理相关的 Capability 结构。 其中所有能够提交中断请求的 PCIe 设备, 必须支持 MSI 或者 MSI⁃X Capability 结构。

    PCIe 设备还支持 0x100 ~ 0xFFF 这段扩展配置空间。 PCIe 设备使用的扩展配置空间最大为 4KB, 在 PCIe 总线的扩展配置空间中, 存放 PCIe 设备所独有的一些 Capability 结构, 而 PCI 设备不能使用这段空间。

    在 x86 处理器中, 使用 CONFIG_ADDRESS 寄存器与 CONFIG_DATA 寄存器访问 PCIe 配置空间的 0x00 ~ 0xFF, 而使用 ECAM 方式访问 0x000 ~ 0xFFF 这段空间; 而在 PowerPC 处理 器中, 可以使用 CFG_ADDR 和 CFG_DATA 寄存器访问 0x000 ~ 0xFFF, 详见第 2. 2 节。

    PCI⁃X 和 PCIe 总线规范要求其设备必须支持 Capabilities 结构。 在 PCI 总线的基本配置空间中, 包含一个 Capabilities Pointer 寄存器, 该寄存器存放 Capabilities 结构链表的头指针。 在一个 PCIe 设备中, 可能含有多个 Capability 结构, 这些寄存器组成一个链表, 其结构如图 4-14 所示。

    其中每一个 Capability 结构都有唯一的 ID 号, 每一个 Capability 寄存器都有一个指针, 这个指针指向下一个 Capability 结构, 从而组成一个单向链表结构, 这个链表的最后一个 Capability 结构的指针为 0

在这里插入图片描述

    一个 PCIe 设备可以包含多个 Capability 结构, 包括与电源管理相关、 与 PCIe 总线相关的结构、 与中断请求相关的 Capability 结构、 PCIe Capability 结构和 PCIe 扩展的 Capability 结构。

4. 3. 1  Power Management Capability 结构

    PCIe 总线使用的软件电源管理机制与 PCI PMPower Management) 兼容。 而 PCI 总线 的电源管理机制需要使用 Power Management Capability 结构, 该结构由一些和 PCI / PCI⁃X 和 PCIe 总线的电源管理相关的寄存器组成, 包括 PMCRPower Management Capabilities Register) 和 PMCSRPower Management Control and Status Register) , 其结构如图 4-15 所示。

在这里插入图片描述

    Capability ID 字段记载 Power Management Capability 结构的 ID 号, 其值为 0x01。 在 PCIe 设备中, 每一个 Capability 都有唯一的一个 ID 号, 而 Next Capability Pointer 字段存放下一个 Capability 结构的地址。

  1. PMCR 寄存器
        PMCR 寄存器由 16 位组成, 其中所有位和字段都是只读的。 该寄存器的主要目的是记录当前 PCIe 设备的物理属性, 系统软件需要从 PMCR 寄存器中获得当前 PCIe 设备的信息后, 才能对 PMCSR 寄存器进行修改。 该寄存器的结构如图 4-16 所示, 其中 PMCR 寄存器在 Power Management Capability 结构的第 3 ~ 2 字节中。
       
    在这里插入图片描述
       

    • Version 字段只读, 记录 Power Management Capability 结构的版本号。
    • PME Clock 位只读, 该位没有被 PCIe 总线使用㊀ , 硬件逻辑必须将其接为 0。 PCI 设 备可以使用 PME#信号通知设备改变电源状态, 在 PCI 总线中, 如果 PME#信号需要 使用时钟 (PCI Clock) 时, 该位为 1; 否则该位为 0。
    • RsvdP 字段为系统保留字段。
    • DSIDevice Specific Initialization) 位只读。 某些 PCIe 设备在上电时处于某种工作模 式, 之后可以通过重新配置运行在其他工作模式中, 此时该设备需要使用 DSI 位表示 该设备可以使用自定义的电源工作方式。
    • AUXAuxiliary device) Current 字段只读, 表示 PCIe 设备需要使用辅助电源的电 流强度。
    • D2D1 位只读。 D2 位为 1 表示 PCIe 设备支持 D2 状态; D1 位为 1 表示 PCIe 设备支 持 D1 状态。 PCI PM 机制规定 PCIe 设备可以支持四种状态, 分别为 D0 ~ D3 状态。 PCIe 设备处于 D0 状态时的功耗最高, 处于 D3 状态时最低。 多数支持电源管理的 PCIe 设备仅支持 D0 状态和 D3 状态, 而 D1 和 D2 状态可选, 有关这四种状态的详细 说明见第 8. 4. 1 节。
    • PME Support 字段只读, 存放 PCIe 设备支持的电源状态。 第 27 位为 1 时, 表示 PCIe 设备处于 D0 状态时, 可以发送 PME 消息; 第 28 位为 1 时, 表示 PCIe 设备处于 D1 状态时, 可以发送 PME 消息; 第 29 位为 1 时, 表示 PCIe 设备处于 D2 状态时可以发 送 PME 消息; 第 30 位为 1 时, 表示 PCIe 设备处于 D3hot状态时可以发送 PME 消息; 第 31 位为 1 时, 表示 PCIe 设备处于 D3cold状态时可以发送 PME 消息。
  2. PMCSR 寄存器
        系统软件可以通过操作 PMCSR 寄存器, 完成 PCIe 设备电源状态的迁移。 该寄存器的结 构如图 4-17 所示。
       
    在这里插入图片描述
       

4. 3. 2  PCI Express Capability 结构

    PCI Express Capability 结构存放一些和 PCIe 总线相关的信息, 包括 PCIe 链路和插槽的 信息。 有些 PCIe 设备不一定实现了 PCI Express Capability 结构中的所有寄存器, 或者并没有 提供这些配置寄存器供系统软件访问。

    PCI Express Capability 结构的部分寄存器及其相应字段与硬件的具体实现细节相关, 本 节仅介绍其中一些系统软件程序员需要了解的字段。 在该结构中, Cap ID 字段为 PCI Expresss Capability 结构使用的 ID 号, 其值为 0x10。 而 Next Capability 字段存放下一个 Capability 寄存器的地址。 PCI Express Capability 结构由 PCI Express CapabilityDevice CapabilityDevice ControlDevice StatusLink CapabilitiesLink StatusLink ControlSlot CapabilitiesSlot Status 等一系列寄存器组成。 本节仅介绍该结构中常用的寄存器。 PCI Express Capability 的组成结构如图 4-18 所示。

在这里插入图片描述

4. 4 小结

    本章简要介绍了 PCIe 总线的各个组成部件, 包括 RC、 Switch 和 EP 等, 并介绍了 PCIe 总线的层次组成结构, 和 PCIe 设备使用的 Capability 结构。 本章是读者了解 PCIe 体系结构 的基础。

第 5 章  Montevina 的 MCH 和 ICH

在这里插入图片描述

5. 1  PCI 总线 0 的 Device 0 设备

5. 1. 1  EPBAR 寄存器

5. 1. 2  MCHBAR 寄存器

5. 1. 3  其他寄存器

5. 2  Montevina 平台的存储器空间的组成结构

5. 2. 1  Legacy 地址空间

5. 2. 2  DRAM 域

5. 2. 3  存储器域

在这里插入图片描述

5. 3  存储器域的 PCI 总线地址空间

5. 3. 1  PCI 设备使用的地址空间

5. 3. 2  PCIe 总线的配置空间

5. 4  小结

    本章较为详细地介绍了 Montevina 平台与 PCIe 总线相关的内容。 理解 PCIe 总线必须建 立在理解处理器系统的基础之上, 而 Intel 提供的处理器平台无疑是学习 PCIe 总线最合适的 平台。 Intel 是 PCIe 总线的缔造者, 而且总是率先支持 PCIe 规范提出的最新功能。 希望读者 能够在充分理解处理器平台的基础上, 进一步理解 PCIe 总线的细节知识。

第 6 章  PCIe 总线的事务层

    事务层是 PCIe 总线层次结构的最高层, 该层次将接收 PCIe 设备核心层的数据请求, 并 将其转换为 PCIe 总线事务, PCIe 总线使用的这些总线事务在 TLP(Transaction Layer Packet) 头中定义。 PCIe 总线继承 了 PCI / PCI⁃X 总线的大多数总线事务, 如存储器读写、 I / O 读写、 配置读写总线事务, 并增 加了 Message 总线事务和原子操作等总线事务。

    本节重点介绍与数据传送密切相关的总线事务, 如存储器、 I / O、 配置读写总线事务。 在 PCIe 总线中, Non⁃Posted 总线事务分两部分进行, 首先是发送端向接收端提交总线读写 请求, 之后接收端再向发送端发送完成 ( Completion) 报文。 PCIe 总线使用 Split 传送方式处理所有 Non⁃Posted 总线事务, 存储器读、 I / O 读写和配置读写这些 Non⁃Posted 总线事务都 使用 Split 传送方式。 PCIe 的事务层还支持流量控制和虚通路管理等一系列特性, 而 PCI 总 线并不支持这些新的特性。

    在 PCIe 总线中, 不同的总线事务采用的路由方式不相同。 PCIe 总线继承了 PCI 总线的地址路由和 ID 路由方式, 并添加了 “隐式路由” 方式。

    PCIe 总线使用的数据报文首先在事务层中形成, 这个数据报文也称为事务层数据报文, 即 TLP。 TLP(Transaction Layer Packet) 在经过数据链路层时被加上 Sequence Number 前缀和 CRC 后缀, 然后发向物理层。

    数据链路层还可以产生 DLLPData Link Layer Packet) 。 DLLPTLP 没有直接关系。 DLLP 是产生于数据链路层, 终止于数据链路层, 并不会传递到事务层。 DLLP 不是 TLP 加 上前缀和后缀形成的。 数据链路层的报文 DLLP 通过物理层时, 需要经过 8 / 10b 编码, 然后 再进行发送。 而数据的接收过程是发送过程的逆过程。

6. 1  TLP 的格式

    当处理器或者其他 PCIe 设备访问 PCIe 设备时, 所传送的数据报文首先通过事务层被封 装为一个或者多个 TLP, 之后才能通过 PCIe 总线的各个层次发送出去。 TLP 的基本格式如 图 6-1 所示。

在这里插入图片描述

    一个完整的 TLP 由 1 个或者多个 TLP PrefixTLP 头、 Data Payload (数据有效负载) 和 TLP Digest 组成。 TLP 头是 TLP 最重要的标志, 不同的 TLP 其头的定义并不相同。 TLP 头包含了当前 TLP 的总线事务类型、 路由信息等一系列信息。 在一个 TLP 中, Data Payload 的长度可变, 最小为 0, 最大为 1024DW

    TLP Digest 是一个可选项, 一个 TLP 是否需要 TLP Digest 由 TLP 头决定。 Data Payload 也 是一个可选项, 有些 TLP 并不需要 Data Payload, 如存储器读请求、 配置和 I / O 写完成 TLP 并不需要 Data Payload。

    TLP Prefix 由 PCIe V2. 1 总线规范引入, 分为 Local TLP Prefix 和 EP⁃EP TLP Prefix 两类。 其中 Local TLP Prefix 的主要作用是在 PCIe 链路的两端传递消息, 而 EP⁃EP TLP Prefix 的主 要作用是在发送设备和接收设备之间传递消息。 设置 TLP Prefix 的主要目的是为了扩展 TLP 头, 并以此支持 PCIe V2. 1 规范的一些新的功能。

    TLP 头由 3 个或者 4 个双字 (DW) 组成。 其中第一个双字中保存通用 TLP 头, 其他字段与通用 TLP 头的 Type 字段相关。 一个通用 TLP 头由 Fmt、 Type、 TC、 Length 等字段组成, 如图 6-2 所示。

在这里插入图片描述

    如果存储器读写 TLP 支持 64 位地址模式时, TLP 头的长度为 4DW, 否则为 3DW。 而完 成报文的 TLP 头不含有地址信息, 使用的 TLP 头长度为 3DW。 其中 Byte 4 ~ Byte 15 的格式 与 TLP 相关, 下文将结合具体的 TLP 介绍这些字段。

6. 1. 1 通用 TLP 头的 Fmt 字段和 Type 字段

    FmtType 字段确认当前 TLP 使用的总线事务, TLP 头的大小是由 3 个双字还是 4 个双字组成, 当前 TLP 是否包含有效负载。 其具体含义如表 6-1 所示。

在这里插入图片描述

    其中所有读请求 TLP 都不带数据, 而写请求 TLP 带数据, 而其他 TLP 可能带数据也可能不带数据, 如完成报文可能含有数据, 也可能仅含有完成标志而并不携带数据。 在 TLPType 字段中存放 TLP 的类型, 即 PCIe 总线支持的总线事务。 该字段共由 5 位组成, 其含义如表 6-2 所示。

在这里插入图片描述

    存储器读和写请求, IO 读和写请求, 及配置读和写请求的 type 字段相同, 如存储器读和写请求的 Type 字段都为 0b0 0000。 此时 PCIe 总线规范使用 Fmt 字段区分读写请求, 当 Fmt 字段是 “带数据” 的报文, 一定是 “写报文” ; 当 Fmt 字段是 “不带数据” 的报文, 一 定是 “读报文” 。

    PCIe 总线的数据报文传送方式与 PCI 总线数据传送有类似之处。 其中存储器写 TLP 使用 Posted 方式进行传送, 而其他总线事务使用 Non⁃Posted 方式。

    PCIe 总线规定所有 Non⁃Posted 存储器请求使用 Split 总线方式进行数据传递。 当 PCIe 设备进行存储器读、 I / O 读写或者配置读写请求时, 首先向目标设备发送数据读写请求 TLP, 当目标设备收到这些读写请求 TLP 后, 将数据和完成信息通过完成报文 ( Cpl 或者 CplD) 发送给源设备。

    其中存储器读、 I / O 读和配置读需要使用 CplD 报文, 因为目标设备需要将数据传递给 源设备; 而 I / O 写和配置写需要使用 Cpl 报文, 因为目标设备不需要将任何数据传递给源设 备, 但是需要通知源设备, 写操作已经完成, 数据已经成功地传递给目标设备。

    在 PCIe 总线中, 进行存储器或者 I / O 写操作时, 数据与数据包头一起传递; 而进行存 储器或者 I / O 读操作时, 源设备首先向目标设备发送读请求 TLP, 而目标设备在准备好数据 后, 向源设备发出完成报文。

    与 PCI 总线不同, PCIe 总线规范定义了 Msg 报文, 即消息报文, 分别为 MsgMsgD。 这两种报文的区别在于一个报文可以传递数据, 一个不能传递数据。

    PCIe V2. 1 总线规范还补充了一些总线事务, 如 FetchAddSwapCASLPrfxEPrfx。 其中 LPrfx 和 EPrfx 总线事务分别与 Local TLP Prefix 和 EP⁃EP TLP Prefix 对应。 在 PCIe 总线 规范 V2. 0 中, TLP 头的大小为 1DW, 而使用 LPrfx 和 EPrfx 总线事务可以对 TLP 头进行扩 展, 本节不对这些 TLP Prefix 做进一步介绍。 PCIe 设备可以使用 FetchAdd、 Swap 和 CAS 总 线事务进行原子操作, 第 6. 3. 5 节将详细介绍该类总线事务。

6. 1. 2  TC 字段

    TC 字段表示当前 TLP 的传送类型, PCIe 总线规定了 8 种传输类型, 分别为 TC0 ~ TC7, 缺省值为 TC0, 该字段与 PCIe 的 QoSQuality of Service,服务质量) 相关。 PCIe 设备使用 TC 区分不同类型的数据传递, 而多数 EP 中只含有一个 VC, 因此这些 EP 在发送 TLP 时, 也仅仅使用 TC0, 但是有些对实 时性要求较高的 EP 中, 含有可以设置 TC 字段的寄存器。

6. 1. 3  Attr 字段

    Attr 字段由 3 位组成, 其中第 2 位表示该 TLP 是否支持 PCIe 总线的 ID⁃based Ordering; 图 6-3 Attr 字段格式第 1 位表示是否支持 Relaxed Ordering; 而第 0 位表示该 TLP 在经过 RC 到达存储器时, 是否需要进行 Cache 共享一致性处理。 Attr 字段如图 6-3 所示。

在这里插入图片描述

    一个 TLP 可以同时支持 ID⁃based OrderingRelaxed Orde⁃ ring 两种位序。 Relaxed Ordering 最早在 PCI⁃X 总线规范中提出, 用来提高 PCI⁃X 总线的数据传送效率; 而 ID⁃based Orde⁃ ring 由 PCIe V2. 1 总线规范提出。 TLP 支持的序如表 6-3 所示。

在这里插入图片描述

    当使用标准的强序模型时, 在数据的整个传送路径中, PCIe 设备在处理相同类型的 TLP 时, 如 PCIe 设备发送两个存储器写 TLP 时, 后面的存储器写 TLP 必须等待前一个存 储器写 TLP 完成后才能被处理, 即便当前报文在传送过程中被阻塞, 后一个报文也必须 等待。

    如果使用 Relaxed Ordering 模型, 后一个存储器写 TLP 可以穿越前一个存储器写 TLP, 提前执行, 从而提高了 PCIe 总线的利用率。 有时一个 PCIe 设备发出的 TLP, 其目的地址并 不相同, 可能先进入发送队列的 TLP, 在某种情况下无法发送, 但这并不影响后续 TLP 的发 送, 因为这两个 TLP 的目的地址并不相同, 发送条件也并不相同。

    Attr 字段的第 0 位是 “No Snoop Attribute” 位。 当该位为 0 时表示当前 TLP 所传送的数 据在通过 FSB 时, 需要与 Cache 保持一致, 这种一致性由 FSB 通过总线监听自动完成而不 需要软件干预; 如果为 1, 表示 FSB 并不会将 TLP 中的数据与 Cache 进行一致, 在这种情况 下, 进行数据传送时, 必须使用软件保证 Cache 的一致性。

6. 1. 4  通用 TLP 头中的其他字段

    除了 Fmt 和 Type 字段外, 通用 TLP 头还含有以下字段。

  1. TH 位、 TD 位和 EP
        TH 位为 1 表示当前 TLP 中含有 TPHTLP Processing Hint) 信息, TPH 是 PCIe V2. 1 总 线规范引入的一个重要功能。 TLP 的发送端可以使用 TPH 信息, 通知接收端即将访问数据 的特性, 以便接收端合理地预读和管理数据, TPH 的详细介绍见第 6. 3. 6 节。
       
        TD 位表示 TLP 中的 TLP Digest 是否有效, 为 1 表示有效, 为 0 表示无效。 而 EP 位表示 当前 TLP 中的数据是否有效, 为 1 表示无效, 为 0 表示有效。

  2. AT 字段
        AT 字段与 PCIe 总线的地址转换相关。 在一些 PCIe 设备中设置了 ATCAddress Translation Cache) 部件, 这个部件的主要功能是进行地址转换。 只有在支持 IOMMU 技术的处理器 系统中, PCIe 设备才能使用该字段。

  3. Length 字段
        Length 字段用来描述 TLP 的有效负载 (Data Payload) 大小 。 PCIe 总线规范规定一个 TLP 的 Data Payload 的大小在 0 ~ 4096 B 之间。 PCIe 总线设置 Length 字段的目的是提高总线的传送效率。

6. 2  TLP 的路由

    TLP 的路由是指 TLP 通过 Switch 或者 PCIe 桥片时采用哪条路径, 最终到达 EP 或者 RC 的方法。 PCIe 总线一共定义了三种路由方法, 分别是基于地址 (Address) 的路由, 基于 ID 的路由和隐式路由 ( Implicit) 方式。

    存储器和 I / O 读写请求 TLP 使用基于地址的路由方式, 这种方式使用 TLP 中的 Address 字段进行路由选径, 最终到达目的地。

    而配置读写报文、 “Vendor_Defined Messages” 报文、 CplCplD 报文使用基于 ID 的路 由方式, 这种方式使用 PCI 总线号 ( Bus Number) 进行路由选径。 在 Switch 或者多端口 RC 的虚拟 PCI⁃to⁃PCI 桥配置空间中, 包含如何使用 PCI 总线号进行路由选径的信息。

    而隐式路由方式主要用于 Message 报文的传递。 在 PCIe 总线中定义了一系列消息报文, 包括 “ INTx Interrupt Signaling” , “ Power Management Messages” 和 “ Error Signal Messages” 等报文。 在这些报文中, 除了 “Vendor_Defined Messages” 报文, 其他所有消息报文都使用隐式路由方式, 隐式路由方式是指从下游端口到上游端口进行数据传递的使用路由方式, 或者用于 RCEP 发出广播报文。

6. 2. 1  基于地址的路由

    在 PCIe 总线中, 存储器读写和 I / O 读写 TLP 使用基于地址的路由方式。 PCIe 设备使用的地址路由方式与 PCI 设备使用的地址路由方式类似。 只是 PCIe 设备使用 TLP 进行数据传 送, 而 PCI 设备使用总线周期进行数据传送。 使用地址路由方式进行数据传递的 TLP 格式如第 6. 3. 1 节的图 6-8 所示, 在这类 TLP 中包含目的设备的地址。

    当一个 TLP 进行数据传递时, 可能会经过多级 Switch, 最终到达目的地。 Switch 将根据存储器读写和 I / O 读写请求 TLP 的目的地址将报文传递到合适的 Egress 端口上。 如图 4⁃10 所示, 在一个 Switch 中包含了多个虚拟 PCI⁃to⁃PCI 桥。 在 Switch 中有几个端口, 就包含几个 虚拟 PCI⁃to⁃PCI 桥。

在这里插入图片描述

    图 6-4 中的配置寄存器描述了该虚拟 PCI⁃to⁃PCI 桥下游 PCI 子树使用的三组空间范围, 分别为 I / O、 存储器和可预取的存储器空间, 分别用 BaseLimit 两类寄存器描述, 其中 Base 寄存器表示可访问空间的基地址, Limit 寄存器表示可访问空间的大小。 TLP 使用基于 地址的路由时, 一定要通过查询这组寄存器之后, 再决定传送路径。 这组寄存器的使用方法与 PCI 总线中的 PCI 桥兼容。

在这里插入图片描述

6. 2. 2  基于 ID 的路由

    在 PCIe 总线中, 基于 ID 的路由方式主要用于配置读写请求 TLP、 Cpl 和 CplD 报文, 此 外 Vendor_Defined 消息报文也可以使用这种基于 ID 的路由方式。 而在 PCI 总线中, 只有配置读写周期才使用 ID 进行数据传递。

    基于 ID 的路由方式与基于地址的路由方式有较大的不同, 基于 ID 路由方式的 TLP 头格式也与基于地址路由方式的头格式不同, 其报文格式如图 6-6 所示。

在这里插入图片描述

    使用 ID 路由方式的 TLP 头, 其 Byte8 ~ Byte11 字段与基于地址路由的 TLP 不同。 基于 ID 路由的 TLP, 使用 Bus NumberDevice NumberFunction Number 进行路由寻址。 从软件 的角度来看, PCIe 总线与 PCI 总线兼容, 只是在 PCIe 总线中, 每一个 PCIe 设备使用唯一的 PCI 设备号, 但是每一个设备仍然可以有多个子设备 (Function) 。

    PCIe 总线规定, 在一个 PCI 总线域空间中, 最多只能有 256 条 PCI 总线, 因此在一个 TLP 中, Bus Number 由 8 位组成; 而在每一条总线中最多包含 32 个设备, 因此 TLP 中的 Device Number 由 5 位组成; 而每一个设备中最多包含 8 个功能, 因此一个 TLP 的 Function Number 由 3 位组成。

    配置读写请求 TLP 是使用 “基于 ID 路由” 的一组重要报文, 其主要作用是读写 PCIe 总线的 EPSwitchPCIe 桥片的配置寄存器, 以完成 PCIe 总线的配置。 在处理器系统上电之后需要进行 PCI 总线系统的枚举, 为 PCI 总线分配总线号, 并设置 SwitchPCIe 桥片或者 EP 的配置寄存器, 如 Limit 寄存器组、 Base 寄存器组、 BAR 寄存器、 Subordinate Bus NumberSecondary Bus NumberPrimary Bus Number 等一系列配置寄存器。

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   
 

这篇关于PCI Express 体系结构导读摘录(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139768

相关文章

读书摘录《控糖革命》

又到了每周推荐时间,这周末给大家推荐一本书《控糖革命》。身体是革命的本钱,只有保持健康的身体,才能保证持久的生产力,希望我的读者都可以身体健康,青春永驻。 推荐前,首先申明在《控糖革命》一书中,作者提出了一些颇具争议的观点,这些观点并没有经过系统的科学论证,但这并不妨碍我们从中获取一些有益的控糖建议。作者通过分享作者的个人经验和研究,为我们提供了一种全新的饮食理念,帮助我们更好地控制血糖峰值

20151214 要点摘录2

算法: 四火的数据库算法10题 http://www.raychase.net/2810 leetCode解题报告 http://bookshadow.com/leetcode/ 学习算法之路(转) http://blog.csdn.net/sunboy_2050/article/details/5656823 10分钟没有思路的就找例子 http://blog.csdn

20151214 要点摘录1

eclipse用法 --- 涉及到的eclipse的使用 在接口名上按F4 可以看继承关系    按ctrl+T可以找实现类 ctrl+shift+r查找文件 MyBatis的设计主要是把对数据库的增删改查的sql语句和JavaWeb工程的POJO做绑定 1 配置sql语句的映射文件 2 在conf.xml中配置数据库连接并关联sql语句的映射文件 3 在dao中编写代码,加载con

Nodejs的Express框架使用总结

初始安装express,你也可以通过编辑器的shell安装依赖,比如vs # 创建并切换到 myapp 目录mkdir myappcd myapp# 初始化 package.json 文件npm init -y# 安装 express 到项目中npm i express 新建一个基础的接口 // 0. 加载 Expressconst express = require('expre

滚雪球学MyBatis(01):教程导读

MyBatis简介 前言 欢迎回到我们的MyBatis系列教程。在上期的内容中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架(如Hibernate)的对比。我们还探讨了MyBatis在数据访问层中的优势,并解释了为什么选择MyBatis作为我们的持久化框架。在阅读了上期的内容后,相信大家对MyBatis有了初步的了解。 在本期内容中,我们将深入探讨MyBatis的基本配

如何编写Linux PCI设备驱动器 之一

如何编写Linux PCI设备驱动器 之一 PCI寻址PCI驱动器使用的APIpci_register_driver()pci_driver结构pci_device_id结构 如何查找PCI设备存取PCI配置空间读配置空间APIs写配置空间APIswhere的常量值共用部分类型0类型1 PCI总线通过使用比ISA更高的时钟速率来实现更好的性能;它是时钟运行在 25 或 33 M

【mysql 体系结构】了解MySQL体系结构

mysql 数据库体系结构图: MySQL 由以下几部分组成: 1、Connectors:不同语言中与 SQL 的交互 show VARIABLES like '%connection%' Variable_name Valuecharacter_set_connection utf8collation_connection utf8_general_ciext

JVM体系结构与内存模型

在分析JVM体系结构之前,先看下Dalvik-JVM和Java-DVM的区别: 1.DVM基于寄存器JVM基于内存 Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。   2.字节码区别 VM字节码由.class文件组成,每个文件一个class。JVM在运行的时候为每一个类装载字节码。相反的,Dalvik程序只包含一个.dex

ARM的体系结构

1、概念: ARM体系结构是由英国ARM公司设计的一种精简指令集(RISC)架构,它以其低功耗、高性能和低成本的特点,在嵌入式系统、移动设备、服务器等多个领域得到了广泛应用。ARM体系结构主要定义了处理器的指令集、寄存器结构、内存访问方式等关键元素。 2、指令集 ARM指令集:所有指令都占用32位存储空间,代码灵活度高,简化了解码复杂度。执行ARM指令集时,程序计数器(PC)的值每次自增4。

随手摘录

那一夜,我听了一宿梵唱,不为参悟,只为寻你的一丝气息。 那一月,我转过所有经轮,不为超度,只为触摸你的指纹。 那一年,我磕长头拥抱尘埃,不为朝佛,只为贴着了你的温暖。 那一世,我翻遍十万大山,不为修来世,只为路中能与你相遇。 那一瞬,我飞升成仙,不为长生,只为佑你平安喜乐。                                                    ---《那