DP读书:《openEuler操作系统》(九)从IPC到网卡到卡驱动程序

DP读书:《openEuler操作系统》从IPC到网卡到卡驱动程序)

    • 上章回顾_SPI
    • 上节回顾_TCP
  • 网卡驱动程序
      • 简介
        • 1.设备驱动
        • 2.总线与设备
        • 3.网卡及其抽象
      • 驱动程序的注册与注销
        • 1. 注册
        • 2. 注销
      • 设备初始化
        • 1. 硬件初始化
        • 2. 软件初始化
      • 设备的打开与关闭
        • 1. 设备的打开
        • 2. 设备的关闭

最近几天都在啃openEuler的文档,meta-yocto那里我啃了一下Bitbake构建的相关知识,过两天我发一些相关的内容。

上章回顾_SPI

DP读书:《openEuler操作系统》(七)FSCK与VFS虚拟文件系统
与同一进程中的同线程间通信不同,进程与进程间的通信主要发生在相互独立的地址空间里 与同一进程中的同线程间通信不同,进程与进程间的通信主要发生在相互独立的地址空间里 与同一进程中的同线程间通信不同,进程与进程间的通信主要发生在相互独立的地址空间里

通信机制涉及系统调用,往往速度较慢,也是程序耗时的主要原因之一。进程间通信机制主要包括:信号(Signal)、管道(Pipe)、信号量、共享内存(Shared Memory)、消息队列(Message Queue)、套接字(Socket)。对于 openEuler,线程是一种特殊的共享了地址空间的进程,在此处不需要严格区分。
简单可以通过 锁、信号量 来了解线程间通信;可以从 共享内存、消息传递 来了进程间通信。
SPI具体的关系图
共享信道

上节回顾_TCP

DP读书:《openEuler操作系统》(八)TCP、UDP与跨机器通讯
在跨机器通讯中,多个计算机通过网络互联组成计算集群 在跨机器通讯中,多个计算机通过网络互联组成计算集群 在跨机器通讯中,多个计算机通过网络互联组成计算集群

本节主要以跨机器通讯的基本原理和openEuler上的网络协议栈、网络子系统架构、网络设备驱动、套接字、数据传输的具体流程,上节简单介绍TPC/IP协议栈。
openEuler的技术架构图

在openEuler网络协议栈中,逻辑结构如下:
网络分层模型

软件角度openEuler网络协议栈分为三层:Socket层、TCP/IP层、驱动层。

网卡驱动程序

TCP/IP五层协议栈中的物理层和数据链路层协议通常集成在网卡中,而操作系统只负责实现网络层和传输层协议。


下面是正题:

简介

本节主要介绍网卡、总线及驱动的基本原理,以遵循PCIe总线规范的

1.设备驱动

设备驱动是一种软件程序,用于管理计算机硬件设备与操作系统之间的交互。在计算机系统中,硬件设备(如网卡、显卡、声卡等)通常无法直接与操作系统进行通信,因此需要设备驱动程序作为中间层,将操作系统的指令翻译成硬件设备能够理解的语言,并将硬件设备的状态信息反馈给操作系统。

对于遵循PCIe(Peripheral Component Interconnect Express)总线规范的设备(如网卡),其驱动程序需要特别设计以实现与PCIe总线的兼容。PCIe是一种高速串行计算机扩展总线标准,用于连接各种高速设备,如显卡、网卡、固态硬盘等。

2.总线与设备

在计算机体系结构中,总线(Bus)扮演着至关重要的角色,它是连接各个设备并实现它们之间通信的桥梁。总线可以看作是一条或多条数据通道,允许在多个设备之间传输数据、地址和控制信息。

总线的类型与特点

  1. 内部总线:连接计算机内部各部件,如CPU、内存、I/O设备等。
  2. 外部总线:连接计算机与外部设备,如打印机、显示器等。
  3. 通信总线:用于计算机之间或计算机与外部设备之间的远距离通信。

PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准。与早期的PCI和PCI-X总线相比,PCIe提供了更高的数据传输速率、更好的扩展性和更低的功耗。PCIe总线使用点对点拓扑结构,每个设备都有自己的专用连接,从而减少了数据冲突和提高了带宽利用率。

设备与总线的交互

