開啟主選單

求真百科

嵌入式與實時操作系統

來自 孔夫子網 的圖片

嵌入式與實時操作系統》,[美] 王孔啟(K.C. Wang) 著,徐堅 李佳蓓 吳文峰 譯,出版社: 機械工業出版社。

機械工業出版社成立於1950年,是建國後國家設立的第一家科技出版社,前身為科學技術出版社,1952年更名為機械工業出版社[1]。機械工業出版社(以下簡稱機工社)由機械工業信息研究院作為主辦單位,目前隸屬於國務院國資委[2]

目錄

內容簡介

本書涵蓋了操作系統的基本概念和原則,展示了如何將它們應用於設計和實現完整的嵌入式與實時操作系統。包括ARM架構、ARM指令和編程、用於開發程序的工具鏈、用於軟件實現和測試的虛擬機、程序執行映像、函數調用約定、運行時堆棧使用以及用匯編代碼鏈接C程序的所有基礎和背景信息。

目錄

出版者的話

譯者序

前言

關於作者

1.1 關於本書 1

1.2 本書的動機 1

1.3 本書的目標讀者 1

1.4 本書的獨特之處 2

1.5 本書的內容 3

1.6 本書可作為嵌入式系統的教科書 5

1.7 本書可作為操作系統的教科書 5

1.8 本書可用於自學 5

參考文獻 6

  • 2章 ARM體系結構和程序設計 7

2.1 ARM處理器模式 7

2.2 ARM CPU寄存器 8

2.2.1 通用寄存器 8

2.2.2 狀態寄存器 8

2.2.3 ARM處理器模式的變更 9

2.3 指令流水線 10

2.4 ARM指令 10

2.4.1 條件標誌和條件 10

2.4.2 分支指令 11

2.4.3 算術運算 11

2.4.4 比較運算 11

2.4.5 邏輯運算 12

2.4.6 數據移動操作 12

2.4.7 即時值和桶移位器 12

2.4.8 乘法指令 13

2.4.9 加載和存儲指令 13

2.4.10 基址寄存器 13

2.4.11 塊數據傳輸 13

2.4.12 堆棧操作 13

2.4.13 堆棧和子例程 14

2.4.14 軟中斷 14

2.4.15 PSR轉移指令 14

2.4.16 協處理器指令 14

2.5 ARM工具鏈 15

2.6 ARM系統模擬器 15

2.7 ARM程序設計 16

2.7.1 ARM匯編編程示例1 16

2.7.2 ARM匯編編程示例2 18

2.7.3 匯編和C語言的結合編程 19

2.8 設備驅動程序 25

2.8.1 系統內存映射 26

2.8.2 GPIO編程 26

2.8.3 串行I/O的UART驅動程序 27

2.8.4 彩色LCD驅動程序 31

2.9 本章小結 44

思考題 44

參考文獻 45

第3章 中斷和異常處理 46

3.1 ARM異常 46

3.1.1 ARM處理器模式 46

3.1.2 ARM異常類型 47

3.1.3 異常向量表 48

3.1.4 異常處理程序 48

3.1.5 從異常處理程序返回 49

3.2 中斷 50

3.2.1 中斷類型 50

3.2.2 中斷控制器 50

3.2.3 主中斷控制器和輔中斷控制器 51

3.3 中斷處理 52

3.3.1 向量表內容 52

3.3.2 硬件中斷序列 52

3.3.3 軟件中的中斷控制 53

3.3.4 中斷處理程序 54

3.3.5 非嵌套中斷處理程序 54

3.4 計時器驅動程序 55

3.4.1 ARM Versatile 926EJS計時器 55

3.4.2 計時器驅動程序實現 55

3.5 鍵盤驅動程序 60

3.5.1 ARM PL050鼠標-鍵盤接口 60

3.5.2 鍵盤驅動程序原理 60

3.5.3 中斷驅動的驅動程序設計 60

