深刻理解計算機系統-評價

深刻理解計算機操做系統

引子:程序員

在我剛剛進入中科院計算所讀研的時候,同宿舍的師兄便向我推薦了一本《深刻理解計算機系統》,這本書從一個程序員的視角詳細剖析了整個計算機系統,涵蓋了組成原理、彙編語言、體系結構、操做系統、網絡等計算機基礎知識。面試

因爲時間所限,我並無馬上閱讀,而是將其列入了找工做前的複習書單。2010年8月,我用了一個月的時間讀完了這本書的原版《Computer System:A programmer's perspective》。後來的事實證實,讀完這本書對我找工做的歷程幫助很大。算法

正文:
編程

在閱讀的過程當中,我對該書的各個章節作了一些標註,以備未來從新翻閱的時候參考。這些標註主要從兩個角度進行,一是對我找工做應試(包括筆試和麪試)有沒有用,二是對我自身的技術提升有沒有用,因此分爲應試和修煉兩個指標,參照流行的打分標準將其分爲從★到★★★★★五個等級。
安全

在找工做順利結束以後,我又回顧了一下以前的標註,結合本身的筆試、面試經歷,從新修訂了一下。其中應試指標的評分主要是以個人求職目標(互聯網行業偏算法的軟件工程師)爲參照,和其餘職位的要求會有些出入。網絡

第一章 計算機系統漫遊 A Tour of Computer System
多線程

本章對計算機系統作了一個整體的介紹,用簡單明瞭的語言歸納了一些後續章節將要重點展開的概念。
併發

應試 ★★:在筆試中可能會碰到一些總體上的概念題。
app

修煉 ★:屬於計算機最基本的概念。socket

第二章 信息的表示和處理 Representing and Manipulating Information

本章介紹了信息在計算機中的表示形式,重點講述整數和浮點數的表示形式。

應試 ★:應試中不多會考到。

