IEEE 802.1 Qbv 协议的详细总结(流量调度的增强EST)

2023-10-30 00:20

本文主要是介绍IEEE 802.1 Qbv 协议的详细总结(流量调度的增强EST),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 1 流量调度的增强(Enhancements for scheduled traffic)
    • 2 流量调度状态机(Scheduled traffic state machines)
      • 2.1 Cycle Timer state machine(循环计时器状态机)
        • 2.1.1 SetCycleStartTime()(设置循环开始时间)
      • 2.2 List Execute state machine(列表执行状态机)
        • 2.2.1 ExecuteOperation()(执行操作)
        • 2.2.2 SetGateStates()(设置门状态)
      • 2.3 List Config state machine(配置状态机)
        • 2.3.1 SetConfigChangeTime()(设置配置更改时间)
      • 2.4 State machine variables(状态机变量)
    • 3 流量调度的管理对象
      • 3.1 门参数表
        • 3.1.1 The queueMaxSDUTable structure and data types(最大服务数据单元表的结构和数据类型)
        • 3.1.2 The gate control list structure and data types(门控列表的结构和数据类型)
        • 3.1.3 RationalNumber(有理数)
        • 3.1.4 PTPtime
        • 3.1.5 SupportedListMax(支持的列表最大值)
    • 4 附件E:状态图中使用的符号规范

1 流量调度的增强(Enhancements for scheduled traffic)

1、 gate-close事件:当与队列相关的传输门从Open状态转换到Closed状态时发生的事件,该事件断开了转发进程的传输选择功能与队列的连接,阻止其从该队列中选择帧。

2、 gate- Open事件:当与队列相关的传输门从Closed状态转换到Open状态时发生的事件,连接转发进程的传输选择功能到队列,并允许它从队列中选择帧。

3、 门控周期:门控列表中一系列操作重复的一段时间。

4、 传输门:连接或断开转发过程的传输选择功能从队列,允许或阻止它选择帧从该队列。门有两种状态,开和关。

网桥或终端站可以支持增强功能,允许相对于已知的时间尺度调度来自每个队列的传输。为了实现这一点,传输门与每个队列相关联;传输门的状态决定了是否可以选择排队帧进行传输(如图8-12所示)。对于给定的队列,传输门可以处于以下两种状态之一:

(a)Open:根据与队列相关联的传输选择算法的定义,选择队列中的帧进行传输。

(b)Closed:传输时未选择队列帧。

在这里插入图片描述
与每个端口相关联的门控制列表包含一个有序的门操作列表。每个门操作更改与端口的每个流量类队列相关联的门的传输门状态。在不支持流量调度增强的实现中,假定所有门都永久处于打开状态。表8-6标识了gate门操作类型、它们的参数以及执行这些操作的结果。在本篇中指定了控制门控制列表执行的状态机,以及它们的变量和过程。

除了传输选择算法进行的其他检查外,如果传输门处于关闭状态,或者在与该队列相关的下一个门关闭事件之前,没有足够的时间来传输该帧的全部,则流量类队列上的帧不能用于传输。当队列的gate-close事件发生时,如果检测到来自给定队列的帧仍在由MAC传输,则按流量分类的计数器 TransmissionOverrun (3.1.1)会增加。

表8-6:

操作名称参数作用
SetGateStates(设置门状态)GateState(门状态),TimeInterval(时间间隔)GateState参数表示每个端口队列的open或closed值。门立即被设置为GateState参数中表示的状态。这将导致一些队列发生gate-close事件或gate-open事件,其中新的GateState表示相对于gate当前状态的变化。在完成门控制列表中的上一个门操作之后,TimeInterval (2.4.16)过去之后,控制将传递到下一个门操作。

Note 1 :假设实现知道在一个给定端口上传输一个帧所涉及的传输开销,因此可以确定一个帧的传输将花费多长时间。然而,有可能不知道帧的大小,因此需要的时间长度为未知的传输;例如,哪里支持直通,或者哪里支持帧抢占,并且没有办法提前告诉一个给定的帧在传输完成之前会被抢占多少次。有关流量序次的安排,最好能配合预期的传送模式,而不会超过有关流量级别的下一次关门时间。

