计算机组成原理笔记-第4章 存储器

第4章 存储器

笔记PDF版本已上传至Github个人仓库:CourseNotes,欢迎fork和star,拥抱开源,一起完善。

该笔记是最初是没打算发网上的,所以很多地方都为了自我阅读方便,我理解了的地方就少有解释;我不理解的地方理解后加上的解释便很多。

因此,若读者在阅读过程中遇到错误或理解问题,请评论区留言或者私信,我们一起讨论:看到会及时回复。

4.1 概述

4.1.1 存储器分类

在这里插入图片描述

4.1.2 存储器的层次结构
  • 存储器速度、容量和 位价的关系图

  • 缓存-主存层次和主存-辅存层次图

    在这里插入图片描述

    • 主存和缓存之间匹配的是速度,它们之间的数据调动是由硬件自动完成的
    • 主存和辅存之间匹配的是容量,它们之间的数据调动是 由硬件和操作系统共同完成的。

4.2 主存储器

4.2.1 概述
  • 现代计算机的主存都由半导体集成电路构成,,MARMDR制作在CPU芯片内,如下图所示。下图中虽然MAR和MDR是在CPU内部,但是这并不代表内存的MAR和MDR在CPU中。下图的MDR和MAR为CPU的器件,主存有但未画出来。

  • 寻址范围计算

    • 按字节寻址范围计算为【 2 地址线位数 2^\text{地址线位数} 2地址线位数】Byte
    • 按字寻址范围计算为【 2 地址线范围 × 8 字长 \frac{2^\text{地址线范围}\times8}{字长} 字长2地址线范围×8】bit
  • 主存的技术指标

    • 存储容量:指主存能存放二进制代码的总位数

      ①存储容量=存储单元个数x存储字长 (以位数表示)
      ②存储容量=存储单元个数x存储字长/8 (以字节表示)

    • 存储速度

      存储速度是由存取时间和存取周期来表示

      • 存取时间

        存取时间又称为存储器的访问时间(Memory Access Time),是指启动一次存储器操作(读或写)到完成该操作所需的全部时间。

        存取时间分读出时间和写人时间两种。读出时间是从存储器接收到有效地址开始,到产生有效输出所需的全部时间。写人时间是从存储器接收到有效地址开始,到数据写人被选中单元为止所需的全部时间。

      • 存取周期

        存取周期(Memory Cycle Time)是指存储器进行连续两次独立的存储器操作(如连续两次读操作)所需的最小间隔时间

    • 存储器带宽
      表示单位时间内存储器存取的信息量,如下例:

      存取周期为500ns,每个存取周期可访问16位,则它的带宽为32M位/秒,计算如下
      32 Mbit/s = 16 b i t 500 × 1 0 − 9 s 32\text{Mbit/s}=\frac{16bit}{500\times10^{-9}s} 32Mbit/s=500×109s16bit

      为了提高存储器的带宽,可以采用以下措施:

      ① 缩短存取周期。
      ②)增加存储字长,使每个存取周期可读/写更多的二进制位数。
      ③增加存储体

4.2.2 半导体存储芯片简介
  • 半导体存储芯片的译码驱动方式有两种:线选法和重合法

    在这里插入图片描述

  • 控制线

    • 片选线:用来选择存储芯片

      • CS ‾ \overline{\text{CS}} CS:片选线,低电平有效

      • CE ‾ \overline{\text{CE}} CE:使能线,低电平有效

    • 读/写控制线:决定芯片进行读/写操作

      • WE ‾ \overline{\text{WE}} WE:低电平写 高电平读
