中央处理器(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属于主存。

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)取指周期
取指周期的具体操作:(获取指令)
- 程序计数器(PC)中的指令地址送到存储器地址寄存器(MAR);
- 控制单元(CU)发出控制信号,通过控制总线向主存发出读信号;
- 根据MAR中的地址,从主存读取数据,再通过数据总线送入存储器数据寄存器(MDR)中;
- MDR中的内容(即指令)送入指令寄存器(IR)中;
- IR中指令的操作码送入指令译码器(ID);(若分析指令涵盖在取指周期。因速度快,有些未写出此操作)
- CU发出控制信号,PC生成下一条指令的地址。
取指周期对应的数据流:
(2)间址周期
指令中的地址码,有些是形式地址,需要通过形式地址获取有效地址(即实际地址)。
间址周期的具体操作:(获取实际地址)
- IR中指令的地址码送入MAR;
- CU发出控制信号,通过控制总线向主存发出读信号;
- 根据MAR中的地址,从主存读取数据,再通过数据总线送入MDR中;
- 有些会把MDR中的实际地址送至IR中指令的地址码字段。
间址周期对应的数据流:
(3)执行周期
不同指令的具体操作过程不同,耗时不同,数据流向也不同。
(4)中断周期
因多道程序并发执行,有时需要处理紧急任务或者先执行优先级高的程序,需暂停当前程序去执行其他程序。
因此,每条指令执行完,都要检查是否有中断信号。如有中断信号,需要保存程序断点,待中断处理程序结束,再恢复断点,继续执行当前程序。
一般用堆栈保存断点,堆栈有硬堆栈(寄存器组)和软堆栈(主存中划分一块区域),一般是软堆栈。主存中作为堆栈的地址从高到低,因此堆栈指针(SP)指向栈顶,需SP的值减“1”。
中断周期的具体操作:(保存程序断点)
- CU控制,将SP指向栈顶,栈顶的地址送入MAR;
- CU发出控制信号,通过控制总线向主存发出写信号;
- PC中的内容(即断点)送入MDR;根据MAR的地址将MDR的数据写入主存;
- CU控制将中断处理程序的入口地址(由向量地址形成部件产生)送入PC。
中断周期对应的数据流:
4、指令执行方案
每条指令的耗时不同,需要执行多条指令时,有3种指令执行方案:单指令周期、多指令周期、流水线方案。
| 单指令周期 | 多指令周期 | 流水线方案 |
|---|---|---|
| 所有指令的完成时间相同。 即选用执行最慢、用时最久的指令时间 | 不同指令的完成时间不同 | 隔一段时间启动一条指令,尽量多条指令同时执行,但执行步骤不同 |
| 指令之间串行执行 | 指令之间串行执行 | 指令之间并行执行 |
| 相同的节拍数,电路设计简单,但执行快的会造成浪费 | 不同的时钟周期数,电路设计复杂 | 各部件的利用率提高 |
| 定长的机器周期 | 不定长的机器周期 |
三、数据通路
CPU内部各部件之间数据传送的总线称为内部总线(又称CPU内部总线,属于片内总线)。
CPU、主存、通道、I/O设备之间数据传送的总线称为系统总线(包括控制总线、地址总线、数据总线)。
计算机系统之间或与其他系统之间数据传送的总线称为通信总线。
数据通路是数据在各部件之间的数据传送路径(即从哪传出,传到哪,中间经过哪),是由控制器(具体是控制单元CU)发出的控制信号建立的。
各部件之间的数据传送主要有:寄存器之间传送、寄存器和主存之间传送、寄存器与ALU之间传送。
数据通路的基本结构:总线(CPU内部单总线、CPU内部多总线)、专用数据通路。
| CPU内部单总线方式 | CPU内部多总线方式 | 专用数据通路方式 |
|---|---|---|
| 通过一条CPU内部总线完成数据交换 | 通过多条CPU内部总线完成数据交换 | 2个寄存器之间专门的连线 |
| 同一时刻只允许1组(2个)部件之间进行数据交换 | 同一时刻支持多组部件之间进行数据交换 | 专门的2个寄存器之间的数据交换 |
CPU内部单总线方式下的数据传送
寄存器之间传送:(例如:PC传入MAR)
- CU发出控制信号(PC输出有效),PC中内容输出到CPU内部总线;
- CU发出控制信号(MAR输入有效),CPU内部总线的内容输入到MAR中。
也可以:CU发出控制信号(PC输出有效、MAR输入有效),PC中内容通过CPU内部总线传送到MAR中。
寄存器和主存之间传送:(例如:CU从主存读取指令)
- CU发出控制信号(PC输出有效、MAR输入有效),PC中内容通过CPU内部总线传送到MAR;
- CU发出控制信号(MAR输出有效),MAR中内容输出到地址总线;
- CU通过控制总线向主存发出读命令; 主存根据地址总线的内容读取数据,输出到数据总线;
- CU发出控制信号(MDR输入有效),数据总线的内容输入到MDR;
- CU发出控制信号(MDR输出有效、IR输入有效),MDR中内容通过CPU内部总线传送到IR;
- PC获得下一条指令的地址。
寄存器与ALU之间传送:(例如:加法指令)
加法运算中算术逻辑单元(ALU)同时需要2个操作数,但指令中只给出1个操作数的地址(从主存读取放入暂存寄存器),另一个操作数隐含在累加寄存器(ACC)中。
- CU发出控制信号(IR输出有效、MAR输入有效),IR中内容通过CPU内部总线传送到MAR;
- CU发出控制信号(MAR输出有效),MAR中内容输出到地址总线;
- CU通过控制总线向主存发出读命令; 主存根据地址总线的内容读取数据,输出到数据总线;
- CU发出控制信号(MDR输入有效),数据总线的内容输入到MDR;
- CU发出控制信号(MDR输出有效、Y暂存寄存器输入有效),MDR中内容通过CPU内部总线传送到Y暂存寄存器;
- CU发出控制信号(ACC输出有效、ALU输入有效),ACC中内容通过CPU内部总线传送到ALU,同时,Y暂存寄存器中内容直接送到ALU;
- CU向ALU发送加命令,ALU进行加法运算,并将结果存入Z暂存寄存器;
- CU发出控制信号(Z暂存寄存器输出有效、ACC输入有效),Z暂存寄存器的内容通过CPU内部总线传送到ACC。

