AMBA-CHI协议详解(八)

2024-08-31 22:36
文章标签 详解 协议 chi amba

本文主要是介绍AMBA-CHI协议详解(八),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

AMBA-CHI协议详解(一)
AMBA-CHI协议详解(二)
AMBA-CHI协议详解(三)
AMBA-CHI协议详解(四)
AMBA-CHI协议详解(五)
AMBA-CHI协议详解(六)
AMBA-CHI协议详解(七)
AMBA-CHI协议详解(八)

文章目录

    • 2.7 Address, Control, and Data
      • 2.7.1 Address
      • 2.7.2 Physical Address Space, PAS
      • 2.7.3 Memory Attributes
      • 2.7.4 Transaction attribute combinations
      • 2.7.5 Likely Shared
      • 2.7.6 Snoop Attribute
      • 2.7.7 Mismatched Memory attributes
      • 2.7.8 CopyAtHome attribute


2.7 Address, Control, and Data

  事务包括定义互连处理事务的方式的属性。其中包括地址、内存属性、snoop属性和数据格式。每个属性都在本节中定义。

  在本节中,除非另有明确说明,否则对写事务的引用既包括单个写事务,也包括相应的组合写事务。

2.7.1 Address

该规范支持:
  ●Physical Address (PA,物理地址) 为44~52bits,以1bit递增。
  ●Virtual Address (VA,虚拟地址) 为49~53 bits.

REQ和SNP报文Addr字段的说明如下:
  ●REQ channel: Address[(MPA-1):0]
  ●SNP channel: Address[(MPA-1):3]

“MPA”为支持的最大PA。

下表显示物理地址字段宽度与支持的虚拟地址之间的关系。
在这里插入图片描述
DVM的地址域段在下面章节会有描述。

Req_Addr_Width参数用于指定组件支持的最大物理地址(以bit为单位)。取值范围为44 ~ 52,不指定时采用默认值44。

2.7.2 Physical Address Space, PAS

  通过NSE和NS字段的组合来确定访问的PAS值。PAS编码如表2-11所示
在这里插入图片描述
  对于Snoopable事务,可以将PAS视为定义了四个地址空间的附加地址信息。必须正确处理不同物理地址空间之间的任何混叠。(Hardware coherency硬件一致性不管理四个地址空间之间的一致性。)

PAS编码要求如下:
  ●可以在任何Read、Dataless、Write and Atomic中取任何值。
  ●可以在PrefetchTgt事务中取任意值。
  ●不适用于DVMOp或PCrdReturn事务,必须设置为零。

2.7.3 Memory Attributes

  内存属性(MemAttr)由EWA (Early Write Acknowledgment)、Device、Cacheable和Allocate四部分组成。

EWA
EWA表示事务的写完成响应:
  ●可以来自互连中的中间点,例如Home节点。
  ●必须来自目标目的地的最终端点。

如果断言了EWA,则事务的Write完成响应可以来自中间点或端点。

如果EWA被取消断言,则事务的写完成响应必须来自端点。

允许实现不使用EWA属性,但不是必需的。在这种情况下,必须从端点完成。

EWA断言要求是:
  ●可以取任意值:
  —ReadNoSnp和ReadNoSnpSep
  —WriteNoSnp和WriteNoSnpDef
对于WriteNoSnpDef事务,期望响应来自最终目标端点,而不管EWA值如何。
来自中间组件的早期响应可能会阻止原始RN观察到来自最终端点的有效Defer响应,从而降低可延迟写事务的有效性。
  —CMO事务
  —Atomic原子事务

  ●必须断言:
  —非ReadNoSnp、ReadNoSnp的读事务或CMO事务。
  —非CMO事务的Dataless事务
  —非WriteNoSnp或WriteNoSnpDef 事务的写事务

  ●不适用:
  —在DVMOp或pcrreturn事务中必须设置为零。
  —可以在PrefetchTgt事务中取任何值。

Device
Device属性表示内存类型是Device还是Normal。

Device memory type
  Device memory type必须用于exhibit side-effects的位置(一个地址的变动可能会影响一段地址)。允许在没有exhibit side-effects使用Device内存类型。

