当前位置: 首页 > news >正文

中央处理器(CPU):组成、指令周期、数据通路、控制方式、控制器、指令流水线,补充(多处理器系统、硬件多线程)

中央处理器(CPU,Central Processing Unit),计算机控制和运算的核心,是信息处理和程序运行的执行单元。

CPU主要功能:处理指令、执行操作、控制时间、处理中断、处理数据。

其中,处理指令、执行操作、控制时间、处理中断由控制器完成;处理数据由运算器完成。

一、CPU的组成

CPU主要包括两个部分:控制器、运算器。

1、控制器

控制器主要是协调并控制计算机各个部件执行指令(即取指令、分析指令、执行指令)。

控制器主要有两种:组合逻辑控制器、微程序控制器。

控制器主要由控制单元(CU)、指令寄存器(IR)、程序计数器(PC)、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)组成。

控制单元(CU,Control Unit):是控制器的核心部件。分析指令,并给出控制信号,指挥其他部件执行指令。

        控制单元又由指令译码器(ID)、微操作信号发生器、时序系统组成。

        指令译码器(ID,Instruction Decoder):对指令的操作码进行译码,向微操作信号发生器提供特定操作信号(即明确指令是什么操作)。

        微操作信号发生器:根据IR中的指令、时序信号、PSW中的状态,产生各种控制信号来指挥各部件完成各个微操作。其结构有两种:组合逻辑型、存储逻辑型。

        时序系统:产生时序信号。由统一时钟(CLOCK)分频得到。

指令寄存器(IR,Instruction Register):暂存当前指令。

程序计数器(PC,Program Counter):存放下一条指令的地址。

存储器地址寄存器(MAR,Memory Address Register):暂存指令地址、数据地址。

存储器数据寄存器(MDR,Memory Data Register):暂存从主存读取的数据,或者将要写入主存的数据。

物理上,MAR和MDR在CPU中;逻辑上,MAR和MDR属于主存。

62033a92aa5a49c694ca7e8e7dd83e41.png

2、运算器

运算器主要是进行各种算术运算和逻辑运算。

运算器主要由算术逻辑单元(ALU)、累加寄存器(ACC)、通用寄存器组、暂存寄存器、程序状态字寄存器(PSW)、移位寄存器、计数器等组成。

算术逻辑单元(ALU,Arithmetic and Logic Unit):用于算术运算、逻辑运算。

累加寄存器(ACC,Accumulator):暂存ALU运算的结果,用于实现加法运算。ACC是具有累加功能的通用寄存器。

通用寄存器组:暂存操作数或地址等。

暂存寄存器:暂存从主存或某通用寄存器读取的数据,又不能放进通用寄存器(避免破坏该通用寄存器原有数据),因此放入暂存寄存器。

程序状态字寄存器(PSW,Program State Word):保留运算结果的状态信息(溢出标志、符号标志、进位标志、零标志),这些状态参与并决定微操作的形成。

移位寄存器:运算结果进行移位操作。(乘法:加法和移位的交替进行)

计数器:控制乘法除法的操作步数。

注:CPU中有些寄存器可以编程(即对用户可见,例如:PC、PSW、通用寄存器),有些寄存器不能编程(用户不可见,例如:IR、MAR、MDR、移位寄存器、暂存寄存器)。

二、指令周期

1、指令执行过程:取指令、分析指令、执行指令。

2、CPU主频:CPU的时钟频率,表示在CPU内数字脉冲信号震荡的速度。单位:Hz。

        时钟周期:主频的倒数,是CPU操作最基本的时间单位,每个脉冲信号的时间。可以理解为每秒多少时钟周期。又称节拍、T周期、CPU时钟周期。单位:微妙、纳秒。

        机器周期:又称CPU周期(CPU Cycle)。机器周期包含若干个时钟周期。

                CPU速度快,内存访问速度慢,指令存储在内存,每次取指令都要访问内存,因此把从内存读取指令的最短时间人为规定为机器周期。

        CPI(Clock-cycle Per Instruction):执行一条指令需要多少时钟周期数。

        执行一条指令耗时:CPI * CPU时钟周期  或者  CPI / CPU主频

        IPS(Instructions Per Second):每秒执行多少条指令。IPS = CPU主频 / 平均CPI

        CPU执行耗时(整个程序耗时):(指令条数 *CPI)/ CPU主频  或者  CPU时钟周期数 / CPU主频

3、指令周期

指令周期是CPU获取指令到完成指令所花费的时间。

指令周期包含取指周期、间指周期、执行周期、中断周期。

因分析指令速度很快,因此,把分析指令涵盖在取指周期中。

指令周期一般用若干个机器周期表示。机器周期包含若干个时钟周期。

​(1)取指周期