Note 2 :假设实现可以从一系列门事件中确定下一个门关闭事件发生的时间。在正常情况下,这可以通过检查OperControlList(2.4.19)和相关变量中的gate操作序列来实现。但是,当将要安装一个新的配置时,为了确定下一次门关闭事件的时间,有必要检查OperControlList和AdminControlList(2.4.2)和相关变量的内容,因为新配置的门关闭周期可能在大小和分阶段上与旧周期不同。

每个流量类队列queueMaxSDU参数定义每个队列的最大业务数据单元大小;超过queueMaxSDU的帧被丢弃。每个队列的queueMaxSDU的值可以通过管理进行配置(12.29)。它的默认值是LAN上使用的MAC程序所支持的最大SDU大小,该帧被中继到该LAN上。

Note 3 :PFC(prior frame control基于优先级的流量控制)的使用很可能会干扰流量调度,因为PFC是由更高层实体传输的(参见条款36)。

为了使端站能够支持帧的预定传输,端站的行为必须与它所连接的网桥所采用的转发和排队机制的操作相兼容。实际上,对终端站的要求是,它的传输选择操作时,就好像它是一个支持预定流量的桥的单一出站端口。对接收预定交通的终端站支持没有特别的要求;仅用于传输预定流量。

2 流量调度状态机(Scheduled traffic state machines)

端口的门控列表(1.4)中的门操作的执行是由三个状态机控制的。

a) The Cycle Timer state machine(循环计时器状态机)
b) The List Execute state machine(列表执行状态机)
c) The List Config state machine(列表配置状态机)

每个状态机的一个实例将为每个支持流量调度增强的端口实例化。

Cycle Timer state machine 启动门控制列表的执行,并确保维护为端口定义的门控周期时间。

List Execute state machine 依次执行门控制列表中的门操作,并在每个操作之间建立适当的时间延迟。

List Config state machine 管理更新当前活动计划的过程,在执行更新过程时中断其他两个状态机的操作,并在安装了新的计划后重新启动它们。

状态机表示法见附件E。

在图8-13中可以看到状态机的概览,显示它们的关系和它们使用的变量。

在这里插入图片描述

2.1 Cycle Timer state machine(循环计时器状态机)

循环计时器状态机应实现图8-14中的状态图以及如下、(2.1.1) 中相应的定义所规定的功能。

在这里插入图片描述

2.1.1 SetCycleStartTime()(设置循环开始时间)

SetCycleStartTime()过程确定下一个门控制列表执行周期开始的时间。这个过程根据CurrentTime(2.4.10)、OperBaseTime(2.4.18)、OperCycleTime(2.4.20)、OperCycleTimeExtension(2.4.21)、ConfigChangeTime(2.4.9)和ConfigPending(2.4.8)的值,将CycleStartTime(2.4.12)变量设置为开始时间。

  1. If:
    ConfigPending = FALSE, and
    OperBaseTime >= CurrentTime
    Then:
    CycleStartTime = OperBaseTime.

    (OperBaseTime指定当前时间或未来时间)

  2. If:
    ConfigPending = FALSE, and
    OperBaseTime < CurrentTime
    Then:
    CycleStartTime = (OperBaseTime + N*OperCycleTime)
    where N is the smallest integer for which the relation:
    CycleStartTime >= CurrentTime
    would be TRUE.

    (OperBaseTime指定过去的时间)

  3. If:
    ConfigPending = TRUE, and
    ConfigChangeTime > (CurrentTime + OperCycleTime + OperCycleTimeExtension)
    Then:
    CycleStartTime = (OperBaseTime + N*OperCycleTime)
    where N is the smallest integer for which the relation:
    CycleStartTime >= CurrentTime
    would be TRUE.

  4. If:
    ConfigPending = TRUE, and
    ConfigChangeTime <= (CurrentTime + OperCycleTime + OperCycleTimeExtension)
    Then:
    CycleStartTime = ConfigChangeTime

