计算机组成原理入门

  • 计算机系统具有数据处理数据存储数据传送三种基本功能。
  • 计算机系统由硬件(hardware)和软件(software)两部分组成,硬件是物理装置的总称。软件包括运行在硬件上的程序和数据以及相关的文档。程序(program)是指挥计算机如何操作的一个指令序列,也即程序由指令组成,而指令(instruction)则是计算机硬件能够直接理解并执行的最基本操作,数据(data)是指令操作的对象。

1,计算机硬件的基本组成

  • 冯·诺依曼领导的小组发表了 “ 存储程序stored—program)”方式的电子数字计算机方案EDVAC
  • ”存储程序“方式的基本思想是:必须将事先编好的程序和原始数据送入主存后才能执行程序,一旦程序被启动执行,计算机能在不需操作人员干预下自动完成逐条指令取出和执行任务。

1.1,冯·诺依曼结构基本思想

  • 冯·诺依曼机构计算机的基本思想主要包括以下几个方面
    1. 采用”存储程序“工作方式。
    2. 计算机由运算器,控制器,存储器,输入设备和输出设备五个基本部件组成。
    3. 存储器不仅能存放数据,而且也能存放指令,形式上数据和指令没有区别,但计算机应能区分它们;控制器应能自动执行指令;运算器应能进行加,减,乘,除4种基本算术运算,并且也能惊醒逻辑运算;操作人员可以通过输入/输出设备使用计算机。
    4. 计算机内部以二进制形式表示指令和数据;每条指令由操作码和地址码两部分组成,操作码指出操作类型,地址码指出操作数的地址;由一串指令组成程序。
      在这里插入图片描述

1.2,现代计算机的基本组成

  • 中央处理器Central Processing UnitCPU)简称处理器CPU是整个计算机的核心部件,主要用于指令的执行。CPU主要包括两个基本部分:数据通路控制器
    • 数据通路datapath)是指指令执行过程中数据所流经的部件,其中包括各类运算部件。最重要的运算部件是算术逻辑部件Arithmetic Logic Unit,简称ALU),可用来进行基本的算术和逻辑运算。ALU中最基本的部件是加法器,所有算术运算都可以基于加法运算和逻辑运算来实现。
    • 控制器controller)用来对指令进行译码,生成相应的控制信号,以控制数据通路进行特定的操作。
  • 存储器分为内存外存
    • 内存包括主存储器main memory,简称主存)和高速缓冲存储器cache)。
    • 外存包括辅助存储器和海量后备存储器。通常把系统运行时直接和主存交换信息的存储器称为辅助存储器,简称辅存。目前主要的辅助存储器是磁盘存储器和固态硬盘,而磁带存储器和光盘,主要用于信息的备份和脱机存档,因此它们被用作海量后备存储器
  • 外部设备简称为外设,也称为I/O设备输入/输出Input/Output)设备。
    • 每个外设都需要相应的控制逻辑,通常将控制外部设备工作的控制逻辑称为I/O控制器或I/O适配器。外设通过I/O控制器或I/O适配器连接到主机上,I/O控制器或I/O适配器统称为设备控制器
  • 总线bus)是传输信息的通路,用于在部件之间传输信息,CPU主存I/O模块通过总线互连。

2,计算机软件概述

  • 计算机的工作由存储在其内部的程序控制,这是冯·诺依曼结构计算机的”存储程序“工作方式的重要特征,因此程序或者软件质量的好坏将大大影响计算机性能的发挥。
  • 根据软件的用途,一般将软件分成系统软件应用软件两大类。
    • 系统软件system software)包括为有效,安全地使用和管理计算机以及为开发和运行应用软件而提供地各种软件,介于计算机硬件与应用程序之间,它与具体应用关系不大。系统软件包括操作系统语言处理系统数据库管理系统各类实用程序
    • 应用软件application software)指专门为数据处理,科学计算,事务管理,多媒体处理,工程设计以及过程控制等应用所编写的各类程序。