Device memory type位置的事务的要求如下:
  ●读取事务读取的数据不得超过请求的数量。
  ●不允许从Device memory位置预取。
  ●读取操作必须从端点获取数据。Read不得将数据从写入转发到在中间点完成的同一地址位置。
  ●不允许将对不同位置的请求合并为一个请求,或将对同一位置的不同请求合并为一个请求。
  ●写操作不能合并。
  ●从中间点获得完成的对Device memory的写入必须使写入数据及时地对端点可见。

访问 Device memory必须使用以下类型,允许独占variants:
  ●对Device memory位置的读访问必须使用ReadNoSnp。
  ●对Device memory位置的写访问必须使用WriteNoSnpPtl、WriteNoSnpFull或WriteNoSnpDef
  ●允许CMO事务到Device memory位置。
  ●允许Atomic事务进入Device memory位置。
  ●PrefetchTgt事务不允许进入Device memory位置。MemAttr字段不适用,可以在PrefetchTgt事务中取任何值。

Normal memory type

Normal memory类型适用于没有 exhibit side-effects的内存位置。

访问Normal memory在预取或转发方面(prefetching or forwarding)没有与Normal memory内存相同的限制:
  ●一个有EWA断言的读事务可以从一个写事务中获得读数据,这个写事务已经从一个中间点发送了它的Comp,并且是相同的地址位置。
  ●写可以合并

任何Read、Dataless、Write、PrefetchTgt或Atomic事务类型都可以用于访问Normal memory位置。所使用的事务类型由要完成的内存操作和Snoopable属性决定。

Cacheable
Cacheable属性指示事务是否必须执行Cache查找:
  ● 当断言Cacheable时,事务必须执行Cache查找。
  ● 当取消Cacheable时,事务必须访问最终目的地。

Cacheable属性值要求如下:
  ● 必须断言:
  — 除ReadNoSnp和ReadNoSnp外的读事务。
  — 除了 CleanShared、CleanSharedPersist*、CleanInvalid、CleanInvalidPoPA和MakeInvalid的Dataless事务。
  — 除了WriteNoSnpFull、WriteNoSnpPtl、and WriteNoSnpDef的写事务。

  ● 绝对不能断言:
  — Device memory事务
  — WriteNoSnpDef事务

  ● 可以取任何值:
  — ReadNoSnp或ReadNoSnpSep事务到Normal memory位置
  — WriteNoSnpFull或WriteNoSnpPtl到Normal memory位置
  — CleanShared、CleanSharedPersist*、CleanInvalid、CleanInvalidPoPAa、MakeInvalid
  — Atomic事务

  ● 不适用的:
  — 在DVMOp和PCrdReturn中必须设置为零
  — 可以在PrefetchTgt中取任何值

在可以接受任何可Cacheable的事务中,该值通常由页表属性(page table attributes)确定。

Allocate
Allocate属性是一个分配提示,指示事务的推荐分配策略
  ● 如果断言了Allocate,出于性能原因,建议将事务分配到Cache中。但是,允许不分配事务。
  ● 如果取消Allocate,出于性能原因,建议不要将事务分配到缓存中。但是,允许分配事务。

Allocate属性值需求如下:
  ● 可以断言具有Cacheable属性的事务,ReadOnceMakeInvalid除外。(具体看附表)
  ● 必须为WriteEvictFull事务断言。(RN可以将带有未断言的Allocate位的WriteEvictFull转换为Evict事务。)

  ● 下面情况不能断言:
  — Device memory 事务
  — Normal Non-cacheable memory事务
  ● 下面情况不适用:
  — 在DVMOp、PCrdReturn和Evict事务中必须设置为零。
  — 可以在PrefetchTgt事务中取任何值

Propagation of Attr
  从Home节点到SN节点的响应请求必须保留MemAttr位EWA、Device、Cacheable和Allocate。此规则的唯一例外是当下游memory已知为Normal时,则可以将Device字段值设置为0b0以表示Normal。

  在组合写事务中,当写事务和CMO事务分开时,写事务继承原始组合请求的MemAttr和SnpAttr值。

