當前位置:
首頁 > 最新 > 程序是如何跑起來的?

程序是如何跑起來的?

我曾計劃通過閱讀論文和經典計算機書籍,來深入理解計算機科學技術。我最近在看的一本《程序是如何跑起來的》,整本書對於剛入門計算機和有經驗的工程師,都非常有幫助。

如果你想了解,計算機基本原理,操作系統、程序是如何與硬體結合運行起來,解決實際問題,那麼這本書特別合適,而且整本書通俗易懂,作者意在通過最簡單的描述,來向普通人描述計算機的本質。

因為,書中使用的很多示例代碼是C語言,如果想要Run裡面的示例代碼,建議簡單了解一下C語言。

整本書介紹CPU、二進位、內存構造、內存與磁碟、壓縮數據、程序運行環境、磁碟構造、源文件、可執行文件、操作系統與應用、彙編語言、硬體控制等比較系統的介紹計算機程序的一生,大部分內容雖然屬於科普,但是對於理解整個計算機脈絡非常有幫助。

特別是想深入計算機某個領域的人,無疑提供一個全局視角。

我特別喜歡描述關於程序最終是如何跑在硬體伺服器上相關本質的解釋,使用了大量的圖示接合實例深入的剖析了計算機的本質。細微到數據存儲、內存、CPU、GPU如何相互配合工作,宏大到整體設計。

我認為這是一本很經典的計算機書籍,人類總是對於未知充滿好奇和恐懼,很多把計算機某些細節的知識看的很神秘高深的人來說,這是了解全局計算機本質的機會。

今天推薦《程序是如何跑起來的》。

讀書筆記來一波。

關於OS

os是一個大型程序,在硬體啟動的時候BIOS內置在硬體中的程序負責初始化OS。

關於BIOS

BIOS是英文Basic Input Output System的縮寫,翻譯過來就是「基本的輸入輸出系統」。它的作用就是對計算機硬體的設置和管理。BIOS是一個程序,固化於主板的ROM晶元。

關於BIOS作用

基本輸入輸出程序|系統信息設置、開機上電自檢程序、系統啟動自舉程序。比如:加電自檢及初始化、引導程序、程序服務處理、硬體中斷處理。計算機的性能和BIOS息息相關。

關於數據壓縮

其實就是數據存儲的方式,默認存儲模式不夠滿足各種顯示需求,而發明出來新的壓縮演算法,幫助更好的管理和使用數據。比如:摩爾斯編碼、哈夫曼演算法、RLE壓縮演算法。(Tree演算法)

關於編譯

源代碼是無法直接運行的,這是因為,CPU能直接解析並運行的不是源代碼而是本地代碼的程序。本地(native)代碼,對於CPU來說,母語就是機器語言,而通過編譯轉換成機器語言的程序就是本地代碼。用任何編程語言寫的源代碼,最後都要翻譯成本地代碼,否則CPU就無法理解。也就是說,即使使用不同編程語言編寫的代碼,轉換成本地代碼後,也都變成用同一種語言來表示了。

關於編譯器

不同編程語言(高級語言) -> 同樣的編程語言(native代碼) -> CPU解析運行。

目前主流編譯器:1. C/C++編譯器 2. JAVA編譯器。

C/C++編譯器,源代碼 -> OS環境 -> native代碼 -> CPU解析運行。

JAVA編譯器,源代碼 -> OS環境 -> 位元組碼 -> 解析器 -> native代碼 -> CPU解析運行。

關於全棧程序員

書中有提到全面程序員,1.掌握基本硬體知識 2.操作系統的基本原理 => 提高編程效率。

關於載入到內存的程序

載入到內存中的程序由4部分組成:內存(用於操作系統的內存、程序使用的內存),程序使用的內存:複製EXE文件[用於變數的空間、用於函數的空間] 程序運行時分配 [用於棧的空間、用於堆的空間]。

關於操作系統

操作系統也稱為基礎軟體,操作系統是計算機運行時不可或缺的控制程序,以及在控制程序下運轉的為其他軟體運行提供操作系統環境的軟體的統稱。在操作系統上運行的應用稱為「應用程序」

在計算機中尚不存在操作系統的年代,完全沒有任何程序,因此程序員就需要編寫出力相關的所有程序。用機器語言編寫程序,然後在使用開關將程序輸入,這一過程非常麻煩。於是,有人開發出了僅具有載入和運行功能的,這就是操作系統的原型。

通過事先啟動監控程序,程序員就可以根據需要將各種程序載入到內存中運行。雖然依舊比較麻煩,但是比起在沒有任何程序的狀態下進行開發。工作量得到很大的緩解,用今天的話來說就是動態載入程序liberty,各種開發庫可以幫助快速構建應用,解決實際問題。

