<计算机系统结构>CA1 概论
本文最后更新于:2024年3月23日 晚上
CA1 概论
CA1.1 计算机的结构
1946 年,美国宾夕法尼亚大学研制了世界第一台通用计算机 ENIAC(Electronic Numerical Integrator And Computer,电子数字积分计算机)。通过手动编程,使用十进制方式表示和计算信息。
冯·诺依曼提出了 IAS 计算机的结构,这就是 冯·诺依曼结构。这种计算机完成的工作要事先被编写为程序,然后将程序和原始数据送入主存并执行。一旦程序启动,计算机就能在不需要操作人员干预的情况下自动完成逐条取出指令和执行指令的认为。“存储程序” 是冯·诺依曼机器的最重要思想。现在,几乎所有通用计算机都采用冯·诺依曼结构
#冯·诺依曼结构
冯·诺依曼结构的主要思想:
-
计算机应该由五个基本部件组成
存储器:能存放数据和指令。数据和指令在形式上没有区别(0、1 的序列),但计算机能区分数据和指令
控制器:能自动取出指令并执行
运算器:能进行加减乘除四种基本算术运算,以及一些逻辑运算和附加运算
输入设备、输出设备:操作人员通过输入、输出设备和主机进行通信
(CA1 冯诺依曼结构图)
-
计算机内部以 二进制形式 表示指令和数据。每条指令分为两部分:
操作码部分:指出操作类型
地址吗部分:指出操作数的地址
-
一串指令组成了程序。计算机采用 存储程序 的工作方式
#现代计算机结构模型
(CA1 现代计算机结构图)
现代计算机的基本部件:
- CPU:中央处理器
- PC:程序计数器
- MAR:储存器地址寄存器
- ALU:算术逻辑部件
- IR:指令寄存器
- MDR:存储器数据寄存器
- GPRs:通用寄存器组(由若干寄存器组成,早期是累加器)
现代计算机的工作过程
-
数据和指令按顺序放在储存器中,各自对应一个存储单元地址。指令由 OP、ADDR 字段组成,程序起始地址置 PC
-
开始执行程序后,先根据 PC 读取指令并将其译码,再根据指令读操作数,执行指令后回写结果,最后修改 PC 的值。之后会循环继续执行下一道指令
-
计算机的指令包含以下信息:
操作性质(操作码)
源操作数1 和/或 源操作数2(立即数、寄存器编号、存储地址)
目的操作数地址(寄存器编号、存储地址)
CA1.2 程序开发过程
最早的程序开发是使用机器语言编写程序,并记录在纸带或卡片上,这是第一代程序设计语言。这样的编程方式不够灵活,书写、阅读也很困难。
#汇编语言
以助记符表示操作码和寄存器,以标号表示位置,就形成了 汇编语言。汇编语言称为第二代程序设计语言
汇编语言需要借助汇编程序转换才能被机器识别。
汇编语言程序由汇编指令构成。汇编指令是用助记符和标号表示的,和机器指令一一对应。
指令包含操作码、操作数或其地址码。机器指令用二进制表示,汇编指令用符号表示。
指令只能包含最简单的数据的存取,简单计算。使用汇编语言编写复杂程序要描述的细节太多,而且在不同结构机器上无法运行。
#高级语言
随着技术发展,出现了很多 高级编程语言。这些语言和具体机器结构无关。它们面向算法描述,比机器语言描述能力强得多。
第三代程序设计语言是过程式语言,描述 “怎么做”,编码时需要描述实现过程。第四代程序设计语言是非过程式语言,编码时只需说明 “做什么”,而不需描述具体的算法实现细节。
高级语言是高度抽象的,其一条语句可能对应几十或几百条语句。
高级语言分为 “面向过程” 和 “面向对象” 两种。
现在,程序员几乎都使用高级语言来编写程序,但最终都要将其转换成机器语言来执行。转换方式有两种:
实现语言时有两种方式:
- 编译(翻译)(complier):将高级语言程序转换成机器级目标程序。执行时启动目标程序即可。
- 解释(interpreter):将高级语言语句逐条实时译码为低级语言指令,不生成目标文件。
用高级语言开发程序需要复杂的支撑环境。包括:
- 语言处理系统
- 语言处理程序(包括编写源程序的编译器,及处理源程序的翻译转换软件)
- 语言的运行时系统
- 操作系统
- 人机接口:GUI 方式(图形用户界面)或 CUI 方式(命令行用户界面)
- 操作系统内核
- 指令集体系结构:计算机硬件的抽象
CA1.3 计算机系统的层次结构
计算机由 硬件、固件(微程序。放在只读存储器中,几乎不改变的程序)、软件组成。
从使用语言的角度,计算机系统可以被看成按功能划分的多层机器级组成的层次结构。
(CA1_4 计算机系统层次图)
#计算机系统抽象层的转换
计算机抽象层间,上层是下层的抽象,下层是上层的实现,底层为上层提供支撑环境。
用户提出的 问题 要转化成 算法,通过高级语言程序实现后得到 高级语言源程序。
高级语言源程序借由 操作系统 的支持被翻译成 指令集体系结构(ISA)规定的机器指令。
指令集体系结构是硬件层面的抽象,其具体实现实际上是 微体系结构 的实现。
graph TB
5[应用语言机器 M5]-->4[高级语言机器 M4]-->3[汇编语言机器 M3]-->2[操作系统机器 M2]-->1[传统机器语言机器 M1]-->0[微程序机器 M0]
1:::C1
0:::C2
classDef C1 fill:#F0C0C0
classDef C2 fill:#F0F0A0
- 微程序:微程序由硬件直接执行。M0 由硬件实现。
- 机器指令:用微指令程序解释机器指令。M1 由微程序(固件)实现。
- 操作系统作业控制语言:一般用机器语言程序解释作业控制语句。M2 以上多由软件实现。
- 汇编语言:汇编语言程序经汇编程序翻译成机器语言程序。
- 高级语言:高级语言程序经过编译程序翻译成汇编语言程序,或某种中间语言程序,或机器语言程序。
- 应用语言:应用语言程序经过应用程序包翻译成高级语言程序。
#计算机系统的不同用户
最终用户:工作在由应用程序提供的最上层的抽象层
系统管理员:工作在由操作系统提供的抽象层
应用程序员:工作在语言处理系统(主要是编译器和汇编器)的抽象层。语言处理系统建立在操作系统之上。编译器、汇编器的目标程序由机器级代码组成,操作系统指令直接对硬件进行编程控制
系统程序员:工作在 ISA 层次,必须对 ISA 非常了解。ISA 处于软件和硬件的交界面,是对硬件的抽象。软件的所有功能都建立在 ISA 的基础上。ISA 是最重要的层次
(CA1_3 计算机用户层次图)
#指令集体系结构 ISA
指令集体系结构(ISA,Instruction Set Architecture),简称指令系统
ISA 是一种规约,规定了如何使用硬件:
- 可执行的指令和集合,包括 指令格式、操作种类 以及每种操作对应的 操作数的规定
- 指令可以接受的 操作数的类型
- 操作数能存放的寄存器组的结构,包括 每个寄存器的名称、编号、长度、用途
- 操作数能存放的 存储空间的大小 和 编址方式
- 操作数在存储空间存放时 按照大端还是小端方式存放
- 指令获取操作数的方式,即 寻址方式
- 指令执行过程的控制方式,包括 程序计数器(PC)、条件码定义 等
ISA 在通用计算机系统中是必不可少的一个抽象层。
不同的 ISA 规定的指令集不同,如 IA-32、MIPS、ARM 等。
计算机的硬件组成称为 微体系结构。计算机组成必须能实现 ISA 规定的功能,同一种 ISA 可以由不同计算机组成。
CA1.4 计算机系统结构、组成、实现
计算机系统设计的主要内容就是计算机 系统结构、组成、实现 的设计。
计算机系统结构:指是传统机器语言级的体系结构。它是软件与硬件/固件的交界面,是机器语言程序员看到的机器物理系统的抽象。计算机系统结构研究软硬件间的功能分配,确定传统机器级的界面。
计算机组成:指计算机系统结构的逻辑实现。包括机器级内部的数据流和控制流的组成,以及逻辑设计等。其着眼于物理机器级内各事件的排序方式与控制方式、各功能部件及部件间的联系。
计算机实现:指计算机组成的物理实现,包括处理机、主存等部件的物理结构,部件集成度,模块、插件、底板的划分与连接,信号传输,电源,冷却,整机装配技术等。其着眼于器件技术(主导)、微组装技术。
相同的系统结构可能有不同的组成,一种计算机组成可以有多种实现。此外,不同的系统架构会让计算机组成产生差异,计算机组成也会对计算机实现产生影响。
CA1.5 软件发展对系统架构的影响
软件的可移植性:一个软件能不经修改或只需少量修改,即能由一台计算机移植到另一计算机上正确运行。
软件的兼容性分为四种情况:向上(机器档次更高)兼容、向下(机器档次更低)兼容、向前(发布时间靠前)兼容、向后(发布时间靠后)兼容。向后兼容是程序设计的基本要求。
实现可移植性的办法有以下几种:
-
采用系列机
系列机:由同一厂家生产的,具有相同系统结构,但具有不同组成和实现的一系列不同型号机器。
-
模拟和仿真
模拟:用软件的方法在一台机器(宿主机)上实现另一机器(虚拟机)的指令集
仿真:用一台机器(宿主机)上的微程序去解释实现另一条机器(虚拟机)的指令集
-
统一高级语言
不同的应用对计算机系统结构设计提出了不同要求。应用需求是促使计算机系统结构发展的根本动力。
摩尔定律:集成电路芯片上集成的晶体管数目每隔 18 个月就翻一番。
CA1.6 系统结构的并行性
并行性包括同时性和并发性两重含义:
-
同时性:两个以上事件在同一时刻发生
-
并发性:两个以上事件在同一时间段内发生
从计算机系统执行程序的角度看,并行性等级由低到高分为几级:
- 指令内部并行:一条指令内部各个微操作间的并行执行
- 指令级并行:多条指令并行执行
- 线程级并行:并行执行多个线程。通常是一个进程内派生的多个线程
- 任务级或过程级并行:多个任务或程序段的并行执行
- 作业或程序级并行:多个作业或多道程序的并行执行
从处理数据角度看的分类方法(冯氏分类法),由低到高分为四级:
- 位串字串:同时对一个字的一位进行处理
- 位并字串:同时对一个字的全部位进行处理
- 位串字并:同时对许多字的同一位(位片)进行处理
- 全并行:同时对多个字的全部或部分位阻进行处理
从计算机信息加工步骤的角度看,并行等级又分为:
- 存储器操作并行:以单体单字、多体单字、多体多字方式在一个周期内访问多个字
- 处理器操作步骤并行:指令的取指、分析、执行等操作步骤在时间上重叠流水地进行
- 处理器操作并行:重复设置大量处理单元,让他们在同一控制器控制下按同一指令同时工作
- 指令、任务、作业并行
提高并行性的技术途径:
- 时间重叠:让多个处理过程在事件上错开,轮流重叠使用一套硬件的各个部分
- 资源重复:以数量取胜,重复设置硬件资源
- 资源共享:一种软件方法。多个任务按一定时间顺序轮流使用同一资源
多倍性:在系统受限的部件上,同时处于统一执行阶段的指令或数据的最大数目
按照指令流与数据流的多倍性,能将计算机进行分类:
- 单指令流单数据流(SISD)
- 单指令流多数据流(SIMD)
- 多指令流单数据流(MISD)
- 多指令流多数据流(MIMD)
CA1.7 计算机系统的软硬件取舍
计算机系统软硬件取舍的基本原则:
- 在现有硬件、器件条件下,从实现费用、速度和其他性能要求综合考虑,获取高性价比
- 考虑到准备采用和可能采用的组成技术,使之尽可能不过多或不合理地限制各种组成、实现技术的采用
- 不仅从硬件角度考虑如何便于应用组成技术和发挥期间技术的进展,还要从软件角度考虑编译与操作系统的实现,并把对高级语言程序提供更多更好的支持放在首位
软、硬件的功能分配是计算机系统结构的主要任务。软件与硬件在逻辑功能上是等效的,但他们在性能、价格、实现难易程度上不同。
硬件与软件的费用都包含 研发费用 与 生产费用。若软、硬件的研发费用记为 ,则 也是可能的。若软、硬件的生产费用记为 ,则 也是可能的。此外,软件设计成本远高于软件生产成本, 也是可能的。
硬件一般只需一次设计,而软件需要多次设计。若 为软件重新的设计次数,则软件实现的设计费用为
同一功能的软件在存储介质上可能多次复制和存储。若出现 次,则软件实现的生产费用为
若计算机系统共生产 台,则每台计算机用硬件实施该功能的费用为 ,而用软件实现则为
可见,仅当 时,用硬件实现功能更好。
若再将上述比值带入,则有 。 一般小于 100,所以 越大,该不等式越成立。
可见,只有计算机系统产量大时,增大硬件比例才是合适的。
CA1.8 定量设计原理
描述计算机系统性能的指标:
-
使用者角度:响应时间,即从发出指令到指令完成的事件
-
管理员角度:吞吐量,即单位时间内完成的总工作量
-
时间频率(主频、外频、信频):处理机主频,即工作频率
MIPS:每秒百万条指令。有
Mflops:每秒百万条浮点指令
这些指标都不一定可靠
-
真实程序的运行时间:计算机性能的唯一可靠测度
相同的任务,花费的时间越少,速度越快,性能越好
下面是一些定量设计原理:
-
大概率事件优先原则(哈夫曼原理):尽可能加速高频发生的事件
-
阿姆达尔定律(Amdahl):加快某部件执行速度能获得的系统性能加速比,受限于该部件执行时间占系统总执行时间的百分比
-
局部性原理
时间局部性:(因为程序中存在大量循环操作)如果执行了程序中的某指令,则该指令可能不久后被再次执行。若某数据被访问过,则该数据可能不久后被再次访问。
空间局部性:(因为很多数据在内存中是连续存放的)若程序访问了某个存储单元,则其附近的存储单元也可能在不久后被访问。