对于由于从Home预取或从系统缓存中evict而在互连中生成的ReadNoSnp或WriteNoSnp:
  ● MemAttr的EWA、Cacheable、 Allocate必须设置为1。
  ● “Device”字段值必须设置为“0b0”,表示“Normal”属性。
  ● SnpAttr字段值必须设置为0,表示不可窥探。

2.7.4 Transaction attribute combinations

  下表列出了MemAttr、SnpAttr和Order字段值的合法组合以及相应的ARM内存类型。Order字段的详细描述后面会提到。

在这里插入图片描述
a. Order = 0b10只允许在ReadOnce*、WriteUnique、ReadNoSnp、WriteNoSnp、WriteNoSnpDef,和Atomic事务中使用
b. Order = 0b01不应用于保序。
c. Non-cacheable Non-bufferable是AXI的Memory类型,不是ARM的Memory类型。

Memory type

Device nRnE:(no Reorder no Early Write Acknowledgment)

Device nRnE内存类型要求的行为:
  ● 写响应必须从最终目的地获得。
  ● 读数据必须从最终目的地获得。
  ● 读取操作不能获取多于所需的数据。
  ● 读操作不能预取。
  ● 写操作不能合并。
  ● 写操作不能写入比原始事务更大的地址范围。
  ● 从同一源到同一端点的所有Read和Write事务必须保持有序。

Device nRE:
  ● 写响应可以从中间点获得。
  ● 读数据必须从最终目的地获得。
  ● 读取操作不能获取多于所需的数据。
  ● 读操作不能预取。
  ● 写操作不能合并。
  ● 写操作不能写入比原始事务更大的地址范围。
  ● 从同一源到同一端点的所有Read和Write事务必须保持有序。

Device RE:
  ● 写响应可以从中间点获得。
  ● 读数据必须从最终目的地获得。
  ● 读取操作不能获取多于所需的数据。
  ● 读操作不能预取。
  ● 写操作不能合并。
  ● 写操作不能写入比原始事务更大的地址范围。
  ● 从同一源到同一端点的读写事务不需要保持顺序。
  ● 从同一源到重叠地址的读写事务必须保持有序。

Normal Non-cacheable Non-bufferable:

Normal Non-cacheable Non-bufferable memory类型行为:
  ● 写响应必须从最终目的地获得
  ● 读数据必须从最终目的地获得。
  ● 写操作可以合并。
  ● 从同一源到重叠地址的读写事务必须保持有序。

Normal Non-cacheable Bufferable:
  ● 写响应可以从一个中间点获得。
  ● 写事务必须及时地在最终目的地显示可观察。(没有机制来确定Write事务何时在其最终目的地可见。)
  ● 读数据必须从以下途径获取:
   — 最终的目的地。
   — 正在向最终目的地执行的写事务。
   如果读数据是从写事务中获得的:
   — 它必须从最新的写入中获得。
   — 不能缓存数据以服务于以后的读取
  ● 写操作可以合并。
  ● 从同一源到重叠地址的读写事务必须保持有序。

对于Normal Non-cacheable Bufferable读取,可以从仍在向最终目的地执行的写入事务中获取数据。这与同时到达最终目的地的读取和写入事务无法区分。以这种方式返回的读取数据并不表示写入事务在最终目的地可见。

Write-Back No-allocate:
  ● Write响应可以从一个中间点获得。
  ● 写事务不需要在最终目的地可见。
  ● 读取数据可以从中间Cache副本中获得
  ● 读可以预取。
  ● 写操作可以合并。
  ● 读和写事务需要Cache查找。
  ● 从同一源到重叠地址的读写事务必须保持有序
  ● No-allocate属性是一个分配提示,也就是说,它是对内存系统的一个建议,即出于性能原因,不分配事务。但是,分配的过程是不被禁止的。

Write-Back Allocate:
  ● Write响应可以从一个中间点获得。
  ● 写事务不需要在最终目的地可见。
  ● 读取数据可以从中间Cache副本中获得
  ● 读可以预取。
  ● 写操作可以合并。
  ● 读和写事务需要Cache查找。
  ● 从同一源到重叠地址的读写事务必须保持有序
  ● 分配提示是对内存系统的建议,出于性能原因,分配事务。