3.5.4 鍵盤驅動程序實現 61

3.6 UART驅動程序 66

3.6.1 ARM PL011 UART接口 66

3.6.2 UART寄存器 66

3.6.3 中斷驅動的UART驅動程序 67

3.7 安全數字卡 72

3.7.1 SD卡協議 72

3.7.2 SDC驅動程序 72

3.7.3 改進的SDC驅動程序 79

3.7.4 多扇區數據傳輸 80

3.8 向量中斷 83

3.8.1 ARM PL190向量中斷控制器 83

3.8.2 為向量中斷配置VIC 83

3.8.3 向量中斷處理程序 84

3.8.4 向量中斷的演示 84

3.9 嵌套中斷 86

3.9.1 為何需要嵌套中斷 86

3.9.2 ARM中的嵌套中斷 86

3.9.3 在SYS模式下處理嵌套中斷 87

3.9.4 嵌套中斷的演示 87

3.10 嵌套中斷和進程切換 90

3.11 本章小結 90

思考題 91

參考文獻 92

第4章 嵌入式系統的模型 93

4.1 嵌入式系統的程序結構 93

4.2 超級循環模型 93

4.3 事件驅動模型 95

4.3.1 超級循環程序的缺點 95

4.3.2 事件 95

4.3.3 周期性事件驅動程序 95

4.3.4 異步事件驅動程序 99

4.4 事件的優先級 100

4.5 進程模型 101

4.5.1 單處理器進程模型 101

4.5.2 多處理器進程模型 101

4.5.3 實地址空間進程模型 101

4.5.4 虛擬地址空間進程模型 101

4.5.5 靜態進程模型 101

4.5.6 動態進程模型 101

4.5.7 非搶占式進程模型 102

4.5.8 搶占式進程模型 102

4.6 單處理器內核模型 102

4.7 單處理器操作系統模型 102

4.8 多處理器系統模型 102

4.9 實時系統模型 102

4.10 嵌入式系統軟件設計方法論 102

4.10.1 *級語言支持事件驅動編程 103

4.10.2 狀態機模型 103

4.10.3 StateChart模型 107

4.11 本章小結 107

思考題 107

參考文獻 108

第5章 嵌入式系統中的進程管理 109

5.1 多任務 109

5.2 進程的概念 109

5.3 多任務和上下文切換 109

5.3.1 一個簡單的多任務程序 109

5.3.2 上下文切換 111

5.3.3 多任務處理的演示 116

5.4 動態進程 117

5.4.1 動態進程的創建 117

5.4.2 動態進程的演示 119

5.5 進程調度 120

5.5.1 進程調度術語 120

5.5.2 進程調度的目標、策略和算法 120

5.5.3 嵌入式系統中的進程調度 121

5.6 進程同步 121

5.6.1 睡眠和喚醒 121

5.6.2 使用睡眠/喚醒的設備驅動程序 122

5.6.3 使用睡眠/喚醒的事件驅動嵌入式系統 125

5.6.4 使用睡眠/喚醒的資源管理 127

5.7 信號量 128

5.8 信號量的應用 129

5.8.1 信號量鎖 129

5.8.2 互斥鎖 130

5.8.3 使用信號量的資源管理 130

5.8.4 等待中斷和消息 130

5.8.5 進程協作 130

5.8.6 信號量的優勢 132

5.8.7 使用信號量的注意事項 132

5.8.8 在嵌入式系統中使用信號量 132

5.9 其他同步機制 134

5.9.1 OpenVMS中的事件標誌 134

5.9.2 MVS中的事件變量 135

5.9.3 MVS中的ENQ/DEQ 136

5.10 *級同步的構造 136

5.10.1 條件變量 136

5.10.2 管程 136

5.11 進程通信 137

5.11.1 共享內存 137

5.11.2 管道 137

5.11.3 信號 141

5.11.4 消息傳遞 142

5.12 單處理器嵌入式系統的內核 147

