GPC_APDU_Transport_over_SPI-I2C_v1.0_PublicRelease

GPC_APDU_Transport_over_SPI-I2C_v1.0_PublicRelease.pdf

目录

 1 简介

越来越多的设备,如移动设备、可穿戴设备或其他 IoT(物联网)设备现在正在使用焊接安全元件 (SE)。 这产生了支持 SPI 或 I2C 等物理接口的新需求,以代替以前的 ISO/IEC 7816-3 层。 本规范描述了 APDU(如 [7816-3] 中定义的)如何通过这些替代物理接口传输。 这种新协议允许传输更长的有效载荷,旨在适应底层物理接口的特定功能。

1.1 


本规范主要用于:
• 希望将安全元件嵌入到他们的解决方案中的设备制造商。
• 希望通过其产品中的替代物理接口支持 APDU 传输的 Secure Element OS 开发人员。 假设读者熟悉 ISO/IEC 7816-3 T=1 智能卡协议

Data Link Layer

管理物理接口上可靠的点对点数据传输的协议层。 它提供数据流控制和纠错。 它确保传入的数据既不会丢失也不会损坏,也不会以错误的顺序接收。

2 概述


本文档指定如何在主机设备 (HD) 和安全元件 (SE) 之间传输 APDU
使用基于 [SPI] 或 [I2C] 的串行物理接口,这些接口在行业中非常常用于连接电子元件。
第 3 节描述了为访问物理接口而应实现的物理层。
第 4 节描述了用于传输 APDU 命令和响应的数据链路层(在物理层上实现)。
第 5 节描述了 SE 可以进入省电模式的条件

3 物理接口


3.1 SPI接口


3.1.1 说明


[SPI] 中描述的串行外设接口 (SPI) 是一种同步串行数据链路,可提供全双工通信。 设备以主/从模式通信,主机通过发送数据启动通信,而从机能够同时发送数据。 然而,在本规范中,SPI 接口仅用于半双工通信。 尽管可能存在多个从设备,每个设备都使用自己单独的从选择线 (SS),但本规范仅描述了一个主设备和一个从设备之间的通信; 主机设备 (HD) 充当主设备,安全元件 (SE) 充当从设备。

3.1.2 物理层


SPI 总线指定了四种强制性物理信号/线:
• SCL 线:串行时钟(从 HD 输出)
• MOSI 线:Master Out / Slave In(HD 输出)
• MISO 线路:Master In / Slave Out(从 SE 输出)
• SS线:Slave Select(低电平有效,HD输出)
可以使用可选的 SPI-IRQ 物理线路。

 如果存在,SE 可以使用 SPI-IRQ 线来通知 HD 它已准备好发送数据,这是必需的,因为只有 HD(主设备)可以启动通信。 如果 SPI-IRQ 线不可用,HD 可能会轮询 SE 以获取传入数据。 有关详细信息,请参阅第 3.1.5 节。

3.1.2.1 信号约定
SPI 通信应使用“模式 0”配置,如下所述:
• SPI 时钟极性位(CPOL) 应为0(非反相时钟),这意味着时钟的空闲状态为低并且触发在上升时钟信号(选择高电平有效时钟)时启动。
• SPI 时钟相位位(CPHA) 应为0,这意味着数据采样发生在SCL 信号的上升时钟信号上。 数据信号设置在片选和下降时钟信号。
• SCL 频率不得超过CIP 定义的最大时钟频率(MCF)(参见第4.3 节)。 如果 HD 不知道使用哪个 MCF(例如尚未检索到 CIP),则应使用第 3.1.7 节中定义的默认最大时钟频率(DMCF)。
• 在单个SPI 访问期间通过MOSI 或MISO 信号传输的位数应为8 的倍数。
• 最高有效位 (msb) 应首先发送

