龙芯LA架构相关的存储管理

(LoongArch-P92)

目录

1.1   物理地址空间

1.2  虚拟地址空间

1.3 LA64架构下的虚拟地址缩减模式

1.4  存储访问类型

1.5 页表映射存储管理

1.5.1 TLB组织结构

1.5.2 基于TLB的虚实地址转换过程

1.5.3 TLB的软件管理

(1)TLB相关的例外

(2)TLB相关的指令

(3)TLB相关的CSR寄存器

(4)TLB的初始化

1.5.4 页表遍历过程所支持的多级页表结构


1.1   物理地址空间

LA64架构下:PALEN=48(整个系统的物理地址宽度为48位)。

1.2  虚拟地址空间

对于PLV0级来说:LA64架构下虚拟地址空间大小=2^64字节。(并不都是合法的,存在一些虚拟地址的空洞)。

LA64MMU支持2虚实地址翻译模式直接地址翻译模式 和 映射地址翻译模式。

CSR.CRMD的条件

MMU地址翻译模式

特点

DA=1 PG=0

a-直接地址翻译模式

处理器复位结束后进入该模式。

物理地址 = 虚拟地址的【PALEN-1:0】(不足补0)

取指的存储类型:由CRMD.DATF决定

load/store的存储类型:由CRMD.DATM决定

DA=0 PG=1

b-映射地址翻译模式

(细分为2种模式)

b1-直接映射地址翻译模式

映射模式时优先看是否是该模式,无法进行后再按页表映射模式翻译。

取指/load/sorte的存储类型:由配置窗口的MAT域决定;

b2-页表映射地址翻译模式

虚拟地址合法性判断:虚拟地址的【63:PALEN】位必须与【PALEN-1】位相同,即【47】位之上的所有位是其符号扩展,否则将出法地址错ADE例外。

取指/load/sorte的存储类型:由页表项中的MAT域决定。

b1-直接映射地址翻译模式: 共有4个配映射配置窗口,完成虚实地址的直接映射,对应CSR.DMW0~CSR.DMW3寄存器,前2个可同时用于取指和load/store操作,后2个窗口仅用于load/store操作。

窗口配置:

每一个窗口可配置一个248字节虚拟地址空间

命中:

虚拟地址【63:60】位= 窗口寄存器中的VSEG域

且当前特权等级在该配置窗口中被允许。

举例:DMW10x9000000000000011

      表示在PLV0级下,虚拟地址空间0x90000000000000000x9000FFFFFFFFFFFF,

         被映射到物理地址空间00xFFFFFFFFFFFF上,且存储访问类型是一致可缓存的。

DMW00x8000000000000001

      表示在PLV0级下,虚拟地址空间0x80000000000000000x8000FFFFFFFFFFFF,

         被映射到物理地址空间00xFFFFFFFFFFFF上,且存储访问类型是强序非缓存的。

@start.S

118         li.d    t0, UNCACHED_MEMORY_ADDR | 0x1         //0x8000000000000001    -DMW0                                                                                                                                                                                           

119         csrwr   t0, 0x180                                                                                            

120         li.d    t0, CACHED_MEMORY_ADDR | 0x11     //0x9000000000000011     -DMW1                                                                 

121         csrwr   t0, 0x181                    

...

337         /* DA disable for 0x90xxxxxxxxxxxxxx and 0x80xxxxxxxxxxxx address can be used */                          

338         li.w    t0, 0xb0

339         csrwr   t0, 0x0        //PG=1,DA=0, 使能映射地址翻译模式   ;                                                 

                         

1 -1    直接映射配置窗口寄存器定义(LA64架构)

名字

读写

描述

63:60

VSEG

RW

直接映射窗口的虚地址的【63:60】位

59:6

RO

保留,不允许软件改值。

5:4

MAT

RW

虚拟地址落在该映射串口下访存操作的存储访问类型

3

PLV3

RW

为1表示在特权等级PLV3下可使用该窗口配置进行地址翻译。

2

PLV2

RW

为1表示在特权等级PLV2下可使用该窗口配置进行地址翻译。

1

PLV1

RW

为1表示在特权等级PLV1下可使用该窗口配置进行地址翻译。