3,计算机系统的层次结构

  • 计算机系统是一个层次结构系统,通过向上层用户提供一个抽象的简洁接口而将较低层次的实现细节隐藏起来。计算机解决应用问题的过程就是不同抽象层进行转换的过程。

3.1,计算机系统抽象层的转换

在这里插入图片描述

  • 希望计算机完成或解决的任何一个应用最开始形成时是用自然语言描述的,但是,计算机硬件只能理解机器语言,而要将一个自然语言描述的应用问题转换成机器语言程序,需要经过多个抽象层的转换。
    1. 将应用问题转化为算法algorithm)描述,使得应用问题的求解变成流程化的清晰步骤,并能确保步骤是有限的。任何一个问题可能有多个求解算法,需要进行算法分析以确定哪种算法在时间和空间上能够得到优化。
    2. 将算法转换为用编程语言描述的程序program),这个转换通常是程序员手工进行的。编程语言与自然语言不同,它有严格的执行顺序,不存在二义性,能够唯一地确定计算机执行指令地顺序。从抽象层次来分,编程语言programming language)可以分为高级语言high-level language)和低级语言low-level language)两类。
      • 高级语言和底层计算机结构关联不大,是机器无关语言,大部分编程语言都是高级语言
      • 低级语言则和运行计算机底层结构密切相关,通常称为机器级语言machine-level language)。机器语言machine language)和汇编语言assembly language)都是机器级语言
        • 机器语言就是用二进制进行编码地机器指令,每条机器指令都是一个0/1序列,因此,机器语言程序地可读性很差,不易记忆,给程序员地编写和阅读带来极大地困难。
        • 在机器语言地基础上,引入了一种机器语言的符号表示语言,通过用简短的英文符号和二进制代码建立对应关系,方便程序员编写和阅读机器语言程序,被称为汇编语言
    3. 需要将高级语言程序转换成计算机能够理解的机器语言程序,我们把进行这种对程序进行编辑,转换并链接的软件统称为语言处理系统。程序员借助语言处理系统来开发软件。任何一个语言处理系统中,都包含一个翻译程序translator),它能把一种编程语言表示的程序转换成等价的另一种编程语言程序。被翻译的语言和程序分别称为源语言源程序,翻译生成的语言和程序分别称为目标语言目标程序。翻译程序有以下三种。
      • 汇编程序assembler):也称汇编器,用来将汇编语言源程序翻译成机器语言目标程序。
      • 解释程序interpreter):也称解释器,用来将源程序中的语句按其执行顺序逐条用子程序进行解释,并最终转换成机器指令执行。
      • 编译程序compiler):也称编译器,用来将高级语言源程序翻译成汇编语言或机器语言目标程序。
    4. 所有的语言处理系统都必须在操作系统提供的计算机环境中运行,操作系统是对计算机底层结构和计算机硬件的一种抽象,这种抽象构成了一台可以让程序员使用的虚拟机virtual machine)。
    5. 从应用问题到机器语言程序的每次转换所涉及的概念都是属于软件的范畴,而机器语言程序所运行的计算机硬件和软件之间需要一个”桥梁“,这个在软件和硬件之间的界面就是指令集体系结构Instruction Set ArchitectureISA),简称体系结构系统结构architecture),它是软件和硬件之间接口的一个完整定义。ISA定义了一台计算机可以执行的所有指令的集合,每条指令规定了计算机执行什么操作,以及所处理的操作数存放的地址空间和操作数类型。ISA规定的内容包括:数据类型及格式,指令格式,寻址方式和可访问地址空间大小,程序可访问的寄存器个数,位数和编号,控制寄存器的定义,I/O空间的编址方式,中断结构,机器工作状态的定义和切换,输入/输出结构和数据传送方式,存储保护方式等。
    6. ISA是对指令系统的一种规定或结构规范,具体实现的组织organization)称为微体系结构microarchitectute),简称微架构
    7. 微体系结构最终是由逻辑电路logic circuit)实现的,当然,微架构中的一个功能部件可以用不同的逻辑来实现,用不同的逻辑实现方式得到的性能和成本有差异。
    8. 最后,每个基本的逻辑电路都是按照特定的器件技术device technology)实现的。

