ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲

在这里插入图片描述
🔥博客主页 小羊失眠啦.
🎥系列专栏《C语言》 《数据结构》 《C++》 《Linux》 《Cpolar》
❤️感谢大家点赞👍收藏⭐评论✍️


在这里插入图片描述

思考:
1、cache的entry里都是有什么?
2、TLB的entry里都是有什么?
3、MMU操作的页表中的entry中都是有什么? L1和L3表中的entry中分别都是有什么?
本文已有答案,学完之后,你能否知道,看造化了,哈哈….
说明:
MMU/TLB/Cache等知识太过于零碎,各个模块直接又紧密相关,所以在介绍时会串着介绍,本文旨在介绍MMU的工作原理,学习cache请参考<ARM cache的学习笔记-一篇就够了)>

以下来自笨叔叔公众号中的提问:
1、cache的内部组织架构是怎么样的?能否画出一个cache的layout图?什么是set,way?
2、直接映射,全关联和组相联之间有什么区别?优缺点是啥?
3、重名问题是怎么发生的?
4、同名问题是怎么发生的?
5、VIPT会不会发生重名问题?
6、什么是inner shareability 和outer shareability?怎么区分?
7、什么是PoU?什么是PoC?
8、什么是cache一致性?业界解决cache一致性都有哪些方法?
9、MESI状态转换图,我看不懂。
10、什么cache伪共享?怎么发生的,如何避免?
11、DMA和cache为啥会有cache一致性问题?
12、网卡通过DMA收数据和发数据,应该怎么操作cache?
13、对于self-modifying code,怎么保证data cache和指令cache的一致性问题?

文章目录

  • 一、Memory attribute
    • 二、cache的一些基本概念
  • 三、Cache内存访问的模型:
  • 四、MMU的介绍
  • 五、VMSA 相关术语:
  • 六、address translation system (AT)
    • 6.1 地址翻译的过程
    • 6.2 和mmu相关的System registers
    • 6.3 Enable mmu and endianness的相关寄存器
    • 6.4 Address size configuration
    • 6.5 granule sizes
    • 6.6 granule size对地址翻译的影响
  • 6.7 disable mmu
  • 七、Translation table
    • 7.1 TTBR0/TTBR1
    • 7.2 页表的entry中包含哪些信息
    • 7.3 granule sizes
    • 7.4 Cache configuration
  • 八、ARM mmu三级页表查询的过程
  • 九、Translation Lookaside Buffer (TLB)
    • 9.1 TLB entry里有什么?
    • 9.2 contiguous block entries
    • 9.3 TLB abort
    • 9.4 TLB一致性
  • 十、VMSAv8-64 translation table format descriptors
        • 推荐

本文转自 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,11年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发。

一、Memory attribute

armv8定义了device memory和normal memory两种内存,其中device memory固定的就是Outer-Shareable和Non-cacheable,而normal memory有多种属性可选。
说明一下:在B2.7.2章节中有这么一句话“Data accesses to memory locations are coherent for all observers in the system, and correspondingly are treated as being Outer Shareable”, treated as被看作是(但不是),所以在一些的文章中就认为device memory是没有shareable属性的。其实也能够理解,一段memory设置成了non-cacheable,然后再去讨论该memory的shareable属性,好像也没有意义。 不管怎么样,我们还是按照下方表格的来理解吧,device memory固定为Outer-Shareable和Non-cacheable

在这里插入图片描述

对于device memory,又分下面三种特性:
➨Gathering和non Gathering(G or nG):表示对多个memory的访问是否可以合并,如果是nG,表示处理器必须严格按照代码中内存访问来进行,不能把两次访问合并成一次。例如:代码中有2次对同样的一个地址的读访问,那么处理器必须严格进行两次read transaction
➨Reordering(R or nR):表示是否允许处理器对内存访问指令进行重排。nR表示必须严格执行program order
➨Early Write Acknowledgement(E or nE):PE访问memory是有问有答的(更专业的术语叫做transaction),对于write而言,PE需要write ack操作以便确定完成一个write transaction。为了加快写的速度,系统的中间环节可能会设定一些write buffer。nE表示写操作的ack必须来自最终的目的地而不是中间的write buffer

