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