当前位置: 首页 > news >正文

NDIS小端口驱动(四)

NDIS中断相关

1. 注册和取消注册中断: 微型端口驱动程序调用 NdisMRegisterInterruptEx 来注册中断。 驱动程序分配并初始化 NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS 结构,以指定中断特征和函数入口点,驱动程序将结构传递给 NdisMRegisterInterruptEx,驱动程序调用 NdisMDeRegisterInterruptEx 函数以释放以前使用 NdisMRegisterInterruptEx 分配的资源。

2. 处理 NDIS 微型端口驱动程序的中断:当 NIC 或与 NIC 共享中断的另一台设备生成中断时,NDIS 调用 MiniportInterrupt 函数。如果基础 NIC 未生成中断,MiniportInterrupt 应立即返回 FALSE。 否则,它在处理中断后返回 TRUE 。

微型端口驱动程序应在其 MiniportInterrupt 函数中尽可能少地执行工作。 它应将 I/O 操作延迟到 MiniportInterruptDPC 函数。 NDIS 调用 MiniportInterruptDPC 来完成中断的延迟处理。若要在 MiniportInterrupt 返回后将其他 DPC 排队,微型端口驱动程序将设置 MiniportInterrupt 函数的 TargetProcessors 参数的位。

若要从 MiniportInterrupt 或 MiniportInterruptDPC 请求其他 DPC,微型端口驱动程序调用 NdisMQueueDpc 函数。微型端口驱动程序可以调用 NdisMQueueDpc ,以请求其他处理器的其他 DPC 调用。

3. 与中断同步:如果微型端口驱动程序的 MiniportInterrupt 函数将资源(如 NIC 寄存器或状态变量)与以较低 IRQL 运行的另一个 MiniportXxx 函数共享,则 MiniportXxx 函数必须调用 NdisMSynchronizeWithInterruptEx。 此调用可确保微型端口驱动程序的 MiniportSynchronizeInterrupt 函数以同步且多处理器安全的方式访问共享资源。

4. 中断调解:为了减少中断数,许多 NIC 使用中断审查。 使用中断审查时,NIC 硬件在收到数据包后不会立即生成中断。 相反,硬件会等待更多数据包到达或超时过期,然后再生成中断。 硬件供应商指定最大数据包数、超时间隔或其他中断审查算法。数据包的测量往返时间是确定两个终结点之间的网络带宽的最常用技术之一。 但是,启用中断审查后,接收数据包不会立即产生中断,因此,特定数据包的感知往返时间将大于平均时间。

为了准确测量数据包的往返时间,NDIS 提供了按需禁用和启用中断审查的功能。所有 NDIS 6.0 及更高版本的微型端口驱动程序都必须支持 OID_GEN_INTERRUPT_MODERATION OID。 如果微型端口驱动程序不支持中断审查,则驱动程序必须在NDIS_INTERRUPT_MODERATION_PARAMETERS结构的 InterruptModeration 成员中指定 NdisInterruptModerationNotSupported。

NDIS 6.0 及更高版本的微型端口驱动程序必须同时支持 OID_GEN_INTERRUPT_MODERATION OID 集和查询请求。 设置请求指示微型端口驱动程序启用或禁用中断审查,查询请求报告中断审查的当前状态。默认情况下,支持中断审查的微型端口驱动程序应启用此功能,除非注册表中的 InterruptModeration 标准关键字 (keyword) 禁用此功能。

微型端口适配器 OID 请求

NDIS 定义对象标识符 (OID) 值来标识微型端口适配器参数,其中包括设备特征、可配置的设置和统计信息等操作参数。

对于 NDIS 6.1 及更高版本的微型端口驱动程序,NDIS 提供 直接 OID 请求接口。 直接 OID 请求路径支持经常查询或设置的 OID 请求。 对于 NDIS 驱动程序,直接 OID 请求接口是可选的。

对于 NDIS 6.80 及更高版本的微型端口驱动程序,NDIS 提供 同步 OID 请求接口。 同步 OID 请求路径支持需要同步的 OID 或不应由筛选器驱动程序(如 RSSv2 OID)排队的 OID。 同步 OID 请求接口对于 NDIS 驱动程序是可选的,但如果微型端口驱动程序播发对 RSSv2 的支持,则是必需的。

1. 微型端口适配器 OID 请求序列化

对微型端口适配器的所有 OID 请求都由 NDIS 序列化,直接 OID 请求除外,这些请求在设计上未序列化。 在完成任何挂起的请求之前,微型端口适配器不会收到新的 OID 请求。 因此,微型端口适配器必须立即完成 OID。

