408—计组(笔记自用)

(纯手打,有误或缺知识点待改,有误请以书本为准!!!)

第一章 计算机系统概述

1.1 计算机的发展历程

1 计算机系统

(1)计算机系统=硬件+软件

(2)软件=系统软件+应用软件

        系统软件:操作系统、数据库管理系统DBMS、标准程序库、网络软件、语言处理程序、服务程序。应用软件:按任务需要编制成的各种程序

2 硬件发展

(1)1946,逻辑元件电子管,机器语言

(2)1958,逻辑元件晶体管,出现面向过程的程序设计语言FORTRAN,出现操作系统雏形

(3)1964,逻辑元件中小规模集成电路,高级语言发展,开始有分时操作系统

(4)1972,逻辑元件大规模超大规模集成电路,出现微处理器、微型计算机,个人计算机,Windows MacOS Linux操作系统

(5)摩尔定律:集成电路上可容纳的晶体管数目,每个18个月会提升一倍,整体性能也提升一倍

3 软件发展,编程语言和操作系统的发展

4 发展趋势,微型计算机更微型化、网络化、高性能、多用途。巨型计算机更巨型、超高速、并行处理、智能化

1.2 计算机系统层次结构

1 计算机硬件的基本组成

(1)存储程序,将指令以二进制代码形式事先输入计算机的主存储器,并按指令在存储器中的地址顺序执行指令

(2)早期冯诺依曼机

        

        ① 计算机系统中,软件(成本低)和硬件(效率高)在逻辑上是等效的 

        ② 冯诺依曼机特点:五大部分组成,指令和数据同等地位的存在存储器中,指令和数据用二进制表示,指令由操作码和地址码组成,存储程序,以运算器为中心

(3)现代计算机

          

        ① CPU=控制器+运算器,控制器通过控制线告诉运算器执行什么运算、控制主存储器的读写、输入输出设备的启动和停止

        ② 主存储器和CPU进行数据交换(运算的数据和指令),和IO设备进行数据交换

        ③ 主存储器

               

        主存储器=存储体+存储地址寄存器+存储数据寄存器

        存储体存储数据,CPU将数据的存放地址写到MAR,主存储器根据MAR中的地址从存储体中取出数据放到MDR,CPU通过数据线从MDR中取走数据

        数据在存储体内按地址存储,存储体由存储单元组成,每个存储单元中放一串二进制代码,二进制代码的组合叫存储字,二进制代码的位数叫存储字长一般是8bit的整数倍,存储二进制的电子元件叫存储元,每个存储元存1bit

        MAR中是存储单元的地址,MAR的位数反映存储单元个数,2^{MAR} = 存储单元个数

        MDR中是存储单元中的数据,MDR的位数 = 存储字长 = 一个存储单元中二进制代码的位数

        🐖:字是看计算机中存储字长大小,不同计算机字可能不同,但字节是固定的 =8bit=1B

        ④ 运算器

         

        运算器 = 算术逻辑单元+累加器+乘商寄存器+通用操作数寄存器

        ⑤ 控制器

                

        控制器 = 控制单元+指令寄存器+程序计数器。控制单元,分析指令给出控制信号,指令寄存器,存放当前执行的指令。程序计数器,存放下一条指令地址

(4)计算机工作过程

        通过地址总线PC指向的指令取出,传送到MAR中(控制器向主存指明要访问0号地址并进行读操作)

        主存储器根据MAR中的地址在存储体中取数并放到MDR中

        当MDR中是指令时通过数据总线放到IR中,从IR中取操作码部分放到CU中分析,再根据IR中地址码部分取数(把地址码放到MAR,主存储体根据MAR再存储体中找到对应数据,并放到MDR中,控制单元指挥将MDR中数据取出放ACC中)

        

        

        

        

        

        

2 计算机软件

(1)应用软件,解决某个应用领域的问题而编制的程序,直接为用户提供服务,优快云

(2)系统软件,管理底层硬件并向上层应用程序提供服务,操作系统、数据库管理系统DBMS、标准程序库、网络软件、语言处理程序、服务程序

(3)三种级别的语言,机器语言(低级)、汇编语言(低级)、高级语言(高级)

        高级语言可以通过编译程序转化成汇编语言再通过汇编程序转化成机器语言,也可以直接通过编译程序转化成机器语言,也可以通过解释程序转化成机器语言

        编译程序和解释程序的区别,编译程序将高级语言源程序一次全部翻译后再执行,解释程序将源程序翻译一句执行一句

        翻译程序:编译程序(编译器)、汇编程序(汇编器)、解释程序(解释器)

(4)软件和硬件的逻辑功能等价性,同一个功能即可用硬件(效率高成本大)实现也可以用软件(效率低成本低)实现

        指令集体系结构ISA,软件和硬件之间的界面,设计计算机系统ISA是定义一台计算机可以支持哪些指令,以及每条指令的作用和用法

3 计算机系统的层次结构

        

        微指令是CPU在执行指令时将一条指令划分成更细的步骤,微指令系统解释执行传统机器中每一条指令

4 计算机系统的工作原理

        

可执行文件放在外存中,当需要运行时调入主存

1.3 计算机的性能指标

1 存储器的性能指标

(1)总容量(最大的情况下) = 存储单元个数*存储字长bit =    2^{MAR} * MDR

2 CPU的性能指标

(1)CPU主频(时钟频率):数字脉冲信号振荡的频率,指令执行时的节奏,单位赫兹Hz。CPU主频 = 1 / CPU时钟周期

(2)时钟周期:每个脉冲信号的时间,单位微秒 纳秒

(3)CPI:执行一条指令所需的时钟周期数,不同指令CPI不同,相同指令CPI也可能不同。执行一条指令耗时 = 平均CPI * CPU时钟周期 = CPI / 时钟频率

(4)CPU执行时间 = 指令条数 * 执行一条指令耗时

                                = 总时钟周期数 * 时钟周期 = 总时钟周期数 / 主频

                                = (指令条数 * CPI) * 时钟周期 = (指令条数 * CPI) / 主频

(5)IPS:每秒执行多少条指令,IPS = 主频(每秒多少个时钟周期) / 平均CPI(一条指令的时钟周期)

(6)

🐖:当描述的是存储器或文件大小K=2^{10},M=2^{20},G=2^{30},T=2^{40}

3 系统整体的性能指标

