计算机语言与硬件相关,搞懂程序语言与计算机硬件的关系
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
1B
0
1
0
1A and B
0
0
0
1
或門
ABA or B
0
0
1
10
1
0
10
1
1
1
與非門
A
0
0
1
1B
0
1
0
1A nand B
1
1
1
0
或非門
A
0
0
1
1B
0
1
0
1A nor B
1
0
0
0
異或門
A
0
0
1
1B
0
1
0
1A xor B
0
1
1
0
非門
A
0
1not 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
1Y
0
0
1
1
0
0
1
1Z
0
1
0
1
0
1
0
1A
1
1
0
0
1
1
0
0B
0
0
1
0
0
0
1
0C
1
1
1
1
1
1
0
1輸出
0
0
0
0
0
0
1
0
1.7 集成電路
通過邏輯門的任意組合可以形成各類邏輯電路,如鎖存器,觸發器,時鐘等。
鎖存器
可以通過一個開關,打開開關后,輸入的值可以直接連接到輸出,關閉開關后,輸入的值無效,從而可以保留上一次輸出的值,這樣的話,多個鎖存器組合起來就可以實現寄存器了。
觸發器
連續相同的輸入可以被忽略,只有當輸入發生變化時,觸發器才會響應輸出,例如0變成1,1變成0,觸發器將會觸發,如果輸入連續不變,則觸發器不會觸發,可以通過觸發器實現二進制計數器,譯碼器等。
時鐘
可以通過非門實現,非門的輸出作為輸入,就可以形成連續的0101,持續不斷地發送電路信號。
將任意個邏輯電路進行組合集成就是集成電路,可以形成諸如寄存器,ALU(邏輯算數單元),時鐘等,這些設計就比較復雜了,不再詳述。
總結
以上是生活随笔為你收集整理的计算机语言与硬件相关,搞懂程序语言与计算机硬件的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机硬件之间是怎样联系的,计算机硬件系
- 下一篇: 正点原子minifly学习