备注:建议在 1000 毫秒或 1 秒内完成 OID 请求,这样用户就不会注意到性能有任何延迟。 有关 OID 请求计时的特定信息,请参阅 NdisTimedOidComplete 驱动程序验证程序规则。

此 OID 序列化规则的一个例外是,对于使用 WDI 的Wi-Fi微型端口适配器,如果它们花费的时间太长而无法完成以前的 OID,则可能会看到第二个 OID 请求。 以下示例说明在这种情况下会发生什么情况:

  • 第一个 OID 请求传递到 WDI 微型端口适配器;
  • NIC 不会在驱动程序指定的时间限制内响应 OID;
  • WDI 调用驱动程序的 MINIPORT_WDI_ADAPTER_HANG_DIAGNOSE 回调函数来收集有关 NIC 的诊断数据;
  • 第一个 OID 不再被视为阻止序列化。 这意味着 WDI 微型端口适配器现在可以接收其他 OID 请求,即使第一个 OID 已序列化。 但是,这些其他 OIDS 也会序列化,这意味着 WDI 微型端口适配器不会同时处理 (第一个仍挂起的 OID以及第二个 OID) ;

2. 处理微型端口适配器中的 OID 请求

NDIS 调用微型端口驱动程序的 MiniportOidRequest 函数以提交 OID 请求以查询或设置驱动程序中的信息。 NDIS 代表它自己调用 MiniportOidRequest 函数,或者代表调用 NdisOidRequest 或 NdisFOidRequest 函数的过度驱动程序调用 MiniportOidRequest 函数。

NDIS 传递 MiniportOidRequest 指向包含请求信息的 NDIS_OID_REQUEST 结构的指针。 请求结构包含一个OID_Xxx标识符,该标识符指示请求的类型以及用于定义请求数据的其他成员。

Timeout 成员指定请求的超时时间(以秒为单位)。 如果超时在驱动程序完成请求之前过期,NDIS 可以重置驱动程序或取消请求。

RequestId 成员指定请求的可选标识符。 微型端口驱动程序可以将状态指示的 RequestId 成员设置为从关联 OID 请求的 RequestId 成员获取的值。 通常,微型端口驱动程序可以忽略此成员。 如果驱动程序必须设置此成员,则特定 OID 的引用页将提供所需的值。 有关状态指示的详细信息,请参阅 适配器状态指示。

成功处理 OID 集请求的微型端口驱动程序必须在从 OID 集请求返回时在 NDIS_OID_REQUEST 结构中设置 SupportedRevision 成员。 SupportedRevision 成员通知发起方驱动程序支持的修订请求。 例如,微型端口驱动程序可以创建Xxx_REVISION_2结构,提供适合Xxx_REVISION_1结构的值,并使用零填充结构的其余部分。 微型端口驱动程序将在 SupportedRevision 成员中报告Xxx_REVISION_1。 在这种情况下,可支持Xxx_REVISION_2的协议驱动程序将使用微型端口驱动程序支持的Xxx_REVISION_1信息。 

微型端口驱动程序可以通过返回成功或失败状态同步完成 OID 请求。

微型端口驱动程序可以通过返回NDIS_STATUS_PENDING异步完成 OID 请求。 在这种情况下,微型端口驱动程序必须调用 NdisMOidRequestComplete 函数才能完成操作。

如果 MiniportOidRequest 返回NDIS_STATUS_PENDING,则在挂起的请求完成之前,NDIS 不会使用针对适配器的另一个请求调用 MiniportOidRequest 。

NDIS 可以调用微型端口驱动程序的 MiniportCancelOidRequest 函数来取消 OID 请求。

3. 微型端口适配器直接 OID 请求

为了支持直接 OID 请求路径,微型端口驱动程序在NDIS_MINIPORT_DRIVER_CHARACTERISTICS结构中提供 MiniportXxx 函数入口点,NDIS 为微型端口驱动程序提供 NdisMXxx 函数。

直接 OID 请求接口类似于标准 OID 请求接口。 例如, NdisMDirectOidRequestComplete 和 MiniportDirectOidRequest 函数类似于 NdisMOidRequestComplete 和 MiniportOidRequest 函数。

注意 NDIS 6.1 支持用于直接 OID 请求接口的特定 OID。 不支持 NDIS 6.1 和某些 NDIS 6.1 OID 之前存在的 OID。