3.1.2.2 数据传输
只有 HD 可以发起数据传输,并且在与 SE 交换数据之前它应该选择 SE,即 HD 应该下拉 SS 线并在 SCL 线上提供适当的时钟信号。
当HD需要向SE发送数据时,它应该在MOSI线上提供,而可以忽略在MISO线上接收到的数据。 反之,当HD需要从SE接收数据时,需要在MOSI线上提供填充字节,并在MISO线上读取接收到的数据。
当SE需要向HD发送数据时,它应该在MISO线上提供,并可以忽略在MOSI线上接收到的数据。 反之,当SE需要从HD接收数据时,需要在MISO线上提供填充字节,并在MOSI线上读取接收到的数据。
一旦所有数据都按预期交换完毕,HD 将停止时钟信号并取消选择 SE。 上述规则如图 3-2 所示,其中:
• “msb”表示传输数据第一个字节的最高有效位的位置。
• “lsb”显示最后一个字节的最低有效位的位置。
• “tSS”是在启动时钟信号和传输数据的第一位之前主机在断言SS 线后应等待的最短时间。 它的值超出了本规范的范围。
• “tDS”是主机在数据的最后一位传输后取消断言 SS 线(即取消选择从机)之前应等待的最短时间。 它的值超出了本规范的范围。

3.1.2.3 数据碎片/SPI 碎片
  SPI 总线用于传输定义了数据流控制的数据链路层模块(参见第 4 节)。 但是,第一级数据流控制是通过交换所谓的 SPI 片段在物理层实现的。 一个数据块可能被分割成多个 SPI 片段。 数据的分段将取决于需要交换的数据的大小和 SE 访问长度 (SEAL)。

当 HD 需要与 SE 交换数据(发送或接收)并且此类数据的长度超过 SEAL 字节时,HD 应分片和交换数据,以便每次 SPI 访问期间传送的字节数不超过 SEAL 的最大值 字节(在每个方向)。 HD 应该最大化每个 SPI 访问传输的字节数,以最小化 SPI 访问的数量。 此外,HD 应在两次连续的 SPI 访问之间暂停一段 SE 保护时间 (SEGT)。 这个过程如图 3-3 所示。

3.1.2.4 半双工使用


尽管 SPI 总线允许全双工模式操作,但本规范不使用此类功能,有意义的信息仅由数据链路层以半双工模式(见第 4 节)进行通信,这意味着 HD 和 SE 仅预期 交替发送数据链路层块。

3.1.3 激活顺序


在 SE 上电后,HD 在启动与 SE 的任何通信之前应等待电源唤醒时间 (PWT) 的持续时间。 当发起与 SE 的通信时,HD 应确保 SE 已准备好按照 3.1.4 节中描述的程序接收数据。
HD 然后可以检索 CIP(参见第 4.3 节)。 如果从未检索到 CIP 和/或 HD 不知道可以使用哪些参数值,则 HD 应使用第 3.1.7 节中定义的默认值(例如默认 PWT、默认 SEAL 等)。 否则,它可以使用先前从 CIP 读取的参数值。 HD 应根据 CIP 指定的参数调整其行为。

3.1.4 检测SE准备接收数据

SE 可能决定进入省电模式以节省电池(通常是主机设备电池),在这种情况下它将无法接收数据。 SE 实现可能进入省电模式的条件在第 5 节中描述。当 HD 希望发送数据并认为 SE 可能已进入省电模式时,它应首先确保 SE 已准备好接收数据。 为此,HD 应应用所谓的唤醒程序。 下面介绍两种唤醒程序; 然而,本规范承认在某些环境中可能无法实施这些过程这一事实。 因此,允许使用专有唤醒程序(HD 和 SE 都知道)。

• 唤醒程序 1(又名 SS-WUT-SCL):
在应用时钟信号 (SCL) 和发送数据之前,HD 应断言 SS 线并等待 WUT(或 DWUT)的持续时间。在此过程中,SS 线用作唤醒 SE 的中断线,等待 WUT 为 SE 提供足够的时间来唤醒并准备好接收数据。 为获得最佳性能,HD 应在 WUT 之后立即开始发送数据。 但是,它可以安全地等待更长时间; 保持 SS 线路断言可防止 SE 返回省电模式。

• 唤醒程序 2(又名 NB-WUT):
HD 应发送一个空字节(使用 3.1.2.2 节中描述的程序,即以取消选择 SE 结束),然后在发送任何重要数据之前等待 WUT(或 DWUT)的持续时间。 当 SE 检测到它在唤醒后第一次被取消选择时,它应该丢弃之前在 MOSI 线上接收到的任何数据。

