分享

搞懂程序语言与计算机硬件的关系

 幽州浅水 2021-03-29

IT行业程序开发使用到了很多种高级语言比如Java,C,Python,JavaScript,也有个别领域用到了低级语言即汇编语言,这些都是程序语言,程序语言就是人类能够理解的语言,计算机硬件也有语言即机器指令,这些机器指令只有机器能够理解。

下面我整理了下程序语言与计算机硬件的层次,梳理一下,就叫做计算机层次结构吧(事先声明:下文介绍的主要PC机器,服务器,手机的计算机层次结构,其他类型的计算机(超级计算机,量子计算机,模拟计算机等)层次结构会有不同,不做介绍)。

计算机层次结构

计算机层次结构表示的从应用软件级别到晶体管级别的层次结构,如下图所示,左侧为对应层级的相关从业人员或者使用人员,右侧为层次之间的构成情况,如下图所示

搞懂程序语言与计算机硬件的关系

计算机层次结构

1.1应用

这个不必细说,目前我们用到的QQ,微信,支付宝,各类企业应用都属于这一层。

1.2 高级语言

高级语言不涉及计算机底层硬件,所以你开发好的程序,经过合适的编译器编译后(当然也得有),可以在任何计算机硬件上运行。

程序语言有C,Java,Phthon等几十种,每一种都有它的应用场景,下面简单介绍C,Java,Phthon的使用场景。

C语言是高级语言中最底层的,在高级语言中效率也是最高的,主要是用于操作系统,网络协议,驱动程序,监控系统等性能要求比较高的领域,所谓C生万物,几乎所有的其他高级语言的编译器都是基于C实现的,所以C语言可以认为是其他高级语言的祖宗。

Java语言属于一种解释性和编译性都具备的语言,在一些大型的企业应用,网站用得比较多,通过虚拟机,由虚拟机将Java字节码翻译成机器指令。

Phthon语言属于一种解释性语言,与Java类似,它也有自己的解释器,将python文件翻译为机器指令,python主要用于一些数据计算,分析,人工智能,运维领域,这门语言简单,好学,不懂计算机知识的人,也可以很快入门。

1.3 低级语言

低级语言即汇编语言, 高级语言通过合适的汇编器就可以被翻译成汇编语言,汇编语言是程序语言中最底层了,它与计算机硬件相关,每类计算机硬件(相同的指令集架构的硬件可以归为一类)都有各自的汇编语言,例如基于X86 64位的汇编语言,基于ARM的汇编语言,这里所说的X86,ARM指的是指令集体系架构,下个章节会讲到。

汇编语言由于跟计算机硬件是一对一的,紧密关联的,因此通常用于一些跟底层硬件紧密相关的开发工作,目的就是充分发挥这些硬件的优势,比如用C语言开发操作系统时,会用到一些汇编指令,这些汇编指令是某类计算机硬件独有的,通过这些汇编指令,能高效地利用这类计算机硬件的优势,因此汇编语言不能跨硬件。

1.4 机器指令/微体系架构

机器指令是二进制指令,指令的长度通常跟硬件的位数相同,例如X86 64位就表示机器指令的长度是64位,高级语言可以直接通过编译器翻译成机器指令,也可以先通过汇编器翻译成汇编语言,然后再将汇编语言翻译成机器指令,再就是对于一些解释性语言如Java,可以通过编译器翻译为中间指令(字节码),Java的解释器可以解释这些中间指令为机器指令,如下图为C语言和Java语言的编译和解释过程。

搞懂程序语言与计算机硬件的关系

C语言的编译过程

搞懂程序语言与计算机硬件的关系

Java语言解释过程

微体系架构是什么呢,先来说说指令集体系架构(ISA)吧,指令集体系架构就是从汇编程序员的角度看计算机硬件,即计算机硬件提供些什么机器指令,有多少种指令,每种指令的格式,数据和指令的长度(64位还是32位),有哪些寄存器存储临时数据,数据以什么样的方式进行存储等,它是一套标准规范。