(1)数据通路带宽:数据总线一次能并行传送信息的位数

(2)吞吐量:系统在单位时间内处理请求的数量

(3)响应时间:用户向计算机发送请求,系统对该请求做出响应并获得所需结果的等待时间

(4)基准程序:测量计算机处理速度的实用程序,动态测试

🐖:主频高不一定快,还要看平均CPI,平均CPI相同也不一定快,指令系统可能不一定(分别使用的是乘法指令和加法指令),基准程序执行得越快也不一定性能越好,因为基准程序中语句存在频度差异

第二章 数据的表示和运算

2.1 数制与编码

1 进位计数制

(1)十进制计数法:符号和符号所在的位置都反映权重,基于乘法思想计数

        

(2)r进制计数法

        基数,每个数码位所用到的不同符号的个数,十进制r=10

        

        计算机使用二进制的原因:可以使用两个稳定状态的物理器件表示;0 1更好对应逻辑值假 真,方便实现逻辑运算;可很方便的使用逻辑门电路实现算术运算

(3)进制转换

        ① r进制转换成十进制

        

        ② 二进制转八进制/十六进制,三位一组/四位一组

        ③ 十进制转r进制,整数除基取余,小数乘基取整

(4)真值和机器数

        真值,符合人类习惯的数字;机器数,数字实际存到机器里的形式

2 BCD码

(1)8421码,每四个二进制对应一个十进制

        

(2)8421码计算

        ① 转换成十进制算,再转回去

        ② 计算结果在0000~1001中,直接计算,结果在1010~10010中,给加和的结果补上0110

        

(3)余3码 = 8421+0011B

        

(4)2421码,改变权值定义

        

3 定点数的表示

(1)无符号数,整个机器字长全部二进制位均为数值位,n位无符号数表示范围为0 ~ 2^{n}-1

(2)有符号数,尾数表示真值的绝对值,符号位占一位0正1负

        ① 定点整数

        

        

        ▲ 原码

         

        若机器字长n+1位,原码整数的表示范围-(2^{n}-1) ~ 2^{n}-1,有+0(00000000)和-0(10000000)两种0的形式,所以实际有2^{n+1}-1个数

        ▲ 反码,正数不变,负数符号不变其余取反

        

        若机器字长n+1位,反码整数的表示范围-(2^{n}-1) ~ 2^{n}-1,有+0(00000000)和-0(11111111)两种0的形式

        ▲ 补码,整数=反码,负数=补码末位+1

        

         若机器字长n+1位,补码整数的表示范围-2^{n} ~ 2^{n}-1,有+0(00000000)和-2^{n}(10000000)

        ▲ 移码,补码的基础上符号位取反,只能用来表示整数

        

         若机器字长n+1位,移码整数的表示范围-2^{n} ~ 2^{n}-1,有+0(10000000)和

-2^{n}(00000000)

        将移码所有位当成无符号数看,当真值增大时移码也增大,方便对比大小

        ② 定点小数

        

        ▲ 原码

         

        若机器字长n+1位,原码小数的表示范围-(1-2^{-n}) ~ 1-2^{-n},有+0(00000000)和-0(10000000)两种0的形式

        ▲ 反码

        

        若机器字长n+1位,反码小数的表示范围-(1-2^{-n}) ~ 1-2^{-n},有+0(00000000)和-0(1111111)两种0的形式

         ▲ 补码,整数=反码,负数=补码末位+1

        

         若机器字长n+1位,补码小数的表示范围-1 ~ 2^{n}-1,有+0(00000000)和-1(10000000)

(3)

(4)各种码的作用

        补码让减法操作转变成加法操作,节省硬件成本

2.2 运算方法和运算电路

1 加法器和算术逻辑单元ALU

(1)实现一位加法,输入(被加数本位  加数本位  低位的进位),输出(本位和 低位进位)

        

(2)把n个一位全加器串接起来可以进行nbit数的加和

        进位信息是串行产生的,进位信息产生有延迟,每一级进位依赖于前一级的进位

        由于可以并行输入nbit且进位信息串行产生,该加法器叫串行进位的并行加法器

        

(3)并行进位的并行加法器,所有进位信息同时产生

        

(4)带标志位的加法器

        OF溢出标志,带符号数加减运算是否溢出,OF=1溢出 OF=0未溢出

        CF进位/借位标志,无符号数加减运算是否溢出,CF=1溢出 CF=0未溢出

        SF符号标志,带符号数加减运算结果正负,SF=1负 SF=0正

        ZF零标志,加减运算是否为0,ZF=1为0 ZF=0为1

        

(5)并行进位加法器

        先行进位/同时进位:将低级进位进一步展开,可以一直展开到C0,又Ai Bi输入已知,可以加快进位速度。会使得电路复杂,一般支持四位加四位同时运算,每一个进位同时产生

        

        

(6)算术逻辑单元ALU,看ALU图

        

2 定点数的移位运算

(1)算数移位,通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权,实现乘法除法。原码的算数移位,符号位不变,数值位移动

        ① 原码移位

        

        

        ② 反码移位,正数和原码移动方式相同,负数右移高位补1低位舍弃,左移低位补1高位舍弃

        ③ 补码移位,正数和原码移动方式相同,负数右移高位补1低位舍弃,左移低位补0高位舍弃

        

(2)逻辑移位,右移高位补0低位舍弃,左移低位补0高位舍弃

        

(3)循环移位 

        ① 普通的循环移位,移出的数放回高位/低位

                

        ② 带进位位(保存有超过8bit运算的进位部分)的循环移位

                

3 定点数的加减运算

(1)原码的加减

        

(2)补码的加减,最后都会转变成加法,由加法器实现,符号位参与运算

        

        当计算结果超出表示范围时会产生溢出

        

(3)溢出判断

        ① 正数+正数=负数时发生上溢,负数+负数=正数时发生下溢

        ② 判断溢出方法

       

      

(4)补码加减运算电路

     

        

4 无符号数的加减运算

(1)无符号数的加法,从最低位开始,按位相加,并向最高位进位

(2)无符号数的减法,被减数不变减数全部按位取反,末位+1,减法变加法

🐖:无符号和带符号逻辑一样,可以用同一套电路实现

(3)溢出判断

        手算,先确定表示范围,用十进制算,超出范围则溢出

        计算机判断:加法,最高位产生进位为1,发生溢出。减法,最高位产生进位为0,发生溢出

