Skip to content

Latest commit

 

History

History
258 lines (184 loc) · 15.8 KB

计算机组成原理.md

File metadata and controls

258 lines (184 loc) · 15.8 KB

第一章 计算机系统概述

计算机的性能指标

计算机的主要性能指标

1. 机器字长

计算机进行一次整数运算所能处理的二进制数据的位数,通常与CPU的寄存器位数、加法器有关。一般等于内部寄存器的大小,字长越长,数的表示范围越大,计算精度越高。字长通常为字节(8位)的整数倍,通常是2、4、8倍

2. 数据通路带宽

数据总线一次所能并行传送信息的位数。数据通路宽度是指外部数据总线的宽度,它与CPU内部的数据总线宽度(内部寄存器的大小)有可能不同

注意:各个子系统通过数据总线连接形成的数据传送路径称为数据通路

3. 主存容量

主存容量是指主存储器所能存储信息的最大容量,通常以字节来衡量,也可用子数字长(如512K16位)来表示存储容量。其中,MAR(地址寄存器)的位数反映存储单元的个数,MAR的位数反应可寻址范围的最大值(不一定是实际存储器的存储容量)

4. 运算速度

  1. 吞吐量和响应时间
    • 吞吐量 指系统在单位数件内处理请求的数量,主要取决于主存的存储周期
    • 响应时间 指从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结果的等待时间。通常包括CPU时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储器访问、IO操作、操作系统开销等时间)
  2. 主频和CPU时钟周期
    • CPU时钟周期 通常为节拍脉冲或T周期,即主频的倒数,它是CPU中最小的时间单位,每个动作至少需要1个时钟周期
    • 主频(CPU时钟频率) 机器内部主时钟的频率,是衡量机器速度的重要参数。主频的倒数是CPU时钟周期。对于同一个型号的计算机,其主频越高,完成指令的一个执行步骤所需的时间越短,执行指令的速度越快
  3. CPI(Clock cycle Per Instruction),即执行一条指令所需的时钟周期数
  4. CPU执行时间,指运行一个程序花费的时间
    CPU执行时间=CPU时钟周期数/主频=(指令条数*CPI)/主频
    上式表明,CPU的性能(CPU执行时间)取决于三个要素:1. 主频(时钟频率);2. 每条指令执行所用的时钟周期数(CPI);3. 指令条数
  5. MIPS、MFLOPS、GFLOPS和TFLOPS
    • MIPS,每秒执行多少百万条指令。MIPS=指令条数/(执行时间*10^6^)=主频/CPI
    • MFLOPS,每秒执行多少百万次浮点运算。MFLOPS=浮点操作次数/(执行时间*10^6^)
    • GFLOPS,每秒执行多少十亿次浮点运算。MFLOPS=浮点操作次数/(执行时间*10^9^)
    • TFLOPS,每秒执行多少万亿次浮点运算。MFLOPS=浮点操作次数/(执行时间*10^12^)

第二章 数据的表示和运算

2.1 数制与编码

进位计数制及其相互转换

1. 进位计数法

一个r进制数($K_nK_{n-1}...K_0K_{-1}...K_{-m}$)的数制可表示为 $$K_nr^n+K_{n-1}r^{n-1}+...+K_0r^0+K_{-1}r^{-1}+...+K_{-m}r^{-m}=\sum^{-m}_{i=n}K_ir^i$$ 式中,r是基数;$r^i$是第i位的位权(整数位最低位规定为第0位);$K^i$的取值可以是0,,1,...,r-1共r个数码中的任意一个

2. 不同进制数之间的相互转换

  1. 二进制数转换为八进制数和十六进制数 以小数点为界。整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组或4位(十六进制)一组,在树的最左边可根据需要加0补齐;对于小数部分,从小数点开始往右数,也将一串二进制数分为3位一组或4位一组,在数的最右边也可根据需要加0补齐。最终使总的位数为3或4的整数倍,然后分别用对应的八进制数或十六进制数取代

  2. 任意进制数转换为十进制数 将任意进制数的各位数码与它们的权值相乘,再把乘积相加,就得到了一个十进制数

  3. 十进制转换为任意进制数 一个十进制数转换为任意进制数,常采用基数乘除法。这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分用除基取余法,对小数部分用乘基取整法,最后将整数部分与小数部分的转换结果拼接起来