隨著liberty的豐富,開發門檻變得越來越低,促成了今天繁榮的程序員職業。

隨著時代的發展,人們在利用監控程序編寫程序的過程中,發現很多程序都有共同的部分。例如:通過鍵盤輸入文字數據、往顯示器輸出文字數據等。這些處理,在任何程序下都是一樣的。而如果每個編寫的新程序都要記述相同的處理的話,那真是太浪費時間了。因此,基本的輸入輸出部分的程序就被追加到了監控程序中。初期的操作系統就這樣誕生了。

初期的操作系統 = 監控程序 + 基本輸入輸出程序

之後,隨著時代的進一步發展,開始有更多的功能被追加到監控程序中,比如,為了方便程序員控制硬體、編程語言處理器(彙編、編譯、解析)以及各種實用程序等,結果就形成了和現在相差不大的操作系統。因此,操作系統本身並不是單獨的程序,而是多個程序的集合體。

操作系統是多個程序的集合體:1.控制程序 (硬體控制、程序運行控制) 2.編程語言處理器 (彙編、編譯、解析) 3. 實用程序 (文本編輯器、調試工具、Dump程序)

關於監控程序

早期操作系統的原型,主要由:1.監控程序 (載入程序、運行程序[程序1 -> 載入 -> 運行 & 程序2 -> 載入 -> 運行]) 2.基本的輸入輸出程序 (通過鍵盤輸入、輸出到顯示器等)

關於操作系統學習

程序員在開發應用程序的時候,需要意意識到你們是利用操作系統的功能的應用。雖然對於程序員來說,掌握硬體的基本知識是必須的,不過,在操作系統 誕生一回來,就沒有必要在去編寫直接的控制硬體的程序了。這樣一來,製作應用程序的程序員就逐漸和硬體隔離開來,也就是說,程序員是很少關注現實世界(硬體)的。

因為操作系統的誕生,程序員無需考慮硬體問題。因此程序員的數量也增加了。哪怕是自稱對硬體一竅不通的人,也可能會製作出一個有模有樣的應用。不過,要想成為一個全面的程序員,有一點需要清楚的是,掌握基本的硬體知識,並藉助操作系統進行抽象化,可以大大提高編程效率。

否則,遇到問題時,你就無法找到解決辦法。操作系統確實為程序員提供了很多方便。不過享受方便是不行的,還需要了解為什麼自己能夠這麼方便。了解了這一點,就可以盡情地享受方便了。

如果要深入理解計算機科學,那麼就需要學習計算機歷史,通過計算機歷史,可以一窺各個技術變化的重大轉折點,也能更好的理解一個事物發展的過程和完善的過程,為何這樣設計,為了解決那些問題?帶來那些新的問題?

只有了解前因後果才能更好的使用和掌握技術,幫助現實生活解決更多問題,無論是工作和學習都異常重要。

關於反彙編

用彙編語言編寫的源代碼,和本地代碼是一一對應的。因而,本地代碼也可以反過來轉化成彙編語言的源代碼。持有該功能的逆變換程序成為反彙編程序,逆變換這一處理本身成為反彙編。

關於應用程序

應用程序經過os間接地控制硬體。應用程序 => 利用os的功能 => 有操作系統的基本輸入輸出程序 => 控制硬體 => 1.實時時鐘 2.顯示器I/O

關於,程序是怎麼跑起來的涉及,操作系統、高級編程語言、彙編語言、本地代碼(native code)、內存構造、磁碟構造、CPU硬體、數據壓縮、編譯器、解析器等概念。深入淺出的解釋了計算機基本原理,通過對程序運行示例的剖析和驗證,逐步說明計算機的基本原理。

計算機科學:

I/O埠的輸入輸出,中斷處理 => 硬體控制方法。

用程序表示人類思考的方式 => AI

從全局的角度來看待問題,程序就是一系列的input -> output過程,在整個過程中數據根據不同的策略而發生著改變,被應用於各種生產應用程序中,輔助人們更好的了解自己服務別人。我們都在探索的道路上。

而今天人工智慧AI,就是利用程序表示人類思考的方式,即AI應用,通過AI應用,只需要既定的幾個條件和因素,它可以自己學習,是一個auto的過程,特別是需要大量人力參與的工作,可以釋放大量繁複的工作,讓人們專註於創新和自己熱愛的領域,比如:太空探索、星際移民,讓普通人也能參與,而不是政府行為,目前人們太忙了,局限一個狹窄的領域,探索未來的人太少,我們需要通過AI賦予機器只能,幫助我們更好的服務我們,我們才有個更多精力探索未知世界。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

曾國藩八策經典名句
一起看後來的我們?

TAG:全球大搜羅 |