5 原码的乘法运算

(1)原理,进制展开乘积再加和

        

(2)原码一位乘法机算,符号单独处理,数值位取绝对值进行乘法计算

        

        用MQ中存储的乘数的每一位去乘被乘数,当当前位是1时,在ACC中加上被乘数,当当前位是0时,在ACC中加0,每一次在往ACC中加数的时候要ACC和MQ统一逻辑右移

        

        

(3)原码一位乘法手算

        

6 补码乘法运算

(1)原理

        辅助位是在MQ低位扩充的位,初始为0,MQ中最低位是去掉辅助位后的最低位

        

(2)机算,初始存入被乘数(双符号补码形式)和乘数(单符号补码形式)

        

(3)手算

        

 7 原码除法运算

(1)原理,每确定一位商,进行一次减法,得到余数,在余数末位补0,在确定下一位商(补位后的余数大于被除数商1小于商0),确定5位商后停止

        

(2)机算,恢复余数法

        符号单独处理,数值位用绝对值计算

        初始情况

        

        默认上商1,用ACC减通用寄存器再存回ACC(余数补码加-除数补码)。当相减的结果为负数时说明原本应该上商0,将商改为0并用ACC加除数并送回ACC来恢复余数。当相减的结果为正时,说明余数计算正确

        将ACC和MQ逻辑左移一位,得到下一个余数(原理上是在上一次的余数高位丢弃低位补零)

        

        

(3)手算,恢复余数法

        

(4)机算,加减交替法

        当余数为负时商0,左移,并+除数绝对值

        

8 补码除数运算

(1)符号位参与运算,被除数/余数、除数采用双符号位

        

        

9 零扩展 符号扩展

(1)进ALU运算前扩展、存入寄存器前扩展、数据之间长度转换

(2)无符号整数用0扩展高位,带符号整数补码,在符号位和数值位中间用符号位扩展

10 C语言中强制类型转换

(1)长度相同的无符号数和有符号数之间的转化,数据内容相同,改变解释方式

        

        x = y = 1110 1111 0001 1111 ,x = - 4321  y = 61215

(2)长数据转短数据,高位截断低位保留,再用对应的解释方式解释

(3)短数据转长数据,符号扩展

11 数据的存储和排列

(1)大小端模式

        多字节数据在内存中占据连续几个字节,01234567H,其中01H是最高有效字节MSB,67H是最低有效字节LSB,大端模式方便人读(01->23->45->67)小段模式方便机器处理(低地址对应低字节,一次读入整个数据)

        

(2)边界对齐

        计算机通常按照字节编址,一个字节对应一个地址,可以按照字节、半字、字(半字和字多少bit取决于存储字长)寻址,字地址和字节地址转换看一个字包含几个字节就乘几就行

        

        计算机每次访存只能读写一个字不能跨行,边界对齐存储,浪费空间减少访存次数,边界不对齐存储,节约空间访存次数多

2.3 浮点数的表示和运算

1 浮点数的表示

(1)阶码,常用补码或移码表示的定点整数,反映小数点移动方向和位数。

         尾数,常用原码或补码表示的定点小数,反映数字的正负和精度。

        

(2)浮点数尾数的规格化

        ① 左归,让数值部分最高位为非零数,在存储空间不变的情况下尽可能的保留更多的精度

        ② 右归,当浮点数运算结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码+1

        

        ③ 规格化浮点数的特点,用原码表示的尾数最高数值位为1,用补码表示的尾数最高数值位正数1负数0

2 IEEE754

(1)标准

        

🐖:IEEE754尾数隐藏一位的操作!这里要把数值部分的一个1挪到小数点前省略掉

(2)转换和最大最小绝对值

        

        

(3)当E全1和全0时的特殊数值

        

        

3 浮点数的加减运算

(1)计算过程

        

(2)舍入

        ① 0舍1入,尾数右移时,移除的是0直接舍,移出的是1,在最末位+1

        ② 恒置1,不论右移移出什么都将移动后的末位置1

(3)强制类型转换

        

第三章 存储系统

3.1 存储器概述

1 层次化结构

        越靠近CPU速度越快、价格越高、容量越小。辅存不直接被CPU访问需要调入主存。

        主存-辅存,实现虚拟存储系统,需要硬件和操作系统完成,解决了主存容量不够的问题。cache-主存,由硬件完成,解决了主存和CPU速度不匹配问题

        

2 分类

(1)层次:高速缓存(cache)、主存储器(主存)、辅助存储器(辅存)

(2)存储介质:半导体存储器(cache,主存)、磁表面存储器(磁带,磁盘)、光存储器(光盘)

(3)存取方式

        ① 指定地址:随机存取存储器RAM(内存条,读任何一个位置的时间相同)、顺序存取存储器SAM(磁带,读写时间与存储单元物理位置有关)、直接存取存储器DAM(磁盘,先直接选区再顺序存取,读写时间与物理位置有关),顺序和直接都是穿行访问存储器

        ② 指定内容:相联存储器CAM(快表,按照内容检索存储位置进行读写)

(4)信息可更改性:读写存储器(磁盘,内存,cache)、只读存储器ROM(CD-ROM, 蓝光光碟, BIOS通常也写在ROM上)

(5)信息可保存性:易失性存储器(主存, cache)、非易失性存储器(磁盘,光盘)、破坏性读出(DRAM读出后重写)、非破坏性读出(SRAM,磁盘,光盘)

3 性能指标

(1)存储容量,存储字长*存储字数 2^{MAR} * MDR

(2)单位成本,每位价格 = 总成本 / 总容量

(3)存储速度,数据传输率 = 数据宽度 / 存取周期

🐖:数据宽度 = 存储字长,存取周期(连续两次独立地访问存储器操作之间最小的时间间隔) = 存取时间 + 恢复时间,主存带宽 = 数据传输率,表示每秒从主存进出信息的最大数量,  字/秒    字节/秒   位/秒

3.2 主存储器

1 基本组成

(1)半导体元器件存储0和1的原理

        用存储元存放一位二进制位,用电容是否带电荷来对应0或1,MOV加电压使其导通控制是否读写。将一行存储元的MOS接在一起就可以控制一次读或写一个存储字

                