设备驱动程序在设备与总线之间的交互中扮演着关键角色。驱动程序需要与总线进行通信,以配置设备、传输数据和处理错误。

  1. 设备初始化:驱动程序会向总线发送指令,初始化连接到总线的设备。这包括设置设备的参数、分配内存和I/O资源等。
  2. 数据传输:设备驱动程序通过总线进行数据的发送和接收。在PCIe总线中,数据以数据包的形式进行传输,驱动程序需要确保数据的正确封装和解析。
  3. 中断处理:当设备遇到错误或需要操作系统的关注时,它会通过总线发送中断信号。驱动程序需要捕获这些中断,并采取相应的处理措施。
发送指令
数据发送/接收
中断信号
设备驱动程序
总线
设备

总结

因此,总线是计算机系统中实现设备间通信的关键组成部分。PCIe总线是一种高速、高效的总线标准,为现代计算机系统提供了强大的连接能力。设备驱动程序通过与总线的交互,确保设备的正确配置、数据的可靠以及系统的稳定。

3.网卡及其抽象

网卡的角色

网卡,也被称为网络接口卡(NIC, Network Interface Card)或网络适配器,是计算机与网络之间的物理连接点。它的主要任务是处理所有进出计算机的数据,确保数据能够正确地在计算机和网络之间传输。

网卡的功能

  1. 数据转换:网卡能够将计算机内部的数据格式转换为网络可以理解的格式,以及将网络上的数据格式转换为计算机内部可以理解的格式。

  2. 数据过滤:网卡根据网络上的MAC地址信息,决定哪些数据应该被接收并传递给计算机,哪些数据应该被忽略。

  3. 物理连接:网卡通过物理介质(如以太网电缆)与外部网络建立连接。

转换为网络格式
转换为计算机格式
决定接收/忽略
建立连接
网卡NIC
数据转换
数据过滤
物理连接
网络
数据
外部网络

网卡的抽象

在操作系统和应用程序的层面上,网卡被抽象为一个或多个虚拟接口,这样软件就可以与网卡进行通信而不需要关心底层的硬件细节。这种抽象通常通过设备驱动程序来实现。

设备驱动程序的作用

  1. 识别和管理硬件资源:驱动程序能够识别网卡的存在,并管理其硬件资源,如寄存器、内存缓冲区等。

  2. 提供统一的接口:驱动程序为操作系统和应用程序提供一个统一的接口,使得它们可以以一致的方式与网卡进行通信。

  3. 处理数据传输:驱动程序负责将数据从计算机的内存缓冲区传输到网卡,以及从网卡接收数据并将其存储到计算机的内存缓冲区中。

  4. 错误处理:驱动程序还能够检测和处理与网卡相关的错误和异常情况。

也就是说

网卡是计算机网络通信的关键组件,它负责处理计算机与网络之间的数据交换。通过设备驱动程序的抽象,操作系统和应用程序可以与网卡进行高效、可靠的通信,而无需关心底层的硬件细节。这种抽象不仅简化了软件的开发和维护,还提高了系统的稳定性和兼容性。

驱动程序的注册与注销

1. 注册

驱动程序的注册是将其加载到内核中,并使其能够管理和控制相应的硬件设备的过程。注册过程通常发生在系统启动或设备插入时。对于PCIe设备(如网卡)的驱动程序,注册过程可能包括以下几个步骤:

  • 探测(Probe):当系统检测到PCIe设备时,会调用驱动程序的探测函数。这个函数负责初始化设备,分配必要的资源(如内存、中断等),并设置设备的数据结构。
  • 设备识别:驱动程序需要识别设备的特定信息,如设备ID、厂商ID等,以确保驱动程序与设备兼容。
  • 资源分配:驱动程序为设备分配必要的硬件资源,如I/O端口、内存地址空间、中断号等。
  • 功能实现:驱动程序实现与设备通信所需的功能,如读/写设备寄存器、处理设备中断等。
  • 接口提供:驱动程序向操作系统提供一组接口,以便上层软件可以与设备进行通信。
2. 注销