Note 1 :由于PTP时间尺度的起源是1970年1月1日00:00:00 TAI,因此CycleStartTime将大于1.3 x 10^18 ns。如果在计算N时没有保持足够的精度,那么CycleStartTime将不是OperCycleTime的整数倍,这可能会导致不同桥上端口的周期不对齐。

Note 2 :如果所有网桥和端站的AdminBaseTime设置为过去的相同时间,则OperBaseTime总是过去的时间,并且所有周期都开始同步。在过去,当您可以在启动使用调度的应用程序之前启动调度时,使用AdminBaseTime是合适的。在未来使用AdminBaseTime的目的是在未来的某个时间将当前在所有桥和端站运行的调度更改为一个新的调度。在将来必须在不停止应用程序的情况下更改调度时,使用AdminBaseTime是合适的。

2.2 List Execute state machine(列表执行状态机)

List Execute状态机应实现图8-15中的状态图和 2.2.1、2.2.2、2.4中的相关定义所指定的功能。

在这里插入图片描述

2.2.1 ExecuteOperation()(执行操作)

ExecuteOperation()过程负责从OperControlList获取下一个gate操作,以及与之相关的任何参数,并根据已获取的gate操作执行操作。ListPointer变量的值(2.4.15)被用作OperControlList的索引。根据操作名称,操作过程如下所示:

  1. 如果操作名为SetGateStates,那么与操作相关的GateState参数值被赋给OperGateStates变量(2.4.22),与操作相关的TimeInterval参数值被赋给TimeInterval变量(2.4.24)。如果与操作关联的TimeInterval值为0,则将TimeInterval变量赋值为1。

  2. 如果无法识别操作名,则OperControlListLength变量 (2.4.23) 赋值给ListPointer变量 (2.4.15),而TimeInterval变量(2.4.24)被赋值为0。这是为了结束执行循环(EXECUTE_CYCLE)。

  3. 如果没有与操作相关的TimeInterval参数,则将TimeInterval变量赋值为0。此情况存在GateState参数值。

2.2.2 SetGateStates()(设置门状态)

这个过程设置每个端口队列的门状态,由OperGateStates变量的值指定(2.4.22)。

说明:如果OperGateStates的值与之前的门状态不同,SetGateStates()过程会导致门打开和/或门关闭事件发生。有可能会出现的情况是,在给定的队列上,gate-open 事件和随后的 gate-closed 事件之间的最大时间间隔小于 queueMaxSDU 的值。在这种情况下,太长而无法传输但比 queueMaxSDU 短的帧可以在该队列上排队。这样的帧永远不会被传输,而是最终会被丢弃,因为它们超过了最大帧生存期。还应该注意的是,桥接器允许丢弃永远不会被传输的帧。

2.3 List Config state machine(配置状态机)

List Config状态机应实现图8-16中的状态图和2.3.1、2.4中的相关定义所指定的功能。

在这里插入图片描述

2.3.1 SetConfigChangeTime()(设置配置更改时间)

SetConfigChangeTime()过程确定将周期配置变量的管理值复制到操作变量的时间。这个过程根据AdminBaseTime(2.4.1)和AdminCycleTime(2.4.3)的值将ConfigChangeTime(2.4.9)变量设置为开始时间,其规则如下:

  1. If:
    AdminBaseTime >= CurrentTime (2.4.10)
    Then:
    ConfigChangeTime = AdminBaseTime

    (AdminBaseTime指定当前时间或未来时间)

  2. If:
    (AdminBaseTime < CurrentTime) and (GateEnabled = FALSE)
    Then:
    ConfigChangeTime = (AdminBaseTime + N*AdminCycleTime)
    where N is the smallest integer for which the relation
    ConfigChangeTime >= CurrentTime
    would be TRUE.

    (AdminBaseTime指定过去的时间,并停止当前计划)

  3. If:
    (AdminBaseTime < CurrentTime) and (GateEnabled = TRUE)
    Then:
    Increment ConfigChangeError counter (12.29.1)
    ConfigChangeTime = (AdminBaseTime + N*AdminCycleTime)
    where N is the smallest integer for which the relation
    ConfigChangeTime >= CurrentTime
    would be TRUE.

    (AdminBaseTime指定过去的时间,当前计划正在运行)