4,程序开发与执行过程

  • 程序的开发和执行涉及计算机系统的各个不同层面,因而计算机系统层次结构的思想体现在程序开发和执行过程的各个环节中。因为编写程序并让其在计算机上执行,是为了解决最终用户的应用问题的,因而,程序有时被称为用户程序user program)或应用程序application program)。

4.1,从源程序到可执行目标程序

  • //hello.c
    #include <stdio.h>
    
    int main()
    {
        printf("hello, world\n");
    }
    
  • 通过程序编辑软件得到hello.c文件。hello.c在计算机中以ASCII字符方式存放,如下。通常把用ASCII码字符或汉字字符表示的文件称为文本文件text file),源程序文件都是文本文件,是可显示和可读的。

  • # 	 i	 n	 c	 l	 u	 d	 e	<sp>	<	 s	 t	 d	 i	 o	 .
    35	105	110	 99	108	117	100	101	 32	    60  115 116	100	105 111	46
    h	>	\n	\n	 i 	 n	 t	<sp>	m	a	i	n	(	)	\n	 {
    104	62	10	10	105	110	116	 32	   109  97  105 110 40 41   10  123
    \n	<sp>	<sp>	<sp>	<sp>	 p	 r 	 i	 n	 t	 f	(	"	 h	 e	 l
    10	 32		 32		 32	     32		112	114	105	110	116	102	40	34	104	101	108
     l	 o	 ,	<sp>	 w	 o	 r	 l	 d	 \	 n	 "	 )	 ;	\n	 }
    108	111	44   32     119	111	114	108	100	92	110	34	41	59	10	125
    
  • hello.c进行预处理,编译,汇编和链接,最终生成可执行目标文件。

在这里插入图片描述

  • 预处理阶段预处理程序cpp)对源程序中以字符“#”开头的命令进行处理,如,将**#include命令后面的.h文件内容嵌入到源程序文件中。预处理程序的输出结果还是一个源程序,以.i**为扩展名。
  • 编译阶段编译阶段ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序文件,以**.s**为扩展名。
  • 汇编阶段汇编程序as)对汇编语言源程序进行汇编,生成一个可重定位目标文件relocatable object file),以**.o为扩展名,它是一种二进制文件**(binary file),因为其中的代码已经是机器指令,数据以及其他信息也都是用二进制表示的,所以它是不可读的,也即打开显示出来的是乱码。
  • 链接阶段链接程序ld)将多个可重定位目标文件和标准库函数目标模块合并成为一个可执行目标文件executable object file),可执行目标文件简称为可执行文件。
  • 最终生成的可执行文件被保存在磁盘上,可通过某种方式启动一个磁盘上的可执行文件运行。如双击。