针对上面的三种特性,给出下面四种配置

  • Device-nGnRnE : 处理器必须严格按照代码中内存访问来进行、必须严格执行program order(无需重排序)、写操作的ack必须来自最终的目的地
  • Device-nGnRE : 处理器必须严格按照代码中内存访问来进行、必须严格执行program order(无需重排序)、写操作的ack可以来自中间的write buffer
  • Device-nGRE : 处理器必须严格按照代码中内存访问来进行、内存访问指令可以进行重排、写操作的ack可以来自中间的write buffer
  • Device-GRE : 处理器对多个memory的访问是否可以合并、内存访问指令可以进行重排、写操作的ack可以来自中间的write buffer
部分属性的含义
Shareable内存是共享的
non-Shareable内存不共享,一般只可被单个PE访问
cacheable内存会被缓存
non-cacheable内存不会被缓存

PoU/PoC/Inner/Outer的定义
简而言之,PoU/PoC定义了指令和命令的所能抵达的缓存或内存,在到达了指定地点后,Inner/Outer Shareable定义了它们被广播的范围。
例如:在某个A15上执行Clean清指令缓存,范围指定PoU。显然,所有四个A15的一级指令缓存都会被清掉。那么其他的各个Master是不是受影响?那就要用到Inner/Outer/Non Shareable

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

有了上面的这些定义,那么我们再来看inner Shareable和outer Shareable

Shareable
inner Shareable内存在inner范围内是共享的
outer Shareable内存在outer范围内是共享的

读分配(read allocation)
当CPU读数据时,发生cache缺失,这种情况下都会分配一个cache line缓存从主存读取的数据。默认情况下,cache都支持读分配。

写分配(write allocation)
当CPU写数据发生cache缺失时,才会考虑写分配策略。当我们不支持写分配的情况下,写指令只会更新主存数据,然后就结束了。当支持写分配的时候,我们首先从主存中加载数据到cache line中(相当于先做个读分配动作),然后会更新cache line中的数据。

写直通(write through)
当CPU执行store指令并在cache命中时,我们更新cache中的数据并且更新主存中的数据。cache和主存的数据始终保持一致。
在这里插入图片描述

写回(write back)
当CPU执行store指令并在cache命中时,我们只更新cache中的数据。并且每个cache line中会有一个bit位记录数据是否被修改过,称之为dirty bit(翻翻前面的图片,cache line旁边有一个D就是dirty bit)。我们会将dirty bit置位。主存中的数据只会在cache line被替换或者显示的clean操作时更新。因此,主存中的数据可能是未修改的数据,而修改的数据躺在cache中。cache和主存的数据可能不一致。

在这里插入图片描述

➨ 在ARMV8定义这些属性的寄存器和linux kernel或optee软件代码中使用的示例,请点击此处

二、cache的一些基本概念

cache是一个高速的内存块,它包含了很多entries,每一个entrie中都包含: memory地址信息(如tag)、associated data

cache的设计考虑了两大原则:
空间域(spatial locality): 访问了一个位置后,可能还会访问相邻区域, 如顺序执行的指令、访问一个结构体数据
时间域(Temporal locality):内存区域的访问很可能在短时间内重复,如软件中执行了一个循环操作.

为了减少cache读写的次数,将多个数据放到了同一个tag下,这就是我们所说的cache line
访问缓存中已经存在的信息叫做cache hit,访问缓存中不存在的数据叫做cache miss

cache引入的潜在问题:
内存的访问不一定同编程者预期的一样;
一个数据可以存在多个物理位置处

三、Cache内存访问的模型:

在这里插入图片描述

Memory coherency的术语定义:
Point of Unification (PoU), Point of Coherency (PoC), Point of Persistence (PoP), and Point of Deep Persistence (PoDP).

四、MMU的介绍

在ARMV8-aarch64体系下,ARM Core访问内存的硬件结构图如下所示:

在这里插入图片描述

其中,MMU由TLB和Table Walk Unit组成的.

TLB:Translation Lookaside Buffer (TLB),对应着TLB指令
Table Walk Unit,也叫地址翻译,address translation system,对应着AT指令

五、VMSA 相关术语:

➨ VMSA - Virtual Memory System Architecture
➨VMSAv8
➨VMSAv8-32
➨VMSAv8-64

➨Virtual address (VA)
➨Intermediate physical address (IPA)
➨Physical address (PA)

