第一章 计算机系统概述

【复习提示】

本章是组成原理的概述,考查时易针对有关概念或性能指标出选择题,也可能综合后续章节的内容出有关性能分析的综合题。掌握本章的基本概念,是学好后续章节的基础。部分知识点在初学时理解不深刻也无须担忧,相信随着后续章节的学习,一定会有更为深入的理解。本章中读者要重点掌握各个性能指标的计算,这部分内容在历年真题中出现的频率很高。

学习本章时,请读者思考以下问题:

    1. 计算机由哪几部分组成?以哪部分为中心?
    1. 主频高的 CPU 一定比主频低的 CPU 快吗?为什么?
    1. 翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特性是什么?
    1. 不同级别的语言编写的程序有什么区别?哪种语言编写的程序能被硬件直接执行?

请读者在学习本章的过程中寻找答案,本章末尾会给出参考答案。

1.1 计算机发展历程

1.1.1 计算机硬件的发展

计算机系统 = 硬件 + 软件

计算机硬件的发展:

  • 第一代计算机:(使用电子管),
  • 第二代计算机:(使用晶体管),
  • 第三代计算机:(使用较小规模的集成),
  • 第四代计算机:(使用较大规模的集成),

已经经历了 4 代,计算机的速度越来越快,并且体积变得越来越小。
发展趋势:更微型、多用途;更巨型、超高速

晶体管之父:肖克利(1956 年诺贝尔物理学奖得主)

1957 年,“八叛徒” 创立了仙童半导体
1959 年,仙童半导体发明了 “集成电路”
1968 年,摩尔离开仙童,创立 intel
1969 年,仙童销售部负责人桑德斯离开仙童,创立 AMD

摩尔定律,集成电路上的晶体管数量每 18 月就会翻一翻,所以每 18 月计算机的处理效率就会提高一倍。

1.1.2 计算机软件的发展

计算机软件技术的发展,促进计算机系统的发展。

计算机语言的发展经历了面向机器的机器语言和汇编语言、面向问题的高级语言。其中高级语言的发展真正促进了软件的发展,它经历了从科学计算和工程计算的 FORTRAN、结构化程序设计的 PASCAL面向对象的 C++ 适应网络环境的 Java

同时,直接影响计算机系统性能提升的各种系统软件也有了长足的发展,特别是操作系统,如 Windows、UNIX、 Linux 等。

1.1.3 计算机的分类与发展方向

可以分为:

  • 电子模拟计算机和电子数字计算机。

数字计算机又可以按照用途分为:

  • 专用计算机和通用计算机
  • 通用计算机又分为:巨型机、大型机、中型机、小型机、微型机和单片机 6 类。

按照指令和数据流可以分为:

  • 单指令流和单数据流系统(SISD),即传统的冯 · 诺依曼体系结构。
  • 单指令流和多数据流系统(SIMD),包括阵列处理器和向量处理器系统。
  • 多指令流和单数据流系统(MISD),这种计算机实际上不存在。
  • 多指令流和多数据流系统(MIMD),包括多处理器和计算机系统。

1.2 计算机系统层次结构

1.2.1 计算机系统的组成

计算机系统由硬件系统和软件系统共同构建起来

1.2.2 计算机硬件的基本组成

1. 早期的冯 · 诺依曼机

美籍匈牙利科学家冯 · 诺依曼最先提出 “程序存储” 的思想,并成功将其运用在计算机的设计之中,根据这一原理制造的计算机被称为冯 · 诺依曼结构计算机。由于他对现代计算机技术的突出贡献,因此冯 · 诺依曼又被称为“现代计算机之父”。

什么是存储程序原理?按此原理,计算机应具有哪几大功能?

“程序存储”:指令以代码的形式事先输入到计算机的主存储器中,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。即按地址访问并顺序执行指令

计算机按照此原理应具有 5 大功能:数据传送功能、数据存储功能、数据处理功能、操作控制功能、操作判断功能

  • 冯诺曼体系结构特点:
  1. 计算机硬件系统由五大部件组成 (存储器、运算器、控制器、输出设备、输入设备)
  2. 指令和数据以同等地位存于存储器,可按地址寻访
  3. 指令和数据用二进制表示
  4. 指令由操作码和地址码组成
  5. 存储程序
  6. 运算器为中心