在此过程中,等待 WUT 为 SE 提供了足够的时间来唤醒并准备好接收数据,并且取消选择指示 SE 丢弃最初在 MOSI 线上接收到的任何非重要数据。 请注意,为防止 SE 返回省电模式(参见第 5 节),HD 应注意不要等待太久。

此外,当 SE 期望一个新的数据链路层块(见第 4 节)而不是接收单个空字节时,SE 将简单地丢弃该空字节并等待进一步的传入数据。 需要此行为来处理 HD 错误地将 SE 评估为处于省电模式并不必要地应用唤醒程序的情况。

为支持上述程序,唤醒时间 (WUT) 被定义为 CIP 的一部分(参见第 4.3.3 节),默认 WUT (DWUT) 在第 3.1.7 节中定义。 如果实施专有唤醒程序,则 CIP 中的 WUT 可能会被忽略或用于其他含义。

3.1.5 检测SE准备发送数据


为检测 SE 已准备好发送数据并启动此类数据的检索,HD 物理层应使用以下部分中描述的机制之一。 由于此类机制对应于不同的硬件架构,因此选择使用一种或另一种是隐含的(即 HD 隐含地知道使用哪个)

3.1.5.1 轮询机制

当HD和SE设计为使用轮询机制时,HD应轮询SE以获取可用数据。 为此,它应首先决定轮询时间 (POT),该时间应大于 CIP 传送的 MPOT。 然后,当需要一些响应数据时,HD 将按如下方式轮询 SE:
  • HD 应声明 SS 线,在 SCL 线上应用时钟,并发送一个空字节以尝试从 SE 接收第一个有意义的字节(即数据链路层块的有效第一个字节)。
• 如果从SE 接收到一个空字节,HD 将解除断言SS 线,等待POT 持续时间,然后再次尝试发送一个空字节。 HD 应重复此过程,直到它从 SE 接收到有意义的字节(见下文)或直到 HD 数据链路层确定超时已发生。
• 如果从SE 接收到一个有意义的字节,HD 可以立即继续接收剩余的块数据,或者可以解除断言SS 线,然后应用3.1.2.2 节中描述的过程来接收剩余的块数据。

3.1.5.2 中断机制
当 HD 和 SE 设计为使用中断机制时,专用 SPI-IRQ 线应在响应数据可用时由 SE 断言。 应实施电平敏感机制,其中应通过将 SPI-IRQ 线设置为有效高电压电平来触发中断。 一旦 SS 线被 HD 断言,SE 应立即清除中断。

为防止通信错误:
• SE 应仅在一致数据实际准备好发送时断言SPI-IRQ 线,即当有意义数据的SEAL 字节或比SEAL 字节短的完整数据链路层块准备好发送时。
• 如果 SPI-IRQ 线有效,HD 不应尝试发送新的命令数据

3.1.6 从 SE 接收数据


因为从 SE 接收数据只能由 HD(主设备)发起和驱动,所以 HD 需要知道应该从 SE 检索的数据的大小。 这个问题通过以下事实得到解决:当 HD 检测到 SE 准备好发送数据时(参见第 3.1.5 节),HD 然后仅从 SE 接收数据链路层块(参见第 4 节)并且 从该块的序言字段,HD 可以了解应接收多少数据。

注:当使用3.1.5.1节描述的轮询机制检测SE准备发送数据时,SE返回的第一个有效(非空)字节表示轮询过程结束,是第一个字节 SE 打算发送的数据链路层块。 当使用中断机制时,HD还没有接收到任何字节并且应该检索整个数据链路层块。

注意:数据传输和通信性能可以通过让 HD 始终立即不仅检索数据链路层块的序言字段而且检索常见的短块大小(例如 6 字节)来优化。 如果 HD 试图检索比 SE 可用的数据更多的数据,HD 应该只接收额外的填充字节(SPI 实现中的常见行为),如果 HD 收到一个不完整的块,它可能会使用额外的 SPI 访问来检索丢失的数据 .

4 数据链路层