0

PLV0

RW

为1表示在特权等级PLV0下可使用该窗口配置进行地址翻译。

1.3 LA64架构下的虚拟地址缩减模式

目的:为了在某些应用场合下减少页表级数。

通过CSR. RVACFG寄存器中的RDVA值:(1~8)实现。

映射地址翻译模式下:虚拟地址的有效位按照(VALEN-RDVA)这么多位来处理。

例:RDVA=8时,合法地址的【6340】位需要是第【39】位的符号扩展。

1.4  存储访问类型

LA架构支持三种存储访问类型:

存储访问类型

MAT域访问类型控制值的定义

一致可缓存(Coherent Cached)简称CC

1

强序非缓存(Strongly-ordered Uncached)简称SUC

0

弱序非缓存(Weaky-ordered Uncached)简称WUC

2

保留

3

代码中的配置:

 72 #define CACHE_SUC              (0 << CACHE_SHIFT) /* Strong-ordered UnCached */

 73 #define CACHE_CC                (1 << CACHE_SHIFT) /* Coherent Cached */

 74 #define CACHE_WUC            (2 << CACHE_SHIFT) /* Weak-ordered UnCached */

CC:所访问的对象既可以是最终存储对象也可以时处理器中维护有缓存一致行的缓存。通常采用该类型访问内存以获得高性能。

SUC/WUC:只能访问最终存储对象。

SUCSUC访问满足顺序一致行,即所由访问严格按照程序中的次序执行,且当前访存操作彻底完成前不能开始执行下一个访存操作;

WUC:允许推测执行,弱序非缓存的写数据可以在处理器核内部合并至更大的规模后(如一个Cache行)以突发方式写出,合并过程中后面的写数据可以覆盖前面写数据。WUC通常用于加速非缓存内存数据的访问,如显存数据。

1.5 页表映射存储管理

当虚拟地址翻译模式为b-映射地址翻译模式时,除了落在b1-直接映射配置窗口中的地址之外,其余所有合法地址都必须通过b2-页表映射完成虚实地址转换。

页表映射地址的地址:指该地址需要通过TLB进行虚实地址转换。

其他地址:不需要经过TLB进行虚实地址转换,虚地址被直接线性映射至物理地址的最低部分。

TLB作用:作为处理器中存放系统页表信息的一个临时缓存用于加速映射地址翻译模式下的取指和load/store操作的虚实地址转换过程

1.5.1 TLB组织结构

LATLB分两个部分:STLBMTLB。在虚实地址转换过程中,STLBMTLB同时查找。

软件需保证不会出现STLBMTLB同时命中的情况,否则处理器行为将不可知。

STLBMTLB的表项格式基本一致,区别仅在于MTLB每个表项均包含页大小信息。

STLB:所有表项的页大小相同的单一页大小TLB。采用多路组相联的组织形式。

MTLB:支持不同表项的页大小可以不同的多重页大小TLB。采用全相联查找表的组织形式。

对于STLB,如果有2^ INDEX组,且配置的页大小为2^PS字节,那么硬件查询STLB的过程中,是将虚地址的【PS+INDEXPS】位作为索引值来访问各路信息的。

存放页表项的页大小是由系统软件配置在CSR.STLBPS寄存器的PS域。

每一个TLB表项的格式:比较部分+物理转换部分

比较部分:

VPPN

PS

G

ASID

E

VALEN-13

6

1

10

1比特

物理转换部分:

PPN0

RPLV0

PLV0

MAT0

NX0

NR0

D0

V0

PPN1

RPLV1

PLV1

MAT1

NX1

NR1

D1

V1

E:存在位,1表示所在TLB表项非空,可以查找匹配。

ASID:地址空间标识,用于区分不同进程中的同样的虚地址,避免进程切换时清空整个TLB所带来的性能损失。操作系统为每个进程分配唯一的ASIDTLB在查找时除了比对地址信息外,还需要比对ASID信息。

G:全局标志位,为1时,查找时不进行ASID是否一致性检查。

当操作系统需要在所有进程间共享同一虚拟地址时,可以设置TLB页表项中的G1