除基取余法(整数部分的转换):整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位(即除基取余,先余为低,后余为高),商为0时结束

乘基取整法(小数部分的转换):小数部分乘基取整。最先取得的整数为数的最高位,最后取得的整数为数的最低位(即乘基取整,先整为高,后整为低),乘积为1.0(或满足精度要求)时结束

真值和机器数

在日常生活中,通常用正号、负号来分别表示正数(正号可省略)和负数,和+15、-8等。这种带+或-负号的数称为真值。真值是机器数所代表的实际值。

在计算机中,通常采用数的符号和数值一起编码的方法来表示数据。常用的有原码、补码和反码表示法。这几种表示法都将数据的符号数字化,通常用0表示正,用1表示负。如0,101(这里的逗号,实际上并不存在,仅为区分符号位与数值位)表示+5.这种把符号“数字化”的数称为机器数

BCD码

二进制编码的十进制数(Binary-Coded Decimal,BCD)通常采用4位二进制数来表示一位十进制数中的0~9这10个数码。这种编码方法使二进制数和十进制数之间的转换得以快速进行。但4位二进制数可以组合出16种代码,故必有6种状态为冗余状态。

几种常用的BCD码

  1. 8421码。各位权值分别为8,4,2,1.若两个8421码相加之和小于等于$(1001)_2$即9,则不需要修正;若相加之和大于等于$(1010)_2$即10,则要加6修正(从1010到1111这6个为无效码),并向高位进位,进位可以在首次相加或修正时产生
  2. 余3码。在8421上加3
  3. 2421码。权值分别为2,4,2,1,特定是大于等于5的4位二进制数中最高位为1,小于5的最高位为0

字符与字符串

1.ASCII码

2.汉字编码

3,字符串的存放

字符串是连续的遗传字符,通常占用主存中连续的多个字节,每个字节存储一个字符。在同一个主存字中,可先存储低位字节、后存储高位字节,这称为小端模式;也可先存储高位字节、后存储低位字节,称为大端模式

校验码

任意两个合法码字之间最少变化的二进制位数,称为数据校验码的码矩

1. 奇偶校验码(检错)

在原编码上加一校验位,它的码矩等于2,可以检测出奇数位错误

奇校验码:整个校验码(有效信息位和校验位)中1的个数为奇数

偶校验码:整个校验码(有效信息位和校验位)中1的个数为偶数

缺点:具有局限性,只能发现奇数位出错的情况,不能纠正错误

2.循环冗余校验(CRC)码(检错)

在K位信息码后再拼接R位的校验码,整个编码的长度为N位,因此,这种编码又称(N,K)码

CRC码基于线性编码理论,在发送端,将要传送的K位二进制信息码左移R位,将它与生成多项式G(x)做模2除法,生成一个R位校验码,并附在信息码后。

任意一个二进制数码都可以用一个系数仅为0或1的多项式与其对应。生成多项式G(x)的最高幂次为R,转换成对应二进制数有R+1位,比如,生成多项式$x^3+x^2+1$对应的二进制数为1101,而二进制数1011对应的多项式为$x^3+x^1+1$

模2除法:和减法的结果相同,都是做异或运算。模2除法与算术除法类似,但每位除(减)的结 果不影响其他位,即不借位

3. 海明校验码(纠错)

海明码是一种多重奇偶校验码。其实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,还能找出错位的位置,为自动纠错提供依据

两个码字的对应比特取值不同的比特数称为这两个码字的海明距离。一个有效编码集中,任意两个码字的海明距离的最小值称为该编码集的海明距离

1. 确定校验码的位数x

设数据有n位,校验码有x位。则校验码一共有$2^x$种取值方式。其中需要一种取值方式表示数据正确,剩下$2^x-1$种取值方式表示有一位数据出错。因为编码后的二进制串有n+x位,因此x应该满足 $2^x-1 \geq n+x$  