5.12.1 非搶占式UP內核 147

5.12.2 非搶占式UP內核的演示 154

5.12.3 搶占式UP內核 154

5.12.4 搶占式UP內核的演示 159

5.13 本章小結 160

思考題 161

參考文獻 162

第6章 ARM中的內存管理 163

6.1 進程地址空間 163

6.2 ARM中的內存管理單元 163

6.3 MMU寄存器 164

6.4 訪問MMU寄存器 165

6.4.1 啟用和禁用MMU 165

6.4.2 域訪問控制 166

6.4.3 轉換表基址寄存器 166

6.4.4 域訪問控制寄存器 167

6.4.5 故障狀態寄存器 167

6.4.6 故障地址寄存器 168

6.5 虛擬地址轉換 168

6.5.1 轉換表基址 168

6.5.2 轉換表 168

6.5.3 一級描述符 169

6.6 段引用的轉換 169

6.7 頁引用的轉換 170

6.7.1 一級頁表 170

6.7.2 二級頁表描述符 170

6.7.3 小頁引用的轉換 171

6.7.4 大頁引用的轉換 171

6.8 內存管理示例程序 171

6.8.1 使用1MB的段進行一級分頁 172

6.8.2 使用4KB的頁進行二級分頁 177

6.8.3 具有高VA空間的一級分頁 177

6.8.4 具有高VA空間的二級分頁 182

6.9 本章小結 184

思考題 184

參考文獻 184

第7章 用戶模式進程和系統調用 185

7.1 簡介 185

7.2 虛擬地址空間映射 185

7.3 用戶模式進程 186

7.4 系統內核支持用戶模式進程 189

7.4.1 PROC結構 189

7.4.2 復位處理程序 193

7.4.3 內核代碼 195

7.4.4 內核編譯鏈接腳本 201

7.4.5 具有用戶模式進程的內核的演示 201

7.5 具有用戶模式進程的嵌入式系統 202

7.5.1 相同域中的進程 202

7.5.2 相同域中的進程的演示 202

7.5.3 具有單個域的進程 205

7.5.4 具有單個域的進程的演示 205

7.6 RAM磁盤 205

7.6.1 創建RAM磁盤映像 206

7.6.2 進程映像文件加載器 208

7.7 進程管理 210

7.7.1 進程創建 210

7.7.2 進程終止 210

7.7.3 進程族樹 211

7.7.4 等待子進程終止 212

7.7.5 UNIX/Linux中的fork-exec 213

7.7.6 fork的實現 213

7.7.7 exec的實現 215

7.7.8 fork-exec的演示 217

7.7.9 用於命令執行的簡單sh 219

7.7.10 vfork 220

7.7.11 vfork的演示 221

7.8 線程 222

7.8.1 線程創建 223

7.8.2 線程演示 224

7.8.3 線程同步 225

7.9 具有二級分頁的嵌入式系統 225

7.9.1 二級靜態分頁 227

7.9.2 二級靜態分頁的演示 229

7.9.3 二級動態分頁 229

7.9.4 二級動態分頁的演示 231

7.10 KMH內存映射 232

7.10.1 KMH使用一級靜態分頁 232

7.10.2 KMH使用二級靜態分頁 236

7.10.3 KMH使用二級動態分頁 236

7.11 嵌入式系統支持的文件系統 236

7.11.1 創建SDC映像 237

7.11.2 將SDC分區格式化為文件系統 237

7.11.3 為SDC分區創建循環設備 238

7.12 具有SDC文件系統的嵌入式系統 238

7.12.1 使用信號量的SDC驅動程序 238

7.12.2 使用SDC文件系統的系統內核 242

7.12.3 SDC文件系統的演示 243

7.13 從SDC引導內核映像 244

7.13.1 SDC引導程序 244

7.13.2 從SDC引導內核的演示 248

7.13.3 從SDC引導使用動態分頁的內核 249

7.13.4 兩階段引導 250