PS:仅在MTLB中出现,用于指定该页表项中存放的页大小。

VPPN:虚双页号,每一个页表项存放了相邻的一对奇偶相邻页表信息,所以TLB页表项中存放虚页号的是系统中虚页号/2的内容,即虚页号的最低位不需要存放在TLB中。查找TLB时再根据查找虚页号的最低位决定是选择奇数还是偶数号页的物理转换信息。

表项的物理转换部分存有一对奇偶相邻页表的物理转换信息。

每一个页的转换信息包括:

V: 有效位。为1:该页表项是有效的且被访问过的。

D:脏位。为1:该页表项所对应的地址范围内已有脏数据。

NR:不可读位。为1:该页表项所在地址空间上不允许执行load操作。(仅LA64架构)

NX:不可执行位。为1:该页表项所在地址空间上不允许执行取指操作。(仅LA64架构)

MAT:存储访问类型,2比特。控制落在该页表项所在地址空间上放存操作的存储访问类型。见1.4章节。

PLV:特权等级,2比特。该页表项对应的特权等级。

           RPLV=0时,该页表项可以被任何特权等级不低于PLV的程序访问;

  RPLV=1时,该页表项仅可以被特权等级==PLV的程序访问。

RPLV:受限特权等级使能。页表项是否被对应特权等级的程序访问的控制位。

PPN:物理页号PALEN-12 =36比特。

当页大小>4KB时,TLB中所存放的PPN的【log2PS-112】位可以是任意值。

1.5.2 基于TLB的虚实地址转换过程

TLB进行虚实地址转换过程由硬件自动完成。


1.5.3 TLB的软件管理

1TLB相关的例外

当TLB中没有匹配项,或尽管匹配但页表项无效或访问非法时,就需要触发例外,交由操作系统内核或其它监管程序,由软件进一步处理,对TLB的内容进行维护,或对程序执行的合法性做最后裁定。

TLB架构中与TLB管理相关的例外有:

1-TLB重填例外

触发条件:虚拟地址在TLB中没有匹配项时触发

后续操作:通知系统软件进行TLB重填工作。

特点:拥有独立的例外入口、独立的用于维护例外现场的CSR以及一套独立的TLB访问接口CSR.(即允许在其他例外的处理过程中被触发)

TLB重填例外陷入的同时:

(1)硬件会自动将CSR.CRMD的DA置1,PG置0,即自动进入直接地址翻译模式,从而避免TLB重填例外处理程序自身再次触发TLB重填例外,此时例外现场将无法保存与恢复。

(2)硬件自动CSR.TLBRERA.ISTLBR位置1:目的为了区分TLB重填例外陷入后所使用的CSR和其他例外可使用的CSR。

2-load操作页无效例外

触发条件

load操作的虚地址在TLB中找到匹配项,但表项中V=0

3-store操作页无效例外

触发条件

store操作的虚地址在TLB中找到匹配项,但表项中V=0

4-取指操作页无效例外

触发条件

取指操作的虚地址在TLB中找到匹配项,但表项中V=0

5-页特权等级不合规例外

触发条件

访问操作的虚地址在TLB中有匹配项且V=1;但访问的特权等级不合规。不合规体现:

RPLV=0,,CSR.CRMD.PLV > 表项中PLV;

RPLV=1,CSR.CRMD.PLV≠表项中PLV;

6-页修改例外

触发条件:

store操作的虚地址在TLB中有匹配且V=1,特权等级也合规,但是该页表项的D=0

7-页不可读例外

触发条件:

load操作的虚地址在TLB中有匹配且V=1,特权等级也合规,但是该页表项的NR=1

8-页不可执行例外

触发条件:

取指操作的虚地址在TLB中有匹配且V=1,特权等级也合规,但是该页表项的NX=1

ertn指令:用于从例外处理返回。

        如果所处理的例外是TLB重填例外:

例外对应的PPLV、PIE、PWE信息来自于CSR.TLBRSAVE;

例外对应的返回地址来自CSR.TLBRERA;

除此外还要将CSR.CRMD中的DA清0、PG置1.

          如果CSR.LIBCTL中的KLO≠1,则将LLbit=0,否则LLbit不修改。

