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

     本着對計算機運行原理的好奇以及我的職業發展的須要,開始閱讀這本書。
    如下分節記錄讀書筆記:
 
    1.1 信息就是位 + 上下文
     計算機系統中存放的全部信息都是由一串比特(bit)表示的,但值得注意的是,一樣的比特信息在不一樣的上下文中所表明的意思是不一樣的。
    在這裏, 咱們能夠將「上下文」理解爲對比特信息的解讀方式。每個解讀方式,都有其獨特的解讀規則。例如,某個字節的整數值爲 47,在上下文 A 中,它被解讀爲「能夠」,在上下文 B 中,它被解讀爲「桌子」。
    注:此處能夠類比對文本的加密解密來理解。
 
    1.2 程序被其餘程序翻譯成不一樣的格式
    計算機執行程序的過程能夠理解爲,計算機讀取人類的命令,並執行它。
    而計算機對信息的讀取方式和人類的相差很大,最好的辦法固然是創造一種語言,讓人類和計算機都能輕易讀懂,而且人類可以很輕易的書寫。
    可是目前這種語言尚未誕生,目前的處理方法是,人類書寫對於人類思惟比較友好的代碼,通過幾類特定程序的翻譯,將其變爲計算機可以讀懂並執行的命令。這幾類特定的程序在業界中分別被稱呼爲 預處理器、編譯器、彙編器和鏈接器,這 4 個階段的程序一塊兒構成了編譯器。
    翻譯流程以下圖:(圖片來自於《深刻理解計算機系統》第 3 版第一章)
 
 
    1.3 瞭解編譯系統如歌工做是大有益處的
    編譯系統幫助咱們將程序翻譯成計算機容易理解而且可以執行的機器代碼,咱們能夠不瞭解編譯系統的工做原理,直接使用。
    但若是瞭解了它的工做原理,將帶來如下 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 系統之間利用網絡通訊
    每一個系統都是一個孤立的個體,而系統要想與其餘系統之間進行通訊,則能夠經過網絡。網絡能夠將各個系統串聯起來。
    能夠將網絡視爲一個磁盤,與網絡交換數據,和與磁盤交互數據本質上是同樣的。
相關文章
相關標籤/搜索