软件设计师—计算机组成结构

178 阅读35分钟

1.1 硬件组成

一、计算机硬件组成

    1、计算机的硬件基本系统由五大部分组成:运算器、控制器、存储器、输入设备(如鼠标键盘)、输出设备(如显示器)

    2、存储器分为内部存储器(即内存,容量小,速度快,临时存放数据)和外部存储器(即硬盘、光盘等,容量大,速度慢,长期保存数据)

    3、输入设备和输出设备合并称为外部设备,即外设

    4、主机:CPU + 主存储器

二、中央处理单元CPU

    1、中央处理单元组成:由运算器、控制器、寄存器组、内部总线

    2、中央处理单元功能:实现程序控制、操作控制、时间控制、数据处理功能

    3、运算器组成

       (1)算术逻辑单元ALU(Arithmetic&logical Unit):实现对数据的算术和逻辑运算

       (2)累加寄存器AC(Accumulator):运算结果和源操作数的存放区,例如运算一个加法,它会存储加数、被加数和结果数

       (3)数据缓冲寄存器DR(Data Register):暂时存放内存的指令和数据

       (4)状态条件寄存器PSW(Program Status Word):保存指令运行结果的条件码内容,如溢出标志、是否为0、是否需要进位等。

    4、运算器功能:执行所有的算术运算,如加减乘除等;执行所有的逻辑运算并进行逻辑测试,如与、或、非、比较等。

    5、控制器组成

       (1)指令存储器IR(Instruction Register):暂存CPU执行指令

       (2)程序计数器PC(Program Counter):存放指令执行地址

       (3)地址寄存器AR(Address Register):保存当前CPU所访问的内存地址

       (4)指令译码器ID(Instruction Decoder):分析指令操作码

    6、控制器功能:控制整个CPU的工作,最为重要,包括程序控制、时序控制等。

三、历年真题

    1、CPU执行算术运算或者逻辑运算时,常将源操作数和结果暂存在()中。

       A.程序计数器(PC) B.累加器(AC) C.指令寄存器(IR) D.地址寄存器(AR)

       答案:B

       解析:累加寄存器AC通常简称为累加器,其功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区。累加寄存器暂时存放ALU运算的结果信息。显然,运算器中至少要有一个累加存储器。

    2、执行CPU指令时,在一个指令周期的过程中,首先需从内存读取要执行的指令,此时先要将指令的地址即()的内容送到地址的总线上。

       A.指令寄存器(IR) B.通用寄存器(GR) C.程序计数器(PC) D.状态寄存器(PSW)

       答案:C

       解析:本题考查计算机组成原理的CPU寄存器。备选答案中的多种寄存器中PC负责记录要执行的指令地址。所以应把PC中的内容送到地址总线上。

    3、计算机执行指令的过程中,需要由()产生每条指令的操作信号并将信号送往相应的部件进行处理,以完成指定的操作。(2019)

       A.CPU的控制器 B.CPU的运算器 C.DMA控制器 D.Cache控制器

       答案:A

       解析:运算器负责逻辑和算数运算,控制器负责程序执行的时序、操作等。

    4、DMA控制方式是在()之间直接建立数据通路进行数据的交换处理。(2019)

       A.CPU与主存 B.CPU与外设 C.主存与外设 D.外设与外设

       答案:C

       解析:DMA是在主存和外设之间建立一条直接的数据通道,能够直接传输数据块,在无CPU干涉的情况下。

1.2 进制转换