2TLB相关的指令

1-2 TLB维护指令

命令

描述

tlbsrch

CSR.ASID CSR.TLBEHI的信息区查询TLB

有命中项

将命中项的索引值写入到CSR.TLBIDXindex

CSR.TLBIDXNE=0

未命中

CSR.TLBIDXNE=1(该TLB项为空:无效TLB表项);

TLB中各项的索引值计算规则:从0依次递增编号,先STLBMTLB

STLB:从第0路的第0行~最后一行;

             然后是第1路的第0行~最后一行,直到最后一路最后一行。

MTLB:从第0行到最后一行。

tlbrd

将CSR.TLBIDX的index域作为索引值去读取TLB中的指定项

若index超过了TLB的范围,处理器行为不确定。

有效TLB项:

将页表信息写入CSR.TLBEHI、TLBELO0、TLBELO1、TLBIDX,PS

将CSR.TLBIDX的NE置0;

无效TLB项:

将CSR.TLBIDXde NE置1,且对读出内容进行屏蔽保护,如CSR.ASID.ASID、TLBEHI、TLBELO0、TLBELO1、TLBIDX.PS都不更新或置0;

tlbwr

将TLB相关CSR中所存放的的页表信息写入到 TLB中指定项

信息来在:CSR.TLBEHI、TLBELO0、TLBELO1、TLBIDX,PS

若NE=1,TLB中填入一个无效TLB项,NE=0时,TLB填入一个有效TLB项。

填入TLB的位置由CSR.TLBINDEX的Index域的值指定。

tlbfill

将TLB相关CSR中所存放的的页表信息写入到 TLB中。

信息来在:CSR.TLBEHI、TLBELO0、TLBELO1、TLBIDX,PS

若NE=1,TLB中填入一个无效TLB项,NE=0时,TLB填入一个有效TLB项。

填入时:

根据被填入表项的页大小来决定是写入STLB还是MTLB。

当被填入的页表项的页大小=STLB所配置的页大小(CSR.STLBPS)是填入STLB,否则填入MTLB。填到STLB哪一路或MTLB哪一项,由硬件随机选择。

tlbclr

根据TLB相关的CSR信息,无效TLB中的内容,以维持TLB与内存之间页表数据的一致性。

当CSR.TLBIDX.Index落在STLB范围(<STLB项数):执行tlbclr指令,将STLB中由CSR.TLBIDX.Index低位所指示的那一组中所有路中等于G=0且ASID等于CSR.ASID.ASID的页表项无效掉;

当CSR.TLBIDX.Index落在MTLB范围(STLB项数):执行tlbclr指令,将MTLB中所有G=0且ASID等于CSR.ASID.ASID的页表项无效掉;

tlbflush

根据TLB相关的CSR信息,无效TLB中的内容,以维持TLB与内存之间页表数据的一致性。(同上,范围更大)

当CSR.TLBIDX.Index落在STLB范围(<STLB项数):执行tlbflush指令,将STLB中由CSR.TLBIDX.Index低位所指示的那一组中所有路中的页表项无效掉;

当CSR.TLBIDX.Index落在MTLB范围(STLB项数):执行tlbflush指令,将MTLB中所有页表项无效掉;

invtlb

无效TLB中的内容,以维持TLB与内存之间页表数据的一致性。

Invtlb     op , rj,rk    (三个源操作数)

op:指示操作类型;

rj【9:0】:存放无效操作所需的ASID信息(“寄存器指定ASID”),其余比特位必写0;

rk: 存放无效操作所需的虚拟地址(VA);不需要时写0;

op

操作

0x0

清除所有页表项.

0x1

与op=0完全一致;

0x2

清除所有G=1的页表项;

0x3

清除所有G=0的页表项;

0x4

清除所有G=0,且ASID等于“寄存器指定ASID”的的页表项;

0x5

清除G=0,且ASID等于“寄存器指定ASID”、且VA等于寄存器指定VA的页表项;

0x6

清除所有G=1,且ASID等于“寄存器指定ASID”、且VA等于寄存器指定VA的页表项;

1-3 软件页表遍历指令

lddir