2.4 State machine variables(状态机变量)

变量作用/介绍
1、AdminBaseTime(管理员基准时间)基本时间的管理值,表示为IEEE 1588精确时间协议(PTP)时间尺度(参见IEEE Std 802.1AS-2011的8.2)。该值可以由管理层更改,List Config状态机(2.3)使用该值来设置OperBaseTime(2.4.18)的值。说明: time在PTP时间尺度中表示为从1970年1月1日00:00:00 TAI以来经过的秒数、纳秒数和分数纳秒数
2、AdminControlList(管理员控制列表)端口的门控制列表的管理版本。该值可以由管理层更改,List Config状态机(2.3)使用该值来设置OperControlList(2.4.19)的值。
3、AdminCycleTime(管理员周期时间)端口的控制周期的管理值。该值可以由管理层更改,List Config状态机(2.3)使用该值来设置OperCycleTime(2.4.20)的值。AdminCycleTime变量是有理数秒,由整数分子和整数分母定义。
4、AdminCycleTimeExtension(管理员周期时间扩展)一个纳秒的整数,定义在安装新的周期配置时允许扩展端口的门控周期的最大时间。这个管理值可以由管理层更改,List Config状态机(2.3)使用它来设置OperCycleTimeExtension(2.4.21)的值。
5、AdminGateStates(管理员网关状态)与端口的每个队列相关联的门的初始状态是由List Execute状态机(2.2)设置的,并由AdminGateStates变量的值决定。AdminGateStates的默认值为所有队列打开。“AdminGateStates”的值可以由管理层修改。
6、AdminControlListLength(管理员控制列表长度)该值可以由管理层更改,List Config状态机(2.3)使用该值来设置OperControlListLength(2.4.23)的值。
7、ConfigChange(配置更改)一个布尔变量,它充当List Config状态机(2.3)的启动信号,表示Port的管理变量值已经准备好复制到相应的操作变量中。该变量由管理层设置为TRUE,由List Config状态机设置为FALSE。
8、ConfigPending(配置挂起)一个布尔变量,由List Config状态机(2.3)设置为TRUE,表示有一个新的周期配置等待安装。当List Config状态机安装了新配置时,该变量被设置为FALSE。SetCycleStartTime()过程(2.1.1)使用该变量来控制紧跟在使用新配置值的第一个周期之前的周期长度。该值可以由管理层读取,如协议12.29.1中所述。
9、ConfigChangeTime(配置时间更改)决定周期的管理变量将被复制到相应的操作变量的时间,表示为PTP时间尺度。这个变量的值是由List Config状态机(2.3)中的SetConfigChangeTime()过程(2.3.1)设置的。
10、CurrentTime(当前时间)本地系统维护的当前时间,表示为PTP时间尺度(见IEEE Std 802.1AS-2011 8.2)。**注1:**其他时间来源可以用来提供时间的值。实现必须确保实现和任何负责建立时间计划的实体共享相同的时间视图。所述机制也适用于其他时间格式。注2: 由于状态机的定义,时间上的不连续将对状态机的操作产生可预测的影响。建议实现者和/或用户了解这些影响可能是什么,并限制这种不连续性或确保结果不会对应用程序产生不利影响。
11、CycleStart(循环开始)一个布尔变量,作为从Cycle Timer状态机(2.1)到List Execute状态机开始执行闸门控制列表的信号。通过Cycle Timer状态机设置TRUE,通过List Execute状态机设置FALSE(2.2)。
12、CycleStartTime(循环开始时间)下一个门控制列表执行周期开始的时间,表示为PTP时间尺度。该参数的值由Cycle Timer状态机(2.1)中的SetCycleStartTime()过程(2.1.1)设置。
13、ExitTimer(退出计时器)一种定时器,它实现与当前执行的门操作相关的延迟,以纳秒的整数表示。该值由List Execute状态机(2.2)的操作设置。
14、GateEnabled(网关已启用)一个布尔变量,指示状态机的操作是启用(TRUE)还是禁用(FALSE)。此变量由管理层设置。这个变量的默认值是FALSE。
15、ListPointer(列表指针)一个整数,用于指向操作控制列表(2.4.19)中的条目,每个条目由一个gate操作及其相关参数组成(表8-6)。在列表的第一个条目处为0点的值;最后一个条目的值为(OperControlListLength) -1点。
16、Tick(记号)一个布尔变量,由特定于实现的系统时钟函数以1纳秒的间隔设置为TRUE,该函数控制ExitTimer变量的递减(2.4.13)。该变量通过List Execute状态机(2.2)的操作设置为FALSE。注意:—虽然状态机是在纳秒时钟“滴答”的基础上记录的,但预计真正的实现将使用在频率精度和粒度上不同的各种时钟。因此,在12.29中指定的管理参数允许管理站发现实现的周期计时器时钟(TickGranularity)的特征,并相应地设置浇注周期的参数。
17、NewConfigCT一个布尔变量,用作List Config状态机(2.3)到Cycle Timer状态机(2.1)的信号,表示正在处理一个新的配置。通过List Config状态机的操作将变量设置为TRUE,通过Cycle Timer状态机的操作将变量设置为FALSE(2.1)。
18、OperBaseTime(操作者基准时间)基本时间的操作值,表示为PTP时间尺度(见IEEE Std 802.1AS-2011的8.2)。这个变量由List Config状态机(2.3)使用。
19、OperControlList(操作者控制列表)端口的活动门控制列表;列表执行状态机执行这个列表。列表的内容是由list Config状态机(2.3)控制下的AdminControlList(2.4.2)动态填充的。
20、OperCycleTime(操作者周期时间)端口的浇注周期的操作值。这个变量是通过List Config状态机(2.3)控制下的AdminCycleTime变量(2.4.3)动态设置的。Cycle Timer状态机(2.1)使用OperCycleTime来强制端口的周期时间。OperCycleTime变量是有理数秒,由整数分子和整数分母定义。
21、OperCycleTimeExtension(操作者周期扩展)一个纳秒的整数,定义在安装新的周期配置时允许扩展端口的门控周期的最大时间。这个操作值由List Config状态机(2.3)设置为AdminCycleTimeExtension(2.4.4)的值。OperCycleTimeExtension的值由SetCycleStartTime()过程(2.1.1)使用。
22、OperGateStates(操作者网关状态)与端口的每个队列相关联的门的当前状态。OperGateStates由List Execute状态机(2.2)设置,其初始值由AdminGateStates变量(2.4.5)确定。
23、OperControlListLength(操作者控制器长度)这个变量是由List Config状态机(2.3)控制下的AdminControlListLength参数(2.4.6)动态设置的。OperControlListLength表示OperControlList中的条目数,List Execute状态机(2.2)使用它来确定何时到达列表的末尾。
24、 TimeInterval(时间间隔)设置为当前正在执行的gate操作关联的TimeInterval参数的值。用于List Execute状态机的操作(2.2)

