计算机系统层次结构
编译语言发展历史
首先,我们要了解一下编程语言的发展历史。
- 机器语言(0101 硬件层面)
人们最早使用的编程语言就是机器语言。从上一篇文章我们可以得知,第一台计算机ENIAC的工作方式很复杂,程序员通过插拔电线来向计算机输入指令,而插拔电线这一过程实际上就是向计算机输入二进制代码(0,1)的过程。可以设想一下,一大长串0,1组合机器可以理解,但是人看了之后很容易不知所云。故会出现 “汇编语言”。 - 汇编语言(add助记符 软件层面)
汇编语言说简单点就是将机器语言的0101包装成人们认识的单词,比如用“add”代替机器语言操作码表示加法操作。人们可以利用汇编语言更加方便的编写代码,但是在执行时计算机不会直接识别汇编语言。计算机会有一个翻译的过程,即将我们编写的汇编语言翻译成计算机认识的机器语言进行执行。汇编语言的出现,极大提升了编程人员的工作效率。但是由于汇编语言仍然是面向机器的语言,所以仍然是低效的语言。故 “高级语言” 应运而生 - 高级语言(C,Cpp,java,python 软件层面)
什么是高级语言?它和汇编语言有什么区别?
- 有流程控制语句(顺序,循环,选择)
- 存在函数(子程序)
- 存在局部变量
第一个出现的高级语言是B语言,但是B语言有好多不足之处,经过一段时间的改进后诞生了大名鼎鼎的C语言,直到今天C语言仍然很受欢迎。但是C语言是面向过程编程思想,为了让编程人员更加方便,诞生出了 “面向对象” 编程思想(C++,C#,java)。
高级语言在运行时,计算机首先将高级语言翻译成汇编语言,然后再将汇编语言翻译成机器语言,这样计算机才可以理解编程人员的指令。
在这里从上之下为底层 到 顶层,每一种语言都需要由顶层至底层进行翻译。高级语言可以通过一些手段跳过编译语言直接翻译成机器语言(解释器,编译器)。底层是顶层的基础,顶层是底层的扩展。
解释器:又称为解释程序。将源程序的一条语句翻译成对应于机器语言的语句,并立即执行。紧接着再翻译下一句(每次执行都要翻译)eg:Javascript,Python
编译器:又称为编译程序。将高级语言编写的源代码全部语句一次全部翻译成机器语言程序,而后再执行机器语言程序(只需要翻译一次)eg:.exe文件
注 : 编译、汇编、解释程序,可以统称为”翻译程序“ 。作用都是将更高级的语言转变成更低级的语言有助于计算机的理解。
计算机五层结构
根据以上所述三个级别语言的应用,我们可以将计算机划分成五层结构
- M4:高级机器语言(执行高级语言)
- M3:汇编语言机器(执行汇编语言)
- M2:操作系统语言(向上提供广义指令)
- M1:传统机器(执行机器语言指令)
- M0:微程序机器(执行微指令)
在这里需要解释一下 M2操作系统语言 和 M0微程序语言
M2:当我们使用汇编语言进行翻译时,我们需要向操作系统请求一些服务。所以在汇编语言机器的下方需要添加上操作系统语言来完善语言翻译结构。
M0:上一篇文章讲过,对于小小的一个“取数”操作,我们可以将这一条指令分解成9步进行执行,这9步相当于将机器语言拆分成9条微指令进行执行。
计算机性能指标
存储器
我们上一篇文章提到,存储器由三部分组成,他们分别是
- 存储体
- MAR :MAR位数反应存储单元的个数
- MDR:MDR位数 = 存储字长 = 每个存储单元的大小
总容量 = 存储单元个数 * 存储字长 bit(位)
总容量 = 存储单元个数 * 存储字长 / 8 Byte(字节)
1 Byte = 8 bit (一个字节占八位)
eg:MAR为32位,MDR为8位
总容量 = 232 * 8 bit = 4GB
CPU(运算器 + 控制器)
在这里我们需要了解几个概念:
- CPU主频:CPU内数字脉冲信号震荡的频率(eg:买电脑的时候选择CPU规格通常有 xGHz ,这个单位即CPU主频。简单来说,主频就是计算机在执行指令时的节奏。节奏越快,运行效率也就越快。所以主频越高,CPU效率越高)
- CPU时钟周期 = 1 / CPU主频
- CPI(Clock cycle Per Instruction):执行一条指令所需的时钟周期数
- IPS(Instructions Per Second):每秒执行多少指令(IPS = 主频 / 平均CPI)
- FLOPS(Floating-point Operations Per Second):每秒执行多少次浮点运算
执行一条指令的耗时 : CPI * CPU时钟周期
eg: 某CPU主频为1000Hz,某程序包含100条指令,平均来看指令的CPU = 3,该程序在该CPU上执行需要多久?
time = 100条指令 * 3个时钟周期 * 1/1000CPU时钟周期 = 0.3S
CPU执行时间(整个程序的耗时 )= CPU时钟周期数 / 主频 = (指令条数 * CPI) / 主频
系统整体性能
- 数据通路带宽:数据总线一次所能并行传送信息的位数(各个硬件部件通过数据总线传输数据)
- 吞吐量:指系统在单位时间内处理请求的数量。(它取决于信息能多块的输入内存,CPU能多快的从内存去除或存入,以及所得结果能多块的从内存送给一台外部设备。吞吐量主要取决于内存的存取时间)
- 响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要的结果的等待时间(通常包括CPU运行一个程序花费的时间以及各种等待时间,等待时间通常用于磁盘的访问,存储器的访问,I/O操作,操作系统开销等等)
今天的复习笔记先到这里,我们下次再见~