修煉 ★★★:有不少人可能寫了多年的代碼都不知道浮點數是如何用那4(8)個字節存儲的,不知道其實表達式(x-y<0)並不能替代(x< p="">

第三章 程序的機器級表示 Machine-Level Representation of Program
本章其實就是彙編語言課程的複習。

應試:重要程度依賴於求職目標,若是是和我同樣偏算法的工程師,彙編語言是不會考到的。

修煉 ★★★★★:理解彙編語言和寄存器結構是後面不少內容的基礎。

第四章 處理器體系結構 Processor Architecture

本章其實就是計算機體系結構課程的內容。主要介紹的內容有處理器結構,各類邏輯門、功能單元,指令集;指令的執行,指令執行的流水線等。

應試 ★: 對於軟件相關職位來講,不多會考到這麼底層的東西的。

修煉 ★★★: 對於從事軟件層面的技術人員來講,不用深刻,可是也應該理解,知道是怎麼回事。

第五章 優化程序性能 Optimizing Program Performance

本章講述如何優化程序的執行效率,包括代碼的優化,編譯器的優化,以及CPU級別的優化。

5.1-5.6節 主要介紹了幾種能有效提升代碼性能的方法。

應試 ★★★★: 常常會有一些讓你尋找程序瑕疵的問題,若是你能看出代碼在哪些細節上能夠優化,一定能加分很多。

修煉 ★★★★★: 你固然須要知道編譯器在什麼層面上能自動幫你優化代碼,在編譯器沒法優化時你本身又如何在小細節上進行優化。

5.7節之後 主要介紹了CPU級別的優化,微指令的概念,功能單元上微指令的並行,程序分支的預測等。

應試 ★: 對於軟件相關職位來講,基本不會考這些東西的。

修煉 ★★★: 不用深刻,可是應該知道並可以理解。

第六章 存儲器層次結構 The Memory Hierarchy

本章詳細介紹了計算機系統中的存儲結構。

6.1 介紹了不一樣種類的存儲設備以及對應的存取數據的方式。

應試和修煉 ★: 不多會考到,瞭解一下便可。

6.2-6.7 介紹了存儲設備的組織形式,着重介紹了Cache及其工做方式,程序是如何和cache打交道的,不一樣的循環嵌套順序、遍歷方向等對cache命中的影響。

應試 ★★★★: 在面試中,常常會考到跟cache相關的題目;修改循環嵌套順序以提升cache命中率也是一些程序改錯題的高級玩法。

修煉 ★★★★: 存儲結構和cache是計算機中很基礎也很重要的概念。

第七章 連接 Linking

顧名思義,本章詳細講解了程序的連接過程,主要分爲靜態連接和動態連接,以及連接過程當中使用到的技術如符號解析、重定位等。

應試 ★★:知道一些基本概念便可。

修煉 ★★★★★:一個軟件工程師應該懂得本身寫出來的程序是怎麼成爲一個可執行文件的,有的時候,你極可能會被一個連接錯誤折磨好幾天。

第八章 異常控制流 Exceptional Control Flow

顧名思義,本章主要講解異常控制,不過這裏的「異常」並非Java或者C++裏狹義的異常,而是一個廣義的「Exceptions」的概念,包括中斷(Interrupt),陷阱(Trap),錯誤(Falut),停止(Abort)等。本章同時引入了進程的概念,介紹了進程級別的 Exception:信號(signal)以及操做系統處理這個異常的手段--上下文切換(context switch)。

應試 ★★: 主要掌握進程的概念便可。

修煉 ★★★: 知道異常控制流是怎麼回事,用戶程序和系統交互(如系統調用)的原理和方式便可,不用太深刻。

第九章 虛擬存儲器 Virtual Memory

很是重要的一章,虛擬存儲機制是計算機實現多任務的一項重要技術。計算機正是經過時間片技術使得每一個進程在執行時彷彿獨佔CPU,進而又經過虛擬存儲機制使得每個進程在執行時彷彿獨佔內存。

10.1介紹了虛擬地址和物理地址,CPU進行尋址操做產生的是虛擬地址,經過存儲管理單元(memory management unit)轉換爲實際的物理內存地址。

10.3~10.5講述了虛擬存儲機制的優勢:使得內存能夠做爲硬盤的cache;可以更方便的管理內存;能更好的提供內存保護機制。

10.6 介紹了虛擬地址如何轉換爲物理地址。

10.7 很精彩的一節,經過Intel Pentium和Linux的實例講述了整個存儲管理機制。記得之前上操做系統課的時候,各類理論、機制學了一大堆,但就是不知道實際的操做系統到底用的哪套方法,而本節內容正是經過實例讓你對剛學的理論機制有一個直觀的瞭解。

10.8~10.10 講述了存儲映射(Memory Mapping)、動態內存分配和垃圾回收機制。

10.11 很實用的一節,列舉了一些C編程中容易犯的內存引用錯誤。

應試 ★★★★★: 本章內容是操做系統課程的重點內容,若是考操做系統,幾乎確定會考到;10.11節的知識也能幫你應對一些程序挑錯題。

修煉 ★★★★★: 操做系統中重要的基礎內容,即便你只使用Java這樣的高級編程語言,至少也應該弄懂垃圾回收機制吧。

第十章 系統級I/O System-Level I/O

介紹類Unix系統下的I/O讀寫,主要介紹系統層面的I/O接口。因爲咱們平常編程所用的I/O接口都是各類高級語言提供的通過封裝的標準接口,故而若是不進行底層開發的話這部分知識不是必須的,我便跳過沒讀。

第十一章 網絡編程 Network Progranmming

本章簡單介紹了網絡模型,TCP/IP協議,類Unix系統的socket接口等。

應試和修煉 ★★: 由於篇幅限制,本章只作了簡單講解,要掌握網絡編程知識還須要參考專門的網絡技術書籍。

第十二章 併發編程 Concurrent Programming

本章簡單介紹了併發程序設計的內容,主要包括:

1.進程級別的併發,各子進程擁有不一樣的虛擬地址空間,須要IPC(InterProcess Communication)機制共享數據,切換開銷大。

2.I/O複用,事件驅動,單進程運行,共享虛擬地址空間,併發效果不理想。

3.線程,介於上述兩種中間,各子線程共享進程的虛擬地址空間,切換開銷較小。

另外介紹了併發編程中訪問共享變量的信號量機制,並給出了4類容易引發線程不安全的函數。

應試 ★★: 除應聘相關職位外,併發編程考的比較少,不過須要清楚鎖機制和信號量機制等。

修煉 ★★★: 多線程程序在現今的開發中仍是很常見的,可是本章介紹的比較簡單,須要參考另外專門的書籍。

總的來講,我以爲這本書很適合在找工做以前讀一讀,由於從網上流傳的各類筆試和麪試題中,咱們就能看出各大IT公司在招聘工程師的時候是很看重基礎知識的,而對於像我這樣上了三年研究

生的同窗來講,不少知識因爲長時間沒用早就忘了,因此需再要再複習一下。可是咱們可能沒有時間按照課程一門一門地去複習,即便一門一門去看了,也不必定能把知識都聯繫起來,而這本書正好提供了這樣一個視角,從程序員的角度把計算機專業最重要的基礎知識都串了起來,造成了一個完整的計算機系統的概念。

轉自:http://book.51cto.com/art/201103/249824.htm

相關文章
相關標籤/搜索