计算机组成原理-第四章存储器

概述

必须掌握的东西
Byte字节,bit位
1Byte(B)=8bit,1KB=1024B(字节),1MB=1024KB,1GB=1024MB,1TB=1024GB
210B即为1KB
211为2K
212为4K
213为8K
214为16K
220为1MB
221为2MB
222为4MB
230为1GB等依此规律

 十六进制的数0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F分别对应二进制的0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110、1111,十六进制数转二进制数时,按照这种对应关系,一位一位转过来就行,例如:十六进制F7转二进制数为11110111。
 八进制转二进制也是同样的,0、1、2、3、4、5、6、7对应000、001、010、011、100、101、110、111,例如:八进制的56转二进制为101110。
以上均可通过8421法转化更方便。

  • 字长32位表示每字有32位,按双字编址表示将两个字编到一个存储单元中;
    • 法一:即一个字32位,有2个字:32×2=64位。也就是64位编在一个存储单元中
    • 法二:一个字32位是4个字节(32÷8=4字节)。即表示1个字中有4个字节(B)长,而2个字编为1个单元→1个字4个字节,2个字有8个字节(B),即8个字节编在一个存储单元中。

4.1存储器的概述

1.存储器的分类

1.按存储介质分类
(1)半导体存储器:TTL、MOS(主要)——易丢失。如固态硬盘(不易失),u盘(非易失),存储卡(不易失),catch(易失),内存条(易失)
( 2 ) 磁 表 面 存 储 器 : 磁 头 、 载 磁 体 。 如 磁 盘 ( 硬 盘 和 软 盘 ) ( 3 ) 磁 芯 存 储 器 : 硬 磁 材 料 、 环 状 元 件 。 如 : 磁 带 ( 4 ) 光 盘 存 储 器 : 激 光 、 磁 光 材 料 } = 不 易 丢 失 \left.\begin{matrix}(2)磁表面存储器:磁头、载磁体。如磁盘(硬盘和软盘)\\(3)磁芯存储器:硬磁材料、环状元件。如:磁带\\(4)光盘存储器:激光、磁光材料\end{matrix}\right\}=不易丢失 2(34=

2.按存储方式分类
(1)存取时间与物理地址无关(随机访问)

  • 随机存储器 在程序的执行过程中可读可写
    • 随机存储器(RAM) 可读可写
    • 只读存储器(ROM)只读

(2)存取时间与物理地址有关(串行访问)

  • 顺序存取存储器 磁带
  • 直接存取存储器 磁盘
    3.按在计算机中的作用分类
    在这里插入图片描述
    与辅存相比,主存的特点是容量小,速度快,成本高
    内存条相当于主存,动态的RAM叫DRAM
    catch为静态RAM

2.存储器的层次结构

1.存储器三个主要特性的关系
在这里插入图片描述
2.缓存——主存层次和主存——辅存层次
缓存——主存用硬件的方法连接,按内容查找。指令在缓存中,指令中的地址也主存的地址,转换为缓存的地址
主存——辅存层次软硬件相结合
缓存里存的信息都是主存的副本
在这里插入图片描述
将辅存的一部分虚拟成主存

4.2主存储器

一、概述

1.主存的基本组成
在这里插入图片描述
2.主存和CPU的联系
在这里插入图片描述
3.主存中存储单元的地址分配

 假设:存储字长32位,对此存储器的某个单元进行读/写,一次最多可读出/写入32位个01
 编址单位是字节,每一个字节都有个地址。  存储字是32位,字节是八位,都有地址
 12345678H八个16进制,用二进制表示每个占四位,共32位,存在一个存储单元中

8*8的芯片指8个存储单元,每个单元存储8位即存储字长为8位即字为8位(存储字长:每个单元存储的二进制位数)地址线与数据线
字:存储字长
字节:1B=8b,字节永远都是8位
一个存储字包括四个字节,0、4、8为存储字的地址,一个存储器包括的四个字节都有地址
在这里插入图片描述
1个字节8位,16位相当于2个字节

高位字节的地址作为存储器的地址(高位字节所在的地址定义为字的地址)
大端大尾方式:高位字节存在低地址,低位字节存放在高地址,高位字节的地址作为存储字的地址
在这里插入图片描述
低位字节地址为字地址
小端小尾方式:低位在低地址,高位在高地址,且低位字节所在的地址称为存储字的地址
在这里插入图片描述
设地址线24根 按字节,一个字节一个地址,寻址 224=16M*B=16MB
若字长为16位,按字(一个字一个地址)寻址 8MW(w指word)
若字长为32位 按字寻址 4MW
按字节寻址最好,可以访问的类型多,但需要的地址线多

一个16k×32位的存储器,其地址线和数据线的总和是:
16k=214即14根地址线,,32是数据线的根数,则总和是14+32=46

4.主存的技术指标
(1)存储容量 主存 存放二进制代码的总位数
(2)存取速度

  • 存取时间 存储器的访问时间
    • 读出时间
    • 写入时间
  • 存取周期 连续两次独立的存储器操作(读或写)所需的最小间隔时间
    • 读周期
    • 写周期
      (3)存储器的带宽 位/秒
      单位时间内能够读取或写入的时间

二、半导体芯片

1.半导体存储芯片的基本结构

在这里插入图片描述
片选线:芯片选择线
半导体片选线有两种: C S ‾ \overline{CS} CS芯片选择, C E ‾ \overline{CE} CE芯片使能信号,加横线表低电平有效
读/写控制线: W E ‾ \overline{WE} WE低电平写操作高电平读, O E ‾ \overline{OE} OE读操作
16K×1表示芯片容量为16K,每个存储单元保存一位信息。如果用八个这样的芯片构成16K×8.这样的八个共四组成为64K×8位。每一组同时工作
选中一组,每组中会同时工作
216-1=65535
在这里插入图片描述

2.半导体存储芯片的译码驱动方式

半导体存储芯片的译码驱动方式:给出存储单元的地址后,怎么找到指定的存储单元
(1)线选法
看数据线的接发判断高低位
所有存储单元布局为线性数组
对容量稍大一点的芯片不合适,无法做到那么密集,集成度那么高,芯片中线太多了。假设是1M×8的,要20根地址线,芯片内的线有2^20×8
假如A3到A0全为0则选中第一行所有存储单元
在这里插入图片描述
(2)重合法
所有存储单元布局为二维阵列,行列地址分别进行译码。在下图中,数据线仅一位,每个存储单元的位数也仅一位
仍是上题的举例,行地址线和列地址线各10根,行译码和列译码器会各产生1K条,共2k条比线选法要少很多线
X译码器这边全0选中每组第一行,Y地址译码这边全0则选中每组第一列。
在这里插入图片描述

三、随机存取存储器(RAM)

1.静态RAM(SRAM)

保存0、1的原理
基本单元电路构成,
单元电路读出写入如何构成
典型芯片的结构
静态RAM芯片如何读出和写入
(1)静态RAM基本电路(采用双稳态触发器,两端来存储)
T1~ T4触发器,解决保存0、1的原理
T5、T6行开关,解决对存储元件的读写,由行地址选择进行控制
T7、T8列开关,一列共用,控制所有存储元件共有的控制开关
写入时一个写原来的,一个写非
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Intel 2114有10根地址线,4根数据线即1K*4位

2.动态RAM(DRAM)

采用电容,电容中有充电是1,没有电是0
(1)动态RAM基本单元电路

  • ①三管动态RAM
    读出与原存的信息相反(存0读1),可以在输出端加非门
    写入与输入信息相同
    在这里插入图片描述
  • ②单管动态RAM(单晶体管)
    读出有电表示存的1,没有电表示存的0
    写入的是1,是对电容进行充电。写入的是0,是对电容进行放电
    在这里插入图片描述

(2)动态RAM芯片举例

  • ①三管动态RAM芯片(Intel 1103)
  • ②单管动态RAM4116(16K×1位)
    • 但它只有7根地址线,来分两次分别输入行、列地址
    • 它的读放大器工作原理像一个跷跷板电路,其左右两侧电平相反,且读放大器左侧电容有电表示0,没有电是1.而读放大器右侧与之相反。写入类似。

(4)动态RAM刷新
需要刷新是因为存储电荷的电容放电
刷新仅与行地址有关,对某一行进行刷新
①集中刷新(集中在某一时间刷新,某时间段内对所有行要进行刷新)
“死区”进行刷新而不能进行数据交换的时间
②分散刷新
无死区,但存取周期加长,在存取周期中一部分时间用来刷新
③分散刷新与集中刷新相结合(异步刷新)
每隔一段时间刷新一行,每行每隔一段时间刷新一次。
在这里插入图片描述
对于15.6us的一段时间内是集中式刷新,对于整个大的时间段来说是分散式刷新
将刷新安排在指令译码阶段,不会出现"死区"

3.动态RAM和静态RAM的比较

在这里插入图片描述

四、只读存储器(ROM)

  • 厂家写——>用户可以一次写——>可多次写,但擦出设备要单独买——>电可擦写
    1.掩膜ROM(MROM):厂家写
     行列选择线交叉处有MOS管为"1",
     行列选择线交叉处无MOS管为"0"
    2.PROM(一次性编程)
     熔丝断为"0"
     熔丝未断为"1"
    3.EPROM(多次性编程)
    N型沟道浮动栅MOS电路
    在这里插入图片描述
    4.EEPROM(多次性编程)
    电可擦写,局部擦写,全部擦写
    5.Flash Memory(闪速型存储器)
    在这里插入图片描述

五、存储器与CPU的连接

1.存储器容量的扩展

(1)位扩展(增加存储字长即数据线个数)
数据线不同
片选相同,保证两个芯片同时工作
在这里插入图片描述
(2)字扩展(增加存储字的数量即地址线个数)
地址线不同,有片选信号
A10为片选信号,为0选第一个芯片,为1选第二个芯片
片选不同,两个芯片不能同时工作,根据片选信号的不同,不同芯片工作
在这里插入图片描述
(3)字、位扩展
先位再字扩展
4K×8位的存储器是32K位,1K×4位是4K位个,因此需要8片1K×4K的芯片
芯片两两一组构成1K×8的,共要4组
2根地址线做片选信号,使用2—4译码器,00第一组芯片,01第二组芯片…
在这里插入图片描述

2.存储器与CPU的连接

不可放置不管
(1)地址线的连接
一般,地址的低位作为地址送入存储器的地址线中,高位作为芯片选择信号
(2)数据线的连接
决定字的接法
CPU数据线的条数可能比存储器数据线的条数要多,就要做位扩展
(3)读/写命令控制线的连接
连接到每一个芯片的读写控制端上,ROM除外
(4)片选线的连接
用低位作为片选信号好
存储器的访问信号要在片选线中体现
每个内存芯片都有它的地址范围,这个地址范围要满足cpu的要求,有的地址要用作片选信号
(5)合理选择存储芯片(ROM,RAM)
系统程序、配置信息用ROM。用户即运行区用RAM
(6)其他 时序、负载
== 对任何一个芯片来说,CPU的地址线要么输入到地址中,要么出现在片选输入端,不要忘了MREQ。==
注意ROM数据是单向的线,RAM数据是双向的线,ROM端只读不写,编程端接地

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先6000H~67FFH为16进制,需要写为二进制为0110 0000 0000 0000——0110 0111 1111 1111。后面的0到10位从全0变为全1,共是11根地址线,211即2K,而又有8位数据线,则这个存储空间为2K×8位,其放的是系统程序
同上得用户程序区是1K×8位
在这里插入图片描述
在这里插入图片描述
利用138译码器,MREQ连到片选信号上,A10为0才能选后面两个1K×4位
在这里插入图片描述
注意ROM数据是单向的线,RAM数据是双向的线,ROM端只读不写,编程端接地,其实不拘于138译码器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用1K×4位的存储芯片组成容量为16K×8位的存储芯片要(32)片

例4.3设CPU有20根地址线和16根数据线,并用IO/ M ‾ \overline{M} M作为访存控制信号, R D ‾ \overline{RD} RD为读命令, W R ‾ \overline{WR} WR为写命令。CPU可通过BHE和A0来控制按字节或字两种形式访存(如表4.1所示)。要求采用图4.39所示的芯片,门电路自定。试回答:

(1)CPU按字节访问和按字访问的地址范围各是多少?

(2) CPU按字节访问时需分奇偶体,且最大64 KB为系统程序区,与其相邻的64 KB为用户程序区。写出每片存储芯片所对应的二进制地址码。

(3)画出对应上述地址范围的CPU与存储芯片的连接图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、存储器的校验

在这里插入图片描述
差异位数越多,检错纠错力就越强

1.编码的最小距离

任意两组合法代码之间二进制位数最少差异
编码的纠错、检错能力与编码的最小距离有关
在这里插入图片描述
汉明码是具有一位纠错能力的编码

2.汉明码的组成
  • 汉明码采用奇偶校验
    • 加一位校验位使得1的个数位为奇数个或偶数个
  • 汉明码采用分组校验
    采用两位奇偶校验位,8位分组为两组,每组都有校验位
  • 汉明码的分组是一种非划分方式,组和组之间有交叉

如下
分三组,每组都用偶校验(加上校验位共偶数个1),偶校验用异或门实现 若一组出差错,则是该组独有的部分;若两组错,则是两组公共的位置

在这里插入图片描述
校验位都是不共有的地方
组成汉明码的三要素
添加检测位的位数即分组数,n位信息位,k位校验位
在这里插入图片描述
2的幂次方位均为校验位如1、2、4、8
后面一般情况下用偶校验
在这里插入图片描述
在这里插入图片描述
如何分组的

编号1234567891011
二进制00010010001101000101011001111000100110101011

将编号转为二进制。从右向左看,第一位是1的如编号1、3、5、7等就分到第一组C1组。第二位是1的,如编号2,3,6,7就分到第二组C2组。第三位是1的如编号4,5,6,7分到第三组C4组。C2的幂次方位类推。一个校验码承担一组校验责任。校验位数字等于组内所有数字异或(同或)。偶校验则异或,奇校验则同或。

在这里插入图片描述

异或:奇数个1则为1,偶数个1为0.同或相反在这里插入图片描述
C1检测对应二进制码20位为1的
C2检测对应二进制码21位为1的
C4检测对应二进制码22位为1的

3.汉明码的纠错过程

在这里插入图片描述
全0表示偶数个0,则偶校验无错。

在这里插入图片描述
纠错按照收到的位都来检测
在这里插入图片描述
在这里插入图片描述
奇校验检测位结果就是偶校验检测位取反
汉明编码距离至少是3;

七、提高访存速度的措施

  • 采用高速器件
  • 采用层次结构 Cache-主存
  • 调整主存结构
1.单体多字系统

在这里插入图片描述

2.多体并行系统

(1)高位交叉(主要应用于存储器容量的扩展)
在这里插入图片描述
在这里插入图片描述
(2)低位交叉(应用于存储器带宽和访问速度的提高)
横向进行顺序编码,且低位为体号
在这里插入图片描述
在这里插入图片描述
相当于以流水的方式访问不同的存储体
在这里插入图片描述
在这里插入图片描述

3.高性能存储芯片

在这里插入图片描述

4.3高速缓冲存储器

一、概述

1.问题的提出

避免CPU"空等"现象
CPU和主存(DRAM)的速度差异
在这里插入图片描述
时间局部:当前用的指令或数据在不久的将来还会再用到
空间局部:当前用的指令或数据在不久后相邻的指令或数据可能会被用到

2.Cache的工作原理

(1)主存和缓存的编址
在这里插入图片描述
  数据在内存与Catch之间传送的时候,是以整块传送的,所以内存块内地址部分与Catch中块内地址部分的值相同
  Catch上的标记标记了主存块与Catch块之间的对应关系,若一个主存块调用到Catch块中,就可将主存块号写到标记中
  当CPU给出一个内存地址,需要在Catch中访问到这个数据,则要确定这个块是否已经送到Catch中,用它给出地址的主存块号与Catch中的标记进行比较
Catch与主存之间按块存储,按块传送,块的大小相同,块内地址完全相同,不用转化
(2)命中与未命中
在这里插入图片描述
(3)Catch的命中率
命中次数÷(命中次数+未命中访问主存次数)
在这里插入图片描述
(4)Catch——主存系统的效率
在这里插入图片描述
访问效率最小:tc/tm;最大为每次都访问catch为1
上公式是Catch与内存同时访问的公式,若先访问catch再访问内存,则公式会发生变化

3.Catch的基本结构

在这里插入图片描述
 替换机构:当新的主存块需要调入缓存中,而它的可用位置又被占用时,需根据替换算法解决调入问题。
 地址映射:一个块要放到catch中,它可以放入catch的哪些块中
 变换机构:主存块号转为catch块号;主存的地址转为catch相应的地址

4.Catch的读写操作

在这里插入图片描述
在这里插入图片描述
写直达法:可能增加访存次数(如累加求和运算)
写回法:若有多个catch,可能造成多个catch数据的不一致

5.Catch的改进

在这里插入图片描述
 多核:每个核都有自己的catch,多个核有共用的catch
 流水线的机器:将指令和数据分开放在不同的Catch中,避免流水过程中造成资源冲突

二、Catch-主存的地址映射

1.直接映射

主存当中任意一个给定的块,它只能映射到或只能装载到某个指定的catch块中
 将主存储体划分成若干与catch存储体相等的区,每个区的大小和catch存储体大小相同,每个区当中包含的字块数和catch存储体当中包含的字块数相等。
 每个区的第0块只能放在catch的第0块中
 cpu给出地址,这个地址分为三部分:区号(主存字块标记)、块号(Catch字块标记)、块内偏移地址(字块地址)
 主存字块标记与Catch字块标记比较判断是否命中
在这里插入图片描述
结构简单,速度快;catch的利用率可能低,调用时冲突也大
主存字块标记为主存地址长度与Catch地址长度之差

2.全相联映射

主存中任何一个块可以被放到catch任何一个块中
catch利用率高,速度慢,电路复杂,比较器长度也长
在这里插入图片描述

3.组相联映射(常用)

 主存中的一个块可以放到catch当中指定的几个块中
 先把catch分成块,然后这些块又被分成若干个组,每组当中可以包含4块、8块、16块。一般多少组,每组就多少块
 主存储器字块也进行分区,每个区的大小它的组数与catch是相同的
 每个区的第0块可以放到catch当中第0组任何一个位置
Catche的标记就是主存的组号m-q
在这里插入图片描述
 Q指组的大小,模Q求到的余数就是内存块在这个区当中的内部编号,据内部编号映射到第i组的任何一块
靠近CPU的采用直接相连或路数比较少的组相联
中间层次用组相联(两路组相联,每组包含两个字块 ),距离CPU远的用全相联

------------------------------------------------------------------------------
1.直接映射

主存字块标记Cache字块地址=c字块内地址=b
主存地址位数长-cache地址位数长cache为2c块,cache字块地址为c1.按字节寻址(默认):每块的字数*每字的字节数=每块的字节数=2b
2.按字寻址:每个字块2b个字

2.全相联映射

主存字块标记字块内地址=b
主存地址位数长-b(字块内地址)1.按字节寻址(默认):每块的字数*每字的字节数=每块的字节数=2b
2.按字寻址:每个字块2b个字

3.组相联映射
n路组相联表示:一组内有n块

主存字块标记组地址=q字块内地址=b
主存地址位数长-q(组地址)-b(字块内地址)cache为可分组数=cache总块数÷一组内n块=2q1.按字节寻址(默认):每块的字数*每字的字节数=每块的字节数=2b
2.按字寻址:每个字块2b个字

例题
设某机主存容量为16MB,Cache的容量为8KB。每字块有8个字,每字32位。设计画出在四路映射的条件下主存地址字段中各段的位数。
解答:
主存:16MB=224;Cache:8KB=213
32位=32÷8=4字节 故由每字块8个字(23),每字32位(4字节=22),可得
每块的字节数=每字块的字数×每字的字节数=23×22=25;由此得字块内地址=b=5
Cache总字块数=总字节数÷每块中的字节数=213÷25=28
由四路映射得一组内四块
Cache可分组数=Cache总块数÷一组内四块=28÷22=26;故组地址=q=6
主存字块标记=24-b-q=24-6-5=13.
表格如下

主存字块标记组地址字块内地址
13位6位5位

------------------------------------------------------------------------------

三、替换算法

1.先进先出(FIFO)算法
 最先被放入到catch中的块,不在用被放出去
2.近期最少使用(LRU)算法
在这里插入图片描述

4.4 辅助存储器

一、概述

在这里插入图片描述

  • 一圈圈的是道密度,内圈位密度最大,外圈最小。
  • 每条磁道上保存的信息总量是一样的
  • 道距:P,道密度:单位长度上有多少磁道,=1÷P
  • 位密度:一条磁道上的总容量÷周长(有最大和最小,泛指内圈最大的)
  • 存储容量:盘面数量×磁道×每个磁道上保存的信息(二进制位数)
  • 等待时间:最少是0,最多是转一圈的时间.这两个加起来÷2是平均等待时间
  • 数据传输率:每秒可以传输的数据。一条磁道上的总容量 ×转速
  • 磁表面存储器通常采用循环冗余码来发现并纠正错误

二、磁记录原理和记录方式

记录方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、硬盘存储器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、CRC编码(循环冗余校验码)

详细请看计算机组成原理运算https://blog.csdn.net/qq_44152807/article/details/103970012部分的CRC讲解,更通俗详细。
CRC校验的基本原理

  • 增加冗余码(校验位)
有效信息位(k位)校验信息位(r位)

N=k+r<=2r-1

  • 生成多项式G(x)

收发双方约定一个(r+1)位二进制数,发送方利用G(x)对信息多项式做模二除运算,生成校验码。接收方利用G(X)对收到的编码多项式做模二除运算检测差错及错误定位。

  • G(X)应该满足的条件
    1.最高位和最低位必须为1
    2.当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0;
    3.不同位发生错误时,模二除运算后余数不同
    4.对不为0余数继续进行模二除运算应使余数循环。
模2运算
  • 加减运算(异或运算,加不进位,减不借位)
  • 模2除法:按模2减,求部分余数,不借位。
  • 上商原则:[1].部分余数首位为1时,商为1,减除数;[2].部分余数首位为0时,商为0,减0.[3].当部分余数的位数小于除数的位数时,该余数即为最后余数
    在这里插入图片描述
CRC编码方法

1.根据待校验信息的长度k,按照k+r<=2r-1确定校验位r的位数,如对四位信息1100进行RCR编码,根据4+r<=2r-1得rmin=3.
2.根据r和生成多项式的选择原则,选择位数为r+1的生成多项式G(X)=1011(查表)
3.进行下列变换

有效信息位(k位)校验信息位(r位)
1100000

即:将待校验的二进制信息Q(X)逻辑左移r位,得到Q(X)‘
4.对Q(X)‘按模2运算法则除G(X),求CRC编码中的r位校验信息。
在这里插入图片描述用得到的余数替换Q(X)‘的最后r位即可得到最后的CRC编码
1100|000——>1100|010 即为1100的CRC编码
接收方利用G(X)对收到的编码多项式做模2除运算

CRC的校验与纠错

余数为0,说明传输没有错误。错误在不同位数对应的余数不同。
若采用不同的生成多项式,对应的相同位出错的时候得到的不为0的余数是不相同的。

  • 利用出错情况下余数循环特性进行纠错
  • 若余数不为0,一边对余数补0做模二除,同时让被检测的校验码循环左移,当余数为101时,出错位也移到A1位置。通过异运算纠正后继续循环左移和执行余数模二除法,直到修改后的出错位回原位。不需对每一位提供纠正电路。
  • 当位数增多时,循环校验码能有效的降低硬件代价,这是它得以广泛应用的主要原因。
  • 可硬件实现通过异或
  • 也可以软件实现(通过代码)

五、软磁盘存储器

在这里插入图片描述
在这里插入图片描述

六、光盘存储器

在这里插入图片描述

  • 10
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值