Translation stage can support only a single VA range
➨48-bit VA, 0x0000000000000000 to 0x0000FFFFFFFFFFFF
➨ARMv8.2-LVA : 64KB granule :52-bit VA,0x0000000000000000 to 0x000FFFFFFFFFFFFF

Translation stage can support two VA ranges
➨48-bit VA: 0x0000000000000000 - 0x0000FFFFFFFFFFFF , 0xFFFF000000000000 to 0xFFFFFFFFFFFFFFFF
➨52-bit VA: 0x0000000000000000 - 0x000FFFFFFFFFFFFF , 0xFFF0000000000000 to 0xFFFFFFFFFFFFFFFF

Address tagging / Memory Tagging Extension / Pointer authentication

六、address translation system (AT)

6.1 地址翻译的过程

MMU的地址翻译工作是一种自动行为,当填好页表、配置好系统寄存器之后,cpu发起的虚拟地址读写操作,将会经过MMU自动转换成物理地址,然后发送到AXI总线上完成真正的内存或device的读写操作. 如下列举了ARM在不同exception level中的地址翻译的模型.

在这里插入图片描述

在一般的情况下,我们是不会启用stage2的,除非enable了EL2、实现了hypervisor,那么这时候才会开启stage2,如下图所示:

在这里插入图片描述

6.2 和mmu相关的System registers

在这里插入图片描述

在armv8-aarch64体系下,TCR(Translation Control Register)寄存器有

  • TCR_EL1
  • TCR_EL2
  • TCR_EL3
  • VTCR_EL2

它们的含义:地址翻译的控制寄存器

  • TCR_EL1, Translation Control Register (EL1)
    The control register for stage 1 of the EL1&0 translation regime.

  • TCR_EL3, Translation Control Register (EL3)
    The control register for stage 1 of the EL3 translation regime

  • TCR_EL2, Translation Control Register (EL2)
    The control register for stage 1 of the EL2, or EL2&0, translation regime

  • VTCR_EL2, Virtualization Translation Control Register
    The control register for stage 2 of the EL1&0 translation regime

对应的bit map为

在这里插入图片描述

6.3 Enable mmu and endianness的相关寄存器

在这里插入图片描述

在ARMV8-aarch64架构下有三个sctlr寄存器

  • SCTLR_EL1
  • SCTLR_EL2
  • SCTLR_EL3
    以SCTLR_EL3,该系统寄存器的SCTLR_EL3.EE(BIT[25])定义了MMU访问页表的方式:小端方式读、还是大端方式读

在这里插入图片描述

6.4 Address size configuration

  • Physical address size – 告诉cpu,当前系统的物理地址是多少位
  • Output address size – 告诉mmu,你需要给我输出多少位的物理地址
  • Input address size – 告诉mmu,我输入的是多数为的虚拟地址
  • Supported IPA size – stage2页表转换的部分size,暂不介绍

. Physical address size

在这里插入图片描述

b. output address size

在这里插入图片描述

c . Input address size

  • TCR_ELx.T0SZ定义使用TTBR0_ELx时,VA地址的size
  • TCR_ELx.T1SZ定义使用TTBR1_ELx时,VA地址的size

在这里插入图片描述

注意最大的size为:2^(64-x),x为TCR_ELx.T0SZ或TCR_ELx.T1SZ
d. Supported IPA size
由VTCR_EL2.SL0 and VSTCR_EL2.SL0寄存器决定

6.5 granule sizes

a. state 1 granule sizes

在这里插入图片描述

b. state 2 granule sizes

在这里插入图片描述

6.6 granule size对地址翻译的影响

granule size的配置不同,将会影响到页表的建立,不同的granule size的页面有着不同的页表结构,例如下表所示的:

在这里插入图片描述

6.7 disable mmu

disable mmu之后,the stage 1 translation,For the EL1&0:
For Normal memory, Non-shareable, Inner Write-Back Read-Allocate Write-Allocate, Outer Write-Back Read-Allocate Write-Allocate memory attributes

七、Translation table

7.1 TTBR0/TTBR1

