核心理念:人类世界与计算机世界的异同
- 人类世界
- 直观感受
- 数学
- 计算机世界
- 与数学不同,存储首先,各层次与现实世界不同
我们关注点是差异点!
一样的你就不用关心了,关心差异!差异在哪里呢?
- 计算机存储是首先了
- 编译器规则
- 编码转换规则
- ……
计算机这个工具,最重要的就是将人类思维产物,使用计算机实现。
因此说,有很多地方,是直接可以直观地去实现逻辑思维过程的(语义上就能理解),但是也有计算机的一些特点,需要我们专门去把握(从计算机本身处理方式和规则去理解)!
面向机器描述,机器级语言:机器语言和汇编语言
二者都是面向机器结构的语言,与机器有关,不同机器(不同的系统结构)就不一样了,移植性不好。
面向算法描述:高级语言
根据人的逻辑思维方式,产生的产物来编程,越来越接近人类思考方式。机器无关!因为内些部分交给编译器处理了,编译器来完成机器相关性的处理,这也是一种封装。
执行hello world程序
这里值得注意的关键点是缓存技术,我们将存储器进行分层设计,从而 平衡了存储的容量、速度和价格等多方面因素:
- 缓存1:磁盘存储可执行程序的二进制信息,速度慢容量大价格低
- 缓存2:执行程序的时候调入内存中,速度比磁盘快的多
- 缓存3:内存中的二进制代码调入cache中,速度更快
- 缓存4:cache内容调入到CPU寄存器中,速度最快
我们可以体会到,计算机通过多层次缓存完成了程序的一步步缓冲,通过CPU控制它们,从而有了我们现在看见的计算机系统。
使用高级语言开发程序需要的环境
早期原始程序开发方式
早期没有高级语言,也没有那么多的复杂上层环境,我们只需要直接使用汇编语言/机器语言输入到计算机中执行即可,这个过程,对于计算机来说很简单,也不需要有太多复杂的处理,但是对于人类来说,编程是一件非常痛苦的事情啊……
现代高级语言程序开发方式
高级语言的但是,解决了汇编语言开发时代的困难,不过也因此,计算机需要处理的工作复杂起来了,也就是,人类世界通往计算机世界的通道变复杂了。
那么这里都具体包括了什么呢,我们依次说明一下
人类世界:高级语言
我们发明高级语言,其实是一种对计算机的权衡与妥协。
高级语言
- 相对来说比较符合人类思维,虽然不是自然语言,但是人类也容易接受
- 计算机也容易接受高级语言,如果是自然语言,那计算机是接受不了的
权衡之下,高级语言成了人类与计算机世界沟通的通行语言。就像英语是国际通行语言内样。
任何事务都有实体和抽象,人类的是:
- 实体:人类的肉体
- 抽象:高级语言
桥梁/通道
桥梁和通道,也可以叫翻译官,它负责连接人类世界和计算机世界
- 传入和转换
- 传入:键盘,鼠标
- 通过键盘和鼠标,还有文本编辑器,我们就能够往计算机中输入高级语言并存储在磁盘中 ,完成源程序的编辑
- 转换:人类世界传入的,它给转换成计算机世界能够接受的
- 对于源程序,我们需要进行一系列的转换,最终将其转换为二进制
- 源程序 –编译器–> 汇编代码 –汇编器–> 可重定位二进制 –链接–> 二进制的可执行文件
- 传入:键盘,鼠标
- 传出和转换
- 传出:显示器
- 计算机传出信息,通过显示器转换为人类可以识别的信息
- 转换:计算机世界传出的,它给转换为人类世界能够接受的
- 传出:显示器
它的实体和抽象是
- 实体:键盘、鼠标、显示器、存储器…
- 抽象:转换逻辑(逻辑的实现构成了编译器、汇编器等)
计算机世界:二进制的世界
计算机世界是最终处理二进制指令和数据的地方。
- 实体:CPU
- 抽象:ISA,指令集架构
大管家:操作系统
操作系统负责接收CPU发出的控制信号,负责管理计算机世界以及桥梁的各种控制方式。
操作系统也接收人类世界发出的命令,让计算机执行,也就是人机接口。
计算机的发展:抽象层次不断提高
ISA是计算机硬件的抽象。
ISA与微架构
微架构就是指令集架构的实现形式,是硬件实现。同一个ISA,可以有不同的微架构来实现,只要完成了ISA规范即可。
不同指令的组合,实现了通用计算机,否则,如果只能是固定的程序,那就是专用计算机了,就像现在的量子计算机“九章”一样,是专用量子计算机,是不可编程的。
先设计,再实现;先抽象,再具象
对于计算机的发展过程来说,是自底向上一层层抽象和封装的。
但是对于程序员来说,通常是先设计,再实现,也就是从人类思维出发,先完成抽象,再进行实现的,是自上而下的。当然这不是绝对是,人类的思维过程更多会受到整体性的、系统思维的影响。
计算机层次结构
ISA是最重要的层次,它向下影响硬件结构,向上影响操作系统等。
指令集架构是计算机硬件结构的抽象,然后,对于抽象出来是指令,我们可以对其进行各种排列组合,根据人类的抽象思维,来编写程序,让硬件运行起来,指令是可以有各种排列组合的,这也就是通用计算机。
我们编写的程序,如果直接运行,那就只有3层结构,是最原始的通用计算机。
后来人类发明了助记符,形成了汇编语言,它与机器语言一一对应,但是需要翻译,因此需要汇编器,人类需要编辑汇编指令,也需要管理,因此就初代的操作系统,此时,一个能够实现汇编语言程序设计的二代计算机就诞生了。
再后来,操作系统演变更加复杂,同时高级语言和编译器也有了,这是现代经典计算机雏形。
计算机的发展,实现了一层层的抽象和封装,让人类成了会飞的汤姆猫。
这没什么不好的,但是身为计算机专业人士,我们需要足够了解底层机制,如果哪一天帮助飞行的火箭不好用了,我们也能分析原因并处理。
- 指令集架构ISA是对计算机硬件的抽象
- 操作系统是对ISA的抽象和保护,它对外仅提供API
- 编译器汇编器,以及编程语言,调用了操作系统的接口,也就是它提供的系统调用,完成了高级语言的库函数,对程序员进行了进一步封装
- 程序员现在更多需要关注的是做什么,而不是怎么做,因为大多的功能都被足够的优化和封装了,人类,就应该更多思考人类该做的事情,机器能做的让它自动做,人类就不用思考了,但是,人类必须懂机器在做的事情,这本身就是人类发明的,不懂底层,干啥啥不行。
ISA
ISA说白了就是规范,人们都要按照这个规范去设计计算机硬件和软件,从而让所有遵循规范的人能够互通有无,提高沟通效率。编程语言是唯一全球化的通用语言,这非常酷!
微架构
至于微架构,就是ISA的硬件实现,只需要指定,同样的ISA,可以使用各种各样的微架构实现,这很好理解不是吗,就好比单周期CPU和流水线CPU内样,或者一个乘法指令可以有很多具体实现方式。