一、数据的进制转换

    1、进制的表示

       二进制、十六进制。一般在题目中会给出中文说明,如果没给出,注意二进制符合为0b,一般表示为0b0011,十六进制符号为0x或H,可表示为0x18F或18FH。

       十六进制可以表示16个数,也就是0-15。其中0-9还是数字,从10开始就是A,11就是B,一直到15的F,所以十六进制就是0-9A-F。为了区分,十六进制要么在前面加0x,要么在后面加H。

    2、R进制整数转十进制

       位权展开法,用R进制数的每一位乘以R的n次方,n是变量,从R进制数的整数最低位开始,依次为0,1,2,3...累加。

       例如有6进制数5043,此时R=6,用6进制数的每一位乘以6的n次方,n是变量,从6进制数的整数最低位开始(5043从低位到高位排列:3,4,0,5),n依次为0,1,2,3,那么最终5043 = 3*6^0 + 4*6^1 + 0*6^2 + 5*6^3 = 1107。

    3、十进制转R进制

       十进制整数(除以R倒取余数),用十进制整数除以R,记录每次所得余数,若商不为0,则继续除以R,直至商为0,而后将所有余数从下至上记录,排列成从左到右顺序,即为转换后的R进制数。

       例如有十进制数200,转换为6进制,此时R=6,将200/6,得商为33,余数为2;因为商不等于0,因此再将商33/6,得商为5,余数为3,再将5/6,得商为0,余数为5;此时商为0,将所有余数从下到上记录,得532。

    4、m进制转n进制

       先将m进制转化为十进制数,再将十进制数转化为n进制数,中间需要通过十进制中转。

    5、直接转换的两种进制

       (1)二进制转八进制

           每三位二进制数转换为一位八进制数,二进制数位个数不是三的倍数,则在前面补0(原则是数值不变),如二进制数01101有五位,前面补一个0就有六位,为001101,每三位转换为一位八进制数,001=1,101=4+1=5,也即01101=15。

       (2)二进制转十六进制

           每四位二进制数转换为一位十六进制数,二进制数位个数不是四的倍数,则在前面补0,如二进制数101101有六位,前面补两个0就有八位,为00101101,每四位转换为一位十六进制数,0010=2,1101=7+5+1=13=D,也即101101=2D。

二、数的表示

    1、机器数

       各种数值在计算机中表示的形式,其特点是使用二进制计数制,数的符号用0和1表示,小数点则隐含,不占位置。

       机器数有00无符号数和带符号数之分。无符号数表示正数,没有符号位。带符号数最高位为符号位,正数符号位为0,负数符号位为1。

    2、定点表示法

       定点表示法分为纯小数和纯整数两种,其中小数点不占存储位,而是按照以下约定:

       (1)纯小数:约定小数点的位置在机器数的最高数值位之前

       (2)纯整数:约定小数点的位置在机器数的最低数值位之后

    3、真值

       机器数对应的实际数值。

三、数的编码方式

    1、原码

       一个数的正常二进制表示,最高位表示符号,数值0的源码有两种形式:+0(0 0000000)和-0(1 0000000)。

    2、反码

       正数的反码即原码;负数的反码是在原码的基础上,除符号位外,其他各位按位取反。数值0的反码也有两种方式:+0(0 0000000)和-0(1 1111111)。反码就是原码取反。

    3、补码

       正数的补码即原码;负数的补码是在原码的基础上,除符号位外,其他各位按位取反。而后末位+1,若有进位则产生进位。因此数值0的补码只有一种方式:+0 = -0 = 0 0000000。补码就是反码+1。

    4、移码

       用作浮点运算的阶码,无论正数负数,都是将该原码的补码的首位(符号位)取反得到移码。移码就是补码的符号位取反。

四、机器字长的取值范围

    机器字长为n时各种码制表示的带符号数的取值范围(差别在于0的表示,原码和反码分+0和-0,补码只有一个0,因此可以多表示一个。)

    2^(n-1)的由来,按正常来说,有n个字长就应该有2的n次方个整数,但由于有一个数是符号位,因此排除在外,只剩下n-1个数,所以整数的范围就是2^(n-1)。因为正负两边都有0,所以两边都要-1,而补码是正0和负0都一致,所以就只需减一个1。

image.png

    例:若机器字长为8,请给出45和-45的原码、反码、补码和移码。

    答案:

image.png

五、浮点数表示

    表示方法为N=F*2^E,其中E称为阶码,F称为尾数;类似于十进制的科学计数法,如85.125 = 0.85125 * 10^2,二进制如101.011 = 0.101011 * 2^3。

    在浮点数的表示中,阶码为带符号的纯整数,尾数为带符号的纯小数,要注意符号占最高位(正数0负数1),其表示格式如下:

