《深入理解计算机系统(英文版.第2版)》
《深入理解計算機系統(英文版.第2版)》china-pub計算機新書推薦
本書雙色印刷,計算機軟硬件理論結合講述的經典之作。
頁碼:1077
基本信息
原書名: Computer Systems: A Programmer's Perspective (2nd Edition)
原出版社: Addison Wesley
作者: (美)Randal E.Bryant??? David R. O'Hallaron??? [作譯者介紹]
叢書名: 經典原版書庫
出版社:機械工業出版社
ISBN:9787111326311
媒體評論
“2005年,我開始采用Bryant和O’Hallaron的這本書作為本科生計算機系統課程的教材。三年后,這本書仍然是我的計算機系統課程教科書的首選。” —— Mirela Damian,維拉諾瓦大學
“本書表述清晰、恰到好處——舉重若輕地呈現了那些非常復雜的內容。” —— Ibrahim Matta, 波士頓大學
“這是一本學習計算機硬件和軟件如何‘真正’協同工作的好書,還教會你為什么了解這些知識會使你成為一個更有價值的程序員。本書還幫你為學習像操作系統和編譯器這樣的高級課程做好準備。在本書中,我最喜歡的章節是關于緩存的,當我第一次發現緩存有多重要時,真是難以置信!” —— Vishal Shah,Ask.com總架構師
?
內容簡介
本書是一本將計算機軟件和硬件理論結合講述的經典教程,內容覆蓋計算機導論、體系結構和處理器設計等多門課程。本書的最大優點是為程序員描述計算機系統的實現細節,通過描述程序是如何映射到系統上,以及程序是如何執行的,使讀者更好地理解程序的行為為什么是這樣的,以及造成效率低下的原因。
相對于第1版,本版主要是反映了過去十年間硬件技術和編譯器的變化,具體更新如下:
1. 對系統的介紹(特別是實際使用部分)做了增加和修改。例如,既保持了原有的針對32位系統的說明,又增加了對64位系統的描述。
2. 增加了很多關于由算術運算溢出以及緩沖區溢出造成安全漏洞的內容。
3. 更詳細講述了處理器對異常的發現和處理。
4. 描述了基于intel core i7處理器的存儲器層次結構,還增加了固態硬盤的內容。
5. 強調并發性,增加了關于并發性一般原則的內容。
?
前言
本書的主要讀者是計算機科學家、計算機工程師,以及那些想通過學習計算機系統的內在運作而能夠寫出更好程序的人。
我們的目的是解釋所有計算機系統的本質概念,并向你展示這些概念是如何實實在在地影響應用程序的正確性、性能和實用性的。其他的系統類書籍都是從構建者的角度來寫的,講述如何實現硬件或是系統軟件,包括操作系統、編譯器和網絡接口。而本書是從程序員的角度來寫的,講述應用程序員如何能夠利用系統知識來編寫出更好的程序。當然,學習一個計算機系統應該做些什么,是學習如何構建一個計算機系統的很好的出發點,所以,對于希望繼續學習系統軟硬件實現的人來說,本書也是一本很有價值的介紹性讀物。
本書概述
本書由12 章組成,旨在闡述計算機系統的核心概念。
·第1 章:計算機系統漫游。這一章通過研究“hello, world”這個簡單程序的生命周期,介紹計算機系統的主要概念和主題。
·第2 章:信息的表示和處理。我們講述了計算機的算術運算,重點描述了會對程序員有影響的無符號數和數的二進制補碼(two’s complement)表示的特性。我們考慮數字是如何表示的,以及由此確定對于一個給定的字長,其可能編碼值的范圍。我們討論該如何表示數字,以及因此用給定的字長能編碼的數值的范圍。我們探討有符號和無符號數字之間類型轉換的效果,還闡述算術運算的數學特性。菜鳥級程序員經常很驚奇地了解到(用二進制補碼表示的)兩個正數的和或者積可能為負。另一方面,二進制補碼的算術運算滿足代數環的特性,因此,編譯器可以很安全地把一個常量乘法轉化為一系列的移位和加法。我們用C 語言的位級操作來說明布爾代數的原理和應用。我們從兩個方面講述了IEEE 標準的浮點格式:一是如何用它來表示數值,一是浮點運算的數學屬性。
·第3 章:程序的機器級表示。我們教讀者如何閱讀由C 編譯器生成的IA32 和x86-64 匯編語言。我們說明為不同控制結構,比如條件、循環和開關語句,生成的基本指令模式。我們還講述過程的執行,包括棧分配、寄存器使用慣例和參數傳遞。我們討論不同數據結構(如結構、聯合(union)和數組)的分配和訪問方式。我們還以分析程序在機器級的樣子作為途徑,來理解常見的代碼安全漏洞,例如,緩沖區溢出,以及理解程序員、編譯器和操作系統可以采取的減輕這些威脅的措施。
·第4 章:處理器體系結構。這一章講述基本的組合和時序邏輯元素,并展示這些元素如何在數據通路(datapath)中組合到一起來執行IA32 指令集的一個稱為“Y86”的簡化子集。本章中處理器設計的控制邏輯是用一種稱為HCL 的簡單硬件描述語言來描述的。用HCL 寫的硬件設計能夠編譯和鏈接到本書提供的模擬器中,還可以根據這些設計生成Verilog 描述,它適合合成(synthesis)到實際可以運行的硬件上去。
·第5 章:優化程序性能。在這一章里,我們介紹了許多提高代碼性能的技術,主要思想就是讓程序員通過使編譯器能夠生成更有效的機器代碼來學習編寫C 代碼。
·第6 章:存儲器層次結構。對應用程序員來說,存儲器系統是計算機系統中最直接可見的部分之一。我們講述不同類型的隨機存取存儲器(RAM)和只讀存儲器(ROM),以及磁盤和固態硬盤的幾何形狀和組織構造。我們描述這些存儲設備是如何放置在層次結構中的,講述訪問局部性是如何使這種層次結構成為可能的。我們通過一個獨特的觀點使這些理論具體化、形象化,那就是將存儲器系統視為一個“存儲器山”,山脊是時間局部性,而斜坡是空間局部性。最后,我們向讀者闡述如何通過改善程序的時間局部性和空間局部性來提高應用程序的性能。
·第7 章:鏈接。本章講述靜態和動態鏈接,包括的概念有可重定位的(relocatable)和可執行的目標文件、符號解析、重定位(relocation)、靜態庫、共享目標庫,以及與位置無關的代碼。
·第8 章:異常控制流。在本書的這個部分,我們通過介紹異常控制流(比如,除了正常分支和過程調用以外的控制流的變化)的一般概念,打破單一程序的模型。我們給出存在于系統所有層次的異常控制流的例子,從底層的硬件異常和中斷,到并發進程的上下文切換,到由于Unix 信號傳送引起的控制流突變,到C 語言中破壞棧原則的非本地跳轉(nonlocal jump)。
·第9 章:虛擬存儲器。我們講述虛擬存儲器系統是希望讀者對它是如何工作的以及它的特性有所了解。我們想讓讀者了解為什么不同的并發進程各自都有一個完全相同的地址范圍,能共享某些頁,而又獨占另外一些頁。我們還覆蓋講了一些管理和操縱虛擬存儲器的問題。
特別地,我們討論了存儲分配操作,就像Unix 的malloc 和free 操作。
·第10 章:系統級I/O。我們講述Unix I/O 的基本概念,例如文件和描述符。我們描述如何共享文件,I/O 重定向是如何工作的,還有如何訪問文件的元數據。我們還開發了一個健壯的帶緩沖區的I/O 包,可以正確處理一種稱為short counts 的奇特行為,也就是庫函數只讀取一部分的輸入數據。我們闡述C 的標準I/O 庫,以及它與Unix I/O 的關系,重點談到標準I/O 的局限性,這些局限性使之不適合網絡編程。
·第11 章:網絡編程。對編程而言,網絡是非常有趣的I/O 設備,將許多我們前面文中學習的概念,比如進程、信號、字節順序(byte order)、存儲器映射和動態存儲器分配,聯系在一起。網絡程序還為下一章的主題—并發,提供了一個很令人信服的上下文。本章只是網絡編程的一個很小的部分,使讀者能夠編寫一個Web 服務器。我們還講述了位于所有網絡程序底層的客戶端- 服務器模型。我們展現了一個程序員對Internet 的觀點,并且教讀者如何用套接字(socket)接口來編寫Internet 客戶端和服務器。最后,我們介紹超文本傳輸協議HTTP,并開發了一個簡單的迭代式(iterative)Web 服務器。
·第12 章:并發編程。這一章以Internet 服務器設計為例介紹了并發編程。我們比較對照了三種編寫并發程序的基本機制(進程、I/O 多路復用技術和線程),并且展示如何用它們來建造并發Internet 服務器。我們探討了用P、V 信號操作來實現同步、線程安全和可重入5(reentrancy)、競爭條件以及死鎖等的基本原則。我們還講述了線程級編程的使用方法,來解釋應用程序中的并行性,使得程序在多核的處理器上能執行得更快。
本版新增內容
本書的第1 版于2003 年出版。考慮到計算機技術發展如此迅速,這本書的內容還算是保持得很好。事實證明Intel x86 的機器上運行類Unix 操作系統,加上采用C 語言編程,是一種能夠涵蓋當今許多系統的組合。硬件技術和編譯器的變化,以及很多教師教授這些內容的經驗,都促使我們做了大量的修改。
下面列出的是一些更加詳細的改進:
.·第2 章:信息的表示和處理。通過更加詳細地解釋概念以及更多的練習題和家庭作業,我們試圖使這部分內容更加易懂。我們將一些比較偏理論的內容放到了網絡旁注里。還講述了一些由于計算機算術運算的溢出造成的安全漏洞。
·第3 章:程序的機器級表示。我們將內容的覆蓋范圍擴展到了包括x86-64,也就是將x86處理器擴展到了64 位字長。也使用了更新版本的GCC 產生的代碼。另外還增強了對緩沖區溢出漏洞的描述。在網絡旁注里,我們給出了兩類不同的浮點指令,還介紹了當編譯器試圖做更高等級優化的時候,做的一些奇特的變換。另外,還有一個網絡旁注描述了如何在一個C 語言程序中嵌入x86 匯編代碼。
·第4 章:處理器體系結構。更加詳細地說明了我們的處理器設計中的異常發現和處理。在網絡旁注里,我們也給出了處理器設計的Verilog 描述映射,使得我們的設計能夠合成到可運行的硬件上。
·第5 章:優化程序性能。我們極大地改變了對亂序處理器如何運行的描述,還提出了一種簡單的技術,能夠基于程序的數據流圖表示中的路徑來分析程序的性能。在網絡旁注里,描述了C 語言程序員如何能夠利用較新的x86 處理器中提供的SIMD(單指令流,多數據流)指令來編程。
·第6 章:存儲器層次結構。我們增加了固態硬盤的內容,還更新了我們的表述,使之基于Intel Core i7 處理器的存儲器層次結構。
·第7 章:鏈接。本章的變化不大。
·第8 章:異常控制流。我們改進了對于進程模型如何引入一些基本的并發概念的討論,例如非確定性。
·第9 章:虛擬存儲器。我們更新了存儲器系統案例研究,采用了64 位Intel Core i7 處理器為例來講述。我們還更新了malloc 函數的示例實現, 使之既能在32 位也能在64 位環境中執行。
·第10 章:系統級I/O。本章的變化不大。
·第11 章:網絡編程。本章的變化不大。
·第12 章:并發編程。我們增加了關于并發性一般原則的內容,還講述了程序員如何利用線程級并行性使得程序在多核機器上能運行得更快。
此外,我們還增加和修改了很多練習題和家庭作業。
圖書詳情及購買地址:http://www.china-pub.com/197441&ref=cnblogs
轉載于:https://www.cnblogs.com/china-pub/archive/2011/01/19/1939050.html
總結
以上是生活随笔為你收集整理的《深入理解计算机系统(英文版.第2版)》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020 大厂研发岗薪酬排名出炉,看完我
- 下一篇: Visual C# 2010从入门到精通