注销是驱动程序的相反过程,即将其从内核中卸载,并释放其管理和控制的硬件设备的相关资源。注销过程通常发生在系统关闭、设备移除或驱动程序被替换时。对于PCIe设备的驱动程序,注销过程可能包括以下几个步骤:

  • 资源释放:驱动程序释放之前为设备分配的所有资源,如内存、中断等。这确保了资源可以被其他设备或驱动程序重新使用。
  • 设备关闭:驱动程序关闭与设备的通信通道,并确保设备处于安全状态。这可能涉及关闭设备的电源或将其置于低功耗模式。
  • 数据结构清理:驱动程序清理与设备相关的数据结构,以确保没有内存泄漏或其他潜在问题。
  • 接口移除:驱动程序从操作系统中移除其提供的接口,从而断开上层软件与设备的连接。

驱动程序的注册和注销是确保硬件设备在系统中正确运行和管理的关键过程。注册过程使驱动程序能够识别和管理设备,并为其提供必要的资源;而注销过程则确保资源被正确释放,设备被安全关闭,以及与设备的连接被适当断开。

分配资源
写入值
监控
存储
存储
驱动程序
配置硬件资源
设置设备状态
检测硬件状态
初始化硬件队列
操作系统内核
设备寄存器
设备状态检查
发送队列
接收队列
内存地址 I/O端口 中断号
启动设备 设置工作模式
电源状态 温度 错误指示
待处理数据包
传输完成数据包

设备初始化

设备初始化是设备驱动程序中非常关键的一个环节,它涉及硬件和软件两个方面的准备工作。

1. 硬件初始化

硬件初始化是设备驱动程序中针对硬件设备进行的初始化操作。这通常包括以下几个步骤:

  • 配置硬件资源:驱动程序需要为设备配置所需的硬件资源,如内存地址、I/O端口、中断号等。这通常涉及到与操作系统的内核进行交互,以确保这些资源被正确分配并可以被设备使用。

  • 设置设备状态:在设备启动时,驱动程序需要设置设备的初始状态,如电源状态、工作模式等。这通常涉及到向设备的寄存器写入特定的值,以启动设备或将其置于特定的工作状态。

  • 检测硬件状态:驱动程序需要检测设备的硬件状态,以确保设备正常工作。这可能包括检查设备的电源状态、温度、错误指示等。

  • 初始化硬件队列:对于需要处理数据传输的设备,如网卡,驱动程序需要初始化相关的硬件队列,如发送队列、接收队列等。这些队列用于存储待处理的数据包或传输完成的数据包。

2. 软件初始化

软件初始化是设备驱动程序中与软件相关的初始化操作。这通常包括以下几个步骤:

  • 数据结构初始化:驱动程序需要初始化与设备相关的数据结构,如设备描述符、缓冲区描述符等。这些数据结构用于在软件层面管理设备的状态和数据。

  • 中断处理函数注册:如果设备使用中断来通知驱动程序有事件发生(如数据传输完成、错误发生等),驱动程序需要注册相应的中断处理函数。这样,当设备产生中断时,操作系统可以调用正确的处理函数来处理中断事件。

  • 初始化软件队列:与硬件队列类似,驱动程序可能需要初始化与设备相关的软件队列,用于在软件层面管理待处理的任务或数据。

  • 初始化设备驱动程序接口:驱动程序需要提供一组接口函数,供操作系统或上层软件调用。在软件初始化阶段,这些接口函数需要进行初始化,以便后续可以正确响应外部请求。

也就是说

设备初始化是设备驱动程序中涉及硬件和软件的准备。硬件初始化主要关注硬件资源的配置、设备状态的设置、硬件状态的检测以及硬件队列的初始化。而软件初始化则主要关注数据结构的初始化、中断处理函数的注册、软件队列的初始化以及设备驱动程序接口的初始化。

这些初始化操作对于确保设备能够正常工作以及提高系统的稳定性和可靠性至关重要。 (有用)

设备的打开与关闭

1. 设备的打开

设备的打开通常是指通过特定的操作或命令使设备从关闭或休眠状态变为可用状态。在操作系统和设备驱动的层面上,这通常涉及以下步骤:

  • 识别设备:系统需要识别要打开的设备,这通常通过设备名称、标识符或路径来实现。
  • 检查设备状态:在打开设备之前,系统可能会检查设备的当前状态,例如是否已连接、是否已损坏、是否需要更新驱动程序等。
  • 分配资源:系统为设备分配必要的资源,如内存缓冲区、I/O端口、中断等。这些资源是设备正常工作所必需的。
  • 初始化设备:设备驱动程序执行必要的初始化操作,使设备进入已知和稳定的状态。这可能包括设置设备的配置参数、清空缓冲区等。
  • 提供访问接口:一旦设备被打开并初始化,系统就可以通过设备驱动程序提供的接口来访问设备。这些接口允许上层应用程序与设备进行通信。