(2)半导体元器件构成的存储芯片的基本原理

        接受CPU地址,通过译码器选一条输出高电平接通一行字,CPU从MDR中取走这行字

        因为电信号不稳定,增加控制电路等信号稳定再进译码器 / 再输出

        

        

🐖:存储芯片容量表示,8×8位(8个存储单元,8位存储字长,即MAR=3 MDR=8)

(3)如何实现不同的寻址方式

        存储字个数 = 存储体行数 = 存储单元个数 = 总容量 / 字长

        按字节编址,总容量 / 1B = 地址数 = 2^{MAR}。可以按字节、半字、字进行寻址,需要将半字地址 / 字地址转换成字节地址

        

🐖:地址线数是根据编址过程中有几个地址确定的,不是根据寻址计算出的单元确定的

2 SRAM和DRAM

(1)SRAM动态RAM,用于cache。DRAM静态RAM,用于主存。

(2)SRAM和DRAM差异

SRAMDRAM
双稳态触发器栅极电容
非破坏性读出、无需重写破坏性读出、需要重写
读写速度快 cache读写速度慢 主存
成本高、集成度低、功耗大成本低、集成度高、功耗低
断电信息丢失
不需要刷新2ms内刷新一次(由存储器独立完成)
同时送行列地址(因为地址少)分两次送行列地址

(3)DRAM刷新 

        ① 刷新周期一般为2ms

        ② 每次以行为单位刷新

        ③ 用硬件电路刷新,读出一行的信息后重新写入,占一个读写周期

        ④ 刷新方式

            ▲分散刷新,每次都写完就进行刷新

                

            ▲集中刷新,在2ms内安排时间全部刷新

                

            ▲分散刷新,隔一段时间刷新一行

                

(4)DRAM地址复用,将行地址和列地址分两次送到缓冲器中,地址线减半

3 只读存储器ROM

1 各种ROM

(1)MROM掩膜只读存储器,厂家写入,用户只能读出

(2)PROM可编程只读存储器,用户可写入一次

(3)EPROM可擦除可编程只读存储器,用户可重复写。UVEPROM紫外线擦除全部,EEPROM电擦除特定字

(4)Flash闪存(U盘 SD卡),用户可重复写,写比读慢

(5)SSD固态硬盘,控制单元+Flash芯片,用户可重复写,速度快功耗低价格高

2 BIOS芯片

        主板上存储了自举装入程序的ROM芯片,CPU根据这段程序指挥IO系统,把辅存中存储的操作系统的相关数据放到主存中,即实现开机

🐖:逻辑上主存由RAM和ROM(BIOS芯片)组成,且对两者进行统一编址

4 双端口RAM和多模块存储器

(1)双口RAM,优化多核CPU访问一根内存条的速度,有两组完全独立的数据线地址线控制线。可以同时对同一地址进行读操作不能写,需要置忙并暂时关闭一个端口

        

(2)多模块存储器

        ① 单体多字存储器,一次并行读出多个字,需要增加数据总线宽度

        ② 多体并行存储器

        ▲高位交叉编址,高位表示哪个存储体,地址序号竖着排

          

        ▲地位交叉编址,低位表示哪个存储体,地址序号横着排

           

        🐖:低位交叉编址存储体个数问题:个数 ≥ 存取周期 / 存取时间或总线传输周期

        

3.3 主存储器与CPU的链接

1 单块存储芯片与CPU的连接

        地址线由芯片存储单元个数确定,数据线由芯片位数确定

        

2 多块存储芯片与CPU的连接

(1)位扩展,芯片地址位相同、CS都选中、WE都选中,数据线分别连CPU的不同位

        

(2)字扩展,芯片数据位相同,WE都选中,地址位低位用来传地址,高位用来控制哪一片芯片被选中,连CS。

        线选法,用多出来的高位地址线直接连芯片(不能同时选中或不选中)

        译码器片选法,用高位的n条地址线可以控制2^{n}片芯片

        

(3)字位同时扩展,连不同数据线且同时选中的芯片为一组

        

3.4 外部存储器

1 磁盘存储器

(1)每次读写1bit,读写不能同时进行

(2)特点

        

(3)磁盘设备的组成

        ① 存储区域

        一块硬盘有若干记录面,每个记录面划分若干磁道,每条磁道划分若干扇区

        ② 硬盘存储器,由磁盘驱动器(磁头组件+盘片)、磁盘控制器和盘片组成

        🐖:温彻斯特盘是可移动头固定盘片的硬盘存储器

(4)磁盘性能指标

        ① 容量:非格式化容量,磁记录表面可以利用的磁化单元总数。格式化容量,按照某种特定的记录格式所能存储信息总量(已经做过一步处理了,容量会小于未处理的)

        ② 记录密度:道密度,沿磁盘半径单位长度上磁道数(已知半径可求总磁道数)。位密度,一圈磁道上单位长度上记录的二进制位数(已知磁道周长可求一圈上有多少位,已知扇区数可求一个扇区多少位)。面密度=位密度×道密度

        🐖:扇区是磁盘读写的最小单位

                每个扇区记录的二进制位数相同,故周长越小的磁道位密度越大

        ③ 平均存取时间=寻道时间+旋转延迟时间+传输时间

        

        ④ 数据传输率,磁盘存储器单位时间向主机传送数据的字节数。数据传输率D_{r}=rN,r表示磁盘单位时间内转数,N表示每条磁道容量N个字节

(5)磁盘地址

        

(6)硬盘工作过程:寻址,读盘,写盘。硬盘的读写操作是串行的,需要并串变换电路接受和传送给CPU数据

(7)磁盘阵列,将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问

        ① RAID0:无冗余无校验,没有容错能力,类似低位交叉编址的多体存储器

        ② RAID1:镜像磁盘阵列,存两份有冗余有校验

        ③ RAID2:采用纠错的海明码磁盘阵列,连续几个bit物理上分布在各个盘中

        ④ RAID3:位交叉奇偶校验

        ⑤ RAID4:块交叉奇偶校验

        ⑥ RAID5:无独立校验的奇偶校验

         

2 固态硬盘SSD

(1)闪存翻译层将系统发送的逻辑地址转换成物理地址。

🐖:系统对闪存芯片读写以页为单位,在固态硬盘中存储数据时,系统发出的逻辑地址中对应的也是一页,固态硬盘中的一页相当于磁盘中的扇区,固态硬盘中的一块相当于磁盘中的磁道

        