4.2.3 随机存储器
  • 静态 RAM(Static RAM, SRAM)

    由千静态 RAM是用触发器工作原理存储信息的,因此即使信息读出后,它仍保持其原状 态,不需要再生。但电源掉电时,原存信息丢失,故它属易失性半导体存储器。

    • 静态 RAM 基本单元电路

    在这里插入图片描述

    读出时, V C C V_{CC} VCC家电, T 3 T_3 T3 T 4 T_4 T4开关都闭合电路连通;接着A‘和A同时加电, T 1 T_1 T1 T 2 T_2 T2闭合,数据从存储芯片内流向A与A’(两侧数据是一致的); T 5 T_5 T5 T 6 T_6 T6从行地址选择线上获取行地址, T 7 T_7 T7 T 8 T_8 T8从列地址选择线上获取列地址,此时两侧数据流通;左侧数据流通至左侧写放大器后反向,无法通过;右侧数据不经过放大器直接送到 D OUT \text{D}_\text{OUT} DOUT中。

    写入时,数据经过左侧放大器将取反,右侧正常通过;我们选择好行地址与列地址,打开两侧通路。当数据到达A‘与A的时候有两种情况:

    • D IN \text{D}_\text{IN} DIN为1,则A’为0,A为1,此时 T 2 T_2 T2断开, T 1 T_1 T1连接,正常写入1;
    • D IN \text{D}_\text{IN} DIN为0,则A‘为1,A为0,此时 T 1 T_1 T1断开, T 2 T_2 T2连接,正常写入0.
    • 静态 RMA 芯片举例(Intel 2114)

      在这里插入图片描述

      C S ‾ \overline{\mathrm {CS}} CS W E ‾ \overline{\mathrm {WE}} WE 均为低电平时,输入()三 态门打开, I / O 4 ∼ I / O 1 \mathrm{I/O}_{4}\sim\mathrm{I/O}_{1} I/O4I/O1上的数据即写入指定地址单元中。 C S ‾ \overline{\mathrm {CS}} CS为低电平、 W E ‾ \overline{\mathrm {WE}} WE 为高电平时, 输出()三态门打开,列 I/0 电路的输出经片内总线输出至数据线 I / O 4 ∼ I / O 1 \mathrm{I/O}_{4}\sim\mathrm{I/O}_{1} I/O4I/O1 上。

      在这里插入图片描述

      • 存储矩阵结构

      在这里插入图片描述

      • 读周期时序

      在这里插入图片描述

      • 写周期时序

      在这里插入图片描述

      地址有效后,先发出写命令开始片选,片选完成了后,等待上一个读周期的数据滞后完成我们便开始写。由于写始终要知道内存单元的地址,所以地址失效一定在 D I N \mathrm {D_{IN}} DIN之后

  • 动态 RAM(Dynamic RAM, DRAM)

    常见的动态RAM基本单元电路有三管式单管式两种,它们的共同特点都是靠电容存储 电荷的原理来寄存信息,若电容上存有足够多的电荷表示存”1",电容上无电荷表示存“0”。

    电 容上的电荷一般只能维持 1~ 2 ms,因此即使电源不掉电,信息也会自动消失;为此,必须在 2 ms内对其所有存储单元恢复一次原状态,这个过程称为再生刷新

    由千它与静态 RAM 相 比,具有集成度更高功耗更低等特点,目前被各类计算机广泛应用。

    在这里插入图片描述

    1. 读操作:当读选择线被选中时,晶体管T2导通,若存储在 C g \text{C}_\text{g} Cg上的电荷足够则T1导通,那么T1和T2接地,使读数据线降为低电平,读出0;若 C g \text{C}_\text{g} Cg的电荷不足以导通T1,则读数据线保持高电平不变。

      因此我可以发现读出的信息与原存入的信息是反相的,若要恢复真正的数据,需要将读出的数据进行取反。

    2. 写操作:在写操作期间,写选择线被选中,晶体管T3导通,允许电流通过写数据线流向电容Cg。写入数据是正相的。

    • 三管 MOS 动态 RAM 结构示意图

    在这里插入图片描述

    • 单管 MOS 动态 RAM 基本单元电路

    在这里插入图片描述

  • 动态 RAM 的刷新

    刷新的过程实质上是先将原存信息读出,再由刷新放大器形成原信息并重新写入的再生过程。由于存储单元被访问是随机的,有可能某些存储单元长期得不到访问,不进行存储器的 读/写操作,其存储单元内的原信息将会慢慢消失。

    为此,必须采用定时刷新的方法,它规定在一 定的时间内,对动态 RAM 的全部基本单元电路必作一次刷新,一般取2 ms,这个时间称为刷新周期,又称再生周期。

    刷新是一行行进行的,必须在刷新周期内,由专用的刷新电路来完成对基 本单元电路的逐行刷新,才能保证动态 RAM 内的信息不丢失。通常有三种方式刷新:集中刷新分散刷新异步刷新

    • 集中刷新:集中刷新是在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必 须停止读/写操作。

      例如,对 128x128 矩阵的存储芯片进行刷新时,若存取周期为 0.5 µs,刷新周 期为2 ms(占 4 000 个存取周期),则对 128 行集中刷新共需 64 µs(占 128 个存取周期),其余的 1 936 µ,s (共 3 872 个存取周期)用来读/写或维持信息,如下图所示。由于在这 64 µs 时间内不能进行读/写操作,故称为“死时间”,又称访存“死区”,所占比率为 128/4000x 100% = 3.2%, 称为死时间率

      🈲刷新一行占一个存储周期

    • 分散刷新:分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。

      该模式中,所有的行刷新被分配到了各存取周期,即完成一次读/写就做一行的刷新;存取周期由0.5µs扩充到了1µs,这是因为前0.5µs用来进行读/写;后0.5µs用来刷新;这样做的好处是不存在读写停止读写的死区时间了,坏处是存储周期变长了,降低系统效率。

    在这里插入图片描述

    • 异步刷新

      结合分散刷新与集中刷新,每隔若干秒刷新一行。此般,经过一个刷新周期后所有行都得到了刷,即克服了集中刷新的长时死区效应又解决了

    在这里插入图片描述

  • 动态 RAM 和静态 RAM 的比较

