第一章 计算机系统概述
1.1 计算机系统层次结构
计算机系统由硬件系统和软件系统组成。
1.1.1 计算机硬件
1.冯诺依曼机的基本思想
第一台冯诺依曼机是EDVAC。冯诺依曼机的基本工作方式为控制流驱动方式,是一种多指令单数据流构型
冯诺依曼的计算机有以下特点:
- 采用存储程序的工作方式
- 由运算器、存储器、控制器、输出设备、输入设备五大部件组成
- 指令和数据以同等地位存储在存储器中,形式上无区别,可以按地址访问
- 指令和数据均用二进制代码标识。指令由操作码和地址码组成,操作码指出操作类型,地址码指出操作数地址
- 以运算器为中心(冯诺依曼结构的缺点)和现代计算机不同,现代计算机以存储器为中心。
TIP:
- CPU中集成了运算器和控制器,主存储器不集成在CPU中
- 计算机组成原理中,运算器、控制器和存储器统称为主机
- 手机芯片Soc进一步将主存储器也和运算器和控制器集成在了一起
2.计算机的功能部件
输入/输出设备
存储器
存储器分为主存储器(内存)和辅助存储器(外存)。CPU能够直接访问的存储器是主存储器,辅助存储器的信息必须被调入主存后才能被CPU访问。
主存储器中有地址寄存器、存储体和数据寄存器。其中地址寄存器MAR负责存放访存地址,经过地址译码后找到所选的存储单元。数据寄存器MDR用于暂存要从存储器中读或者写的信息,时序控制逻辑用于产生存储操作所需的各种时序信号。
数据在存储体内按照地址存储,一个存储单元都存放一串二进制数据。其中一个存储单元可以存储的二进制位数称为存储字长。MAR的二进制位数直接反映了可以访问多少个存储单元。MDR应该和存储单元的存储字长等长。
TIPS:
- 一个字节(Byte)=8bit;一个字(word)=16bit
- 相关联存储器是一种特殊的存储器,该种存储器既可以地址寻址也可以内容寻址
运算器
运算器的核心单元是算术逻辑单元(ALU)。运算器中包含若干通用寄存器,用于暂存操作数和中间结果。
另外还有数个运算相关寄存器
- ACC 累加器,用于存放操作数或运算结果
- MQ 呈上寄存器,在乘除操作的时候用于存放操作数或者运算结果
- x 通用寄存器,用于存放操作数
运算器内还有程序状态寄存器(PSW),又称标志寄存器,用于存放ALU运算得到的一些标志信息或者处理机的状态信息,比如是否有溢出有无产生进位或者错位,结果是否为负等等。
控制器
控制器是计算机的指挥中心,由它指挥各部件协调地进行工作,负责指令的解析。控制器由**程序计数器(PC)、指令寄存器(IR)和控制单元(CU)**组成。
- PC用于存储当前准备执行的指令,可以自动的加一以形成下一跳指令的地址,它与主存的MAR之间有一条直接的通路。
- IR用来存放当前执行的指令,其内容来自于主存的MDR。
- CU控制单元会得出当前指令的操作码对应的是什么操作,并且执行该操作码的操作。
TIPS:IR、MAR、MDR是CPU内部工作寄存器,对用户完全透明
1.1.2 计算机软件
1. 系统软件和应用软件
系统软件是一组保证计算机系统高效运行的基础软件,通常作为系统资源提供给用户使用。系统软件主要有操作系统OS,数据库管理系统DBMS,语言处理程序、网络软件系统等
应用软件是用户为了解决某个应用领域的问题和需求而编制的程序
2.三个级别的语言
1)机器语言。又称为二进制代码语言,是计算机中唯一可以直接识别和执行的语言
2)汇编语言。用英文单词或其缩写代替的二进制指令代码,能够更方便人们记忆和理解。使用汇编语言的程序必须经过一个称为汇编程序的系统软件的翻译,转变为机器语言后才能运行
3)高级语言。为了方便程序设计人员写出解决问题的处理方案和 解决过程的程序。需要将高级语言转化为汇编,再由汇编转化为机器语言方可以运行。高级语言分为解释型语言和编译型语言。
- 编译型语言如C和C++会一次性讲全部语句翻译成为机器语言程序,然后在执行机器语言程序,特点是只需要翻译一次。
- 解释型语言如JS,Python,Shell会将程序的一条语句翻译成机器语言后立即进行执行。紧接着翻译下一句,一个程序需要进行多次翻译。其效率不如编译型语言
而对应的转化翻译程序也有以下三种:
1)汇编程序(汇编器):将汇编语言翻译为机器语言
2)解释程序(解释器):将源程序中的语句按执行树勋逐条转化为机器语言并立即执行,不产生汇编后的程序
3)编译程序(编译器):将高级语言翻译成汇编语言或者机器语言的程序
1.1.3 计算机系统层次结构
-
第一层:微程序机器层(微指令系统),这是一个实在的硬件层,由机器硬件直接执行微指令。
-
第二层:传统机器语言层 M1,也是一个实际的机器层,由微程序解释的机器指令系统,二进制指令在此层进行解析
-
第三层:操作系统层M2,向上层提供广义指令,又称为系统调用
-
第四层:虚拟机器(汇编语言机器),为用户提供了一种符号化的语言,借此可以编写汇编语言程序。
-
第五层:高级语言层,它是面向用户的,盖层由各种高级语言编译程序支持和执行。需要编译程序翻译成汇编语言
1.1.4 计算机系统的工作原理
1.”存储程序“工作方式
计算机采用的“存储程序”式的工作方式规定,程序执行前,需要将程序所含的若干指令和数据存入主存,一旦程序被启动执行,就无需操作人员干预而自动的完成指令的取出和执行任务。
2.从源程序到可执行文件
- 预处理阶段:预处理器(cpp)对程序中以字符#开头的命令进行处理,将#后面的内容插入到程序中
- 编译阶段:编译器(cll)对预处理后的源程序进行编译,生成一个汇编语言源程序hello.s。
- 汇编阶段:汇编器(as)将hello.s翻译为机器语言指令,并且将这些指令打包成一个称为可重定位目标文件到hello.o,这是一种二进制文件
- 链接阶段:链接器(dl)将多个可重定位目标文件和标准库函数合并为一个可执行目标文件。
1.3 计算机性能指标
1.字长
字长又称为机器字长,指的是计算机进行一次整数运算所能够处理的二进制数据的位数,通常与CPU的寄存器位数、加法器有关。因此字长一般等于内部寄存器的大小,字长越长,数的表示范围越大,计算精度越高,机器字长决定了计算机计算的精度。
2.数据通路带宽
-
数据通路带宽指的是数据总线一次所能并行传送信息的位数
-
吞吐量:指系统在单位时间内处理请求的数量
3.主存容量
主存容量指的是主存储器所能存储信息的最大容量,通常用字节来衡量。其中MAR的位数反映存储单元的个数,因为MAR反映了可寻址的最大范围。比如MAR为32位,则可寻址地址为0~232,这也是为什么32位的芯片最多支持4GB运行内存的原因:即使硬件上使用了更大容量的内存,芯片中的MAR也无法访问。
存储字长:单个存储单位内二进制代码的位数
机器字长:指的是CPU内部用于整数运算的数据通路的宽度,也就是一次可以处理的二进制整数的位数,一般为16、32、64位
数据字长:指的是数据总线一次性可以传输的数据位数,不一定等于MDR位数
4.运算速度
-
吞吐量和响应时间
- 吞吐量指的是系统在单位时间内处理请求的数量,取决于主存的存取速度,因为无论是CPU向主存存取信息还是外部设备从主存中提取信息,都离不开主存的存储。
- 响应时间指的是用户向计算机发送一个请求到系统做出相应并且获得所需结果的时间
-
主频和CPU时钟周期
- 主频又称CPU时钟频率,是衡量计算机性能的重要指标,主频越高完成一个执行步骤所需的时间越短。高主频不一定带来高性能,但是可能会提高能耗
- CPU时钟周期一般为主频的倒数,而一个CPU周期一般由数个CPU时钟周期构成,CPU周期又称为机器周期
-
CPI:指的是执行一条指令所需的时钟周期数。不同指令集的时钟周期数可能不同,CPI指的是当前指令集所有指令执行所需要的平均周期数。执行一条指令的耗时=CPI x CPU时钟周期
-
CPU执行时间:运行一个程序所需时间
-
每秒执行指令数IPS=主频/平均CPI
-
FLOPS:每秒执行浮点运算数量。为了方便计算,也会有KFLOPS,MFLOPS等,表示的是千次浮点和百万次浮点,其中K=103而非1024,其他的单位亦如此
TIPS:在描述存储容量、文件大小的时候,K=210, M=220;在描述频率和速率的时候,K=103, M=106