圖書標籤: 計算機體係結構 計算機科學 Linux CS 計算機 編程 我的專業書籍 C++
发表于2024-11-11
計算機係統基礎 第2版 pdf epub mobi txt 電子書 下載 2024
本書主要介紹與計算機係統相關的核心概念,解釋這些概念如何相互關聯並終影響程序執行的結果和性能。本書共分8章,主要內容包括數據的錶示和運算、程序的轉換及機器級錶示、程序的鏈接、程序的執行、存儲器層次結構、虛擬存儲器、異常控製流和I/O操作的實現等。本書將計算機係統每個抽象 層涉及的重要概念通過程序的開發和運行串聯起來,內容詳盡,反映現實,概念清楚,通俗易懂,實例豐富,並提供大量典型習題以供讀者練習。本書可以作為計算機專業本科或大專院校學生計算機係統方麵的基礎性教材,也可以作為有關專業研究生或計算機技術人員的參考書。
----------
前言
後 PC 時代的到來,使得原先基於 PC 而建立起來的專業教學內容已經遠遠不能反映現代社會對計算機專業人纔的培養要求,原先計算機專業人纔培養強調“程序”設計也變為更強調“係統”設計。這需要我們重新規劃教學課程體係,調整教學理念和教學內容,加強學生係統能力培養,使學生能夠深刻理解計算機係統整體概念,更好地掌握軟/硬件協同設計和程序設計技術,從而更多地培養齣滿足業界需求的各類計算機專業人纔。不管培養計算機係統哪個層麵的計算機技術人纔,計算機專業教育都要重視學生“係統觀”的培養。
本書的主要目的就是為加強計算機專業學生的“係統觀”而提供一本關於“計算機係統基礎”課程教學的教材。
1. 本書的寫作思路和內容組織
本書從程序員視角齣發,重點介紹應用程序員如何利用計算機係統相關知識來編寫更有效的程序。本書以高級語言程序的開發和運行過程為主綫,將該過程中每個環節所涉及的硬件和軟件的基本概念關聯起來,試圖使讀者建立一個完整的計算機係統層次結構框架,瞭解計算機係統的全貌和相關知識體係,初步理解計算機係統中的每一個抽象層及其相互轉換關係,建立高級語言程序、ISA、OS、編譯器、鏈接器等之間的相互關聯;對指令在硬件上的執行過程和指令的底層硬件執行機製有一定的認識和理解,從而增強讀者在程序的調試、性能優化、移植和健壯性保證等方麵的能力,並為後續的“計算機組成與設計”“操作係統”“編譯技術”“計算機體係結構”等課程打下堅實基礎。
本書的具體內容包括:程序中處理的數據在機器中的錶示和運算、程序中各類控製語句對應的機器級代碼的結構、可執行目標代碼的鏈接生成、可執行目標代碼中的指令序列在機器上的執行過程、存儲訪問過程、打斷程序正常執行的機製以及程序中的 I/O 操作功能如何通過請求操作係統內核提供的係統調用服務來完成等。
不管構建一個計算機係統的各類硬件和軟件多麼韆差萬彆,計算機係統的構建原理以及在計算機係統上的程序轉換和執行機理是相通的,因而,本書僅介紹一種特定計算機係統平颱下的相關內容。本書所用的平颱為 IA-32/x86-64 + Linux + GCC + C 語言
本書共有 8 章,分兩個部分
第一部分主要是係統概要並介紹可執行目標文件的生成,包含第 1~4 章
第二部分主要介紹可執行目標文件的運行,包含第 5~8 章
第 1 章是計算機係統概述
第 2 章和第 3 章分彆介紹高級語言程序中的數據和語句所對應的底層機器級錶示,展示的是高級語言程序到機器級語言程序的對應轉換關係
第 4 章主要介紹如何將不同的程序模塊鏈接起來構成可執行目標文件,展示的是程序的鏈接環節
第 5 章和第 6 章著重介紹程序的運行環節,包括與程序運行密切相關的硬件部分——CPU 及存儲器的組織
第 7 章介紹打斷程序正常運行的事件機製——異常控製流
第 8 章主要介紹程序中I/O操作的實現機製
此外,附錄 A 中還補充瞭數字邏輯電路的基礎內容,為那些沒有數字邏輯電路基礎知識的讀者閱讀本書提供方便。
2. 讀者所需的背景知識
本書假定讀者對C語言程序設計有一定的基礎,已經掌握瞭C語言的語法和各類控製語句、數據類型及其運算、各類錶達式、函數調用和C語言的標準庫函數等相關知識。
此外,本書對於程序中指令的執行過程進行瞭介紹,這涉及布爾代數、邏輯運算電路、存儲部件等內容,因而,本書正文內容假定讀者具有數字邏輯電路基礎知識。不過,如果讀者不具備這些背景知識的話,可以參看本書附錄 A
本書所用的平颱為 IA-32/x86-64 + Linux + GCC + C 語言。書中大多數 C 語言程序對應的機器級錶示都是基於 IA-32 + Linux 平颱用 GCC 編譯器生成的,本書會在介紹程序的機器級錶示之前,先簡要介紹 IA-32 的指令集體係結構,包括其機器語言和匯編語言的介紹,因而,讀者無須任何機器語言和匯編語言的背景知識。
XII3. 使用本書作為教材的課程及教學建議
目前國內大學計算機專業課程設置,大多是按計算機係統層次結構進行橫嚮切分,自下而上分解成數字邏輯電路、計算機組成原理、匯編程序設計、操作係統、編譯原理、程序設計等課程,而且,每門課程都僅局限在本抽象層,相互之間幾乎沒有關聯,因而學生對整個計算機係統的認識過程就像“瞎子摸象”一樣,很難形成一個對完整計算機係統的全麵認識。雖然國內有些高校也有計算機係統概論、計算機係統入門或導論之類的課程,但通常內容較廣且結構較鬆散,基本上是計算機課程概論,因而很難使學生真正形成計算機係統層次結構整體框架。
筆者對美國幾所頂級大學近年來相關課程體係進行瞭跟蹤調查,發現他們都非常注重計算機係統能力的培養,都在講完高層的編程語言及程序設計課程後開設一門關於計算機係統的基礎課程,如 MIT 的 6.004、UC-Berkeley 的 CS 61C、CMU 的 CS 213、斯坦福大學的 CS 107 等。這些課程在內容上特彆注重計算機係統各抽象層的縱嚮關聯,將高級語言程序、匯編語言程序、機器代碼及其執行串聯起來,為學生進一步學習後續相關課程打下堅實的基礎。
本書在藉鑒國外相關課程教學內容和相關教材的基礎上編寫,適閤於在完成程序設計基礎課程後進行學習。本書內容貫穿計算機係統各個抽象層,是關於計算機係統的最基礎的內容,因而使用本書作為教材開設的課程適用於所有計算機相關專業。
使用本書作為教材開設的課程名稱可以是“計算機係統基礎”“計算機係統導論”或類似名稱,可以有以下幾種安排方案。
章號 內容 課程
① ② ③ ④ ⑤
1. 計算機係統概述 √√√√√
2. 數據的機器級錶示與處理 √√√√√
3. 程序的轉換及機器級錶示 √√√√
4. 程序的鏈接 √√√
5. 程序的執行 √√√√
6. 層次結構存儲係統 √√√√
7. 異常控製流 √√
8. I/O 操作的實現 √√
附錄 A 數字邏輯電路基礎 √√√√√
上錶的課程安排及教學建議說明如下:
第 ① 種課程適閤於軟件工程等不需要深入掌握底層硬件細節的專業。開設該課程後,則無須再開設“數字邏輯電路”“匯編程序設計”“計算機組成原理”和“微機原理與接口技術”課程,因為本書基本涵蓋瞭上述課程中的所有主要內容,並將它們與高級語言程序、操作係統中的部分概念、編譯和鏈接中的基本內容有機聯係在一起瞭。這樣做,不僅能縮減大量課時,還可以通過該課程的講授為學生係統能力培養打下堅實的基礎。因為課程內容較多,建議開設為一個一學年課程,第一學期學習附錄 A 和第 1~4 章,第二學期學習第 5~8 章。每學期的總學時數為 60 左右。
第 ② 種課程適閤於計算機工程、計算機係統等偏係統或硬件的專業。可以在該課程後開設一門將數字邏輯電路和計算機組成及設計的內容閤並的課程,專門介紹計算機微體係結構的數字係統設計技術;也可以在該課程之前先開設“數字邏輯電路”課程,之後再開設“計算機組成與設計”課程。美國幾個頂級大學采用的是前麵一種做法。建議開設為一個一學期課程,總學時數為 80 左右。
第 ③、④ 和 ⑤ 種課程,適閤於其他與計算機相關的非計算機專業或那些大專類計算機專業,在學時受限的情況下,可以選擇一些基本內容進行講授。建議開設為一個一學期課程,總學時數在 60~80
本書對於存儲訪問機製和異常控製流這兩部分內容,在介紹基本原理的基礎上,還簡要介紹瞭 IA-32/x86-64 + Linux 平颱的具體實現(書中帶 * 的章節)。由於基本原理在一個具體平颱中的實現往往比較復雜,因而帶 * 章節的內容相對煩瑣。若本書用作教材的話,這部分可以選擇不作為課堂教學內容。但是,如果後續的操作係統課程實驗內容是基於 IA-32 + Linux 平颱實現的話,建議將這部分內容作為重點講解。
4. 第 2 版修訂內容
由於第 1 版教材編寫時間比較倉促,因而導緻部分內容不太完善,示例不太豐富,特彆是,近年來計算機係統相關技術發生瞭一些變革,64 位係統的使用越來越廣泛。為瞭更好地完善教材內容,豐富教學示例,反映技術的進步,拓寬本領域知識的覆蓋麵,更加閤理地構建知識框架,第 2 版在第 1 版的基礎上進行瞭若乾修訂,主要包括以下幾個方麵。
第 1 章 計算機係統概述:刪除瞭關於計算機發展曆史和計算機硬件的介紹,增加瞭對馮·諾依曼結構模型機及其指令係統的介紹,並通過模型機中具體程序例子簡要介紹瞭高級語言程序與機器級代碼的對應關係,以及在模型機上執行程序和指令的過程。此外,在計算機係統層次結構部分,增加瞭對係統核心層之間關聯的介紹,包括語言規範中的未定義行為、不確定行為,以及應用程序二進製接口(ABI)和應用編程接口(API)等的介紹;在性能評價部分,還增加瞭對阿姆達爾定律的介紹。
第 2 章 數據的機器級錶示與處理:增加瞭大量的 C 程序示例,將高級編程語言規範與具體程序執行結果結閤起來介紹,以使讀者充分理解程序中數據在機器中的錶示與運算所涉及的各層麵概念之間的關聯關係。
第 3 章 程序的轉換及機器級錶示:增加瞭在 C 語言中直接嵌入匯編代碼的方法、Intel架構指令格式及其指令機器碼解析舉例、非靜態局部變量的分配、緩衝區溢齣概念解釋、棧隨機化機製和棧破壞檢測舉例、64 位架構程序舉例等內容。
第 4 章 程序的鏈接:增加瞭 ELF 頭解析舉例、節頭錶結構及其解析舉例、可執行文件的存儲器映像舉例、動態鏈接時程序無關代碼(PIC)的實現等內容。
第 5 章 程序的執行:增加瞭對 MIPS 單周期數據通路結構的介紹。
第 6 章 層次結構存儲係統:增加瞭 DDR/DDR2/DDR3 SDRAM 等主存芯片技術和 64 位架構 Intel Core i7 + Linux 的存儲係統介紹。
第 7 章 異常控製流:增加瞭進程的存儲器映射及其共享對象和私有的寫時拷貝對象的基本概念、程序加載處理過程、故障的信號處理和非本地跳轉等內容。
第 8 章 I/O 操作的實現:增加瞭文件流緩衝區及其讀寫操作、QPI 總綫、存儲器總綫、PCI-Express 總綫以及基於總綫的硬件互連結構等內容。
5. 如何閱讀本書
本書的齣發點是試圖將計算機係統每個抽象層中涉及的重要概念通過程序的開發和運行過程這個主綫串起來,因而本書涉及的所有問題和內容都是從程序齣發的。這些內容或者涉及程序中數據的錶示及運算;或者涉及程序對應的機器級錶示;或者涉及多個程序模塊的鏈接;或者涉及程序的加載及運行;或者涉及程序執行過程中的異常中斷事件;或者涉及程序中的 I/O 操作等。從讀者熟悉的程序開發和運行過程齣發來介紹計算機係統基本概念,可以使讀者將新學的概念與已有的知識關聯起來,不斷拓展和深化知識體係。特彆是,因為所有內容從程序齣發,所以所有內容都可以通過具體程序進行驗證,邊學邊乾中使所學知識轉化為實踐能力。
本書雖然涉及內容較廣,但所有內容之間具有非常緊密的關聯,因而,建議讀者在閱讀本書時采用“整體性”學習方法,通過第1章的學習先建立一個粗略的計算機係統整體框架,然後不斷地通過後續章節的學習,將新的內容與前麵的內容關聯起來,以逐步細化計算機係統框架內容,最終形成比較完整的、相互密切關聯的計算機係統整體概念。
本書提供瞭大量的例題和課後習題,這些題目大多是具體的程序示例,通過對這些示例的分析或驗證性實踐,讀者可以對基本概念有更加深刻的理解。因此,在閱讀本書時,若遇到一些難以理解的概念,可以先不用仔細琢磨,而是通過具體的程序示例對照基本概念和相關手冊中的具體規定進行理解。
本書提供的小貼士對理解書中的基本概念很有用,但是,由於篇幅有限,這些補充資料不可能占用很大篇幅,因而大多是簡要內容。如果讀者希望瞭解更多的細節內容,可以自行到互聯網上查找。
本書內容雖然涉及高級語言程序設計、數字邏輯電路、匯編語言程序、計算機組成與係統結構、操作係統、編譯和鏈接等,但是,本書主要講解它們之間的關聯,而不提供其細節,如果讀者想要瞭解更詳細的關於數字係統設計、操作係統、編譯技術、計算機體係結構等方麵的內容,則還要閱讀關於這些內容的專門書籍。不過,若讀者學完本書後再去閱讀這些方麵的專門書籍,則會輕鬆很多。
袁春風
----------
本書對應的 中國大學 MOOC 慕課 在綫課程
南京大學 計算機係統基礎
計算機係統基礎 (一):程序的錶示、轉換與鏈接 [國傢精品]
https://www.icourse163.org/course/NJU-1001625001
計算機係統基礎 (二):程序的執行和存儲訪問
https://www.icourse163.org/course/NJU-1001964032
計算機係統基礎 (三):異常、中斷和輸入/輸齣
https://www.icourse163.org/course/NJU-1002532004
授課老師 南京大學 教授 袁春風
計算機係統基礎 習題解答與教學指導 主編 袁春風 (2017.4)
https://book.douban.com/subject/27023252/
----------
重要參考 CSAPP
Computer Systems: A Programmer's Perspective (CSAPP)
http://csapp.cs.cmu.edu/
深入理解計算機係統 第 3 版 譯者 龔奕利 賀蓮 (2016.11)
https://book.douban.com/subject/26912767/
Computer Systems: A Programmer's Perspective, 3Ed, by Randal E. Bryant, David R. O'Hallaron (2015.3)
https://www.amazon.com/dp/013409266X/
15-213/18-213: Introduction to Computer Systems
https://www.cs.cmu.edu/~213/schedule.html
CMU (Carnegie Mellon University) 卡耐基梅隆大學 CS 213 是 CSAPP 對應的課程
課程編號/專業對應關係:
15-213 Computer Science
18-213 Computer Engineering
15-513 Graduate
Lab Assignments
http://csapp.cs.cmu.edu/3e/labs.html
實驗作業
袁春風 南京大學計算機科學與技術係教授。主要研究領域為大數據計算與並行處理技術、Web信息檢索與文本挖掘技術等。在相關領域承擔科研項目近40項,發錶論文近70篇,兩次獲江蘇省科技進步二等奬,並獲江蘇省軟件一等奬。
主持的“計算機組成原理”和“計算機組成與係統結構”課程被遴選為精品課程、精品資源共享課、江蘇省精品課程。
主編的《計算機組成與係統結構》以及《計算機組成與係統結構習題解答與教學指導》獲“十二五”普通高等教育規劃教材和江蘇省精品教材。
作為主要成員獲2013年江蘇省教學成果特等奬和2014年國傢教學成果二等奬。
計算機係統基礎 (一):程序的錶示、轉換與鏈接 獲國傢精品在綫開放課程。
計算機組成與係統結構 課程網站獲江蘇省多媒體課件特等奬。
學習的第一本專業書,我覺得非常不錯,讓我對計算機思維有瞭更深的認識,總算明白瞭計算機整體層麵的聯係與協同運作,瞭解瞭高級語言是如何一步一步通過底層實現的,對於後續計算機相關的專業知識學習打下良好的基礎,相當不錯!
評分建議直接上手CSAPP
評分CSAPP 的本科精益版。配套課程是中國大學 MOOC 網的南京大學-袁春風「計算機係統基礎」。該課程的第一部分「程序的錶示、轉換與鏈接」,對應本書 Ch1 ~ Ch4。
評分建議直接上手CSAPP
評分學習的第一本專業書,我覺得非常不錯,讓我對計算機思維有瞭更深的認識,總算明白瞭計算機整體層麵的聯係與協同運作,瞭解瞭高級語言是如何一步一步通過底層實現的,對於後續計算機相關的專業知識學習打下良好的基礎,相當不錯!
評分
評分
評分
評分
計算機係統基礎 第2版 pdf epub mobi txt 電子書 下載 2024