2. 设备的关闭

设备的关闭是指将设备从可用状态变为关闭或休眠状态。在操作系统和设备驱动的层面上,关闭设备通常涉及以下步骤:

  • 释放资源:系统释放之前为设备分配的所有资源,以便其他应用程序可以使用这些资源。这包括内存缓冲区、I/O端口、中断等。
  • 停止数据传输:如果设备正在进行数据传输,系统需要确保所有待处理的数据传输都已完成或已取消。这可以防止数据丢失或损坏。
  • 执行关闭操作:设备驱动程序执行必要的关闭操作,使设备进入安全状态。这可能包括关闭设备的电源、断开与设备的连接等。
  • 更新设备状态:系统更新设备的状态信息,以反映设备已关闭。这可以帮助系统和其他应用程序了解设备的当前状态。

总结

设备的打开和关闭是操作系统和设备驱动程序管理设备的基本操作。通过正确地打开和关闭设备,可以确保设备在需要时可用,并在不需要时释放资源。这有助于提高系统的稳定性、可靠性和性能。同时,开发人员和用户在编写和使用与设备相关的代码时,应该遵循正确的打开和关闭设备的流程,以避免潜在的问题和错误。 (有用)

额,,,,这是一个SystemD的有关例子:

假设您需要在一个大型企业环境中管理多个网络设备(如路由器交换机等),以确保网络正常运行和安全。在这种情况下,您可以考虑将系统D用于实现网络设备的监控和管理功能。具体步骤如下:

  1. 安装并启动系统D服务:首先,您需要在系统中安装并启动systemD服务,以便能够监视和控制网络设备。您可以使用以下命令来执行此操作:
sudo systemctl install systemd-networkd && sudo systemctl enable systemd-networkd
  1. 定义网络设备监听配置文件:接下来,您需要创建一个网络设备监听配置文件,其中包含要监视的网络设备和相应的监听规则。例如,对于一个路由器,您可能希望监视其接口和流量统计信息。为此,您可以在/etc/systemd/network目录下创建名为<router_name>.netdev的配置文件,并在.ini文件中添加以下内容:
[Match]
Name=wlan0
[Network]
DNS=yes
Address=static
Gateway=192.168.1.1
[Route]
Destination=0.0.0.0/0
[Device]
MAC=<router_mac>

其中,<router_name>是路由器的名称,<router_mac>是路由器的MAC地址;其他参数根据您的需求进行设置。请注意,这里只是示例配置文件的一部分内容,实际配置应根据具体情况进行调整。
3. 启用网络设备监听功能:在完成网络设备监听配置文件的创建后,您需要启用系统的网络设备监听功能。这可以通过在终端中输入以下命令来完成:

sudo systemctl start systemd-networkd@<router_name>.<netdev>

其中,<router_name>是路由器的名称,是之前创建的配置文件名。这将使系统D开始监视所选网络的流量和状态变化。
4. 设置报警通知:为了及时发现和处理网络故障或异常情况,您可以将报警通知设置为发送电子邮件或其他通知方式。在系统D控制台中,您可以查看并编辑每个网络设备的报警通知设置。具体操作方法为:打开控制台应用程序(通常位于菜单栏中的“应用程序”或“控制中心”选项卡中),然后选择要设置的网络设备并更改相应属性。
5. 使用API进行高级操作:如果您需要对网络设备进行更高级的操作(如修改配置文件、清除日志等),可以使用systemD提供的API函数库进行编程开发。这些函数允许您通过C语言或其他编程语言编写自定义脚本或应用程序来实现特定功能。


在大型企业环境中管理多个网络设备时,使用Systemd(通常称为systemd)是一个很好的选择,因为systemd是一个初始化系统和服务管理器,用于Linux操作系统。它可以用来启动、监视和管理系统进程,包括网络服务。然而,systemd本身并不直接提供网络设备监控和管理的功能;它更多的是一个服务管理器,用于控制其他服务和守护进程。

