內容簡介
《計算機科學叢書:計算機存儲與外設》由資深的計算機體係結構教育傢Alan Clements博士編寫,原書名為《計算機體係結構:原理與演變》(Computer Organization&Architecture:Themes and Variations),書中不僅覆蓋單機係統的組成原理和係統結構的各個方麵,還包括計算機的性能評價方法以及多發射、粗粒度並行等內容、作者希望《計算機科學叢書:計算機存儲與外設》能夠適閤電子工程(EE)、電子與計算機工程(ECE)、計算機科學(CS)等不同專業的教學需要。、書中圍繞基本概念、指令集體係結構、處理器組成和能效、存儲與外設以及處理器級並行等五個核心問題將這些內容有條不紊地組織在一起,以便滿足不同專業的教學需要。
中文版引進的時候綜閤考慮國內高校“計算機組成與結構”或類似課程的教學目標以及我們對《計算機科學叢書:計算機存儲與外設》的定位,對原書進行瞭適當裁剪和重新組閤,分為兩冊:《計算機組成原理》和《計算機存儲與外設》。
《計算機科學叢書:計算機存儲與外設》即為《計算機存儲與外設》,涵蓋原書第四部分,共4章,主要講述計算機係統中的存儲器、總綫和輸入/輸齣等內容。
作者簡介
艾倫·剋萊門茨(Alan Clements)國際著名的計算機體係結構教育的推動者和踐行者。他於1997年獲得英國拉夫堡大學(Loughborough University)博士學位,隨後加入提賽德大學(University of Teesside)計算機科學係。在20世紀70~80年代,他編寫瞭兩本計算機體係結構領域的重要教材:《計算機硬件原理》(The Principles of Computer Hardware)和《微處理器係統設計》(Microprocessor Systems Design)。
2001年,他擔任瞭計算機學會國際學生競賽(CSIDC)主席,並於同年獲得英國國傢教學奬(National Teaching Fellowship)。由於在計算機體係結構教育方麵的貢獻,他於2002年獲得IEEECS本科教學奬,2006年獲得IEEECS泰勒布斯教育奬(Taylor L.Booth award)。2009年被選為IEEEFellow.,他在IEEE計算機學會擔任瞭多個職務,並積極參加課程體係設計,撰寫瞭關於未來計算機體係結構教育的論文,參加瞭CS/ACM2001計算課程體係的編寫和製定工作。2010年Alan Clements從全職教學崗位退休。
內頁插圖
目錄
齣版者的話
譯者序
前言
本書導讀
作者簡介
第1章 Cache存儲器和虛擬存儲器
1.1 Cache存儲器概述
1.1.1 Cache存儲器的結構
1.2 Cache存儲器的性能
1.3 Cache的組織
1.3.1 全相聯映射Cache
1.3.2 直接映射Cache
1.3.3 組相聯Cache
1.3.4 僞相聯、Victim、Annex和Trace Cache
1.4 Cache設計中要考慮的因素
1.4.1 物理Cache和邏輯Cache
1.4.2 Cache電氣特性
1.4.3 Cache一緻性
1.4.4 塊大小
1.4.5 取指策略
1.4.6 多級Cache
1.4.7 指令和數據Cache
1.4.8 寫Cache
1.5 虛擬存儲器和存儲器管理
1.5.1 存儲器管理
1.5.2 虛擬存儲器
本章小結
習題
第2章 主存儲器
2.1 簡介
2.1.1 存儲係統的原理和參數
2.1.2 存儲層次
2.2 主存儲器
2.2.1 SRAM
2.2.2 交叉存儲器
2.3 DRAM
2.3.1 DRAM時序
2.3.2 DRAM技術的發展
2.4 隻讀存儲器係列
2.4.1 EPROM係列
2.5 新興的非易失性技術
2.5.1 鐵電遲滯
2.5.2 MRAM——磁阻隨機訪問存儲器
2.5.3 雙嚮存儲器
本章小結
習題
第3章 二級存儲器
3.1 磁盤驅動器
3.2 磁性和數據存儲
3.2.1 讀/寫頭
3.2.2 磁記錄密度的極限
3.2.3 磁盤數據記錄原理
3.3 磁盤上的數據組織
3.3.1 磁道和扇區
3.3.2 磁盤參數和性能
3.3.3 SMART技術
3.4 安全存儲和RAID係統
3.5 固態盤
3.6 磁帶
3.7 光學存儲技術
3.7.1 數字音頻
3.7.2 從CD中讀取數據
3.7.3 底層數據編碼
3.7.4 可記錄光盤
3.7.5 DVD
3.7.6 藍光
本章小結
習題
第4章 輸入/輸齣
4.1 I/O的基本原理
4.1.1 外圍設備寄存器尋址機製
4.1.2 外圍設備訪問和總綫寬度
4.2 數據傳輸
4.2.1 開環數據傳輸
4.2.2 閉環數據傳輸
4.2.3 緩衝數據
4.3 I/O策略
4.3.1 程序控製I/O
4.3.2 中斷驅動I/O
4.3.3 直接存儲器訪問
4.4 I/O係統的性能
4.5 總綫
4.5.1 總綫結構和拓撲
4.5.2 總綫的結構
4.6 總綫仲裁
4.6.1 本地化仲裁和VMEbus
4.6.2 分布式仲裁
4.7 PCI和PCIe總綫
4.7.1 PCI總綫
4.7.2 PCIe總綫
4.7.3 CardBus、PC卡和ExpressCard
4.8 SCSI和SAS接口
4.9 串行接口總綫
4.9.1 以太網
4.9.2 FireWire 1394串行總綫
4.9.3 USB
本章小結
習題
參考文獻
前言/序言
21世紀是科學和技術奇跡頻齣的時代。計算機已經做到瞭人們期望它做到的一切——甚至更多。生物工程解開瞭細胞的秘密,使科學傢能夠閤成10年前無法想象的新藥。納米技術讓人們有機會窺探微觀世界,將計算機革命與原子工程結閤在一起創造齣的納米機器人,也許有一天能夠植入人體,修復人體內部的創傷。普適計算帶來瞭手機、MP3播放器和數碼相機,使人們彼此之間能夠通過Internet保持聯係。計算機是幾乎所有現代技術的核心。本書將闡述計算機是如何工作的。
從20世紀50年代起大學就開始教授這門被稱為計算的學科瞭。一開始,大型機主導瞭計算,這個學科包括對計算機本身、控製計算機的操作係統、語言和它們的編譯器、數據庫以及商業計算等的研究。此後,計算的發展呈指數增長,到現在已包含多個不同的領域,任何一所大學都不可能完全覆蓋這些領域。人們不得不將注意力集中在計算的基本要素上。這一學科的核心在於機器本身:計算機。當然,作為一個理論概念,計算可以脫離計算機而獨立存在。實際上,在20世紀三四十年代計算機革命開始之前,人們已經進行瞭相當多的關於計算機的科學理論基礎的研究工作。然而,計算在過去40年裏的發展方式與微處理器的崛起緊密聯係在一起。如果人們無法擁有價格非常便宜的計算機,Internet也無法按照它已有的軌跡取得成功。
由於計算機本身對計算的發展及其發展方嚮産生瞭巨大影響,在計算的課程體係中包含一門有關計算機如何工作的課程是非常閤理的。大學裏計算機科學或計算機工程方嚮的培養方案中都會有這樣一門課程。實際上,專業和課程的認證機構都將計算機體係結構作為一項核心要求。比如,計算機體係結構就是IEEE計算機協會和ACM聯閤發布的計算學科課程體係的中心內容。
介紹計算機具體體現與實現的課程有各種各樣的名字。有人將它們叫作硬件課,有人管它們叫作計算機體係結構,還有人把它們叫作計算機組成(以及它們之間的各種組閤)。本書用計算機體係結構錶示這門研究計算機設計方法和運行方式的課程。當然,我會解釋為什麼這門課程有那麼多不同的名字,並會指齣可以用不同的方式來看待計算機。
與計算機科學的所有領域一樣,計算機體係結構也隨著指令集設計、指令級並行(ILP)、Cache緩存技術、總綫係統、猜測執行、多核計算等技術的發展而飛速進步。本書將討論所有這些話題。
計算機體係結構是計算機科學的基石。例如,計算機性能在今天的重要性超過瞭以往任何時候,為瞭做齣最佳選擇,即便是那些購買個人電腦的用戶也必須瞭解計算機係統的結構。
數據結構與算法:高效計算的基石 本書深入探討瞭計算機科學的核心領域——數據結構與算法。作為理解和構建高效計算機係統的基石,數據結構為信息的組織和存儲提供瞭多種模型,而算法則是處理和操作這些數據的精確指令集。本書旨在為讀者建立紮實的理論基礎,並掌握在實際問題中選擇和應用最閤適的數據結構與算法的能力,從而設計齣性能優越、可擴展性強的軟件解決方案。 第一部分:數據結構的奧秘 本部分將從最基本的數據組織形式齣發,逐步深入到更復雜、更抽象的數據結構。我們將以清晰的邏輯和詳實的示例,解析每種數據結構的內在原理、特性以及適用場景。 第一章:綫性數據結構 數組 (Arrays): 作為最基本的數據結構,數組提供瞭一種在內存中連續存儲相同類型元素的方式。我們將詳細介紹數組的創建、訪問、插入和刪除操作的時間復雜度,並討論靜態數組和動態數組的區彆。示例將涵蓋如何使用數組實現查找錶、棧和隊列等基本操作。 鏈錶 (Linked Lists): 鏈錶與數組不同,其元素在內存中可以不連續存儲,通過指針連接。我們將深入探討單嚮鏈錶、雙嚮鏈錶和循環鏈錶的結構特點,以及它們在插入、刪除和遍曆等操作上的優勢。通過對比鏈錶和數組,讀者將能更好地理解在不同場景下選擇哪種數據結構更為閤適。 棧 (Stacks): 棧是一種遵循“後進先齣”(LIFO)原則的數據結構。本書將介紹棧的抽象數據類型(ADT)定義,並展示如何使用數組和鏈錶來實現棧。我們將深入分析棧在函數調用、錶達式求值和迴溯算法等方麵的應用,例如深度優先搜索(DFS)的實現。 隊列 (Queues): 隊列則遵循“先進先齣”(FIFO)原則。我們將講解隊列的ADT,以及其在數組和鏈錶上的實現。隊列在任務調度、緩衝區管理和廣度優先搜索(BFS)等算法中扮演著關鍵角色。 第二章:非綫性數據結構 樹 (Trees): 樹是一種層次結構的數據結構,由節點和邊組成,具有廣泛的應用。我們將從基本概念齣發,講解樹的定義、術語(如根節點、父節點、子節點、葉子節點)以及遍曆方法(前序、中序、後序)。 二叉樹 (Binary Trees): 作為最常見的樹結構,二叉樹的每個節點最多有兩個子節點。我們將深入研究二叉搜索樹(BST),包括其插入、刪除、查找操作的原理和時間復雜度。此外,我們將探討平衡二叉搜索樹(如AVL樹、紅黑樹)如何通過自平衡機製來保證高效的查找和修改性能。 堆 (Heaps): 堆是一種特殊的完全二叉樹,滿足堆屬性(最大堆或最小堆)。我們將講解堆的構建、插入和刪除操作,並重點介紹堆在優先隊列(Priority Queues)和堆排序中的應用。 圖 (Graphs): 圖是一種更通用的非綫性結構,由頂點(節點)和連接頂點的邊組成。我們將定義圖的基本術語,如無嚮圖、有嚮圖、加權圖、連通分量等。 圖的錶示: 詳細介紹鄰接矩陣和鄰接錶兩種錶示方法,並分析它們的優缺點。 圖的遍曆: 深入講解廣度優先搜索(BFS)和深度優先搜索(DFS)算法,並提供相應的圖解和代碼示例。 圖的經典算法: 介紹最短路徑算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成樹算法(如Prim算法、Kruskal算法)等,並分析其實現原理和應用場景。 第三章:哈希錶 (Hash Tables) 哈希錶是一種高效的數據結構,通過哈希函數將鍵映射到存儲位置,實現快速的插入、刪除和查找。我們將詳細講解哈希函數的選擇原則,以及衝突解決方法,如鏈地址法(Separate Chaining)和開放地址法(Open Addressing,包括綫性探測、二次探測和雙重哈希)。本書將通過實例說明哈希錶在字典、緩存和數據庫索引等方麵的廣泛應用,並分析其平均和最壞情況下的時間復雜度。 第二部分:算法的藝術 本部分將聚焦於算法的設計、分析和優化。我們將從算法的基本概念齣發,探索各種經典的算法設計範式,並深入理解算法的時間復雜度和空間復雜度分析方法。 第四章:算法分析基礎 漸進分析 (Asymptotic Analysis): 掌握大O符號(O)、大Ω符號(Ω)和大Θ符號(Θ)的概念,用於描述算法的增長率和性能上界、下界和緊界。 時間復雜度和空間復雜度: 學習如何分析算法在最壞情況、最好情況和平均情況下的時間消耗和內存占用。 遞歸和分治: 理解遞歸的思想,並學習如何分析遞歸算法的復雜度(如主定理)。 第五章:算法設計範式 分治法 (Divide and Conquer): 學習如何將問題分解為更小的子問題,獨立解決後再將結果閤並。經典示例包括歸並排序(Merge Sort)和快速排序(Quick Sort)。 動態規劃 (Dynamic Programming): 探索如何通過存儲子問題的解來避免重復計算,從而解決具有重疊子問題和最優子結構的問題。我們將學習如何識彆動態規劃問題,並設計狀態轉移方程。經典示例包括斐波那契數列、背包問題和最長公共子序列。 貪心算法 (Greedy Algorithms): 學習如何通過每一步做齣局部最優選擇來期望獲得全局最優解。我們將分析貪心算法的適用條件,並舉例說明其在活動選擇問題、霍夫曼編碼等方麵的應用。 迴溯法 (Backtracking): 學習如何通過係統地搜索所有可能的解決方案來解決問題,並在發現某個路徑無法通嚮有效解時進行“迴溯”。示例將涵蓋N皇後問題和迷宮求解。 第六章:排序與搜索算法 排序算法: 簡單排序: 冒泡排序、選擇排序、插入排序。分析它們的原理和時間復雜度。 高效排序: 歸並排序、快速排序。深入講解其分治思想和實現細節,以及在不同情況下的性能錶現。 其他排序: 堆排序、計數排序、基數排序。介紹它們的特定應用場景和效率。 搜索算法: 綫性搜索: 遍曆整個數據結構查找目標元素。 二分搜索 (Binary Search): 在有序數據結構中進行高效查找,分析其對數時間復雜度。 第七章:圖算法進階 最短路徑算法: Dijkstra算法: 求解單源最短路徑問題(非負權邊)。 Bellman-Ford算法: 求解單源最短路徑問題(可帶負權邊),並檢測負權迴路。 Floyd-Warshall算法: 求解所有頂點對之間的最短路徑。 最小生成樹算法: Prim算法: 找到連接圖中所有頂點的最小權重生成樹。 Kruskal算法: 另一種求解最小生成樹的方法,基於邊的權重排序。 拓撲排序 (Topological Sort): 針對有嚮無環圖(DAG)的頂點進行排序,使得對於任何有嚮邊 u -> v,u 都排在 v 之前。 第八章:字符串算法與模式匹配 字符串匹配: 樸素字符串匹配: 簡單的比較方法。 KMP算法 (Knuth-Morris-Pratt): 改進的字符串匹配算法,利用前綴和後綴信息避免不必要的比較。 Rabin-Karp算法: 基於哈希函數進行字符串匹配。 其他字符串處理: 簡要介紹如編輯距離、最長公共前綴等相關概念。 學習本書將使您能夠: 深刻理解各種數據結構的內在機製和優劣勢。 能夠根據具體問題場景,選擇最適閤的數據結構來組織和管理信息。 掌握多種經典的算法設計範式,並能靈活運用它們來解決實際計算問題。 熟練分析算法的時間和空間復雜度,從而優化程序性能。 構建齣高效、可靠且可擴展的軟件係統。 本書適用於計算機科學專業的學生、軟件工程師以及任何對提升算法和數據結構能力感興趣的讀者。通過理論與實踐相結閤的學習,您將為在計算機科學領域取得更大的成就打下堅實的基礎。