《信息科學與技術叢書:作業系統實現之路》以Hello China作業系統為例,詳細講解了作業系統的核心、檔案系統、圖形界面、設備驅動程式、SDK 和系統調用等主要功能模組的實現原理。講解過程中不僅陳述概念,還配以詳細的實現原始碼對概念進行說明,達到理論聯繫實際的目的。書中穿插了大量的案例,讀者可通過親手操作這些案例來更加深入地理解作業系統原理。此外,《信息科學與技術叢書:作業系統實現之路》還對作業系統發展趨勢和商業模式進行了探討。《信息科學與技術叢書:作業系統實現之路》可供程式設計師和計算機相關專業師生閱讀。
基本介紹
- 書名:信息科學與技術叢書:作業系統實現之路
- 作者:辛慶祥
- 出版社:機械工業出版社
- 出版時間:2013年4月1日
- 頁數:484 頁
- 開本:16 開
- ISBN:7111414446, 9787111414445
- 語種:簡體中文
內容簡介,圖書目錄,
內容簡介
《信息科學與技術叢書:作業系統實現之路》內容完善,包含作業系統的核心、圖形用戶界面、檔案系統、設備驅動程式、SDK、用戶shen等方方面面的實現說明,希望通過一本書,讓讀者了解整個作業系統,而不僅僅是核心。
圖書目錄
出版說明
前言
第1章 作業系統概述 1
1.1 作業系統的基本概念 1
1.1.1 作業系統的功能 1
1.1.2 作業系統的分類 2
1.1.3 作業系統的發展趨勢 2
1.1.4 作業系統的基本概念 3
1.2 嵌入式系統和嵌入式作業系統 6
1.2.1 嵌入式系統概述 6
1.2.2 嵌入式作業系統概述 7
1.2.3 嵌入式作業系統的特點 7
1.2.4 嵌入式作業系統與通用作業系統的區別 8
1.2.5 嵌入式實時作業系統 9
1.3 Hello China作業系統概述 10
1.3.1 Hello China的主要功能 10
1.3.2 Hello China的架構 12
1.3.3 Hello China的主要特點 12
1.3.4 Hello China的套用場景 14
1.3.5 面向對象思想的模擬 17
1.4 實例:一個簡單的IP路由器的實現 20
1.4.1 概述 20
1.4.2 路由器的硬體結構 21
1.4.3 路由器的軟體功能 22
1.4.4 各任務的實現 23
第2章 Hello China的安裝和使用 26
2.1 Hello China安裝概述 26
2.2 Hello China在Virtual PC上的安裝 26
2.2.1 Hello China在Virtual PC上的啟動過程 26
2.2.2 Hello China在Virtual PC上的安裝過程 28
2.3 Hello China在物理計算機上的安裝 31
2.3.1 安裝注意事項 31
2.3.2 在Windows XP作業系統上的安裝 31
2.3.3 在Windows 7作業系統上的安裝 32
2.4 Hello China的卸載 34
2.5 Hello China的使用 34
2.6 核心的編譯和生成 35
2.6.1 Hello China核心的開發環境 35
2.6.2 開發環境的搭建 36
2.6.3 核心映像檔案的生成 38
第3章 Hello China的引導和初始化 41
3.1 概述 41
3.2 個人計算機的引導和初始化 41
3.2.1 BIOS的引導工作 41
3.2.2 硬碟邏輯結構及引導扇區的功能 42
3.2.3 作業系統引導扇區的功能和局限 44
3.2.4 預置引導法概述 45
3.2.5 預置引導法在FAT32檔案系統上的實現 46
3.2.6 預置引導法在NTFS檔案系統上的實現 47
3.2.7 通過軟碟啟動Hello China 49
3.3 嵌入式作業系統的引導和初始化 53
3.3.1 典型嵌入式系統記憶體映射布局 53
3.3.2 嵌入式系統的啟動概述 54
3.3.3 常見嵌入式作業系統的載入方式 55
3.3.4 嵌入式系統軟體的寫入 59
3.4 Hello China的初始化 61
3.4.1 實地址模式下的初始化 61
3.4.2 保護模式下的初始化 65
3.4.3 作業系統核心功能的初始化 68
3.4.4 Hello China的記憶體布局圖 73
3.5 Hello China的字元shell 74
3.5.1 字元shell的概述和啟動 74
3.5.2 shell的訊息處理過程 75
3.5.3 實例:增加一個字元shell內置命令 78
3.6 從保護模式切換回實模式 79
3.6.1 模式切換概述 79
3.6.2 實模式服務調用舉例 81
3.6.3 保護模式切換到實模式 82
3.7 引導和初始化總結 87
第4章 Hello China執行緒的實現 88
4.1 進程、執行緒和任務 88
4.2 Hello China的執行緒實現 89
4.2.1 核心執行緒管理對象 89
4.2.2 執行緒的狀態及其切換 95
4.2.3 核心執行緒對象 96
4.2.4 執行緒的上下文 99
4.2.5 執行緒的創建和初始化 101
4.2.6 執行緒的結束 107
4.2.7 執行緒的訊息佇列 108
4.2.8 執行緒的切換—中斷上下文 111
4.2.9 執行緒的切換—系統調用上下文 118
4.2.10 上下文保存和切換的底層函式 123
4.2.11 執行緒的睡眠與喚醒 128
4.2.12 核心執行緒實現總結 128
第5章 記憶體管理機制 129
5.1 記憶體管理機制概述 129
5.2 IA32 CPU記憶體管理機制 129
5.2.1 IA32 CPU記憶體管理機制概述 129
5.2.2 幾個重要的概念 131
5.2.3 分段機制的套用 132
5.2.4 分頁機制的套用 135
5.3 Power PC CPU的記憶體管理機制 142
5.4 Hello China記憶體管理模型 144
5.4.1 Hello China的記憶體管理模型 144
5.4.2 Hello China的記憶體布局 146
5.4.3 核心記憶體池的管理 147
5.4.4 頁框管理對象 149
5.4.5 頁面索引對象 154
5.4.6 虛擬記憶體管理對象 158
5.5 執行緒本地堆 175
5.5.1 執行緒本地堆概述 175
5.5.2 堆的功能需求定義 175
5.5.3 堆的實現概要 177
5.5.4 堆的詳細實現 181
5.6 Hello China的記憶體管理機制總結 193
第6章 系統調用的原理與實現 194
6.1 系統調用概述 194
6.2 Hello China系統調用的實現 197
6.3 系統調用時的參數傳遞 199
第7章 執行緒互斥和同步機制的實現 204
7.1 互斥和同步概述 204
7.2 關鍵區段概述 204
7.3 關鍵區段產生的原因 205
7.3.1 多個執行緒之間的競爭 205
7.3.2 中斷服務程式與執行緒之間的競爭 206
7.3.3 多個CPU之間的競爭 206
7.4 單CPU下關鍵區段的實現 207
7.5 多CPU下關鍵區段的實現 209
7.5.1 多CPU環境下的實現方式 209
7.5.2 Hello China的未來實現 210
7.6 Power PC下關鍵區段的實現 211
7.6.1 Power PC提供的互斥訪問機制 211
7.6.2 多CPU環境下的互斥機制 212
7.7 關鍵區段使用注意事項 213
7.8 Semaphore概述 214
7.9 Semaphore對象的定義 214
7.10 Semaphore對象的實現 215
7.10.1 Initialize和Uninitialize的實現 216
7.10.2 WaitForThisObject的實現 217
7.10.3 WaitForThisObjectEx的實現 218
7.10.4 ReleaseSemaphore的實現 222
7.11 互斥和同步機制總結 223
第8章 中斷和定時處理機制的實現 224
8.1 中斷和異常概述 224
8.2 硬體相關部分處理 225
8.2.1 IA32中斷處理過程 225
8.2.2 IDT初始化 226
8.3 硬體無關部分處理 230
8.3.1 系統對象和中斷對象 230
8.3.2 中斷調度過程 232
8.3.3 預設中斷處理函式 233
8.4 對外服務接口 234
8.5 系統時鐘中斷 235
8.5.1 系統時鐘中斷概述 235
8.5.2 系統時鐘中斷的初始化 236
8.5.3 系統時鐘中斷處理函式的主要工作 237
8.5.4 時鐘中斷周期對系統實時性的影響分析 239
8.6 注意事項 241
8.7 定時器概述 241
8.7.1 SetTimer函式的調用 242
8.7.2 CancelTimer函式的調用 243
8.7.3 ResetTimer函式的調用 243
8.8 設定定時器操作 243
8.9 定時器逾時處理 245
8.10 定時器取消處理 247
8.11 定時器復位 248
8.12 定時器注意事項 249
第9章 系統匯流排和設備管理 251
9.1 系統匯流排概述 251
9.1.1 系統匯流排 251
9.1.2 匯流排管理模型 251
9.1.3 設備標識符 255
9.2 系統資源管理 255
9.2.1 資源描述對象 256
9.2.2 IO連線埠資源管理 257
9.3 驅動程式接口 257
9.3.1 GetResource 258
9.3.2 GetDevice 258
9.3.3 CheckPortRegion 258
9.3.4 ReservePortRegion 258
9.3.5 ReleasePortRegion 259
9.3.6 AppendDevice 259
9.3.7 DeleteDevice 259
9.4 PCI匯流排驅動程式概述 260
9.4.1 PCI匯流排概述 260
9.4.2 PCI設備的配置空間 260
9.4.3 配置空間關鍵欄位的說明 262
9.4.4 PCI配置空間的讀取與設定 269
9.5 PCI匯流排驅動程式的實現 270
9.5.1 探測PCI匯流排是否存在 270
9.5.2 對普通PCI設備進行枚舉 271
9.5.3 配置PCI橋接設備 277
第10章 設備驅動程式管理 279
10.1 設備管理框架 279
10.1.1 概述 279
10.1.2 通用的作業系統設備管理機制 281
10.1.3 設備管理框架的實現 285
10.1.4 IO管理器 287
10.2 設備驅動程式 295
10.2.1 設備請求控制塊 295
10.2.2 設備驅動程式對象的定義 298
10.2.3 設備驅動程式的物理結構 299
10.2.4 設備驅動程式的功能函式 300
10.2.5 DriverEntry的實現 302
10.2.6 UnloadEntry的實現 303
10.3 設備對象 304
10.3.1 設備對象的定義 304
10.3.2 設備對象的命名 304
10.3.3 設備對象的類型 305
10.3.4 設備對象的設備擴展 306
10.3.5 設備的打開操作 306
10.3.6 設備命名策略 307
10.4 設備的中斷管理 308
10.5 設備管理實例:串口通信程式 309
10.5.1 串列通信接口概述 309
10.5.2 串列通信編程方式 312
10.6 設備驅動程式管理總結 334
第11章 圖形用戶界面 336
11.1 圖形用戶界面概述 336
11.2 符合VESA標準的顯示卡操作方法 337
11.2.1 判斷顯示卡是否支持VBE標準 338
11.2.2 切換到0x118工作模式 339
11.3 對顯示設備的封裝—Video對象 342
11.3.1 GUI模組的分層架構 342
11.3.2 Video對象 343
11.3.3 通用繪製層簡介 349
11.4 滑鼠指針的實現 351
11.5 視窗訊息傳遞機制概述 354
11.6 Hello China的視窗機制 355
11.6.1 父視窗要完全包含子視窗 355
11.6.2 二層視窗剪下域 357
11.6.3 二層視窗剪下域的實現 358
11.7 Hello China視窗機制的實現 360
11.7.1 視窗管理器與視窗對象 361
11.7.2 視窗函式與視窗訊息 363
11.7.3 視窗歸屬執行緒 366
11.7.4 視窗樹 366
11.8 用戶輸入處理和訊息傳遞 369
11.8.1 用戶輸入和訊息傳遞過程簡介 369
11.8.2 設備驅動程式的工作 372
11.8.3 設備輸入管理器 379
11.8.4 GUI原始輸入執行緒—GUIRAWIT 383
11.8.5 訊息循環的本質 388
11.8.6 套用執行緒之間的視窗訊息互動 392
11.9 Hello China的GUI Shell 393
11.9.1 GUI Shell概述 393
11.9.2 GUI Shell的啟動和初始化 395
11.9.3 載入一個應用程式 399
11.9.4 GUI Shell的退出 400
11.10 GUI模組的開發方法 402
第12章 檔案系統及其實現 404
12.1 檔案系統概述 404
12.1.1 檔案系統的基本概念 404
12.1.2 檔案系統的操作——fs程式 405
12.2 FAT32檔案系統原理 406
12.2.1 FAT32卷的布局 406
12.2.2 引導扇區和BPB 407
12.2.3 檔案分配表 408
12.2.4 檔案目錄項 410
12.2.5 檔案的查找 411
12.3 Hello China檔案系統的實現 412
12.3.1 IO管理器 412
12.3.2 檔案系統的載入和初始化 418
12.3.3 存儲設備驅動程式 419
12.3.4 分區的識別和安裝 426
12.3.5 檔案的打開操作 431
12.3.6 檔案的讀取操作 434
12.4 檔案系統API的使用舉例 437
12.5 檔案系統實現總結 439
第13章 應用程式開發方法 441
13.1 概述 441
13.2 HCX檔案的結構和載入過程 441
13.2.1 HCX檔案的格式 441
13.2.2 HCX檔案的生成方式 442
13.2.3 HCX檔案的載入和執行 443
13.3 Hello China應用程式開發步驟 444
13.3.1 建立應用程式開發環境 444
13.3.2 啟動VS 2008,建立一個新的應用程式 444
13.3.3 在應用程式中添加原始碼 444
13.3.4 對新建的應用程式進行設定 446
13.3.5 編寫應用程式代碼,並進行編譯連結 448
13.3.6 對生成的DLL進行處理,形成HCX檔案 450
13.3.7 運行生成的HCX檔案 451
13.4 應用程式開發總結 452
第14章 開發輔助工具 453
14.1 開發輔助工具概述 453
14.2 PE檔案格式簡介 453
14.2.1 MS—DOS頭和DOS stub程式 454
14.2.2 PE檔案頭 455
14.2.3 PE檔案中的節 458
14.3 開發輔助工具的實現和使用 460
14.3.1 process工具 460
14.3.2 hcxbuild工具 461
14.3.3 append工具 463
14.3.4 vfmaker工具 464
14.3.5 dumpf32和mkntfsbs工具 464
附錄 465
附錄A 關於作業系統開發的兩篇博文 465
A.1 作業系統開發過程應遵循的一些原則 465
A.2 對作業系統開發的一些相關問題的思考 469
附錄B 原始碼組織結構說明 473
附錄C 核心開發環境的搭建 476
C.1 概述 476
C.2 Microsoft Visual C++的設定 479
C.3 作業系統開發中常用的Microsoft Visual C++特性 479
C.4 搭建作業系統開發環境 480
C.5 作業系統核心模組開發示例 482
參考文獻 485