数据链路层使用第 3 节中描述的物理层之一在 HD 和 SE 之间传输数据块。 此类块只能由 HD 和 SE 交替发送(即半双工通信),并且可以传送应用数据或传输控制数据。 数据链路层应实现的协议与[7816-3]中描述的T=1协议非常相似,因此简称为T=1'。

4.1 T=1'协议


T=1' 协议建立在 [7816-3] 中描述的 T=1 协议之上,具有以下差异:
• 一般的块结构是相同的,除了序言的LEN 字段,它被编码在2 个字节上。
• 为NAD 字段的值定义了附加规则。
• 2 字节CRC 保留为唯一的EDC 算法,应该使用。
• S(IFS xxx) 块可能包含按 1 或 2 个字节编码的值。
• 定义了额外的S-Block(详见4.2.2 节)。
  • 定义了默认的 IFSC 值 8,HD 在不知道 IFSC 时应使用该值。 这个默认值足够大,HD 可以发送一个 S(CIP 请求)块,HD 可能想要这样做,以便发现更合适的 IFSC 值。
• 定义了默认的 IFSD 值 64,如果 SE 不知道 IFSD,则应使用它。 此默认值与最大 CIP 长度兼容。 HD 可以发送一个 S(IFS 请求)块来为通信的其余部分声明一个更合适的 IFSD 值。
• 不假设是否存在物理复位机制(例如冷复位或热复位)。 仅定义了软件复位,可以使用新的 S(SWR xxx) 块请求。 可能需要和使用物理机制的情况超出了本规范的范围。

在第 4.2 节中给出了更多解释。
[7816-3] 第 11.6.2.3 节中描述的无差错操作规则和 [7816-3] 附件 A.2 中描述的示例场景仍然适用。 [7816-3] 第 11.6.3 节中描述的错误处理规则和 [7816-3] 附件 A.3 中描述的示例场景仍然适用。 但是请注意,当 [7816-3] 建议执行“热重置”时,T=1' 协议应该尝试交换 S(SWR xxx) 块(参见第 4.2.2 节)。

4.2 块格式


T=1'协议使用的通用块结构与[7816-3]中描述的T=1协议相同; 然而,LEN 字段编码为 2 个字节,如表 4-1 所示。

LEN 和 CRC 字段应首先发送其最高有效字节(即大端顺序)。
例如,传输 14 字节 APDU 命令(包括 Le 字段)并具有 0xBDA4 的 CRC 值的块将按照表 4-2 中的指示进行编码。 (注意:NAD 和 PCB 值可能会有所不同,CRC 值也会相应变化。)

4.2.1 Node Address Byte (NAD) Field Format
 

 NAD 字段指定块的源和预期目的地

 

以下规则适用于 NAD 值的编码:
• HD 和SE 应分配不同的地址,因此DAD 和SAD 值永远不会相同。
• 为了便于检测 NAD 字节(即块的开始与非重要字节),地址 0000b 和 1111b 是禁止的,因此对于 DAD 和 SAD 也是禁止的。
• 如果SE 知道它自己的地址和/或HD 的地址,那么它可以检查DAD 和/或SAD 值,如果其中任何一个无效则决定拒绝该块。
• 如果 SE 不知道自己的地址,那么为了构建传出块的 NAD 值,SE 应重新使用并反转从 HD 接收的最后一个块的 DAD 和 SAD 值。

对于涉及单个主机和单个从机的配置,本规范建议使用以下地址:
• 0001b:主机设备(HD)
• 0010b:安全元件 (SE)

 4.2.2 Protocol Control Byte (PCB) Field Format

4.2.2 协议控制字节 (PCB) 字段格式

PCB 字段定义块的类型并包括传输控制数据。
T=1' 协议引入了以下新的块类型:
• S(CIP request):请求SE返回CIP。
• S(CIP 响应):回答包含CIP 的S(CIP 请求)块(参见第4.3 节)。
• S(RELEASE request):释放SE,即HD表示此时不介意SE进入省电模式。 有关详细信息,请参阅第 5 节。
• S(RELEASE 响应):确认一个S(RELEASE 请求)块。
• S(SWR 请求):请求SE 执行通信接口的软件复位。 发送此请求时,HD 还重置 N(S) 位并丢弃任何块链接信息。 SE 对该请求的确切解释超出了范围。
• S(SWR 响应):软件复位后确认S(SWR 请求)块。
PCB 域的编码如表 4-4 所示。

 

