雖然在這裏咱們主要關注的是操做系統,但畢竟操做系統的目的就是能更好的運行用戶程序,並且該教程主要是站在程序員的角度來說解操做系統的,做爲程序員是繞不開程序這個話題的。所以在深刻理解操做系統以前仍是有必要來聊一聊程序是怎麼一回事。程序員
咱們引用Wikipedia對計算機程序的定義:編程
A computer program is a collection of instructions that performs a specific task when executed by a computer.
翻譯成大白話就是,能指揮計算機幹活的一堆指令就叫計算機程序。那怎樣才能寫出指揮計算機幹活的指令呢?這就涉及到程序是怎麼來的。vim
程序是咱們偉大的可敬的廣大程序員們用編程語言一個字符一個字符寫出來的文本字符串,只不過這些文本字符串是人類能夠認識的。不管用的什麼程序語言,C/C++、Java、Python、JavaScript、C#、Perl、Lua、Shell、彙編語言等等等等,只要是你寫出來的文本字符串能指揮計算機幹活,這都叫程序。這些程序員認識的文本字符串就是能夠指揮計算機完成特定任務的指令。你可能有點糊塗了,這些文本字符串真的就是計算機能用來完成特定任務的指令嗎?計算機不是隻認識0和1這兩個數字嗎?微信
計算機實際上是一個數學學得很是差的傢伙,以致於差到只能認識兩個數,0和1,其它的就都不能認識了,咱們要面對的就是這樣一個榆木疙瘩。編程語言
雖然這個榆木疙瘩數學很差識數很少,可是這傢伙有一個咱們人類難以望其項背的能力,不,對於人類來講簡直就是超能力,那就是這個榆木疙瘩算數很是快,對於簡單的加法咱們人類可能通常一秒能算不超過10個,可是計算機一秒能夠完成數十億次的計算,簡直是天才!雖然計算機能認識的數就只有0和1這麼簡單,可是其計算速度體現出了簡單的威力。性能
至此,咱們知道程序員(人類)和計算機是兩個徹底不一樣的物種,不一樣的物種能理解的語言是徹底不一樣的,就比如普通的人不會明白一羣鳥語在說什麼同樣,咱們人類也不能打開vim或者宇宙無敵IDE——Visual Studio直接寫0和1吧(雖然這是能夠的,早期的程序員確實就是這麼幹的,牛不牛)。spa
所以,咱們須要某種魔法把人類認識的C/C++、Java、Python之類的翻譯出計算機能夠認識二進制01指令。這樣的魔法就來自兩個東西,編譯器和解釋器。操作系統
編譯器你們應該都比較熟悉,咱們寫好C/C++程序後第一步就是編譯,這裏編譯工做就是編譯器來完成的。你能夠簡單的理解爲編譯器把C/C++程序直接翻譯成計算機能夠認識的01二進制機器指令。線程
對於解釋器有的同窗可能就不是那麼熟悉了,寫Java、Python、C#程序的時候你從沒有據說過要「編譯一下Java,編譯一下Python,編譯一下C#」吧。你可能會說C/C++程序我能理解了,編譯器把C/C++程序直接翻譯成了01二進制機器指令,那Java、Python一類的程序是怎麼運行的呢?翻譯
你們能夠想想,你在寫Python、Java、C#程序以前是否是要安裝一堆東西,稱之爲「運行時環境」?
若是你想不起來,趕忙從新搭一套環境試試是否是這麼回事。
這裏的運行時環境其實就是解釋器。你能夠把這個解釋器簡單的理解爲就是一個程序,只不過。。。注意注意!!!前方高能!!!,只不過是解釋器這個程序能夠運行你寫的Java、Python、C#的程序,解釋器是一個能夠運行程序的程序!!!那解釋器這個程序又是怎麼來的呢?通常狀況下這些解釋器實際上是用C/C++寫出來的。只不過用C/C++寫的這個程序專門用來執行你寫的Java、Python之類的程序,高能完畢。
但願到目前爲止你尚未暈,到這裏咱們知道了,無論咱們用的是Java、Python、JavaScript什麼的也好最終都逃不出C/C++(Go等語言除外),CPU不直接執行Java、Python、JavaScript之類的解釋型語言程序,CPU能夠直接執行的是解釋器代碼,解釋器最終來執行Java等程序,這就是解釋型語言效率不如編譯型語言效率高的緣由。由於C/C++程序最終被編譯器翻譯成了01機器指令,CPU能夠直接運行運行機器指令,而對於解釋型語言來講CPU首先執行的是解釋器的程序,而後解釋器再執行你寫的程序,性能上固然不及編譯型語言。
而C++程序其實在編譯過程當中也會轉化爲C程序而後再轉爲01二進制機器指令,而且們使用的Windows、Linux、MacOS等操做系統一樣是用C語言來編寫的,從最底層的操做系統到上層的應用程序實際上都逃脫不了C語言。
從這個角度看,C語言真是一門偉大的語言。
饒了一大圈咱們回到操做系統,接下來關於操做系統的講解中涉及到示例程序沒有明確說明的話指的是C語言程序。請注意,若是你對C語言不熟悉也沒有關係,咱們示例都很是簡單不會涉及到複雜的C語言相關概念與用法,有任何語言的使用經驗均可輕鬆應對。
C語言程序編譯好後生成的可執行程序在Windows中就是咱們熟悉的exe程序,在Linux下是elf程序,這些可執行程序編譯好後和普通文件同樣存放在磁盤當中。
在接下來關於操做系統的討論當中,沒有明確說明的話,如下幾個詞彙,"程序","用戶程序","應用程序"指的都是編譯好後放在磁盤上的可執行程序。
必定要認識到,操做系統也是程序,只不過這個程序不是簡單的往屏幕上打印helloworld,不能用來文字語音視頻聊天,不能用來上網,不能用來看電影,不能用來玩遊戲。那麼這個貌似什麼娛樂設施都提供不了的程序有什麼用呢?這個程序的做用無比重要,該程序的做用是爲以上用戶程序提供一個良好的運行環境,管理計算機硬件資源包括:CPU、內存、磁盤、網卡、外設等等等等,這個程序就是該教程重點關注的操做系統。
這是該教程的第一節,在這一節中咱們從各個方面講解了程序這一話題。
程序分爲編譯型程序,好比C/C++,以及解釋型程序好比Java、Python、JavaScript等。編譯型程序被編譯器直接翻譯成CPU能夠直接運行的機器指令,而解釋型程序無需編譯,其運行依靠的是解釋器,解釋器是一個能夠執行程序的程序,解釋器這個程序通常是由C/C++程序編寫的。
須要咱們注意的是操做系統也是一個程序,只不過這個程序的做用比較特殊,這個程序是用來管理計算機系統中各類軟硬件資源的,好比提供進程、線程機制,管理CPU等等,這個程序也是接下來該教材的主角。
更多計算機內功文章,歡迎關注微信公共帳號:碼農的荒島求生。
計算機內功決定程序員職業生涯高度