在这里插入图片描述

4.2.4 只读存储器(ROM)

半导体ROM基本器件为两种:MOS 型和 TTL 型。

4.2.5 存储器容量的扩展
4.2.6 存储器与CPU的连接
  • 存储器与 CPU 的连接步骤:
  • 存储器于CPU连接实例1
    • 问题描述

      例 4.1 设 CPU 有 16 根地址线、8 根数据 线,并用 M R E Q ‾ \overline{\mathrm{MREQ}} MREQ 作为访存控制信号(低电平有 效),用 W R ‾ \overline{\mathrm{WR}} WR作为读/写控制信号(高电平为读,低 电平为写)。现有下列存储芯片:1 Kx4 位 RAM、 4 Kx8 位 RAM、8 Kx8 位 RAM、2 Kx8 位 ROM、 4 Kx8 位 ROM、8 Kx 8 位 ROM 及 74138 译码器 和各种门电路,如图 4.36 所示。画出 CPU 与存 储器的连接图,要求如下:

      • 主存地址空间分配: 6000H ~ 67FFH 为系统程序区。;6800H ~ 6BFFH 为用户程序区。
      • 合理选用上述存储芯片,说明各选几片。
      • 详细画出存储芯片的片选逻辑图。

      在这里插入图片描述

    • 问题解答
      • 写出对应的二进制地址码

        在这里插入图片描述

      • 确定芯片的数量及类型

        根据6000H~ 67FFH 为系统程序区的范围,应选择 1 片 2 Kx8 位的 ROM

        根据6800H~ 6BFFH 为用户程序区的范围,选 2 片 1 Kx4 位的 RAM 芯片正好满足 1 Kx8 位 的用户程序区要求。

      • 分配地址线

        将 CPU 的低 11 位地址 A 10 ∼ A 0 \mathrm {A_{10}}\sim \mathrm{A_0} A10A0。与 2 Kx 8 位的 ROM 地址线相连;将 CPU 的低 10 位地址 A 9 ∼ A 0 \mathrm {A_{9}}\sim \mathrm{A_0} A9A0。与 2 片 1 Kx4 位的 RAM 地址线相连。

      • 确定片选信号和片选逻辑以及接线

        由74138 译码器输入逻辑关系可知,必须保证控制端 G 1 \mathrm G_1 G1为高电平, G ‾ 2 A \mathrm{\overline{G}_{2A}} G2A G ‾ 2 B \mathrm{\overline{G}_{2B}} G2B为低电平,才能使译码器正常工作。

        根据第一步写出的存储器地址范围得出, A 15 \mathrm {A_{15}} A15始终为低电平,, A 14 \mathrm {A_{14}} A14始终为高电平,它们正好可分别与译码器的 G ‾ 2 A \mathrm{\overline{G}_{2A}} G2A(低)和 G 1 \mathrm G_1 G1(高)对应。

        而访存控制信号 M R E Q ‾ \overline{\mathrm{MREQ}} MREQ (低电平有效)又正好可与 G ‾ 2 B \mathrm{\overline{G}_{2B}} G2B(低)对应。剩下的 A 13 、 A 12 、 A 11 \mathrm{A}_{13}\mathrm{~、A}_{12}\mathrm{~、A}_{11} A13 A12 A11可分别接到译码器的 C、B、A 输入 端。

        其输出 Y 4 ‾ {\overline{\mathrm{Y_4}}} Y4 有效时,选中 1 片 ROM; Y 5 ‾ {\overline{\mathrm{Y_5}}} Y5 A 10 {\mathrm{A_{10}}} A10 同时有效均为低电平时,与门输出选中 2 片 RAM,如图 4.37 所示。

        图中 ROM 芯片的 P D / P r o g {\mathrm{PD/Prog}} PD/Prog 端接地,以确保在读出时低电平有效。RAM 芯片的读写控制端与 CPU 的读写命令端 W R ‾ {\overline{\mathrm{WR}}} WR 相连。

        ROM 的 8 根数据线直接与 CPU 的 8 根数据线相连,2 片 RAM 的数据线分别与 CPU 数据总线的高 4 位和低 4 位相连。

      • 画图

        在这里插入图片描述