lddir       rd,   rj,   level

用于在软件页表遍历过程中目录项的访问

Level: 访问的是哪一级页表。

           =1;对应CSR.PWCL中的PT;

           =2;对应CSR.PWCL中的Dir1;

           =3;对应CSR.PWCL中的Dir2;

           =4;对应CSR.PWCH中的Dir3;

rj[6]=0: 表明rj中内容是第level级页表的基址的物理地址。

              此时执行lddir指令,会根据当前处理的TLB重填地址访问level级  

        页表,取回其对应的level+1级页表的基址,将其写入到寄存器rd中。

rj[6]=1: 表明rj中的内容是一个大页(Huge Page)的页表项。这种情况下,        执行lddir后,通用寄存器rj中值将被直接写入到通用寄存器rd中。

ldpte

ldpte       rj,seq

用于在软件页表遍历过程中目录项的访问

seq:用于指示访问的偶数页还是奇数页。

       访问偶数页时结果将被写入CSR.TLBRELO0,

       访问奇数页时结果将被写入CSR.TLBRELO1.

rj[6]=0:

              表明rj中内容是PTE那一级页表的基址的物理地址。

              此时执行ldpte指令,会根据当前处理的TLB重填地址访问PTE级  

              页表,取回页表项将其写入到对应的CSR中。

rj[6]=1: 表明rj中的内容是一个大页(Huge Page)的页表项。这种情况下,        执行ldpte后,直接将通用寄存器rj中值转换成最终的页表项格式后     

        写入到对应的CSR中。

3TLB相关的CSR寄存器

CSR寄存器

描述

第一类

BADV

用于触发地址错误相关例外时,记录出错的虚地址。

TLBEHI

TLB表项高位

【VALEN-1:13】:VPPN值;

(1)tlbrd指令,读取TLB表项的VPPN域的值写入此处;

(2)CSR.TLBRERA.ISTLBR=0时,  tlbsrch指令查询TLB所用VPPN,以及ltbwr、tlbfill指令系入TLB表项的VPPN值来自此处。

(3)当触发TLB相关例外中的2~8的页不可执行例外的7种例外时,触发例外的虚拟地址的【VALEN-1:13】记录到此。

TLBELO0

偶数页信息

(1)TLB指令操作时TLB表项低位部分物理页号等相关信息。

CSR.TLBRERA.ISTLBR=0时, 执行tlbwr、tlbfill指令写入TLB表项的G、PPN、V、PLV、MAT、D、NR、NX、RPLV等来自此寄存器。

(2)执行tlbrd指令种,从TLB表项中读出上述信息系入该寄存器。

TLBELO1

奇数页信息

TLBIDX

TLB表项相关的索引值index,PS、NE值。

执行tlbrd指令时,读取的TLB表项的PS值记录在此。

ASID

【9:0】用于访存操作和TLB指令的地址空间标识符(ASID)信息

STLBPS

【5:0】:用于配置STLB中的页大小。

第二类

PGDL

【GRLEN-1:12】: Base  ,配置低半地址空间的全局目录的基址。

 要求全局目录的基址是4KB边界地址对齐,所以【11:0】=0;

低半地址空间:指虚地址的第【VALEN-1】位=0;

PGDH

【GRLEN-1:12】: Base  ,配置高半地址空间的全局目录的基址。

高半地址空间:指虚地址的第【VALEN-1】位=1;

PGD

只读寄存器;

内容是当前上下文中出错虚地址所对应的全局目录基址信息

不仅用于CSR类指令的读返回地址,也用于lddir指令访问全局目录时所需的基址信息。

【GRLEN-1:12】: Base:如果当前上下文中出错VA地址的最高位=0,读返回值=PGDL中的BASE值,否则=PGDH中的Base值。

CSR.TLBRERA.ISTLBR=0时当前上下文中出错VA地址在CSR.BADV中。

CSR.TLBRERA.ISTLBR=1时..上下文中出错VA地址在CSR.TLBRBADV中。

PWCL

页表遍历控制-低半部分

这些信息将用于指示软件/硬件进行页表遍历。

名字

读写

描述

4:0

PTbase

RW

末级页表的起始地址

9:5

