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