ARM文档说:因为应用程序切换时要切换页表,页表经常改变,而kernel切换时不需要切换页表,页表几乎不改。所以ARM就提供了 a number of features,也就是TTBR0和TTBR1两个页表基地址. TTBR0用于0x00000000_00000000 - 0x0000FFFF_FFFFFFFF虚拟地址空间的翻译,TTBR1用于0xFFFF0000_00000000 - 0xFFFFFFFF_FFFFFFFF虚拟地址空间的翻译

EL2/EL3只有TTBR0,没有TTBR1,所以EL2/EL3的虚拟地址空间是:0x0000FFFF_FFFFFFFF

7.2 页表的entry中包含哪些信息

MMU除了完成地址的翻译,还控制的访问权限、memory ordering、cache policies.

如图所示,列出了三种类型的entry信息:

在这里插入图片描述

bits[1:0]表示该输出是block address,还是next level table address,还是invalid entry

7.3 granule sizes

有三种granule sizes的页表:4kb、16kb、64kb

在这里插入图片描述

7.4 Cache configuration

MMU使用translation tables 和 translation registers控制着cache policy、memory attributes、access permissions、va到pa的转换

八、ARM mmu三级页表查询的过程

在这里插入图片描述

  • (1)、在开启MMU后,cpu发起的读写地址是一个64bit的虚拟地址,
  • (2)、该虚拟地址的高16bit要么是全0,要么是全1. 如果是全0,则选择TTBR0_ELx做为L1页表的基地址; 如果是全1,则选择TTBR1_ELx做为L1页表的基地址;
  • (3)、TTBRx_ELn做为L1页表,它指向L2页表,在根据bit[41:29]的index,查询到L3页表的基地址
  • (4)(5)、有了L3页表的基地址之后,在根据bit[28:16]的index,查询到页面的地址
  • (6)、最后再根据bit[15:0]查找到最终的物理地址

九、Translation Lookaside Buffer (TLB)

9.1 TLB entry里有什么?

TLB中不仅仅包含物理地址和虚拟地址,它还包含一些属性,例如:memory type、cache policies、access permissions、ASID、VMID
注:ASID - Address Space ID, VMID - Virtual Machine ID

9.2 contiguous block entries

TLB拥有固定数目的entries,所以你可以通过减少外部内存地址转换的次数来提升TLB hit率.
在ARMV8 architecture中有一个TLB中的feature叫contiguous block entries,它表示一个entry可以对应多个blocks. 一个entry找到多个blocks,再通过index来查找具体是哪个block。 页表的block entries中,也有一个contiguous bit。这个bit为1,则表示开启了TLB的contiguous block entries feature。
contiguous block entries feature要求alignment,例如:
• 16 × 4KB adjacent blocks giving a 64KB entry with 4KB granule. 缓存64kb blocks,只需16 enties
• 32 × 32MB adjacent blocks giving a 1GB entry for L2 descriptors, 128 × 16KB giving a 2MB entry for L3 descriptors when using a 16KB granule.
• 32 × 64Kb adjacent blocks giving a 2MB entry with a 64KB granule.

如果支持了contiguous bit,那么:
TLB查询后的PA = TLB entry中的PA + index。

9.3 TLB abort

如果开启了contiguous bit,而要转换的table entries确不是连续的,或者entries的output在地址范围之外或没有对齐,那么将会产生TLB abort

9.4 TLB一致性

如果os修改了页表(entries),那么os需要告诉TLB,invalid这些TLB entries,这是需要软件来做的. 指令如下:

TLBI <type><level>{IS} {, <Xt>}

十、VMSAv8-64 translation table format descriptors

这里的table format descriptors,其实就是本文开头“思考”中提到的entry,在页表中的entry, 要么是invalid,要么是table entry,要么是block entry

  • An invalid or fault entry.
  • A table entry, that points to the next-level translation table.
  • A block entry, that defines the memory properties for the access.
  • A reserved format

如果是table entry,其attribute描述如下:

在这里插入图片描述

如果是block entry,其attribute描述如下:

在这里插入图片描述

如果是stage2的entry,无论是table entry还是block entry,其attribute描述如下:

在这里插入图片描述

其实用如下的一张图来描述更清晰:

在这里插入图片描述

这里的bit[1:0]用于定义entry的类型(invalid? block ? table? reserved)
bit[4:2]指向 MAIR_ELn寄存器中的其中的一个字节,用于定义内存(main memory和device memory)的类型

