全書共分5章,第1章介紹計算機系統軟、硬件構成,系統層次和性能評測等;第2章介紹硬件數據表示對高級語言程序數據類型的支持及相關概念;第3章針對高級語言程序轉化為機器可執行代碼過程,介紹程序預處理、編譯、解釋、庫和鏈接等技術,以及集成開發環境的配置;第4章圍繞程序執行,介紹程序存儲映像、指令流水化執行、多核處理器對線程級并行的支持,以及基于OpenMP的并行程序設計思想;第5章關于存儲對計算機系統和程序性能的影響,介紹計算機存儲資源的層次性,程序空間、內存空間和交換空間概念,內存碎片、內存泄露和垃圾回收管理,以及高級語言程序數據組織和訪問優化思想。每章后配有習題,并為任課教師提供課件資源和代碼資源。
本書適合作為高等院校計算機科學與技術、軟件工程、電子信息工程、物聯網等專業方向的本科生教材,也可作為計算機工程技術人員的參考書。
本教材內容組織源自作者的教學實踐,為讀者展現一個計算機系統的整體概念,使得高級語言的語法不再是生硬的規則,計算機硬件也不再是深不可測的黑箱,為讀者建立一個軟、硬件有機關聯的知識框架。本教材避免軟、硬件割裂,使用的案例具有軟、硬件概念兼顧效果。
在高校人才培養過程中,各個專業呈現出對計算機系統愈發依賴的趨勢。應用級程序設計人員為了使工作更加順利有效,需要對程序的運行環境有一個系統化的理解。本書以軟、硬件結合為出發點,展現了一個適于初級編程人員理解的計算機系統。
本書內容包括計算機系統軟硬件構成、編程語言使用的數據類型和機器級數據表示、高級語言程序的翻譯和鏈接、程序的并行執行、計算機系統的存儲層次和程序的數據訪問優化?紤]到計算機軟件和硬件的密切關聯,本書內容組織的特點是結合程序案例采取軟硬件概念捆綁式介紹。
本書內容能夠引領學生從硬件層面去理解程序數據表達,彌補學生僅從高級語言編程規則去認識、編寫代碼的不足;加強學生對于程序集成開發環境配置的理解,使學生在程序構建和調試過程中思路更為流暢;深入理解程序運行時系統軟件對內存的維護和管理,處理器和多級存儲對于程序快速執行的支持;從而使學生認識一個立體化、軟硬件綜合的計算機系統,有助于編寫更優化的程序代碼。
本書共有5章,每章的教學目標如下。
第1章以桌面臺式機主板為案例,學習常用計算機部件特征參數,進一步了解計算機部件間的組織方式;通過學習開機啟動到應用完成各階段的軟件類型,使學生理解計算機系統的層次關系;結合計算機系統性能度量參數和第三方測試程序,使學生掌握如何評價計算機系統;通過Amdahl定律的學習和基本計算機性能公式的分析,使學生深刻理解計算機系統設計決策的量化分析思想。
第2章面向程序中的數和符號,介紹計算機使用的數制和字符編碼;通過整型和浮點數據表示的介紹,使學生理解程序中整型和浮點變量長度(或位寬)以及能夠表達的數值范圍;通過捆綁指針、存儲器編址以及寄存器三個概念,使學生深入理解指針類型變量的使用以及快速訪問指針變量的方法;通過捆綁結構型變量、存儲對齊及字節排序三個概念,使學生深入理解變量聲明方式對存儲空間占用的影響,以及硬件特性對于多字節數據存放排序的影響;通過介紹SIMD數據類型,使學生理解現代處理器對于加速多媒體應用中向量運算的支持。
第3章通過學習程序預處理內容,使學生深入理解程序頭文件的作用和條件包含的用途;通過編譯、解釋及二者結合的翻譯方式,使學生了解不同編程語言程序的翻譯過程,以HelloWorld.c編譯產生的目標代碼為例,使學生深入理解高級語言語句與匯編和機器指令之間的對應關系;通過學習程序靜態、動態鏈接過程,使學生深入理解集成開發環境關于庫指向的配置;結合HelloWorld.c的目標代碼,使學生理解靜態庫、動態庫、導入庫概念。
第4章結合程序存儲映像,使學生綜合理解程序執行期間程序代碼、全局變量、靜態變量、局部變量、malloc動態分配空間所處的存儲位置,以及對于棧和堆的具體化認識;通過學習指令級并行和線程級并行概念,使學生了解現代處理器并行執行程序的方式;通過學習OpenMP并行編程模型,使學生掌握基于共享存儲的并行程序設計原理和方法。
第5章通過多級存儲資源的學習,使學生深入理解計算機系統的性能也受到存儲層次設計的影響;將程序從虛擬空間到內存空間的映射與操作系統對內存空間的劃分相結合,使學生充分理解操作系統管理交換空間和合并內存碎片的意義,程序編寫時及時釋放動態分配內存的重要性,以及程序運行時垃圾回收的作用;使學生掌握如何利用訪問局部性改進高級語言(如C語言)程序代碼的數據訪問次序,從而縮短程序執行時間。
本書可作為計算機及相關專業學生計算機系統課程的教材,建議采用32~64個教學課時。對于本書讀者,最好具有 高級程序設計語言或C語言程序設計知識背景,以便對計算機系統有更加全面、透徹的理解。
本書每章都配有一定數量的習題。這些習題的安排是對書中知識點應用的補充案例;也有一些習題是對正文知識點的擴展,以便在突出全書主題、保證思路流暢的同時能夠為學生建立更加豐富的知識結構;習題中的代碼可以直接運行,配合代碼設計的問題能夠開闊學生編程視野,從而進一步激發學生的興趣。本書配有電子課件和相關軟件資源,可與本書作者或責任編輯聯系。
本書的編寫得到了北京交通大學教材出版基金資助,也得到了北京交通大學教務處、計算機與信息技術學院領導的大力支持,在此一并表示衷心的感謝!
由于作者水平有限,書中難免有疏漏與不妥之處,還望廣大讀者和專家批評、指正。
艾麗華,北京交通大學計算機學院教師,副教授,美國佐治亞大學計算機系訪問學者,目前主講本科生計算機體系結構課程、高性能計算導論課程;主講碩士生高級計算機系統結構課程;全校任選課程:計算機組織與結構、計算機系統理解。
第1章計算機系統構成
1 1計算機組件與特征參數
1.2軟件
1.2.1BIOS
1.2.2操作系統
1.2.3應用軟件棧
1.2.4設備驅動程序
1.3計算機系統層次
1.4計算機系統性能評測
1.4.1性能度量參數與均值
1.4.2評測程序
1.5量化設計原則
1.5.1加速經常性事件的原則
1.5.2Amdahl定律
1.5.3CPU性能公式
1.5.4訪問局部性
1.6計算機分類
習題1
第2章數據類型與數據表示
2.1數制和編碼
2.1.1數制和數的機器表示
2.1.2字符編碼
2.2整型數表示
2.2.1Intel體系結構整型數據表示
2.2.2補碼
2.3實型數表示
2.3.1Intel體系結構浮點數據表示
2.3.2移碼
2.4指針型變量表示
2.4.1存儲器編址
2.4.2寄存器
2.5結構型變量表示
2.5.1存儲對齊
2.5.2字節排序
2.6合成式SIMD數據類型
2.6.164位SIMD合成式數據類型
2.6.2128位SIMD合成式數據類型
習題2
第3章程序翻譯和鏈接
3.1程序預處理
3.1.1預處理制導類型
3.1.2頭文件的作用
3.1.3條件包含的應用
3.2程序翻譯
3.2.1編譯
3.2.2解釋
3.2.3雙重翻譯
3.3鏈接
3.3.1庫的基本概念
3.3.2靜態鏈接
3.3.3動態鏈接
3.4集成開發環境的配置
3.4.1關于頭文件指向的配置
3.4.2關于庫指向的配置
3.4.3關于平臺選擇的配置
習題3
第4章程序的并行執行
4.1程序存儲映像
4.1.1代碼段
4.1.2數據段
4.1.3棧
4.1.4堆
4.2指令并行執行
4.2.1指令流水線
4.2.2流水線性能
4.2.3流水化并行的瓶頸
4.3線程級并行執行
4.3.1多核處理器
4.3.2多核處理器對多線程同時執行的支持
4.3.3Intel HT技術
4.4并行程序設計
4.4.1加速for循環的并行構造
4.4.2基于共享存儲的并行編程模型
4.4.3fork-join并行執行模型
習題4
第5章存儲層次與訪問優化
5.1存儲資源的層次結構
5.1.1存儲層次的平均訪問時間
5.1.2存儲體系的構建基礎
5.1.3多級cache
5.2內存空間
5.2.1內存與程序空間
5.2.2虛擬地址到內存地址的映射
5.3交換空間
5.3.1Linux對交換空間的管理
5.3.2Windows對交換空間的管理
5.4內存維護管理
5.4.1內存碎片
5.4.2內存泄露
5.4.3垃圾回收
5.5高級語言程序數據組織與訪問的優化
5.5.1數據結構的聲明
5.5.2針對訪問性能的循環變換
習題5
參考文獻