您好,登錄后才能下訂單哦!
2.1 編程語言
從本質(zhì)上來說,CPU只能運行二進制格式的指令,也就是CPU內(nèi)指令集限定的二進制指令。
如果讓程序員通過二進制進行編程,那就太困難了,很少有人能夠通過二進制進行編程。但是人類又需要很多人能夠進行編程,所以必須讓編程代碼能夠接近人類所能理解的思維方式才行。所以編程語言有所謂高級語言和低級語言之分。
一種編程語言離機器越近我們就說它越低級,離人越近我們就說它越高級。高級并不是說功能強,也不是指性能強大,而是指它越接近于人類的自然語言。
高級語言人類容易看懂了,但是計算機看不懂,所以要想使用高級語言寫的程序能夠在CPU中執(zhí)行,必須先將其轉(zhuǎn)換成CPU所能夠理解的二進制指令。
如圖所示,從機器到人之間通常有三層,分別為機器語言-->匯編語言(微碼語言)-->高級語言。
2.1.1 高級語言編寫的程序的執(zhí)行過程
用高級語言編寫的程序要想執(zhí)行通常有2個過程:
a) 把高級語言轉(zhuǎn)換成匯編語言(轉(zhuǎn)換成對應的CPU芯片所支持的匯編語言)
b) 把匯編語言轉(zhuǎn)換成對機器指令的調(diào)用
如果是C語言,第一步我們稱之為編譯的過程。
從高級語言轉(zhuǎn)換成匯編語言的過程取決于底層的CPU芯片是什么格式的。不同廠商所生產(chǎn)的不同型號的CPU是不一樣的。
2.1.2 編程語言的使用場景
匯編語言(微碼編程):用于編寫系統(tǒng)中某些與硬件相關的特有代碼、驅(qū)動程序開發(fā)等
高級語言C,C++:用于編寫系統(tǒng)級應用、對性能要求非常高的應用、驅(qū)動程序開發(fā)等
高級語言java,python,php:用于開發(fā)應用程序
2.2 通用軟件
2.2.1 通過軟件的背景
上面已經(jīng)說過,不同廠商生產(chǎn)的CPU,其內(nèi)含的指令集是不一樣的。同樣,一個程序在512M內(nèi)存中運行和在4G內(nèi)存中運行,其所能夠使用的內(nèi)存資源也是不一樣的。因此寫程序時必須要告訴程序有多少內(nèi)存資源可以用,任何一個程序員寫任何一個程序都要考慮底層的機器是誰,是什么廠商的芯片,運行的速度如何,擁有多少資源等等。寫一個程序是512M內(nèi)存的,就只能在512M內(nèi)存的機器上運行,稍微換一個就不行了。這是非常麻煩的,因此,我們要達到靈活使用的目的,就必須將這些底層的差異給消除。那么如何消除這些底層的差異呢?
比如我們要去很多個國家旅游,每個國家的語言都不一樣,若想獨自旅行就要學多種語言,若我們不會這些國家的語言就可以找個懂這些國家語言的翻譯隨行。
同理,為了避免程序員寫程序時要應付各種機器的不同情況,就找了一個翻譯,它本身能夠應付各種底層的不同情況,但是向上輸出的接口是統(tǒng)一的。這就是通用軟件。
通用軟件是一種將底層計算機所提供的各種計算能力給抽象為一種統(tǒng)一接口的程序。無論底層是AMD的CPU還是Intel的CPU,都可以統(tǒng)一成一種提供計算能力的接口。無論內(nèi)存是多少G的,統(tǒng)一規(guī)定32位系統(tǒng)最多支持4G內(nèi)存,64位系統(tǒng)最多支持4G個4G的內(nèi)存。
有了通用軟件(操作系統(tǒng))以后,程序員寫程序就不用考慮底層的實現(xiàn)了,只需要針對操作系統(tǒng)的接口進行編程。如此一來就大大的簡化了編程的過程,效率自然提高了。
2.2.2 OS(Operation System)
OS是一種通用軟件程序。
在上一章我們說過,任何情況下,一個普通程序要想完成一個特權(quán)操作,是沒辦法直接進行的,它必須向內(nèi)核申請。
當系統(tǒng)運行起來以后,操作系統(tǒng)隨時監(jiān)控在特權(quán)指令上,一旦發(fā)現(xiàn)有要執(zhí)行特權(quán)指令的程序,只能向操作系統(tǒng)發(fā)請求,由操作系統(tǒng)代理完成特權(quán)操作。所以操作系統(tǒng)必須能夠隨時接收程序發(fā)來的請求。那么操作系統(tǒng)允許接收哪些請求呢?以下這些就是操作系統(tǒng)完成的工作:
a) 硬件驅(qū)動
b) 進程管理
c) 內(nèi)存管理
d) 網(wǎng)絡管理
e) 安全管理
每一個被操作系統(tǒng)所允許接收的請求,都稱之為系統(tǒng)調(diào)用(System Call)。
2.3 編程層次
硬件規(guī)格(hardware specifiacation):面向硬件編程
系統(tǒng)調(diào)用(system call):面向操作系統(tǒng)編程
庫調(diào)用(library call):把非常多的底層功能整合出來,提供成離最終目標更近的功能
程序員寫程序要么面向硬件規(guī)格,要么面向操作系統(tǒng)。而操作系統(tǒng)又過于底層,于是就有人把操作系統(tǒng)向上又抽象出來一層,也就是上面所說的庫調(diào)用。此時程序員編程的過程就簡化多了。
下圖是編程層次的一個架構(gòu)圖:
2.3.1 ABI與API
眾所周知,windows下的應用程序拿到Linux下是無法運行的。
一個應用程序一旦制作成了二進制格式,其適用的操作系統(tǒng)平臺也就定下來了。編譯成了exe格式的就只能在windows下運行,編譯成了elf格式的就只能在類Unix的系統(tǒng)下運行。這是由應用二進制接口規(guī)定的,也就是ABI(Application Binary Interface)
ABI是一種操作系統(tǒng)接口格式,是一種規(guī)范,定義了系統(tǒng)平臺所屬。
面向不同操作系統(tǒng)的應用程序,編譯成二進制格式以后在不同平臺是無法兼容的。但是在沒有編譯的情況下,如果應用程序的源代碼是針對不同平臺的相同接口進行編寫的,那么該源程序就可以跨平臺編譯。也就是說源程序可以在windows下編譯,也可以在類Unix系統(tǒng)下編譯,編譯后的二進制程序格式是不一樣的。
這里說的不同平臺的相同接口,這個接口是指應用編程接口API(Application Programming Interface)。
API是一種應用編程接口,程序員一般都是針對API進行編程。
windows和linux的應用程序格式不一樣,但是編程接口API卻可能是可以兼容的。這也就意味著,程序員在windows系統(tǒng)下以兼容模式寫的程序源代碼在linux下是兼容的。雖然源代碼是兼容的,但是一旦編譯成了二進制格式,若是在linux下編譯的就只能在linux下運行,若是在windows下編譯的就只能在windows下運行。
面向庫的編程時,程序員寫應用程序源代碼是面向API進行的,一旦編譯成二進制格式了,就是面向ABI了。
2.3.2 UI(User Interface)
GUI(Graphic User Interface):圖形用戶接口,如windows桌面
CLI(Command Line Interface):命令行接口,如Unix/Linux下的命令行終端
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。