7.13.5 兩階段引導的演示 251

7.14 本章小結 252

思考題 252

參考文獻 253

第8章 嵌入式通用操作系統 254

8.1 什麼是通用操作系統 254

8.2 什麼是嵌入式通用操作系統 254

8.3 將通用操作系統移植到嵌入式系統 254

8.4 為ARM開發一個嵌入式通用操作系統 255

8.5 EOS的結構 255

8.5.1 硬件平台 255

8.5.2 EOS源文件樹 256

8.5.3 EOS內核文件 256

8.5.4 EOS的功能 257

8.5.5 EOS的啟動順序 257

8.5.6 EOS的進程管理 258

8.5.7 EOS的匯編代碼 260

8.5.8 EOS的t.c文件 268

8.5.9 進程管理函數 271

8.5.10 管道 272

8.5.11 消息傳遞 272

8.5.12 消息傳遞的演示 274

8.6 EOS中的內存管理 274

8.6.1 EOS的內存映射 274

8.6.2 虛擬地址空間 275

8.6.3 內核模式pgdir和頁表 275

8.6.4 進程用戶模式頁表 275

8.6.5 進程切換期間切換pgdir 276

8.6.6 動態分頁 276

8.7 異常和信號處理 277

8.8 EOS中的信號處理 279

8.8.1 PROC資源中的信號 279

8.8.2 EOS中的信號來源 279

8.8.3 傳遞信號給進程 279

8.8.4 更改內核中的信號處理程序 279

8.8.5 EOS內核中的信號處理 280

8.8.6 在用戶模式下調度信號捕捉器 280

8.9 設備驅動程序 281

8.10 EOS中的進程調度 281

8.11 EOS中的計時器服務 282

8.12 文件系統 283

8.12.1 文件操作級別 283

8.12.2 文件I/O操作 285

8.12.3 EOS中的EXT2文件系統 291

8.12.4 *一級FS的實現 293

8.12.5 *二級FS的實現 300

8.12.6 第三級FS的實現 305

8.13 塊設備的I/O緩衝 307

8.14 I/O緩衝區管理算法 308

8.15 用戶界面 310

8.15.1 init程序 311

8.15.2 login程序 311

8.15.3 sh程序 312

8.16 EOS的演示 312

8.16.1 EOS的啟動 312

8.16.2 EOS的命令處理 313

8.16.3 EOS的信號和異常處理 314

8.17 本章小結 315

思考題 315

參考文獻 316

第9章 嵌入式系統中的多處理器 317

9.1 多處理器 317

9.2 SMP系統的需求 317

9.3 ARM MPCore處理器 318

9.4 ARM Cortex-A9 MPCore處理器 319

9.4.1 處理器的核心 319

9.4.2 監聽控制單元 319

9.4.3 通用中斷控制器 320

9.5 GIC編程示例 320

9.5.1 配置GIC以路由中斷 320

9.5.2 GIC配置代碼說明 327

9.5.3 中斷優先級和中斷屏蔽 328

9.5.4 GIC編程的演示 328

9.6 ARM MPCore的啟動順序 328

9.6.1 原始啟動順序 328

9.6.2 引導程序輔助下的啟動順序 329

9.6.3 在虛擬機上引導SMP 329

9.7 ARM SMP啟動示例 329

9.7.1 ARM SMP啟動示例1 329

9.7.2 ARM SMP啟動示例1的演示 335

9.7.3 ARM SMP啟動示例2 335

9.7.4 ARM SMP啟動示例2的演示 337

9.8 SMP的臨界區 337

9.8.1 SMP臨界區的實現 337

9.8.2 XCHG/SWAP操作的缺點 338

9.8.3 SMP的ARM同步指令 338

9.9 SMP中的同步原語 339

9.9.1 自旋鎖 339

9.9.2 自旋鎖示例 340

9.9.3 使用自旋鎖啟動SMP的演示 341

9.9.4 SMP中的互斥鎖 341

