计算机组成原理学习——第一章计算机系统概述(持续更新、修改)

前言:关于写此系列博客,仅仅只是为了记录一下我的计算机组成原理的学习进度以及便于复习,若有读者发现有不正确的地方请多多包涵并及时告诉我,谢谢。

所参考的资料为《计算机组成与系统结构》_第2版_袁春风。
(几乎为搬运,就是学习,但是本片几乎都是复习时手打,可能会有很多错别字)

全篇为博主的学习记录,若有转载请注明来源链接:
https://blog.csdn.net/wxy2635618879/article/details/104283786

第一章——计算机系统概述

1.1 计算机的发展历程

第一台通用电子计算机ENIAC的诞生是计算机技术的进步和划代的只要标志。

存储程序”方式的基本思想是:必须将事先编好的程序和原始数据送入主存后才能执行程序,一旦程序被启动执行,计算机能在不需要操作人员的干预下自动完成逐条取出指令并执行的任务。

1.2计算机系统的基本组成

1.2.1 计算机硬件

硬件技术已经经历了4个发展阶段,但是绝大部分计算机的基本组成仍然机有冯·诺依曼结构计算机的特征。
冯·诺依曼结构计算机的基本思想主要包括:

  1. 采用”存储程序“工作方式
  2. 计算机由运算器、控制器、存储器、输入和输出设备5个基本部件组成。
  3. 存储器不但能存放数据,还能存放指令,并且在形式上数据和指令没有区别,但计算机应能区分它们;控制器能控制指令的自动执行;运算器能进行加、减、乘、除四种基本算数运算,并且也能进行逻辑运算;操作人员能通过输入输出设备使用计算机。
  4. 计算机内部以二进制形式表示指令和数据;每一条指令由操作码和地址码俩部分组成,操作码指出操作类型,地址码指出操作数的地址;由一串指令组成程序。一个经典计算机系统的硬件组成

上述图片就是一个经典的计算机系统的硬件组成。
计算机硬件主要包括:中央处理器、存储器、I/O控制器、外部设备和各类总线。

  1. 中央处理器(CPU,简称处理器),是计算机的整个核心部件,主要用于指令的执行。CPU主要包括俩种基本部件:数据通路和控制器。数据通路主要包含算术逻辑部件和通用寄存器等,其功能是用来执行算术和逻辑运算等操作。控制器用来对指令进行译码,生成相应的控制信号,以控制数据通路进行正确的操作。
  2. 存储器分为内存和外存,内存包括主存储器(简称主存)和高速缓存。早期计算器没有高速缓存所以一般情况下,不区分内存主存外存包括辅助存储器海量后备存储器。通常把系统运行时直接和主存交换信息的存储器称为辅助存储器,简称辅存,目前主要的辅助存储器是磁盘存储器和固态硬盘。
  3. 外部设备简称为外设,也称为** I/O 设备**,外设通常由机械部分和电子部分组成,机械部分是外部设备本身,而电子部分则是控制外部设备的I/O 控制器或 I/O 适配器。 I/O 控制器或 I/O 适配器统称为设备控制器。例如,键盘接口、打印机适配器、显示控制器(简称显卡)、网络控制器(简称网卡)等都是一种设备控制器,属于一种 I/O 模块(也称 I/O 接口)。
  4. 总线(bus是传输信息的介质,用于在部件之间传输信息,CPU、主存和 I/O 模块通过总线互连, 在 CPU 和 I/O 模块中都内含相应的存储部件,即缓存器。
  5. ALU 是数据处理部件,用于执行数据的算术和逻辑运算,ALU 处理的数据来自寄存器堆;磁盘和主存是存储部件,分别用于存储长期保存信息和临时保存信息;各类总线以及总线接口部件、I/O 桥接器、I/O 扩展槽、I/O 控制器和显示适配器等都是互连部件,用于完成数据传送任务。所有这些部件的操作都通过 CPU 中的控制器对指令译码后送出的控制信号的控制来完成。

1.2.2 计算机软件

根据软件的用途,一般将软件分为系统软件应用软件两大类。

  1. 系统软件包括为有效、安全地使用和管理计算机以及为开发和运行应用软件而提供的各种软件,介于计算机硬件和应用软件之间。系统软件包括操作系统、语言处理系统(C语言编辑器)、数据库管理系统和各类实用程序(如备份)
  2. 应用软件是指专门为处理数据、科学计算、事务管理、多媒体处理、工程设计以及过程控制等应用所编写的各类程序。

1.3 计算机系统的层次结构

1.31 计算机系统抽象层的转化

如图是计算机系统层次转换示意图,描述了从最终用户希望计算机完成的应用(问题)到电子工程师使用器件完成基本电路设计的整个转换过程。
转换过程从上到下
计算机系统抽象层及其转换

  1. 首先,将应用问题转化为算法描述。
  2. 其次,将算法转换为编程语言描述的程序。
  3. 然后,将高级语言程序转换成计算机能够理解的机器语言程序。翻译程序有以下 3 类。
    (1)汇编程序(assembler):也称汇编器,用来将汇编语言源程序翻译成机器语言目标程序。
    (2)解释程序(interpreter):也称解释器,用来将源程序中的语句按其执行顺序逐条翻译成机器指令并立即执行。
    (3)编译程序(compiler):也称编译器,用来将高级语言源程序翻译成汇编语言或机器语言目标程序。

以上都是软件层次的转化,而计算机硬件和软件之间需要有一个桥梁,这个桥梁就是指令集体系结构ISA),简称体系结构或系统结构