微型端口驱动程序必须能够处理未序列化的直接 OID 请求。 与标准 OID 请求接口不同,NDIS 不会将直接 OID 请求与通过直接 OID 接口或标准 OID 请求接口发送的其他请求序列化。 此外,微型端口驱动程序必须能够在 IRQL <= DISPATCH_LEVEL 处理直接 OID 请求。

若要支持直接 OID 请求接口,请使用标准 OID 请求接口的文档。下表显示了直接 OID 请求接口中的函数与标准 OID 请求接口之间的关系。

直接 OID 函数标准 OID 函数
MiniportDirectOidRequest    MiniportOidRequest
MiniportCancelDirectOidRequest   MiniportCancelOidRequest
NdisMDirectOidRequestComplete    NdisMOidRequestComplete

4. 微型端口适配器同步 OID 请求

为了支持同步 OID 请求路径,微型端口驱动程序在调用 NdisMRegisterMiniportDriver 函数时,在 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 结构中提供 MiniportSynchronousOidRequest 函数入口点。

对于微型端口驱动程序, 同步 OID 请求接口 不同于常规和直接 OID 请求接口,即微型端口驱动程序不必注册异步完成回调函数。 这是因为路径的同步性质。 口。

备注: NDIS 6.80 支持与同步 OID 请求接口配合使用的特定 OID。 不支持 NDIS 6.80 和某些 NDIS 6.80 OID 之前存在的 OID。 

若要支持同步 OID 请求接口,请使用标准 OID 请求接口的文档。 下表显示了同步 OID 请求接口和标准 OID 请求接口中的函数之间的关系:

同步 OID 函数标准 OID 函数
MiniportSynchronousOidRequest    MiniportOidRequest
微型端口驱动其它信息 

1. 微型端口适配器状态指示

微型端口驱动程序调用 NdisMIndicateStatusEx 函数来报告微型端口适配器的状态更改。 微型端口驱动程序将 NdisMIndicateStatusEx 传递指向包含状态信息的 NDIS_STATUS_INDICATION 结构的指针。

状态指示包括用于标识状态类型和状态更改原因的信息。

微型端口驱动程序应将 SourceHandle 成员设置为 NDIS 传递给 MiniportInitializeEx 函数的 MiniportAdapterHandle 参数的句柄。 如果状态指示与 OID 请求相关联,微型端口驱动程序可以设置 DestinationHandle 和 RequestId 成员,以便 NDIS 可以提供特定协议绑定的状态指示。

2. 微型端口适配器设备 PnP 事件通知

NDIS 调用微型端口驱动程序的 MiniportDevicePnPEventNotify 函数,以通知驱动程序即插即用 (PnP) 事件。

NDIS 提供描述 PnP 事件的事件代码。 代码可以指示适配器已意外从系统中删除,或者主机系统的电源配置文件已更改。

如果事件代码指示电源配置文件已更改,则 NDIS 还会指示更改的类型。 系统使用电池电源运行,或者系统使用交流电源运行。

微型端口驱动程序应相应地调整适配器设置。 

3. 微型端口适配器挂起检查和重置操作

对于所有 NDIS 6.83 及更高版本的驱动程序,不建议检查挂起 (CFH) 和重置操作。 

NDIS 调用 NDIS 微型端口驱动程序的 MiniportCheckForHangEx 函数来检查 NDIS 适配器的操作状态,该适配器表示网络接口卡 (NIC) 。 MiniportCheckForHangEx 检查适配器的内部状态,如果检测到适配器无法正常运行,则返回 TRUE 。

默认情况下,NDIS 大约每 2 秒调用 一次 MiniportCheckForHangEx 。 如果 MiniportCheckForHangEx 返回 TRUE,NDIS 将调用 NDIS 微型端口驱动程序的 MiniportResetEx 函数。 如果默认超时值 2 秒太小,微型端口驱动程序可以在初始化时设置不同的值,如下所示:

  • 将 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构的 CheckForHangTimeInSeconds 成员设置为非零值;
  • 在 NdisMSetMiniportAttributes 函数的 MiniportAttributes 参数中传递 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构;

CheckForHangTimeInSeconds 的值应大于微型端口驱动程序的初始化时间。 但是,如果驱动程序初始化所花费的时间超过 CheckForHangTimeInSeconds 秒 ,则此超时将过期,导致 NDIS 调用驱动程序的 MiniportCheckForHangEx 函数。 如果 MiniportCheckForHangEx 返回 TRUE,则 NDIS 将调用驱动程序的 MiniportResetEx 函数。 因此,应将驱动程序的 MiniportCheckForHangEx 函数与驱动程序初始化同步,以便在驱动程序尚未完成初始化时 ,MiniportCheckForHangEx 不会返回 TRUE 。