PTwidth

RW

末级页表的索引位数

14:10

Dir1_base

RW

最低一级目录的..

19:15

Dir1_width

RW

最低一级目录的..

24:20

Dir2_base

RW

次低一级目录的..

29:25

Dir2_width

RW

次低一级目录的...

31:30

PTEWidth

RW

内存中的每个页表项的位宽

0:64比特

1:128比特

2:192比特

3:256比特

PWCH

页表遍历控制-高半部分

名字

读写

描述

5:0

Dir3_base

RW

次高一级目录的..

11:6

Dir3_width

RW

17:12

Dir4_base

RW

最高一级目录的..

23:18

Dir4_width

RW

31:24

0

RO

第三类

TLBRENTRY

TLB重填例外入口地址

由于触发TLB重填例外后,处理器核将进入直接地址翻译模式,所以此处填入地址应当是物理地址

【11:9】:只读,恒为0。

【PALEN-1:12】:PPN,RW  TLB重填例外入口地址【PALEN-1:12】

                 此处填入的地址应为物理地址。

【63:PALEN】: 只读,恒为0.

TLBRERA

保存TLB重填例外处理完毕之后的返回地址

[0]: IsTLBR: TLB重填例外标志位

[GRLEN-1: 2]: PC, 触发TLB重填例外指令的PC的[GRLEN-1:2]位。

TLBRBADV

记录触发TLB重填例外的出错虚地址

[GRLEN-1:0 ] : VAddr

TLBREHI