微体系架构就是指令集体系架构的具体实现,汇编程序员只知道采用 ADD P,Q,N的汇编指令可以实现加法运算,不需要考虑它是怎么实现的,具体实现由微体系架构进行处理。

1.5 晶体管

晶体管是一种控制电流流动的装置,其实就是一个开关,打开开关,电流通了,关闭开关,电流断了,怎么来打开和关闭开关呢,是通过电子的方式来实现的,主要原理就是通过在晶体硅的基础上,利用P型和N型,氧化硅(一种绝缘玻璃)以及晶体管连接到其他部分的金属导线,形成MOSFET电路,是不是有点抽象,可以忽略这个概念,只要明白晶体管就是一个电子开关就可以了,看下图

搞懂程序语言与计算机硬件的关系

正极晶体管

当栅极加正电压时,源极与漏极之间的电阻减小,电流从源极流向漏极。

搞懂程序语言与计算机硬件的关系

负极晶体管

当栅极加负电压时,源极与漏极之间的电阻减小,电流从源极流向漏极。

所以可以根据这两类晶体管互相连接,形成各类的逻辑门,以非门为例

搞懂程序语言与计算机硬件的关系

非逻辑门

当输入1电压即正电压时,下方的晶体管电流通过,零电压输出,所以输出0。

当输入0电压即负电压时,上方的晶体管电流通过,正电压输出,所以输出1。

其他逻辑门不再阐述,都是通过晶体管连接而成。

1.6 逻辑门

正如1.5章节说的,晶体管有两种状态,要么有电流通过,要么没有电流通过,因此可以通过这两种状态进行任意的逻辑组合,可以形成与门,或门,与非门,或非门,非门,异或门等常用的逻辑门。

搞懂程序语言与计算机硬件的关系

与门

A

0

0

1

1

B

0

1

0

1

A and B

0

0

0

1

搞懂程序语言与计算机硬件的关系

或门

A

B

A or B

0

0

1

1

0

1

0

1

0

1

1

1

搞懂程序语言与计算机硬件的关系

与非门

A

0

0

1

1

B

0

1

0

1

A nand B

1

1

1

0

搞懂程序语言与计算机硬件的关系

或非门

A

0

0

1

1

B

0

1

0

1

A nor B

1

0

0

0

搞懂程序语言与计算机硬件的关系

异或门

A

0

0

1

1

B

0

1

0

1

A xor B

0

1

1

0

搞懂程序语言与计算机硬件的关系

非门

A

0

1

not A

1

0

逻辑门可以进行任意连组合,如下图

搞懂程序语言与计算机硬件的关系

任意逻辑门组合

上图有3个输入即X,Y,Z,它的布尔表达式为

X and (Z nor (not Y))

将或非逻辑门转化后即 X and not (Z or (not Y)),它的输出真值表为

X

0

0

0

0

1

1

1

1

Y

0

0

1

1

0

0

1

1

Z

0

1

0

1

0

1

0

1

A

1

1

0

0

1

1

0

0

B

0

0

1

0

0

0

1

0

C

1

1

1

1

1

1

0

1

输出

0

0

0

0

0

0

1

0

1.7 集成电路

通过逻辑门的任意组合可以形成各类逻辑电路,如锁存器,触发器,时钟等。

锁存器

可以通过一个开关,打开开关后,输入的值可以直接连接到输出,关闭开关后,输入的值无效,从而可以保留上一次输出的值,这样的话,多个锁存器组合起来就可以实现寄存器了。

触发器

连续相同的输入可以被忽略,只有当输入发生变化时,触发器才会响应输出,例如0变成1,1变成0,触发器将会触发,如果输入连续不变,则触发器不会触发,可以通过触发器实现二进制计数器,译码器等。

时钟

可以通过非门实现,非门的输出作为输入,就可以形成连续的0101,持续不断地发送电路信号。

将任意个逻辑电路进行组合集成就是集成电路,可以形成诸如寄存器,ALU(逻辑算数单元),时钟等,这些设计就比较复杂了,不再详述。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多