早期的冯 · 诺依曼机以运算器为中心,且是单处理机,最根本的特征是采用 “存储程序” 原理,基本工作方式是控制流驱动方式!

2. 现代计算机的组织结构

3. 计算机的功能部件

主机:主存、运算器、控制器

五大部分:

  • <1> 输入设备,是指将外部信息以计算机能读懂的方式输入进来,如键盘,鼠标等

  • <2> 输出设备,就是将计算机处理的信息以人所能接受的方式输出出来,比如显示屏,打印机。

  • <3> 存储器,存储器分为 主存储器 (内存储器,CPU 能直接访问) 和 辅助存储器 (外存储器,协助主存储器记忆更多的信息,辅助存储器的信息需要导入到主存储器中,才可以被 CPU 访问)。
    主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式 (相联存储器既可以既可以按照地址寻址,又可以按照内容寻址,为了与传统存储器区别,又称为内容寻址的存储器!)
    主存储器是由地址寄存器 (MAR),数据寄存器 (MDR),存储体,时序控制逻辑,地址寄存器存放访存地址,经过地址译码后找到所选的存储单元。数据寄存器,是存储器与其他部件的中介,用于暂存要从存储器读或写的信息。时序控制逻辑用于产生存储器操作所需的各种时序信号。在现代 CPU,MAR 和 MDR 是在 CPU 中的。

  • <4> 运算器,是计算机的运算单元,用于算术运算和逻辑运算
    运算器的核心单元是算术逻辑单元 (ALU)

  • <5> 控制器,控制器是计算机的指挥中心,有其指挥各部件自动协调第进行工作,现代计算机将运算器和控制器集成到一个芯片上,合成为中央处理器,简称 CPU。有程序计数器 (PC)、指令寄存器(IR) 和控制单元(CU)。

一般将运算器和控制器集成到同一个芯片上,称为中央处理器 (CPU)。CPU 和主存储器共同构成主机,而除主机外的其他硬件装置 (外存、I/O 设备等) 统称为外部设备,简称外设。

图 1.4 所示为冯・诺依曼结构的模型机。CPU 包含 ALU、通用寄存器组 GPRs、标志寄存器、控制器、指令寄存器 IR、程序计数器 PC、存储器地址寄存器 MAR 和存储器数据寄存器 MDR。图中从控制器送出的虚线就是控制信号,可以控制如何修改 PC 以得到下一条指令的地址,可以控制 ALU 执行什么运算,可以控制主存是进行读操作还是写操作 (读 / 写控制信号)。

CPU 和主存之间通过一组总线相连,总线中有地址、控制和数据 3 组信号线。MAR 中的地址信息会直接送到地址线上,用于指向读 / 写操作的主存存储单元;控制线中有读 / 写信号线,指出数据是从 CPU 写入主存还是从主存读出到 CPU, 根据是读操作还是写操作来控制将 MDR 中的数据是直接送到数据线上还是将数据线上的数据接收到 MDR 中。

1.2.3 计算机软件的分类

1. 系统软件和应用软件

计算机软件,一般分为系统软件和应用软件

  • 系统软件包括 操作系统,数据库管理系统,语言处理系统 (比如编译器),分布式软件系统,网络软件系统,标准库系统,服务性系统 (比如连接程序)。

  • 应用软件包括各种科学计算类程序,工程设计类程序,数据统计与处理程序。

注意:数据库管理系统和数据库系统是有区别的。数据库管理系统是系统软件。而数据库系统一般是由数据库,数据库管理系统,数据库管理员和应用系统构成。所以只能说它里面有系统软件,但并不能说它为系统软件。

2. 三个级别的语言

    1. 机器语言。又称二进制代码语言,需要编程人员记忆每条指令的二进制编码。机器语言是计算机唯一可以直接识别和执行的语言。
    1. 汇编语言。汇编语言用英文单词或其缩写代替二进制的指令代码,更容易为人们记忆和理解。使用汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为计算机的机器语言后,才能在计算机的硬件系统上执行。
    1. 高级语言。高级语言 (如 C、C++、Java 等) 是为方便程序设计人员写出解决问题的处理方案和解题过程的程序。通常高级语言需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序,或直接由高级语言程序翻译成机器语言程序。