对于网络设备的监控和管理,通常我们会使用专门的网络管理工具和平台,如NAGIOS、Zabbix、Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)等。这些工具可以与systemd集成,以便在系统启动时自动运行,并且可以通过配置规则来监控网络设备的状态、性能、流量等。

如果您打算使用systemd来启动和管理网络设备的监控服务,您可能需要做的是:

  1. 安装并配置网络监控工具:选择适合您需求的网络监控工具,并按照其官方文档进行安装和配置。

  2. 创建systemd服务单元文件:创建一个systemd服务单元文件(.service文件),用于定义如何启动、停止和管理您的网络监控工具。

  3. 启用并启动服务:使用systemctl命令启用并启动您的服务。

  4. 配置网络监控规则:在您的网络监控工具中配置相应的规则,以监控目标网络设备的状态、性能和流量。

下面是一个简化的例子,展示了如何为一个网络监控工具创建一个systemd服务单元文件:

# /etc/systemd/system/network-monitoring-tool.service
[Unit]
Description=Network Monitoring Tool
After=network.target

[Service]
Type=simple
ExecStart=/path/to/your/network-monitoring-tool --config /path/to/config/file
Restart=on-failure
User=network-monitoring-user
Group=network-monitoring-group

[Install]
WantedBy=multi-user.target

在这个例子中,network-monitoring-tool是您选择的网络监控工具的路径,--config参数指向该工具的配置文件。UserGroup是运行该服务所使用的用户和组。

要启用并启动该服务,您可以使用以下命令:

sudo systemctl daemon-reload
sudo systemctl enable network-monitoring-tool.service
sudo systemctl start network-monitoring-tool.service

然后,您可以通过配置网络监控工具来添加对网络设备的监控规则。

请注意,这里提供的信息是一个高级概述,并且具体的步骤和命令将取决于您选择的网络监控工具和您的具体需求。在实施之前,请确保阅读并遵循您所选工具的官方文档。

Systemd
安装网络监控工具
创建systemd服务单元文件
启用并启动服务
配置网络监控规则
监控网络设备
启动systemd服务
网络设备监听
收集数据
分析数据
生成报告
优化网络配置

终于敲完了,一个 SSH稳定监控的例子,使用SystemD,感觉挺有意思的~

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

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

相关文章

「小明赠书活动」2024第三期《一书读懂物联网:基础知识+运行机制+工程实现》

⭐️ 赠书 - 《一书读懂物联网&#xff1a;基础知识运行机制工程实现》 《一书读懂物联网》以物联网工程技术为核心内容&#xff0c;结合数据处理的流程和技术&#xff0c;介绍了物联网的基础知识、运行机制及工程实现。 ⭐️ 内容简介 - 《一书读懂物联网&#xff1a;基础知识…

【后端高频面试题--设计模式上篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 什么是设计模式&#xff1f;怎么理解设计模式&#xff1f; 设计模式是在软件设计中&#xff0c…

OpenSSL 创建自签名证书

前言 Openssl 是一个方便的实用程序,用于创建自签名证书。您可以在所有操作系统(如 Windows、MAC 和 Linux 版本)上使用 OpenSSL。 自签名证书 创建我们自己的根 CA 证书和 CA 私钥(我们自己充当 CA)创建服务器私钥以生成 CSR使用我们的根 CA 和 CA 私钥创建具有 CSR 的…

甘肃旅游服务平台:技术驱动的创新实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

写的太通透了!大模型自省式 RAG 与 LangGraph 的实践!

本文讲解了自省式 RAG 的基础原理以及基于 LangGraph 的实践演示 自省式 RAG 与 LangGraph 重要链接 关于 Self-RAG 和 CRAG 的教程手册 演示视频 研究背景 由于大多数大型语言模型&#xff08;LLMs&#xff09;通常只针对大量公共数据进行周期性训练&#xff0c;它们往往…

电路设计(16)——纪念馆游客进出自动计数显示器proteus仿真

1.设计要求 设计、制作一个纪念馆游客进出自动计数显示器。 某县&#xff0c;有一个免费参观的“陶渊明故里纪念馆”&#xff0c;游客进出分道而行&#xff0c;如同地铁有确保单向通行的措施。在入口与出口处分别设有红外检测、声响、累加计数器装置&#xff0c;当游人进&#…

ChatGLM2-6B模型的win10测试笔记

