第一部分 操作係統相關知識介紹及環境搭建
第1章 操作係統概述 4
1.1 什麼是操作係統 4
1.2 操作係統的組成結構 4
1.3 編寫操作係統需要的知識 7
1.4 本書操作係統簡介 8
第2章 環境搭建及基礎知識 9
2.1 虛擬機及開發係統平颱介紹 9
2.1.1 VMware的安裝 9
2.1.2 編譯環境CentOS 6 10
2.1.3 Bochs虛擬機 11
2.2 匯編語言 14
2.2.1 AT&T匯編語言格式與Intel匯編語言格式 14
2.2.2 NASM編譯器 16
2.2.3 使用匯編語言調用C語言的函數 16
2.3 C語言 19
2.3.1 GNU C內嵌匯編語言 20
2.3.2 GNU C語言對標準C語言的擴展 23
第二部分 初級篇
第3章 BootLoader引導啓動程序 30
3.1 Boot引導程序 30
3.1.1 BIOS引導原理 31
3.1.2 寫一個Boot引導程序 32
3.1.3 創建虛擬軟盤鏡像文件 36
3.1.4 在Bochs上運行我們的Boot程序 38
3.1.5 加載Loader到內存 40
3.1.6 從Boot跳轉到Loader程序 52
3.2 Loader引導加載程序 54
3.2.1 Loader原理 54
3.2.2 寫一個Loader程序 55
3.2.3 從實模式進入保護模式再到IA-32e模式 65
3.2.4 從Loader跳轉到內核程序 75
第4章 內核層 78
4.1 內核執行頭程序 78
4.1.1 什麼是內核執行頭程序 78
4.1.2 寫一個內核執行頭程序 79
4.2 內核主程序 83
4.3 屏幕顯示 85
4.3.1 在屏幕上顯示色彩 86
4.3.2 在屏幕上顯示log 88
4.4 係統異常 100
4.4.1 異常的分類 101
4.4.2 係統異常處理(一) 102
4.4.3 係統異常處理(二) 109
4.5 初級內存管理單元 121
4.5.1 獲得物理內存信息 121
4.5.2 計算可用物理內存頁數 123
4.5.3 分配可用物理內存頁 126
4.6 中斷處理 142
4.6.1 8259A PIC 142
4.6.2 觸發中斷 148
4.7 鍵盤驅動 152
4.7.1 簡述鍵盤功能 152
4.7.2 實現鍵盤中斷捕獲函數 154
4.8 進程管理 155
4.8.1 簡述進程管理模塊 155
4.8.2 PCB 156
4.8.3 init進程 163
第5章 應用層 171
5.1 跳轉到應用層 171
5.2 實現係統調用API 180
5.3 實現一個係統調用處理函數 185
第三部分 高級篇
第6章 處理器體係結構 190
6.1 基礎功能與新特性 190
6.1.1 運行模式 190
6.1.2 通用寄存器 191
6.1.3 CPUID指令 192
6.1.4 標誌寄存器EFLAGS 193
6.1.5 控製寄存器 195
6.1.6 MSR寄存器組 199
6.2 地址空間 199
6.2.1 虛擬地址 200
6.2.2 物理地址 200
6.3 實模式 200
6.3.1 實模式概述 201
6.3.2 實模式的段尋址方式 201
6.3.3 實模式的中斷嚮量錶 201
6.4 保護模式 202
6.4.1 保護模式概述 202
6.4.2 保護模式的段管理機製 206
6.4.3 保護模式的中斷/異常處理機製 214
6.4.4 保護模式的頁管理機製 217
6.4.5 保護模式的地址轉換過程 224
6.5 IA-32e模式 226
6.5.1 IA-32e模式概述 226
6.5.2 IA-32e模式的段管理機製 228
6.5.3 IA-32e模式的中斷/異常處理機製 234
6.5.4 IA-32e模式的頁管理機製 234
6.5.5 IA-32e模式的地址轉換過程 237
第7章 完善BootLoader功能 238
7.1 實模式的尋址瓶頸 238
7.1.1 錯綜復雜的1 MB物理地址空間 238
7.1.2 突破1 MB物理內存瓶頸 239
7.1.3 實模式下的4 GB綫性地址尋址 240
7.2 獲取物理地址空間信息 240
7.3 操作係統引導加載階段的內存空間劃分 242
7.4 U盤啓動 244
7.4.1 USB-FDD、USB-ZIP和USB-HDD啓動模式的簡介 244
7.4.2 將Boot引導程序移植到U盤中啓動 251
7.5 在物理平颱上啓動操作係統 255
7.6 細說VBE功能的實現 261
7.6.1 VBE規範概述 261
7.6.2 獲取物理平颱的VBE相關信息 272
7.6.3 設置顯示模式 279
第8章 內核主程序 282
8.1 內核主程序功能概述 282
8.2 操作係統的Makefile編譯腳本 282
8.3 操作係統的kernel.lds鏈接腳本 286
8.4 操作係統的綫性地址空間劃分 289
8.5 獲得處理器的固件信息 290
第9章 高級內存管理單元 297
9.1 SLAB內存池 297
9.1.1 SLAB內存池概述及相關結構體定義 298
9.1.2 SLAB內存池的創建與銷毀 299
9.1.3 SLAB內存池中對象的分配與迴收 302
9.2 基於SLAB內存池技術的通用內存管理單元 308
9.2.1 通用內存管理單元的初始化函數slab_init 308
9.2.2 通用內存的分配函數kmalloc 312
9.2.3 通用內存的迴收函數kfree 317
9.3 調整物理頁管理功能 321
9.3.1 內存管理單元結構及相關函數調整 321
9.3.2 調整alloc_pages函數 323
9.3.3 創建free_pages函數 327
9.4 頁錶初始化 330
9.4.1 頁錶重新初始化 331
9.4.2 VBE幀緩存區地址重映射 334
第10章 高級中斷處理單元 337
10.1 APIC概述 337
10.2 Local APIC 338
10.2.1 Local APIC的基礎信息 338
10.2.2 Local APIC整體結構及各功能描述 344
10.3 I/O APIC 352
10.3.1 I/O APIC控製器的基礎信息 353
10.3.2 I/O APIC整體結構及各引腳功能 356
10.4 中斷控製器的模式選擇與初始化 358
10.4.1 中斷模式 359
10.4.2 Local APIC控製器的初始化 362
10.4.3 I/O APIC控製器的初始化 368
10.5 高級中斷處理功能 375
10.5.1 Linux的中斷處理機製概述 375
10.5.2 實現中斷上半部處理功能 377
第11章 設備驅動程序 382
11.1 鍵盤和鼠標驅動程序 382
11.1.1 鍵盤和鼠標控製器 382
11.1.2 完善鍵盤驅動 389
11.1.3 實現鼠標驅動 398
11.2 硬盤驅動程序 403
11.2.1 硬盤設備初探 403
11.2.2 完善硬盤驅動程序 418
第12章 進程管理 428
12.1 進程管理單元功能概述 428
12.2 多核處理器 429
12.2.1 超綫程技術與多核技術概述 429
12.2.2 多核處理器間的IPI通信機製介紹 434
12.2.3 讓我們的係統支持多核 437
12.3 進程調度器 464
12.3.1 Linux進程調度器簡介 465
12.3.2 牆上時鍾與定時器 468
12.3.3 內核定時器 479
12.3.4 實現進程調度功能 486
12.4 內核同步方法 498
12.4.1 原子變量 498
12.4.2 信號量 499
12.4.3 完善自鏇鎖 501
12.5 完善進程管理單元 503
12.5.1 完善PCB與處理器運行環境 503
12.5.2 完善進程調度器和AP處理器引導程序 508
12.5.3 關於綫程 514
第13章 文件係統 516
13.1 文件係統概述 516
13.2 解析FAT32文件係統 517
13.2.1 FAT32文件係統簡介 517
13.2.2 通過實例深入解析FAT32文件係統 523
13.2.3 實現基於路徑名的文件係統檢索功能 532
13.3 虛擬文件係統 552
13.3.1 Linux VFS簡介 552
13.3.2 實現VFS 554
第14章 係統調用API庫 566
14.1 係統調用API結構 566
14.2 基於POSIX規範實現係統調用API庫 567
14.2.1 POSIX規範下的係統調用API簡介 567
14.2.2 升級係統調用模塊 568
14.2.3 基礎文件操作的係統調用API實現 574
14.2.4 進程創建的係統調用API實現 599
14.2.5 內存管理的基礎係統調用API實現 618
第15章 Shell命令解析器及命令 626
15.1 Shell命令解析器 626
15.1.1 Shell命令解析器概述 626
15.1.2 實現Shell命令解析器 627
15.2 基礎命令 641
15.2.1 重啓命令reboot 641
15.2.2 工作目錄切換命令cd 642
15.2.3 目錄內容顯示命令ls 645
15.2.4 文件查看命令cat 654
15.2.5 程序執行命令exec 655
第16章 一個彩蛋 665
附錄 術語錶 676
參考資料 679
· · · · · · (
收起)