4.2.3 长度(LEN)字段格式


LEN 字段编码块的 INF 字段的长度。
以下值应被接收方视为无效:
• 超过接收器当前 IFS 值的值(即 SE 的 IFSC、HD 的 IFSD)
• 超出“0FF9”的值 (4089)(请参阅第 4.2.5 节中的解释)

4.2.4 信息(INF)字段格式


INF 字段的内容取决于块类型。

对于 S(IFS 请求)块的 INF 字段:
• 从'01' 到'FE' 的值应在1 个字节上编码。
• 从'00FF' 到'0FF9' (4089) 的值应按2 个字节编码(MSB 在前)。
• 超出“0FF9”(4089) 的值无效(请参阅第 4.2.5 节中的详细信息)

4.2.5 结语字段格式


Epilogue 字段传达块的错误检测代码。 在此版本的规范中,将使用 2 字节的 CRC。 请注意,这样的 CRC 只能有效地保护 (2^15 - 1) 位(包括其自身)免受 1、2 和 3 位损坏。 因此,此协议中 INF 字段的大小限制为最大值“0FF9”(4089)字节

4.3 通讯接口参数


CIP 包含 HD 用于与 SE 通信的通信接口参数(即物理层和数据链路层参数)以及历史字节。 为了检索 CIP,HD 应发送一个 S(CIP 请求)块(参见第 4.2 节)并接收一个包含以下部分中描述的 CIP 结构的 S(CIP 响应)块。 可以随时使用此过程(尽管更希望在开机时或软件重置后使用)。 在以下部分中,所有数值都编码为无符号整数

4.3.1 CIP——通用结构


本节介绍 CIP 的通用结构,与使用的物理层无关。

物理层参数
描述 SPI 物理层的数据,如表 4-8 中所定义,或者
描述 I2C 物理层的数据,如表 4-9 中所定义。

在这个版本的协议中,CIP 结构的总长度不得大于 64 字节。
注意:此要求与第 4.1 节中定义的默认 IFSD 值兼容

 

4.3.2 CIP – Specific Parameters for Data Link Layer


This section describes the parameters provided by the CIP for the Data Link Layer.
 

如果 HD 不知道要使用哪个 BWT 值(例如,尚未检索到 CIP),它应使用 300ms 的默认 BWT 值(DBWT)。
注意:为了与更高版本的协议(如果将来有定义)实现一定程度的兼容性,HD 实现应接受更多数据(上表中未描述)出现在数据链路层参数的末尾 并忽略这些数据

4.3.3 CIP – Specific Parameters for SPI Physical Layer


This section describes the parameters provided by the CIP when the SPI Physical Layer is used
 

4.3.3 CIP——SPI 物理层的特定参数
本节介绍使用SPI物理层时CIP提供的参数

注 1:为了与更高版本的协议(如果将来有定义)实现一定程度的兼容性,HD 实现应接受更多数据(上表中未描述)出现在物理层参数的末尾 并忽略此类数据。
注 2:参见第 3.1.5 节。 如果不使用轮询机制,则 MPOT 应设置为“00”。
注 3:参见第 3.1.2.3 节。 设置为“FFFF”的 SEAL 值应被解释为 SE 利用直接内存访问 (DMA),这意味着 HD 可以在每次 SPI 访问时虚拟地发送任何数量的数据。 在这种情况下,SE 可以相应地指示适当的 SEGT 值。

4.3.4 CIP – Specific Parameters for I2C Physical Layer


This section describes the parameters provided by the CIP when the I2C Physical Layer is used.
 

 4.3.4 CIP——I2C 物理层的特定参数
本节介绍使用 I2C 物理层时 CIP 提供的参数。

注意:为了与更高版本的协议(如果将来有定义)实现一定程度的兼容性,HD 实现应接受更多数据(上表中未描述)出现在物理层参数的末尾和 忽略此类数据。

5 Power Saving Policy
 