取指周期的具体操作:(获取指令)

  1. 程序计数器(PC)中的指令地址送到存储器地址寄存器(MAR);
  2. 控制单元(CU)发出控制信号,通过控制总线向主存发出读信号;
  3. 根据MAR中的地址,从主存读取数据,再通过数据总线送入存储器数据寄存器(MDR)中;
  4. MDR中的内容(即指令)送入指令寄存器(IR)中;
  5. IR中指令的操作码送入指令译码器(ID);(若分析指令涵盖在取指周期。因速度快,有些未写出此操作)
  6. CU发出控制信号,PC生成下一条指令的地址。

取指周期对应的数据流:

 (2)间址周期

指令中的地址码,有些是形式地址,需要通过形式地址获取有效地址(即实际地址)。

间址周期的具体操作:(获取实际地址)

  1. IR中指令的地址码送入MAR;
  2. CU发出控制信号,通过控制总线向主存发出读信号;
  3. 根据MAR中的地址,从主存读取数据,再通过数据总线送入MDR中;
  4. 有些会把MDR中的实际地址送至IR中指令的地址码字段。

间址周期对应的数据流:

 (3)执行周期

不同指令的具体操作过程不同,耗时不同,数据流向也不同。

(4)中断周期

因多道程序并发执行,有时需要处理紧急任务或者先执行优先级高的程序,需暂停当前程序去执行其他程序。

因此,每条指令执行完,都要检查是否有中断信号。如有中断信号,需要保存程序断点,待中断处理程序结束,再恢复断点,继续执行当前程序。

一般用堆栈保存断点,堆栈有硬堆栈(寄存器组)和软堆栈(主存中划分一块区域),一般是软堆栈。主存中作为堆栈的地址从高到低,因此堆栈指针(SP)指向栈顶,需SP的值减“1”。

中断周期的具体操作:(保存程序断点)

  1. CU控制,将SP指向栈顶,栈顶的地址送入MAR;
  2. CU发出控制信号,通过控制总线向主存发出写信号;
  3. PC中的内容(即断点)送入MDR;根据MAR的地址将MDR的数据写入主存;
  4. CU控制将中断处理程序的入口地址(由向量地址形成部件产生)送入PC。

中断周期对应的数据流:

 4、指令执行方案

每条指令的耗时不同,需要执行多条指令时,有3种指令执行方案:单指令周期、多指令周期、流水线方案。

单指令周期多指令周期流水线方案

所有指令的完成时间相同。

即选用执行最慢、用时最久的指令时间

不同指令的完成时间不同隔一段时间启动一条指令,尽量多条指令同时执行,但执行步骤不同
 指令之间串行执行 指令之间串行执行指令之间并行执行
相同的节拍数,电路设计简单,但执行快的会造成浪费不同的时钟周期数,电路设计复杂各部件的利用率提高
定长的机器周期不定长的机器周期

三、数据通路

CPU内部各部件之间数据传送的总线称为内部总线(又称CPU内部总线,属于片内总线)。

CPU、主存、通道、I/O设备之间数据传送的总线称为系统总线(包括控制总线、地址总线、数据总线)。

计算机系统之间或与其他系统之间数据传送的总线称为通信总线。

数据通路是数据在各部件之间的数据传送路径(即从哪传出,传到哪,中间经过哪),是由控制器(具体是控制单元CU)发出的控制信号建立的。

各部件之间的数据传送主要有:寄存器之间传送、寄存器和主存之间传送、寄存器与ALU之间传送。

数据通路的基本结构:总线(CPU内部单总线、CPU内部多总线)、专用数据通路。

CPU内部单总线方式CPU内部多总线方式专用数据通路方式
通过一条CPU内部总线完成数据交换通过多条CPU内部总线完成数据交换2个寄存器之间专门的连线
同一时刻只允许1组(2个)部件之间进行数据交换同一时刻支持多组部件之间进行数据交换专门的2个寄存器之间的数据交换

CPU内部单总线方式下的数据传送

寄存器之间传送:(例如:PC传入MAR)

  1. CU发出控制信号(PC输出有效),PC中内容输出到CPU内部总线;
  2. CU发出控制信号(MAR输入有效),CPU内部总线的内容输入到MAR中。

     也可以:CU发出控制信号(PC输出有效、MAR输入有效),PC中内容通过CPU内部总线传送到MAR中。

寄存器和主存之间传送:(例如:CU从主存读取指令)

  1. CU发出控制信号(PC输出有效、MAR输入有效),PC中内容通过CPU内部总线传送到MAR;
  2. CU发出控制信号(MAR输出有效),MAR中内容输出到地址总线;
  3. CU通过控制总线向主存发出读命令; 主存根据地址总线的内容读取数据,输出到数据总线;
  4. CU发出控制信号(MDR输入有效),数据总线的内容输入到MDR;
  5. CU发出控制信号(MDR输出有效、IR输入有效),MDR中内容通过CPU内部总线传送到IR;
  6. PC获得下一条指令的地址。

        