由高级语言转换到汇编语言的过程叫做编译,由汇编语言转换到机器语言的过程叫做汇编,边翻译边执行的叫做解析。

机器语言是唯一可以控制 cpu 的语言,因为它的符号不利于人识别和书写,为了方便理解和记忆,将机器语言换一些通俗易懂的符号,这就变成了汇编语言。一般来说在在编译器中高级语言先转换为汇编在转换为机器语言,也有直接转换为机器语言的情况。

机器语言是计算机唯一可以直接执行的语言,汇编语言用助记符编写,以便记忆。而正则语言是编译原理中符合正则文法的语言。

解释程序的特点是翻译一句执行一句,边翻译边执行:由高级语言转化为汇编语言的过程称为编译,把汇编语言源程序翻译成机器语言程序的过程称为汇编。

1.2.4 计算机的工作过程

2. 指令执行过程的描述 (点击链接,视频 20min 处有详细讲解)






IR 存放当下欲执行的指令;PC 存放下一条指令的地址
MAR 存放欲访问的存储单元地址;MDR 存放从存储单元取来的数据
地址译码器是主存的构成部分,不属于 CPU;地址寄存器虽然一般属于主存,但是现代计算机中绝大多数 CPU 内集成了地址寄存器!
关于 CPU 存取速度的比较:寄存器(CPU 内部)> Cache(高速的 SRAM) > 内存 (SDRAM)


上图是计算机的工作流程,首先 PC 将指令地址发送给 MAR,MAR 根据地址在存储体中找到指令数据存放在 MDR 中,之后 MDR 将指令存放在 IR 中,取指令结束,之后指令中的操作码进入 CU 中,地址码重复上述取指令步骤,将数据发送到 ACC 中,执行指令结束。注意区分指令和数据的依据: 指令周期的不同阶段

1.3 计算机性能指标

  1. 机器字长
    计算机的位数(机器字长),表示计算机进行一次整数运算 (即定点整数运算) 所能处理的二进制数据的位数。计算机字长通常选定为字节 (8 位) 的整数倍,通常是 2,4,8 倍。不同的计算机,字节可能不同

机器字长、指令字长、存储字长的区别和联系是什么?

  • 机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度

  • 指令字长:一个指令字中包含的二进制代码的位数。

  • 存储字长:一个存储单元存储的二进制代码的长度。等于 MDR 的位数, 它们都必须是字节的整数倍。

  • 数据字长:数据总线一次能传送信息的位数,它可以不等于 MDR 的位数。

    指令字长一般取存储字长的整数倍,若指令字长等于存储字长的 2 倍,则需要 2 次访存来取出一条指令,因此取指周期为机器周期的 2 倍;若指令字长等于存储字长,则取指周期等于机器周期。

    早期的计算机存储字长一般和机器的指令字长与数据字长相等,因此访问一次主存便可取出一条指令或一个数据。随着计算机的发展,指令字长可变,数据字长也可变,但它们必须都是字节的整数倍。

    请注意 64 位操作系统是指特别为 64 位架构的计算机而设计的操作系统,它能够利用 64 位处理器的优势。但 64 位机器既可以使用 64 位操作系统,又可以使用 32 位操作系统。而 32 位处理器是无法使用 64 位操作系统的。

  1. 数据通路带宽
    数据总线一次所能传送信息的位数。
  2. 主存容量
    MAR 的位数反映存储单元的个数,如 MAR 为 16 位,表示存储单元为 216 = 64K; 若 MDR 为 32 位,则存储容量为 216x32.
  3. 运算速度

吞吐量,指系统在单位时间内处理请求的数量 ;从用户观点看,它是评价计算机系统性能的综合参数!

响应时间,指从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结构的等待时间。

CPU 时钟周期。通常为节拍脉冲或 T 周期,即主频的倒数,它是 CPU 中最小的时间单位,每个动作至少需要 1 个时钟周期。

主频 (CPU 时钟频率)。机器内部主时钟的频率,是衡量机器速度的重要参数。

  • CPU 周期又称为机器周期,由多个时钟周期组成!
  • 指令周期 > CPU 周期 > 时钟周期

CPI(Clock cycle Per Instruction),即执行一条指令所需的时钟周期数。

