本書從系統(tǒng)的角度出發(fā),結合龍芯處理器及Loongnix系統(tǒng)的相關實例,從軟件和硬件兩個方面對計算機系統(tǒng)進行由硬到軟、自底向上的介紹,目的是幫助讀者掌握完整的計算機系統(tǒng)層次結構,了解計算機相關技術概念,掌握計算機系統(tǒng)的相關知識。
本書分為基礎部分與實踐部分;A部分主要介紹了計算機系統(tǒng)相關的基本概念、組合電路與時序電路、處理器體系結構、程序的加載與運行、數(shù)據的機器級表示和運算、層次化結構存儲、異?刂屏鳎粚嵺`部分則主要介紹了龍芯實驗平臺的軟硬件環(huán)境、文件讀寫及加解密實驗、二進制炸彈拆除實驗、簡單的計算機模擬器實驗與LoongArch五級流水線模擬器中的Cache實驗。
本書可作為高等院校計算機及相關專業(yè)計算機系統(tǒng)原理課程的教材,也可供從事計算機工作的工程技術人員參考。
習近平總書記在黨的二十大報告中指出:教育、科技、人才是全面建設社會主義現(xiàn)代化國家的基礎性、戰(zhàn)略性支撐。必須堅持科技是生產力、人才是資源、創(chuàng)新是動力,深入實施科教興國戰(zhàn)略、人才強國戰(zhàn)略、創(chuàng)新驅動發(fā)展戰(zhàn)略,這三大戰(zhàn)略共同服務于創(chuàng)新型國家的建設。報告同時強調:推動戰(zhàn)略性新興產業(yè)融合集群發(fā)展,構建新一代信息技術、人工智能、生物技術、新能源、新材料、高端裝備、綠色環(huán)保等一批新的增長引擎。
隨著信息技術的發(fā)展,計算機被廣泛應用于工業(yè)及商業(yè)等領域,新興的軟硬件技術層出不窮,我國自主研發(fā)的計算機系統(tǒng)不斷涌現(xiàn),計算機系統(tǒng)的相關知識也亟待更新。
本書從系統(tǒng)的角度出發(fā),結合龍芯處理器架構的相關實例,從硬件和軟件兩個方面對計算機系統(tǒng)進行由硬到軟、自底向上的介紹,目的是幫助讀者掌握完整的計算機系統(tǒng)層次結構,了解計算機相關技術概念,掌握計算機系統(tǒng)的相關知識;從硬件電路、計算機子系統(tǒng)、處理器結構方面初步了解計算機系統(tǒng)的硬件架構、核心概念及軟硬件實現(xiàn);按照高級語言程序從開發(fā)到運行的路線,串聯(lián)整個過程中的各個環(huán)節(jié),幫助讀者加深對程序從編譯到運行及優(yōu)化等相關知識的理解;從指令系統(tǒng)出發(fā),結合LoongArch指令集的相關實例,介紹計算機系統(tǒng)指令集相關知識;結合相關實例對計算機I/O子系統(tǒng)、存儲結構、計算機系統(tǒng)并行層次等相關知識進行詳細講解,使讀者對計算機系統(tǒng)相關知識有全方位的了解與掌握,提高實踐操作能力,為后續(xù)其他課程的學習打下堅實基礎。
本書分為基礎部分與實踐部分,其中,基礎部分共分為7章,實踐部分共分為5個實驗,各部分內容介紹如下。
第1章主要介紹計算機系統(tǒng)相關的基本概念。內容包括計算機系統(tǒng)中相關的定義、計算機系統(tǒng)的類別、層次結構、用戶角色、體系架構及程序編譯執(zhí)行的基本過程,后對計算機性能的衡量指標及測評方式進行了介紹。
第2章主要介紹組合電路與時序電路。內容包括組合電路與時序電路的描述方法、分析方法、具體表現(xiàn)與應用形式。
第3章主要介紹處理器體系結構,從指令集架構的角度出發(fā)進行闡述。首先描述了指令集架構的定義、分類、不同指令集的對比、指令集架構的發(fā)展歷程與二進制翻譯技術。其次詳細介紹了龍芯指令集架構,包括龍芯指令系統(tǒng)概述,包括龍芯指令的編碼與匯編助記格式、寄存器組織與尋址方式;不同類型的龍芯指令的設計細節(jié),包括數(shù)據處理指令、轉移指令、訪存指令、柵障指令、浮點處理指令、特權指令與其他指令;龍芯匯編語言源程序格式和龍芯匯編語言的機器級表示。
第4章介紹程序的加載與運行,首先講述源代碼到可執(zhí)行目標文件生成的整體流程,包括編譯、匯編、鏈接步驟;然后根據可執(zhí)行目標文件的運行過程引出指令的執(zhí)行部分;后介紹如何通過指令流水線技術提高處理器性能,內容包括指令流水線的步驟、存在的問題、異常處理及優(yōu)化技術。
第5章主要介紹數(shù)據的機器級表示和運算。內容包括整數(shù)的編碼表示方法、浮點數(shù)的編碼表示方法、整數(shù)的運算和浮點數(shù)的運算。
第6章主要介紹了計算機層次化存儲結構中的存儲器分類、工作原理和組成方式,同時介紹了I/O系統(tǒng)的定義和組成,并對其軟硬件結構進行層次分析。通過介紹存儲技術,局部性原理與層次化存儲結構,高速緩存的基本工作原理,虛擬存儲器系統(tǒng)的實現(xiàn)技術,以及Flash存儲器、磁盤存儲器和NVM存儲器等不同類型存儲器的特點,使讀者建立起如何利用不同類型的存儲器構造層次化結構的存儲系統(tǒng)的概念。并通過將I/O工作過程與軟硬件系統(tǒng)結合的方式說明I/O系統(tǒng)的運行原理,幫助讀者從I/O角度進一步認識并了解計算機系統(tǒng),建立起對計算機系統(tǒng)的整體認識。
第7章主要介紹異?刂屏,首先介紹控制流、異?刂屏鞯母拍,并介紹了計算機系統(tǒng)中進程、異常、中斷等機制;以LoongArch為例詳細介紹精簡指令集架構下的異常與中斷處理理念與實現(xiàn)方式。理解異?刂屏骺梢詭椭绦騿T更好地掌握計算機系統(tǒng)處理不同任務的底層實現(xiàn),并根據應用場景選擇有效的程序實現(xiàn)方式。
實踐部分均在龍芯教學實驗平臺設計和實現(xiàn),借個實驗簡單介紹了龍芯實驗平臺的軟硬件環(huán)境,在熟悉環(huán)境的同時完成字符的大小寫轉換。通過第二個讀寫文件實驗,讀者可以掌握動態(tài)庫的創(chuàng)建與鏈接及常見的加解密算法。在第三個二進制炸彈拆除的實驗中,讀者需要使用GDB調試工具,與匯編陷阱斗智斗勇,經過第三個實驗,讀者會進一步理解LoongArch指令。第四個實驗將幫助讀者理解并掌握馮·諾依曼計算機的基本結構與工作原理。通過第五個實驗,讀者會對經典五級流水線的每個環(huán)節(jié)有一定的理解,在第三個實驗中LoongArch指令的基礎上,實現(xiàn)指令的匯編翻譯過程,并探究Cache結構對CPU運行速度的影響。
本書由申兆巖編寫第1、3、4、6、8章,賈智平編寫第2、7章,王毅編寫第5章,馬良、魏倩、陳澤豪、朱紊濱、姜錫坤、郭瀚文也參與了本書編寫的部分工作。2021年秋季,本講稿已分別在山東大學計算機科學與技術學院本科生和研究生教學中試用。
由于編者水平和經驗有限,加之時間倉促,書中難免存在不足之處,敬請讀者諒解,并真誠歡迎讀者提出寶貴的建議。
編者2023年1月
第1章 計算機系統(tǒng)概述
1.1 計算機系統(tǒng)的定義和類別
1.1.1 計算機系統(tǒng)的定義
1.1.2 計算機系統(tǒng)的類別
1.2 計算機系統(tǒng)中的抽象層次
1.2.1 計算機系統(tǒng)層次結構
第1章計算機系統(tǒng)概述1
1.1計算機系統(tǒng)的定義和類別1
1.1.1計算機系統(tǒng)的定義1
1.1.2計算機系統(tǒng)的類別5
1.2計算機系統(tǒng)中的抽象層次7
1.2.1計算機系統(tǒng)層次結構7
1.2.2計算機系統(tǒng)的不同用戶9
1.2.3馮·諾依曼架構11
1.2.4程序的編譯及執(zhí)行過程14
1.3計算機性能16
1.3.1性能的指標和度量16
1.3.2CPU性能17
1.3.3指令性能18
1.3.4實例: 處理器性能評測21
小結22
習題23
第2章組合電路與時序電路25
2.1組合電路25
2.1.1真值表26
2.1.2布爾代數(shù)26
2.1.3邏輯圖27
2.1.4組合電路分析28
2.2時序電路31
2.2.1SR鎖存器32
2.2.2觸發(fā)器的觸發(fā)方式34
2.2.3觸發(fā)器的邏輯功能37
2.3計算機子系統(tǒng)40
2.3.1CPU子系統(tǒng)40
2.3.2總線45
2.3.3內存子系統(tǒng)47
〖3〗計算機系統(tǒng)基礎與實踐(微課版)目錄〖3〗小結49
習題49
第3章處理器體系結構52
3.1指令集體系結構52
3.1.1精簡指令集與復雜指令集52
3.1.2二進制翻譯55
3.2LoongArch指令系統(tǒng)概述57
3.2.1LoongArch指令的編碼與匯編助記格式57
3.2.2LoongArch的寄存器組59
3.2.3LoongArch的尋址方式62
3.3LoongArch32指令集65
3.3.1數(shù)據處理指令65
3.3.2轉移指令74
3.3.3訪存指令76
3.3.4柵障指令79
3.3.5浮點處理指令80
3.3.6特權指令81
3.3.7其他雜項指令87
3.4匯編語言源程序格式88
3.4.1匯編語言程序的結構89
3.4.2匯編語言的行構成91
3.4.3偽指令92
3.4.4宏指令95
3.5匯編語言機器級表示97
3.5.1過程調用的機器級表示97
3.5.2選擇語句的機器級表示100
3.5.3循環(huán)結構的機器級表示104
小結108
習題109
第4章程序的加載與運行111
4.1可執(zhí)行目標文件的生成111
4.1.1編譯112
4.1.2匯編113
4.1.3鏈接115
4.2可執(zhí)行目標文件的運行117
4.2.1加載118
4.2.2程序執(zhí)行過程121
4.2.3指令執(zhí)行介紹123
4.3流水線技術125
4.3.1流水線方式126
4.3.2指令流水線127
4.3.3流水線存在的問題129
4.3.4流水線與異常處理133
4.3.5流水線優(yōu)化技術133
小結139
習題140
第5章數(shù)據的機器級表示和運算142
5.1數(shù)據類型及編碼方式概述142
5.1.1數(shù)值數(shù)據及其編碼方式143
5.1.2非數(shù)值數(shù)據及其編碼方式144
5.1.3進位記數(shù)制146
5.2整數(shù)的表示150
5.2.1無符號數(shù)編碼150
5.2.2有符號數(shù)編碼150
5.3整數(shù)運算154
5.3.1移位運算154
5.3.2加減法運算155
5.3.3乘法運算157
5.3.4除法運算166
5.4浮點數(shù)表示與運算170
5.4.1浮點表示法170
5.4.2浮點數(shù)計算173
小結174
習題175
第6章層次化結構存儲176
6.1存儲技術176
6.1.1存儲器176
6.1.2存儲技術發(fā)展趨勢178
6.2局部性原理與層次化存儲結構180
6.2.1局部性180
6.2.2存儲器層次結構182
6.3高速緩沖存儲器183
6.3.1Cache的基本工作原理183
6.3.2Cache主存地址映射184
6.3.3Cache替換策略191
6.3.4Cache寫策略192
6.3.5Cache存儲器的性能分析194
6.3.6Cache與程序性能197
6.4虛擬存儲器200
6.4.1虛擬存儲器概述200
6.4.2頁式存儲管理202
6.4.3段式虛擬存儲管理209
6.4.4段頁式存儲管理211
6.5外部存儲器214
6.5.1磁盤存儲器214
6.5.2閃存存儲器218
6.5.3新型非易失性存儲器222
6.6I/O系統(tǒng)225
6.6.1I/O系統(tǒng)的定義與組成225
6.6.2I/O軟硬件層次結構227
6.6.3Linux中的I/O棧239
小結241
習題243
第7章異?刂屏246
7.1進程246
7.1.1進程的概念247
7.1.2進程的邏輯控制流248
7.1.3進程的私有地址空間249
7.1.4進程的上下文切換251
7.1.5進程的控制252
7.2異常和中斷的概念254
7.2.1基本概念254
7.2.2異常255
7.2.3中斷259
7.3異常和中斷的響應過程261
7.4LoongArch指令系統(tǒng)中的異常和中斷264
7.4.1相關控制狀態(tài)寄存器264
7.4.2異常的處理267
7.4.3中斷的處理269
小結270
習題271
第8章實踐部分273
8.1龍芯平臺初探273
8.1.1實驗背景273
8.1.2實驗目的273
8.1.3實驗要求273
8.1.4實驗步驟273
8.2文件讀寫及加解密278
8.2.1實驗背景278
8.2.2實驗目的279
8.2.3實驗要求279
8.2.4實驗步驟279
8.3二進制炸彈拆除281
8.3.1實驗背景281
8.3.2實驗目的282
8.3.3實驗要求282
8.3.4實驗步驟282
8.4簡單的計算機模擬器286
8.4.1實驗背景286
8.4.2實驗目的287
8.4.3實驗要求287
8.4.4實驗步驟287
8.5設計LoongArch五級流水線模擬器中的Cache306
8.5.1實驗背景306
8.5.2實驗目的307
8.5.3實驗要求307
8.5.4實驗步驟309
參考文獻327
1.2.2 計算機系統(tǒng)的不同用戶
1.2.3 馮·諾依曼架構
1.2.4 程序的編譯及執(zhí)行過程
1.3 計算機性能
1.3.1 性能的指標和度量
1.3.2 CPU性能
1.3.3 指令性能
1.3.4 實例:處理器性能評測
小結
習題
第2章 組合電路與時序電路
2.1 組合電路
2.1.1 真值表
2.1.2 布爾代數(shù)
2.1.3 邏輯圖
2.1.4 組合電路分析
2.2 時序電路
2.2.1 SR鎖存器
2.2.2 觸發(fā)器的觸發(fā)方式
2.2.3 觸發(fā)器的邏輯功能
2.3 計算機子系統(tǒng)
2.3.1 CPU子系統(tǒng)
2.3.2 總線
2.3.3 內存子系統(tǒng)
小結
習題
第3章 處理器體系結構
3.1 指令集體系結構
3.1.1 精簡指令集與復雜指令集
3.1.2 二進制翻譯
3.2 LoongArch指令系統(tǒng)概述
3.2.1 LoongArch指令的編碼與匯編助記格式
3.2.2 LoongArch的寄存器組
3.2.3 LoongArch的尋址方式
3.3 LoongArch32指令集
3.3.1 數(shù)據處理指令
3.3.2 轉移指令
3.3.3 訪存指令
3.3.4 柵障指令
3.3.5 浮點處理指令
3.3.6 特權指令
3.3.7 其他雜項指令
3.4 匯編語言源程序格式
3.4.1 匯編語言程序的結構
3.4.2 匯編語言的行構成
3.4.3 偽指令
3.4.4 宏指令
3.5 匯編語言機器級表示
3.5.1 過程調用的機器級表示
3.5.2 選擇語句的機器級表示
3.5.3 循環(huán)結構的機器級表示
小結
習題
第4章 程序的加載與運行
4.1 可執(zhí)行目標文件的生成
4.1.1 編譯
4.1.2 匯編
4.1.3 鏈接
4.2 可執(zhí)行目標文件的運行
……
第5章 數(shù)據的機器級表示和運算
第6章 層次化結構存儲
第7章 異?刂屏
第8章 實踐部分
參考文獻