3 流量调度的管理对象

支持流量调度的桥接增强在 “ 1 ” 中定义,组成这个托管资源的对象如下:

3.1 门参数表

桥接元件的每个端口都有一个门参数表。表的每一行包含一组支持调度流量增强(1.) 的参数,如表12-28所示。在支持端口和组件动态配置的实现中,可以动态地创建或删除表中的行。

表12-28

名称数据类型所支持的操作一致性
1、queueMaxSDUTable ^c(队列最大服务数据单元表)sequence of queueMaxSDURWBE
2、GateEnabled(网关已启用)BooleanRWBE
3、AdminGateStates (管理员网关状态)gateStates ValueRWBE
4、OperGateStates (操作者网关状态)gateStates ValueRBE
5、AdminControlListLength(管理员控制列表长度 )unsigned integerRWBE
6、OperControlListLength (操作者控制列表长度)unsigned integerRBE
7、AdminControlList(管理员控制列表)sequence of GateControlEntryRWBE
8、OperControlList (操作者控制列表)sequence of GateControlEntryRBE
9、AdminCycleTime(管理员周期时间)RationalNumberRWBE
10、OperCycleTime(操作者周期时间)RationalNumber (seconds)RBE
11、AdminCycleTimeExtension(管理员周期时间扩展)Integer (nanoseconds)RWBE
12、OperCycleTimeExtension(队列最大服务数据单元表)Integer (nanoseconds)RBE
13、AdminBaseTime(管理员基准时间)PTPtimeRWBE
14、OperBaseTime (操作者基准时间)PTPtimeRBE
15、ConfigChange (配置更改)BooleanRWBE
16、ConfigChangeTime(配置更改时间)PTPtimeRBE
17、TickGranularity(刻度粒度)Integer (tenths of nanoseconds纳秒十分之一)RBE
18、CurrentTime(当前时间)PTPtimeRBE
19、ConfigPending (配置挂起)BooleanRBE
20、ConfigChangeError(配置更改错误)IntegerRBE
21、SupportedListMax(支持的列表最大值)IntegerRBE