4.2,冯·诺依曼结构模型机

  • 算术逻辑部件ALU)用于进行算术运算和逻辑运算。
  • 通用寄存器组General Purpose Registers,简称GPRs)由若干个通用寄存器组成,每个通用寄存器有一个编号,用于存放操作数或操作数的地址,通过指令可以指定哪个编号的寄存器中的数据作为ALU运算的操作数。
  • 标志寄存器用来存放ALU运算得到的一些标志信息,如结果是否为0,有没有产生进位或借位,结果是否为负数等。
  • 程序计数器Program Counter,简称PC)用来存放将要执行的下一条指令的地址。
  • 指令寄存器Instruction Register,简称IR)用于存放从主存储器读出的指令,指令中的操作码被送到控制器进行译码,以生成控制信号。
  • 主存储器用来存储指令和操作数。每个存储单元有一个编号,称为主存地址CPU可以读取主存储器中的指令和操作数,也可以将运算结果写入主存储器。
  • CPU和主存储器之间通过一组总线相连,总线中有地址控制数据三组信号线。
  • 存储器地址寄存器Memory Address Register,简称MAR)用于存放将要送到主存储器的主存地址,MAR中的地址信息被直接送到地址线上;控制线中有读/写信号线,指出数据是从CPU写入主存储器还是从主存储器读出到CPU
  • 存储器数据寄存器Memory Data Register,简称MDR)用来存放CPU与主存储器交换的数据,根据是读操作还是写操作来控制将MDR中的数据直接送到数据线上还是将数据线上的数据接收到MDR中。当CPU需要读/写主存储器时,CPU将所访问的指令或操作数所在的主存地址送到地址线上,并将“读命令”或者“写命令”信号送到控制线上。
  • CPU和主存构成主机,主机外部的输入设备和输出设备通过相应的方式与主机相连。

在这里插入图片描述

4.3,程序与指令的关系

  • 可执行目标文件中包括机器代码段,可执行文件的执行实际上是所包含的机器代码段执行的过程。机器代码段由一条一条机器指令构成。程序被启动后,CPU通过逐条执行程序中的指令来实现程序的功能。
  • 指令instruction)就是用01表示的一串0/1序列,用来指示CPU完成一个特定的基本操作。如:
    • 取数指令load instruction)从存储单元中取出一个数据存放到CPU内的通用寄存器中。
    • 存数指令store instruction)将CPU中通用寄存器的内容写入一个存储单元;
    • ALU指令ALU instruction)将两个通用寄存器内容进行某种算术或逻辑运算后再送入一个通用寄存器中。
  • 指令通常被划分为若干个字段,有操作码字段,地址码字段等。操作码字段指出指令的操作类型,如加,减,传送,跳转等;地址码字段指出指令处理的操作数所在存储地址,如通用寄存器编号,内存单元地址等。

4.4,指令的执行过程

  • 第一步:根据PC取指令到IR
    • PC的内容送MARMAR中的内容直接送地址线,同时,控制器将“读命令”送读/写信号线,主存根据地址线上的地址和“读命令”信息,从指定存储单元开始读出指令,并送到数据线上,MDR从数据线接收指令信息,并传送到指令寄存器IR中。
  • 第二步:指令译码并送出控制信号
    • 控制器根据IR中指令的操作码对指令进行译码,生成相应的控制信号,然后将控制信号送到不同的执行部件。
  • 第三步:取操作数
    • 若是ALU运算类指令,则根据IR中指令指定的寄存器编号选择两个或一个寄存器中的内容作为操作数,送到ALU的输入端。
  • 第四步:指令执行
    • 若是ALU运算类指令,则ALU在控制信号的控制下,进行相应的运算,并生成运算结果和相应的标志信息;若是取数/存数指令,则主存在读/写控制信号的控制下,对地址线指定的存储单元进行读/写。
  • 第五步:回写结果
    • ALU运算的结果写入指定编号的寄存器或指定的主存单元中。
  • 为了能自动执行程序中的指令,CPU必须能够自动得到下一条指令的地址并送PC。对于定长指令字系统,即每条指令长度都一样的指令系统,只要每次都将PC自动加上指令长度即可,通常在主存取指令时修改PC;对于变长指令字系统,则需要对指令进行译码,根据不同的情况来使PC加上不同的值。不管是定长指令字系统还是变长指令字系统,当一条指令执行结束时,PC中一定是下一条指令的地址,因此,继续按照上述5步骤,CPU就可以按照程序规定的顺序自动地执行程序中的所有指令。
  • CPU执行一条指令的过程可被分成若干步骤。通常把取一条指令并执行的时间称为指令周期。每条指令的指令周期中都会包含不同的操作,这些操作要有相应的控制信号进行控制,这些控制信号何时发出,作用时间多长,都要有相应的定时信号进行同步,这个同步信号就是CPU主脉冲信号,也称CPU时钟信号clock signal),其宽度称为CPU时钟周期。每条指令的执行由时钟信号进行定时,一个指令周期包含一个或多个时钟周期。

