深入理解計算機系統 第一章 計算機系統漫遊

2022-03-30 11:19:51 字數 2418 閱讀 8755

本著對計算機執行原理的好奇以及個人職業發展的需要,開始閱讀這本書。

以下分節記錄讀書筆記:

1.1 資訊就是位 + 上下文

計算機系統中存放的所有資訊都是由一串位元(bit)表示的,但值得注意的是,同樣的位元資訊在不同的上下文中所代表的意思是不同的。

在這裡,我們可以將「上下文」理解為對位元資訊的解讀方式。每乙個解讀方式,都有其獨特的解讀規則。例如,某個位元組的整數值為 47,在上下文 a 中,它被解讀為「可以」,在上下文 b 中,它被解讀為「桌子」。

注:此處可以模擬對文字的加密解密來理解。

1.2 程式被其他程式翻譯成不同的格式

計算機執行程式的過程可以理解為,計算機讀取人類的命令,並執行它。

而計算機對資訊的讀取方式和人類的相差很大,最好的辦法當然是創造一種語言,讓人類和計算機都能輕易讀懂,並且人類能夠很輕易的書寫。

但是目前這種語言還沒有誕生,目前的處理方法是,人類書寫對於人類思維比較友好的**,經過幾類特定程式的翻譯,將其變為計算機能夠讀懂並執行的命令。這幾類特定的程式在業界中分別被稱呼為預處理器、編譯器、彙編器和聯結器,這 4 個階段的程式一起構成了編譯器。

1.3 了解編譯系統如歌工作是大有益處的

編譯系統幫助我們將程式翻譯成計算機容易理解並且能夠執行的機器**,我們可以不了解編譯系統的工作原理,直接使用。

但如果了解了它的工作原理,將帶來以下 3 個好處:

1、優化程式效能

了解一些機器**以及編譯器將不同的高階語言**轉化為機器**的方式,可以幫助我們在程式中做出更好的編碼選擇,從而提高**執行效率

2、理解鏈結時出現的錯誤

據專業人士的經驗,一些最令人困擾的程式錯誤往往都與鏈結器操作有關,由其當我們試圖構建大型的軟體系統時。

3、避免安全漏洞

緩衝區溢位錯誤時造成大多數網路和 internet 伺服器上安全漏洞的主要原因,我們要能夠理解從不受信任的源接收資料的數量和格式,才能有效避免這些安全漏洞。

1.4 處理器讀並解釋儲存在記憶體中的指令

當程式被編譯器翻譯成了可執行的目標檔案之後,要想在 unix/linux 系統上執行時,可將其名稱輸入到乙個 shell 的應用程式中

例如:linux> ./hello

shell 是乙個命令列直譯器,它輸出乙個提示符,等待輸入乙個命令列,然後執行這個命令。

1.4.1 系統的硬體組成

系統的硬體由 4 個部分組成:匯流排、i/o 裝置、主存和處理器。

1.4.2 執行 hello 程式

shell 程式執行指令,將其讀入暫存器,並放入主存。然後,處理器會執行主存中的 hello 程式的 main 程式中的機器語言指令。這些指令將 「hello,world\n」 字元中位元組從主存複製到暫存器,在從暫存器檔案中複製到顯示裝置,最終顯示在螢幕上。 

1.5 快取記憶體至關重要

通過上述示例我們可以知道,系統花費了大量的時間把資訊從乙個地方搬運到另乙個地方。

由於處理器對資料的處理速度遠大於主存,若處理器直接從主存中讀取資料,則處理器的效能會被大大的浪費掉。

此時,快取記憶體應運而生,利用快取記憶體的區域性性原理,存放處理器近期可能會需要的資訊,使得大部分的記憶體操作都能在快速的快取記憶體中完成。

1.6 儲存裝置形成層次結構

在處理器和乙個較大較慢的裝置(例如主存)之間插入乙個更小更快地儲存裝置(例如快取記憶體)的想法已經成為乙個普遍的概念。

實際上,每個計算機系統中的儲存裝置都被組織成了乙個儲存器層次結構,如下圖所示:

來自於部落格:

儲存器層次結構的主要思想是上一層的儲存器作為低一層儲存器的快取記憶體。

程式設計師可以利用對整個存儲存器層次結構的理解來提高程式效能。

1.7 作業系統管理硬體

作業系統是應用程式和硬體之間的一層軟體,所有應用程式對硬體的操作嘗試都必須通過作業系統。

作業系統有兩個基本的功能:(1)防止硬體被失控的應用程式濫用;(2)向應用程式提供簡單一致的機制來控制複雜而又通常大不相同的低階硬體裝置。

作業系統通過幾個基本的抽象概念(程序、虛擬記憶體和檔案)來實現這兩個功能。

檔案是對 i/o 設計的抽象,虛擬內容是對主存和磁碟 i/o 裝置的抽象,程序是對處理器、主存和 i/o 裝置的抽象。

1.8 系統之間利用網路通訊

每個系統都是乙個孤立的個體,而系統要想與其他系統之間進行通訊,則可以通過網路。網路可以將各個系統串聯起來。

可以將網路視為乙個磁碟,與網路交換資料,和與磁碟互動資料本質上是一樣的。

《深入理解計算機系統》第一章 計算機系統漫遊

計算機系統是由硬體和系統軟體組成的,他們共同工作來執行應用程式。深入理解底層計算機系統以及它對應用程式的影響有助於提高程式的效能。1.1 資訊就是位 上下文 源程式實際上就是乙個由值0和1組成的位序列。程式是由文字字元表示的,8個位被組織成一組,成為位元組,每個位元組表示為程式中的文字字元。文字字元...

深入理解計算機系統 第一章 計算機系統漫遊

系統中的所有資訊,包括磁碟檔案,記憶體中的程式,記憶體中存放的使用者資料以及網路上傳送的資料,都是由一串位元表示的。區分不同資料物件的唯一方法是我們讀到這些資料物件的上下文。乙個程式的生命週期是從乙個高階c語言程式開始的,為了能在系統上執行該程式,每條語句都必須被其他程式轉換成一系列低階機器語言,然...

《深入理解計算機系統》第一章計算機系統漫遊

1 本章從乙個程式的生命週期講起,分別對程式的建立 編譯 執行 輸出 終止進行了詳細的解讀,從中引出了關於資訊上下文 編譯系統 快取記憶體 作業系統等重要概念。網上找到一張框架圖 2 乙個程式的生命週期是從源程式開始的,通過編譯器建立並儲存的文字檔案。源程式實際上是乙個由0和1組成的位序列,又叫做位...