2.7.5 Likely Shared

  LikelyShared属性是一个缓存分配提示。当断言此属性时,表明所请求的数据可能由系统内的其他请求节点共享。这是对共享系统级缓存的一个提示,即出于性能原因,建议分配缓存行。

没有与此事务属性关联的必需行为。

Likely Shared断言需求:
  ● 可以被断言
  — ReadClean
  — ReadNotSharedDirty
  — ReadShared
  — StashOnceUnique, StashOnceSepUnique
  — StashOnceShared, StashOnceSepShared
  — WriteUniquePtl
  — WriteUniqueFull
  — WriteUniqueZero
  — WriteUniquePtlStash
  — WriteUniqueFullStash
  — WriteBackFull
  — WriteCleanFull
  — WriteEvictFull
  — WriteEvictOrEvict

  ● 必须不能断言
  — 组合写事务。
  — Dataless或Atomic事务。
  — 其他的读或写事务。

  ● 不适用的
  — DVMOp或PCrdReturn事务,并且必须设置为零。
  — PrefetchTgt事务可以使用任何值。

2.7.6 Snoop Attribute

SnpAttr字段指示事务是否需要Snoop。

下表展示了SnpAttr 字段编码
在这里插入图片描述

显示不同事务类型的snoop属性。
在这里插入图片描述
a.不适用,SnpAttr 位在DVM事务中用作域标识符。
b.不适用,可以取任意值。

CMO、Atomic以及从Home到SN的ReadNoSnp和ReadNoSnp中的SnpAttr字段值必须设置为零,与从原始RN到Home的请求中的字段值无关。
在从Home到SN的写和组合写事务中,SnpAttr字段的位位置用于DoDWT字段。

对于可以接受多个SnpAttr值的事务,该值通常由页表属性(page table attributes)确定。

2.7.7 Mismatched Memory attributes

  允许使用不匹配的MemAttr或SnpAttr值对同一位置进行两次不同的访问。不匹配的MemAttr或SnpAttr值可能是预期的,也可能是意外的。它要求系统在任何一个实例中都不会死锁,并且事务总是可以正常进行。

为了帮助处理预期的不匹配的内存属性,互连:
  ● 必须确保一个Clean的Clean line,不管是UC还是SC,在一个一致性Cache中:
  — 如果该位置在被分配到完全一致的缓存后被另一个SnpAttr = 0的事务更新,对于使用SnpAttr = 0的事务访问该位置的请求者不可见。
  — 未写入主存。
  — 不用于覆盖下游Cache中的脏副本。

  ● 允许(但不是必需的)使Requester使用SnpAttr=0的事务写入的缓存行的脏副本对完全一致的请求者可见。
使用SnpAttr=0的事务访问该位置时,不得从Requester中删除脏Cache line的可见性。

  ● 允许(但不是必需的)使用SnpAttr=0的事务访问该位置,使完全一致的缓存中的Cache行(UD或SD)对另一个Requester可见。

  ● 一旦使用SnpAttr=0请求访问该位置的事务使完全一致缓存中的脏Cache line对Requester可见,则不得将其从该Requester的可见性中删除。

  ● 必须确保CMO不会在Unique line上命中而终止。

这是必需的,因为在系统的缓存层次结构中,唯一副本可能是过时的,而相同位置的其他脏副本可能存在于其他位置。

Reasons for mismatched attributes

不匹配的属性可能由于各种原因而发生:

Upgrading of Non-shareable Cacheable accesses

  将Nonshareable_Cache_Maint属性设置为True的完全一致的Requesters将对页表中标记为不可共享缓存的位置的所有访问升级为可共享缓存。

  将Nonshareable_Cache_Maint属性设置为False的完全一致的Requesters将使用SnpAttr=0的事务来访问这些位置。