寄存器与ALU之间传送:(例如:加法指令)

加法运算中算术逻辑单元(ALU)同时需要2个操作数,但指令中只给出1个操作数的地址(从主存读取放入暂存寄存器),另一个操作数隐含在累加寄存器(ACC)中。

  1. CU发出控制信号(IR输出有效、MAR输入有效),IR中内容通过CPU内部总线传送到MAR;
  2. CU发出控制信号(MAR输出有效),MAR中内容输出到地址总线;
  3. CU通过控制总线向主存发出读命令; 主存根据地址总线的内容读取数据,输出到数据总线;
  4. CU发出控制信号(MDR输入有效),数据总线的内容输入到MDR;
  5. CU发出控制信号(MDR输出有效、Y暂存寄存器输入有效),MDR中内容通过CPU内部总线传送到Y暂存寄存器;
  6. CU发出控制信号(ACC输出有效、ALU输入有效),ACC中内容通过CPU内部总线传送到ALU,同时,Y暂存寄存器中内容直接送到ALU;
  7. CU向ALU发送加命令,ALU进行加法运算,并将结果存入Z暂存寄存器;
  8. CU发出控制信号(Z暂存寄存器输出有效、ACC输入有效),Z暂存寄存器的内容通过CPU内部总线传送到ACC。

专用数据通路下的数据传送

寄存器和主存之间传送:(例如:CU从主存读取指令)

  1. CU发出控制信号(PC与MAR之间的通路有效),PC中内容直接传送到MAR;
  2. CU发出控制信号(MAR输出有效),MAR中内容输出到地址总线;
  3. CU通过控制总线向主存发出读命令; 主存根据地址总线的内容读取数据,输出到数据总线;
  4. CU发出控制信号(MDR输入有效),数据总线的内容输入到MDR;
  5. CU发出控制信号(MDR与IR之间的通路有效),MDR中内容直接传送到IR;
  6. PC获得下一条指令的地址。

注:很多通用寄存器都连接算术逻辑单元(ALU),通过多路选择器或者三态门确定是哪个通用寄存器。

四、CPU的控制方式 

CPU的控制方式:产生不同微操作序列所用的时序控制方式。主要有三种:同步控制方式、异步控制方式、联合控制方式。

同步控制方式:整个系统所有的控制信号来自一个统一的时钟信号CLK。

        电路设计简单,但速度慢。

异步控制方式:没有统一的基准时钟信号,通过应答的方式进行联络。

        电路设计复杂,速度快。

联合控制方式:大部分同步控制,小部分异步控制。

五、控制器的设计

控制器的核心部件是控制单元(CU),控制器有两种:硬布线控制器、微程序控制器。

因此,CU的设计有两种:硬布线、微程序。

硬布线控制器的设计微程序控制器的设计
纯硬件硬件和软件的结合
一般用于RISC(精简指令集系统)一般用于CISC(复杂指令集系统)
速度快速度慢
烦琐、不规整较规整
微操作控制信号由组合逻辑电路根据操作码、标志、时钟即时产生微操作控制信号以微程序的形式存储在控制存储器中,执行指令时读出微指令即可

指令越多、设计和实现越复杂;

扩充一条指令,设计需要大改

容易扩充指令

安排微操作时序的原则:

1、微操作的先后顺序不能随意改变。

2、被控对象不同的微操作尽量安排在同一节拍(例如:CPU内部部件之间、CPU与主存之间,这两种可安排在同一节拍)。

3、占用时间短的微操作,尽量安排在同一节拍,且允许有先后顺序。

1、硬布线控制器的设计

硬布线控制器是将控制单元(CU)做成产生专门固定时序控制信号的逻辑电路(由门电路和触发器构成)。逻辑电路根据指令操作码、当前的机器周期(阶段)、节拍信号、标志(状态信息)产生微命令。

硬布线控制器的设计步骤:

 (1)分析所有指令的每个阶段的微操作序列。(即所有指令,指令周期的每个阶段,都有哪些微操作)

(2)选择CPU的控制方式。(即机器周期是否定长,若定长,每个机器周期多少节拍数)

(3)安排微操作时序。(即所有指令,每个机器周期的每个节拍,安排哪些微操作)

(4)电路设计。

        (4.1)列出操作时间表。(即每个机器周期,每个节拍,所有该节拍的微操作,每个指令若需要的微操作,标记1)

        (4.2)写出微操作命令的最简表达式。(涵盖需要该微操作的所有机器周期所有节拍所有指令)

        (4.3)画出逻辑图。(即电路图)

2、微程序控制器的设计

 采用“存储程序”的思想,事先将微程序存储在控制单元(CU)的控制存储器(CM)中。执行指令时,读取相应微指令,微指令发出微命令,执行对应的微操作。

微程序控制器的设计
 静态微程序控制器的设计动态微程序控制器的设计
