精华内容
下载资源
问答
  • 本次,我们主要介绍一下VMWare主要提供的三种常用的网络适配器模式,分别是NAT、桥接、仅主机。好了,接下来我们就逐一讲解一下这几个网络适配器的配置及作用。 2.仅主机模式(Host-only) 2.1 Host-Only模式概念 ...
  • 一、使用点对点信道的数据链路层 计算机网络体系结构 数据链路层是实现设备之间通信的非常重要的一层 数据链路层的作用 仅从数据链路层观察帧的流动 ...现在最常用的方法是使用适配器(即网卡)来

    一、使用点对点信道的数据链路层

    计算机网络体系结构

    在这里插入图片描述

    数据链路层是实现设备之间通信的非常重要的一层

    在这里插入图片描述
    在这里插入图片描述

    数据链路层的作用

    在这里插入图片描述

    仅从数据链路层观察帧的流动

    在这里插入图片描述

    数据链路层使用的信道

    在这里插入图片描述

    1.1.1 数据链路和帧

    • 链路(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
      一条链路只是一条通路的一个组成部分。
    • 数据链路 (data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
      • 现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
      • 一般的适配器都包括了数据链路层和物理层这两层的功能。
    • 也有人采用另外的术语。这就是把链路分为物理链路和逻辑链路。
      ①、物理链路就是上面所说的链路。
      ②、逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。
      早期的数据通信协议曾叫做通信规程 (procedure)。因此在数据链路层,规程和协议是同义语。

    使用点对点信道的数据链路层

    数据链路层传送的是帧
    在这里插入图片描述

    • 数据链路层像个数字管道
      在这里插入图片描述
      数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方。

    1.1.2 三个基本问题

    数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:

    (1)封装成帧

    • 封装成帧(framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
    • 首部和尾部的一个重要作用就是进行帧定界
      在这里插入图片描述
    1.1、用控制字符进行帧定界的方法举例
    • 当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符
    • 控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束。
      在这里插入图片描述

    (2)透明传输

    • 如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”。
      在这里插入图片描述
    2.1、解决透明传输问题
    • 解决方法:字节填充 (byte stuffing) 或字符填充 (character stuffing)。
    • 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。
    • 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
    • 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
    2.2、透明
    • 指某一个实际存在的事物看起来却好像不存在一样。
    • “在数据链路层透明传送数据”表示无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层。
    2.3、用“字节填充”法解决透明传输的问题

    在这里插入图片描述

    (3)差错控制

    在这里插入图片描述

    • 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。
    • 误码率与信噪比有很大的关系。
    • 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
    • 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。
    3.1、循环冗余检验的原理

    在这里插入图片描述

    3.2、冗余码的计算
    • 用二进制的模 2 运算进行 2n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。
    • 得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P,得出商是 Q余数是 R,余数 R 比除数 P 少 1 位,即 R 是 n 位
    • 将余数 R 作为冗余码拼接在数据 M 后面,一起发送出去。
      在这里插入图片描述
    3.3、接收端对收到的每一帧进行 CRC 检验
    • (1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受 (accept)。
    • (2) 若余数 R ≠ 0,则判定这个帧有差错,就丢弃。
    • 但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。
    • 只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
    3.4、冗余码的计算举例
    • 现在 k = 6, M = 101001。
      设 n = 3, 除数 P = 1101,
      被除数是 2nM = 101001000。
      模 2 运算的结果是:商 Q = 110101,余数 R = 001
      把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2nM + R,即:101001001,共 (k + n) 位。
    • 冗余码的计算:不进位也不借位,异或运算
      在这里插入图片描述
      P(X) = X3 + X2 + 1 = 1 * X3 + 1 * X2 + 0 * X1 + 1 * X0---->指的是1101
    3.5、帧检验序列 FCS
    • 在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
    • 循环冗余检验 CRC 和帧检验序列 FCS 并不等同。
      ①、CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
      ②、FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
    3.6、应当注意
    • 仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(accept)。
    • “无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。
    • 也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。
    • 单纯使用 CRC 差错检测技术不能实现“无差错传输”或“可靠传输”。
    • 应当明确,“无比特差错”与“无传输差错”是不同的概念。
    • 在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输
    • 要做到“无差错传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
      本章介绍的数据链路层协议都不是可靠传输的协议。

    二、点对点协议PPP

    2.1 PPP协议的特点

    • 对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。
    • PPP 协议在 1994 年就已成为互联网的正式标准
      在这里插入图片描述
    1. PPP 协议应满足的需求
    • 简单 —— 这是首要的要求
    • 封装成帧 —— 必须规定特殊的字符作为帧定界符。
    • 透明性 —— 必须保证数据传输的透明性。
    • 多种网络层协议 —— 能够在同一条物理链路上同时支持多种网络层协议。
    • 多种类型链路 —— 能够在多种类型的链路上运行。
    • 差错检测 —— 能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
    • 检测连接状态 —— 能够及时自动检测出链路是否处于正常工作状态。
    • 最大传送单元 —— 必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实 现之间的互操作性。
    • 网络层地址协商 —— 必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址。
    • 数据压缩协商 —— 必须提供一种方法来协商使用数据压缩算法
    2. PPP 协议不需要的功能
    • 纠错、流量控制、序号、多点线路、半双工或单工链路
    3. PPP 协议的组成
    • PPP 协议有三个组成部分:
      ①、一个将 IP 数据报封装到串行链路的方法。
      ②、链路控制协议 LCP (Link Control Protocol)。
      ③、网络控制协议 NCP (Network Control Protocol)

    2.2 PPP协议的帧格式

    在这里插入图片描述

    • PPP帧的首部和尾部分别为4个字段和2个字段。
    • 标志字段F = 0x7E(符号“0x”表示后面的字符是用十六进制表示。十六进制的7E的二进制表示是01111110 )。
    • 地址字段A只置为0xFF。地址字段实际上并不起作用
    • 控制字段C通常置为0x03。
    • PPP是面向字节的,所有的PPP帧的长度都是整数字节。

    透明传输问题

    • 当 PPP 用在异步传输时,就使用一种特殊的字符填充法
    • 当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充
    字符填充`
    • 将信息字段中出现的每一个0x7E字节转变成为 2 字节序列 (0x7D, 0x5E)
    • 若信息字段中出现一个0x7D的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)
    • 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。
    字符填充法

    在这里插入图片描述

    零比特填充
    • PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)。这时 PPP 协议采用零比特填充方法来实现透明传输
    • 在发送端,只要发现有 5 个连续 1,则立即填入一个 0。
    • 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
      在这里插入图片描述
    不提供使用序号和确认的可靠传输
    • PPP 协议之所以不使用序号和确认机制是出于以下的考虑:
      ①、在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理。
      ②、在因特网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的。
      ③、帧检验序列 FCS 字段可保证无差错接受。

    2.3 PPP协议的工作状态

    • 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
    • PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)
    • 这些分组及其响应选择一些 PPP 参数,并进行网络层配置NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
    • 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接最后释放的是物理层的连接
    • 可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容
      在这里插入图片描述
    展开全文
  • 计算机网络复习题

    2014-12-29 19:01:35
    3. 常用的信道复用技术哪些? 1).FDM: Frequency Division Multiplexing 频分复用(1分) 2).TDM:Time Division Multiplexing 时分复用、STDM: Statistic TDM统计时分复用(2分) 3).WDM: Wavelength Division ...
  • assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...
  • 1.9 事务顺序1.9.1 生产者/使用者模型生产者/使用者模型可能是两台请求能力的设备用来相互通信的常用方法。1 一个网络适配器开始通过网络接收压缩视频数据流,并执行一系列存储器写事务,将这些压缩视频数据流...
    e3aa63da4ae408e3640c7d5ccb07882f.gif1.9 事务顺序1.9.1 生产者/使用者模型生产者/使用者模型可能是两台有请求能力的设备用来相互通信的常用方法。1 一个网络适配器开始通过网络接收压缩的视频数据流,并执行一系列存储器写事务,将这些压缩的视频数据流存入存储器的数据缓冲区中。2 生产者将数据存入存储器之后,它就执行一次存储器写事务,在某一存储器单元中设置一个标志,表示数据已经准备好,等待处理。3 使用者定期对标志单元执行存储器读,以便查看是否有数据要处理。4 当发现生产者已设置标志时,它执行一个存储器写清除标志,然后执行一次突发存储器读事务,从存储器的数据缓冲区中读取压缩的数据。5 当使用者使用完数据后,它将完成状态写入状况单元。然后,它重新开始定期地读取标志单元,以确定何时需要处理更多的数据。6 与此同时,生产者也定期地读取状况单元,查看其他请求者是否已经完成数据处理、在生产者读取状况并发现使用者已经完成数据处理时,生产者接着执行一个存储器写来清楚状况单元。7只要生产者还有数据要处理,此过程便重复。1.9.2 真正的PCIe顺序规则真正的PCIe顺序规则可以概述为下面4条简单的规则:1. PCIe要求具有相同TC分配的事务按照强顺序通过结构。因为分配了同一TC值的所有事务映射到一个给定的VC,因此这一规则也同样适用于每个VC内的事务。2. 不同TC分配的事物之间不存在顺序关系。3. 顺序规则同样适用于所有类型的事务:存储、IO、配置和消息。4. 在有限的情况下,设置了“灵活的顺序”属性比特的事务能排在其他具有相同TC值的事务之前。这些基本规则可以保证事务总是按照软件计划的顺序完成。然而,这些规则非常保守,并且无法提供最佳的性能。在这种情况下,为了提高性能,可以应用更冒险的规则。

    1.9.3 灵活的顺序

    PCIe支持PCI-X引入的灵活的顺序机制,但PCIe引入了一些变化。PCIe环境下灵活的顺序概念允许请求者和完成者之间路径上的交换器,将刚收到的一些事务重新排在其他先前已入队的事务之前。支持生产者/使用者模型的顺序规则可能导致事务阻塞,事实上阻塞的事务与任何生产者/使用者事务序列无关。因此在某些情况下,设置了灵活的顺序属性比特的事务能重新排在其他事务之前。如果设备驱动器允许,设备就可以设置灵活的顺序比特。

    1.9.4 RO对存储器写和消息的影响

    存储器写和消息事务都被当作报告操作,两者被接收到同一报告缓冲区,两者服从相同的顺序要求。当设置了RO比特时,交换器处理这些事务的步骤如下:允许交换器将刚报告的存储器写事务重新排在之前的报告存储器写事务或消息事务之前。同样,刚报告的消息事务也可以排在之前的报告存储器写或消息事务之前。交换器也必须不修改RO比特的转发事务。允许根联合体将刚报告的写事务及时地排在早先接收的其他写事务之前。同样,在接收写请求时,要求根联合体将数据有效载荷写入系统存储器内指定的地址单元,但允许以任意地址顺序将每个字节写入存储器。

    1.9.5 RO对存储器读事务的影响

    设备发出设置了RO比特的存储器读请求时,这个请求在到达完成者的路途中可能穿过一个或多个交换器。完成者以一系列一个或多个分离的完成事务返回请求读取的数据,而且使用与请求相同的RO设置。

    1.10 中断

    1.10.1 发送中断的两种方法

    真正的PCIe中断发送机制——PCIe使用消息信号中断(MSI)消除了对边带信号的需要。消息信号中断不是PCIe消息,而仅仅是存储器写事务。与MSI有关的存储器写与其他存储器写只能通过它们的目标地址单元来区分,与MSI有关的存储器写的目标地址单元是系统专为中断发送而保留的。传统的PCI中断发送机制——这一机制必须使用为PCI总线定义的PCI兼容中断信号(INITA#、INITB#、INITC#、INITD#)的设备。传统中断设备使用这些中断线之一发出中断信号。首先声明INITx#信号请求中断服务,接下来当服务中断服务程序访问设备专用寄存器时,再取消声明INITx#信号,表示该中断正在被服务。PCIe定义了其作用相当于虚拟INITx#线的带内消息。这些消息以位于根联合体内的中断控制器为目标。

    1.10.2 消息信号中断

    消息信号中断(MSI)通过存储器写事务被发送到根联合体。MSI功能寄存器提供设备发送MSI信号需要的所有信息。该寄存器由配置软件设置,包括如下信息:目标存储器地址;要写入指定单元的数值;可以编码成数据的消息树。

    1.10.2.1 MSI功能寄存器组

    真正的PCIe功能必须在其自己的配置空间内实现单独的MSI寄存器组。PCIe规范定义了两种寄存器格式:64位存储器寻址格式;32位存储器寻址格式。

    edc1df0649f4c24047de642c5971b4b5.png

    b58197095c85d30e6615f3196a4f83b6.png

    下面介绍MSI寄存器中的每个字段。功能ID:标志MSI寄存器组的功能ID是05h。这是一个硬连线、只读的值。下一新功能寄存器的指针:寄存器组的第二个字节若不是指向下一新功能寄存器组,就是包含00h,如果这是新功能列表的结尾。它是一个硬连线、只读的值。如果是非0值,则必须是一个双字对齐的值。消息控制寄存器:

    比特

    字段名

    描述

    15:8

    保留

    只读,总为0

    7

    64位地址能力

    只读

    0=功能未实现消息地址寄存器的高32位,不能产生64位寄存器地址

    1=功能实现消息地址寄存器的高32位,能产生64位存储器地址

    6:4

    多消息允许

    读/写。系统软件读取多消息能力字段,从而确定设备请求多少消息之后,对这个字段编程,赋一个3位的值,表明分配给设备的消息实际数目。所分配的消息数目可以等于或小于实际请求的数目。这个字段的状态在复位时为000b

    3:1

    多消息能力

    只读。系统软件读取这个字段确定设备分配了多少消息

    0

    MSI允许

    读/写。复位后的状态为0,表明设备的MSI功能是禁用的。0=禁止功能使用MSI,必须使用INTx消息发送中断;1=允许使用MSI请求服务,禁止使用其中断引脚

    消息地址寄存器:低两位硬连线到0。消息控制寄存器的bit7是1时,高32位才出现。消息数据寄存器:系统软件通过将基消息数据写入该16位读/写寄存器,从而分配设备一个基消息数据模式。当设备必须产生中断请求时,它将32位值写入消息地址寄存器指定的寄存器地址。写入的数据具有如下格式:高16位总为0;低16位由消息数据寄存器提供。如果分配给设备的消息多于一个,则设备修改消息数据寄存器的低位,为它希望报告给驱动程序的事件形成适当的消息。

    1.10.2.2 MSI配置基础

    软件配置PCIe设备的MSI中断采取的步骤如下:1. 启动时,配置软件扫描PCI总线并发现设备(执行配置读,读取有效的供应商ID)。在发现PCIe功能时,配置软件读取功能列表指针(Capabilities List Pointer),获得寄存器链中第一个功能寄存器的地址。2. 然后软件搜索功能寄存器组,知道发现MSI功能寄存器组(功能ID位05h)。3. 软件将一个双字对齐的存储器地址分配给设备的消息地址寄存器。这是发送中断请求时使用的存储器写的目的地址。4. 软件检查设备消息控制寄存器的多消息能力字段,以确定设备将分配多少事件特定的消息给它。5. 然后软件向设备分配等于或小于设备请求设备数的消息。最少分配一条消息给设备。6. 软件将基消息数据模式写入设备的消息数据寄存器。7. 最后,软件设置设备的消息控制寄存器中的MSI允许比特,从而允许它使用MSI存储器写来生成中断。

    68c9acf19f48ce43e7f6bce70925fee5.png

    当设备必须生成中断请求时,它将消息数据寄存器内容写入消息地址寄存器所指定的存储器格式。下图显示了存储器写事务头和数据字段中的内容。关键点包括:格式字段必须是11b,表明是带数据的4DW头,传统端点的格式字段可以是10b。头属性比特(不侦测和灵活的顺序)必须是零。长度字段必须是01h,表明最大1DW的数据有效载荷。第一个BE字段必须是0011b,表明有效数据在低16位中。最后一个BE字段必须是0000b,表明是单个DW的事务。头中的地址字段直接来自于MSI功能寄存器的地址字段。

    b7428f797e59b862127f80499a4ea579.png

    如果系统软件向设备分配多个消息,就允许它修改所分配的消息数据值的低位,为每个设备特定的事件类型发送不同的消息,通过设备驱动程序要求服务。例如,4个消息已分配给设备,数据值0500h以复制给设备的消息数据寄存器,存储器地址0A000000h已写入设备的消息地址寄存器。当4个不同的设备特定事件之一发生时,设备生成一个请求,通过执行双字写将数据值00000500h、00000501h、00000502h或00000503h写入存储器地址0A000000h。

    1.10.3 传统的PCI中断发送机制

    1.10.3.1 设备的INTx#引脚

    每个物理PCI组件可以实现最多4个INTx#信号(INITA#、INITB#、INITC#、INITD#)。由于PCI设备最多能支持8个功能,如果实现最多8个功能并且所有功能都要求中断,则必须共享INTx#信号。不允许一个功能使用多于一个的INTx#信号。每一PCI功能通过标准配置头来表明支持INTx#信号。下图展示了只读中断引脚寄存器,它含有配置软件用于确定是佛支持INTx#信号,并且如果支持,这个功能使用哪个INTx#信号所必需的信息。

    26494634b6913e1d583aa188b6d68af7.png

    1.10.3.2 中断路由

    需要系统设计者确定来自设备的INTx#引脚的路由。可以用多种方式路由每台设备使用的INTx#信号,以便每个INTx#引脚最终到达中断控制器的一个输入。下例中,所有PCI INTx信号被路由到4个输入之一。所有路由到给定输入的INTx信号将定向到中断控制器的特定输入,因此每个路由到共同输入端的INTx也将具有平台软件分配给它的同一种中断线编号。IRQ15有3个来自不同设备的PCI INTx输入——INTB#、INTA#、INTA#。因此,使用这些INTx#线的功能将共享IRQ15以及与之相关的中断向量。根据与每一功能相关的INTx#引脚的路由情况,配置软件报告中断线号。当来自这一功能的中断出现时,这个值最终告诉功能的设备驱动程序报告哪个中断向量。因此,当这个功能产生中断时,CPU将收到与中断线寄存器指定的IRQ有关的向量号。CPU使用这个向量号索引中断服务表,以读取该功能的相关设备驱动程序的中断服务入口指针。传递该信息所使用的方法是操作系统特有的。

    9724db302fd698a8e234ee802cc71cca.png

    1.10.3.3 INTx#信令

    当设备发送中断信号时,它也在设备专用寄存器中设置某个比特来表明有一个中断等待处理。可将该寄存器映射在存储器或I/O地址空间中,由设备专用软件读取,以便验证有一个中断待完成。当此比特被清除时,取消声明INTx信号。设备也必须设置位于配置寄存器的中断状况比特。系统软件可以读取这一比特,以便得知目前是否有一个中断待完成。禁用中断:PCI2.3规范在配置命令寄存器中增加了禁用中断比特(比特10),如下图所示。复位时,该比特被清除,允许产生INTx信号。软件可以设置该比特,从而禁止生成INTx信号。

    e213d53520e53f7ca0aa061e28c4066a.png

    中断状况:PCI2.3规范在配置状态寄存器中增加了中断状态比特,如下图所示。当中断待处理时,功能必须设置该状况比特。另外,如果配置命令寄存器中的禁用中断比特被清除(即允许中断),则仅在中断状况比特置1后,才能声明该功能的INTx#信号。该比特不受禁用中断比特状态的影响。同时是只读的。

    daaf356a9c9f98160d46dbab2c3620d4.png

    1.10.3.4 INTx消息的格式

    86ae8e17cf3c2fa0bb0f3b91a7b4af3b.png

    d3a4247123b494c4c92e24880df5bc88.png

    设备可以同时支持两种中断,但任何给定的时刻只允许使用一种机制。设置MSI允许比特可以禁止设备使用INTx消息,并允许发送MSI。

    a94d315aaea2c5bef9a4d5bb3ae1de7d.png

    展开全文
  • 生产者/使用者模型可能是两台请求能力的设备用来相互通信的常用方法。 1 一个网络适配器开始通过网络接收压缩视频数据流,并执行一系列存储器写事务,将这些压缩视频数据流存入存储器数据缓冲区中。 2 ...

    1.9 事务顺序

    1.9.1 生产者/使用者模型

    生产者/使用者模型可能是两台有请求能力的设备用来相互通信的常用方法。

    1 一个网络适配器开始通过网络接收压缩的视频数据流,并执行一系列存储器写事务,将这些压缩的视频数据流存入存储器的数据缓冲区中。

    2 生产者将数据存入存储器之后,它就执行一次存储器写事务,在某一存储器单元中设置一个标志,表示数据已经准备好,等待处理。

    3 使用者定期对标志单元执行存储器读,以便查看是否有数据要处理。

    4 当发现生产者已设置标志时,它执行一个存储器写清除标志,然后执行一次突发存储器读事务,从存储器的数据缓冲区中读取压缩的数据。

    5 当使用者使用完数据后,它将完成状态写入状况单元。然后,它重新开始定期地读取标志单元,以确定何时需要处理更多的数据。

    6 与此同时,生产者也定期地读取状况单元,查看其他请求者是否已经完成数据处理、在生产者读取状况并发现使用者已经完成数据处理时,生产者接着执行一个存储器写来清楚状况单元。

    7只要生产者还有数据要处理,此过程便重复。

    1.9.2 真正的PCIe顺序规则

    真正的PCIe顺序规则可以概述为下面4条简单的规则:

    1. PCIe要求具有相同TC分配的事务按照强顺序通过结构。因为分配了同一TC值的所有事务映射到一个给定的VC,因此这一规则也同样适用于每个VC内的事务。

    2. 不同TC分配的事物之间不存在顺序关系。

    3. 顺序规则同样适用于所有类型的事务:存储、IO、配置和消息。

    4. 在有限的情况下,设置了“灵活的顺序”属性比特的事务能排在其他具有相同TC值的事务之前。

    这些基本规则可以保证事务总是按照软件计划的顺序完成。然而,这些规则非常保守,并且无法提供最佳的性能。在这种情况下,为了提高性能,可以应用更冒险的规则。

    1.9.3 灵活的顺序

    PCIe支持PCI-X引入的灵活的顺序机制,但PCIe引入了一些变化。PCIe环境下灵活的顺序概念允许请求者和完成者之间路径上的交换器,将刚收到的一些事务重新排在其他先前已入队的事务之前。

    支持生产者/使用者模型的顺序规则可能导致事务阻塞,事实上阻塞的事务与任何生产者/使用者事务序列无关。因此在某些情况下,设置了灵活的顺序属性比特的事务能重新排在其他事务之前。

    如果设备驱动器允许,设备就可以设置灵活的顺序比特。

    1.9.4 RO对存储器写和消息的影响

    存储器写和消息事务都被当作报告操作,两者被接收到同一报告缓冲区,两者服从相同的顺序要求。当设置了RO比特时,交换器处理这些事务的步骤如下:

    允许交换器将刚报告的存储器写事务重新排在之前的报告存储器写事务或消息事务之前。同样,刚报告的消息事务也可以排在之前的报告存储器写或消息事务之前。交换器也必须不修改RO比特的转发事务。

    允许根联合体将刚报告的写事务及时地排在早先接收的其他写事务之前。同样,在接收写请求时,要求根联合体将数据有效载荷写入系统存储器内指定的地址单元,但允许以任意地址顺序将每个字节写入存储器。

    1.9.5 RO对存储器读事务的影响

    设备发出设置了RO比特的存储器读请求时,这个请求在到达完成者的路途中可能穿过一个或多个交换器。完成者以一系列一个或多个分离的完成事务返回请求读取的数据,而且使用与请求相同的RO设置。

    1.10 中断

    1.10.1 发送中断的两种方法

    真正的PCIe中断发送机制——PCIe使用消息信号中断(MSI)消除了对边带信号的需要。消息信号中断不是PCIe消息,而仅仅是存储器写事务。与MSI有关的存储器写与其他存储器写只能通过它们的目标地址单元来区分,与MSI有关的存储器写的目标地址单元时系统专为中断发送而保留的。

    传统的PCI中断发送机制——这一机制必须使用为PCI总线定义的PCI兼容中断信号(INITA#、INITB#、INITC#、INITD#)的设备。传统中断设备使用这些中断线之一发出中断信号。首先声明INITx#信号请求中断服务,接下来当服务中断服务程序访问设备专用寄存器时,再取消声明INITx#信号,表示该中断正在被服务。PCIe定义了其作用相当于虚拟INITx#线的带内消息。这些消息以位于根联合体内的中断控制器为目标。

    1.10.2 消息信号中断

    消息信号中断(MSI)通过存储器写事务被发送到根联合体。MSI功能寄存器提供设备发送MSI信号需要的所有信息。该寄存器由配置软件设置,包括如下信息:

    目标存储器地址;

    要写入指定单元的数值;

    可以编码成数据的消息树。

    1.10.2.1 MSI功能寄存器组

    真正的PCIe功能必须在其自己的配置空间内实现单独的MSI寄存器组。PCIe规范定义了两种寄存器格式:

    64位存储器寻址格式;

    32位存储器寻址格式。

     

     

    下面介绍MSI寄存器中的每个字段。

    功能ID:标志MSI寄存器组的功能ID是05h。这是一个硬连线、只读的值。

    下一新功能寄存器的指针:寄存器组的第二个字节若不是指向下一新功能寄存器组,就是包含00h,如果这是新功能列表的结尾。它是一个硬连线、只读的值。如果是非0值,则必须是一个双字对齐的值。

    消息控制寄存器:

    比特

    字段名

    描述

    15:8

    保留

    只读,总为0

    7

    64位地址能力

    只读

    0=功能未实现消息地址寄存器的高32位,不能产生64位寄存器地址

    1=功能实现消息地址寄存器的高32位,能产生64位存储器地址

    6:4

    多消息允许

    读/写。系统软件读取多消息能力字段,从而确定设备请求多少消息之后,对这个字段编程,赋一个3位的值,表明分配给设备的消息实际数目。所分配的消息数目可以等于或小于实际请求的数目。这个字段的状态在复位时为000b

    3:1

    多消息能力

    只读。系统软件读取这个字段确定设备分配了多少消息

    0

    MSI允许

    读/写。复位后的状态为0,表明设备的MSI功能是禁用的。0=禁止功能使用MSI,必须使用INTx消息发送中断;1=允许使用MSI请求服务,禁止使用其中断引脚

    消息地址寄存器:低两位硬连线到0。消息控制寄存器的bit7是1时,高32位才出现。

    消息数据寄存器:系统软件通过将基消息数据写入该16位读/写寄存器,从而分配设备一个基消息数据模式。当设备必须产生中断请求时,它将32位值写入消息地址寄存器指定的寄存器地址。写入的数据具有如下格式:

    高16位总为0;

    低16位由消息数据寄存器提供。如果分配给设备的消息多于一个,则设备修改消息数据寄存器的低位,为它希望报告给驱动程序的事件形成适当的消息。

    1.10.2.2 MSI配置基础

    软件配置PCIe设备的MSI中断采取的步骤如下:

    1. 启动时,配置软件扫描PCI总线并发现设备(执行配置读,读取有效的供应商ID)。在发现PCIe功能时,配置软件读取功能列表指针(Capabilities List Pointer),获得寄存器链中第一个功能寄存器的地址。

    2. 然后软件搜索功能寄存器组,知道发现MSI功能寄存器组(功能ID位05h)。

    3. 软件将一个双字对齐的存储器地址分配给设备的消息地址寄存器。这是发送中断请求时使用的存储器写的目的地址。

    4. 软件检查设备消息控制寄存器的多消息能力字段,以确定设备将分配多少事件特定的消息给它。

    5. 然后软件向设备分配等于或小于设备请求设备数的消息。最少分配一条消息给设备。

    6. 软件将基消息数据模式写入设备的消息数据寄存器。

    7. 最后,软件设置设备的消息控制寄存器中的MSI允许比特,从而允许它使用MSI存储器写来生成中断。

     

    当设备必须生成中断请求时,它将消息数据寄存器内容写入消息地址寄存器所指定的存储器格式。下图显示了存储器写事务头和数据字段中的内容。关键点包括:

    格式字段必须是11b,表明是带数据的4DW头,传统端点的格式字段可以是10b。

    头属性比特(不侦测和灵活的顺序)必须是零。

    长度字段必须是01h,表明最大1DW的数据有效载荷。

    第一个BE字段必须是0011b,表明有效数据在低16位中。

    最后一个BE字段必须是0000b,表明是单个DW的事务。

    头中的地址字段直接来自于MSI功能寄存器的地址字段。

     

    如果系统软件向设备分配多个消息,就允许它修改所分配的消息数据值的低位,为每个设备特定的事件类型发送不同的消息,通过设备驱动程序要求服务。

    例如,4个消息已分配给设备,数据值0500h以复制给设备的消息数据寄存器,存储器地址0A000000h已写入设备的消息地址寄存器。当4个不同的设备特定事件之一发生时,设备生成一个请求,通过执行双字写将数据值00000500h、00000501h、00000502h或00000503h写入存储器地址0A000000h。

    1.10.3 传统的PCI中断发送机制

    1.10.3.1 设备的INTx#引脚

    每个物理PCI组件可以实现最多4个INTx#信号(INITA#、INITB#、INITC#、INITD#)。由于PCI设备最多能支持8个功能,如果实现最多8个功能并且所有功能都要求中断,则必须共享INTx#信号。不允许一个功能使用多于一个的INTx#信号。

    每一PCI功能通过标准配置头来表明支持INTx#信号。下图展示了只读中断引脚寄存器,它含有配置软件用于确定是佛支持INTx#信号,并且如果支持,这个功能使用哪个INTx#信号所必需的信息。

     

    1.10.3.2 中断路由

    需要系统设计者确定来自设备的INTx#引脚的路由。可以用多种方式路由每台设备使用的INTx#信号,以便每个INTx#引脚最终到达中断控制器的一个输入。下例中,所有PCI INTx信号被路由到4个输入之一。所有路由到给定输入的INTx信号将定向到中断控制器的特定输入,因此每个路由到共同输入端的INTx也将具有平台软件分配给它的同一种中断线编号。IRQ15有3个来自不同设备的PCI INTx输入——INTB#、INTA#、INTA#。因此,使用这些INTx#线的功能将共享IRQ15以及与之相关的中断向量。

    根据与每一功能相关的INTx#引脚的路由情况,配置软件报告中断线号。当来自这一功能的中断出现时,这个值最终告诉功能的设备驱动程序报告哪个中断向量。因此,当这个功能产生中断时,CPU将收到与中断线寄存器指定的IRQ有关的向量号。CPU使用这个向量号索引中断服务表,以读取该功能的相关设备驱动程序的中断服务入口指针。传递该信息所使用的方法是操作系统特有的。

     

    1.10.3.3 INTx#信令

    当设备发送中断信号时,它也在设备专用寄存器中设置某个比特来表明有一个中断等待处理。可将该寄存器映射在存储器或I/O地址空间中,由设备专用软件读取,以便验证有一个中断待完成。当此比特被清除时,取消声明INTx信号。

    设备也必须设置位于配置寄存器的中断状况比特。系统软件可以读取这一比特,以便得知目前是否有一个中断待完成。

    禁用中断:PCI2.3规范在配置命令寄存器中增加了禁用中断比特(比特10),如下图所示。复位时,该比特被清除,允许产生INTx信号。软件可以设置该比特,从而禁止生成INTx信号。

     

    中断状况:PCI2.3规范在配置状态寄存器中增加了中断状态比特,如下图所示。当中断待处理时,功能必须设置该状况比特。另外,如果配置命令寄存器中的禁用中断比特被清除(即允许中断),则仅在中断状况比特置1后,才能声明该功能的INTx#信号。该比特不受禁用中断比特状态的影响。同时是只读的。

     

    1.10.3.4 INTx消息的格式

     

     

    设备可以同时支持两种中断,但任何给定的时刻只允许使用一种机制。设置MSI允许比特可以禁止设备使用INTx消息,并允许发送MSI。

     

    展开全文
  • 2.4.2 帮助中有的几类函数 26 2.4.3 帮助中没有函数 28 2.5 Windows驱动开发模型 29 2.6 WDK编程中特殊点 30 2.6.1 内核编程主要调用源 30 2.6.2 函数多线程安全性 30 2.6.3 代码中断级 32 2.6.4...
  • 2.4.2 帮助中有的几类函数 26 2.4.3 帮助中没有函数 28 2.5 Windows驱动开发模型 29 2.6 WDK编程中特殊点 30 2.6.1 内核编程主要调用源 30 2.6.2 函数多线程安全性 30 2.6.3 代码中断级 32 2.6.4...
  • visual C++_Turbo C串口通信编程实践

    热门讨论 2010-07-30 09:14:24
    11.3.3 RS-422与RS-485的网络安装注意要点 11.3.4 RS-232、RS422、RS485电气参数对比 11.4 串口调试注意事项 11.5 常用数据校验法 11.5.1奇偶校验 11.5.2 循环冗余码校验 11.6 串口连接和TCP/IP连接对比...
  • 会计理论考试题

    2012-03-07 21:04:40
    10.计算机的常用输出设备有打印机和显示器。(Y ) 11.微机中内存储器指就是只读存储器(ROM)。( N ) 12.常见形码汉字输入技术有全拼码和双拼码。( N ) 13.微机键盘是一种分离式智能键盘,通过电缆与主机...
  • when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。 dateutil:Python 标准包 datetime 的扩展。 moment:一个处理日期/时间的库,灵感来自 Moment.js。 pytz:支持跨平台时区计算,并将 tz ...
  • X-Scan v3.1

    2018-10-22 08:43:03
    网络适配器” - 选择适当的网络适配器以便WinPCap驱动过滤相应数据报,否则可能会漏报由WinPCap驱动接收数据NASL脚本检测结果,也会影响采用NMAP方法识别目标操作系统结果。对于拨号用户,应当选择“\...
  • X-Scan

    千次下载 热门讨论 2008-04-04 15:19:43
    <br> “网络设置”页: “网络适配器” - 选择适当的网络适配器以便WinPCap驱动过滤相应数据报,否则可能会漏报由WinPCap驱动接收数据NASL脚本检测结果,也会影响采用NMAP方法识别目标操作系统结果...
  • //如何查看小型机适配器卡及硬盘微码级别microcode level lscfg -vl device_name //查询SSA卡微码级别 # lscfg -vl ssa0 //ssa0是此SSA卡的设备名,输出结果中ROS level及ID即是微码级别(microcode level) //...
  • 精通Qt4编程(第二版)源代码

    热门讨论 2014-01-19 13:07:18
    当我们准备编写自己应用软件时,却发现图书市场上没有一本关于Qt 4书籍,仅有的只是一些关于Qt 3资料。由于Qt 3到Qt 4变化很大,甚至源代码都不兼容,所以这些资料参考价值并不是太大。于是,我们通过阅读...
  • java 面试题 总结

    2009-09-16 08:45:34
    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...
  • 精通qt4编程(源代码)

    热门讨论 2010-03-17 19:10:40
    \ 第9章 网络 李立夏介绍了Qt的网络处理,包括编写常见的FTP、HTTP、UDP和TCP程序,以及访问底层网络接口信息和扩展Qt网络模块功能的方法。 227 \ 第10章 多线程 李立夏介绍了Qt的多线程处理,包括两方面内容:传统...
  • isAppRoot : 判断 App 是否 root 权限 isAppDebug : 判断 App 是否是 Debug 版本 isAppSystem : 判断 App 是否是系统应用 isAppForeground : 判断 App 是否处于前台 launchApp : 打开 App relaunchApp : 重启 App ...
  • asp.net知识库

    2015-06-18 08:45:45
    常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18...
  •  《Visual C++开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以...
  •  《Visual C++开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以...
  • netstat -n 查看端口的网络连接情况,常用netstat -an netstat -v 查看正在进行的工作 netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况 netstat -s 查看正在使用的所有协议使用情况 nbtstat -A ip ...
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    特别说明:该版本是目前网络上最全版本:修正了268-367页缺页问题。 Visual C++ 2008入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2008 原出版社: Wrox 作者: (美)Ivor Horton 译者: 姜...
  • 特别说明:该版本是目前网络上最全版本:修正了268-367页缺页问题。 该资料是《Visual C++ 2008入门经典》源代码及课后练习答案 对应书籍资料见: Visual C++ 2008入门经典 基本信息 原书名: Ivor Horton...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

常用的网络设备有网络适配器