计算与计算机

  从千年前的石器时代、青铜器时代、铁器时代到近现代的蒸汽时代、电气时代、原子时代再到如今的信息时代,人类工具经过了一代又一代的发展,使得社会资源也得到了大大提升(感谢先人们的智慧),信息时代的工具载体是我们早已习以为常的计算机,俗话说:工欲善其事,必先利其器,了解下计算机的基础概念原理还是很有必要的。

可计算性

  在数学中,可计算性是函数的一个特性;在计算机中,可计算性是指一个实际问题能否用计算机来解决。在计算机还没发明出以前,也是有计算装置的,比如算盘(计算内容比较定向),还有我们的大脑也可以说是一个计算装置。
计算的实现可以抽象为三点:1.对语言的理解和解释(interpretation)2.记录规则、过程及中间结果(memory)3.这个过程可以被执行,可以在不同的过程中切换(programmable)。现在的计算机就是一个通用计算装置,它拥有符号解释功能、过程记忆功能以及可编程功能。
计算思维是将现实问题用算法程序实现,这些程序可以被计算机自动的执行,也就是抽象+自动化。对程序员来说培养计算思维也是相当重要的,我们用代码实现需求,不能只像解数学应用题,还应该尽可能提炼出可复用的基层的一些东西,这么看,抽象能力决定了编程能力。

图灵机

通用计算机的概念最早是由“祖师爷”图灵提出(有一部讲图灵的电影《模仿游戏》,有一个场景,凯拉奈特利演的琼克拉克看到图灵正在制作的机器,惊讶的说,‘你是想做通用计算机?’),通用计算机有数据多样性和程序多样性的特点。
“图灵机”的工作原理:用一条可以无限延展的输入纸带存储指令,有个状态控制器来进行状态转换,能控制纸带上读写头的移动及操作。

冯诺伊曼体系结构

“计算机之父”冯诺伊曼造出了第一台通用计算机ENIAC,它奠定了现代计算机的设计思想:采用二进制;能存储程序并按照程序顺序执行。由于计算机需要可以长期存储输入程序及数据,自动化处理算术运算逻辑运算、控制程序的走向,将结果输出给用户,冯氏结构计算机有五大组成部件存储器 运算器 控制器 输入设备 输出设备。(冯诺伊曼不仅在计算机领域有超凡的成就,在其他领域——逻辑学、物理、化学、金融等也都是大佬级存在,看透世界本质的人啊。膜拜orz。

现代微机结构

冯氏结构一直延续到今天,当代微机结构的核心也是根据其实现。现代计算机主要结构为:CPU+内存+主板+外设(辅存、输入输出设备)。
cpu通过内部总线连接集成了控制单元CU、运算逻辑单元ALU、寄存器Register
寄存器容量很小,包括通用寄存器(存储单元)和专用寄存器,通用寄存器存储原始数据、中间结果等,专用寄存器存储计算机当前状态。因其在cpu内部,访问寄存器的速度>内存速度>硬盘>外部辅存(u盘等)。
控制单元的功能是分析指令、传送指令及数据、产生时序逻辑来控制和协调整个cpu工作。内部包括:程序计数器PC(下条指令地址,自加1)+指令寄存器IR(当前执行指令)+指令译码器ID(根据IR内容决定进行何种操作)+操作控制器OC(取指令、取数、控制alu)。cpu的工作就是循环执行指令,一条指令的执行时间为指令周期:取指令-> 译码-> 执行-> 写结果,每一个步骤称为一个节拍。cpu工作的最小时间单位为时钟周期,一个节拍可能花费多个时钟周期,如取指令花费3个时钟周期,时钟频率(主频)=1/时钟周期。
运算逻辑单元ALU:电路实现算术运算和逻辑运算& | ~等。
多核cpu是指一个cpu内包含多个运算单元和控制单元,可共享寄存器。
主存单元是一系列存储数据的单元格,数据按字节顺序存放在单元格中。存储容量=单元格数x每单元的字节数。如32位地址长度,最多的存储容量位2^32,即4gb(满格)。主存地址是从0开始递增的主存单元编号,访问主存就是通过读写主存地址读写单元数据,至少有1字节。

操作系统

在硬件之上,有操作系统来对硬件资源进行管理,包括调度cpu、封装硬件操作,相当于我们和计算机底层硬件中的抹平层。操作系统有两大接口:人机接口+api接口,方便使用。四大任务:进程管理、文件管理、存储管理、设备管理
进程管理就是对cpu的管理,每个运行的程序就是一个进程,操作系统通过进程控制块(pcb)来存储记录当前进程信息:pid、特征(系统or用户进程)、状态(阻塞、就绪or运行中,状态依赖寄存器中内容)、优先级、通信信息(进程间通信关系)、现场保护区、资源分配信息、进程实体信息(程序路径和名称)及其他信息。进程是cpu分配资源的单位,线程是资源使用最小单位,同一个进程的线程共用cpu分配的资源。操作系统的特征是并发和共享,进程调度策略也有很多:先来先读、时间片轮转法、优先级法(抢占式、非抢占式-就绪等待队列首部)、多级反馈队列轮转。
文件管理主要是管理文件内容及属性信息。
计算机开机后会首先复位,然后加载操作系统到内存中,一般内存地址0~某位都是操作系统(bios)。

点击程序运行时发生了什么?

鼠标点击程序图标后,操作系统先从硬盘拷贝预存好的程序指令到内存中,cpu再从内存中读取程序指令并执行。cpu不能直接访问硬盘,必须要经过内存,所以有些大型游戏会对内存容量有很高要求。

程序及语言

程序=指令+数据
机器语言是指计算机可执行的01代码,指令是用机器语言描述的一系列操作,指令集/指令系统:cpu所执行的机器指令集合,包含有操作指令、控制指令、数据移动指令。每个cpu支持的指令集可能不一样,但大多数都支持x86指令集。汇编语言是将机器语言符号化,能被翻译成机器码。高级语言,独立于硬件,面向过程或对象,更接近人类自然语言或数学语言,我们日常的编程语言就是高级语言了,c、c++、js、java、python等。不同高级语言或设计思想或应用场景都有所不同,但像小程序一点技术提升却衍生出N家语言,简直是退化逆向发展,恶心程序员啊,如果有技术协会搞个统一协议就好了。
存储程序的抽象实现过程:编程语言->机器语言->存储硬盘。

最后

  摩尔定律表述计算机效率每18个月翻一倍,得益于硬件的快速发展,现代计算机的变化可谓是日新月异,但其核心原理没有变,深入了解其核心原理,能帮助我们更好的理解拥抱变化,与时俱进。