**ISA **规定的内容包括:数据类型及格式,指令格式,寻址方式和可访问地址空间大小,程序可访问的寄存器个数、位数和编号,控制寄存器的定义,I/O 空间的编址方式,中断结构,机器工作状态的定义和切换,输入/输出结构和数据传送方式,存储保护方式等。因此,可以看出,指令集体系结构是指软件能感知到的部分,也称软件可见部分。

机器语言程序就是一个 ISA 规定的指令的序列。

1.3.2 计算机系统的不同用户

按照在计算机上完成任务的不同,可以把使用计算机的用户分为以下4类:最终用户、系统管理员、应用程序员和系统程序员。

  1. 最终用户,使用应用程序完成特定任务的计算机用户称为最终用户(end user)。通俗的讲就是使用计算机看电影、玩游戏、发邮件、聊天等功能的用户。
  2. 系统管理员,系统管理员(systemadministrator)是指利用操作系统等软件提供的功能对系统进行配置、管理和维护,以建立高效合理的系统环境供计算机用户使用的操作人员。
  3. 应用程序员,是指使用高级编程语言编制应用软件的程序员。应用程序员大多使用高级程序设计语言编写程序。应用程序员所看到的计算机系统除了计算机硬件、操作系统提供的应用编程接口(API)、人机交互界面和实用程序外,还包括相应的程序语言处理系统。
  4. 系统程序员,指设计和开发系统软件的程序员。

不同计算机用户工作所在的系统结构层如下图。
计算机系统的层次化结构
ISA 处于硬件和软件的交界面上,硬件所有的功能都由 ISA 集中体现,软件通 过 ISA 在计算机上执行。所以,ISA 是整个计算机系统中的核心部分
ISA 层下面是硬件部分,上面是软件部分。

1.4 程序开发与执行过程

1.4.1 从源程序到可执行程序

(1)预处理阶段;(2)编译阶段;(3)汇编阶段;(4)链接阶段;
例如下图hello.c源程序文件到可执行目标文件的转换过程

1.4.2 可执行文件的启动和执行

1.4.3 程序与指令的关系

1.4.4 指令的执行过程

如冯诺依曼结构模型机
冯诺依曼模型机
在此模型机中,CPU包含ALU、通用寄存器组(GPRs)、标志寄存器、控制器、指令寄存器(Instruction Register,IR)、程序计数器(Program Counter,PC)、存储器地址寄存器(Memory Address Register,MAR)和存储器数据寄存器(Memory Data Register,MDR)。
各个器件的作用如下:

  1. ALU,算术运算和逻辑运算;
  2. 寄存器组里面的内容,可以通过指令指定哪个编号里面的数据作为ALU运算的操作数;
  3. 标志寄存器用于存储从ALU运算得到的标志信息;
  4. IR用于存放从主存读出的指令;

启动程序执行,CPU按照一下步骤自动取出程序中的一条一条指令执行:

  1. 第一步:根据PC取指令到IR。将PC的内容送MAR,MAR中的内容直接送地址线,同时,控制器将
    读信号送读/写信号线,主存根据地址线上的地址和读信号,从指定存储单元开始读出指令,并送到数据
    线上,MDR从数据线接受指令信息,并传送到指令寄存器IR中。
  2. 第二步:指令译码并送出控制信号。控制器根据IR中指令的操作码,生成相应的控制信号,送到不
    同的执行部件。例如,若IR中的指令是ALU运算指令,则ALU操作控制信号被送到ALU的操作控制端,
    以控制ALU将要进行什么运算;若IR中的指令是取数或存数指令(lw或sw),则读/写控制信号被送到总
    线的控制线上。
  3. 第三步:取操作数。如果是ALU运算类指令,则根据IR中指令指定的寄存器编号选择两个或一个寄
    存器中的内容作为操作数,送到ALU的输入端。
  4. 第四步:指令执行。若是ALU运算类指令,则ALU在控制信号的控制下,进行相应的运算,并生成
    运算结果和相应的标志信息;若是取数/存数指令,则主存在读/写控制信号的控制下,对地址线指定的
    存储单元进行读/写。
  5. 第五步:回写结果。将ALU运算的结果写入指定编号的寄存器或指定的主存单元中。