4.2.7 存储器的校验(汉明码)
  • 简介

汉明码是由 Richard Hanming 于 1950 年提出的,它具有一位纠错能力。

新增的汉明码校验位数应满足如下关系: 2 k ⩾ n + k + 1 2^{k}\geqslant n+k+1 2kn+k+1,其中k为校验位位数,n位数据位数。

同时,我要强调的是汉明校验码的生成和校验都都两种原则,希望读者要对概念进行清晰地把握,不可一知半解:
汉明校验 { 按配偶原则的校验 按配奇原则的校验 \text{汉明校验}\begin{cases} \text{按配偶原则的校验}\\ \text{按配奇原则的校验} \end{cases} 汉明校验{按配偶原则的校验按配奇原则的校验
这里直接阐述配偶和配奇的原则会比较抽象,我们放到具体的例子中来看,会更加易懂。

  • 汉明码生成
  1. 确定校验位的个数

    使用公式【 2 k ⩾ n + k + 1 2^{k}\geqslant n+k+1 2kn+k+1】计算需要的k,其中 k 是检验位的数量,n 是数据位的数量;

    举个逆子:原欲发送数据为:0101,此时我们可得n=4,则欲使 2 k ≥ 4 + k + 1 2^k\geq4+k+1 2k4+k+1,k最小为3,即校验位个数为3。

  2. 安置校验位

    我们规定:所有的校验位均放置在第 2 n 2^n 2n位,也就是第1、2、4、8…位置等都是校验位,n从0开始,到k-1结束。

    上例中k=3,则校验位的位置为:① 2 0 = 1 2^0=1 20=1;② 2 1 = 2 2^1=2 21=2;③ 2 2 2^2 22=4;即3位校验位放在最后要发送数据的第1,第2,第4个位置。

  3. 填充数据位:

    在非校验位的其他位置上填写真正的数据,填充后汉明码应如如下形式才对:

    c 1 c_1 c1 c 2 c_2 c20 c 3 c_3 c3101

    其中 c 1 c_1 c1 c 2 c_2 c2 c 3 c_3 c3为待确定值的校验位。

  4. 画表计算校验位的值

    我们的原则是,位置代表的二进制写好后,每一行值为1的二进制位分为一组;然后,你会发现,每一行校验位的位置是互斥的,只有一个校验位值为1。也就是说,一个校验位会和若干数值位搭配,组成一组。

    然后我们可以引出配奇和配偶原则了:

    • 配奇原则:通过配置校验位 C j C_j Cj,使得该组1的个数为奇数个,那么该组的各位进行异或操作必为1
    • 配奇原则:通过配置校验位 C j C_j Cj,使得该组1的个数为偶数个,那么该组的各位进行异或操作必为0

    基于这样的发现,我们让同一组各数据位进行异或(两个二进制位异或,相同结果为0,不同为1)运算,按照配偶原则,可得结果如下计算所示:
    配偶原则 { C 1 ⊕ 0 ⊕ 1 ⊕ 1 ⟹ C 1 = 0 C 2 ⊕ 0 ⊕ 0 ⊕ 1 ⟹ C 2 = 1 C 3 ⊕ 1 ⊕ 0 ⊕ 1 ⟹ C 3 = 0 \text{配偶原则}\begin{cases}C_1\oplus0\oplus1\oplus1\Longrightarrow C_1=0\\ C_2\oplus0\oplus0\oplus1\Longrightarrow C_2=1\\ C_3\oplus1\oplus0\oplus1\Longrightarrow C_3=0 \end{cases} 配偶原则 C1011C1=0C2001C2=1C3101C3=0
    我们怎么理解上面的 C 1 C 2 C 3 C_1 C_2C_3 C1C2C3的取值?

    C 1 C_1 C1=0】,是因为和它一组的数据位为011中有偶数个1,按照配偶原则,已经有偶数个1了,那我就不用管了;反之看第二组,【 C 2 C_2 C2=1】,这是因为第二组的数据位为001,只有奇数个1,按照配偶原则, C 2 C_2 C2要置1才能保证第二组的1为偶数个。第三组同理。

    刚好在这里把配奇的原则也讲一下,上面的 C 1 C 2 C 3 C_1 C_2C_3 C1C2C3如果按照配奇原则会是多少呢?如下(如果你理解了配偶原则,配奇也很简单):
    配奇原则 { C 1 = 0 ⊕ 1 ⊕ 1 ‾ ⟹ C 1 = 1 C 2 = 0 ⊕ 0 ⊕ 1 ‾ ⟹ C 2 = 0 C 3 = 1 ⊕ 0 ⊕ 1 ‾ ⟹ C 3 = 1 \text{配奇原则}\begin{cases}C_1=\overline{0\oplus1\oplus1}\Longrightarrow C_1=1\\ C_2=\overline{0\oplus0\oplus1}\Longrightarrow C_2=0\\ C_3=\overline{1\oplus0\oplus1}\Longrightarrow C_3=1 \end{cases} 配奇原则 C1=011C1=1C2=001C2=0C3=101C3=1
    可见,配奇的结果和配偶的结果刚好相反,这是因为异或操作的原理使得如果同一组中的数据位有偶数个1那么异或必为0,那么取反得校验位为1,那么组合起来(数据位有偶数个1,校验位有1个1,相加肯定是奇数咯)1的个数就是奇数个咯,完成奇配置。

  5. 书写完整的汉明码(配偶原则)

    如第四步所计算,得到三个校验位的值后,将其值填充到校验位所对应的位置,将校验位的值填充进行,写出完整的汉明码,上例的汉明码为

    1234567
    C 1 C_1 C1 C 2 C_2 C2 P 1 P_1 P1 C 3 C_3 C3 P 2 P_2 P2 P 3 P_3 P3 P 4 P_4 P4
    0100101
  6. 书写完整的汉明码(配奇原则)
    1234567
    C 1 C_1 C1 C 2 C_2 C2 P 1 P_1 P1 C 3 C_3 C3 P 2 P_2 P2 P 3 P_3 P3 P 4 P_4 P4
    1001101
  • 汉明码校4验

按照配偶原则,假设我们收到了0110101,已知这是一个传输出错的汉明码

按照配偶原则,假设我们收到了1001100,已知这是一个传输出错的汉明码

  1. 提取小组(配偶原则)

    0110101总位数为7,则易推得校验位为3位;再根据分组规则,我们可得到三组数据如下:

    • 组1(1357)=0111
    • 组2(2367)=1101
    • 组3(4567)=0101
  2. 提取小组(配奇原则)

    1001100总位数为7,则易推得校验位为3位;再根据分组规则,我们可得到三组数据如下:

    • 组1(1357)=1010
    • 组2(2367)=0000
    • 组3(4567)=1100
  3. 校验(配偶原则)

    我们按照配偶原则,将原来的分组的各组各位异或运算,若为0则表示该位没出错,否则表示出错。

    上述汉明码,我们进行如下计算:
    g 1 = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1 g 2 = 1 ⊕ 1 ⊕ 0 ⊕ 1 = 1 g 3 = 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0 g1=0\oplus1\oplus1\oplus1=1\\ g2=1\oplus1\oplus0\oplus1=1\\ g3=0\oplus1\oplus0\oplus1=0 g1=0111=1g2=1101=1g3=0101=0
    欸,汉明码只能纠错1位,那到底是哪一位出错了呢?其实呀,这里并不能只管看出来,但是汉明码的神奇之处就在于,校验后的k位数值的二进制逆序组合转化为十进制表示的数值就是出错的位置。

    如上例,计算完得到 g 1 g 2 g 3 g_1g_2g_3 g1g2g3=110,我们逆序得到011,其十进制表示3,那么就是第三位出错了,瞅瞅是不是😁发的是0100101接收到的是0110101,确实是第3位出错了。

  4. 校验(配奇原则)

    我们按照配奇原则,将原来的分组的各组各位异或后取反运算,若为0则表示该位没出错,否则表示出错。

    上述汉明码,我们进行如下计算:
    g 1 = 1 ⊕ 0 ⊕ 1 ⊕ 0 ‾ = 1 g 2 = 0 ⊕ 0 ⊕ 0 ⊕ 0 ‾ = 1 g 3 = 1 ⊕ 1 ⊕ 0 ⊕ 0 ‾ = 1 g1=\overline{1\oplus0\oplus1\oplus0}=1\\ g2=\overline{0\oplus0\oplus0\oplus0}=1\\ g3=\overline{1\oplus1\oplus0\oplus0}=1 g1=1010=1g2=0000=1g3=1100=1
    此时得到 g 1 g 2 g 3 g_1g_2g_3 g1g2g3=111,逆序得到111111十进制表示7,那么第七位出错了;检查一下呗,发的是1001101接收到的是1001100,确实是第7位出错了。

4.2.8 提高访存速度的措施(多位交叉)

4.3 高速缓冲存储器

4.3.1 概述
4.3.2 Cache-主存地址映射

4.4 循环冗余校验码

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

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

相关文章

Tomcat简介与安装

目录 一、Tomcat 简介 1、Tomcat好帮手---JDK 2、安装Tomcat & JDK 1、系统环境说明 2 、安装JDK 3、安装Tomcat 二、Tomcat目录介绍 1、tomcat主目录介绍 2、webapps目录介绍 3、Tomcat配置介绍(conf) 4、Tomcat的管理 5、tomcat 配置管…

24.6.16

星期一: 补cf global round26 C2 cf传送门 思路:有效操作2只有一次,且反转后不会再出现负数,即后面能贡献 2^n-i个方案,再乘上前面 2^(k>0的次数) 代码如下&…

GWB—200JA型引伸计标定器

GWB一200JA型引伸计标定器,是一种纯机械式的高精度位移测微仪器。依据JJG762—2007引伸计检定规程要求,专门用于对各类引伸计的标定,也广泛用于位移传感器的检定及相应百分表、千分表的标定。 l、本仪器由精密微分测头及测量支架组成。该标定…

vue2+webpack 和 vite+vue3 配置获取环境变量(补充)

相关涉及知识点可看小编该文章: nginx: 部署前端项目的详细步骤(vue项目build打包nginx部署)_前端工程打包部署到nginx-CSDN博客 1.vue2webpack 我们通常会在项目中看到这么两个文件(没有则自己创建,文件名:.env.***) …

C#回车按下时 如果当前焦点的下个控件为Button 则按Button。 如果不是Button则焦点移到下个控件上

需求 扫SN 扫IMEI 扫其它 就自动点打印 帮我写这个C# 函数 “ private void FormF360ColorBox_KeyDown(object sender, KeyEventArgs e)” 回车按下时 如果当前焦点的下个控件为Button 则按Button。 如果不是Button则焦点移到下个控件上。 控件的Index 顺序要设对哦。 你可以…

AI大模型战争:通用与垂直,谁将领跑未来?

文章目录 📑引言一、通用大模型:广泛适用,实力不容小觑1.1 强大的泛化能力1.2 广泛的适用场景 二、垂直大模型:专注深度,精准解决问题2.1 深度专注,精准度高2.2 快速落地与普及 三、通用与垂直:…

通过焦点行事件对行值抓取改变当行状态值

我们在实际开发过程中,对于每一行的状态值需要有单独的变换,通过对特定值的判断我们可以改变其状态值,通过状态值的不同,允许用户进行不同的操作,本文状态值以审核为例,通过对AuditState列的判断&#xff0…

新建的springboot项目启动报错:找不到或无法加载主类

检查编译问题 在使用Spring Boot时,我们通常使用Maven或Gradle进行项目的构建和编译。如果在编译过程中出现了错误,可能会导致无法加载主类的问题。 在使用Maven时,可以尝试使用 mvn clean install 命令清理并重新构建项目。 如果使用Grad…

qt开发-12_QScrollArea

在 Qt 中,QScrollArea 是用于显示可以滚动内容的控件,通常用于处理视图中内容超出可见区域的情况。它提供了一种在有限的视窗内显示大量内容的解决方案,如显示大图像、长文本、多个小部件等。 常用方法和属性 setWidget(QWidget *widget)&am…

泰勒斯威夫特2022年纽约大学毕业典礼演讲:NYU‘s 2022 Commencement Speaker Taylor Swift

NYU’s 2022 Commencement Speaker Taylor Swift Link: https://www.youtube.com/watch?vOBG50aoUwlI Singer, songwriter, producer, and director Taylor Swift received a Doctor of Fine Arts, honoris causa, at the Commencement for the Class of 2022 and delivered …

RecyclerVIew->加速再减速的RecyclerVIew平滑对齐工具类SnapHelper

XML文件 ItemView的XML文件R.layout.shape_item_view <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"100dp"android:layout_heig…

一加12搞机(kernelsu+lsposed)

刷机 温馨提示&#xff1a;如果你不知道root的意义在哪&#xff0c;建议不要解锁和root&#xff0c;到时候救砖或者回锁都挺麻烦。 刷全量包 最新版的系统没有更新推送&#xff0c;所以去一加社区[0]找了个全量包来刷&#xff0c;。安装方式可以看帖子里的内容&#xff0c;说…

力扣-滑动窗口

文章目录 滑动窗口题目1-无重复字符的最长子串题目2-找到字符串中所有字母异位词 滑动窗口 滑动窗口是一种常用的算法技巧&#xff0c;适用于需要在一个数组或字符串中找出满足特定条件的连续子数组或子字符串的问题。它通过维护一个窗口范围来减少重复计算&#xff0c;从而优…

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据…

金融行业专题|某头部期货基于 K8s 原生存储构建自服务数据库云平台

为了进一步提升资源交付效率&#xff0c;不少用户都将数据库应用从物理环境迁移到容器环境。而对于 Kubernetes 部署环境&#xff0c;用户不仅需要考虑数据库在性能方面的需求&#xff0c;还要为数据存储提供更安全、可靠的高可用保障。 近期&#xff0c;某头部期货机构基于 S…

PaddleOCR C++源码编译以及demo测试

Windows10下使用PaddleOCRc 1.所需要的环境 PaddleOCR 源码文件&#xff1a;https://gitee.com/paddlepaddle/PaddleOCR &#xff08;本文选择2.6https://github.com/PaddlePaddle/PaddleOCR/archive/refs/tags/v2.6.0.zip&#xff09; opencv库&#xff1a;https://opencv…

PyTorch的环境配置和安装

PyTorch环境配置及安装 初步机器学习&#xff0c;这里记录下一些学习经过&#xff0c;之后以便于自己查看&#xff0c;同时欢迎各位大佬点评&#xff0c;本节是机器计算的一个包的安装和简单验证。 安装、使用环境 Windows环境下&#xff1a;CUDA官网使用IDM下载就很快乐&am…

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接&#xff1a; https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动&#xff0c;然后用其他柱子与其围住面积&#xff0c;取最大值。 代码如下&#xff1a; public int maxArea1(int[]…

AI儿童绘本创作

之前分享过AI儿童绘画的项目&#xff0c;但是主要问题是角色一致要花费很长的时间&#xff01; 今天发现了这款&#xff0c;非常奈斯&#xff01; 只需输入故事主题、风格、模板&#xff0c;软件就会自动创作故事内容&#xff0c;自动生成插画配图&#xff0c;自动根据模板生…

Spring Bean自动装配:深入解析与实战应用

何为自动装配 在使用Spring框架配置bean时&#xff0c;我们通常需要为bean的属性设置值。如果不手动设置这些值&#xff0c;它们通常会被初始化为默认值&#xff08;对于对象类型通常是null&#xff0c;对于基本类型如int则是0&#xff0c;boolean是false等&#xff09;。自动…