SE 可以决定进入省电模式以节省电池(通常是主机设备电池)。 SE 实现进入这种模式的条件通常取决于定义有关性能、可用性、电池节省等要求的高级应用用例。因为可能无法捕获一组适合所有使用的此类条件 在某些情况下,本规范承认特定 SE 实现可能会根据专有策略决定进入省电模式这一事实。 然而,本文档为 SE 指定了以下可互操作的策略:

 

• SE 只能进入省电模式:
o 在收到 S(RELEASE 请求)块(参见第 4.2.2 节)并返回相应的 S(RELEASE 响应)块之后,或者
o 如果 HD 在以下任何事件后没有发送任何新的数据链路层块,则超时后:

   启动完成(上电时)
   SE 返回了一个 R-block 或 S-block(包括 S(SWR response))。
   SE 返回一个 I-block 完成发送 APDU 响应(如果使用 APDU 链接,则返回链的最后一个 APDU 响应)。

虽然此政策保证 SE 仅在满足上述条件之一时才会进入省电模式,但出于其他专有原因,SE 可能会选择不这样做(即即使满足上述条件)。

请注意,如果超时适用(见下文),HD 可能会选择在达到超时之前发送 S(RELEASE 请求)块,即为 SE 提供更早进入省电模式的机会。

• SE 应指示适用的节能超时值(PST) 作为CIP 的一部分(参见第4.3 节)。
o 如果超时值设置为“00”,则 SE 表示它实际上可以随时进入省电模式。 实施专有政策的 SE 应指示此值。 假设 HD 实现知道并可以调整其行为以适应这种专有策略。
o 如果超时值设置为“FF”,则 SE 表示它不使用此超时值,因此只能在收到 S(RELEASE 请求)块时进入省电模式。
o 任何其他值(从“01”到“FE”)应理解为有效的超时值。 请注意,HD 在测量超时时应应用一些余量。

上电后,如果 HD 期望 SE 执行上述互操作策略并且不知道适用的超时值(例如,尚未检索到 CIP),则它应假定 SE 可能已经进入省电模式。

假定,如果 SE 实施专有的节电策略(或仅根据上述可互操作策略部分运行),HD 将对此类专有策略有足够的了解以调整其自身的行为。

请注意,假设进入或退出省电模式对数据链路层的通信参数(例如 N(S) 位、M 位、N(R) 位)没有影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 反序列化漏洞

反序列化漏洞是指程序在反序列化期间,通过特殊的调用链引发的一系列安全问题。编程语言中只要存在序列化,反序列化功能就可能存在反序列化的安全问题。这里只针对Java和PHP进行讨论。 序列化漏洞概述 序列化的存在主要是为了存储和传输,将这…

如何设置工业设备的振动监测阈值

工业设备的振动阈值设置是确保设备正常运行和及时维护的关键步骤。本文将介绍一些常见的方法和策略,帮助您正确设置工业设备的振动阈值。 1. ISO 10816 振动烈度表格: ISO 10816 是一项国际标准,提供了设备振动水平的参考值。该标准将设备按…

【移动计算技术(Android)】期末复习

目录 选择题 选择题知识点汇总 Activity Intent Broadcast BroadcastReceiver 如何自定义Receiver 如何注册接收器 Service SharedPreferences 三种访问模式 如何创建 如何存储/修改 如何读取 内部存储 openFileOutput openFileInput SD卡 资源文件 SQLite…

Java学习路线(13)——Collection集合类:List集合与Set集合

一、集合类体系结构 二、部分Collection类型对象 Collection集合特点 List系列集合是有序、可重复、有索引。 ArrayList:有序、可重复、有索引LinkedList:有序、可重复、有索引 Set系列集合是无序、不重复、无索引。 HashSet:无序、不重复…

下载YouTube视频的一种方法

文章目录 工具名称下载方法使用方法1.只下载音频2.下载音频转换成mp3(加上-x –audio-format参数)3.下载视频(带音频)ID:22 | EXT:mp4 | 1280*720 下载的数据集:YouCook2 工具名称 yt-dlp 下载…

ajax使用

说明:ajax是一门异步处理请求的技术;可以实现不重新加载整个页面的情况下,访问后台后服务;比如百度搜索引擎,输入关键字后,下面会实时出现待选项,这就是一种异步处理请求的技术。 原生Ajax 原…