5,计算机系统性能评价

5.1,计算机性能的定义

  • 吞吐率throughput)和响应时间response time)是考量一个计算机系统性能的两个基本指标。
    • 吞吐率表示在单位时间内所完成的工作量。在有些场合下,吞吐率也被称为带宽bandwidth)。
    • 响应时间也称为执行时间execution time)或等待时间latency),是指从作业提交开始到作业完成所用的时间。
      • 通常一个程序的响应时间除了在程序包含的指令在CPU上执行所用的时间外,还包括磁盘访问时间,存储器访问时间,输入输出时间等。

5.2,用CPU执行时间进行性能评估

  • 如果不考虑应用背景而直接比较计算机性能,则大都用执行时间来衡量。因此,从执行时间来考虑,完成同样工作量所需时间最短的那台计算机性能是最好的。

  • 通常把用户感觉到的执行时间分成两个部分:CPU时间其他时间

    • CPU时间CPU用于程序执行的时间,它又包括两个部分:
      1. 用户CPU时间,指真正用于运行用户程序代码的时间。
      2. 系统CPU时间,指为了执行用户程序而需要CPU运行操作系统程序的时间。
    • 其他时间指等待I/O操作完成的时间或CPU用于执行其他用户程序的时间。
  • 计算机系统的性能评价主要考虑的是CPU性能。系统性能和CPU性能不等价,两者有一些区别。

    • 系统性能是指系统的响应时间,它与CPU外的其他部分也有关系;
    • CPU性能是指用户CPU时间它只包含CPU运行用户程序代码的时间。
  • 在对用户CPU时间进行计算时需要用到以下几个重要的概念和指标。

    • 时钟周期
      • 计算机执行一条指令的过程被分成若干步骤,由每一步中相应的操作来完成指令功能。每一步操作都要有相应的控制信号进行控制,用于对控制信号进行定时的同步信号就是CPU的时钟信号,其宽度为一个时钟周期(clock cycle,tick,clock tick,clock)。
    • 时钟频率
      • CPU的主频就是CPU时钟信号的时钟频率clock rate),是CPU时钟周期的倒数。时钟频率的单位通常为MHzGHz
      • 主频为1.0MHz表示每秒钟发生 1 0 6 10^6 106个时钟信号,因此时钟周期为 1 0 6 s 10^6s 106s(秒)= 1 μ s 1μs 1μs(微秒)。
      • 主频为1.0GHz表示每秒钟发生 1 0 9 10^9 109个时钟信号,因此时钟周期为 1 0 9 s 10^9s 109s(秒)= 1 n s 1ns 1ns(纳秒)。
    • CPI
      • CPIcycles per instruction)表示执行一条指令所需的时钟周期数。由于不同指令的功能不同,因而执行不同指令所需的时钟周期数也不同,因此,对于一条特定指令而言,其CPI指执行该条指令所需的时钟周期数,此时CPI是一个确定的值;对于一个程序或一台机器来说,其CPI指该程序或该机器指令集中的所有指令执行所需的平均时钟周期数,此时,CPI是一个平均值,通常称为综合CPI
  • 已知上述参数或指标,可以通过以下公式来计算用户程序的CPU时间。

    • CPU执行时间=程序所含时钟周期数➗时钟频率 = 程序所含时钟周期数✖时钟周期。
    • 公式中,程序所含时钟周期数可由程序所含指令条数和相应的CPI求得。
  • 如果已知程序总的指令条数和综合CPI,则可用如下公式计算程序的总时钟周期数。

    • 程序总时钟周期数=程序所含指令条数✖CPI。
  • 如果已知程序中共有 n n n种不同类型的指令,第 i i i种指令的条数和CPI分别为 C i C_i Ci C P I i CPI_i CPIi

    • 程序总时钟周期数= ∑ i = 1 n ( C P I i ∗ C i ) \sum_{i=1}^{n}(CPI_i*C_i) i=1n(CPIiCi)
  • 程序的综合CPI也可由以下公式求得,其中, F i F_i Fi表示第 i i i种指令在程序中所占的比例。

    • C P I = ∑ i = 1 n ( C P I i ∗ F i ) CPI=\sum_{i=1}^{n}(CPI_i*F_i) CPI=i=1n(CPIiFi)=程序总时钟周期数➗程序所含指令条数
  • 若已知程序综合CPI和指令条数,则可用以下公式计算CPU时间。

    • CPU执行时间=CPI✖程序总指令条数✖时钟周期