image.png

    阶符:阶码的符号

    阶码:幂指数

    数符:尾数的符号

    尾数:小数

    简单来说,阶符是整数部分的符号位,阶码就是整数,数符是小数部分的符号位,尾数就是小数。

    很明显,与科学计数法类似,一个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码确定,所表示的数值精度由尾数确定。阶码就相当于幂指数,它越大,范围就越大;而尾数越多,则越精确。

    尾数的表示采用规格化的方法,也即带符号尾数的补码必须为1.0xxxx(负数)或者0.1xxxx(正数),其中x可为0或1。

    对阶:使两个数的阶码相同,小阶向大阶看齐,较小阶码增加几位,尾数就右移几位。

    尾数计算:相加,若是减运算,则加负数

    结果规格化:尾数表示规格化,带符号尾数转换为1.0xxxx或0.1xxxx

六、算术运算和逻辑运算

    数与数之间的算术运算包括加、减、乘、除等基本算术运算,对于二进制数,还应该掌握基本逻辑运算,包括:

    1、逻辑与&:0与1相与,只要有一个为0结果就为0,两个都为1才为1

    2、逻辑或|:0与1相或,只要有一个为1结果就为1,两个都为0才为0

    3、异或:同0非1,即参与运算的二进制数同为0或者同为1结果为0,一个为0另一个为1结果为1

    4、逻辑非!:0的非是1,1的非是0

    5、逻辑左移<<:二进制数整体左移n位,高位若溢出则舍去,低位补0

    6、逻辑右移>>:二进制数整体右移n位,低位若溢出则舍去,高位补0