CPU 执行时间,指运行一个程序所花费的时间。
CPU 执行时间 = CPU 时钟周期数 / 主频 = (指令条数 xCPI)/ 主频
CPU 的性能取决于三个要素: 主频、CPI 、指令条数

IPS(Instructions Per Second) = 主频 / 平均 CPI,每秒执行多少指令

MIPS(Million Instructions Per Second)= 即每秒执行多少百万条指令。

MFLOPS(Mega Floating-point Operations Per Second)= 浮点操作次数 /(执行时间 x106), 即每秒执行多少百万次浮点运算。

GFLOPS(Giga Floating-point Operations Per Second)= 浮点操作次数 /(执行时间 x109),即每秒执行多少十亿次浮点运算。

TFLOPS(Tera Floating-point Operations Per Second)= 浮点操作次数 /(执行时间 x1012),即每秒执行多少万亿次浮点运算。

1.4 本章开头提出的问题回答

1) 计算机由哪几部分组成?以哪部分为中心?

    1. 计算机由哪几部分组成?以哪部分为中心?
      计算机由运算器、控制器、存储器、输入设备及输出设备五大部分构成,现代计算机通常把运算器和控制器集成在一个芯片上,合称为中央处理器。
      而在微处理器面世之前 (早期的冯 · 诺依曼机),运算器和控制器分离,而且存储器的容量很小,因此设计成以运算器为中心的结构,其他部件都通过运算器完成信息的传递。
      随着微电子技术的进步,同时计算机需要处理、加工的信息量也与日俱增,大量 IO 设备的速度和 CPU 的速度差距悬殊,因此以运算器为中心的结构不能满足计算机发展的要求。现代计算机已经发展为以存储器为中心,使 IO 操作尽可能地绕过 CPU, 直接在 IO 设备和存储器之间完成,以提高系统的整体运行效率。

2) 主频高的 CPU 一定比主频低的 CPU 快吗?为什么?

    1. 主频高的 CPU 一定比主频低的 CPU 快吗?为什么?
      衡量 CPU 运算速度的指标有很多,不能以单独的某个指标来判断 CPU 的好坏。CPU 的主频,即 CPU 内核工作的时钟频率。CPU 的主频表示 CPU 内数字脉冲信号振荡的速度,主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者的数值关系,因为 CPU 的运算速度还要看 CPU 的流水线的各方面的性能指标(架构、缓存、指令集、CPU 的位数、 Cache 大小等)。由于主频并不直接代表运算速度,因此在一定情况下很可能会出现主频较高的 CPU 实际运算速度较低的现象

来看看小编的配置,感受一下,以后计算机组成原理中的 Cache 和主频等

3) 翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特性是什么?

    1. 翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特性是什么?
      翻译程序是指把高级语言源程序翻译成机器语言程序(目标代码)的软件。
      翻译程序有两种:一种是编译程序,它将高级语言源程序一次全部翻译成目标程序,每次执行程序时,只需执行目标程序,因此只要源程序不变,就无须重新翻译,请注意同一种高级语言在不同体系结构下,编译成目标程序是不一样的,目标程序与体系结构相关,但仍不是计算机硬件能够直接执行的程序。另一种是解释程序,它将源程序的一条语句翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序语句全部被翻译并执行完。所以解释程序的执行过程是翻译一句执行一句,并且不会生成目标程序。
      汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译为机器语言程序。汇编语言是种面向机器的低级语言,是机器语言的符号表示,与机器语言一一对应。
      编译程序与汇编程序的区別:若源语言是诸如 C、C++、Java 等 “高级语言”,而目标语言是诸如汇编语言或机器语言之类的 “低级语言”,则这样的一个翻译程序称为编译程序。若源语言是汇编语言,而目标语言是机器语言,则这样的一个翻译程序称为汇编程序。

4) 不同级别的语言编写的程序有什么区别?哪种语言编写的程序能被硬件直接执行?

    1. 不同级别的语言编写的程序有什么区别?哪种语言编写的程序能被硬件直接执行?
      机器语言和汇编语言与机器指令对应,而高级语言不与指令直接对应,具有较好的可移植性。其中机器语言可以被硬件直接执行。

1.5 常见问题