ROMEPROM
微程序写入CM后不再改变微程序写入CM后可改变

一条指令对应一个微程序。一个微程序有若干个微程序段(取指周期微程序段、间指周期微程序段、执行周期微程序段、中断周期微程序段)。

一个微程序段有多个微指令,一个微指令有1个或多个微操作。

每个指令必定取指令和执行指令,一定有取指周期和执行周期;不一定有间指周期和中断周期。

每个指令的取指周期、间指周期、中断周期对应的微指令序列是一样的;不同指令的执行周期对应的微指令序列不同。

控制存储器(CM)中默认存储了取指周期微程序段。

(1)微程序控制器的控制单元(CU)的基本结构
  • 控制存储器(CM):存储指令对应的微程序。由ROM制成。按地址寻访。
  • 微地址形成部件:形成微程序的初始地址(微程序的第一条微指令的地址)和后续地址。
  • 顺序逻辑:控制执行顺序。调整并确定将要执行的微指令地址。
  • 微程序地址寄存器(CMAR):别名μPC,暂存微指令地址。
  • 地址译码:将地址转换为存储单元控制信号。即根据地址找到对应存储单元。
  • 微程序数据寄存器(CMDR):别名μIR,暂存从CM读取的微指令。位数与微指令字长相同。

 (2)微程序控制器的CU的工作过程

取指周期:

  • 程序运行,取指周期微程序段的入口地址(即取指周期微程序段的第一条微指令地址)由硬件自动给出,送入CMDR,开始执行取指周期微程序段;
  • CMDR中的操作控制字段产生相关的控制信号(即指挥部件完成相应的微操作)。CMDR中的下地址字段(下一个微指令地址)传送到顺序逻辑,顺序逻辑根据微地址形成部件的信息和标志、时钟调整下一个将要执行的微指令地址;
  • 取指周期微程序段执行结束后,指令已被送入IR;

取指周期后的机器周期:

  • CU接收到IR中指令的操作码,微地址形成部件产生该指令对应的微程序入口地址;
  • 顺序逻辑接收微地址形成部件的信息和状态字寄存器中的标志信息、时钟系统产生的时钟信号,确定将要执行的微指令的地址;
  • 微指令地址传送到CMAR,再由地址译码从CM中读取微指令,传送到CMDR;
  • CMDR中的操作控制字段产生相关的控制信号。下地址传送到顺序逻辑,顺序逻辑根据微地址形成部件的信息和标志、时钟调整下一个将要执行的微指令地址。

 (3)微指令的设计

有的微指令可以并行发出多个微命令,有的微指令只能发出一个微命令。一个微命令对应一个微操作。

因此,微指令有3种格式:水平型、垂直型、混合型。

① 水平型:一个微指令并行发出多个微命令。微命令之间具有相容性。

        基本格式:操作控制、顺序控制(下地址,下一条微指令的地址)。

水平型的操作控制字段的编码/控制方式
直接编码方式字段直接编码方式字段间接编码方式
操作控制字段的每一位代表一个微操作,即水平呈现

微操作分成几段,相容的在不同段,互斥的在同一段,每段留出一个“不操作”的状态,需要译码器处理。

微操作分成几段,一个微命令需要另一个微命令解释,需要多级译码器处理。又称隐式编码

 速度快,微指令条数少。但微指令长度比较长,会使CM的容量较大

 可以缩短微指令字长,但速度较慢进一步缩短微指令字长,但速度最慢,削弱了并行控制能力

② 垂直型:一个微指令只能发出一个微命令。微命令之间具有互斥性。

        基本格式:微操作码、目的地址、源地址。

        操作码已经规定了具体功能(即操作码已给出执行什么操作)。

        微指令长度短,但微程序的微指令条数多,速度慢。

③ 混合型:在垂直型的基础上加上不太复杂的并行操作。

         微指令长度较短,微程序的微指令条数不多,速度加快。

微指令的地址有6种形成方式:

  1. 由当前微指令的下地址字段直接给出。
  2. 增量计数法。(类似PC自动加“1”。即CMDR自动加“1”)
  3. 微指令的操作码通过微地址形成部件产生微指令的地址。
  4. 在微指令指明转移方式和转移地址,进行分支转移。(类似转移指令)
  5. 通过测试网络即通过内部处理电路来调整地址。(顺序逻辑)
  6. 通过硬件产生微程序入口地址。(专门的硬件记录微程序首地址)

实际应用中:

  • 取指周期的第一条微指令地址由硬件自动给出。
  • 同一个微程序段的下一条微指令的地址就是当前微指令的下地址字段。
  • 下一个机器周期的地址,在取指周期结束后,当前指令的操作码传送到微地址形成部件产生下一个机器周期的第一条微指令地址(即下一个微程序段的首地址)。
  • 每一条指令执行完,该条指令最后一条微指令的下地址会给出取指周期的第一条微指令地址,进行下一条指令的操作。