R= 只读;
RW = 可读可写.
B = 对流量调度增强的桥接或桥接组件支持所需。
E = 需要终端站支持流量调度的增强。
^c= 端口支持的队列数量可以从流量类表中获得(12.6.3)。

3.1.1 The queueMaxSDUTable structure and data types(最大服务数据单元表的结构和数据类型)

queueMaxSDUTable 由最多8个条目组成,每一个实现支持的流量类,每个条目由一个queueMaxSDU值(12.29.1.1.1)和一个TransmissionOverrun计数器组成。

名称简述
queueMaxSDU(最大服务数据单元)无符号整型值,表示队列支持的最大SDU大小。
TransmissionOverrun(传输溢出)一种计数器,当实现检测到与队列相关的传输门已经关闭,并且来自该队列的帧仍在MAC传输时,该计数器增加。
3.1.2 The gate control list structure and data types(门控列表的结构和数据类型)

AdminControlList 和 OperControlList 是分别包含 AdminControlListLength 或 OperControlListLength 条目的有序列表。每个表项代表一个门操作,如表8-6所示。列表中的每个条目都被构造成一个 GateControlEntry 。

名称简述
GateControlEntry(门控列表条目)一个GateControlEntry由一个操作名称和多达2个与该操作相关的参数组成,如表8-6所示。第一个参数,如果存在,是一个GateStates值;第二个参数如果存在,则是TimeInterval值。
GateStates(门状态值)一个含有多达8个元组的列表,每个元组代表着一个端口支持的流量类,由每一个0-7范围内的流量分类号和一个 open 或 closed 的门状态(代表门状态的枚举值)组成(参见表8-6中的Gatestate)。注意: 一个列表中包含8个元组,每个元组中包含一个枚举值,eg:{0=open,1=closed,… … ,7=closed}
TimeInterval(时间间隔值)无符号整数,表示TimeInterval,单位为纳秒(请参见表8-6中的TimeInterval)。
3.1.3 RationalNumber(有理数)

有理数由整数分子和整数分母表示。

3.1.4 PTPtime

一个时间值,表示为PTP时间尺度(详见IEEE Std 802.1AS-2011 8.2)。

3.1.5 SupportedListMax(支持的列表最大值)

AdminControlListLength 和 OperControlListLength 参数的端口支持的最大值。可由调度计算软件在计算前确定端口的控制列表容量。

4 附件E:状态图中使用的符号规范

状态图用于表示协议的操作,通过许多协作状态机,每个状态机包含一组连接的、互斥的状态。在任何给定时间,每台机器只能有一种状态是活动的。

在状态图中,每个状态都表示为一个矩形框,并用一条水平线分成两部分。上面的部分包含状态标识符,用大写字母书写。下面的部分包含进入该状态时执行的任何程序。