如果微型端口驱动程序在对 MiniportCheckForHangEx 的连续两次调用中未完成 OID 请求,则 NDIS 可以调用驱动程序的 MiniportResetEx 函数。 对于某些 OID 请求,如果驱动程序在对 MiniportCheckForHangEx 的连续四次调用中未完成请求,则 NDIS 会调用 MiniportResetEx。

重置操作不会影响 微型端口适配器的操作状态。 此外,重置操作正在进行时,适配器的状态可能会更改。 例如,当正在进行重置操作时,NDIS 可能会调用驱动程序的 MiniportPause 函数。 在这种情况下,驱动程序可以按任何顺序完成重置或暂停操作,同时遵循每个操作的正常要求。

对于重置操作,驱动程序可能会使传输请求数据包失败,也可以让数据包保持排队并稍后完成。 但是,应注意,在传输数据包挂起时,过分的驱动程序无法完成暂停操作。

微型端口驱动程序可以通过返回成功或失败状态同步完成重置请求。 驱动程序可以通过返回 NDIS_STATUS_PENDING异步完成重置请求。 在这种情况下,驱动程序必须调用 NdisMResetComplete 才能完成操作。

4. NDIS 6.83 及更高版本中的检查挂起和重置操作:
在 NDIS 6.83 之前的版本中,由于电池使用时间问题,不建议对 Always On、Always Connected (AOAC) 系统执行检查挂起 (CFH) 和重置操作。 但是,驱动程序仍可以通过实现可选的 MiniportCheckForHangEx 和 MiniportResetEx 回调函数在其他非 AOAC Windows 系统上使用 CFH。

从 NDIS 6.83 开始,不建议 在所有 Windows 系统上使用这些回调函数,而不考虑电源功能。 尽管在 NDIS 6.83 及更高版本中使用 CFH 不是徽标测试冲突,但 NDIS 驱动程序应使用下表来获取有关其用法的指导。

调用方建议说明
面向 AOAC 系统的驱动程序    不得实现    由于定期检查挂起活动而导致电池使用时间问题
面向 Windows Server 系统的驱动程序    不得实现    CPU 压力大时导致问题
虚拟 (仅限软件) 微型端口驱动程序    不得实现    没有硬件就无法重置
其他新的 NDIS 6.83 及更高版本的驱动程序不应实现
其他现有的 NDIS 6.82 和更早代码不需要更改,但应考虑在将来的版本中删除“挂起检查”和“重置”

5. NDIS 管理信息和 OID

每个微型端口驱动程序都包含自己的 管理信息库 (MIB) ,这是一个信息块,驱动程序在其中存储管理实体可以查询或设置的动态配置信息和统计信息。 以太网多播地址列表是配置信息的示例。 接收的广播数据包数是统计信息的一个示例。 MIB 中的每个信息元素称为对象。 为了引用每个此类托管对象,NDIS (OID) 定义对象标识符 。 因此,如果管理实体想要查询或设置特定的托管对象,则必须为该对象提供特定的 OID。

MIB 跟踪三类对象:

  • 所有 NDIS 微型端口驱动程序通用的对象;
  • 特定于给定介质类型(如以太网)的所有 NDIS 微型端口驱动程序的对象;
  • 特定于特定供应商实现的对象;

WDK 文档的“网络参考”部分记录了 常规 和必需的媒体特定 OID。 特定网络接口卡 (NIC) 驱动程序的实现特定 OID 应在给定微型端口驱动程序随附的文档中列出和说明。

对象被归类为 操作特征 (例如,多播地址列表) 或 统计信息 接收的广播数据包,它们也分类为必需或可选。 常规类或特定于媒体的类的所有操作特征对象都是强制性的,但只有一些统计信息对象是必需的。 所有特定于实现的对象都分类为必需对象。

相关文章:

NDIS小端口驱动(四)

NDIS中断相关 1. 注册和取消注册中断&#xff1a; 微型端口驱动程序调用 NdisMRegisterInterruptEx 来注册中断。 驱动程序分配并初始化 NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS 结构&#xff0c;以指定中断特征和函数入口点&#xff0c;驱动程序将结构传递给 NdisMRegister…...

用户态网络缓冲区设计