1.5 计算机系统性能评价

1.5.1 计算机性能的定义

考量计算机系统性能的俩个基本指标是:吞吐率响应时间

  1. 吞吐率又被称为带宽,表示单位时间内所完成的工作量。
  2. 响应时间也成为执行时间等待时间,是指从作业提交开始到作业完成所用的时间。
    一个程序的响应时间除了程序所包含的指令在CPU上执行所用的时间外,还包括磁盘访问时间、存储器访问时间、输入输出操作所需时间以及操作系统运行这个程序所用的额外开销等。

不同场合下所关心的计算机的性能不同。有的关心吞吐率,如电影院要求单位时间内传输的数据量要大;有的关心执行时间,如银行要求处理的速度快等。

1.5.2 计算机性能的测试

操作系统在对处理器调度的时候,往往会让多个程序(或者说进程)轮流使用处理器,所以某个用户程序执行的过程中,可能还会有其他的用户程序和系统程序在执行,因此,用户感觉的某个程序的执行时间并不是真的执行时间。
通常把用户感觉的执行时间分为俩部分:CPU时间其他时间

  1. CPU时间又分为俩部分:
    (1)用户CPU时间,指真正用于运行用户程序的时间。
    (2)系统CPU时间,指为了执行用户程序而需要CPU运行操作系统的时间。

  2. 其他时间指等待I/O操作完成的时间或CPU用于其他用户程序的时间。

计算机系统的性能评价主要考虑的是CPU性能。而CPU性能指的是用户CPU时间,它只包含CPU运行用户程序代码的时间。

CPU性能计算的几个重要指标:

  1. 时钟周期
    计算机执行一条指令的过程被分成若干步骤和相应的动作来完成,每一步动作都要有相应的控制信号进行控制,这些控制信号何时发出、作用时间多长,都要有相应的定时信号进行同步。因此,CPU 必须能够产生同步的时钟定时信号,也就是 CPU 的主脉冲信号,其宽度称为时钟周期
  2. 时钟频率(主频)
    就是CPU中的主脉冲信号的时钟频率,是CPU时钟周期的倒数。
  3. CPI
    CPI表示执行一条指令所需的时钟周期数。不同的指令功能不同可能需要的时钟周期数也不同。
    对一条指令而言,CPI是指的该条指令所需要的时钟周期数,此时CPI是一个定值。
    对于一个程序或者一台机器而言,CPI是指该程序或该机器指令集中的所有指令执行所需要的平均时间。因此对一个程序或一台机器而言,CPI是一个平均值。

那么计算用户程序的CPU时间的公式为:
CPU执行时间 = 程序所含时钟周期数 / 时钟频率 = 程序所含时钟周期数 * 时钟周期

对于不同的情况程序所含时钟周期数的计算方法不一样:

  1. 如果已知程序的总指令条数和综合CPI,那么
    程序总时钟周期数 = 程序所含指令条数 * CPI

  2. 如果已知程序中共有n种不同类型的指令,第 i 种指令的条数CPI*分别为Ci 和 CPIi,那么
    程序总时钟周期数 = C P I i C i \sum {CPIi * Ci}

那么CPU执行时间 = 程序所含指令条数 * CPI * 时钟周期 = C P I i C i \sum {CPIi * Ci} * 时钟周期 。

例1.1假设某个频繁使用的程序 P 在机器 M1 上运行需要 10s,M1 的时钟频率为 2GHz。设计人员想开发一台与 M1 具有相同 ISA 的新机器 M2。采用新技术可使 M2 的时钟频率增加,但同时也会使 CPI增加。假定程序 P 在 M2 上的时钟周期数是在 M1 上的 1.5 倍,则 M2 的时钟频率至少达到多少才能使程序 P 在 M2 上的运行时间缩短为 6s?

**解:**程序P在M1上的时钟周期数为:CPU执行时间 X 时钟频率 = 10s X 2GHz = 2 X 1 0 10 10^{10} 。所以P 在机器 M2 上的时钟周期数为 1.5×2× 1 0 10 10^{10} = 3× 1 0 10 10^{10} 。要使程序 P 在 M2 上运行时间缩短到 6s, 则 M2 的时钟频率至少应为程序所含时钟周期数÷ CPU 执行时间= 30× 1 0 10 10^{10} / 6s = 5GHz。

