第二章計算機(jī)編程

2.1 編程語言

創(chuàng)新互聯(lián)公司于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計制作、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元迎江做網(wǎng)站,已為上家服務(wù),為迎江各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

  從本質(zhì)上來說,CPU只能運(yùn)行二進(jìn)制格式的指令,也就是CPU內(nèi)指令集限定的二進(jìn)制指令。

  如果讓程序員通過二進(jìn)制進(jìn)行編程,那就太困難了,很少有人能夠通過二進(jìn)制進(jìn)行編程。但是人類又需要很多人能夠進(jìn)行編程,所以必須讓編程代碼能夠接近人類所能理解的思維方式才行。所以編程語言有所謂高級語言和低級語言之分。

  一種編程語言離機(jī)器越近我們就說它越低級,離人越近我們就說它越高級。高級并不是說功能強(qiáng),也不是指性能強(qiáng)大,而是指它越接近于人類的自然語言。

  高級語言人類容易看懂了,但是計算機(jī)看不懂,所以要想使用高級語言寫的程序能夠在CPU中執(zhí)行,必須先將其轉(zhuǎn)換成CPU所能夠理解的二進(jìn)制指令。

第二章 計算機(jī)編程

  如圖所示,從機(jī)器到人之間通常有三層,分別為機(jī)器語言-->匯編語言(微碼語言)-->高級語言。

2.1.1 高級語言編寫的程序的執(zhí)行過程

  用高級語言編寫的程序要想執(zhí)行通常有2個過程:

    a) 把高級語言轉(zhuǎn)換成匯編語言(轉(zhuǎn)換成對應(yīng)的CPU芯片所支持的匯編語言)

    b) 把匯編語言轉(zhuǎn)換成對機(jī)器指令的調(diào)用

  如果是C語言,第一步我們稱之為編譯的過程。

  從高級語言轉(zhuǎn)換成匯編語言的過程取決于底層的CPU芯片是什么格式的。不同廠商所生產(chǎn)的不同型號的CPU是不一樣的。

2.1.2 編程語言的使用場景

  匯編語言(微碼編程):用于編寫系統(tǒng)中某些與硬件相關(guān)的特有代碼、驅(qū)動程序開發(fā)等

  高級語言C,C++:用于編寫系統(tǒng)級應(yīng)用、對性能要求非常高的應(yīng)用、驅(qū)動程序開發(fā)等

  高級語言java,python,php:用于開發(fā)應(yīng)用程序

2.2 通用軟件

2.2.1 通過軟件的背景

  上面已經(jīng)說過,不同廠商生產(chǎn)的CPU,其內(nèi)含的指令集是不一樣的。同樣,一個程序在512M內(nèi)存中運(yùn)行和在4G內(nèi)存中運(yùn)行,其所能夠使用的內(nèi)存資源也是不一樣的。因此寫程序時必須要告訴程序有多少內(nèi)存資源可以用,任何一個程序員寫任何一個程序都要考慮底層的機(jī)器是誰,是什么廠商的芯片,運(yùn)行的速度如何,擁有多少資源等等。寫一個程序是512M內(nèi)存的,就只能在512M內(nèi)存的機(jī)器上運(yùn)行,稍微換一個就不行了。這是非常麻煩的,因此,我們要達(dá)到靈活使用的目的,就必須將這些底層的差異給消除。那么如何消除這些底層的差異呢?

  比如我們要去很多個國家旅游,每個國家的語言都不一樣,若想獨(dú)自旅行就要學(xué)多種語言,若我們不會這些國家的語言就可以找個懂這些國家語言的翻譯隨行。

  同理,為了避免程序員寫程序時要應(yīng)付各種機(jī)器的不同情況,就找了一個翻譯,它本身能夠應(yīng)付各種底層的不同情況,但是向上輸出的接口是統(tǒng)一的。這就是通用軟件。

第二章 計算機(jī)編程

  通用軟件是一種將底層計算機(jī)所提供的各種計算能力給抽象為一種統(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)的接口進(jìn)行編程。如此一來就大大的簡化了編程的過程,效率自然提高了。

2.2.2 OS(Operation System)

  OS是一種通用軟件程序。

  在上一章我們說過,任何情況下,一個普通程序要想完成一個特權(quán)操作,是沒辦法直接進(jìn)行的,它必須向內(nèi)核申請。

  當(dāng)系統(tǒng)運(yùn)行起來以后,操作系統(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) 進(jìn)程管理

  c) 內(nèi)存管理

  d) 網(wǎng)絡(luò)管理

  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):把非常多的底層功能整合出來,提供成離最終目標(biāo)更近的功能

  程序員寫程序要么面向硬件規(guī)格,要么面向操作系統(tǒng)。而操作系統(tǒng)又過于底層,于是就有人把操作系統(tǒng)向上又抽象出來一層,也就是上面所說的庫調(diào)用。此時程序員編程的過程就簡化多了。

  下圖是編程層次的一個架構(gòu)圖:

第二章 計算機(jī)編程

2.3.1 ABI與API

  眾所周知,windows下的應(yīng)用程序拿到Linux下是無法運(yùn)行的。

  一個應(yīng)用程序一旦制作成了二進(jìn)制格式,其適用的操作系統(tǒng)平臺也就定下來了。編譯成了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ǒng)的應(yīng)用程序,編譯成二進(jìn)制格式以后在不同平臺是無法兼容的。但是在沒有編譯的情況下,如果應(yīng)用程序的源代碼是針對不同平臺的相同接口進(jìn)行編寫的,那么該源程序就可以跨平臺編譯。也就是說源程序可以在windows下編譯,也可以在類Unix系統(tǒng)下編譯,編譯后的二進(jìn)制程序格式是不一樣的。

  這里說的不同平臺的相同接口,這個接口是指應(yīng)用編程接口API(Application Programming Interface)。

  API是一種應(yīng)用編程接口,程序員一般都是針對API進(jìn)行編程。

  windows和linux的應(yīng)用程序格式不一樣,但是編程接口API卻可能是可以兼容的。這也就意味著,程序員在windows系統(tǒng)下以兼容模式寫的程序源代碼在linux下是兼容的。雖然源代碼是兼容的,但是一旦編譯成了二進(jìn)制格式,若是在linux下編譯的就只能在linux下運(yùn)行,若是在windows下編譯的就只能在windows下運(yùn)行。

  面向庫的編程時,程序員寫應(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ī)編程
網(wǎng)站URL:http://muchs.cn/article34/ijcdse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)、虛擬主機(jī)、做網(wǎng)站、App設(shè)計、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站