(4)微程序控制单元的设计

 ① 分析所有指令的每个阶段的微操作序列。(即所有指令,指令周期的每个阶段,都有哪些微操作)

② 写出指令对应的微操作命令和节拍安排。(即所有指令,每个机器周期的每个节拍,安排哪些微操作)

        注意:补充微操作控制器特有的微操作(下一条微指令地址送入CMAR;取指结束后,指令的操作码送入微地址形成部件生成下一个机器周期的第一条微指令地址再送入CMAR)

③ 确定微指令格式。(即根据微操作个数确定编码方式,以及操作控制字段位数;根据CM存储的微指令总数确定控制顺序字段的位数;最后确定微指令字长)

④ 编写微指令码点。(根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点即操作控制字段的二进制内容)

六、指令流水线

指令流水线:把指令划分成若干个阶段,每个阶段可以和其他指令的阶段并行执行。

有些把指令分成5个阶段:取指令、译码、执行指令(主要涉及ALU)、访存(取操作数)、写回结果。

流水线的性能指标:

吞吐量:单位时间内完成多少任务(或输出多少结果)。

加速比:完成同一批任务,不使用流水线的耗时和使用流水线的耗时之比。

效率:设备利用率。设备工作时间和总时间之比。

时空图:横坐标是时间,纵坐标是指令的各个阶段(不同阶段对应的硬件资源不同)。

 附:不使用流水线(顺序执行)

流水线可能遇到的冲突(即影响因素):

 流水线的分类:

流水线的多发技术:

补充:

1、多处理机系统

 

2、硬件多线程

相关文章:

中央处理器(CPU):组成、指令周期、数据通路、控制方式、控制器、指令流水线,补充(多处理器系统、硬件多线程)

中央处理器(CPU,Central Processing Unit),计算机控制和运算的核心,是信息处理和程序运行的执行单元。 CPU主要功能:处理指令、执行操作、控制时间、处理中断、处理数据。 其中,处理指令、执行…...

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

作者:刘军 不论您是一名开发者、架构师、CTO, 如果您曾深度参与在微服务开发中,那么相信您一定有过开源微服务框架或体系选型的疑问:Apache Dubbo、Spring Cloud、gRPC 以及 Service Mesh 体系产品如 Istio,到底应该选…...

Nginx的HTTPS部署与安全性能优化

Nginx作为一款高性能的Web服务器和反向代理服务器,被广泛用于应用部署和负载均衡。在安全环保意识的逐渐提高下,HTTPS也成为现代Web应用中必不可少的一环。本篇文章将重点介绍Nginx的HTTPS部署和安全性能优化。 一、Nginx的HTTPS部署 证书申请 首先需要去…...

5.8. Trusted Board Boot

