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

news2025/1/10 23:24:41

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,感觉挺有意思的~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lv14 中断处理原理:接口及按键驱动 14

一、什么是中断 一种硬件上的通知机制&#xff0c;用来通知CPU发生了某种需要立即处理的事件 分为&#xff1a; 内部中断 CPU执行程序的过程中&#xff0c;发生的一些硬件出错、运算出错事件&#xff08;如分母为0、溢出等等&#xff09;&#xff0c;不可屏蔽 外部中断 外设…

OpenAI---提示词工程的6大原则

OpenAI在官方的文档里上线了Prompt engineering&#xff0c;也就是提示词工程指南&#xff0c;其中OpenAI有提到写提示词的6条大的原则&#xff0c;它们分别是&#xff1a; &#xff08;1&#xff09;Write clear instructions&#xff08;写出清晰的指令&#xff09; &#xf…

React18原理: 再聊Fiber架构下的时间分片

时间分片 react的任务可以被打断&#xff0c;其实就是基于时间分片的人眼最高能识别的帧数不超过30帧&#xff0c;电影的帧数差不多是在24浏览器的帧率一般来说是60帧&#xff0c;也就是每秒60个画面, 平均一个画面大概是16.5毫秒左右浏览器正常的工作流程是运算渲染&#xff…

DataEase

一. DataEase (一). 说明 安装文档 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。DataEase 支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表&#xff0c;并可以方便的与他人分…

私有化部署一个自己的网盘

效果 安装 1.创建目录 cd /opt mkdir -p kod/{db,site} cd /opt/kod 2.环境文件 vim db.env 内容如下 MYSQL_PASSWORD123456 MYSQL_DATABASEkodbox MYSQL_USERkodbox 3.编写docker-compose.yml vim docker-compose.yml 内容如下 version: 3.5services:db:image: mar…

C#系列-使用 Minio 做图片服务器实现图片上传 和下载(13)

1、Minio 服务器下载和安装 要在本地安装和运行 MinIO 服务器&#xff0c;你可以按照以下 步骤进行操作&#xff1a; 1. 访问 MinIO 的官方网站&#xff1a;https://min.io/&#xff0c;然后 点击页面上的”Download”按钮。 2. 在下载页面上&#xff0c;选择适合你操作系统的 …

假期作业 8

1、若有以下说明语句&#xff1a;int a[12]{1,2,3,4,5,6,7,8,9,10,11,12};char c’a’,d,g;则数值为4的表达式是&#xff08; B&#xff09;。 A&#xff09;a[g-c] B&#xff09;a[4] C&#xff09;a[‘d’-‘c’] D&#xff09;a[‘d’-c] 2、假…

二、数据结构

链表 单链表 https://www.acwing.com/problem/content/828/ #include<iostream> using namespace std; const int N 1e5 10; //head:头节点的指向 e[i]:当前节点i的值 ne[i]:当前节点i的next指针 idx:当前存储的点 int head, e[N], ne[N], idx;//初始化 void i…

mysq开启慢查询日志,对慢查询进行优化

1.创建实验的环境 创建对应的数据库&#xff0c;然后写脚本向数据库中写入400万条的数据 //创建实验用的数据库 CREATE DATABASE jsschool;//使用当前数据库 USE jsschool;//创建学生表 CREATE TABLE student (sno VARCHAR(20) PRIMARY KEY COMMENT 学生编号,sname VARCHAR(20…

《21天精通IPv4 to IPv6》第0天:IPv4至IPv6的必要性与互联网IP资源发展趋势浅谈

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【linux系统体验】-archlinux简易折腾

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化2.4 桌面面板美化 三、常用命令 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤&#xff1a; 磁盘分区安装 Linux内核配置系统&#xff08;…

JCIM | MD揭示PTP1B磷酸酶激活RtcB连接酶的机制

Background 内质网应激反应&#xff08;UPR&#xff09; 中的一个重要过程。UPR是由内质网中的三种跨膜传感器&#xff08;IRE1、PERK和ATF6&#xff09;控制的细胞应激反应&#xff0c;当内质网中的蛋白质折叠能力受到压力时&#xff0c;UPR通过减少蛋白质合成和增加未折叠或错…

vscode远程连接失败

目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境&#xff0c;以前一直很好用。 直到最近重装了系统之后&#xff0c;发现vscode没法对云服务器进行连接了&#xff0c;即使在远程主机添加了本地的公钥也不行。直接报错:…

vb.net极简版扫雷16*16,40雷源代码,仅供学习和参考

效果图&#xff1a;下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/14rrZujpQbfs-9HMw_lL-3Q?pwd1234 提取码&#xff1a;1234 源代码&#xff1a;只有120行 Imports System.Math Public Class Form1Dim Booms As New List(Of Point)Dim MyBooms As New List…

推荐系统|物品冷启动01_优化目标评价(包括基尼系数)

文章目录 物品冷启动冷启动的类型“新”按常规推送链路的角度按产品生态角度 物品冷启动的目标和评价指标作者侧用户侧 冷启动的衡量 物品冷启动 冷启动的类型 冷启动的内容种类包括很多方面&#xff0c;本文只介绍UGC的冷启动。 所谓UGC&#xff0c;就是User Generate Conte…

leetcode(二分查找)35.搜索插入位置(C++详细解释)DAY6

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…

利用YOLOv8 pose estimation 进行 人的 头部等马赛克

文章大纲 马赛克几种OpenCV 实现马赛克的方法高斯模糊pose estimation 定位并模糊:三角形的外接圆与膨胀系数实现实现代码实现效果参考文献与学习路径之前写过一个文章记录,怎么对人进行目标检测后打码,但是人脸识别有个问题是,很多人的背影,或者侧面无法识别出来人脸,那…

python从入门到精通(十):python常见标准库的使用

python数据分析和可视化基础 &#xff08;一&#xff09;Python 中处理日期和时间的模块time导入time模块time获取当前时间戳localtime获取当前时间struct_timeasctime获取格式化的时间ctime获取格式化的时间gmtime获取格式化的时间计时器功能strftime格式化日期strptime格式化…

顶级思维方式——认知篇三(财富与金钱)

目录 1、 什么是财富/财富的定义&#xff1f; 2、财富的影响 3、 财富意味着什么&#xff1f; 4、财富与幸福的关系 5、物质财富如何使用才有实际意义&#xff1f; 6、金钱的运作方式 7、【物质财富自由】后的选择 1、 什么是财富/财富的定义&#xff1f; 财富是一个多维…

MOMENTUM: 1

攻击机 192.168.223.128 目标机 192.168.223.146 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.146 开启了22 80端口 看一下web界面 随便打开看看 发现这里有个参数id&#xff0c;sql尝试无果&#xff0c;发现写入什么&#xff0c;网页显示…