ChatGLM2-6B介绍&#xff1a; 介绍 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了如下新特性&#xff1a; 更强大的性能&#xff1a;基于 ChatGLM 初…

服务异步通信

服务异步通信 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失…

app逆向-⽹络请求库okhttp3

文章目录 一、前言二、应用GET请求1、添加权限AndroidManifest.xml2、添加依赖okhttp33、编写界面文件activity_main.xml4、编写Activity代码5、效果 三、应用POST请求四、okhttp3请求拦截器 一、前言 OkHttp是由Square公司开发的用于Java和Android的开源HTTP客户端库。它被广…

leetcode链表相关题目

文章目录 1.移除链表元素方法1&#xff1a;方法2 2.合并两个有序链表3.链表的中间节点方法1方法2 4.反转单链表方法1方法2 5.分割链表6.链表中的倒数第k个节点方法1&#xff1a;方法2: 7.环形链表的约瑟夫问题8.链表的回文结构9.相交链表方法1方法2&#xff1a; 10.环形链表11.…

python接口自动化(三)--如何设计接口测试用例(详解)

在开始接口测试之前&#xff0c;我们来想一下&#xff0c;如何进行接口测试的准备工作。或者说&#xff0c;接口测试的流程是什么&#xff1f;有些人就很好奇&#xff0c;接口测试要流程干嘛&#xff1f;不就是拿着接口文档直接利用接口 测试工具测试嘛。其实&#xff0c;如果…

关于物理机ping不通虚拟机问题

方法一 设置虚拟机处于桥接状态即可&#xff1a;&#xff08;虚拟机->设置->网络适配器&#xff09;&#xff0c;选择完确定&#xff0c;重启虚拟机即可。 方法二 如果以上配置还是无法ping通&#xff1a;&#xff08;编辑->虚拟网络编辑器&#xff09; 首先查看主机网…

MySQL(基础)

第01章_数据库概述 1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多…

C++11中的简化声明

auto 用于自动类型推断&#xff0c;显示定义变量&#xff1a; typeid typeid推导出来的是字符串&#xff0c;只能看不能用&#xff0c;通过打印来查看变量的类型&#xff0c;用法如上。 decltype 同样是用来自动推导类型&#xff0c;与auto的区别是&#xff0c;auto在定义时必…

DAY9.

1.选择芯片型号 2. 3. 4. 5. 6. 7.

MOCO动量编码

参考&#xff0c;推荐阅读 李沐论文精读系列三&#xff1a;MoCo、对比学习综述&#xff08;MoCov1/v2/v3、SimCLR v1/v2、DINO等&#xff09;_moco 对比学习-CSDN博客 背景 1. MOCO CVPR 2020 2. 对比学习&#xff1a;无监督学习的一种&#xff0c;重点学习同类实例中的共同…

第78讲 修改密码

系统管理实现 修改密码实现 前端 modifyPassword.vue&#xff1a; <template><el-card><el-formref"formRef":model"form":rules"rules"label-width"150px"><el-form-item label"用户名&#xff1a;&quo…

网络安全的今年:量子、生成人工智能以及 LLM 和密码

尽管世界总是难以预测&#xff0c;但网络安全的几个强劲趋势表明未来几个月的发展充满希望和令人担忧。有一点是肯定的&#xff1a;2024 年将是非常重要且有趣的一年。 近年来&#xff0c;人工智能&#xff08;AI&#xff09;以令人难以置信的速度发展&#xff0c;其在网络安全…

Vue源码系列讲解——虚拟DOM篇【四】(优化更新子节点)

目录 1. 前言 2. 优化策略介绍 3. 新前与旧前 4. 新后与旧后 5. 新后与旧前 6. 新前与旧后 7. 回到源码 8. 总结 1. 前言 在上一篇文章中&#xff0c;我们介绍了当新的VNode与旧的oldVNode都是元素节点并且都包含子节点时&#xff0c;Vue对子节点是 先外层循环newChil…

Illegal escape character in string literal

问题 笔者进行Android项目开发&#xff0c;编译器提示报错 Illegal escape character in string literal详细问题 textView.setText(“A\B”); 解决方案 修改代码为A\B textView.setText(“A\B”) 产生原因 问题产生的原因是在字符串字面值中使用了非法的转义字符。在…