基于数组实现的环形缓冲区&#xff1a; 优点 使用固定大小的连续空间做用户态缓冲区&#xff0c;利用了内存访问的局部性&#xff0c;可以提高缓存命中率&#xff0c;提高程序性能&#xff0c;在处理大量数据时&#xff0c;缓存的利用率对性能有着很大的影响 正是基于性能的…...

Linux运维工程师基础面试题整理(三)

Linux运维工程师基础面试题整理(三) 1. 文件inode号有什么用?2. 文件的权限怎么设置与管理?3. 如何SSH免密配置?4. 如何快速部署一个web服务?5. 如何更新Linux系统内核?6. centos中如何配置本地yum源?7.Linux 防火墙如何简单配置?8. 有哪些工具可以批量管理Linux服务器…...

基于单片机与传感器技术的汽车起动线路设计

摘 要&#xff1a;在以发动机为动力源的汽车中&#xff0c;起动系统承担起使发动机由非工作状态进入工作状态的重要作用&#xff0c;属于发动机的附属系统。在传统汽车起动系统的基础上提出将单片机与传感器技术运用到起动控制线路中&#xff0c;通过传感器采集发动机工作状态信…...

C#如何通过反射获取外部dll的函数

在C#中&#xff0c;你可以使用反射&#xff08;Reflection&#xff09;来加载外部的DLL&#xff08;动态链接库&#xff09;并获取其中的函数&#xff08;在C#中通常称为方法&#xff09;。但是&#xff0c;请注意&#xff0c;反射主要用于访问类型信息&#xff0c;并且对于非托…...

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…...

解决1万条数据前端渲染不卡的问题

万级数据前端渲染优化 解决思路requestAnimationFrame完整代码 解决思路 将数据分组&#xff0c;通过定时器或requestAnimationFrame两种方式分组渲染到Dom上 requestAnimationFrame 渲染数据-动画requestAnimationFram方法 使用requestAnimationFrame可以将动画的每一帧绘制…...

如何编写一个API——Python代码示例及拓展

下面是一个必备的API的demo,包括用户认证、数据库交互、错误处理和更复杂的异步任务处理。使用Flask来创建一个RESTful API,涉及用户注册、登录、以及获取用户信息的功能。 示例1:编写API 安装依赖 首先,你需要安装以下库来支持示例的功能: pip install flask flask-c…...

UMPNet: Universal Manipulation Policy Network for Articulated Objects

1. 摘要 UMPNet是一个基于图像的策略网络&#xff0c;能够推理用于操纵铰接物体的闭环动作序列。该策略支持6DoF动作表示和可变长度轨迹。 为处理多种类的物体&#xff0c;该策略从不同的铰接结构中学习&#xff0c;并泛化到未见过的物体或类别上。该策略是以自监督探索的方式…...

高通 Android 12/13冻结屏幕

冻结屏幕很多第一次听到以为是Android一种异常现象&#xff0c;实则不然&#xff0c;就是防止用户在做一些非法操作导致问题防止安全漏洞问题。 1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等&#xff0c;不知道请看这篇文章&#xff08;Touch事件传递流…...

C++实现图的存储和遍历

前言 许多新手友友在初学算法和数据结构时&#xff0c;会被图论支配过。我这里整理了一下图论常见的存储和遍历方式&#xff0c;仅供参考。如有问题&#xff0c;欢迎大佬们批评指正。 存储我将提到四种方式&#xff1a;邻接矩阵、vector实现邻接表、数组模拟单链表实现的前向星…...

AI--构建检索增强生成 (RAG) 应用程序

LLM 所实现的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。 典型的 RAG 应用程序有两个主要组件 索引&#xff1a;从源中提取数据并对其进行索引的管道。这通常在线下…...

QT7_视频知识点笔记_4_文件操作,Socket通信:TCP/UDP

1.事件分发器&#xff0c;事件过滤器&#xff08;重要程度&#xff1a;一般&#xff09; event函数 2.文件操作&#xff08;QFile&#xff09; 实现功能&#xff1a;点击按钮&#xff0c;弹出对话框&#xff0c;并且用文件类读取出内容输出显示在控件上。 #include <QFi…...

智慧社区管理系统:打造便捷、安全、和谐的新型社区生态

项目背景 在信息化、智能化浪潮席卷全球的今天&#xff0c;人们对于生活品质的需求日益提升&#xff0c;期待居住环境能与科技深度融合&#xff0c;实现高效、舒适、安全的生活体验。在此背景下&#xff0c;智慧社区管理系统应运而生&#xff0c;旨在借助现代信息技术手段&…...