专用数据通路下的数据传送
寄存器和主存之间传送:(例如:CU从主存读取指令)
- CU发出控制信号(PC与MAR之间的通路有效),PC中内容直接传送到MAR;
- CU发出控制信号(MAR输出有效),MAR中内容输出到地址总线;
- CU通过控制总线向主存发出读命令; 主存根据地址总线的内容读取数据,输出到数据总线;
- CU发出控制信号(MDR输入有效),数据总线的内容输入到MDR;
- CU发出控制信号(MDR与IR之间的通路有效),MDR中内容直接传送到IR;
- 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)中。执行指令时,读取相应微指令,微指令发出微命令,执行对应的微操作。
| 静态微程序控制器的设计 | 动态微程序控制器的设计 |
|---|---|
| ROM | EPROM |
| 微程序写入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种形成方式:
- 由当前微指令的下地址字段直接给出。
- 增量计数法。(类似PC自动加“1”。即CMDR自动加“1”)
- 微指令的操作码通过微地址形成部件产生微指令的地址。
- 在微指令指明转移方式和转移地址,进行分支转移。(类似转移指令)
- 通过测试网络即通过内部处理电路来调整地址。(顺序逻辑)
- 通过硬件产生微程序入口地址。(专门的硬件记录微程序首地址)
实际应用中:
- 取指周期的第一条微指令地址由硬件自动给出。
- 同一个微程序段的下一条微指令的地址就是当前微指令的下地址字段。
- 下一个机器周期的地址,在取指周期结束后,当前指令的操作码传送到微地址形成部件产生下一个机器周期的第一条微指令地址(即下一个微程序段的首地址)。
- 每一条指令执行完,该条指令最后一条微指令的下地址会给出取指周期的第一条微指令地址,进行下一条指令的操作。
(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食物链
题目链接:食物链 #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地址定位是一种以互联网协议地址(IP地址)为基础的技术,它能够准确地确定一个设备在互联网上的位置。这种技术的应用范围非常广泛,从个人用户到企业机构甚至是国家安全和网络安全等领域都需要使用IP地址定位。 首先,I…...
CSS概念
1、CSS与HTML结合方式 1.1 第一种方式 内联/行内样式 就是在我们的HTML标签上通过style属性来引用CSS代码。 优点:简单方便 ; 缺点:只能对一个标签进行修饰。 1.2 第二种方式 内部样式 我们通过<style>标签来声明我们的CSS. 通常<style>标签我们推荐写在…...
淘宝API技术解析,实现关键词搜索淘宝商品(商品详情接口等)
淘宝提供了开放平台接口(API)来实现按图搜索淘宝商品的功能。您可以通过以下步骤来实现: 获取开放平台的访问权限:首先,您需要在淘宝开放平台创建一个应用,获取访问淘宝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时显示错误 在网上查阅资料后,发现可能是没有安装生成tree的应用,所以我们使用命令安装应用即可 sudo yum install -y tree像这样就是安装成功了 我们再来试试 问题解决了,成功显示出树形结构...
SPI总线协议
简述 SPI协议是一种芯片与芯片之间的通讯,全称是Serial Peripheral Interface SPI通讯采用一主多从模式,产生时钟的一侧称为主机,另一侧称为从机。只有一个主机(一般来说可以是微控制器/MCU),但是可以有一…...
Ubuntu20.04配置mysql配置主从复制
ubuntu20.04: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 # 注释掉,允许外部连接 # mysqlx-b…...
HTTP 服务器(基于go实现)
编写一个 HTTP 服务器,接收客户端 request,并将 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;//先去找左(大于等于)再去找右…...
开发一款AR导览导航小程序多少钱?ar地图微信小程序 ar导航 源码
随着科技的不断发展,增强现实(AR)技术在不同领域展现出了巨大的潜力。AR导览小程序作为其中的一种应用形式,为用户提供了全新的观赏和学习体验。然而,开发一款高质量的AR导览小程序需要投入大量的时间、人力和技术资源…...
Shell 编程快速入门 之 函数基础知识
目录 shell函数基础知识 函数定义 函数名 函数体 参数 返回值 return返回值的含义 return与echo返回值的区别 可变参数函数 自定义库函数 定义库函数 调用库函数 执行结果 递归函数 阶乘函数 斐波那契函数 shell函数基础知识 函数定义 函数名 Shell函数用…...
Flink流批一体计算(18):PyFlink DataStream API之计算和Sink
目录 1. 在上节数据流上执行转换操作,或者使用 sink 将数据写入外部系统。 2. File Sink File Sink Format Types Row-encoded Formats Bulk-encoded Formats 桶分配 滚动策略 3. 如何输出结果 Print 集合数据到客户端,execute_and_collect…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...



