《深入理解計算機系統》這本書的主要目的在於幫助你理解計算機系統在執行hello系統時,系統發生了什麼以及為什麼會這樣?
深入理解計算機系統從程式設計師的角度來認識計算機是怎麼樣執行程式的,也就是說c程式在計算機系統是怎麼樣的執行,才能都顯示出我們想要的結果,眾所周知,計算機系統有硬體和軟體組成,他們共同運作來執行應用程式,那麼,當我們敲入hello程式時,計算機的軟硬體是如何執行的呢,c語言程式如何被計算機組所理解,按照程式的設計來展示我們想要的結果?
在計算機系統中,如何將計算機程式設計及其能夠識別的語言,進而執行出我們想要的結果,首先就c語言變成的程式轉換成計算機 所能夠識別的組合語言程式,然後對匯程式設計序在機器級進行程式的執行處理,進而得出我們想要的結果。
《深入理解計算機系統》全書共分為三個部分來介紹計算機系統,
第一章概論,介紹hello程式在計算機中是怎麼樣的執行過程,
第一部分:程式的結構和執行第二章為資訊的表示和處理, 第三章,程式的機器及表示 第四部分 處理器體系結構 第五章 優化程式性, 第六章 儲存器層次結構
第三部分:程式間的互動和通訊第十章 系統及級io 第十一章 網路程式設計 第十二章 併發程式設計
各章主要內容:
第一章:通過講解hello 程式,來簡單介紹計算機系統的主要概念和主題。
第一部分:程式的結構和執行
第二章: 資訊的表示和處理 我們描述計算機的算術運算,重點描述程式有重點影響的無符號數和數的補碼表述的特性,我們考慮數是如何表述的,以及由此確定對於乙個給定的字長,其可能編碼值的範圍。我們**無符號數和有符號數之間型別轉換的效果,並闡述算術運算的數學特性。補碼的運算能滿足很多整數運算的代數特性,此外,從兩個方面描述浮點格式,即如何用它來表示數值,和浮點運算的數學特性。(在計算機系統層面資料的表示形式)
第三章:程式的機器及表示 如何閱讀由c編譯器生成的x86-84機器**,我們說明不同控制結構生成的基本指令模式,描述過程的實現,包括棧分配,暫存器使用慣例,引數傳遞,來討論不同資料結構的分配和訪問方式,說明實現整數和浮點型算術運算的指令,分析程式機器的樣子作為途徑,來理解程式的安全漏洞。(在計算機系統程式的執行)
第四章:處理器體系結構 這一章描述基本的組成和時序邏輯元素,並展示這些通路是如何在資料通路中組合到一起,來執行x86-84指令集的乙個簡化子集,我們從設計單時鐘週期資料通路開始,引入流水線的思想,將處理一條指令所需要的不同步驟實現為獨立的階段。(執行指令時硬體層面的操作)
第五章:優化程式效能 這一章裡,我們介紹許多提高**效能的技術,主要思想就是讓程式設計師通過使編譯器能夠生成更有效的機器**來學習編寫c**,一開始介紹的是減少程式需要走的工作變換,然後介紹增加生成機器**中指令級並行度的變換,而提高了程式在現代化超標量處理器上的效能。
第六章 : 儲存器結構層次 儲存器系統實際上是由不同容量造價和訪問時間的儲存裝置徐成的層次結構,我們描述的是不同型別的隨機儲存器(ram)和唯讀儲存器(rom)以及磁碟和固態硬碟的幾何形狀和組織構造,我們描述這些儲存裝置是如何放置在層次結構中,講述訪問區域性性是如何是這種層次結構成為可能的。(計算機的儲存結構)
第二部分:在系統上執行程式
第七章:鏈結 本章講述動態和靜態鏈結,包括的概念有可重定位和可執行的目標檔案,符號解析,重定位,靜態庫,共享目標庫,位置無關**,以及庫打樁。
第八章: 異常控制流 我們通過介紹異常控制流的一般概念,打破單一程式的模型,給出存在於系統所有層次的異常控制流的例子,從底層硬體異常和中斷,到併發程序的上下文切換,由於接收linux訊號引起的控制流突變,到語言中破壞棧原則的非本地跳轉。(程式的異常控制)
第九章:虛擬記憶體 通過描述虛擬記憶體系統,了解為什麼不同的併發程序各自都有乙個完全相同的位址範圍,能夠動向某些頁,而又能夠獨立占領某些頁,我們還講了管理和操作虛擬記憶體的問題,特別的,我們討論了儲存分配操作。(對於計算機儲存器的虛擬分配)
第十章: 系統級io 我們描述了unix io的基本概念,如何共享檔案,io重定向是如何工作的,如何訪問檔案的元資料,我們闡述c的標準io庫,及其侷限性,這些侷限性使之不適合網路程式設計,總體來說,本章的主題是後面兩章 網路好併發程式設計的基礎。(檔案讀取)
第十一章:網路程式設計 通過本章的學習,能夠編寫乙個簡單的web伺服器。並講述位於所有網路程式底層的客戶端和伺服器模型,能用套間字來編寫乙個internet客戶端和伺服器,最後介紹文字傳輸協議,開發乙個簡單的迭代式web伺服器。
第十二章 :併發程式設計 這一章以internet伺服器設計為例子介紹併發程式設計,我們比較對照三種編寫併發程式的基本機制(程序,io多路復用,執行緒),並展示如何用他們來建造internrt伺服器,**用p,v訊號操操作來實現同步,執行緒安全,和可重入,競爭安全和死鎖等基本原則,最後,描述執行緒級程式設計的使用方法,並用這種方法來表達應用程式的並行性,使得程式在多核處理器上能夠執行得更快。
綜上:十二章的內容,以c語言為主設計的程式,來介紹計算機系統是如何執行程式並獲得我們想要的結果,在c語言的知識體系中,包括基本資料型別,程式控制,io流,異常控制,併發程式設計等部分,而深入理解計算機系統的整體設計也是如此。
第一部分講的是程式的結構和執行,先從c語言中的基本資料型別開始,說明基本資料型別是如何表示在計算系統中,以怎麼樣的方式儲存,其次介紹程式的設計在什麼樣的計算機系統中,即c語言程式在計算機系統中如何執行,包括軟體層和硬體層,鑑於此,如何優化程式呢?最後介紹資料的儲存形式和位置,也就是計算機中的儲存器層次結構;首先介紹了資料資訊的表示和處理,也就是資料的儲存形式,整型浮點型資料的表示,通常在c語言層面我們用數字來表示資料,如有符號數或者無符號數,那麼,這些資料是怎麼樣儲存計算機硬體層的呢?以二進位制數的儲存在計算機記憶體中,通常以補碼的形式表示,第三章表示的是程式的機器及表示,程式涉及基本流程,資料表示等,這些內容是如何在計算機系統中執行的呢?首先c語言程式轉化為計算機能夠理解的組合語言,組合語言在計算機系統中執行,顯示結果。第四章處理器系統是指能夠在硬體層計算機是怎麼樣來執行程式的,這方面就會涉及到時鐘時序和電路的邏輯門和二極體等方面的知識。第五章設計到程式的優化,如何才能狗設計程式最大限度中使用計算機資源。第六章為儲存器結構,程式中的資料值如何儲存在計算機中,計算機是如何呼叫有用的資訊,並且,儲存器的結構是怎麼樣的。
第二部分為在系統中執行程式。當我們需要在系統中執行程式,需要考慮程式的異常和虛擬記憶體的問題,當在系統中執行程式,需要考慮程式的效能和記憶體分配問題,第七章講的是鏈結的問題,第八章說明當程式出現異常時,在計算機系統中會出現什麼樣的操作過程,來處理異常,第九章將虛擬記憶體,計算機有自己的儲存器層次,但是在執行程式時,徐婭萍考慮講不痛的程式儲存在不同的位置,以提高程式執行的效率,因此將計算機儲存劃分為不同的區域,儲存計程式的不同部分,進而來提高計算機執行的效率。
第三部分講的是程式時間的互動和通訊,既然是程式之間的通訊,就需要在不同程式時間進行檔案的傳遞,檔案的傳遞需要在不同的程式之間進行,則需要考慮檔案傳輸問題,網路程式設計從一定程度上來講可以認為是檔案傳輸的一種方式,併發程式設計時基於計算機多核處理器而實現的檔案處理方式,第十章講的是系統級io,io檔案傳輸系統是電腦程式與外界進行檔案互動的方式,第十一章講的是計算機網路程式設計,基於c的網路程式設計,以實現文件的傳輸,第十二章講的是計算機併發程式設計,通過併發程式設計,使得程式在多核處理器上能夠執行得更快。
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...
《深入理解計算機系統》
知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...
深入理解計算機系統
系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...