所有允许的状态之间的转换都用箭头表示,箭头表示可能转换的方向。附在箭头上的标签表示为了发生转换必须满足的条件。所有条件都是计算为TRUE或FALSE的表达式;如果条件的计算结果为TRUE,则条件满足。标签UCT表示无条件转换(即,UCT总是计算为TRUE)。在本质上是全局的转移(即,如果满足附加在箭头上的条件,则从任何可能状态发生的转移)用一个开放的箭头表示,也就是说,没有特定的状态被标识为转移的原点。当与全局转换相关联的条件满足时,它将取代包括UCT在内的所有其他退出条件。特殊全局条件BEGIN取代所有其他全局条件,一旦断言,就会一直保持断言状态,直到所有状态块执行完毕,变量赋值及其执行的其他结果保持不变。

断言定义: 编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

进入某个状态时,为该状态定义的过程(如果有的话)按照它们在页面上出现的顺序只执行一次。每个操作都被认为是极其微小的,也就是说,一个过程的执行在下一个连续过程开始执行之前完成。没有过程在状态块之外执行。每次只执行一个状态块中的过程,即使满足了在不同状态机中执行状态块的条件。执行状态块中的所有过程在转换到其他状态块和执行其他状态块之前完成执行,也就是说,任何状态块的执行相对于其他状态块的执行来说是极其微小的,当执行开始时,从前一个状态转换到该状态的条件为TRUE。不同状态机中状态块的执行顺序是未定义的,除非受其转换条件的限制。在状态块中设置为特定值的变量将保留该值,直到后续状态块执行修改该值的过程。

在一个状态内的所有过程完成后,该状态的所有退出条件(包括与全局转换相关的所有条件)将持续评估,直到满足其中一个条件为止。

标签ELSE表示如果状态转换的其他条件都不满足,则发生转换(即,如果状态的所有其他可能退出条件都为FALSE,则ELSE计算为TRUE)。当两个或多个具有相同优先级的退出条件同时变为TRUE时,关于哪个退出条件导致状态转换发生的选择是任意的。

当需要将状态机描述拆分到多个图中时,出现在不同图上的两个状态之间的转换由一个用虚线绘制的退出箭头表示,加上对包含目标状态的图的引用。类似地,在目标关系图上使用虚线箭头和虚线状态框来显示到目标状态的转换。在以这种方式拆分的状态机中,任何可能导致进入某个图中定义的状态的全局转换都被认为是状态机所有状态的潜在退出条件,无论状态框出现在哪个图中。

如果状态图的解释与相应的全局转换表或与状态机相关的文本描述之间存在冲突,则状态图优先。状态图中使用的特殊符号和运算符的解释如表E-6所示;这些符号和运算符来源于“c++”编程语言ISO/IEC 14882的表示法。如果在这个子句中描述一个布尔变量被设置为TRUE,如果重置或清除值FALSE。

在这里插入图片描述

这篇关于IEEE 802.1 Qbv 协议的详细总结(流量调度的增强EST)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回

poj 3422 有流量限制的最小费用流 反用求最大 + 拆点

题意: 给一个n*n(50 * 50) 的数字迷宫,从左上点开始走,走到右下点。 每次只能往右移一格,或者往下移一格。 每个格子,第一次到达时可以获得格子对应的数字作为奖励,再次到达则没有奖励。 问走k次这个迷宫,最大能获得多少奖励。 解析: 拆点,拿样例来说明: 3 2 1 2 3 0 2 1 1 4 2 3*3的数字迷宫,走两次最大能获得多少奖励。 将每个点拆成两个

poj 2195 bfs+有流量限制的最小费用流

题意: 给一张n * m(100 * 100)的图,图中” . " 代表空地, “ M ” 代表人, “ H ” 代表家。 现在,要你安排每个人从他所在的地方移动到家里,每移动一格的消耗是1,求最小的消耗。 人可以移动到家的那一格但是不进去。 解析: 先用bfs搞出每个M与每个H的距离。 然后就是网络流的建图过程了,先抽象出源点s和汇点t。 令源点与每个人相连,容量为1,费用为

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000