9.9.5 使用自旋鎖實現互斥鎖 342

9.9.6 使用互斥鎖啟動SMP的演示 343

9.10 全局計時器和本地計時器 344

9.11 SMP中的信號量 347

9.12 條件鎖定 348

9.12.1 條件自旋鎖 349

9.12.2 條件互斥鎖 349

9.12.3 條件信號量操作 350

9.13 SMP中的內存管理 350

9.13.1 SMP中的內存管理模型 351

9.13.2 統一VA空間 351

9.13.3 非統一VA空間 354

9.13.4 非統一VA空間中的並行計算 356

9.14 SMP中的多任務 359

9.15 用於進程管理的SMP內核 360

9.15.1 ts.s文件 361

9.15.2 t.c文件 367

9.15.3 kernel.c文件 369

9.15.4 SMP中的設備驅動程序和中斷處理程序 372

9.15.5 SMP中進程管理的演示 376

9.16 通用SMP操作系統 377

9.16.1 SMP_EOS的組織結構 377

9.16.2 SMP_EOS源文件樹 378

9.16.3 SMP_EOS內核文件 378

9.16.4 SMP_EOS中的進程管理 379

9.16.5 保護SMP中的內核數據結構 380

9.16.6 SMP中的死鎖預防 382

9.16.7 調整UP算法以適用於SMP 384

9.16.8 SMP中的設備驅動程序和中斷處理程序 384

9.17 SMP_EOS演示系統 385

9.17.1 SMP_EOS的啟動順序 385

9.17.2 SMP_EOS的功能 386

9.17.3 SMP_EOS的演示 386

9.18 本章小結 386

思考題 387

參考文獻 388

  • 10章 嵌入式實時操作系統 389

10.1 RTOS的概念 389

10.2 RTOS中的任務調度 389

10.2.1 速率單調調度 389

10.2.2 *早截止期限優先調度 390

10.2.3 截止期限單調調度 390

10.3 優先級倒置 391

10.4 優先級倒置的預防 391

10.4.1 優先級上限 392

10.4.2 優先級繼承 392

10.5 RTOS的概況 392

10.5.1 FreeRTOS 392

10.5.2 MicroC/OS 393

10.5.3 NuttX 393

10.5.4 VxWorks 394

10.5.5 QNX 395

10.5.6 實時Linux 395

10.5.7 現有RTOS的評價 397

10.6 RTOS的設計原則 400

10.6.1 中斷處理 400

10.6.2 任務管理 400

10.6.3 任務調度 400

10.6.4 同步工具 400

10.6.5 任務通信 400

10.6.6 內存管理 401

10.6.7 文件系統 401

10.6.8 跟蹤與調試 401

10.7 單處理器RTOS 401

10.7.1 UP_RTOS的任務管理 401

10.7.2 UP_RTOS的任務同步 402

10.7.3 UP_RTOS的任務調度 402

10.7.4 UP_RTOS的任務間通信 403

10.7.5 臨界區的保護 403

10.7.6 文件系統和日誌 403

10.7.7 具有靜態周期性任務和循環調度的UP_RTOS 404

10.7.8 具有靜態周期性任務和搶占式調度的UP_RTOS 416

10.7.9 具有共享資源的動態任務的UP_RTOS 422

10.8 多處理器RTOS 429

10.8.1 用於任務管理的SMP_RTOS內核 430

10.8.2 調整UP_RTOS以適應SMP 446

10.8.3 SMP_RTOS的嵌套中斷 449

10.8.4 SMP_RTOS的搶占式任務調度 450

10.8.5 基於SGI的任務切換 451

10.8.6 SMP_RTOS的分時任務調度演示 453

10.8.7 SMP_RTOS的搶占式任務調度演示 455

10.8.8 優先級繼承 458

10.8.9 SMP_RTOS系統的演示 460

10.9 本章小結 464

思考題 464

參考文獻 465

參考文獻