三、历年真题

    1、浮点数在机器中的表示形式如下所示,若阶码的长度为e,尾数的长度为m,则以下关于浮点表示的叙述中,正确的是()。

       ①e的值影响浮点数的范围,e越大,所表示的浮点数值范围越大

       ②e的值影响浮点数的精度,e越大,所表示的浮点数精度越高

       ③m的值影响浮点数的范围,m越大,所表示的浮点数值范围越大

       ④m的值影响浮点数的精度,m越大,所表示的浮点数精度越高

       A.①③ B.②③ C.①④ D.②④

       答案:C

       解析:阶码的长度决定浮点数的范围,尾数的长度决定浮点数的精度。

    2、如果"2X"的补码是"90H",那么X的真值是()。

       A.72 B.-56 C.56 D.111

       答案:B

       解析:90H转为二进制是1,0010000,这个是补码,那它的原码为1,1110000,也就是说2X的原码是1,1110000,那2X的十进制数为-112,因此X = -112 / 2 = -56,答案为B

    3、设16位浮点数,其中阶符1位、阶码值6位、数符1位、尾数8位。若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是()。

       A.-2^64 ~ (1-2^-8) 2^64

       B.-2^63 ~ (1-2^-8) 2^63

       C.-2^64 ~ (1-2-(1-2^-8) 2^64 ~ (1-2^-8) 2^64

       D.-(1-2^-8) 2^63 ~ (1-2^-8) 2^63

       答案:B

       解析:阶码用移码表示,共6位,则有2^6=64位来表示阶码,取n=64计算出移码可表示最大2^63,而尾数用补码表示,因为尾数是小数,因此代入补码小数范围的公式,可表示-1-(1-2^-8),然后首尾分别和2的63次方相乘得出答案是B。

1.3 校验码

一、奇偶校验码

    1、码距

       就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,码距越大,越利于纠错和检错。

    2、奇偶校验码

       在编码中增加1位校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2。例如:

       (1)奇校验

           编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个,则有误。例如01101,这里可以加一位校验位0,变成011010。奇校验如果数据本来就有奇数个1,那么校验位就加0,如果是偶数个1,那么校验位就加1。

       (2)偶校验

           同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错。例如011010奇校验,如果有两位同时变成了1,变成111110,这里还是奇数个1,它没办法统计出有多少个1,它只知道有奇数个1,所以它只能检1位错。

二、循环冗余校验码CRC

    CRC只能检错,不能纠错。其原理是找出一个能整除多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为校验位加在原始报文之后,作为发送数据发给接收方,其编码格式为:

image.png

    由此可知,CRC由两部分组成,左边为信息码(原始数据),右边为校验码。校验码是由信息码产生的,校验码位数越长,校验能力越强。求CRC编码时,采用的是模2运算(按位运算,不发生借位和进位)。

    例:原始报文为"11001010101",其生成多项式为:"x^4+x^3+x+1"。对其进行CRC编码后的结果为?

    解答:

       (1)求得除数

           首先根据多项式得知,最高的幂指数是4,然后从0开始数到4,从低幂往高幂数,如果存在当前幂指数的数据,则为1,否则为0。0次幂的数据为1,因此是1;1次幂的数据为x,因此为1;2次幂的数据不存在,因此为0;3次幂的数据为x^3,因此为1;4次幂的数据为x^4,因此为1。所以除数组合起来,就是11011。

           x^4 + x^3 + x + 1

            1          1   0 1    1

       (2)原始报文补0

           原始报文不能直接除以这个除数,它要在后面加上(除数的位数-1)个0,除数是11011,因此要在后面加上4个0,就变成了11001010101 0000,当然这4个0只是在计算的时候才加在多项式的后面。

       (3)模2运算

           原始多项式补0之后,开始和除数进行模2除法,正常的除法是两者相减,而模2除法是只要两个数字不相同,那就为1,相同就为0,也就是异或运算,最终得出四位的余数为0011,这个余数就是校验位,然后加在原始多项式的后面,最终编码为11001010101 0011,然后发出去。

           接收方将收到的数据110010101010011与多项式的11011进行模2运算,若余数为0,说明校验正确,数据传输正确。

           注意:余数的位数必须是多项式的位数-1,如果余数的位数不够,需要在前面补0。这里刚好是四位,因此不需要补0。

image.png

三、海明校验码

    海明码:本质也是利用奇偶性来检错和纠错的检验方法,构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距实现检错和纠错。

    设数据位是n位,校验位是k位,则n和k必须满足以下关系:2^k - 1 >= n + k。

    简单而言,奇偶校验码是在最后加上一位0或1,CRC校验码是在后面加上校验位,海明校验码不是固定在后面还是前面加,而是在2的n次方的位置上加。我们会把原始报文从右到左进行编号,而2的n次方的位置,也就是1,2,4,8,16这些位置插入校验码。如下面例子所示:

    例:求信息1011的海明码

       (1)校验位的位数和具体的数据位的位数之间的关系

           所有位都编号,从最低位编号,从1开始递增,校验位处于2的n(n=0 1 2......)次方中,即处于第1,2,4,8,16,32,......位上,其余位才能填充真正的数据位,若信息数据为1011,则可知,第1,2,4位为校验位,第3,5,6,7位为数据位,用来从低位开始存放1011。

image.png

       (2)每一位校验码的计算公式

           需要确定每一位校验码到底校验哪些信息位,将信息位(即编号)拆分成二进制表示:

           如7=4+2+1,由第4位校验位(r2)和第2位校验位(r1)和第1位校验位(r0)共同校验

           同理,第6位数据位6=4+2,第5位数据位5=4+1,第3位数据位3=2+1

           由于校验位的值,是它所校验的数据位的异或得来的,例如第4位校验位校验第7 6 5三位数据位,而765这三个数据分别是101,所以第4位校验位的值是1与0与1的异或(1与0异或为1,1再与1异或为0),所以第4位校验位的值为0。第2位和第1位校验位计算原理同上,计算出三个校验位后,可知最终要发送的海明校验码为1010101。

image.png

       (3)检错和纠错原理

           接收方收到海明码(1010101)之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算:

image.png

           说白了这个检错其实就是对第二部计算每一位校验码的步骤,重新计算一次。例如r0校验的是I1、I2和I4的,那就拿r0跟I1、I2、I4逐个逐个异或一下。

           如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,才是正确,假设是偶校验,且接收到的数据为1011101(第四位出错),此时,运算的结果为:

image.png

           这里不全为0,表示传输过程有误,并且按照r2r1r0排列为二进制100,这里指出的就是错误的位数,表示第100,即第4位出错,找到了出错位,纠错犯法就是将该位逆转,因为二进制嘛,不是0就是1,纠错直接将其逆转就可以了。

四、历年真题

    1、循环冗余校验码(CRC)是数据通信领域中最常用的一种差错校验码,该校验方法中,使用多项式除法(模2除法)运算后的余数为校验字段。若数据信息为n位,则将其左移k位后,被长度为k+1位的生成多项式相除,所得的k位余数即构成k个校验位,构成n+k位编码。若数据信息为1100,生成多项式为x^3+x+1(即1011),则CRC编码是(A)。

       A.1100010 B.1011010 C.1100011 D.1011110

       解答:

           (1)求得除数:1011

           (2)多项式补0:1100 000

           (3)模2运算:

               1011     1 1 0 0 0 0 0

                            1 0 1 1

                               1 1 1 0

                               1 0 1 1

                                  1 0 1 0

                                  1 0 1 1

                                           1 0

               得出余数为10,由于多项式的位数是4位,因此余数的位数是4-1=3,要在前面补一个0,因此最终的余数为010。

           (4)CRC编码:数据+余数(校验位)= 1100 010

1.4 体系结构_指令流水线

一、Flynn分类法

image.png

    英文备注:

       单指令流单数据流SISD:Single Instruct Single Data

       单指令流多数据流SISD:Single Instruct Multi Data

       多指令流单数据流SISD:Multi Instruct Single Data

       多指令流多数据流MIMD:Multi Instruct Multi Data

    1、指令流

       指令流对应的是控制部分,单指令流对应的控制部分只有一个,多指令流控制部分就有多个

    2、数据流

       数据流对应的是处理器,单数据流处理器只有一个,多数据流处理器就有多个

    3、主存模块

       主存模块因为它是存储的模块,它既可以存指令流也可以存数据流,所以指令流和数据流任意一个存在多个,主存模块就是多个

    指令流就是控制部分,多指令流代表有多个控制部分。而多个数据流代表多个处理器来处理数据。所以多指令流单数据流是不存在的,相当于只有一个人处理事情,但有多个人来指导工作,这样会产生紊乱,是不可能的。当然可以有一个领导多个人做事,但不能有多个领导只有一个人做事。

二、计算机指令

       计算机指令的组成:一条指令由操作码和操作数两部分组成,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。

       在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中。

       计算机指令执行过程:取指令——分析指令——执行指令三个步骤,首先将程序计数器PC中的指令地址取出,送入地址总线,CPU依据指令地址去内存中取出指令内容存入指令寄存器IR;而后由指令译码器进行分析,分析指令操作码;最后执行指令,取出指令执行所需的源操作数。

三、指令寻址方式

    1、指令寻址方式

       (1)顺序寻址方式

           当执行一段程序时,是一条指令接着一条指令地顺序执行。

       (2)跳跃寻址方式

           指下一条指令的地址码不是由程序计数器给出,而是由本条指令直接给出。程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须相应改变,以便及时跟踪新的指令地址。

    2、指令操作数的寻址方式

       (1)立即寻址方式:指令的地址码字段指出的不是地址,而是操作数本身

       (2)直接寻址方式:在指令的地址字段中直接指出操作数在主存中的地址

       (3)间接寻址方式:指令地址码字段所指向的存储单元中存储的是操作数的地址

       (4)寄存器寻址地址:指令中的地址码是寄存器的编号

       简单记忆:类似于堆和栈,栈是存堆的地址,而堆里有着各种各样的数据。立即寻址方式就是直接告诉你数据是什么,不用去堆里找;直接寻址方式就是告诉你堆在哪里,你去堆里找;间接寻址方式就是告诉你栈的地址,然后你根据栈的地址去找到堆,再去堆找数据。

四、指令系统(必考)

       CISC是复杂指令系统,兼容性强,指令繁多、长度可变,由微程序实现

       RISC是精简指令系统,指令少,使用频率接近,主要依靠硬件实现(通用寄存器、硬布线逻辑控制)

       具体区别如下:

image.png

五、指令流水线

       指令流水线原理:将指令分成不同段,每段由不同的部分去处理,因此可以产生叠加的效果,所有的部件去处理指令的不同段,如下图所示:

image.png

       未使用流水线:它在经历3次取指分析执行的步骤,需要耗费9个数量单位的时间。

       使用流水线:它可以叠加,第一个指令取指完毕之后进行下一步的分析和执行,取指就空闲出来,它就可以马上进行第二指令的取指。分析和执行的原理跟取指一样,一空闲就立即进行下一个操作。

六、流水线相关计算

       流水线周期:指令分成不同执行段,其中执行时间最长的段为流水线周期

       流水线执行时间:1条指令总执行时间 +(总指令条数 - 1)* 流水线周期

       流水线吞吐率:总指令条数 / 流水线执行时间

       流水线加速比:不使用流水线总执行时间 / 使用流水线总执行时间

       超标量流水线技术:常规流水线是度为1的,即每个流水线阶段只执行一个部分,当度大于1时,就是超标量技术,当度为3时,相当于3条流水线并行执行,即取指、分析、执行每个阶段都同时处理3条指令,因此,当题目提到度的概念时,计算时需要将:指令条数 = 指令条数 / 度。然后再套流水线执行时间的公式。

image.png

       度为3,相当于有3个上述图在并行执行。

七、历年真题

    1、Flynn分类法根据计算机在执行程序的过程中(A)的不同组合,将计算机分为4类。当前主流的多核计算机属于(D)计算机。

       A.指令流和数据流 B.数据流和控制流 C.指令流和控制流 D.数据流和总线带宽

       A.SISD B.SIMD C.MISD D.MIMD

    2、以下关于复杂指令集计算机(Complex Instruction Set Computer, CISC)的叙述中,正确的是(D)。

       A.只设置使用频率高的一些简单指令,不同指令执行时间差别很小

       B.CPU中设置大量寄存器,利用率低

       C.常采用执行速度更快的组合逻辑实现控制器

       D.指令长度不固定,指令格式和寻址方式多

       分析:A的简单指令和时间差别很小错误;B设置大量寄存器的是精简指令系统;C复杂指令系统的实现方式是微程序。

    3、流水线的吞吐率是指流水线在单位时间里所完成的任务数或输出的结果数。设某流水线有5段,有1段的时间为2ns,另外4段的每段时间为1ns,利用此流水线完成100个任务的吞吐率约为(B)个/s。

       A.500 * 10^6 B.490 * 10^6 C.250 * 10^6 D.167 * 10^6

       分析:

            (1)流水线执行时间

                 流水线执行时间 = 1条指令总执行时间 +(总指令条数 - 1)* 流水线周期

                 1条指令总执行时间是2 + 4 * 1 = 6ns;总指令条数是100;流水线周期是执行时间最长的段,所以流水线周期为2ns;流水线执行时间 = (2 + 4) + (100 - 1) * 2 = 204ns

            (2)流水线吞吐率

                 流水线吞吐率 = 总指令条数 / 流水线执行时间

                 总指令条数是100;流水线执行时间是204;流水线吞吐率 = 100 / 204ns

            (3)单位转换

                 ns是纳秒的意思,题目问的是s,1ns = 1 * 10^-9s

                 流水线吞吐率 = 100 / (204 * 10^-9) = 490 * 10^6

    4、流水线技术是通过并行硬件来提高系统性能的常用方法。对于一个k段流水线,假设其各段的执行时间约相等(设为t),输入到流水线中的任务是连续的理想情况下,完成n个连续任务需要的总时间为(B)。若某流水线浮点加法运算器分为5段,所需要的时间分别是6ns、7ns、8ns、9ns和6ns,则其最大加速比为(A)。

       A.nkt B.(k+n-1)t C.(n-k)kt D.(k+n+1)t

       A.4 B.5 C.6 D.7

       分析:

            1、n个连续任务需要的总时间(流水线执行时间)

                 流水线执行时间 = 1条指令总执行时间 +(总指令条数 - 1)* 流水线周期

                 1条指令总执行时间是kt;总指令条数是n;流水线周期是执行时间最长的段,所以流水线周期为t;流水线执行时间 = kt + (n - 1) * t = kt + nt - t = (k+n-1)t

            2、最大加速比

                 (1)流水线执行时间

                     流水线执行时间 = 1条指令总执行时间 +(总指令条数 - 1)* 流水线周期

                     1条指令总执行时间是6+7+8+9+6=36;总指令条数没有说明,设为n;流水线周期是执行时间最长的段,所以流水线周期为9;流水线执行时间 = 36 + (n - 1) * 9 = 9n + 27

                 (2)流水线吞吐率

                     流水线加速比:不使用流水线总执行时间 / 使用流水线总执行时间

                     不使用流水线总执行时间是36n,使用流水线总执行时间是9n + 27,所以流水线加速比 = 36n / (9n + 27)。由于题目问的是最大加速比,也就是n是无穷大,分母27可以忽略,因此最大加速比 = 36n / 9n = 4

    5、假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为15us,由缓冲区送至用户区的时间是5us,在用户区内系统对每块数据的处理时间为1us,若用户需要将大小为10个磁盘块的Docl文件逐块从磁盘读入缓冲区,并送至用户区进行处理,那么采用单缓冲区需要花费的时间为(D)us;采用双缓冲区需要花费的时间为(C)us。

       A.150 B.151 C.156 D.201

       A.150 B.151 C.156 D.201

       分析:

            题目把操作分成了3段:盘块读入缓冲区为第1段;缓冲区送至用户区为第2段;用户区处理每块数据为第3段。这实际上就是流水线的3段,但在单缓冲区的情况下,这个流水线并不是3段。这3段是针对双缓冲区而言的。

            1、单缓冲区

                 由于前两段都用到缓冲区,它会导致第1段和第2段不同的任务之间是不能并行的,因为它只有一个缓冲区,所以在单缓冲区里,第1段和第2段可以合并成一段,那就变成了20us。然后再和第3段形成流水线。

                 1 2

                    1 2

                       1 2

                 流水线执行时间 = 1条指令总执行时间 +(总指令条数 - 1)* 流水线周期

                 1条指令总执行时间是(20 + 1)us;总指令条数是10;流水线周期是执行时间最长的段,所以流水线周期为20us;流水线执行时间 = (20 + 1) + (10 - 1) * 20 = 201us

            2、双缓冲区

                 由于前两段都用到缓冲区,如果是双缓冲区的话,不同的任务这两段可以并行。

                 1 2

                    1 2

                       1 2

                 流水线执行时间 = 1条指令总执行时间 +(总指令条数 - 1)* 流水线周期

                 1条指令总执行时间是(15 + 5 + 1)us;总指令条数是10;流水线周期是执行时间最长的段,所以流水线周期为15us;流水线执行时间 = (15 + 5 + 1) + (10 - 1) * 15 = 156us

1.5 存储系统

一、存储体系

    1、层次结构

image.png

       主存就相当于内存,联机磁盘存储器相当于装在电脑内部的固态硬盘,脱机光盘相当于电脑外部的移动硬盘、光盘或者U盘。

    2、分级存储

       计算机采用分级存储体系的主要目的是为了解决存储容量、成本和速度之间的矛盾问题。

       它从上往下排列,容量越来越大,而速度越来越慢。最上面的存储容量小速度快但同样也就越贵,技术难度也越高。而下面的存储速度较慢但容量可以随意扩展。

    3、两级存储:Cache-主存-辅存(虚拟存储体系)

二、局部性原理

    总的来说,在CPU运行时,所访问的数据会趋向于一个较小的局部空间地址内,包括下面两个方面:

    1、时间局部性原理

        如果一个数据项正在被访问,那么在近期它很可能会被再次访问,即在相邻的时间会访问同一个数据项

    2、空间局部性原理

        在最近的将来会用到的数据的地址和现在正在访问的数据地址很可能是相近的,即相邻的空间地址会被连续访问

三、高速缓存Cache

    高速缓存Cache用来存储当前最活跃的程序和数据,直接与CPU交互,位于CPU和主存之间,容量小,速度为内存的5-10倍,由半导体材料构成。其内容是主存内存的副本拷贝,对于程序员来说是透明的。

    Cache由控制部分和存储器组成,存储器存储数据,控制部分判断CPU要访问的数据是否在Cache中,在则命中,不在则依据一定的算法从主存中替换。

    Cache在CPU寄存器和主存之间,所以它的速度和容量都处于它们俩之间。Cache比主存小,主存有几G而Cache只有几M,所以Cache的内容是主存最活跃那部分的程序和内容的拷贝。CPU会先从Cache取数据,找不到再去主存取。

    Cache存的是主存的副本,而CPU需要的是主存的地址,而不是Cache的地址。在CPU工作的时候,它会把主存单元的地址给到Cache,因为它本意是从主存里取数据的。而Cache接收到主存单元地址之后,就要从自己的存储器找到对应的信息。这里就涉及到主存地址与Cache地址的映射。

    1、地址映射

        在CPU工作时,送出的是主存单元的地址,而应从Cache存储器中读/写信息。这就需要将主存地址转换为Cache存储器地址,这种地址的转换称为地址映像,由硬件自动完成映射,分为下列三种方法:

        (1)直接映射

image.png

            将Cache存储器等分成块,主存先分区,每个区的大小就是一个Cache,假设Cache有3M,那么主存一个区就是3M,然后分成对应的块数。主存中的块与Cache中的块的对应关系是固定的,也即二者块号相同才能命中,只要块号相同即可,不分区。地址变换简单但不灵活,容易造成资源浪费。

            假设两次读取的都是第0块的内容,那它就只能等第一次的0块数据用完了才能继续第二次,其它Cache的块即使空闲也不能使用。

    2、全相联映射

image.png

        直接映射那里将一个Cache分成一个区,每个区里有Cache对应的块。在全相联映射每一块的划分跟直接映射是一致的,划分完之后把区去掉,把所有的块的编号连在一起而已。

        在对应关系上,主存中任意一块都与Cache中任意一块对应。因此可以随意调入Cache任意位置,但地址变换复杂,速度较慢。因为主存可以随意调入Cache任意块,只有当Cache满了才会发生块冲突,是最不容易发生块冲突的映像方式。

    3、组组相连映射

        前面两种方式的结合,将Cache存储器先分块再分组,主存也同样先分块再分组,组间采用直接映像,即主存中组号与Cache中组号相同的组才能命中,但是组内全相联映像,也即组号相同的两个组内的所有块可以任意调换。

四、历年真题

    1、CPU访问存储器时,被访问数据一般聚集在一个较小的连续存储区域中。若一个存储单元已被访问,则其邻近的存储单元有可能还要被访问,该特性被称为()(2019)

       A.数据局部性 B.指令局部性 C.空间局部性 D.时间局部性

       答案:C

       解析:

          空间局部性:一旦程序访问了某个存储单元,在不久的将来,其附近的存储单元也最有可能被访问

          时间局部性:如果程序中的某条指令一旦被执行,则不久的将来该指令可能被再次执行

    2、按照Cache地址映射的块冲突概率,从高到低排列的是()。

       A.全相联映像->直接映像->组相联映像

       B.直接映像->组相联映像->全相联映像

       C.组相联映像->全相联映像->直接映像

       D.直接映像->全相联映像->组相联映像

       答案:B

    3、使用Cache改善系统性能的依据是程序的局部性原理。程序中大部分指令是()的。设某计算机主存的读/写时间为100ns,有一条指令和数据合一的Cache,已知该Cache的读/写时间为10ns,取指令的命中率为98%,取数的命中率为95%。在执行某类程序时,约有1/5指令需要额外存/取一个操作数。假设指令流水线在任何时候都不阻塞,则设置Cache后,每条指令的平均读取时间约为()ns。

       A.顺序存储、顺序执行

       B.随机存储、顺序执行

       C.顺序存储、随机执行

       D.随机存储、随机执行

       A.12.3 B.14.7 C.23.4 D.26.3

       答案:A B

       解析:指令分为读指令和读操作数,把这两个时间相加。

           取指令的命中弄率为98%,意思是98%的概率是从Cache里取的,有2%在主存取,所以读指令的时间为(98% * 10 + 2% * 100) 。

           同理取数的命中率为95%,意思是95%的概率是从Cache里取的,有5%在主存取,所以读操作数的时间为(95% * 10 + 5% * 100)。

           约有1/5指令需要额外存/取一个操作数,意思是它不是每条指令都有操作数,也就是说只有20%的指令需要取操作数。所以最终读操作数的时间为(95% * 10 + 5% * 100) * 20%。

           每条指令的平均读取时间:(98% * 10 + 2% * 100) + (95% * 10 + 5% * 100) * 20% = 11.8 + 2.9 = 14.7

    4、地址编号从80000H到BFFFFH且按字节编址的内存容量为()KB,若用16K * 4bit的存储器芯片构成该内存,共需()片。

       A.128 B.256 C.512 D.1024

       A.8 B.16 C.32 D.64