5.8. Trusted Board Boot启动 Trusted Board Boot(TBB) 功能通过验证所有固件镜像(包括正常世界引导加载程序)来防止恶意固件在平台上运行。它通过使用公钥加密标准 (PKCS) 建立信任链来实现这一点。 本文介绍了可信固件-A (TF-A) TBB 的设计,它是Trusted Board Boot(TBBR…...

微信小程序——van-field中的left-icon属性自定义

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

一文学会lua脚本

文章目录 0.前言背景应用 1. 学习大纲1. 学习基本语法:2. 理解函数和模块:3. 深入数据结构:4. 高级特性和技巧:5. 实践项目: 2. Lua脚本2.1 学习基本语法2.2 理解函数和模块2.3 深入数据结构2.4 高级特性和技巧 3. 高级…...

学习JAVA打卡第四十二天

正则表达式及字符串的替换与分解 ⑴正则表达式 正则表达式是string对象的字符序列,该字符序列中含有具有特殊意义的字符,这些特殊字符称作正则表达式的元字符。 注:由于“ ”代表任何一个字符,所以在正则表达式中如果想使用普…...

2023-8-25食物链

题目链接&#xff1a;食物链 #include <iostream>using namespace std;const int N 50010;int n, m; int p[N], d[N];int find(int x) {if(p[x] ! x){int t find(p[x]);d[x] d[p[x]];p[x] t;}return p[x]; }int main() {cin >> n >> m;for(int i 1; i…...

为什么要使用IP地址进行定位

IP地址定位是一种以互联网协议地址&#xff08;IP地址&#xff09;为基础的技术&#xff0c;它能够准确地确定一个设备在互联网上的位置。这种技术的应用范围非常广泛&#xff0c;从个人用户到企业机构甚至是国家安全和网络安全等领域都需要使用IP地址定位。 首先&#xff0c;I…...

CSS概念

1、CSS与HTML结合方式 1.1 第一种方式 内联/行内样式 就是在我们的HTML标签上通过style属性来引用CSS代码。 优点:简单方便 &#xff1b; 缺点:只能对一个标签进行修饰。 1.2 第二种方式 内部样式 我们通过<style>标签来声明我们的CSS. 通常<style>标签我们推荐写在…...

淘宝API技术解析,实现关键词搜索淘宝商品(商品详情接口等)

淘宝提供了开放平台接口&#xff08;API&#xff09;来实现按图搜索淘宝商品的功能。您可以通过以下步骤来实现&#xff1a; 获取开放平台的访问权限&#xff1a;首先&#xff0c;您需要在淘宝开放平台创建一个应用&#xff0c;获取访问淘宝API的权限。具体的申请步骤和要求可以…...

Redis 7 教程 数据类型 基础篇

🌹 引导 Commands | Redishttps://redis.io/commands/Redis命令中心(Redis commands) -- Redis中国用户组(CRUG)Redis命令大全,显示全部已知的redis命令,redis集群相关命令,近期也会翻译过来,Redis命令参考,也可以直接输入命令进行命令检索。...

-bash: tree: command not found 的解决方法

在学习git操作时发现使用命令tree .git时显示错误 在网上查阅资料后&#xff0c;发现可能是没有安装生成tree的应用&#xff0c;所以我们使用命令安装应用即可 sudo yum install -y tree像这样就是安装成功了 我们再来试试 问题解决了&#xff0c;成功显示出树形结构...

SPI总线协议

简述 SPI协议是一种芯片与芯片之间的通讯&#xff0c;全称是Serial Peripheral Interface SPI通讯采用一主多从模式&#xff0c;产生时钟的一侧称为主机&#xff0c;另一侧称为从机。只有一个主机&#xff08;一般来说可以是微控制器/MCU&#xff09;&#xff0c;但是可以有一…...

Ubuntu20.04配置mysql配置主从复制

ubuntu20.04&#xff1a;mysql主库 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 修改完毕重启 sudo service mysql stop sudo service mysql start主库mysqld.cnf配置 [mysqld] ... # bind-address>->--- 127.0.0.1 # 注释掉&#xff0c;允许外部连接 # mysqlx-b…...

HTTP 服务器(基于go实现)

编写一个 HTTP 服务器&#xff0c;接收客户端 request&#xff0c;并将 request 中带的 header 写入 response header 解析HTTP请求头 import ("fmt""net/http" )func headers(w http.ResponseWriter, r *http.Request) {// 将request中的信息写入到 w中…...

【整数二分】

数的范围 #include<iostream> using namespace std; const int N 100000 11;int n; int q; int a[N];int key;int main(){cin>>n>>q;for(int i0;i<n;i)cin>>a[i];while(q--){cin>>key;//先去找左&#xff08;大于等于&#xff09;再去找右…...

开发一款AR导览导航小程序多少钱?ar地图微信小程序 ar导航 源码

随着科技的不断发展&#xff0c;增强现实&#xff08;AR&#xff09;技术在不同领域展现出了巨大的潜力。AR导览小程序作为其中的一种应用形式&#xff0c;为用户提供了全新的观赏和学习体验。然而&#xff0c;开发一款高质量的AR导览小程序需要投入大量的时间、人力和技术资源…...

Shell 编程快速入门 之 函数基础知识

目录 shell函数基础知识 函数定义 函数名 函数体 参数 返回值 return返回值的含义 return与echo返回值的区别 可变参数函数 自定义库函数 定义库函数 调用库函数 执行结果 递归函数 阶乘函数 斐波那契函数 shell函数基础知识 函数定义 函数名 Shell函数用…...

Flink流批一体计算(18):PyFlink DataStream API之计算和Sink

目录 1. 在上节数据流上执行转换操作&#xff0c;或者使用 sink 将数据写入外部系统。 2. File Sink File Sink Format Types Row-encoded Formats Bulk-encoded Formats 桶分配 滚动策略 3. 如何输出结果 Print 集合数据到客户端&#xff0c;execute_and_collect…...

03.sqlite3学习——数据类型

目录 sqlite3学习——数据类型 SQL语句的功能 SQL语法 SQL命令 SQL数据类型 数字类型 整型 浮点型 定点型decimal 浮点型 VS decimal 日期类型 字符串类型 CHAR和VARCHAR BLOB和TEXT SQLite 数据类型 SQLite 存储类 SQLite 亲和类型(Affinity)及类型名称 Boo…...

LLM-chatgpt训练过程

流程简介 主要包含模型预训练和指令微调两个阶段 模型预训练&#xff1a;搜集海量的文本数据&#xff0c;无监督的训练自回归decoder&#xff1b; O T P ( O t < T ) O_TP(O_{t<T}) OT​P(Ot<T​)&#xff0c;损失函数CE loss指令微调&#xff1a;在输入文本中加入…...

【学习笔记】[ABC274Ex] XOR Sum of Arrays

有点难&#x1f605; 真的是 A B C ABC ABC的难度吗&#x1f605; 非常精妙的哈希题目。 定义矩阵乘法&#xff1a; c i , j ⊕ ( a i , k & b k , j ) c_{i,j}\oplus (a_{i,k}\& b_{k,j}) ci,j​⊕(ai,k​&bk,j​) 之所以可以矩阵乘法是因为满足 ( a ⊕ b )…...

抖音web频道爬虫

抖音web频道爬虫代码&#xff1a; <?php header(Content-Type:application/json; charsetutf-8);//抖音频道爬虫class DouyinChannel{private $app_id 1;private $spider_code 1;private $channels [["channel_name" > "热点","url"…...

sql中的替换函数replace()总结

1&#xff0c;表达式 --replace&#xff08;&#xff09;--语法: REPLACE ( string_expression , string_pattern , string_replacement )--参数&#xff1a;string_expression&#xff1a;字符串表达式string_pattern&#xff1a;想要查找的子字符串string_replacement&#…...

vue3 vite使用 monaco-editor 报错

报错&#xff1a;Unexpected usage at EditorSimpleWorker.loadForeignModule 修改配置&#xff1a; "monaco-editor-webpack-plugin": "^4.2.0",删除不用 版本&#xff1a; "monaco-editor": "^0.28.1", 修改如下&#xff1a; opti…...

微信小程序获取蓝牙权限

要获取微信小程序中的蓝牙权限&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. 在 app.json 文件中添加以下代码&#xff1a; "permissions": { "scope.userLocation": { "desc": "需要获取您的地理位置授权以搜索…...

GE 8920-PS-DC安全模块

安全控制&#xff1a; 这个安全模块通常用于实现工业自动化系统中的安全控制功能。它可以监测各种安全参数&#xff0c;如机器运动、温度、压力等&#xff0c;以确保系统在安全范围内运行。 PLC兼容性&#xff1a; 通常&#xff0c;这种安全模块可以与可编程逻辑控制器&#x…...

UG\NX二次开发 使用BlockUI设计对话框时,如何设置默认的开发语言?

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,C\C++,Qt-CSDN博客 简介: NX二次开发使用BlockUI设计对话框时,如何设置默认的代码语言? 效果: 方法: 依次打开“文件”->“实用工具”->“用户默认设置”->“用户界面”->“操作记录”->“…...

W5500-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…...

24 WEB漏洞-文件上传之WAF绕过及安全修复

目录 WAF绕过上传参数名解析:明确哪些东西能修改?常见绕过方法&#xff1a;符号变异-防匹配( " ;)数据截断-防匹配(%00 ; 换行)重复数据-防匹配(参数多次)搜索引擎搜索fuzz web字典文件上传安全修复方案 WAF绕过 safedog BT(宝塔) XXX云盾 宝塔过滤的比安全狗厉害一些&a…...

Python科研绘图--Task03

目录 图类型 关系类型图 散点图的例子 数据分布型图 rugplot例子 分类数据型图 ​编辑回归模型分析型图 多子图网格型图 FacetGrid() 函数 PairGrid() 函数 绘图风格、颜色主题和绘图元素缩放比例 绘图风格 颜色主题 绘图元素缩放比列 图类型 关系类型图 数据集变量…...

ssm端游游戏账号销售管理系统源码和论文

ssm端游游戏账号销售管理系统源码和论文069 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面…...

ssm+vue农家乐信息平台源码和论文

ssmvue农家乐信息平台源码和论文066 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 1、研究现状 国外&#xff0c;农家乐都被作为潜在的发展农村经济&#xff0c;增加农民收入的重要手段&#xff0c;让农户广…...

安装启动yolo5教程

目录 一、下载yolo5项目 二、安装miniconda&#xff08;建议不要安装在C盘&#xff09; 三、安装CUDA 四、安装pytorch 五、修改配置参数 六、修改电脑参数 七、启动项目 博主硬件&#xff1a; Windows 10 家庭中文版 一、下载yolo5项目 GitHub - ultralytics/yolov5:…...

封装redis 分布式锁 RedisCallback

RedisCallback 是redis 一个回调接口&#xff0c;在 Redis 连接后执行单个命令&#xff0c;返回执行命令后的结果。 如果在使用 RedisCallback 时&#xff0c;需要自动获取 Redis 连接资源&#xff0c;使用完毕后并释放连接资源。 RedisTemplate 类提供了一个 execute 方法&am…...

代码随想录算法训练营第17期第32天 | 122. 买卖股票的最佳时机 II、455.分发饼干、376. 摆动序列、53. 最大子序和

122. 买卖股票的最佳时机 II 我好像记得这道题是怎么写的&#xff0c;也不知道是福是祸 1. 收集每天的正利润就可以&#xff0c;收集正利润的区间&#xff0c;就是股票买卖的区间&#xff0c;而我们只需要关注最终利润&#xff0c;不需要记录区间 2.局部最优&#xff1a;收集…...

iOS HealthKit 介绍

文章目录 一、简介二、权限配置1. 在开发者账号中勾选HealthKit2. 在targets的capabilities中添加HealthKit。3. infoPlist需要配置权限 三、创建健康数据管理类1. 引入头文件2. 健康数据读写权限3. 检查权限4. 读取步数数据5. 写入健康数据 四、运行获取权限页面 一、简介 He…...

Windows平台Unity下播放RTSP或RTMP如何开启硬解码?

我们在做Windows平台Unity播放RTMP或RTSP的时候&#xff0c;遇到这样的问题&#xff0c;比如展会、安防监控等场景下&#xff0c;需要同时播放多路RTMP或RTSP流&#xff0c;这样对设备性能&#xff0c;提出来更高的要求。 虽然我们软解码&#xff0c;已经做的资源占有非常低了…...

模板方法模式在JDBCTemplate中的应用

上一篇中系统总结了模板模式的原理和使用&#xff0c;提到了模板方法和回调接口。回调接口和模板方法类之间的关系可以看作服务与被服务的关系&#xff0c;模板方法类想要回调接口做事&#xff0c;就要提供相应的资源&#xff0c;接口用提供的资源做事&#xff0c;完事后&#…...

如何在Debian中同步系统时间?Debian 系统时间配置(NTP服务)

A. 更新源,并安装ntpdate apt-get update apt-get install ntpdate ntpdate ntp1.aliyun.com 修改时区 修改设置Linux服务器时区 方法 A 命令 : “tzselect” 方法 B 仅限于RedHat Linux 和 CentOS 命令 : “timeconfig” 方法 C 适用于Debian 命令 : “dpkg-reconfigur…...

模板方法模式(十六)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了代理模式(十五), 如果没有看过, 请观看上一章 一. 模板模式 引用 菜鸟教程里面的 模板模式介绍: https://www.runoob.com/design-pattern/template-pattern.html 在模板模式&#xff08;Template Pattern&#xff09;…...

机器学习笔记之优化算法(十九)牛顿法与正则化

机器学习笔记之优化算法——再回首:牛顿法与正则化 引言回顾&#xff1a;经典牛顿法及其弊端牛顿法&#xff1a;算法步骤迭代过程中可能出现的问题正则化 Hessian Matrix \text{Hessian Matrix} Hessian Matrix与相应问题 引言 本节我们介绍经典牛顿法在训练神经网络过程中的迭…...

Java面试之单例模式的六种实现方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么要用单例模式二、单例模式的六种实现2.1 饿汉式2.1.1 饿汉式代码实现2.1.2 饿汉式代码实现要点解析2.1.3 饿汉式代码实现优点2.1.4 饿汉式代码实现缺…...

re正则入门

&#x1f338;re正则入门 正则表达式 (Regular Expression) 又称 RegEx, 是用来匹配字符的一种工具. 在一大串字符中寻找你需要的内容. 它常被用在很多方面, 比如网页爬虫, 文稿整理, 数据筛选等等 简单的匹配 正则表达式无非就是在做这么一回事. 在文字中找到特定的内容, 比如…...

C++ Day5

目录 一、静态成员 1.1 概念 1.2 格式 1.3 银行账户实例 二、类的继承 2.1 目的 2.2 概念 2.3 格式 2.4 继承方式 2.5 继承中的特殊成员函数 2.5.1 构造函数 2.5.2析构函数 2.5.3 拷贝构造函数 2.5.4拷贝赋值函数 总结&#xff1a; 三、多继承 3.1 概念 3.2 格…...

el-element:自定义参数

希望在下拉框、输入框、多选框中添加自定义参数&#xff0c;这在项目中是非常常见的 1、 Select选择器中remote-method方法带自定义参数 :remote-method"(query)>{remoteMethod(query,自定义参数)}" remoteMethod(query, pid){ } 2、 el多选框方法追加参数&…...

“分布式”与“集群”初学者的技术总结

一、“分布式”与“集群”的解释&#xff1a; 分布式&#xff1a;把一个囊肿的系统分成无数个单独可运行的功能模块 集群&#xff1a; 把相同的项目复制进行多次部署&#xff08;可以是一台服务器多次部署&#xff0c;例如使用8080部署一个&#xff0c;8081部署一个&#xff0c…...

C++day5(静态成员、类的继承、多继承)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.静态数据成员静态成员函数&#xff08;银行账户实例&#xff09; #include <iostream>using namespace std;class BankAccount { private:double balance; //余额static double interest_rate; //利率 p…...

2023MySQL+MyBatis知识点整理

文章目录 主键 外键 的区别&#xff1f;什么是范式&#xff1f;什么是反范式&#xff1f;什么是事务&#xff1f;MySQL事务隔离级别&#xff1f;MySQL事务默认提交模式&#xff1f;MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗&#xff1f;MySQL支持哪几种时间类型&a…...