摘要:偉大的語(yǔ)言希望到目前為止你還沒(méi)有暈,到這里我們知道了,不管我們用的是什么的也好最終都逃不出等語(yǔ)言除外,不直接執(zhí)行之類的解釋型語(yǔ)言程序,可以直接執(zhí)行的是解釋器代碼,解釋器最終來(lái)執(zhí)行等程序,這就是解釋型語(yǔ)言效率不如編譯型語(yǔ)言效率高的原因。
雖然在這里我們主要關(guān)注的是操作系統(tǒng),但畢竟操作系統(tǒng)的目的就是能更好的運(yùn)行用戶程序,而且該教程主要是站在程序員的角度來(lái)講解操作系統(tǒng)的,作為程序員是繞不開(kāi)程序這個(gè)話題的。因此在深入理解操作系統(tǒng)之前還是有必要來(lái)聊一聊程序是怎么一回事。
那究竟是什么是程序呢?我們引用Wikipedia對(duì)計(jì)算機(jī)程序的定義:
A computer program is a collection of instructions that performs a specific task when executed by a computer.
翻譯成大白話就是,能指揮計(jì)算機(jī)干活的一堆指令就叫計(jì)算機(jī)程序。那怎樣才能寫出指揮計(jì)算機(jī)干活的指令呢?這就涉及到程序是怎么來(lái)的。
程序是怎么來(lái)的呢?程序是我們偉大的可敬的廣大程序員們用編程語(yǔ)言一個(gè)字符一個(gè)字符寫出來(lái)的文本字符串,只不過(guò)這些文本字符串是人類可以認(rèn)識(shí)的。無(wú)論用的什么程序語(yǔ)言,C/C++、Java、Python、JavaScript、C#、Perl、Lua、Shell、匯編語(yǔ)言等等等等,只要是你寫出來(lái)的文本字符串能指揮計(jì)算機(jī)干活,這都叫程序。這些程序員認(rèn)識(shí)的文本字符串就是可以指揮計(jì)算機(jī)完成特定任務(wù)的指令。你可能有點(diǎn)糊涂了,這些文本字符串真的就是計(jì)算機(jī)能用來(lái)完成特定任務(wù)的指令嗎?計(jì)算機(jī)不是只認(rèn)識(shí)0和1這兩個(gè)數(shù)字嗎?
天才的榆木疙瘩計(jì)算機(jī)其實(shí)是一個(gè)數(shù)學(xué)學(xué)得非常差的家伙,以至于差到只能認(rèn)識(shí)兩個(gè)數(shù),0和1,其它的就都不能認(rèn)識(shí)了,我們要面對(duì)的就是這樣一個(gè)榆木疙瘩。
雖然這個(gè)榆木疙瘩數(shù)學(xué)不好識(shí)數(shù)不多,但是這家伙有一個(gè)我們?nèi)祟愲y以望其項(xiàng)背的能力,不,對(duì)于人類來(lái)說(shuō)簡(jiǎn)直就是超能力,那就是這個(gè)榆木疙瘩算數(shù)非???,對(duì)于簡(jiǎn)單的加法我們?nèi)祟惪赡芤话阋幻肽芩悴怀^(guò)10個(gè),但是計(jì)算機(jī)一秒可以完成數(shù)十億次的計(jì)算,簡(jiǎn)直是天才!雖然計(jì)算機(jī)能認(rèn)識(shí)的數(shù)就只有0和1這么簡(jiǎn)單,但是其計(jì)算速度體現(xiàn)出了簡(jiǎn)單的威力。
從文本字符串到機(jī)器指令至此,我們知道程序員(人類)和計(jì)算機(jī)是兩個(gè)完全不同的物種,不同的物種能理解的語(yǔ)言是完全不同的,就好比普通的人不會(huì)明白一群鳥(niǎo)語(yǔ)在說(shuō)什么一樣,我們?nèi)祟愐膊荒艽蜷_(kāi)vim或者宇宙無(wú)敵IDE——Visual Studio直接寫0和1吧(雖然這是可以的,早期的程序員確實(shí)就是這么干的,牛不牛)。
因此,我們需要某種魔法把人類認(rèn)識(shí)的C/C++、Java、Python之類的翻譯出計(jì)算機(jī)可以認(rèn)識(shí)二進(jìn)制01指令。這樣的魔法就來(lái)自兩個(gè)東西,編譯器和解釋器。
翻譯官編譯器和解釋器編譯器大家應(yīng)該都比較熟悉,我們寫好C/C++程序后第一步就是編譯,這里編譯工作就是編譯器來(lái)完成的。你可以簡(jiǎn)單的理解為編譯器把C/C++程序直接翻譯成計(jì)算機(jī)可以認(rèn)識(shí)的01二進(jìn)制機(jī)器指令。
對(duì)于解釋器有的同學(xué)可能就不是那么熟悉了,寫Java、Python、C#程序的時(shí)候你從沒(méi)有聽(tīng)說(shuō)過(guò)要“編譯一下Java,編譯一下Python,編譯一下C#”吧。你可能會(huì)說(shuō)C/C++程序我能理解了,編譯器把C/C++程序直接翻譯成了01二進(jìn)制機(jī)器指令,那Java、Python一類的程序是怎么運(yùn)行的呢?
大家可以想一想,你在寫Python、Java、C#程序之前是不是要安裝一堆東西,稱之為“運(yùn)行時(shí)環(huán)境”?
如果你想不起來(lái),趕緊重新搭一套環(huán)境試試是不是這么回事。
這里的運(yùn)行時(shí)環(huán)境其實(shí)就是解釋器。你可以把這個(gè)解釋器簡(jiǎn)單的理解為就是一個(gè)程序,只不過(guò)。。。注意注意!??!前方高能?。。?,只不過(guò)是解釋器這個(gè)程序可以運(yùn)行你寫的Java、Python、C#的程序,解釋器是一個(gè)可以運(yùn)行程序的程序?。。?/strong>那解釋器這個(gè)程序又是怎么來(lái)的呢?一般情況下這些解釋器其實(shí)是用C/C++寫出來(lái)的。只不過(guò)用C/C++寫的這個(gè)程序?qū)iT用來(lái)執(zhí)行你寫的Java、Python之類的程序,高能完畢。
偉大的C語(yǔ)言希望到目前為止你還沒(méi)有暈,到這里我們知道了,不管我們用的是Java、Python、JavaScript什么的也好最終都逃不出C/C++(Go等語(yǔ)言除外),CPU不直接執(zhí)行Java、Python、JavaScript之類的解釋型語(yǔ)言程序,CPU可以直接執(zhí)行的是解釋器代碼,解釋器最終來(lái)執(zhí)行Java等程序,這就是解釋型語(yǔ)言效率不如編譯型語(yǔ)言效率高的原因。因?yàn)镃/C++程序最終被編譯器翻譯成了01機(jī)器指令,CPU可以直接運(yùn)行運(yùn)行機(jī)器指令,而對(duì)于解釋型語(yǔ)言來(lái)說(shuō)CPU首先執(zhí)行的是解釋器的程序,然后解釋器再執(zhí)行你寫的程序,性能上當(dāng)然不及編譯型語(yǔ)言。
而C++程序其實(shí)在編譯過(guò)程中也會(huì)轉(zhuǎn)化為C程序然后再轉(zhuǎn)為01二進(jìn)制機(jī)器指令,并且們使用的Windows、Linux、MacOS等操作系統(tǒng)同樣是用C語(yǔ)言來(lái)編寫的,從最底層的操作系統(tǒng)到上層的應(yīng)用程序?qū)嶋H上都逃脫不了C語(yǔ)言。
從這個(gè)角度看,C語(yǔ)言真是一門偉大的語(yǔ)言。
回到操作系統(tǒng)饒了一大圈我們回到操作系統(tǒng),接下來(lái)關(guān)于操作系統(tǒng)的講解中涉及到示例程序沒(méi)有明確說(shuō)明的話指的是C語(yǔ)言程序。請(qǐng)注意,如果你對(duì)C語(yǔ)言不熟悉也沒(méi)有關(guān)系,我們示例都非常簡(jiǎn)單不會(huì)涉及到復(fù)雜的C語(yǔ)言相關(guān)概念與用法,有任何語(yǔ)言的使用經(jīng)驗(yàn)都可輕松應(yīng)對(duì)。
C語(yǔ)言程序編譯好后生成的可執(zhí)行程序在Windows中就是我們熟悉的exe程序,在Linux下是elf程序,這些可執(zhí)行程序編譯好后和普通文件一樣存放在磁盤當(dāng)中。
在接下來(lái)關(guān)于操作系統(tǒng)的討論當(dāng)中,沒(méi)有明確說(shuō)明的話,以下幾個(gè)詞匯,"程序","用戶程序","應(yīng)用程序"指的都是編譯好后放在磁盤上的可執(zhí)行程序。
操作系統(tǒng)也是程序一定要認(rèn)識(shí)到,操作系統(tǒng)也是程序,只不過(guò)這個(gè)程序不是簡(jiǎn)單的往屏幕上打印helloworld,不能用來(lái)文字語(yǔ)音視頻聊天,不能用來(lái)上網(wǎng),不能用來(lái)看電影,不能用來(lái)玩游戲。那么這個(gè)貌似什么娛樂(lè)設(shè)施都提供不了的程序有什么用呢?這個(gè)程序的作用無(wú)比重要,該程序的作用是為以上用戶程序提供一個(gè)良好的運(yùn)行環(huán)境,管理計(jì)算機(jī)硬件資源包括:CPU、內(nèi)存、磁盤、網(wǎng)卡、外設(shè)等等等等,這個(gè)程序就是該教程重點(diǎn)關(guān)注的操作系統(tǒng)。
總結(jié)這是該教程的第一節(jié),在這一節(jié)中我們從各個(gè)方面講解了程序這一話題。
程序分為編譯型程序,比如C/C++,以及解釋型程序比如Java、Python、JavaScript等。編譯型程序被編譯器直接翻譯成CPU可以直接運(yùn)行的機(jī)器指令,而解釋型程序無(wú)需編譯,其運(yùn)行依靠的是解釋器,解釋器是一個(gè)可以執(zhí)行程序的程序,解釋器這個(gè)程序一般是由C/C++程序編寫的。
需要我們注意的是操作系統(tǒng)也是一個(gè)程序,只不過(guò)這個(gè)程序的作用比較特殊,這個(gè)程序是用來(lái)管理計(jì)算機(jī)系統(tǒng)中各種軟硬件資源的,比如提供進(jìn)程、線程機(jī)制,管理CPU等等,這個(gè)程序也是接下來(lái)該教材的主角。
更多計(jì)算機(jī)內(nèi)功文章,歡迎關(guān)注微信公共賬號(hào):碼農(nóng)的荒島求生。
計(jì)算機(jī)內(nèi)功決定程序員職業(yè)生涯高度
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45097.html
摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開(kāi)發(fā)和面試問(wèn)題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開(kāi)發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...
摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開(kāi)發(fā)和面試問(wèn)題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開(kāi)發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...
摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開(kāi)發(fā)和面試問(wèn)題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開(kāi)發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...
摘要:偉大的語(yǔ)言希望到目前為止你還沒(méi)有暈,到這里我們知道了,不管我們用的是什么的也好最終都逃不出等語(yǔ)言除外,不直接執(zhí)行之類的解釋型語(yǔ)言程序,可以直接執(zhí)行的是解釋器代碼,解釋器最終來(lái)執(zhí)行等程序,這就是解釋型語(yǔ)言效率不如編譯型語(yǔ)言效率高的原因。 雖然在這里我們主要關(guān)注的是操作系統(tǒng),但畢竟操作系統(tǒng)的目的就是能更好的運(yùn)行用戶程序,而且該教程主要是站在程序員的角度來(lái)講解操作系統(tǒng)的,作為程序員是繞不開(kāi)程...
閱讀 2989·2023-04-25 17:22
閱讀 1554·2019-08-30 15:54
閱讀 1284·2019-08-30 15:53
閱讀 1803·2019-08-30 15:43
閱讀 3058·2019-08-29 12:29
閱讀 1244·2019-08-26 11:37
閱讀 3276·2019-08-23 18:02
閱讀 1618·2019-08-23 14:15