1. 同一个功能既可以由软件实现又可以由硬件实现吗?

    1. 同一个功能既可以由软件实现又可以由硬件实现吗?
      软件和硬件是两种完全不同的形态,硬件是实体,是物质基础;软件是一种信息,看不见、摸不到。但在逻辑功能上,软件和硬件是等效的。因此,在计算机系统中,许多功能既可以由硬件直接实现,又可以在硬件的配合下由软件实现。
      一个最大的区别就是,硬件实现比软件实现的速度快很多,但是成本也高!所以,芯片在流片之后,如果发现 bug 可以用软件修复就用软件修复!
      例如,乘法运算既可用专门的乘法器(主要由加法器和移位器组成)实现,也可用乘法子程序(主要由加法指令和移位指令等组成)来实现。

2. 翻译程序、汇编程序、编译程序、解释程序的区别和联系是什么?

  • 见本章开头提出的问题

3. 什么是透明性?透明是指什么都能看见吗?

    1. 什么是透明性?透明是指什么都能看见吗?
      在计算机领域中,站在某类用户的角度,若感觉不到某个事物或属性的存在,即 “看” 不到某个事物或属性,则称为 “对该用户而言,某个事物或属性是透明的”。这与日常生活中的 “透明” 概念 (公开、看得见) 正好相反。
      例如,对于高级语言程序员来说,浮点数格式、乘法指令等这些指令的格式、数据如何在运算器中运算等都是透明的;而对于机器语言或汇编语言程序员来说,指令的格式、机器结构、数据格式等则不是透明的。
      在 CPU 中,IR、MAR 和 MDR 对各类程序员都是透明的。

4. 机器字长、指令字长、存储字长的区别和联系是什么?

    1. 机器字长、指令字长、存储字长的区别和联系是什么?
  • 机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度
    指令字长:一个指令字中包含的二进制代码的位数。
    存储字长:一个存储单元存储的二进制代码的长度。等于 MDR 的位数, 它们都必须是字节的整数倍。
    数据字长:数据总线一次能传送信息的位数,它可以不等于 MDR 的位数。

    指令字长一般取存储字长的整数倍,若指令字长等于存储字长的 2 倍,则需要 2 次访存来取出一条指令,因此取指周期为机器周期的 2 倍;若指令字长等于存储字长,则取指周期等于机器周期。

    早期的计算机存储字长一般和机器的指令字长与数据字长相等,因此访问一次主存便可取出一条指令或一个数据。随着计算机的发展,指令字长可变,数据字长也可变,但它们必须都是字节的整数倍。

    请注意 64 位操作系统是指特别为 64 位架构的计算机而设计的操作系统,它能够利用 64 位处理器的优势。但 64 位机器既可以使用 64 位操作系统,又可以使用 32 位操作系统。而 32 位处理器是无法使用 64 位操作系统的。

5. 计算机体系结构和计算机组成的区别和联系是什么?

    1. 计算机体系结构和计算机组成的区别和联系是什么?
      计算机体系结构是指机器语言或汇编语言程序员所看得到的传统机器的属性,包括指令集、数据类型、存储器寻址技术等,大都属于抽象的属性。
      计算机组成是指如何实现计算机体系结构所体现的属性,它包含对许多对程序员来说透明的硬件细节。例如,指令系统属于结构的问题,但指令的实现即如何取指令、分析指令、取操作数如何运算等都属于组成的问题。因此,当两台机器指令系统相同时,只能认为它们具有相同的结构,至于这两台机器如何实现其指令,完全可以不同,即可以认为它们的组成方式是不同的。例如,一台机器是否具备乘法指令是一个结构的问题,但实现乘法指令采用什么方式则是一个组成的问题。(简言之,看有没有这个属性,就是结构问题;看怎么实现,就是组成问题
      许多计算机厂商提供一系列体系结构相同的计算机,而它们的组成却有相当大的差别,即使是同一系列的不同型号机器,其性能和价格差异也很大。例如, IBM System/370 结构就包含了多种价位和性能的机型。

6. 基准程序执行得越快说明杺器的性能越好吗?

    1. 基准程序执行得越快说明机器的性能越好吗?
      一般情况下,基准测试程序能够反映机器性能的好坏。但是,由于基准程序中的语句存在频度的差异,因此运行结果并不能完全说明问题。

第二章 数据的表示与运算