是TLBRERA.IsTLBR=1(处于TLB重填上下文时

存放TLB指令操作的TLB表项高位部分物理页号等相关信息

名字

读写

描述

5:0

PS

RW

TLB重填例外专用的页大小值

VALEN-1:13

VPPN

RW

IsTLBR=1时,tlbsrch查询TLB所用VPPN值,及tlbwr/tlbfill写入TLB表项的VPPN域值来自此。

触发TLB重填例外时,触发例外的虚拟地址的[VALEN-1:13]记录到此。

63:VALEN

Sign_Ext

R

是VPPN最高位的符号扩展。

TLBRELO0

是TLBRERA.IsTLBR=1(处于TLB重填上下文时

存放TLB指令操作的TLB表项低位部分物理页号等相关信息

名字

描述

0

V

页表项有效位

1

D

..脏位

3:2

PLV

..特权等级

5:4

MAT

..存储访问类型

6

G

..全局标志位

PALEN-1:12

PPN

页表的物理页号

61

NR

页表项不可读位

62

NX

...不可执行位

63

RPLV

页表的受限特权等级使能。

无论IsTLBR为何值:

执行tlbrd指令,只更新TLBELO0/1寄存器

执行tlbpte指令,只更新TLBRELO0/1,TLBEHI寄存器

TLBRELO1

TLBRPRMD

TLB重填例外前-模式信息

当触发TLB重填例外时,硬件会将此时处理器核的特权等级PLV、客户机模式、全局中断使能IE和监视点使能WE位保存至该寄存器中,用于例外返回时恢复处理器核的现场。

TLBRSAVE

TLB重填例外数据保存:用于给系统暂存数据。

额外设置一个共TLB重填例外处理程序使用的SAVE寄存器,是针对非TLB重填例外的处理过程中触发TLB重填例外这一情况。

【GRLEN-1:0 】  DATA;RW,仅供软件读写的输入,除CSR指令外,硬件不会该此域内容。

4TLB的初始化

LA架构允许不实现TLB的硬件初始化,让启动阶段的软件通过执行“INVTLB r0,r0”来完成这一功能。

1.5.4 页表遍历过程所支持的多级页表结构

无论是使用lddir 、ldpte指令实现的软件页表遍历,还是硬件页表遍历,其所支持的多级页表结构是一样的,系统软件需要按照如下格式定义页表项。

区别:bit6:基本页的G在第6位,大页H(大页表项标志位)在第6位,G在第12位。

P:物理页是否存在;W:该页是否可写。这些信息不填入TLB表项但用于页表遍历处理过程。

图1 页表遍历过程所支持的多级页表结构

 被遍历页表最顶层目录(全局目录:Global Directory)的基址PGD由被查询虚地址的第(PALEN-1)位决定:

            为0时,PGD=CSR.PGDL.Base;

   为1时,PGD=CSR.PGDH.Base;

整个页表结构为PALEN-1比特。???

各级目录项和页表项的规格由系统软件配置在CSR.PWCL和PWCH中。

由于TLB表项采用的双页存储结构,对于大页的页表项,硬件页表重填逻辑或软件的ldpte指令会根据大页的页表信息自动拆分出两个尺寸折半的页表项后填入TLB中

如:标准页大小为16KB,则此时第一级大页的大小通常为32MB,软件页表遍历过程执行完“LDPTE rj,0”“LDPTE rj,1” 指令后,TLB中将被填入两个16MB页大小的页表项,软件无需特殊干预。

因TLB重填例外处理过程中地址映射是处于直接地址翻译模式,所以PGD及内存中页表的目录项中所配置的地址必须为物理地址

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

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

相关文章

开源高性能的分布式时序数据库:Lindb

Lindb&#xff1a;为大数据时代量身打造的高性能时序数据库&#xff0c;让海量数据存储与实时分析触手可及。- 精选真开源&#xff0c;释放新价值。 概览 Lindb 是一款开源的分布式时序数据库&#xff0c;它以其高性能和可伸缩性在海量数据存储及快速查询计算方面展现出独特的…

9.多数元素

文章目录 题目简介题目解答解法一&#xff1a;排序代码&#xff1a;复杂度分析&#xff1a; 解法二&#xff1a;摩尔投票法代码&#xff1a;复杂度分析&#xff1a; 解法三&#xff1a;哈希表代码复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来…

#兼职副业赚钱吗?# 宝妈与上班族在水牛社的财富探索

在这个繁忙的都市节奏中&#xff0c;宝妈与上班族都面临着平衡家庭与经济的挑战。那么&#xff0c;兼职副业真的能为他们带来额外的收入吗&#xff1f;接下来&#xff0c;让我们通过两个实例&#xff0c;揭示宝妈和上班族是如何在水牛社找到兼职副业赚钱的契机的。 ✨ 宝妈的故…

Linux 进程信号【信号产生】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 目录 前言 信号概念 1. 生活角度的信号 2…

线性代数的一些理解(更新中)

以前学的时候都是囫囵吞枣&#xff0c;能搞过就得了。现在有了点时间可以静下来看看。。 还是分成点来看吧。 1 小车运行 一个车匀速在一维坐标前行&#xff0c;速度是2米每秒&#xff0c;起始点是0。如何描述 设 &#x1d465;(&#x1d461;) 表示车辆在时间 &#x1d461…

【JavaScript】内置对象 - 数组对象 ③ ( 数组反转 - reverse 方法 | 数组排序 - sort 方法 | 自定义数组排序规则 )

文章目录 一、数组排序1、翻转数组元素 - reverse()2、数组元素排序 - sort() 默认从小到大排序3、数组元素排序 - sort() 自定义排序规则4、数组元素排序 - sort() 自定义降序排序简化写法 Array 数组对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript…

关于 vs2019 c++ 20规范,STL 库提供的标准分配器 alloctor 及其 traits 及涉及分配器交换的全局函数 _Pocs

(1) 我们写 c 代码&#xff0c;使用 STL 库中的模板&#xff0c;很少自己写对象的分配器。用 STL 中的分配器也够用。研究 STL 中的分配器也可以为咱们自己写分配器提供参考。 咱们会遇到这样的场景&#xff0c;例如交换两个容器对象&#xff1a; list a ,b ; a .swap (b) ; 这…

深入理解Java TreeSet:实现与使用案例分析

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

如何使用 ERNIE 千帆大模型基于 Flask 搭建智能英语能力评测对话网页机器人(详细教程)

ERNIE 千帆大模型 ERNIE-3.5是一款基于深度学习技术构建的高效语言模型&#xff0c;其强大的综合能力使其在中文应用方面表现出色。相较于其他模型&#xff0c;如微软的ChatGPT&#xff0c;ERNIE-3.5不仅综合能力更强&#xff0c;而且在训练与推理效率上也更高。这使得ERNIE-3…

idea-自我常见配置

1. 主题配置 2. 显示方法分隔符 Editor->General->Appearance 3. 忽略大小写提示 Editor->General->Code Completion 4. 自动导包 Editor->general->Auto Import 5. 取消单行显示Tabs Editor->General->Editor Tabs 效果如下图&#xff1a; 6. 设置…

2024中国大学排名爬取

在pycharm中编写如下代码&#xff1a; import requests from bs4 import BeautifulSoup import bs4 import re def getHTMLText(url):try:r requests.get(url,timeout 30)r.raise_for_status()r.encoding r.apparent_encodingreturn r.textexcept:return ""def r…

ctfshow web入门 php反序列化 web267--web270

web267 查看源代码发现这三个页面 然后发现登录页面直接admin/admin登录成功 然后看到了 ///backdoor/shell unserialize(base64_decode($_GET[code]))EXP <?php namespace yii\rest{class IndexAction{public $checkAccess;public $id;public function __construct(){…

【半夜学习MySQL】库的操作(含库的创建、删除、修改、备份操作/查看mysql连接情况/字符集和校验规则详谈)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 创建数据库字符集和校验规则查看字符集合校验规则校验规则对数据库的影响 操纵数据库数据备份和恢复查看连接情况 创建数据库…

6.数据库

1.实体用矩形表示&#xff0c;属性用椭圆表示&#xff0c;联系用菱形表示 2.层次模型用数表示 3.网状模型用图结构表示 4.关系模型用二维表格结构来表示 5.概念模式基本表 外模式视图 内模式存储 6.模式/内模式映像 外模式/模式映像 7.数据的物理独立性 跟内模式关系 逻辑是视图…

Llama 3 是怎么回事?Arena 数据分析

4 月 18 日,Meta 发布了他们最新的开放权重大型语言模型 Llama 3。从那时起,Llama 3-70B 就在 English Chatbot Arena 排行榜上迅速上升,拥有超过 50,000 次对战。Meta 的这一非凡成就对开源社区来说是个好消息。在这篇博文中,我们旨在深入探讨为什么用户将 Llama 3-70b 与 GPT…

经开区创维汽车车辆交接仪式顺利举行,守护绿色出行助力低碳发展

5月10日&#xff0c;“创维新能源汽车进机关”交车仪式于徐州顺利举行&#xff0c;20辆创维EV6 II正式交付经开区政府投入使用。经开区陈琳副书记、党政办公室副主任张驰主任、经开区公车管理平台苑忠民科长、创维汽车总裁、联合创始人吴龙八先生、创维汽车营销公司总经理饶总先…

【JavaSE】/*初识Java*/

目录 一、了解 Java 语言 二、Java 语言的重要性 2.1 使用程度 2.2 工作领域 三、Java 语言的特性 四、Java 的基础语法 五、可能遇到的错误 六、第一个 java 程序代码解析 七、Java 注释 八、Java 标识符 九、Java 关键字 一、了解 Java 语言 Java 是由 Sun Micr…

初识C语言——第十七天

选择语句&#xff1a;switch switch语句&#xff08;整型表达式&#xff09; { 语句项&#xff1a; } 而语句项是什么呢&#xff1f; //是一些case语句&#xff1a; //如下 case 整形常量表达式&#xff1b;常量可以&#xff0c;字符也可以&#xff08;因为字符存储的时…

C++:虚函数表Hook

Hook 在计算机编程中&#xff0c;"Hook"&#xff08;钩子&#xff09;是一种技术&#xff0c;用于拦截并修改特定事件或函数的执行流程。它允许程序员在特定的代码点插入自定义的代码&#xff0c;以实现对程序行为的修改、监视或增强。 虚函数表Hook 虚函数表&#…

k8s遇到的常见问题及解决

1. error: open /var/lib/kubelet/config.yaml: no such file or directory 解决&#xff1a;关键文件缺失&#xff0c;多发生于没有做 kubeadm init就运行了systemctl start kubelet。 要先成功运行kubeadm init 2. 执行初始化kubeadm init ------的时候报错 The HTTP call…