(2)以块为单位擦除,写某一页之前要先把这一整块擦除,为了保证其他数据不丢失,会把其他数据复制到新块中,再将需要写入的页写进新块中,再由闪存翻译层修改对应地址关系

🐖:磨损均衡技术,将擦除平均在各个块上 

3.5 高速缓冲存储器

1 cache的基本原理

(1)局部性原理

        ① 空间局部性:未来要使用的指令和数据可能和现在正在使用的信息的存储空间上是相邻的(数组元素、顺序执行的指令代码

        ② 时间局部性:未来要使用的信息很可能是现在的信息(循环结构的指令代码

(2)性能分析,cache-主存系统的平均访问时间t = 命中率H ×t_{c} +(1-H)(t_{c}+t_{m}),其中访问一次cache所需时间t_{c},访问一次主存时间t_{m}

        

🐖:也可以同时访问注意看题干

(3)主存和cache数据交换,对主存和cache进行分块,以块为单位进行交换

        主存地址=块号+块内地址。先算有多少个地址需要多少位表示,总容量÷字节编址。4MB/1B=4M个地址,22位。再看一块的大小可以算出块内地址需要几位和一共有几块。一块1KB,1KB/1B=1K个块内地址,10位。共4MB/1KB=4K个块,12位

                        

🐖:在OS中主存的块也叫页、页面、页框,cache的块也叫行

2 cache和主存的映射方式

(1)全相联映射,主存块可放在cache中任意一块

        通过主存大小和一块大小,分别计算主存地址位数、块内地址位数、主存被分成多少块用几位表示。在cache中随便选一个有效位为0的块放,将数据复制进来,并修改有效位为1,将块号填入标记位表示放入的是哪一块

        访存过程:用地址中表示块号的高位和cache的标记进行对比,当匹配成功时检查标记位,若标记位为1时说明cache命中,再根据低位块内地址找数据

        

(2)直接映射,只能固定cache块中,cache块号=主存块号%cache总块数

        通过主存大小、一块大小、cache行数,分别计算主存地址位数、块内地址位数、主存被分成多少块用几位表示、行号位数、标记号位数。计算出主存块在cache中存放位置,将数据复制进来,并修改有效位为1,将标记号(块号-行号)填入标记位表示放入的是哪一块

        访存过程:取块号低位行号对应的cache块,对比块号高位标记,匹配且有效位为1,cache命中,再根据地址低位块内地址取数

        

(3)组相联映射,只能放在固定组中,组里随便放,组号=主存块号%分组个数

        通过主存大小、一块大小、分组数,分别计算主存地址位数、块内地址位数、主存被分成多少块用几位表示、组号位数、标记号位数。计算出主存块在cache中存放在哪一组,在该组中找有效位为0的cache块,将数据复制进来,并修改有效位为1,将标记号(块号-组号)填入标记位表示放入的是哪一块

        访存过程:取块号低位组号对应的cache组,在该组中用块号高位标记位进行逐行匹配,匹配成功时检查有效位为1则cache命中,再根据地址低位块内地址取数

        

3 cache替换算法

(1)全相联映射cache满了替换,直接映射直接替换,组相联映射组满替换

(2)随机算法RAND,随机选一行替换

(3)先进先出FIFO,淘汰当前cache中放的最久的块。也没考虑局部性原理

        

(4)近期最少使用LRU,向前看选最远的。基于局部性原理

        当频繁访问的主存块数量>cache行数量时可能发生抖动

        

        计算机视角

        ​​        

(5)最近不常使用LFU,为cache块设置一个计数器记录每个cache被访问的次数,当cache满时替换计数器最小的cache行

        

4 cache写策略

(1)写命中

        ① 全写法,需要同时写回主存。会采用由SRAM制成的写缓冲队列改善写回主存效率,CPU往主存中写时先放到写缓冲中,再有专门的控制电路从写缓冲中将修改的数据同步到主存中

        ② 写回法,只修改cache内容,不立即写入内存,只有被换出时才写回主存。如果没修改换出不用写回主存,用一位脏位标记是否修改过

(2)写不命中

        ① 写分配法,先从主存中将数据复制进cache,再在cache中进行修改,搭配写回法

        ② 非写分配法,直接在主存中修改,搭配全写法

🐖:各级cache之间常用全写+非写分配,cache和主存之间常用写回+写分配

3.6 虚拟存储器

1 基本概念

(1)原理:CPU使用虚地址先判断对应内容是否装入主存,若在地址转换成实地址进行数据访问,若不在将一页或一段调入主存后再由CPU访问

(2)虚拟存储机制采用全相联映射和回写法

2 页式虚拟存储器

(1)页表,记录程序的虚页调入主存在主存中的位置,页表保存在主存中

        

(2)逻辑地址到物理地址变换

        

(3)快表TLB,由SRAM实现通常采用全相联或组相联方式映射,由经常访问的页表项和TLB标记组成

        

(4)未命中情况,TLB缺失、缺页、cache缺失

        页缺失,TLB必缺失,cache必缺失

        

        

3 段式虚拟存储器

(1)按程序的逻辑结构划分,各个段长度因程序而异

(2)段表,程序逻辑段和在主存中存放位置的对照表。包括段号、装入位、段起点、段长

(3)访存过程

        

(4)特点

        优点,段的分界与程序的自然分界对应,具有逻辑独立性,易于编译、管理、修改和保护、多道程序共享。缺点,长度可变分配空间不变,段间易有碎片,造成浪费。

4 段页式虚拟存储器

(1)对程序先按逻辑结构分段,每段再划分成固定大小页。程序对主存的调入调出仍以页为交换单位。段的长度必须是页长的整数倍,起点必须是某一页的起点。

(2)访存过程

        

(3)特点,可以按段实现共享和保护,地址变换需要两次查表系统开销大。

🐖:cache主要解决系统速度,虚拟存储器主要解决主存容量

        cache全由硬件实现,是硬件存储器,对所有程序员透明。虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,对应用程序员透明

第四章 指令系统

4.1 指令系统

1 指令的基本格式

(1)根据地址码数目不同分类

        

(2)根据指令长度分类

   ① 指令字长,一条指令的总长度,不固定

        机器字长,CPU进行一次整数运算所能处理的二进制数据的位数,和ALU有关

        存储字长,一个存储单元中二进制代码位数,和MDR位数相同

        🐖:半字长指令、单字长指令、双字长指令是指令长度是机器字长多少倍,指令字长会影响取指令所需时间

   ② 定长指令字结构,变长指令字结构

(3)根据操作码长度分类

        

(4)根据操作类型分类

        

2 扩展操作码指令格式

(1)定长指令字结构+可变长操作码,不同地址数的指令使用不同长度的操作码

(2)设计原则,短操作码不能是长操作码的前缀,各指令操作码不能重复,使用频率高的指令分配短操作码来减少译码和分析时间

        

4.2 指令的寻址方式

1 指令寻址

(1)顺序寻址,PC+“1”

        需要注意一条指令占几个地址让PC+几(按什么编址,指令字长是几个存储字长,一个存储字长是几个字节)

        如果是变长指令字结构,先读入一个字,根据指令类型决定PC+几

(2)跳跃寻址,由转移指令指出下一条执行的指令的地址,注意这条指令没执行前PC还是会+1

2 数据寻址

(1)直接寻址

        

(2)间接寻址,通过一层一层地址找最终的数据

        

(3)寄存器寻址,给出寄存器编号,数据在寄存器中

        

(4)寄存器间接寻址,寄存器中存数据地址

        

(5)隐含寻址,不明显给出操作数地址

        

(6)立即寻址,指令中直接给出数据。取指令时访存一次,执行阶段不访问主存,访问时间最短。数据范围受位数限制,立即数一般由补码表示

(7)基址寻址(BR)+A,相对程序起始地址

        便于程序浮动,方便实现多道程序并发运行基址寄存器是面向操作系统的,由操作系统或管理程序确定,用户可以指定哪个通用寄存器代替存放基址但由操作系统写内容

        

(8)变址寻址(IX)+A,相对IX变址寄存器

       

(9)相对寻址(PC)+A,相对程序计数器PC进行偏移

        

🐖:基址寻址中的浮动是整段程序在内存中的浮动,相对寻址是一段代码在程序内部的浮动

(10)堆栈寻址,操作数存放在堆栈中,隐含使用堆栈指针SP做操作数地址

        硬堆栈是用寄存器做栈,执行过程不需要访存,软堆栈是直接在内存中划一片区域,执行过程需要访存

4.3 程序的机器代码表示

1 汇编语言指令

(1)数据在哪

        

        

(2)指令处理,目的操作数不能是常量,两个操作数不能同时来自主存

        

        

        

(3)X86的两种格式,AT&T格式和Intel格式对比

        

2 选择结构语句的机器级表示

(1)无条件跳转指令,jmp<地址>

       

(2)条件转移指令,jxxx

        

🐖:汇编语言代码会以函数名作为标号标注函数指令的起始地址

3 循环结构语句的机器级表示

(1)条件转移指令实现循环

        

(2)用loop指令实现循环

        loopnz当ecx!=0&&ZF==0时继续循环,loopz当ecx!=0&&ZF==1继续循环

        

4 过程函数调用的机器级表示

(1)函数调用,每发生一次函数调用,就将该函数的栈帧压入函数调用栈中,栈帧中保存有函数的局部变量和函数调用的相关信息

(2)call和ret,x86计算机中实现函数调用的语句,需要确保call指令执行后IP指针能够指向新函数,以及ret指令执行后要能从调用函数回到原函数

        

(3)函数调用栈,由ebp和esp两个寄存器标记栈帧的范围,并访问栈中的数据

        

        

        访问栈中的数据方法:push和pop指令。mov指令,对esp执行加减来确定栈帧范围,再用mov访问栈帧数据

          

                

(4)切换栈

   ① 调用时的切换

        或enter

        每个函数栈帧底部都是上一层函数的基地址,方便回上一层函数时恢复ebp的值

        

        

   ② 返回时的切换

        或leave

        

        

        再通过ret指令恢复IP寄存器,回到上层函数

(5)传递参数和返回值

   ① 栈帧最底部是上一层栈帧基址,栈帧最顶部是返回的IP地址

   ② 函数内部局部变量[ebp-4]、[ebp-8]越先定义的变量越靠近栈顶

   ③ 函数顶部存放当前函数内调用的函数的参数,越先定义的变量越靠近栈顶,可以在调用函数的栈帧中找参数,[ebp+8]、[ebp+12]

           

        

        

4.4 CISC和RISC的基本概念

1 CISC,一条指令完成一个复杂的基本功能,x86架构、笔记本、台式机

2 RISC,多条指令组合完成一个复杂的基本功能,手机、平板

        

第五章 中央处理器

5.1 CPU的功能与基本结构

1 CPU功能

(1)指令控制,程序的顺序控制

(2)操作控制,CPU管理并产生每条指令对应的操作信号,将操作信号送往相应部件进行控制

(3)时间控制,给操作加时间控制

(4)数据加工,对数据进行算术运算和逻辑运算

(5)中断处理,对运行过程中出现的异常情况和特殊请求进行处理

2 基本结构

 CPU = 运算器+控制器      

(1)运算器的基本结构

        ① 算术逻辑单元进行运算,通用寄存器组存放操作数/ 指示栈顶地址,暂存寄存器暂存从主存读来的数据,累加寄存器暂存ALU运算结果用来实现加法运算,程序状态字寄存器保存状态信息,移位器进行移位运算,计数器控制乘除运算的操作步数

        ② 通用寄存器和ALU之间的连线方式

        ▲ 专用数据通路方式

            

        ▲单总线方式

        

(2)控制器的基本结构

        

🐖:用户可见寄存器:PSW、ACC、R0~R3、PC,用户不可见寄存器:移位寄存器、暂存寄存器、IR、MAR、MDR

5.2 指令执行过程

1指令周期、机器周期、时钟周期

        每个指令周期中机器周期数可以不等,每个机器周期内时钟周期数也可以不等

        

        

2 指令周期流程

        

(1)取值周期

        

(2)间址周期

        

(3)执行周期各不相同

(4)中断周期

        

3 指令执行方案

(1)单指令周期,所有指令选用相同的执行时间,串行。硬件实现简单,系统运行速度慢。

(2)多指令周期,不同指令完成的时钟周期可不同,串行。速度快,需要复杂硬件设计

(3)流水线,尽可能多条指令同时运行,并行

5.3 数据通路的功能和基本结构

1 单总线结构

        

        以一条加法指令为例来解释取指周期、间址周期、执行周期中的微操作以及对应的控制信号

        

                

2 专用通路结构

只要两个部件之间有数据流动就需要一条线路,效率高成本高

5.4 控制器的功能和工作原理

1 硬布线控制器的设计

(1)根据指令操作码、目前的机器周期、节拍信号、机器状态条件来确定发什么微命令

        

(2)硬布线控制器的设计:先列每一条指令各个周期内的操作,再把可以相容的操纵安排在一个节拍中,使节拍数固定

        

        ① 取指周期的指令操作和时序调整

        

        ② 间址周期

        

        ③ 执行周期

        

        ④ 电路设计,列出操作时间表、写出微操作命令的最简表达式、画逻辑图

        

        

        

        

2 微程序控制器的基本原理

(1)把一个时序内可以同时进行的微操作用一个微指令执行,若干微指令组成一个微程序

        

🐖:机器指令是对程序执行步骤的描述,微指令是指令执行步骤的描述

        微操作和微命令一一对应,一条微指令可能包含多个微命令,微程序和一条机器指令一一对应

        

(2)微程序控制器的基本结构

        

🐖:在控制存储器中微程序,取指周期微程序、间址周期微程序、中断周期微程序是公用的,正常执行下一条微指令是按照下地址,当有顺序逻辑中标记干涉时会从微地址形成部件形成下一条微指令地址

        

        如果某指令系统中有n条机器指令,CM中微程序段个数至少有n+1个

        逻辑上一个完整的微程序包括取指、间址、执行、中断微程序,所以可以说一条指令对应一个微程序,注意看题

3 微指令的设计

(1)指令格式

        

(2)水平型微指令的编码方式

        ① 直接编码方式,每位对应一种微操作

        

        ② 字段直接编码,将控制字段分成段,将互斥性微命令放在同一段,相容性放在不同段

            优点:可以缩短微指令字长。缺点:要通过译码电路后再发出微命令,比直接编码方式慢

        

        ③ 字段间接编码,两次译码

        

(3)微指令的地址形成方式

        

可能会考下地址位数,下地址要表示所有微指令,故计算有多少条微指令,记得加取值周期

        

4 微程序控制单元的设计

(1)微程序控制单元设计方法

🐖:需要补充找下一条微指令地址的操作,在取指周期结束需要根据操作码找执行周期首地址

(2)设计分类

        静态微程序设计ROM,微程序不需要改变。动态微程序设计EPROM,通过改变微指令和微程序改变机器指令。毫微程序设计,用毫微程序解释微程序。

(3)硬布线与微程序的比较

        

5.5 异常和中断

5.6 指令流水线

1 基本概念

(1)指令执行方式

        

(2)表示方式

        

(3)性能指标

        ① 吞吐率,单位时间内流水线所完成的任务数量 / 输出结果的数量 = n/(k+n-1)Δt ≈ 1/Δt

        ② 装入时间,第一条指令完全执行完的时间。排空时间,最后一条指令从进入到出去的时间

        ③ 加速比,同一批任务,不使用流水线的时间 / 使用流水线的时间 = knΔt/(k+n-1)Δt = kn/k+n-1 ≈ k

        ④ 效率,完成任务的有效面积 / 总面积

2 指令流水线的影响因素和分类

(1)流水线设计注意事项:每个阶段耗时相同,每个功能段后有缓冲寄存器保存当前段结果,指令和数据在两个cache可以同时访问,译码阶段还要将操作数从通用寄存器中取出

        

(2)结构相关(资源冲突),多条指令在同时争用同一资源

        解决方法:后一条指令暂停一周。资源重复配置(指令cache 数据cache)

(3)数据相关(数据冲突),前一条指令执行完才能执行后一条指令

        解决方法:给指令插气泡直到可以运行(硬件阻塞stall),插入空指令(软件阻塞NOP)。数据旁路,直接从ALU算出来的地方把数拿走。编译优化,将后面的没有冲突的指令提前执行

        

(4)控制相关(控制冲突),遇到转移指令和其他改变PC值的指令而造成断流

        

(5)流水线分类

        ① 部件功能级流水线(将每个子过程阶段再细分)。处理机级流水线(将指令分成子过程执行)。处理机间级流水线(一个处理机完成一个过程)

        ② 单功能流水线(实现固定功能的流水线)。多功能流水线(不同连接方式可以实现不同的功能)

        ③ 静态流水线(同一时间各段只能按同一种功能的连接方式工作)动态流水线(某些段实现运算时另一些段实现不同的运算)

        ④ 线性流水线(从输入到输出每个功能段只允许经过一次)非线性流水线(从输入到输出某些功能段数次通过流水线)

(6)流水线的多发技术

        ① 超标量技术,同一时间发射多条指令

        

        ② 超流水技术,一个时钟周期再分段

        

        ③ 超长指令字

        

3 五段式指令流水线

(1)运算类指令

        

(2)LOAD指令

        

(3)STORE指令

        

(4)条件转移指令

        

(5)无条件转移指令

        

🐖:取数指令到最后一步才会将数据放回寄存器,如果下一步需要用到取出的数据需要推迟执行ID。只有前一条指令进入ID段后下一条指令才能开始IF,否则会覆盖IF段锁存寄存器中内容

5.7 多处理器的基本概念

1 基本概念

(1)SISD单指令流单数据流

        

(2)SIMD单指令流多数据流

        

(3)MISD多指令流单数据流,多条指令并行执行,处理同一个数据,不存在

(4)MIMD多指令流多数据流,指令序列并行执行,分别处理多个不同的数据,线程级及以上并行

        ① 多处理器系统

        

        ② 多计算机系统

        

(5)向量处理机

        

(6)多处理器系统=多核处理器=共享内存多处理器(也共享最低一级cache)

2 硬件多线程

(1)细粒度多线程,轮流发射各线程的指令,指令级并行,线程间不并行

(2)粗粒度多线程,连续发射一个线程的指令,指令级并行,线程间不并行

(3)同时多线程SMT,同时发射多个线程的指令

        

        

第六章 总线

6.1 总线概述

1 概述

(1)总线是一组能为多个部件分时共享的公共信息传送线路

(2)总线特性

        

(3)总线分类

        ① 按数据传输格式:串行总线、并行总线

            

        ② 按总线功能

            片内总线:CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线

            系统总线:数据总线、地址总线(位数和主存地址空间大小和设备数量有关)、控制总线

            

           🐖:数据总线宽度和机器字长一致,CPU可以通过一次数据读入取得CPU可以处理的那么多数据。数据总线和存储字长一致,每次主存读写操作只需用数据总线传一次数据

                    数据通路是表示数据流经的路径(逻辑概念),数据总线是承载的媒介(物理媒介)

            通信总线

        ③ 按时序控制方式:同步总线、异步总线

(4)系统总线的结构

        ① 单总线结构,CPU、主存、IO设备全部连接在一组总线上。结构简单成本低,易于接入新设备。带宽低负载重,不支持两组设备并行传送,浪费高速设备性能

        ② 双总线结构,主存总线+IO总线,由通道对IO设备进行统一管理,通道程序在内存中,通道需要和内存用主存总线进行交互。支持突发传送,一个地址下传连续多个数据

        

        ③ 三总线结构,主存总线+IO总线+DMA总线,CPU通过IO总线和慢速设备进行交互,通过DMA总线和主存总线和高速设备交互。提高了IO设备的性能(高速的走高速的线,低速的直接和CPU连更快相应),提高系统吞吐量。但三个总线不能同时处于工作状态,系统工作效率低

        

2 性能指标

(1)总线的传输周期/总线周期,利用总线传输一组数据的时间。

(2)总线的时钟周期,= 机器时钟周期

🐖:总线时钟周期和总线周期可以是一对多一对一多对一

(3)总线的工作频率 = 总线周期的倒数,一秒传几次数据

(4)总线的时钟频率 = 时钟周期的倒数,一秒内有多少时钟周期

(5)总线宽度,总线上能同时传输的数据位数

(6)总线带宽,总线的数据传输率,单位时间内总线上可传输数据的位数

        总线带宽 = 总线工作频率×总线宽度bit/s = 总线宽度 / 总线周期

(7)总线复用,分时传送地址和数据

(8)信号线数,所有总线数目之和

6.2 总线事务和定时

1 仲裁

(1)解决多个设备争用总线的问题,硬件实现

(2)集中仲裁方式

        ① 链式查询方式,总线检测到有请求就发允许信号,设备响应并发出忙信号,直到用完下一个设备响应

        

        ② 计数器定时查询方式,用计数器决定当前哪个设备响应

        

        ③ 独立请求方式,每个设备用自己的请求线请求,由总线控制部件中的排队器决定哪个设备响应,响应速度快

        

(3)分布仲裁方式,所有设备将自己的仲裁号发到总线上进行比较,在总线上留下优先级最高的设备并响应

2 操作和定时

(1)同步通信

        

(2)异步通信

        

(3)半同步通信

        

(4)分离式通信,在从设备准备数据周期将总线释放掉,准备好了再申请

3 标准

(1)系统总线,连CPU和北桥芯片/主存。ISA(并)、EISA(并)

(2)局部总线,连北桥芯片和重要硬件。VESA(并)、PCI(并)、AGP(并)、PCI-E(串)

(3)设备总线/通信总线,连南桥芯片和外设。RS-232C(串)、SCSI(并)、PCMCIA(并)、USB(串)、IDE(并)、SATA(串)

第七章 输入输出系统

7.1 IO系统基本概念

1 输入输出系统和IO控制方式

(1)IO系统的基本组成

        ① IO硬件,外部设备、IO接口(IO控制器/设备控制器,协调主机和外部设备之间的数据传输。包括数据寄存器、控制寄存器、状态寄存器)、IO总线

        ② IO软件,驱动程序、用户程序、管理程序、升级补丁

        🐖:IO指令是CPU指令的一部分,通道指令是通道执行的代替CPU对设备进行管理,CPU执行IO指令对通道发出命令

(2)IO控制方式

        ① 程序查询,CPU不停检查IO控制器中的状态寄存器来判断是否完成

        

        ② 程序中断,CPU在等待IO时可以做其他事,IO设备发出中断请求后再回来

        

        ③ DMA控制方式,DMA控制器根据CPU发的主存地址和数据量完成一块数据的读写后才向CPU发送一次中断请求

        

        ④ 通道,识别并执行一系列通道指令

        

2 外部设备

(1)输入设备,键盘鼠标

(2)输出设备

        ① 显示器

        ▲ 参数:屏幕大小(对角线长度)、分辨率(像素个数 长*宽)灰度级(8bit表示256个灰度级)、刷新(单位时间内刷新整个屏幕内容的次数)、显示存储器(存储一帧的图像, 容量= 分辨率*灰度级位数,带宽/1s写入多少数据 = 分辨率*灰度级位数*帧频)

        ▲ 分类:阴极射线管显示器CRT(字符显示器、图形显示器、图像显示器)、液晶显示器LCD、发光二极管LED

        ② 打印机

        ▲ 按印字原理:击打式打印机、非击打式打印机

        ▲ 按打印机工作方式:串行打印机、行式打印机

        ▲ 工作方式:针式打印机、喷墨式打印机、激光打印机

(3)外存储器

7.2 IO接口

1 IO接口的作用

2 结构和工作原理

3 IO端口

4 分类

7.3 IO方式

1 程序查询方式

🐖:可以用定时查询的方式实现程序查询

2 程序中断方式

(1)基本概念,中止现行程序,转去执行中断服务程序处理中断请求,解决完CPU自动返回现行程序断点处。CPU响应中断必须满足的要求(有中断请求、开中断状态、一条指令执行完且无更紧迫任务)

(2)CPU处理中断的工作流程

        ① 中断请求

        ② 中断响应,必须是在开中断的情况下

        ③ 中断判优

        

        ④ 中断处理,保存PC的值并找到中断服务程序的入口

        ▲ 中断隐指令:关中断、保存断点、引出中断服务程序(软件查询法、硬件向量法)

        

        🐖:中断隐指令不是某条具体的指令,向量地址又叫中断类型号

        ▲ 中断服务程序:保护现场(通用/状态寄存器)、中断服务、恢复现场(弹出寄存器啥的)、中断返回(弹出PC)

(3)单重中断和多重中断

         

        

(4)程序中断方式

        

        

3 DMA方式

(1)DMA工作方式

        

🐖:DMA请求是和主存进行一个字的数据传输,由DMA请求触发器发。DMA中断请求是一块数据传输完成

(2)当采用三总线时CPU和DMA对主存的访存冲突处理

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值