【ARM】SMMU系统虚拟化整理
目录
1.MMU的基本介绍
1.1 特点梳理
2.功能
DVM interface
PTW interface
2.1 操作流程
2.1.1 StreamID
2.1.2 安全状态:
2.1.3 HUM
2.1.4 可配置的操作特性
Outstanding transactions per TBU
QoS 仲裁
2.2 Cache结构
2.2.1 Micro TLB
2.2.2 Macro TLB
1.MMU的基本介绍
内部文档整理
MMU-500 是一个系统级的内存管理单元(Memory Management Unit, MMU),它负责将输入地址转换为输出地址,这一过程基于 MMU-500 内部寄存器和转换表中的地址映射和内存属性信息。MMU-500使用的是ARM SMMU架构v2,以下是 MMU-500 的主要功能和组件的详细解释:
-
地址转换阶段:
- 地址从输入地址转换到输出地址的过程被称为地址转换的一个阶段。
-
支持 ARM 架构:
- MMU-500 支持 ARMv7 和 ARMv8 架构定义的转换表格式。
-
转换类型:
- 第一阶段转换:将输入的虚拟地址(Virtual Address, VA)转换为输出的物理地址(Physical Address, PA)或中间物理地址(Intermediate Physical Address, IPA)。
- 第二阶段转换:将输入的 IPA 转换为输出的 PA。
- 组合阶段转换:将输入的 VA 转换为输出的 IPA,然后将该 IPA 转换为 PA。MMU-500 为每个转换阶段执行转换表遍历。
-
多级地址查找:
- 地址转换可以跨越两个阶段,即第一阶段和第二阶段。地址转换可能需要多次转换表查找,每次转换表查找被描述为地址查找的一个级别。每个第一阶段转换的级别可能需要额外的第二阶段转换。
-
内存属性定义:
- 除了将输入地址转换为输出地址外,地址转换的每个阶段还定义了输出地址的内存属性。在两阶段转换中,第二阶段转换可以修改第一阶段转换定义的属性。
-
转换阶段的禁用或旁路:
- 地址转换的一个阶段可以被禁用或旁路,MMU-500 可以为禁用和旁路的转换阶段定义内存属性。
-
上下文识别:
- MMU-500 使用请求主设备(requesting master)的输入来识别上下文。这个上下文告诉 MMU-500 用于转换的资源,包括要使用的转换表。
-
第一阶段转换:
- 通常与应用程序和操作系统级别的操作相关联,VA 范围可以被分割成两个子范围,由转换表基寄存器(Translation Table Base registers)TTBR0 和 TTBR1 转换,每个都有相关的转换表和控制寄存器。
-
支持的页面大小:
- ARMv7 架构:MMU-500 支持所有页面大小。
- ARMv8 架构:除了 16KB 页面粒度外,MMU-500 支持所有页面大小。
-
安全和非安全转换上下文:
- 第一阶段转换支持安全和非安全转换上下文。通常,适当的操作系统:
- 定义内存中的第一阶段转换的转换表,用于其安全状态。
- 配置 MMU-500 以配置第一阶段转换,然后启用转换。
- 第一阶段转换支持安全和非安全转换上下文。通常,适当的操作系统:
-
第二阶段转换:
- 仅支持非安全(Non-secure)转换上下文。典型的两级地址转换使用模型如下:
- 非安全操作系统定义第一阶段地址转换,用于应用程序级和操作系统级操作。它假设自己是从处理器使用的 VAs 映射到物理内存系统中的 PAs,但实际上它将 VAs 映射到 IPAs。这个mapping的含义是 OS使用的translation table中的address是处于IPA address空间的,然后需要stage2来将IPA转换成PA。
- 管理程序(hypervisor)定义第二阶段地址转换,将 IPAs 映射到 PAs。这是其虚拟化一个或多个非安全客户操作系统的一部分。
- 仅支持非安全(Non-secure)转换上下文。典型的两级地址转换使用模型如下:
-
转换后备缓冲器(TLB):
- MMU-500 可以在 TLB 中缓存转换表查找的结果,这意味着 MMU-500 也支持 TLB 维护操作。
-
参考文档:
- 有关 MMU-500 支持的架构特性的更多信息,请参阅 ARM® 系统内存管理架构规范。
- 有关地址转换(包括转换表格式和 TLB 维护操作)的更多信息,请参阅:
- ARM® 架构参考手册,ARMv7-A 和 ARMv7-R 版。
- ARM® 架构参考手册,ARMv8,针对 ARMv8-A 架构配置。
-
MMU-500 的关键组件:
- 转换缓冲单元(Translation Buffer Unit, TBU):包含一个 TLB,用于缓存页表。MMU-500 为每个连接的主设备实现一个 TBU,设计为靠近主设备本地。
- 转换控制单元(Translation Control Unit, TCU):控制和管理地址转换。MMU-500 实现一个单一的 TCU。
- 互连:将多个 TBU 连接到 TCU。
下图给出一个系统中SMMU集成的例子:
1.1 特点梳理
-
地址虚拟化:
- 为基于 ARM 处理器的系统和其他总线主设备提供地址虚拟化。
-
支持的转换:
- 第一阶段转换(Stage 1)。
- 第二阶段转换(Stage 2)。
- 第一阶段后跟第二阶段转换(Stage 1 followed by Stage 2)。
-
可编程服务质量(QoS):
- 允许根据服务质量对请求进行仲裁。
-
分布式转换支持:
- 支持多达 32 个 TBUs(Translation Buffer Units)的分布式转换。
-
转换支持的地址范围:
- 支持 32 位到 49 位的虚拟地址范围和 48 位的物理地址范围。
-
多事务上下文:
- 支持多达 128 个可配置的上下文和可编程页面大小。MMU-500 使用主设备输入流 ID 来映射每个上下文。
-
转换支持:
- 支持 ARMv7 VMSA 的第一阶段转换。
- 支持 ARMv8 AArch32 的第一阶段和第二阶段转换。
- 支持 ARMv8 AArch64 的第一阶段和第二阶段转换,包括 4KB 和 64KB 粒度。
- 支持第一阶段后跟第二阶段的转换。
-
页面大小限制:
- 除了 ARMv8 架构定义的 16KB 页面粒度外,支持所有页面大小。
-
PTW 请求的仲裁:
- 使用已编程的 QoS 值对来自不同 TBUs 的 PTW(Page Table Walk)请求进行仲裁。
-
页面表遍历的缓存:
- 存储中间页面表遍历数据。
-
TLB 中的页面表项缓存:
- 在 TLB 中缓存页面表项,以提高地址转换的效率。
-
TLB 命中下未命中(HUM)支持:
- 支持在 TLB 命中时处理未命中的情况。
-
可配置的 PTW 深度:
- 使用并行 PTWs 配置 PTW 深度。
-
TLB 失效:
- 通过 AMBA 4 DVM 信号或寄存器编程进行 TLB 失效。
-
转换和保护检查支持:
- 包括 TrustZone® 扩展支持。
-
故障处理、记录和信号:
- 包括需求分页和对暂停模型的支持。
-
AMBA 从属接口:
- 每个 TBU 支持一个 ACE-Lite 从属接口,用于连接需要地址转换的总线主设备。
-
AMBA 主接口:
- 支持 ACE-Lite 和 DVM 的主设备事务或 PTWs。
-
AXI4 接口:
- 用于编程的 AXI4 接口。
-
TLB 缓存的两个级别:
- 宏 TLB(Macro TLB)。
- 微 TLB(Micro TLB)。
-
错误检测和失效:
- TLB 和遍历缓存 RAM 支持单比特错误检测和错误检测后的失效。上下文消歧多 FIFO(MFIFO)RAM 支持单比特错误检测和校正。
-
调试和性能监控事件:
- 提供调试和性能监控功能。
-
TCU 核心时钟速度:
- TCU 核心可以在 TCU 外部接口时钟速度的一半运行。
-
预取缓冲器:
- 预取下一个 4K 或 64K leaf page entry,以减少延迟。
-
IPA2PA 缓存:
- 加速第一阶段后跟第二阶段的转换。
-
支持每个 TBU 主接口的未完成事务:
- 支持每个 TBU 主接口多达 256 个未完成事务。
-
服务质量方案中优先级提升支持:
- 作为 QoS 方案的一部分,支持优先级提升。
2.功能
DVM interface
MMU-500 的 ACE-Lite 接口的 AC 信道连接到由 CCI 驱动的 AC 信道或支持 DVM 消息的 ACE 兼容的从属接口。ARM 建议使用 DVM 信道进行 TLB 维护操作。如果系统无法访问 DVM 信道,则必须将 acvalid 信号连接到低电平,并且可以使用编程接口进行 TLB 维护操作。
当您将 MMU-500 配置为提供专用的 AXI 信道以执行 PTW 时,AC 信道必须是 PTW 信道的一部分。
注意:
- 如果没有配置专用信道,请使用 TBU0 AXI 接口后缀,并确保它连接到 TCU。
- 此接口支持以下内容:
- AC 信道(地址信道)
- 44 位宽的 AC 信道连接到 TCU。
- 注意:CD 信道(数据信道)没有连接到 MMU-500。
- AC 信道(地址信道)
PTW interface
在 MMU-500 中,可以有一个专用接口提供对内存的访问以进行页表遍历(PTWs)。
如果 MMU-500 配置为支持 PTWs 的专用接口,您必须将与 PTWs 相关联的从属接口的读地址和读数据信道连接到 MMU-500 PTW 信道。在这种配置中,PTW 信道包含 "_ptw" 后缀。例如,araddr_ptw 和 acaddr_ptw。
注意:
- 专用 PTW 接口上的写接口不使用。
- 如果 MMU-500 配置为不支持 PTWs 的专用接口,PTWs 将在连接到 TBU0 的 ACE-Lite 接口上执行。
MMU-500的Clock和power domain
当TBU0与TCU sharing相同的clock或power domain时。
2.1 操作流程
MMU-500 通过以下逻辑处理步骤路由每个地址转换:
- 安全状态确定。
- 上下文确定。
- 如果转换未缓存在 TLB 中,则进行页表遍历。
- 保护检查。
- 根据编程生成或合并属性。
您可以配置 MMU-500 绕过事务处理过程的事务,或者无论转换状态如何都使事务发生故障。
MMU-500 的主要功能是根据存储在转换表中的地址映射和内存属性信息,提供地址和内存属性转换。MMU-500 执行以下步骤以实现此目的:
- 接收地址事务,以及安全和流信息。
- 使用接收到的安全信息以及事务来确定事务的附加处理步骤。接收到的安全信息是事务发起者的安全状态。根据发起者的安全状态是安全还是非安全,MMU-500 分别使用安全或非安全的寄存器集合进行事务的附加处理。见第 2-14 页上的“安全确定”。
- 使用 (S)CR0.CLIENTPD 确定是否需要流匹配。如果 CLIENTPD 被禁用,则绕过事务。
- 使用接收到的流信息以及事务来确定要应用于事务的转换机制。转换机制可以是绕过、第一阶段转换、第二阶段转换,或第一阶段后跟第二阶段转换。
- 如果在上下文映射之前转换过程中识别出故障,则将故障信息添加到全局故障状态寄存器。如果故障是在上下文映射之后识别出的,则 MMU-500 将故障信息添加到上下文银行的故障状态寄存器中。 当启用中断报告时,故障会触发中断。您可以通过清除故障状态寄存器来清除中断。
注意: MMU-500 不支持配置错误。它将全局故障状态寄存器中的 CAF 位视为 RAZ(保留未用)。
2.1.1 StreamID
2.1.2 安全状态:
在确定了 SSD 索引之后,SSD 表包含从 0 到 2^SSD 索引信号宽度 - 1 的位。 您必须按照以下方式确定位的状态:
- SSD 索引可以是可编程的或不可编程的,并且可以处于安全或非安全状态。默认情况下,SSD 索引处于不可编程的非安全状态。
- 非可编程索引列表
- 对于这些索引,主设备的安全状态是定义好的,不会改变。
- 您必须指定那些安全状态始终为安全的主设备的索引。
- 可编程索引列表
- 您可以编程可编程索引的安全状态。
- 您必须确定那些安全状态可编程的每个主设备的默认状态。
注意:
- 一个条目不能在多个列表中重复。
- 您必须为每个配置至少指定一个可编程或固定的非安全条目。
- 索引的数量由配置的 SSD 索引信号宽度决定。例如,如果 SSD 索引信号宽度为 6 位,则有 64 个索引,范围是 0-63。您必须将索引编程为以下之一:
- 可编程安全。
- 可编程非安全。
- 非可编程安全。
- 未编程的索引默认为不可编程非安全。
MMU-500 支持可以访问安全和非安全 TLB 的安全调试 TLB 访问。 SSD 表最多有 32Kb 的空间,该空间被分成 32 个部分,每个 TBU 分配 1Kb。 例如,TBU0 空间是从 0-1Kb,TBU1 空间是从 1-2Kb,TBU2 空间是从 2-3Kb。 每个 TBU 生成的 SSD 索引最多为 10 位,被索引到分配给 TBU 的 1Kb 空间中。 您必须使用这些信息来编程 SSD 表。
注意:
- 当 integ_sec_override 信号被设置为零时,安全确定描述才有效。
- 所有实现和集成寄存器都可以通过非安全访问来访问。这包括以下全局空间 0 寄存器:
- 辅助配置寄存器(ACR)。
- 调试寄存器。
- 您不能访问任何安全寄存器。
- 所有事务都被视为来自非安全主设备
2.1.3 HUM
Hit-Under-Miss (HUM) 是一种特性,它可以翻译 TLB 失效事务,并将事务传递给下游从属设备,如果翻译后的 TLB 失效事务结果为 TLB 命中。HUM 允许在 MMU-500 为先前发生 TLB 失效的事务执行翻译时,对于随后的事务如果出现 TLB 命中,可以响应主设备。以下是 HUM 对读写事务的特性:
- 如果事务是读访问,HUM 将自动启用。
- 如果事务是写操作,HUM 的启用或禁用基于写缓冲区的深度。您可以在配置期间指定写缓冲区的深度。
- 如果写缓冲区的深度为零,则 HUM 自动禁用。
- 如果写缓冲区的深度非零,只有当来自失效事务的写数据可以适应写缓冲区时,写命中事务才会被翻译。
- 未完成的失效事务的数量由写缓冲区的深度决定。例如,如果缓冲区的深度为四,则它可以容纳两个长度为二的事务。每个缓冲区条目仅保存事务的一个节拍,即使它是窄宽度的。
HUM 特性提高了系统处理连续内存访问的效率,尤其是在有大量 TLB 失效和命中混合的情况下。
2.1.4 可配置的操作特性
Outstanding transactions per TBU
未完成事务定义为:
- 生成物理地址访问并被从属设备接受的事务。
- 写入或读取响应被暂停的事务。 对于每个 TBU,MMU-500 支持每个写入和读取访问各 256 个未完成事务。
MMU-500 在主设备的访问导致 TLB 失效时生成 PTW。然而,根据配置,MMU-500 支持每个 TBU 同时进行 8 或 16 个这样的并行 PTW。如果有超过 8 或 16 个 PTW 挂起,通道上的 TLB 失效表明 MMU-500 不能在接受写入或读取通道上的额外事务。
QoS 仲裁
PTW 由 TCU 为多个 TBU 发起。因此,当 TCU 中有多个未完成事务时,最高质量的 TBU 会被赋予优先权。MMU-500 重用为 PTWs 编程的 QoS 值。
arqosarb 信号,从 MMU-500 到 CCI 的边带信号,在 TCU 中所有 PTW 读取事务中具有最高的 QoS 值。
在地址转换中,MMU-500 使用已编程的服务质量(Quality of Service, QoS)值。
对于个别的预取访问,MMU-500 使用命中事务的 QoS 值。
对于具有相同 QoS 值的事务,MMU-500 采用先到先服务(First-Come, First-Served, FCFS)模型进行处理。这意味着在相同优先级级别上,事务将按照它们到达的顺序被处理。
地址宽度
进入的地址宽度固定为49位,其中 A[48] 指定虚拟地址子范围。您必须将所有未使用的位连接到零。输出地址宽度为48位,AC地址总线的宽度为48位。
注意 MMU-500不支持地址宽度大于49位的外设。
2.2 Cache结构
2.2.1 Micro TLB
2.2.2 Macro TLB
预取缓冲区 MMU-500
会提前提取 4KB 和 64KB 大小的页面到预取缓冲区中。这减少了未来 PTWs(页表步进走)的延迟。您可以配置预取缓冲区的深度。 预取缓冲区是一个单一的四路组相联缓存,您可以根据上下文启用或禁用它。预取缓冲区与宏观 TLB 缓存共享 RAM。
Page walk缓存
MMU-500 缓存部分 PTWs 以减少 TLB 失效时的 PTW 数量。PTW 缓存存在于 TCU 中,第一阶段和第二阶段的第二级 PTWs 被缓存在 PTW 缓存中。
IPA 到 PA 缓存
MMU-500 实现了一个从 IPA(中间物理地址)到 PA(物理地址)的缓存,用于第一阶段后跟第二阶段的转换。 IPA 到 PA 缓存是一个单一的四路组相联缓存,您可以根据上下文启用或禁用它。IPA 到 PA 缓存与 PTW 缓存共享 RAM。
来个赞兄弟姐妹们~
下期预告:SMMU集成指导
相关文章:
【ARM】SMMU系统虚拟化整理
目录 1.MMU的基本介绍 1.1 特点梳理 2.功能 DVM interface PTW interface 2.1 操作流程 2.1.1 StreamID 2.1.2 安全状态: 2.1.3 HUM 2.1.4 可配置的操作特性 Outstanding transactions per TBU QoS 仲裁 2.2 Cache结构 2.2.1 Micro TLB 2.2.2 Macro…...
PYQT按键长按机制
长按按键不松开也会触发 keyReleaseEvent 事件,是由于操作系统的键盘事件处理机制。大多数操作系统在检测到键盘按键被长按时,会重复生成按键按下 (keyPressEvent) 和按键释放 (keyReleaseEvent) 事件。这种行为通常被称为“键盘自动重复”。 通过检测 …...
SAPUI5基础知识15 - 理解控件的本质
1. 背景 经过一系列的练习,通过不同的SAPUI5控件,我们完成了对应用程序界面的初步设计,在本篇博客中,让我们一起总结下SAPUI5控件的相关知识点,更深入地理解SAPUI5控件的本质。 通常而言,一个典型UI5应用…...
十七、【机器学习】【非监督学习】- K-均值 (K-Means)
系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...
算法力扣刷题记录 五十六【501.二叉搜索树中的众数】
前言 二叉搜索树操作,继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)…...
分布式搜索引擎ES-Elasticsearch进阶
1.head与postman基于索引的操作 引入概念: 集群健康: green 所有的主分片和副本分片都正常运行。你的集群是100%可用 yellow 所有的主分片都正常运行,但不是所有的副本分片都正常运行。 red 有主分片没能正常运行。 查询es集群健康状态&…...
低代码与传统编程:快速高质量构建系统的比较与方法
在信息技术飞速发展的今天,企业对软件系统的需求不断增加。然而,如何在保证高质量的前提下快速构建系统成为了一个关键问题。本文将深入探讨低代码(Low-Code)开发与传统代码编程的区别,并探讨如何利用这两种方法快速高…...
WebRTC音视频-环境搭建
目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1:VScode安装 2.2:MobaXterm安装 3:WebRTC服务器环境搭建 3.1:安装openssh服务器 3.2:安装Node.js 3.3:coturn穿透和转发服务器 3.3.1&a…...
Memcached开发(八):使用PHP进行操作
目录 1. 安装与配置 1.1 安装Memcached服务器 1.2 安装PHP的Memcached扩展 2. 基本操作 2.1 连接Memcached服务器 2.2 设置与获取数据 2.3 删除数据 2.4 检查数据是否存在 2.5 添加和替换数据 3. 高级操作 3.1 批量操作 3.2 数据计数器 3.3 CAS(Check …...
[Spring Boot]Protobuf解析MQTT消息体
简述 本文主要针对在MQTT场景下,使用Protobuf协议解析MQTT的消息体 Protobuf下载 官方下载 https://github.com/protocolbuffers/protobuf/releases网盘下载 链接:https://pan.baidu.com/s/1Uz7CZuOSwa8VCDl-6r2xzw?pwdanan 提取码:an…...
什么是Mappers?Mappers的作用是什么?
在软件开发中,“mappers” 通常指的是数据映射器(Data Mappers),它们的主要作用是在应用程序的数据持久化层(通常是数据库或其他持久化存储)与应用程序的业务逻辑之间建立一个映射层。 具体来说࿰…...
python-多任务编程
2. 多任务编程 2.1 多任务概述 多任务 即操作系统中可以同时运行多个任务。比如我们可以同时挂着qq,听音乐,同时上网浏览网页。这是我们看得到的任务,在系统中还有很多系统任务在执行,现在的操作系统基本都是多任务操作系统,具备…...
IDEA创建Java工程、Maven安装与建立工程、Web工程、Tomcat配置
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
使用工作流产生高质量翻译内容的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
笔记:Few-Shot Learning小样本分类问题 + 孪生网络 + 预训练与微调
内容摘自王老师的B站视频,大家还是尽量去看视频,老师讲的特别好,不到一小时的时间就缕清了小样本学习的基础知识点~Few-Shot Learning (1/3): 基本概念_哔哩哔哩_bilibili Few-Shot Learning(小样本分类) 假设现在每类…...
初学Mybatis之 CRUD 增删改查
namespace 中的包名要和 Dao/Mapper 接口的包名一致 select:选择,查询语句 同理,还有 insert、update、delete 标签 id:对应的 namespace 中的方法名 resultType:sql 语句执行的返回值 parameterType:…...
Kali Linux APT 设置指南:如何控制软件包更新行为
在我浏览 CSDN 的问答社区时,我发现一篇求助内容是一位用户对于如何在使用 APT 更新时避免更新 Arduino 这个问题感到困惑。这激发了我写这篇博客的灵感。我希望通过这篇文章,帮助那些在 Kali Linux 上使用 APT 管理软件包更新的朋友们,特别是…...
Android 10.0 Settings 加载流程
一、系统设置首页 代码路径:packages/app/Settings/ 1 主界面加载: <!-- Alias for launcher activity only, as this belongs to each profile. --><activity-alias android:name"Settings"android:label"string/settings_la…...
mysql的索引、事务和存储引擎
目录 索引 索引的概念 索引的作用 作用 索引的副作用 创建索引 创建索引的原则和依据 索引的类型 创建索引 查看索引 删除索引 drop 主键索引 普通索引 添加普通索引 唯一索引 添加唯一索引 组合索引 添加组合索引 查询组合索引 全文索引 添加全文索引 …...
基于trace_id实现SpringCloudGateway网关的链路追踪
之前写的两篇关于基于 trace_id 的链路追踪的文章: 基于trace_id的链路追踪(含Feign、Hystrix、线程池等场景)基于trace_id的链路追踪(ForkJoinPool场景) 一、引言 在之前的文章中,我们讨论了基于 trace…...
Windows 11 version 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2024)
Windows 11 version 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2024) Windows 11, version 22H2,企业版 arm64 x64 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作者…...
【C语言】动态内存管理(上)
文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例(malloc和free) 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要,为…...
【BUG】已解决:ModuleNotFoundError: No module named‘ pip‘
已解决:ModuleNotFoundError: No module named‘ pip‘ 目录 已解决:ModuleNotFoundError: No module named‘ pip‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…...
网络安全-网络安全及其防护措施11
51.网络容量规划 网络容量规划的概念和重要性 网络容量规划: 是指根据业务需求和预期增长,合理规划和设计网络的带宽、设备和资源,以满足未来网络流量和服务质量的需求。通过有效的网络容量规划,确保网络性能稳定和用户体验良好…...
使用IDEA编写lua脚本并运行
下载lua https://github.com/rjpcomputing/luaforwindows/releases 是否创建桌面快捷方式:我们的目标是使用IDEA编写lua脚本,所以不需要勾选。后面需要的话,可以到安装目录下手动创建快捷方式 环境变量自动配置 安装后会自动配置好环境变量…...
CentOS 7 安装MySQL 5.7.30
CentOS 7 安装MySQL卸载(离线安装) 安装配置MySQL之前先查询是否存在,如存在先卸载再安装 rpm -qa|grep -i mysql rpm -qa|grep -i mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64如下命令找到直接 rm -rf 删除(删除…...
Bash 学习摘录
文章目录 1、变量和参数的介绍(1)变量替换$(...) (2)特殊的变量类型export位置参数shift 2、引用(1)引用变量(2)转义 3、条件判断(1)条件测试结构(…...
GD32 MCU是如何进入中断函数的
用过GD32 MCU的小伙伴们都知道,程序是顺序执行的,但当有中断来的时候程序会跳转到中断函数,执行完中断函数后程序又继续回到原来的位置继续执行,那么你们知道MCU是如何找到中断函数入口的吗? 今天我们就以GD32F303系列…...
Ruby 循环
Ruby 循环 在编程中,循环是一种常用的控制结构,它允许我们重复执行一段代码多次。Ruby 作为一种灵活的编程语言,提供了多种循环方法,包括 while、until、for、each 和 loop 等。本文将详细介绍 Ruby 中的循环机制,并通…...
三字棋游戏(C语言详细解释)
hello,小伙伴们大家好,算是失踪人口回归了哈,主要原因是期末考试完学校组织实训,做了俄罗斯方块,后续也会更新,不过今天先从简单的三字棋说起 话不多说,开始今天的内容 一、大体思路 我们都知…...
wordpress网站投放广告/百度推广后台登陆首页
#!/bin/bash# 说明:站点添加工具[独立代码、数据库]# 日期:2012-03-31 22:31:21 [6]# 用法: x dn.ext# 补充:mpm-itk、vsftpd、mysql# 需要手动删除mysql数据库、vsftpd用户# buildhttpdpwd buildmysqlpwd 用于根据域名计算密码# 作者&…...
可以做外链的网站/南京百度推广
1:场景一:工厂模式中简单工厂模式优化 1)简单工厂模式也可以叫做静态方法模式(因为工厂类一般都是在内部定义了一个静态方法) 2)简单工厂模式通过创建一个对应的工厂类,将类实例化的操作与使用…...
做园林景观的网站/seo技术优化
由于口令密码容易泄露,SSH公钥登录相比口令登录更加安全。SSH可以轻松使用非对称加密技术给两台机子订立契约,步骤如下: 第一步 本地机生成秘钥对 指令:ssh-keygen 功能:在本地(~/.ssh/)产生公钥…...
南山网站制作/网站维护费用
题目描述: 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时…...
怎样做金融理财网站/网站宣传
本文同步自我的博客 Reeoos Blog,欢迎移步前往,^_^ 概览 本文基于React Router v1.03版本。React Router是一个为React设计的强大的路由库。可以帮助我们快速的实现路由功能,包括URL和React components之间的同步映射关系。在解释React Route…...
招工做哪个网站/百度大数据预测平台
深入C系列: 1、《C STL中文版》 2、《More Effective C(中文版)》 3、《深度探索C对象模型》 4、《泛型编程与STL》 5、《Effective STL》 6、《C Primer中文版》 7、《C程序设计原理与实践》 8、《C编程思想》 9、《C编程规范&…...