第一章 计算机系统的概述
1.1计算机发展历程
1.1.1 计算机硬件的发展
1.需要提前知道的概念
- 逻辑元件:逻辑元件是处理电信号的最小基本单元,通常用于处理逻辑运算(如与门、或门、非门等)和控制电路,是数字电路和逻辑电路的基本构建块,用于构建数字系统和电子设备。
- 计算机用高|低电频来区分二进制1|0,传输数据本质上就是传送高|低电频的电信号,每个二进制数位称为1bit.
2.计算机四代的变化
- 第一代计算机(1946-1957年)— 电子管时代。特点:逻辑元件采用电子管;使用计算机语言编程;主存用延迟线或者磁鼓存储信息,容量小;体积庞大,运算速度低。
- 第二代计算机(1958-1964年)— 晶体管时代。特点:逻辑元件采用晶体管;主存使用磁芯存储器;出现了高级语言和汇编语言,有了操作系统的雏形。
- 第三代计算机(1965-1971年)— 中小规模集成电路时代。特点:逻辑元件采用中小规模集成电路;半导体存储器取代磁芯存储器;高级语言发展迅速,操作系统进一步发展,开始有了分时操作系统。
- 第四代计算机(1972年至今)— 超大规模集成电路时代。特点:逻辑元件采用超大规模集成电路,产生了微处理器;
3.计算机元件的更新换代
- 摩尔定律:价格不变,集成电路晶体管数目,约每隔18个月便会增加一倍,性能也会提升一倍。
- 半导体存储器的发展:1970年,仙童半导体公司生产出第一个较大容量的半导体储存器,至今,半导体储存器经历了11代。
- 微处理器的发展:1971年,Intel公司开发出第一个微处理器Intel4044以来,微处理器经历了Intel8008(8位),到Corei7(64位)。这里的8、64位指的是机器字长,是指计算机进行一次整数运算所能处理的二进制数据的位数。
1.1.2 计算机软件的发展
计算机软件技术的发展,促进计算机系统的发展。
计算机语言的发展经历了面向机器的机器语言和汇编语言、面向问题的高级语言。其中高级语言的发展真正促进了软件的发展,它经历了从科学计算和工程计算的 FORTRAN、结构化程序设计的 PASCAL到面向对象的C++和适应网络环境的Java。
同时,直接影响计算机系统性能提升的各种系统软件也有了长足的发展,特别是操作系统,如 Windows、UNIX、 Linux等。
1.1.3 计算机的分类与发展方向
1.分类
计算机可以分为:
- 电子模拟计算机和电子数字计算机。
数字计算机又可以按照用途分为:
-
专用计算机和通用计算机
-
通用计算机又分为:巨型机、大型机、中型机、小型机、微型机和单片机6类。
按照指令和数据流可以分为:
- 单指令流和单数据流系统(SISD),即传统的冯·诺依曼体系结构。
- 单指令流和多数据流系统(SIMD),包括阵列处理器和向量处理器系统。
- 多指令流和单数据流系统(MISD),这种计算机实际上不存在。
- 多指令流和多数据流系统(MIMD),包括多处理器和计算机系统。
2.发展方向
- 更微型,多用途——例如Arduino、Intel NUC等等
- 更巨型,超高速——例如我国的天河计算机(Tianhe)、神威计算机(Sunway)等等
1.2 计算机系统层次结构
1.2.1计算机系统的组成
计算机系统 = 硬件系统 + 软件系统
1.2.2 计算机硬件
1.早期的冯·诺依曼机
冯·诺依曼在研究EDVAC机提出了“存储程序”的概念,以该理念为基础的各类计算机通称为冯·诺依曼机
存储程序:指令以代码的形式事先输入到计算机的主存储器中,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束,无须人为干预。即按地址访问并顺序执行指令。
2.冯·诺依曼机的特点
- 计算机硬件系统由五大部件组成(存储器、运算器、控制器、输出设备、输入设备)
- 指令和数据以同等地位存于存储器,可按地址寻访。
- 指令和数据用二进制表示。
- 指令由操作码和地址码组成,操作码指出操作类型,地址码指出操作数的地址。
- 存储程序
- 以运算器为中心
3.冯·诺依曼机的结构
以运算器为中心,基本工作方式:控制流驱动方式
- 实线是数据线、虚线是控制线和反馈线
4.现代计算机结构
以存储器为中心
- 实线是数据线、虚线是控制线和反馈线
对比冯诺依曼机最大的不同,就是以储存器为中心
现代计算机以储存器为中心的冯诺依曼体系结构的优点:
- 灵活性:储存器可以存储不同的程序和数据,实现计算机的灵活计算和处理能力。
- 共享性:程序和数据存储在同一类型的存储器中,方便共享和传递,提高计算效率。
- 独立性:处理器和存储器是独立的实体单元,可以独立进行优化和升级,具有较好的扩展性和可维护性。
- 程序控制性:计算机按照程序的指令顺序和逻辑进行运行,实现高度灵活的计算能力。
- 抽象层次性:储存器作为底层存储单元,屏蔽底层硬件细节,对上层软件提供统一接口,便于设计、开发和维护计算机系统。
5.计算机的功能部件
**(1)输入设备:**主要功能是将程序和数据以机器所能识别和接收的信息输入计算机。如:键盘、鼠标、摄像机等。
**(2)输出设备:**是将计算机处理的结果以人们所能接收的形式输出。如:显示器,打印机。
输入/输出设备(简称I/O)设备,是计算机与外界联系的桥梁。
(3)储存器:
-
组成:储存器分为主存储器(内存储器,CPU能直接访问)和辅助存储器(外存储器,如硬盘,辅助存储器的信息需要导入到主存储器中,才可以被CPU访问)
-
主存储器:主存储器的工作方式是按存储单元的地址进行存取,这种方法称为按地址存取方法。
主存储器的最基本组成如图所示。
存储体存放二进制信息,地址寄存器(Memory Address Register, MAR)存放访问地址,经过地址译码后找到所选的存储单元。数据寄存器(Memory Data Register, MDR)用于暂存要从存储器中读或写的信息
存储体由许多存储单元组成,每个存储单元包含若干个存储元件,每个存储元件存储一位二进制0或1,因此一个存储单元可以存储一串二进制码,称这串代码为存储字(word),称这串代码的位数为存储字长,存储字长可以是1B(8bit)或者是字节的偶数倍。
MAR的位数对应着存储单元的个数(地址码长度);MDR的位数对应着存储字长
注:在现代计算机中MAR与MDR却是存在于CPU中的
**(4)运算器:**运算器是计算机的执行部分,用于进行算术运算和逻辑运算。
- 运算器的核心是算术逻辑单元(Arithmetic and Logic Unit,ALU),还包括累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、变址寄存器(IX)、基址寄存器(BR)等,前三个是必备的。
运算器内还有程序状态寄存器(PSW),也称标志寄存器,用于存放ALU运算得到的一些标志信息或处理机的状态信息,如结果是否有溢出、有无产生进位和借位、结果是否为负数。
**(5)控制器:**控制器是计算机的指挥中心,指挥各部件协调地进行工作。控制器由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成。
- PC用来存放当前欲执行指令的地址,它与主存的MAR有一条直接通路。
- IR用来存放当前的指令,其内容主要来着与主存的MDR,指令中的操作码OP(IR)会被送至CU,用以分析指令发出各种微操作命令序列,而地址码Ad(IR)送往MAR,用以取操作数。
一般将运算器和控制器集成到同一个芯片上,称为中央处理器(CPU),CPU和主存储器共同构成主机。CPU存取速度:寄存器>Cache>内存。
1.2.3 计算机软件
计算机软件,一般分为系统软件和应用软件。
1.系统软件和应用软件
-
系统软件包括 操作系统,数据库管理系统,语言处理系统(比如编译器),分布式软件系统,网络软件系统,标准库系统,服务性系统(比如连接程序)。
注意:数据库管理系统并不是数据库系统,数据库系统是指计算机系统引入数据库后的系统,一般由数据库系统,数据库管理系统,应用系统,数据库管理员构成,其中数据库管理系统才是系统软件。
-
应用软件包括各种科学计算类程序,工程设计类程序,数据统计与处理程序。
2.三个级别的语言
-
机器语言。又称二进制代码语言,需要编程人员记忆每条指令的二进制编码。机器语言是计算机唯一可以直接识别和执行的语言。
-
汇编语言。汇编语言用英文单词或其缩写代替二进制的指令代码,更容易为人们记忆和理解。使用汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为计算机的机器语言后,才能在计算机的硬件系统上执行。
-
高级语言。高级语言(如C、C++、Java等)是为方便程序设计人员写出解决问题的处理方案和解题过程的程序。通常高级语言需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序,或直接由高级语言程序翻译成机器语言程序。
将高级语言转换成机器语言的软件系统叫做翻译程序,翻译程序有以下三大类:
- 汇编程序(汇编器):将汇编语言翻译成机器语言的程序
- 解释程序(解释器):将原程序中的语句逐条按顺序翻译成机器指令并且立即执行。多次执行,每次执行的时候都要重新翻译。更灵活,更容易调试。例如 JavaScript、python
- 编译程序(编译器):将高级语言翻译成汇编语言或者机器语言程序。生成exe文件,多次执行,只需要翻译一次,效率更高。例如 C、C++
由高级语言转换到汇编语言的过程叫做编译,由汇编语言转换到机器语言的过程叫做汇编,边翻译边执行的叫做解析。
1.2.4 计算机系统的工作原理
1. 从源程序到可执行文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mdsig8V7-1681993299714)(C:\Users\29969\Desktop\typora笔记图片\计算机组成原理\源程序到可执行文件.png)]
最终可执行文件被保存在磁盘上面
可执行文件通常包括了程序的代码和数据,以及必要的元数据和链接信息。当用户双击该文件或通过命令行运行该文件时,操作系统会将其加载到内存中,并开始执行其中的机器指令,而无需再进行编译或解释。这样,程序就可以在计算机上运行。
2.指令的执行过程
IR存放当下欲执行的指令;PC存放下一条指令的地址;
MAR存放欲访问的存储单元地址;MDR存放从存储单元取来的数据!
地址译码器是主存的构成部分,不属于CPU;地址寄存器虽然一般属于主存,但是现代计算机中绝大多数CPU内集成了地址寄存器!
关于CPU存取速度的比较:寄存器(CPU内部)> Cache(高速的SRAM) > 内存 (SDRAM)
1.3 计算机性能指标
1.3.1 计算机的主要性能指标
-
字长
计算机的位数(机器字长),表示计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数。计算机字长通常选定为字节(8位)的整数倍,通常是2,4,8倍。不同的计算机,字节可能不同
注意:机器字长、指令字长、存储字长的区别和联系是什么?
机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度。 指令字长:一个指令字中包含的二进制代码的位数。 存储字长:一个存储单元存储的二进制代码的长度。等于MDR的位数, 它们都必须是字节的整数倍。 数据字长:数据总线一次能传送信息的位数,它可以不等于MDR的位数。 指令字长一般取存储字长的整数倍,若指令字长等于存储字长的2倍,则需要2次访存来取出一条指令,因此取指周期为机器周期的2倍;若指令字长等于存储字长,则取指周期等于机器周期。 早期的计算机存储字长一般和机器的指令字长与数据字长相等,因此访问一次主存便可取出一条指令或一个数据。随着计算机的发展,指令字长可变,数据字长也可变,但它们必须都是字节的整数倍。 请注意64位操作系统是指特别为64位架构的计算机而设计的操作系统,它能够利用64位处理器的优势。但64位机器既可以使用64位操作系统,又可以使用32位操作系统。而32位处理器是无法使用64位操作系统的。
-
数据通路带宽
数据总线一次所能传送信息的位数。 -
主存容量
主存储器所能存储的最大容量,通常以字节来衡量,MAR的位数反映存储单元的个数,如MAR为16位,表示存储单元为 2 16 2^{16} 216 = 65536个 ;若MDR为32位,则存储容量为:存储单元个数x存储字长( 2 16 2^{16} 216x32位(bit)或 2 16 2^{16} 216x32 /8(Byte))补充:计算机的存储单位
计算机存储单位一般用 bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB来表示,我们经常将Byte简称为B,将KB简称问K。 1、计算机存储信息的最小单位: 位 bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位。 2、计算机存储容量基本单位是字节 字节 byte:8个二进制位(bit)为一个字节(B),最常用的单位。 (我也常说一个字节占8位) 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。 英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节大小。 1B(Byte 字节)=8bit, 1KB (Kilobyte 千字节)=1024B, 1MB (Megabyte 兆字节 简称“兆”)=1024KB, 1GB (Gigabyte 吉字节 又称“千兆”)=1024MB, 1TB (Trillionbyte 万亿字节 太字节)=1024GB,其中1024=2^10 ( 2 的10次方),
-
运算速度
(1)吞吐量和响应时间
- 吞吐量:指系统在单位时间内处理请求的数量 ;从用户观点看,它是评价计算机系统性能的综合参数!
- 响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结构的等待时间
(2)主频和CPU时钟周期
-
CPU时钟周期:通常为节拍脉冲或T周期,即主频的倒数,它是CPU中最小的时间单位,每个动作至少需要1个时钟周期。(一个脉冲信号要多少秒)
-
主频(CPU时钟频率)。机器内部主时钟的频率,是衡量机器速度的重要参数。常用的CPU的主频有1.8GHz、2.4GHz、2.8GHz
1Hz表示每秒一次。(每秒多少个脉冲信号)
(3)CPI(Clock cycle Per Instruction) -
即执行一条指令所需的时钟周期数
(4)==CPU执行时间 === CPU时钟周期数(多少个时钟周期)/主频 = (指令条数xCPI)/主频
(5)IPS(Instructions Per Second) =主频/平均CPI:每秒执行多少条指令;MIPS:每秒执行多少百万条指令
(6)MFLOPS(Mega Floating-point Operations Per Second)=浮点操作次数/(执行时间x106),即每秒执行多少百万次浮点运算。(7)GFLOPS(Giga Floating-point Operations Per Second)=浮点操作次数/(执行时间x109),即每秒执行多少十亿次浮点运算。
(8)TFLOPS(Tera Floating-point Operations Per Second)=浮点操作次数/(执行时间x1012),即每秒执行多少万亿次浮点运算。