齣版者的話
專傢指導委員會
推薦序
譯者序
序言
前言
第1章 RISC和MlPS
1.1 流水綫
1.1.1 什麼使流水綫效率降低
1.1.2 流水綫和緩存
1.2 MIPS的五段流水綫
1.3 RISC和CISC
1.4 迄今為止一些重要的MIPS芯片
1.4.1 R2000處理器到R3000處理器
1.4.2 R6000處理器:一次偏軌
1.4.3 第一批CPLJ內核
1.4.4 R4000處理器:一次革命
1.4.5 ACE聯盟的興衰
1.4.6 SGI收購MIPS
1.4.7 QED:嵌入式係統中的快速MIPS處理器
1.4.8 R10000處理器和它的後繼者
1.4.9 消費類電子産品中的MIPS處理器
1.4.10 網絡路由器和激光打印機中的MIPS
1.4.11 現代的MIPS處理器
1.4.12 MIPS Technologies的重生
1.4.13 現狀
1.5 MIPS和CISC體係結構的比較
1.5.1 對MIPS指令的各種限製
1.5.2 編址及內存訪問
1.5.3 發展MIPS不支持的特性
1.5.4 程序員可見的流水綫效果
第2章 MIPS體係結構
2.1 MIPS匯編語言的風格
2.2 寄存器
2.3 整數乘法單元和寄存器
2.4 加載和存儲:尋址方式
2.5 存儲器和寄存器中的數據類型
2.5.1 整數數據類型
2.5.2 未對齊的加載和存儲
2.5.3 內存中的浮點數據
2.6 匯編語言中的閤成指令
2.7 MIPS 1發展到MIPS 64指令集:64位(和其他)的擴展
2.7.1 邁嚮64位
2.7.2 誰需要64位
2.7.3 關於64位與無模式轉換:寄存器中的數據
2.8 基本地址空間
2.8.1 簡單係統的尋址
2.8.2 核心與用戶特權級別
2.8.3 整體視圖:內存映射的64位視圖
2.9 流水綫的可見度
第3章 協處理器0:MIPS處理器控製
3.1 CPU控製指令
3.2 相關寄存器與時序
3.3 CPU控製寄存器及其編碼
3.3.1 狀態寄存器(SR)
3.3.2 原因寄存器
3.3.3 異常返迴地址(EPC)寄存器
3.3.4 無效虛地址(BadVaddr)寄存器
3.3.5 計數/比較寄存器(Count/Compare)CPU上的計時器
3.3.6 處理器ID(PRId)寄存器
3.3.7 配置(Config)寄存器:CPU資源信息與配置
3.3.8 EBase和IntCtl:中斷與異常設置
3.3.9 SRSCtl和SRSMap:影子寄存器設置
3.3.10 鏈接加載地址(LLAddr)寄存器
3.4 CPO冒險——不經意間的陷阱
3.4.1 冒險屏障指令
3.4.2 指令冒險與用戶冒險
3.4.3 CPO指令之間的冒險
第4章 MIPS處理器的高速緩存
4.1 高速緩存和高速緩存的管理
4.2 高速緩存怎樣工作
4.3 早期MIPS CPU中的寫透式高速緩存
4.4 MIPs CPU中的寫迴式高速緩存
4.5 高速緩存設計的其他選擇
4.6 管理高速緩存
4.7 二級和三級高速緩存
4.8 MIPS CPU高速緩存的配置
4.9 編程MIPS32/64高速緩存
4.9.1 Cache指令
4.9.2 高速緩存初始化和Tag/Data寄存器
4.9.3 CacheErr,ERR和ErrorEPC寄存器:內存/高速緩存的錯誤處理
4.9.4 計算高速緩存大小和配置方式
4.9.5 初始化例程
4.9.6 在高速緩存中無效或寫迴一個內存區域
4.10 高速緩存效率
4.11 重組軟件來影響高速緩存效率
4.12 高速緩存彆名
笫5章 異常、中斷和初始化
5.1 精確異常
5.2 異常發生時刻
5.3 異常嚮量:異常處理開始的地方
5.4 異常處理:基礎
5.5 從異常返迴
5.6 嵌套異常
5.7 一個異常處理例程
5.8 中斷
5.8.1 MIPS CPU中的中斷資源
5.8.2 通過軟件實現中斷優先級
5.8.3 原子性和SR的原子改變
5.8.4 中斷使能時的臨界區:MIPS中的信號量機製
5.8.5 MIPS32/64中嚮量化和EIC扣斷
5.8.6 影子寄存器
5.9 啓動
5.9.1 探測和識彆CPU型號
5.9.2 啓動序列
5.9.3 啓動一個應用程序
5.10 模擬指令
第6章 底層內存管理與TLB
6.1 TLB/MMU硬件和它的功能
6.2 TLB/MMU的寄存器描述
6.2.1 TLB關鍵字域——EntryHi和PageMask
6.2.2 TLB輸齣域——EntryLo0-1
6.2.3 選擇一個TLB錶項——Index,Random和Wired寄存器
6.2.4 頁錶訪問助手——Context和XContext
6.3 TLB/MMU的控製指令
6.4 對TLB編程
6.4.1 如何進行重填
6.4.2 使用ASID
6.4.3 Random寄存器與被鎖定錶項
6.5 硬件友好的頁錶和重填機製
6.5.1 TLB缺失處理
6.5.2 XTLB的缺失處理函數
6.6 MIPS TLB的日常使用
6.7 更簡單操作係統中的內存管理
第7章 浮點支持
7.1 浮點的基本描述
7.2 IEEE 754標準及其背景
7.3 怎樣存儲IEEE浮點數
7.3.1 IEEE尾數和規格化
7.3.2 使用特殊值時的預留指數值
7.3.3 MRS浮點數據格式
7.4 IEEE 754的MIPS實現
7.5 浮點寄存器
7.6 浮點異常/中斷
7.7 浮點控製:控製/狀態寄存器
7.8 浮點實現寄存器
7.9 浮點指令指南
7.9.1 加載/存儲
7.9.2 寄存器間的傳遞
7.9.3 三操作數算術運算
7.9.4 乘加運算
7.9.5 一元(改變符號)運算
7.9.6 轉換操作
7.9.7 條件分支和測試指令
7.10 成對單精度浮點指令和MIPS-3D ASE
7.10.1 成對單精度指令的異常
7.10.2 成對單精度的三操作數算術、乘加、改變符號和無條件移動操作
7.10.3 成對單精度轉換操作
7.10.4 成對單精度測試和條件移動指令
7.10.5 MIPS-3D指令
7.11 指令時序需求
7.12 指令加速的時序
7.13 按需初始化和使能
7.14 浮點仿真
笫8章 MIPS指令集完全指南
8.1 一個簡單的例子
8.2 匯編指令及其含義
8.2.1 U和非U助記符
8.2.2 除法助記符
8.2.3 指令的詳細清單
8.3 浮點指令
8.4 MIPS32/64發行版1的區彆
8.4.1 在發行版2中加入的常規指令
8.4.2 發行版2新加入的特權指令
8.5 特殊指令和它們的用途
8.5.1 嚮左加載/嚮右加載:地址非對齊的存取操作
8.5.2 鏈接加載/條件存儲
8.5.3 條件傳遞指令
8.5.4 可能分支指令
8.5.5 整數乘纍加指令和乘加指令
8.5.6 浮點乘加指令
8.5.7 多浮點條件標誌位
8.5.8 緩存數據預取
8.5.9 存取內存屏障:Sync指令
8.5.10 冒險屏蔽指令
8.5.11 Synci:指令寫入的緩存管理
8.5.12 讀取硬件寄存器
8.6 指令的機器編碼
8.6.1 指令編碼錶中的域
8.6.2 指令編碼錶的注意事項
8.6.3 編碼方式和處理器的簡單實現
8.7 指令集的功能分組
8.7.1 空操作
8.7.2 寄存器間的數據傳遞指令
8.7.3 常數加載指令
8.7.4 算術/邏輯操作指令
8.7.5 整數乘法、除法以及求餘指令
8.7.6 整數乘纍加指令
8.7.7 存取指令
8.7.8 跳轉、分支和子程序調用指令
8.7.9 斷點及陷阱指令
8.7.10 協處理器0功能
8.7.11 浮點操作指令
8.7.12 用戶模式下對“底層”硬件的有限訪問
第9章 閱讀MIPS匯編語言
9.1 一個簡單的例子
9.2 句法
9.3 指令的約定
9.3.1 計算指令:3寄存器、2寄存器和1寄存器
9.3.2 立即數:帶常量的計算指令
9.3.3 關於64位和32位指令
9.4 尋址模式
9.5 目標文件和內存布局
第10章 在MIPS體係結構上移植軟件
10.1 MIPS應用的底層軟件:經常會遇到問題的列錶
10.2 尾端:字、字節和位的順序
10.2.1 位、字節、字和整數
10.2.2 軟件和尾端
10.2.3 硬件和尾端
10.2.4 MIPS CPU的雙尾端軟件
10.2.5 可移植性和尾端無關代碼
10.2.6 尾端和外來數據
10.3 可見緩存的問題
10.3.1 緩存管理和DMA數據
10.3.2 緩存管理和寫指令:自修改代碼
10.3.3 緩存管理和非緩存或寫透數據
10.3.4 緩存別名和頁麵著色
10.4 存儲訪問順序和重排
10.4.1 排序與寫緩衝
10.4.2 實現wbflush
10.5 寫C程序
10.5.1 用GNU C編譯器包裝匯編代碼
10.5.2 映射為內存的I/O寄存器和“Volatile”
10.5.3 用C寫MIPS應用程序的其他問題
第11章 MIPS軟件標準(ABI)
11.1 數據錶示和對齊
11.1.1 基本類型的大小
11.1.2 “long”型和指針型數據大小
11.1.3 對齊要求
11.1.4 基本類型的內存布局和尾端如何産生影響
11.1.5 內存的布局結構、數組類型和對齊
11.1.6 結構中的位域
11.1.7 C中的不對齊數據
11.2 參數傳遞以及MIPS ABI中的堆棧約定
11.2.1 堆棧、子例程鏈接和參數專遞
11.2.2 032的堆棧參數結構
11.2.3 使用寄存器傳遞參數
11.2.4 C庫中的例子
11.2.5 特殊的例子:傳遞結構
11.2.6 傳遞可變參數
11.2.7 函數返迴值
11.2.8 擴展寄存器一使用約定:SGIn32和n64
11.2.9 堆棧布局、堆棧幀和輔助調試器
11.2.10 可變參數和stdargs
第12章 調試MIPS設計——調試和剖析特性
12.1 “EJTAG”片上調試單元
12.1.1 EJTAG曆史
12.1.2 探頭如何控製CPU
12.1.3 通過JTAG調試通信
12.1.4 調試模式
12.1.5 單步
12.1.6 dseg內存譯碼區域
12.1.7 EJTAG CPO寄存器,特殊調試
12.1.8 DCR(調試控製)內存映射寄存器
12.1.9 EJTAG斷點硬件支持
12.1.10 理解斷點條件
12.1.11 非精確調試斷點
12.1.12 PC取樣與EJTAG
12.1.13 使用沒有探頭的EJTAG
12.2 EJTAG之前的調試支持——break指令和CPO觀察點
12.3 PDtrace
12.4 性能計數器
第13章 GNU幾inux概覽
13.1 組件
13.2 內核代碼的層次
13.2.1 異常模式下的MIPS CPU
13.2.2 屏蔽部分或全部中斷的MIPS CPU
13.2.3 中斷上下文
13.2.4 綫程上下文中執行內核
第14章 硬件與軟件如何協同工作
14.1 中斷的生命周期
14.2 綫程、臨界區和原子性
14.2.1 MIPS體係結構和原子操作
14.2.2 Linux自鏇鎖
14.3 係統調用時發生瞭什麼
14.4 Linux/MIPS係統如何進行地址翻譯
14.4.1 為什麼進行內存翻譯
14.4.2 基本進程布局與保護
14.4.3 映射進程地址到真實內存
14.4.4 選擇頁式映射
14.4.5 我們真正需要的
14.4.6 MIPs設計的起源
14.4.7 記錄被修改的頁麵(模擬“髒”位)
14.4.8 內核如何服務一個TLB重填異常
14.4.9 TLB的注意事項與維護
14.4.10 內存翻譯與64位指針
第15章 Linux內核中的MIPS特有問題
15.1 顯式緩存管理
15.1.1 DMA設備訪問
15.1.2 寫入指令稍後執行
15.1.3 緩存/內存映射問題
15.1.4 緩存彆名
15.2 CPO流水綫冒險
15.3 多處理器係統與一緻性緩存
15.4 對一個關鍵例程的極度優化調整
第16章 Linux應用程序代碼、PIC和庫
16.1 鏈接單元如何進入程序
16.2 全局偏移錶(GOT)組織
附錄A MIPS多綫程
附錄B MIPS指令集的其他可選擴展
MIPS術語錶
參考文獻
· · · · · · (
收起)