With this upgrade:

  ● 当访问不可共享的可缓存位置时,完全一致的Requesters将使用SnpAttr = 1的事务。

  ● 所有被标记为不可共享缓存的位置的snoops都必须以相同的方式执行,就好像该位置最初在页表中被标记为可共享缓存一样。此外,系统中任何Requesters发出的CMO将对由完全一致的Requesters或互连者缓存的副本进行操作。

  ● 它使在页表中标记为不可共享的位置上的缓存维护可以由一个PE执行,而这个PE与导致分配到缓存中的PE不同。

  将这些位置设置为不可共享缓存比高带宽IO一致性Requesters(如GPU)更可取,因为GPU在所有事务上都不会遇到任何 snoop filter查找。

  当IO一致性Requesters使用非监听事务(如WriteNoSnp)对位置进行存储时,RN-F或互连中该行的upgraded版本可能会过时。

  互连的责任是确保cache lines的过时副本不会对不能观察到它们的Agent可见,并确保必须观察它们的Agent的可见性中不会删除缓存行的最新副本。

Software protocol errors

  来自不同Agent的内存访问,如果具有不匹配的snoopability或cacheability属性,则可以被视为软件协议错误。软件协议错误会导致一致性丧失,并导致数据值损坏。

  在一个4KB内存区域中访问的软件协议错误不能导致另一个4KB内存区域中的数据损坏。

  对于保存在Normal memory中的位置,可以使用适当的软件缓存维护来将内存位置返回到定义的状态。

  使用不匹配的内存属性可能会导致RN-F观察到Snoop事务到RN-F将使用或以前使用Non-snoopable事务访问的同一地址。如果RN-F接收到一个它认为不可监听的位置的Snoop,它就不能用数据进行响应,而是发送SnpResp_I。
当使用不匹配的属性时,Snoop事务和RN-F发出的事务之间没有定义的关系。

2.7.8 CopyAtHome attribute

  CopyAtHome (CAH)是一个cache line属性,Home可以使用它来优化冗余数据传输。在system caches既不是完全包容的也不是完全排斥的,但根据系统的行为调整其包含策略的拓扑中,它很有用。

  在对Requesters的CompData和DataSepResp响应中,CAH值指示Home是否保留该行的副本。CAH值与Requesters中的行一起缓存。如果行在本地更新,则必须重置cache的CAH属性。

  当Requesters对该行执行 CopyBack Write或Combined CopyBack Write 时,CAH值将随请求一起发送。Home可以使用CAH值来指示它检查它是否仍然有该行的副本,如果有,它可以请求在没有CBWrData传输的情况下完成CopyBack Write事务。

CAH usage at Home
在CompData或DataSepResp响应来自Home, CAH属性设置为:

1:
  如果Home表示它保留了该Cache line的副本。如果Home为Requesters提供了的Unique copy,则Home中的副本是隐藏副本,系统中的任何代理都无法观察到。如果隐藏副本是Clean的,Home可以在任何时候 remove它,除非在发送了comp并且相关的comppack仍然未完成的窗口期间。如果它是Dirty的,Home是不允许删除隐藏的副本的行。

0:
如果Home不打算保留该行的副本或不支持优化的CopyBack Write流程。

当Home接收到之后的CopyBack Write请求时,它可以检查CAH属性以建立用于完成事务的事务流变化。下表展示了 CopyBack Write事务在Home中的CAH属性使用情况。
在这里插入图片描述

Request CAH valueCopyBack Write transactionDescription
1WriteBack,
WriteClean, or
WriteEvictFull
Home可采取下列其中一项措施:
● 使用CompDBIDResp响应以请求事务的写数据。
● 检查它是否仍然有该行的副本:
如果Home有这一行的拷贝
  期望Home使用Comp响应,请求在不传输数据的情况下完成事务,但不是必需的。如果Home不发送Comp,它必须发送CompDBIDResp,以请求事务的写数据。
如果Home没有该行的副本
 Home必须使用CompDBIDResp响应以请求事务的写数据
WriteEvictOrEvictHome允许执行以下操作之一:
● 使用CompDBIDResp响应以请求事务的写数据。
● 使用Comp响应,请求在没有数据传输的情况下完成事务。
如果Home有这一行的拷贝
  期望Home使用Comp响应,请求在不传输数据的情况下完成事务,但不是必需的。如果Home不发送Comp,它必须发送CompDBIDResp,以请求事务的写数据。