设信息位$D_4D_3D_2D_1(1010)$,共4位,校验位$P_3P_2P_1$,共3位,对应的海明码为$H_7H_6H_5H_4H_3H_2H_1$

2. 确定校验码的位置

校验码在二进制串中的位置为2的整数幂。剩下的位置为数据位

即将校验位$P_i$放在海明位号为2^i-1^的位置上,如下

$H_7H_6H_5H_4H_3H_2H_1$ $D_4D_3D_2P_3D_1P_2P_1$

3. 分组以形成校验关系

被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和。另外,校验位不需要再被校验。

$D_1$放在$H_3$上,由$P_2(H_2)P_1(H_1)$校验 $D_2$放在$H_5$上,由$P_3(H_4)P_1(H_1)$校验 $D_3$放在$H_6$上,由$P_3(H_4)P_2(H_2)$校验 $D_4$放在$H_7$上,由$P_3(H_4)P_2(H_2)P_1(H_1)$校验

4. 校验位求值

校验位$P_i$的值为由该校验位校验的所有数据位的位的值求异或,相当于偶校验,如

$P_1$参与了$D_1,D_2,D_4$三个数据位的校验,则 $P_1=D_1\oplus D_2\oplus D_4$

5. 海明码的校验原理

每个校验组分别利用校验位和参与形成该校验位的信息位进行异或运算(相当于偶校验),构成k个校验方程: $S_1=P_1\oplus D_1\oplus D_2\oplus D_4$ ... 因为之前求校验位的值时可以确定校验位和参与该校验的数据位中1为偶数个,所以最终这些方程的取值都为0时,则说明无错,否则说明出错,方程结果组合形成的二进制数转换为十进制数就是错误位的位号,如$S_3S_2S_1=010$,说明第2位出错,即H_2出错,直接将该位取反就达到了纠错的目的

海明码具有1位的纠错能力,2位的检错能力 需加上全校验位,对整体进行偶校验 $S_3S_2S_1=000$且全体偶校验成功:无错误 $S_3S_2S_1\neq 000$且全体偶校验失败:有1位错,纠正即可 $S_3S_2S_1\neq000$且全体偶校验成功:有2位错,无法纠正,需重传

检错

接收端收到的CRC码,用生成多项式G(x)做模2除法,若余数为0,则码字无错

2.2 定点数的表示与运算

2.2.1 定点数的表示

1 无符号数和有符号数

  1. 无符号数 整个机器字长的全部二进制位均为数值位
  2. 有符号数 最高位为符号位,0表示正,1表示负

2 机器数的定点表示

根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示

定点表示即约定机器数中小数点位置是固定不变的,在计算机中通常有两种,将小数点的位置固定在数据的最高位之前,或固定在最低位之后。一般称前者为定点小数,后者为定点整数

1. 定点小数

纯小数

数据X的形式为$X=x_0x_1x_2\cdots x_n$,其中$x_0$为符号位,$x_1\cdots x_n$是数值的有效部分,也称尾数,$x_1$为最高有效位

当$x_0=0,x_1\cdots x_n$均为1时,X为其所能表示的最大正数,真值等于$1-2^{-n}$

当$x_0=1,x_1\cdots x_n$均为1时,X为其所能表示的最大正数,真值等于$-(1-2^{-n})$

2. 定点整数

纯整数

取值范围为$[-(2^n-1),2^n-1]$

3 原码、补码、反码、移码

原码表示法

机器数的最高位表示该数的符号,其余各位表示数的绝对值

  • 纯小数的原码 对于正小数$x=+0.x_1x_2\cdots x_n$,有$[x]_原=0.x_1x_2\cdots x_n$;对于负小数$x=-0.x_1x_2\cdots x_n$,有$[x]_原=1.x_1x_2\cdots x_n$ 若字长为n+1,则原码小数的表示范围为$-(1-2^{-n})\leq x\leq 1-2^{-n}$(关于原点对称)

  • 纯整数的原码 最高位为符号位,其他没什么可说的,注意在最高位和有效数值位之间添零凑够字长即可 若字长为n+1,则表示范围为$-(2^n-1)\leq x\leq 2^n-1$(关于原点对称)