5.3,用执行速度进行性能评估

  • 指令速度所用的计量单位为MIPSMillion Instructions Per Second),其含义是平均每秒钟执行多少百万条指令。
  • 选取一组指令组合,使得得到的平均CPI最小,由此得到的MIPS就是峰值MIPSPeak MIPS)。有些制造商经常将峰值MIPS直接当作MIPS,而实际上的性能要比标志的性能差。
  • 相对MIPSRelative MIPS)是根据某个公认的参考机型来定义的相应MIPS值,其值的含义是被测机型相对于参考机型MIPS的多少倍。
  • MIPS反映了机器执行定点指令的速度,但是,用MIPS来对不同的机器进行性能比较有时是不准确或不客观的。因为不同机器的指令集不同,而且指令的功能也不同,也许在机器M1上的某一条指令的功能,在机器M2上要用多条指令来完成,因此,同样的指令条数所完成的功能可能完全不同;另外,不同机器的CPI和时钟周期也不同,因而同一条指令在不同机器上所用的时间也不同。
  • 与定点指令运行速度MIPS相对应,用来表示浮点操作速度的指标是MFLOPSMillion FLOating-point operations Per Second),它表示每秒所执行的浮点运算有多少百万次,是基于所完成的操作次数而不是指令数来衡量的。类似的衡量浮点操作速度的指标还有GFLOPS( 1 0 9 10^9 109次/s),TFLOPS( 1 0 12 10^{12} 1012次/s)和PFLOPS( 1 0 15 10^{15} 1015次/s)等。

5.4,用基准程序进行性能评估

  • 基准程序benchmarks)是进行计算机性能评测的一种重要工具。基准程序是专门用来进行性能评价的一组程序,能够很好地反映机器在运行实际负载时的性能,可以通过在不同机器上运行相同的基准程序来比较在不同机器上的运行时间,从而评测其性能。
  • 基准程序是一个测试程序集,由一组程序组成。
  • 如果基准测试程序集中不同的程序在两台机器上测试得出的结论不同,则如何给出最终的评测结论呢?
    • 通常采用执行时间的算术平均值或集合平均值来综合评价机器的性能。如果考虑每个程序的使用频度而用加权平均的方式,结果会更准确。
  • 也可将执行时间进行归—化来得到被测试的机器相对于参考机器的性能。
    比较在不同机器上的运行时间,从而评测其性能。
  • 基准程序是一个测试程序集,由一组程序组成。
  • 如果基准测试程序集中不同的程序在两台机器上测试得出的结论不同,则如何给出最终的评测结论呢?
    • 通常采用执行时间的算术平均值或集合平均值来综合评价机器的性能。如果考虑每个程序的使用频度而用加权平均的方式,结果会更准确。
  • 也可将执行时间进行归—化来得到被测试的机器相对于参考机器的性能。
    • 执行时间的归—化值=参考机器上的执行时间➗被测机器上的执行时间
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值