Contents

计算机组成与结构笔记

零零碎碎的计算机组成与结构学习笔记

1.2计算机的发展简史

1.2.4计算机的性能指标

机器字长:指参与运算的基本位数,由加法器、寄存器的位数决定。

机器字长以“字节Byte”为基本单位,字节用大写B表示,位用小写b表示,1Byte=8bit

数据通路宽度:数据总线一次能并行传送的位数,是指外部数据总线的宽度,影响信息传输能力、计算机有效处理速度。

主存容量:一个主存储器所能存储的全部信息量。

主存容量一般以字节数表示,1024B=1KB

影响计算机运算速度的指标

  • 吞吐量:计算机在单位时间内处理请求的数量

  • 响应时间:计算机对请求作出的响应时间(包括CPU时间与等待时间总和)

  • 主频 (f):时钟频率,表示在CPU内数字脉冲信号震荡的速度

  • 时钟周期 (T):CPU主频的倒数($T=\frac{1}{f}$),CPU中最小的时间元素,每个动作最少一个时钟周期

  • CPI(Cycles perInstruction):每条指令执行所用的时钟周期数

    CPI常用IPC(Instruction per Cycle)表示,即每个时钟周期执行的指令数

    $IPC = \frac{1}{CPI}$

  • CPU执行时间:$CPU执行时间 = \frac{CPU时钟周期数}{时钟频率} = \frac{指令数*CPI}{时钟频率}$

  • MIPS(MillionInstructions per Second):每秒执行多少百万条($10^6$)指令,值越大计算机速度越快

    $MIPS = \frac{指令条数}{执行时间*10^6} = \frac{主频}{CPI} = 主频 * IPC$

  • MFLOPS(MillionFloating-point Operations per Second):每秒执行多少百万次浮点运算

    $MFLOPS = \frac{浮点操作次数}{执行时间*10^6}$

例题:

例1-1︰某程序在一台时钟频率为2GHz的计算机A上运行需要10秒。现在将设计一台计算机B希望将运行时间缩短为6秒。计算机的设计者采用的方法是提高时钟频率,但这会影响CPU其余部分的设计,使计算机B运行该程序时需要相当于计算机A的1.2倍的时钟周期数。那么计算机设计者应该将时钟频率提高到多少?

解:

在A上运行该程序需要的时钟周期数:

$$ CPU时间_A = \frac{CPU时钟周期数_A}{时钟频率_A} $$

$$ 10s = \frac{CPU时钟周期数_A}{2* 10^9} 周期数/s $$

$$ CPU时钟周期数_A = 20*10^9 周期数 $$

B的CPU时间公式为: $$ CPU时间_B = 1.2 * \frac{CPU时钟周期数_A}{时钟频率_B} $$

$$ 6s = 1.2 *20 * \frac{10^9时钟周期数_A}{时钟频率_B} $$

$$ 时钟频率_B = 1.2* 20 * \frac{10^9时钟周期数}{6s} = 0.2 * 20 * \frac{10^9时钟周期数}{秒} \\ = 4 * 10^9 时钟周期数/s \\ = 4GHz $$

例1-2∶假设计算机A的时钟周期为250ps,对某程序的CPI为2.0 ; 计算机B的时钟周期为500ps,对同样程序的CPI为1.2。对于该程序,请问哪台计算机执行的速度更快? 快多少?

解:

对于固定程序,每台计算机执行的总指令数是相同的,用$I$表示

首先,每台计算机的CPU时钟周期数: $$ CPU时钟周期数_A = 1 * 2.0 $$

$$ CPU时钟周期数_B = 1* 1.2 $$

每台计算机的CPU时间: $$ CPU时间_A = CPU时钟周期数_A * 时钟周期 = 1* 2.0 * 250ps = 500 * 1ps $$ 同理: $$ CPU时间_B = 1* 1.2 * 500ps = 600 * 1ps $$

$$ \frac{CPU性能_A}{CPU性能_B} = \frac{执行时间_B}{执行时间_A} = 600* \frac{1ps}{500} = 1.2 $$

2.1数据与文字的表示方法

2.1.1数据格式

计算机中常用的数据表示格式有两种:

定点格式——容许的数值范围有限,但要求的处理硬件比较简单

浮点格式——容许的数值范围很大,但要求的处理硬件比较复杂

定点数的表示方法

定点表示:约定机器中所有数据的小数点位置是固定不变的(由于约定在固定的位置,小数点就不再使用记号“.”来表示)

通常将数据表示成纯小数纯整数

定点数:小数点位置固定不变的数

定点整数:小数点固定在最低位数的右面

定点小数:小数点固定在最高位数的后面,即纯小数表示

https://gitee.com/leonsec/images/raw/master/image-20210511154157018.png

https://gitee.com/leonsec/images/raw/master/image-20210511154321020.png

目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算

真值:正、负号加某进制数绝对值的形式称为真值,即数的实际值,如+3,-5等