MAIR_ELn寄存器拆分成8个bytes,每个byte定义一种内存类型
(MAIR_ELn, Memory Attribute Indirection Register (ELn))

在这里插入图片描述

每一个byte(attrn)的含义如下:

在这里插入图片描述

各个bit位的具体含义

在这里插入图片描述

例如optee中的内存属性配置如下:

#define ATTR_DEVICE_INDEX		0x0
#define ATTR_IWBWA_OWBWA_NTR_INDEX	0x1
#define ATTR_INDEX_MASK			0x7#define ATTR_DEVICE			(0x4)
#define ATTR_IWBWA_OWBWA_NTR		(0xff)mair  = MAIR_ATTR_SET(ATTR_DEVICE, ATTR_DEVICE_INDEX);
mair |= MAIR_ATTR_SET(ATTR_IWBWA_OWBWA_NTR, ATTR_IWBWA_OWBWA_NTR_INDEX);
write_mair_el1(mair);
推荐
  • ARMv8/ARMv9架构从入门到精通 --博客专栏
  • 《Armv8/Armv9架构从入门到精通 第二期》 --大课程
  • 8天入门ARM架构 --入门课程

在这里插入图片描述

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

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

相关文章

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解

Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…

计算机行业在数字经济时代的角色与数字化转型之路

目录 前言1 数字经济时代下的计算机行业角色与定位1.1 数字经济支撑者1.2 创新引领者1.3 产业融合者 2 数字化转型对计算机行业的影响与挑战2.1 技术更新换代的压力2.2 人才培养与流动的问题2.3 数据隐私与安全的挑战 3 数字化转型如何提升行业竞争力3.1 提高生产效率与优化产品…

Prometheus 监控告警配置

文章目录 一、告警通知1.邮件通知2.钉钉通知2.1.获取钉钉机器人webhook2.2.prometheus-webhook-dingtalk2.3.配置信息2.4.自定义模板 3.自定义 二、告警规则1.Prometheus2.Linux3.Docker4.Nginx5.Redis6.PostgreSQL7.MySQL8.RabbitMQ9.JVM10.Elasticsearch 开源中间件 # Prome…

OpenCV的常用数据类型

OpenCV涉及的常用数据类型除包含C的基本数据类型,如&#xff1a;char、uchar&#xff0c;int、unsigned int,short 、long、float、double等数据类型外, 还包含Vec&#xff0c;Point、Scalar、Size、Rect、RotatedRect、Mat等类。C中的基本数据类型不需再做说明下面重点介绍一下…

揭秘WMM:wifi中的QOS

更多内容在 WiFi WMM&#xff08;无线多媒体&#xff09;是一种用于无线局域网&#xff08;WLAN&#xff09;的QoS&#xff08;服务质量&#xff09;标准。WMM旨在提供更好的网络性能&#xff0c;特别是在传输多媒体内容&#xff08;如音频和视频&#xff09;时。它通过对不同类…

42.坑王驾到第八期:uniCloud报错

uniCloud 报错 今天调用云函数来调试小程序的时候突然暴了一个奇葩错误&#xff0c;require(…).main is not a function。翻官方文档后发现&#xff0c;原来是这样&#xff1a;**如果你写的是云对象&#xff0c;入口文件应为 index.obj.js&#xff0c;如果你写的是云函数入口…

python学习2:日志记录的用法

一些日志记录的简单记录&#xff1a; 用basicConfig可以进行配置 注意日志的等级&#xff1a; 上述代码得到的日志如下&#xff08;最基础的日志&#xff09;&#xff1a; 关于记录下来的日志格式可以有很多内容&#xff1a;如等级、发生的时间、发生的位置、发生的进程、…

WinRAR功能之【加密文件名】

很多人知道&#xff0c;WinRAR解压缩软件可以给压缩包设置密码&#xff0c;这样就可以保护压缩包里的文件&#xff0c;不被随意打开。 设置密码后&#xff0c;双击压缩包还是可以打开的&#xff0c;但要打开里面的文件时&#xff0c;就需要输入原本设置的密码才能打开。 虽然…

蓝桥杯-Python组(一)