CustomTkinter:便捷美化Tkinter的UI界面(附模板)

CustomTkinter是一个基于Tkinter的Python用户界面库。 pip3 install customtkinter它提供了各种UI界面常见的小部件。这些小部件可以像正常的Tkinter小部件一样创建和使用&#xff0c;也可以与正常的Tkinter元素一起使用。 它的优势如下&#xff1a; CustomTkinter的小部件和…...

使用MicroPython和pyboard开发板(15):使用LCD和触摸传感器

使用LCD和触摸传感器 pybaord的pyb对LCD设备也进行了封装&#xff0c;可以使用官方的LCD显示屏。将LCD屏连接到开发板&#xff0c;连接后。 使用LCD 先用REPL来做个实验&#xff0c;在MicroPython提示符中输入以下指令。请确保LCD面板连接到pyboard的方式正确。 >>…...

c++20 std::jthread 源码简单赏析与应用

std::jthread 说明&#xff1a; std::jthread 是 C20 中引入的一个新特性&#xff0c;它是线程库中的一个类&#xff0c;专门用于处理 std::thread 与 std::stop_token 和 std::stop_source 之间的交互&#xff0c;以支持更优雅和安全的线程停止机制。 std::stop_source控制…...

自动化测试里的数据驱动和关键字驱动思路的理解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须…...

【30天精通Prometheus:一站式监控实战指南】第6天:mysqld_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…...

浅析智能体开发(第二部分):智能体设计模式和软件架构

大语言模型&#xff08;LLM&#xff09;驱动的智能体&#xff08;AI Agent&#xff09;展现出许多传统软件所不具备的特征。不仅与传统软件的设计理念、方法、工具和技术栈有显著的差异&#xff0c;AI原生&#xff08;AI Native&#xff09;的智能体还融入了多种新概念和技术。…...

Unity学习笔记---Transform组件

组件介绍 Transform组件在每个游戏对象中都存在&#xff0c;且只存在一个。该组件保存了游戏对象的位置、平移、旋转、缩放等信息。 组件相关方法 //获取当前游戏对象的Transform组件this.transform; getObject.transform; GetComponent<Transform>();//属性 gameObje…...

springboot+jsp校园理发店美容美发店信息管理系统0h29g

前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式&#xff0c;支持现金、挂帐、会员卡&#xff0c;同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…...

css - sass or scss ?

总的来说&#xff0c;Sass 和 SCSS 提供的功能是一样的&#xff0c;选择哪种语法主要取决于你的个人或团队的偏好。...

html5 笔记01

01 表单类型和属性 input的type属性 单行文本框: typetext 电子邮箱 : typeemail 地址路径 : type url 定义用于输入数字的字段: typenumber 手机号码: typetel 搜索框 : typesearch 定义颜色选择器 : typecolor 滑块控件 : typerange 定义日期 :typedate 定义输入时间的控件…...

E5063A是德科技e5063a网络分析仪

181-2461-8938产品概述&#xff1a; 简  述&#xff1a; E5063A 是低成本网络分析仪&#xff0c;可提供优化的性能和功能&#xff0c;适用于测试简单的无源器件&#xff0c;例如天线、电缆、滤波器和 PCB 等。它利用工业标准 ENA 系列始终如一的测量架构&#xff0c;能够极…...

【星海随笔】微信小程序(二)

WXML 模板语法 - 数据绑定 在data中定义页面的数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可&#xff1a; Page({data: {// 字符串类型的数据info: init data,// 数据类型的数据msgList: [{msg: hello},{msg: world}]} })Mustache 语法的格式 把 …...

Python采集安居客租房信息

Python采集安居客租房信息 一、需求介绍二、完整代码一、需求介绍 本次采集的需求就是获取到页面中的所有信息: 将数据采集好之后保存为如下csv文件: 爬取的流程不再展开分析,完整代码附后。 二、完整代码 import csvimport requests from lxml import etreeclass Anju…...

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…...

Linux 信号捕捉与处理

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; ​ 目录 前言 1. 信号的处理时机 1.1用户…...

桂林电子科技大学计算机工程学院、广西北部湾大学计信学院莅临泰迪智能科技参观交流

5月18日&#xff0c;桂林电子科技大学计算机工程学院副院长刘利民、副书记杨美娜、毕业班辅导员黄秀娟、广西北部湾大学计信学院院长助理刘秀平莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技副总经理施兴、广西分公司郑廷和、梁霜、培训业务部孙学镂…...