机器数(机器码):真值按某种编码方式进行编码后的数值,如$x = 01011$

原码表示法

符号位加上二进制数的绝对值,0正1负

  1. 定点小数

    若定点小数的原码形式为$x_n.x_{n-1}···x_1x_0$($x_n$为符号位),则:

    $$ [x]_{\text {原}}=\left\{\begin{array}{rr} x & 0 \leq x<1 \\ 1-x=1+|x| & -1<x \leq 0 \end{array}\right. $$

    式中$[x]_原$是机器数,$x$是真值,下同

  2. 定点整数

    若定点整数的原码形式为$x_n.x_{n-1}···x_1x_0$($x_n$为符号位),则:

    $$ [x]_原=\left\{ \begin{aligned} x && 0 \le x < 2^n \\ 2^n - x = 2^n + |x| && -2^n < x \le 0 \end{aligned} \right. $$

例如:

$x = +1001$,则$[x]_原 = 01001$;$x = -1001$,则$[x]_原 = 11001$

$x = +0.1001$,则$[x]_原 = 0.1001$;$x = -0.1001$,则$[x]_原 = 1.1001$

对于0,原码中有“+0”、“-0”之分

补码表示法

  1. 定点小数

    若定点小数的补码形式为$x_n.x_{n-1}···x_1x_0$($x_n$为符号位),则: $$ [x]_补=\left\{ \begin{aligned} x && (mod\ 2) && 0 \le x < 1 \\ 2 + x = 2 - |x| && (mod\ 2) && -1 < x \le 0 \end{aligned} \right. $$

  2. 定点整数

    若定点整数的补码形式为$x_n.x_{n-1}···x_1x_0$($x_n$为符号位),则: $$ [x]_原=\left\{ \begin{aligned} x && (mod\ 2^{n+1}) && 0 \le x < 2^n \\ 2^{n+1} + x = 2^{n+1} - |x| && (mod\ 2^{n+1}) && -2^n < x \le 0 \end{aligned} \right. $$

例如:

$x = +0111$,则$[x]_补 = 00111$;$x = -0111$,则$[x]_补 = 11001$

$x = +0.1011$,则$[x]_补 = 0.1011$;$x = -0.1011$,则$[x]_补 = 1.0101$

对于0,补码中只有一种

补码与真值之间转换

$[x]_补 = 010011011$,求$x$

$x = 0*2^8 + 1*2^7 = 0*2^6 + 0*2^5 + 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 155$

$[x]_补 = 110011011$,求$x$

$x = -1*2^8 + 1*2^7 + 0*2^6 + 0*2^5 + 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = -101$

注意符号位,0为正,1为负,加负号

反码表示法

正数的反码等于其真值,符号位置0

负数的反码符号位置1,其余取反即可

原码->反码->补码

  • 正整数

    原码、反码、补码符号位都置0,用二进制表示的数位值都相同,三种表示法完全一样

  • 负整数

    原码、反码、补码符号位都置1,用二进制表示的数位值都不相同,规则如下:

    1. 原码符号位为1不变,整数的每一位二进制数位求反得到反码;
    2. 反码符号位为1不变,反码数值位最低位加1,得到补码

例:

$x = +122$,$y = -122$,求$[x]_原$、$[x]_反$、$[x]_补$、$[y]_原$、$[y]_反$、$[y]_补$

$$ x = (+122)_{10} = (+1111010)_2, \qquad y = (-122)_{10} = (-1111010)_2 \\ [x]_原 = 01111010, \quad [x]_反 = 01111010, \quad [x]_补 = 01111010 \\ [y]_原 = 11111010, \quad [y]_反 = 10000101, \quad [y]_补 = 10000110 $$

$[x]_补$->$[-x]_补$:将$[x]_补$连同符号位一起各位取反,末位加1得到$[-x]_补$

移码表示法

移码通常用于表示浮点数的阶码,对两个数的指数大小比较和对阶操作比较方便

假设定点整数移码形式为$x_n.x_{n-1}···x_1x_0$(最高位为符号位),移码定义为:

$$ [x]_移 = 2^n + x \qquad -2^n \le x < 2^n $$

$x$为真值,$2^n$为一个固定的偏移值常数,$n$为阶码长度,即移码字长

0的移码是唯一的

例:

$x = + 10101$时,$[x]_移 = 2^5 + 10101 = 1,10101$

$x = -10101$时,$[x]_移 = 2^5 + x = 2^5 - 10101 = 0,01011$

注:符号位与原码、反码、补码规律相反,1正0负

移码和补码只差一个符号位,符号位取反

移码为全0时所对应的真值最小,为全1时所对应的真值最大

浮点数的表示方法

计算机中一个任意进制数N可以写成:$N = \pm M * R^{\pm E}$

M尾数,是一个纯小数

E浮点的指数,是一个整数

R基数,对于二进制计数值的机器是一个常数,一般为2,8或16

一个机器浮点数由阶码尾数及其符号位组成:

持续更新ing…(第二章第40张)