1. 冒泡排序 算法步骤&#xff1a; 比较相邻元素&#xff0c;如果第一个大于第二个则交换从左往右遍历一遍&#xff0c;重复第一步&#xff0c;可以保证最大的元素在最后面重复上述操作&#xff0c;可以得到第二大、第三大、… n int(input()) a list(map(int, input()…

三、NLP中的句子关系判断

句子关系判断是指判断句子是否相似&#xff0c;是否包含&#xff0c;是否是问答关系等&#xff0c;常应用在文本去重、检索&#xff08;用户输入和文档的相关性&#xff09;、推荐&#xff08;和用户喜好文章是否相似&#xff09;等场景中。 3.0、文本相似度计算 3.0.0 传统机…

计算机网络-认识设备

一、概述 前面我们其实已经讲了一些关于设备的知识了&#xff0c;从现在开始进入下一阶段的理解。 网络基础设施由交换机、路由器、防火墙等构成,那我们的数据怎样从一个接口转发到另外一个接口最终实现网络访问的呢&#xff1f; 二、设备基础 2.1 网络设备硬件架构 我们分别以…

Axure原型设计项目效果 全国职业院校技能大赛物联网应用开发赛项项目原型设计题目

目录 前言 一、2022年任务书3效果图 二、2022年任务书5效果图 三、2022年国赛正式赛卷 四、2023年国赛第一套样题 五、2023年国赛第二套样题 六、2023年国赛第三套样题 七、2023年国赛第四套样题 八、2023年国赛第七套样题 九、2023年国赛正式赛题&#xff08;第八套…

SSA-LSTM多输入回归预测 | 樽海鞘优化算法-长短期神经网络 | Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

智慧路灯杆如何提升智慧城市文旅形象

今年以来&#xff0c;全国多地城市凭借本地独特物产、独特旅游环境等亮点火爆出圈&#xff0c;为城市带来显著经济增长和形象提升。文旅经济作为高附加值产业&#xff0c;具有高收益、高潜力等特点&#xff0c;还有助于推动城市经济转型和可持续发展。 推动城市文旅经济发展&am…

力扣每日一题 最大二进制奇数 模拟 贪心

Problem: 2864. 最大二进制奇数 由于奇数的二进制末尾一定是 111&#xff0c;我们可以把一个 111 放在末尾&#xff0c;其余的 111 全部放在开头&#xff0c;这样构造出的奇数尽量大。 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class…

全国降雨侵蚀力因子R值/土壤侵蚀模型RUSLE

降雨侵蚀力因子其实是反应降雨对土壤侵蚀的潜在能力&#xff0c;就是降雨的冲刷对土壤的侵蚀效应。 在过去几天查阅文献资料的过程中&#xff0c;本人亲眼看见过的关于因子R的计算方法就超过30种&#xff0c;着实大开了眼界。 不过总结这些计算方法&#xff0c;其实核心思路大…

第六篇【传奇开心果系列】Python的自动化办公库技术点案例示例:大学生数据全方位分析挖掘经典案例

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas库全方位分析挖掘大学生数据能力介绍二、大学生学生成绩数据分析数据挖掘示例代码三、大学生选课数据分析数据挖掘示例代码四、大学生活动参与数据分析数据挖掘示例代码五、大学…

让若依生成的service、mapper继承mybatisPlus的基类

前言&#xff1a;若依继承mybatisPlus后&#xff0c;生成代码都要手动去service、serviceImpl、mapper文件去继承mybatisplus的基类&#xff0c;繁琐死了。这里通过修改若依生成模版从而达到生成文件后直接使用mybatisPlus的方法。 一、首先找到若依生成模版文件位置&#xff…

VsCode免密登录

创建本地密匙 按下WinR输入cmd&#xff0c;输入 ssh-keygen -t rsa然后连续回车直到结束 找到Your public key has been saved in C:\Users\Administrator/.ssh/id_rsa.pub&#xff0c;每个人都不一样找到密匙所在地 打开id_rsa.pub这个文件&#xff0c;可以用记事本打开&am…

ROS 语音交互(三) tts

目录 一、模型选择 二、流程 三、核心代码展示 一、模型选择 科大讯飞超拟人识别 二、流程 超拟⼈合成协议 | 讯飞开放平台文档中心 (xfyun.cn) 三、核心代码展示 # coding: utf-8 import _thread as thread import os import time import base64import base64 import …