冯诺依曼体系
将程序指令和数据一起存储的计算机设计概念结构
必须有一个存储器、控制器和运算器、输入设备、输出设备
现代计算机都是冯诺依曼机
能够把需要的程序和数据送至计算机中
能够长期记忆程序、数据、中间结果及最终运算结果的能力
能够具备算数、逻辑运算和数据传送等数据加工处理的能力
能够按照要求将处理结果输出给用户
【图 早期冯诺依曼机的结构示意图】
CPU = 运算器 + 控制器
即存储器和CPU分离,导致了一个问题,称为冯诺依曼瓶颈:CPU和存储器速率之间的问题无法调和。这会导致CPU经常空转等待数据传输。
现代计算机的结构
现代计算机在冯诺依曼体系结构的基础上进行了修改
解决了CPU与存储设备之间的性能差异问题
【图 现代计算机的结构】
CPU = 运算器 + 控制器 + 存储器(主要是内存和CPU的寄存器)
解释程序和编译程序
解释程序
所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。
编译程序
这是一类很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。 编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。下面举一个四遍扫描的例子:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储分配;第四遍扫描做代码生成。
值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。
在实际应用中,对于需要经常使用的有大量计算的大型题目,采用招待速度较快的编译型的高级语言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如BASIC,这样可以大大缩短编程及调试的时间。
计算机的层次和编程语言
硬件逻辑层
门电路、触发器等逻辑电路组成,属于电子工程的领域。
微程序机器层
编程语言是微指令集,微指令所组成的微程序直接交由硬件执行。
传统机器层
编程语言是CPU指令集(机器指令),编程语言和硬件是直接相关的,不同架构的CPU使用不同的CPU指令集。
一条CPU指令(机器指令)对应一个微程序,一个微程序对应一组微指令。
操作系统层
向上提供了简易的操作界面,向下对接了指令系统,管理硬件资源。操作系统是在软件和硬件之间的适配层。
汇编语言层
编程的语言是汇编语言,汇编语言可以翻译成可直接执行的机器语言。汇编器是将汇编语言翻译为机器语言的程序。
高级语言层
高级语言层的编程语言为广大程序员所接受的高级语言,高级语言的种类达上百种,常见的高级语言有Python、Java、C/C++、Golang等。
应用层
满足计算机针对某种用途而专门设计。
分层的目的是为了便于理解,而分层并不是固定的。
计算机的计算单位
容量单位
在物理层面,高低电平记录信息,理论上只认识0/1两种状态。0/1称为bit(比特位)。但0/1能够表示的内容太少了,需要更大的容量表示方法。
字节:1 Byte = 8 bits
千字节:1 KB = 1024 B(寄存器)
兆字节:1 MB = 1024 KB(高速缓存)
吉字节:1 GB = 1024 MB(内存/硬盘)
太字节:1 TB = 1024 GB(硬盘)
拍字节:1 PB = 1024 TB(云硬盘)
艾字节:1 EB = 1024 PB(数据仓库)
为什么网上买的移动硬盘500G,格式化之后就只剩465G了?因为硬盘商一般用10进制标记容量。
速度单位
网络速度:如100M即100Mbps
为什么电信拉的100M光线,测试峰值速度只有12M每秒?因为网络常用单位为Mbps。
CPU速度
CPU的速度一般体现为CPU的时钟频率,CPU的时钟频率的单位一般是赫兹(Hz),主流CPU的时钟频率都在2GHz以上。Hz并不是描述计算机领域所专有的单位。
2GHZ = 2 × (103)3 = 每秒20亿次
计算机的字符与编码集
ASCII码和Extended ASCII码
ASCII码用7bit即可表示,但后来对其进行了扩充,用8bit表示,就有了Extended ASCII码。
中文编码集
GB2312 即 《信息交换用汉字编码字符集——基本集》,一共收录了7445个字符,包括6763个汉字和682个其它符号。
GBK 即 《汉字内码扩展规范》 ,向下兼容GB2312,向上支持ISO标准,收录了21003个汉字,支持全部中日韩汉字。
Unicode:统一码、万国码、单一码,Unicode定义了世界通用的符号集,UTF-*实现了编码,UTF-8以字节为单位对Unicode进行编码。编程推荐使用UTF-8编码,Windows系统默认使用GBK编码。