chatgpt赋能python:Python中未定义变量的默认值

Python中未定义变量的默认值 在Python编程中,有时候我们会使用未经定义的变量。如果这些变量没有被定义,那么它们将没有任何值。在这篇文章中,我们将讨论Python中未定义变量默认值的问题,并深入研究为什么这些默认值如此重要。 …

如何保证三个线程按顺序执行?不会我教你

👨‍🎓作者:bug菌 ✏️博客:CSDN、掘金、infoQ、51CTO等 🎉简介:CSDN|阿里云|华为云|51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12…

linux内核内存管理slab

一、概述 linux内存管理核心是伙伴系统,slab,slub,slob是基于伙伴系统之上提供api,用于内核内存分配释放管理,适用于小内存(小于1页)分配与释放,当然大于1页…

基于html+css的图展示99

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

运动员最佳配对问题——算法设计与分析(C实现)

目录 一、问题简述 二、分析 三、代码展示 四、结果验证 一、问题简述 问题描述:羽毛球队有男女运动员各n人。给定2个n*n矩阵P和Q。P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞争优势;Q[i][j]是男运动员i和女运动员j配合的女运动员竞…

SSM框架学习-拦截器

1. 简介 在Spring框架中,拦截器是一种很重要的组件,它们允许在请求到达控制器之前或之后执行一些代码。拦截器在请求处理的特定点进行拦截,然后通过逻辑来决定是否将控制器的处理传递给下一个处理程序。 在Spring中,拦截器是由实现…

KVM虚拟化技术学习-基础入门

1.虚拟化技术概述 虚拟化[Virtualization]技术最早出现在 20 世纪 60 年代的 IBM ⼤型机系统,在70年代的 System 370 系列中逐渐流⾏起来,这些机器通过⼀种叫虚拟机监控器[Virtual Machine Monitor,VMM]的程序 在物理硬件之上⽣成许多可以运⾏…

Codeforces Round 764 (Div. 3)

比赛链接 Codeforces Round 764 A. Plus One on the SubsetB. Make APC. Division by Two and PermutationD. Palindromes ColoringE. Masha-forgetful A. Plus One on the Subset Example input 3 6 3 4 2 4 1 2 3 1000 1002 998 2 12 11output 3 4 1题意: 你可…

计算机网络考试多选题汇总Ⅱ

https://cadyin.blog.csdn.nethttps://blog.csdn.net/qq_38639612?spm1010.2135.3001.5421 计算机网络考试多选题汇总 1、在Windows中,任务管理器的作用是() A.终止未响应的应用程序 B.终止进程的运行 C.查看系统当前的信息 …

车载网络测试 - CANCANFD - 基础篇_01

目录 问题思考: 一、为什么需要总线? 二、什么是CAN总线? 三、为什么是CAN总线? 四、曾经的车用总线 1、SAEJ1850(Class2) 2、SAEJ1708 3、K-Line 4、BEAN 5、 byteflight, K-Bus 6、D2B 五、当前的车用总线 1、CAN 2、LIN 3、FlexRay 4、MOST 六…

python-sqlite3使用指南

python下sqlite3使用指南 文章目录 python下sqlite3使用指南开发环境sqlite3常用APICRUD实例参考 开发环境 vscode ​ 开发语言: python vscode SQLite插件使用方法: 之后在这里就可以发现可视化数据: sqlite3常用API Python 2.5.x 以上…

E往无前 | 腾讯云大数据 ElasticSearch 高级功能:Cross Cluster Replication实战

前言 Elasticsearch在platinum版本中,推出了Cross Cluster Replication特性(以下简称CCR),也即跨集群远程复制。 该特性可以解决两类问题: 1,数据迁移; 2,异地备份。 本文以实战为主…

微服务和领域驱动

一、微服务 1.1 什么是微服务 微服务就是一些协同工作的小而自治的服务。 关键词: 小而自治 -- 小 “小”这个概念,一方面体现在微服务的内聚性上。 内聚性也可以称之为单一职责原则:“把因相同原因而变化的东西聚合到一起,…

企业电子招投标采购系统源码之登录页面-java spring cloud

​ 信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…