例1.2 假设计算机 M 的指令集中包含 A、B、C 三类指令,其 CPI 分别为 1、2、4。某个程序 P 在 M 上被编译成两个不同的目标代码序列 P1 和 P2,P1 所含 A、B、C 三类指令的条数分别为 8、2、2,P2 所含 A、B、C 三类指令的条数分别为 2、5、3。请问:哪个代码序列指令条数少?哪个执行速度快?它们的 CPI 分别是多少?

解: P1指令数为12, P2指令数为10。
P1时钟周期数数为8x1 + 2x2 + 2x4 = 20。
P2的时钟周期数为2x1 + 5x2 + 3x4 = 24。
所以P1比P2快。
CPI = 总时钟周期数 ÷ 程序所含指令。
故P1 的 CPI = 20 ÷ 12 = 1.67; P2 的 CPI = 24 ÷ 10 = 2.4。

1.5.3 用指令执行速度进行性能评估

指令速度所用的计量单位时MIPS,其含义是平均每秒执行多少百万条指令。
设某指令 i 在程序种所占的比例为 wi, 执行时间为 ti, 那么等效指令的执行时间为:T = i = 1 n w i × t i \sum_{i=1}^n{wi × ti} (n为指令种数)。上式结果也是CPI。对指令的平均执行时间求倒数就能得到MIPS的值,即MIPS = 频率 / T。
行对MIPS是根据某个公认的参考机型来定义的相应 MIPS 值,指被测机型MIPS相对于参考机型MIPS的多少倍。
MIPS 反映了机器执行定点指令的速度,但是,用 MIPS 来对不同的机器进行性能比较有时是不准确或不客观的。因为不同机器的指令集不同,而且指令的功能也不同,也许在机器 M1 上某一条指令的功能,在机器 M2 上要用多条指令来完成,因此,同样的指令条数所完成的功能可能完全不同;另外,不同机器的 CPI 和时钟周期也不同,因而同一条指令在不同机器上所用的时间也不同。如下例子:
例1.3假定某程序 P 编译后生成的目标代码由 A、B、C、D 四类指令组成,它们在程序中所占的比例分别为 43%、21%、12%、24%,已知它们的 CPI 分别为 1、2、2、2。现重新对程序 P 进行编译优化,生成的新目标代码中 A 类指令条数减少了 50%,其他类指令的条数没有变。请回答下列问题。
(1)编译优化前后程序的 CPI 各是多少? (2)假定程序在一台主频为 50MHz 的计算机上运行,则优化前后的 MIPS 各是多少?

**解:**优化后 A 类指令的条数减少了 50%,因而各类指令所占比例分别计算如下。
A 类指令:21.5/(21.5+21+12+24) = 27%
B 类指令:21/(21.5+21+12+24) = 27%
C 类指令:12/(21.5+21+12+24) = 15%
D 类指令:24/(21.5+21+12+24) = 31%
(1)优化前后程序的 CPI 分别计算如下。
优化前:43%×1 + 21%×2 + 12%×2 + 24%×2 = 1.57
优化后:27%×1 + 27%×2 + 15%×2 + 31%×2 = 1.73
(2)优化前后程序的 MIPS 分别计算如下。
优化前:50M/1.57 = 31.8 MIPS
优化后:50M/1.73 = 28.9 MIPS
从 MIPS 数来看,优化后程序执行速度反而变慢了。这显然是错误的,因为优化后只减少了 A 类指令条数而其他指令数没变,所以程序执行时间一定减少了。从这个例子可以看出,用 MIPS 数来进行性能估计是不可靠的。

MFLOPS表示的是每秒执行的浮点运算有多少百万次,相应的还有GFLOPS( 1 0 9 {10^9} 次/秒)、TFLOPS( 1 0 12 10^{12} 次/秒)和 PFLOPS( 1 0 15 10^{15} 次/秒)等

1.5.4 用基准程序进行性能评估

基准程序(benchmarks)是进行计算机性能评测的一种重要工具。基准程序是专门用来进行性能评价的一组程序,能够很好地反映机器在运行实际负载时的性能,可以通过在不同机器上运行相同的基准程序来比较在不同机器上的运行时间,从而评测其性能。基准程序最好是用户经常使用的一些实际程序,或是某个应用领域的一些典型的简单程序。

发布了23 篇原创文章 · 获赞 6 · 访问量 821

猜你喜欢

转载自blog.csdn.net/wxy2635618879/article/details/104283786
今日推荐