1.1、计算机系统概论
1.1.1、计算机的软硬件概念
1.计算机:能按照程序运行,自动高速处理海量数据的现代化智能电子设备。
2.系统:由相互作用相互依赖的若干组成部分结合而成的具有特定功能的有机整体,而这个有机整体又是它从属的更大系统的组成部分。
3.计算机系统:用于数据库管理的计算机硬软件及网络系统。
硬件
软件 (数据程序)
系统软件(用来管理整个计算机系统)
标准程序库、语言处理程序、操作系统、服务性程序、数据库管理系统、网络软件。
应用软件(按任务需要编制成的各种程序)
4.软硬件关系
a.硬件系统和软件系统具有功能等价性
前者由逻辑门电路实现
后者由赋值、比较、循环实现
b.因性价比问题,硬软件折中
1.1.2、计算机系统的层次结构
高级语言 M4 虚拟机器 软件
汇编语言 M3 虚拟机器 软件
操作系统 M2 虚拟机器 软件
机器语言 M1 实际机器 硬件
微程序系统 M0 微程序机器 硬件
总括:用户用高级语言编写的程序(源程序)和数据一起送入计算机内,再由计算机将其翻译成翻译成机器能识别的机器语言程序(目标程序)。
面向问题的高级语言接近人们的习惯,并且还具有较强的通用性,它被高级语言机器 翻译 成汇编语言程序,用户再利用汇编语言机器 翻译 成机器语言。微程序机器(对实际机器的分解)将每条机器指令翻译成一组微指令,构成微程序。操作系统提供再汇编语言和高级语言的使用和实现过程中的基本操作,还控制管理计算机系统全部硬件和软件资源的作用。
翻译由翻译程序完成,翻译程序有两种,上述为编译程序:源程序全部语句一次全翻译成机器语言程序,紧接着执行。另一种解释程序:源程序一条语句翻译成对应于机器语言的一条语句,并且立即执行这条语句,如此重复直到完成,如Python就是。
“引入CSapp的内容来理解上方枚举的层次结构”
尽管helloworld程序非常简单,但为了让它完成运行,系统的每个主要组成部分都需要协调工作。故我们以C语言程序的例子来横向分析层次结构是如何运行的:
hello程序的生命周期从一个hello.c源程序(源文件)开始
hello.c由值0和1组成的位(bit)序列,8个位被组织成一组,称为字节,每个字节表示程序中某个文本字符。大部分现代系统采用ASCII标准来表示每个文本字符
hello.c以字节序列的方式(一串位表示)存储在文件中
tips:像hello.c这样的只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
从源程序文件hello.c至可执行目标文件hello.o,编译
图为编译系统
预处理阶段。预处理器(cpp)根据以字符#开头的命令,修改原始的C程序,得到另一个c程序,通常以 . i 作为文件拓展名。
编译阶段。编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。该程序每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令。
汇编阶段。汇编器(as)将hello.s翻译成机器语言指令,并将这些指令打包成可重定位目标程序(relocatable object program)的格式,将结果保存在hello.o二进制的文件中。此时它的字节编码是机器语言指令而不是字符。
链接阶段。标准库函数存在于函数名.o单独预编译好了的目标文件中,如printf.o。链接器(Id)负责将其合并到我们的hello.o程序中。结果得到hello文件,它是个可执行目标文件,可以加载到内存中,由系统执行。
1.1.3、计算机组成和计算机体系结构
计算机体系结构:程序员见到的计算机系统属性。包括指令集、数据类型、存储器寻址技术、I/O机理等,多为抽象属性。
计算机组成:如何实现计算机体系结构所体现的属性,它包含如何做某事,即如何取指令、分析指令、取操作数、运算、送结果。(可以说比体系结构更加底层)
for example: 是否具备乘法指令是结构的问题,其实现用专门的乘法电路还是连加的加法器是组成问题。
1.2、计算机的基本组成
1.2.1、冯·诺依曼计算机的特点
特点:
计算机由运算器、存储器、控制器、输入设备和输出设备五大部件组成
指令和数据以同等地位存放于存储器内,并可按地址寻访
指令和数据均用二进制数表示
指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数地址位置
指令在存储器内按顺序存放
机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成
tips:因木桶效应,现以存储器为中心
1.2.2、计算机的硬件框图
部件功能:
运算器:完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内
存储器:存放数据和程序
控制器:控制、指挥程序和数据的输入、运行以及处理计算结果
输入输出设备:人们熟悉的信息形式 ⟺ \iff⟺ 机器能识别的信息形式
现代计算机以三大部分构成:CPU、I/O设备、主存
1.2.3、计算机的工作步骤
一.上机前的准备
建立数学模型
确定计算方法
编制解题程序
操作码表示机器所执行的各种操作,地址码表示参加运算的数在存储器内的位置
二、上机运行
步骤还可参考汇编语言加法的实现
主机:是计算机硬件的主体部分,由CPU和主存储器M构成
CPU:中央处理器,是计算机硬件的核心部件,由运算器和控制器组成
主存:计算机中存放正在运行的程序和数据的存储器,为计算机的主要工作存储器,可随机存储,由各种逻辑部件及控制电路组成
存储单元:可存放一个机器字并具有特定存储地址的存储单位
存储元件:存储一位二进制信息的物理元件,是存储器中最小的存储单位,又叫存储基元,不能单独存取
存储字:一个存储单元所存二进制代码的逻辑单位
存储字长:一个存储单元所存二进制代码的位数
存储容量:存储器可存二进制代码的总量
机器字长:指CPU一次能处理的二进制数据的位数,通常与CPU的寄存器位数有关
指令字长:一条指令的二进制代码位数
1.3、计算机硬件的主要技术指标
时间 1个
主频,CPU运算速度
普通法
完成一次加法乘法所需时间
吉普森法
指令执行时间及全部操作所占比 T M = ∑ i = 1 n f i t i T_M = \sum_{i=1}^{n}f_it_iTM=i=1∑nfiti (T为机器运行速度,f为第i种指令占百分比,t为第i种执行时间)
MIPS
Million Instruction Per Second 百万条指令每秒
CPI
Cycle Per instruction 执行一次指令所需时钟周期 也就是 机器主频倒数
非时间 2个
机器字长,通常与CPU的寄存器位数有关:影响精度、计算次数
存储容量,包括主存和辅存,主存容量指主存中存放二进制代码的总位数。MAR的位数代表存储单元个数,MDR的位数反映存储字长,两个的位数相乘等于存储容量