原码特点:

  1. 因为符号位的存在,加减不好直接操作
  2. 0有两种表达方式
  3. 容易乘除
补码表示法

原码表示法的加减操作比较复杂,对于两个不同符号数的加法,先要比较两个数的绝对值大小,然后用绝对值大的数减去绝对值小的数,最后还要给结果选择合适的符号。而补码表示法中的加减法统一采用加法操作实现

纯小数的补码

$1>x\geq 0$时,补码为x $0>x\geq -1$时,补码为$2+x=2-|x|$

例$x=-0.0110$,字长为8位,则其补码为2-0.0110=1.1010000

若字长为$n+1$,则表示范围为$-1\leq x\leq 1-2^{-n}$(比原码多表示-1)

纯整数的补码

$2^n>x\geq 0$时,$[x]_补=0,x$ $0\geq x\geq -2^m$时,$[x]_补=2^{n+1}+x=2^{n+1}-|x|$

例如,若$x_2=-1101,则[x_2]_补=2^8-0,0001101=1,1110011$

若字长为n+1,则补码的表示范围为$-2^n\leq x\leq 2^n-1$(比原码多表示$-2^n$)

从原码求补码、从补码求原码

对于正数,补码和原码相同

对于负数,原码符号位不变,数值部分按位取反,末尾加1(取反加1),得到补码。此规则同样适用于由补码求原码

补码的算术移位

将补码的符号位与数值位一起右移一位并保持原符号位的值不变,可实现除法功能(除以2)

计算都为正数的补码的减法时,先算出减数取负的补码(取反加1),之后与被减数相加即可

反码表示法

反码通常用来作为由原码求补码或由补码求原码的中间过渡

正数和原码相同

负数就是原码的符号位不变,数值位取反

0也有两种表示法

若字长n+1,则取值范围为$-(2^n-1)\leq x\leq 2^n-1$

移码表示法

移码常用来表示浮点数的阶码。它只能表示整数

移码就是在真值X上加上一个常数(偏置值),通常这个常数取$2^n$,相当于X在数轴上向正方向偏移了若干单位,这就是“移码”一词的由来,移码定义为 $[x]_移=2^n+x(2^n>x\geq -2^n,其中机器字长为n+1)$

例如,若正数$x_1=+10101,x_2=-10101$,字长为8位,则其移码表示为:$[x_1]_移=2^7+10101=1,0010101;[x_2]_移=2^7+(-10101)=0,1101011$

移码的特点

  1. 移码中零的表示唯一,$[+0]_移=2^n+0=[-0]_移=2^n-0=100\cdots 0(n个"0")$
  2. 一个真值的移码和补码仅差一个符号位,$[x]_补$的符号位取反即得$[x]_移$(“1”表示正,“0”表示负,这与其他机器数的符号位取值正好相反),反之亦然
  3. 移码全0时,对应真值的最小值$-2^n$;补码全1时,对应真值的最大值$2^n-1$
  4. 移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小

定点数的运算

定点数的移位运算

移位运算根据操作对象的不同分为算术移位和逻辑移位。有符号数的移位称为算术移位,逻辑移位的操作对象是逻辑代码,可视为无符号数

1 算术移位

算术移位的对象是有符号数

IEEE 754

单精度: 一位符号位,8位阶码,23位尾数 阶码是移码,偏置量为127。计算时取出阶码要减127才是阶数 尾数是原码

分页式虚拟内存

页:进程中的块(进程被分成许多大小相同的块) 页框:内存中的块(内存被分成许多大小相同的块) 页的大小=页框大小 页表:进程中的每一页所对应的页框的位置(进程中的每一块对应在内存中的位置)

页表项: 逻辑地址(页号,偏移量) (逻辑地址就是虚拟地址) 物理地址(页框号,偏移量)