如果Home没有该行的副本
 Home必须使用CompDBIDResp响应以请求事务的写数据
0 or Not checkedWriteBack,
WriteClean, or
WriteEvictFull
Home必须使用CompDBIDResp响应以请求事务的写数据。
WriteEvictOrEvictHome可采取下列其中一项措施:
● 使用CompDBIDResp响应以请求事务的写数据。
● 使用Comp响应,请求在没有数据传输的情况下完成事务。

如果Home发出Comp而不是CompDBIDResp,它必须看到来自 Requester 的以下CompAck响应才能完成CopyBack Write事务。
(该表在后面章节会详细描述)
在这里插入图片描述

CAH usage at Request Node

Requester 或Snoopee以下方式处理CAH属性:

  ● 如果在CompData或DataSepResp响应中CAH属性的值为1,则允许(但不是必需) Requester 缓存CAH的值为1。
  ● 如果在CompData或DataSepResp响应中CAH属性的值为0,则Requester 不得缓存CAH的值为1
  ● Requester 不需要缓存传入的CAH值。如果没有缓存CAH值,则必须假定该值为0
  ● 当line或MTE tags是updated时,缓存必须将CAH属性清除为0。
  — 可以在任何时候将缓存中的CAH属性清除为0。(但是,如果不必要地清除缓存的CAH属性,则无法减少CopyBack write事务的写数据带宽。)
  — Requester 在发送WriteClean请求时不需要将CAH属性清除为0。
  ● 当Requester 有一条CAH值为0的cache line时,它不能发送将请求中的CAH属性设置为1的CopyBack事务。
  ● 当Requester 具有CAH值为1的cache line时,期望(但不是必需)发送CAH属性为1的CopyBack事务。发送了将CAH属性设置为1的CopyBack请求后,在事务完成之前,Requester不得进一步修改cache line。
  ● 在为 forwarding snoop提供CompData响应时,期望(但不要求)Snoopee将CAH值转发给Requester。如果Snoopee不转发CAH值,则在CompData响应中必须将其设置为0。
  ● 当向Home提供SnpRespData或SnpRespData以响应snoop时,期望Snoopee发送CAH值,但不是必需的。如果Snoopee不发送CAH值,则必须在数据响应中将其设置为0。

  对于CopyBack Write事务,CompAck响应中的Resp字段值是适用的,并且必须指示发送CompAck响应时Cache的状态。如果在CopyBack Write未完成时收到Snoop请求,则cache line状态可能与发送原始事务时的cache line状态不同。

Home必须使用CompAck响应中的cache line状态信息来确定是否可以公开它所拥有的该行的任何隐藏副本。关于Home可以对每个CompAck响应采取什么操作的详细信息,如下表:

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

ResponseResp[2:0]Description
CompAck_I0b000表示CopyBack请求已被取消。
响应中的cache状态不精确,必须忽略。
不会暴露任何隐藏的本地缓存行副本
CompAck_UC0b010发送响应时Cache line状态为UC。
期望,但不是要求,任何隐藏的缓存行的副本都是公开的,除非Unique copy仍然存在于其他地方。
CompAck_SC0b001发送响应时Cache line状态为SC。
预期的,但不是必需的,任何隐藏的缓存行的副本都是公开的。
CompAck_UD_PD0b110发送响应时Cache line状态为UD。
传递更新内存的责任。
期望,但不是要求,任何隐藏的缓存行的副本都是公开的,除非Unique copy仍然存在于其他地方。
CompAck_SD_PD0b111发送响应时Cache line状态为SD。
传递更新内存的责任。
预期的,但不是必需的,任何隐藏的缓存行的副本都是公开的。

a.当CopyBack Write事务是WriteClean时,Requester中仍然可以存在唯一副本。

如果Home保存了一个Cache line的隐藏副本,并且后来确定该行不存在其他副本:
  ● 如果隐藏的副本是Clean的,则期望Home(但不要求Home)公开该副本。
  ● 如果隐藏的副本是Dirty的,则Home需要公开该副本。

这篇关于AMBA-CHI协议详解(八)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(