一個(gè)64位操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
定 價(jià):139 元
叢書名:C
- 作者:田宇
- 出版時(shí)間:2018/5/1
- ISBN:9787115475251
- 出 版 社:人民郵電出版社
- 中圖法分類:TP316.85
- 頁(yè)碼:680
- 紙張:
- 版次:01
- 開本:16開
本書講述了一個(gè)64位多核操作系統(tǒng)的自制過(guò)程。此操作系統(tǒng)自制過(guò)程是先從虛擬平臺(tái)構(gòu)筑起一個(gè)基礎(chǔ)框架,隨后再將基礎(chǔ)框架移植到物理平臺(tái)中進(jìn)行升級(jí)、完善與優(yōu)化。為了凸顯64位多核操作系統(tǒng)的特點(diǎn),物理平臺(tái)選用搭載著Intel Core-i7處理器的筆記本電腦。與此同時(shí),本書還將Linux內(nèi)核的源碼精髓、諸多官方白皮書以及多款常用協(xié)議濃縮于其中,可使讀者在讀完本書后能夠?qū)W以致用,進(jìn)而達(dá)到理論聯(lián)系實(shí)際的目的。
全書共分為16章。第1~2章講述了操作系統(tǒng)的基礎(chǔ)概念和開發(fā)操作系統(tǒng)需要掌握的知識(shí);第3~5章在虛擬平臺(tái)下快速構(gòu)建起一個(gè)操作系統(tǒng)模型;第6~16章將在物理平臺(tái)下對(duì)操作系統(tǒng)模型做進(jìn)一步升級(jí)、優(yōu)化和完善。
本書既適合在校學(xué)習(xí)理論知識(shí)的初學(xué)者,又適合在職工作的軟件工程師或有一定基礎(chǔ)的業(yè)余愛好者。
1.基于Intel Core i7處理器的64位多核操作系統(tǒng)
2.引入諸多Linux內(nèi)核的設(shè)計(jì)精髓
3.既可在Bochs虛擬機(jī)中執(zhí)行,又可通過(guò)U盤引導(dǎo)運(yùn)行于筆記本電腦
田宇 Linux內(nèi)核愛好者,曾在多家大中型軟件公司從事軟件開發(fā)工作,參與過(guò)多款高端嵌入式產(chǎn)品的開發(fā)研制,主要負(fù)責(zé)Linux內(nèi)核和驅(qū)動(dòng)的研發(fā),以及開源操作系統(tǒng)環(huán)境的深度定制。
第 一部分 操作系統(tǒng)相關(guān)知識(shí)介紹及環(huán)境搭建
第 1章 操作系統(tǒng)概述 4
1.1 什么是操作系統(tǒng) 4
1.2 操作系統(tǒng)的組成結(jié)構(gòu) 4
1.3 編寫操作系統(tǒng)需要的知識(shí) 7
1.4 本書操作系統(tǒng)簡(jiǎn)介 8
第 2章 環(huán)境搭建及基礎(chǔ)知識(shí) 9
2.1 虛擬機(jī)及開發(fā)系統(tǒng)平臺(tái)介紹 9
2.1.1 VMware的安裝 9
2.1.2 編譯環(huán)境CentOS 6 10
2.1.3 Bochs虛擬機(jī) 11
2.2 匯編語(yǔ)言 14
2.2.1 AT&T匯編語(yǔ)言格式與Intel匯編語(yǔ)言格式 14
2.2.2 NASM編譯器 16
2.2.3 使用匯編語(yǔ)言調(diào)用C語(yǔ)言的函數(shù) 16
2.3 C語(yǔ)言 19
2.3.1 GNU C內(nèi)嵌匯編語(yǔ)言 20
2.3.2 GNU C語(yǔ)言對(duì)標(biāo)準(zhǔn)C語(yǔ)言的擴(kuò)展 23
第二部分 初級(jí)篇
第3章 BootLoader引導(dǎo)啟動(dòng)程序 30
3.1 Boot引導(dǎo)程序 30
3.1.1 BIOS引導(dǎo)原理 31
3.1.2 寫一個(gè)Boot引導(dǎo)程序 32
3.1.3 創(chuàng)建虛擬軟盤鏡像文件 36
3.1.4 在Bochs上運(yùn)行我們的Boot程序 38
3.1.5 加載Loader到內(nèi)存 40
3.1.6 從Boot跳轉(zhuǎn)到Loader程序 52
3.2 Loader引導(dǎo)加載程序 54
3.2.1 Loader原理 54
3.2.2 寫一個(gè)Loader程序 55
3.2.3 從實(shí)模式進(jìn)入保護(hù)模式再到IA-32e模式 65
3.2.4 從Loader跳轉(zhuǎn)到內(nèi)核程序 75
第4章 內(nèi)核層 78
4.1 內(nèi)核執(zhí)行頭程序 78
4.1.1 什么是內(nèi)核執(zhí)行頭程序 78
4.1.2 寫一個(gè)內(nèi)核執(zhí)行頭程序 79
4.2 內(nèi)核主程序 83
4.3 屏幕顯示 85
4.3.1 在屏幕上顯示色彩 86
4.3.2 在屏幕上顯示log 88
4.4 系統(tǒng)異常 100
4.4.1 異常的分類 101
4.4.2 系統(tǒng)異常處理(一) 102
4.4.3 系統(tǒng)異常處理(二) 109
4.5 初級(jí)內(nèi)存管理單元 121
4.5.1 獲得物理內(nèi)存信息 121
4.5.2 計(jì)算可用物理內(nèi)存頁(yè)數(shù) 123
4.5.3 分配可用物理內(nèi)存頁(yè) 126
4.6 中斷處理 142
4.6.1 8259A PIC 142
4.6.2 觸發(fā)中斷 148
4.7 鍵盤驅(qū)動(dòng) 152
4.7.1 簡(jiǎn)述鍵盤功能 152
4.7.2 實(shí)現(xiàn)鍵盤中斷捕獲函數(shù) 154
4.8 進(jìn)程管理 155
4.8.1 簡(jiǎn)述進(jìn)程管理模塊 155
4.8.2 PCB 156
4.8.3 init進(jìn)程 163
第5章 應(yīng)用層 171
5.1 跳轉(zhuǎn)到應(yīng)用層 171
5.2 實(shí)現(xiàn)系統(tǒng)調(diào)用API 180
5.3 實(shí)現(xiàn)一個(gè)系統(tǒng)調(diào)用處理函數(shù) 185
第三部分 高級(jí)篇
第6章 處理器體系結(jié)構(gòu) 190
6.1 基礎(chǔ)功能與新特性 190
6.1.1 運(yùn)行模式 190
6.1.2 通用寄存器 191
6.1.3 CPUID指令 192
6.1.4 標(biāo)志寄存器EFLAGS 193
6.1.5 控制寄存器 195
6.1.6 MSR寄存器組 199
6.2 地址空間 199
6.2.1 虛擬地址 200
6.2.2 物理地址 200
6.3 實(shí)模式 200
6.3.1 實(shí)模式概述 201
6.3.2 實(shí)模式的段尋址方式 201
6.3.3 實(shí)模式的中斷向量表 201
6.4 保護(hù)模式 202
6.4.1 保護(hù)模式概述 202
6.4.2 保護(hù)模式的段管理機(jī)制 206
6.4.3 保護(hù)模式的中斷/異常處理機(jī)制 214
6.4.4 保護(hù)模式的頁(yè)管理機(jī)制 217
6.4.5 保護(hù)模式的地址轉(zhuǎn)換過(guò)程 224
6.5 IA-32e模式 226
6.5.1 IA-32e模式概述 226
6.5.2 IA-32e模式的段管理機(jī)制 228
6.5.3 IA-32e模式的中斷/異常處理機(jī)制 234
6.5.4 IA-32e模式的頁(yè)管理機(jī)制 234
6.5.5 IA-32e模式的地址轉(zhuǎn)換過(guò)程 237
第7章 完善BootLoader功能 238
7.1 實(shí)模式的尋址瓶頸 238
7.1.1 錯(cuò)綜復(fù)雜的1 MB物理地址空間 238
7.1.2 突破1 MB物理內(nèi)存瓶頸 239
7.1.3 實(shí)模式下的4 GB線性地址尋址 240
7.2 獲取物理地址空間信息 240
7.3 操作系統(tǒng)引導(dǎo)加載階段的內(nèi)存空間劃分 242
7.4 U盤啟動(dòng) 244
7.4.1 USB-FDD、USB-ZIP和USB-HDD啟動(dòng)模式的簡(jiǎn)介 244
7.4.2 將Boot引導(dǎo)程序移植到U盤中啟動(dòng) 251
7.5 在物理平臺(tái)上啟動(dòng)操作系統(tǒng) 255
7.6 細(xì)說(shuō)VBE功能的實(shí)現(xiàn) 261
7.6.1 VBE規(guī)范概述 261
7.6.2 獲取物理平臺(tái)的VBE相關(guān)信息 272
7.6.3 設(shè)置顯示模式 279
第8章 內(nèi)核主程序 282
8.1 內(nèi)核主程序功能概述 282
8.2 操作系統(tǒng)的Makefile編譯腳本 282
8.3 操作系統(tǒng)的kernel.lds鏈接腳本 286
8.4 操作系統(tǒng)的線性地址空間劃分 289
8.5 獲得處理器的固件信息 290
第9章 高級(jí)內(nèi)存管理單元 297
9.1 SLAB內(nèi)存池 297
9.1.1 SLAB內(nèi)存池概述及相關(guān)結(jié)構(gòu)體定義 298
9.1.2 SLAB內(nèi)存池的創(chuàng)建與銷毀 299
9.1.3 SLAB內(nèi)存池中對(duì)象的分配與回收 302
9.2 基于SLAB內(nèi)存池技術(shù)的通用內(nèi)存管理單元 308
9.2.1 通用內(nèi)存管理單元的初始化函數(shù)slab_init 308
9.2.2 通用內(nèi)存的分配函數(shù)kmalloc 312
9.2.3 通用內(nèi)存的回收函數(shù)kfree 317
9.3 調(diào)整物理頁(yè)管理功能 321
9.3.1 內(nèi)存管理單元結(jié)構(gòu)及相關(guān)函數(shù)調(diào)整 321
9.3.2 調(diào)整alloc_pages函數(shù) 323
9.3.3 創(chuàng)建free_pages函數(shù) 327
9.4 頁(yè)表初始化 330
9.4.1 頁(yè)表重新初始化 331
9.4.2 VBE幀緩存區(qū)地址重映射 334
第 10章 高級(jí)中斷處理單元 337
10.1 APIC概述 337
10.2 Local APIC 338
10.2.1 Local APIC的基礎(chǔ)信息 338
10.2.2 Local APIC整體結(jié)構(gòu)及各功能描述 344
10.3 I/O APIC 352
10.3.1 I/O APIC控制器的基礎(chǔ)信息 353
10.3.2 I/O APIC整體結(jié)構(gòu)及各引腳功能 356
10.4 中斷控制器的模式選擇與初始化 358
10.4.1 中斷模式 359
10.4.2 Local APIC控制器的初始化 362
10.4.3 I/O APIC控制器的初始化 368
10.5 高級(jí)中斷處理功能 375
10.5.1 Linux的中斷處理機(jī)制概述 375
10.5.2 實(shí)現(xiàn)中斷上半部處理功能 377
第 11章 設(shè)備驅(qū)動(dòng)程序 382
11.1 鍵盤和鼠標(biāo)驅(qū)動(dòng)程序 382
11.1.1 鍵盤和鼠標(biāo)控制器 382
11.1.2 完善鍵盤驅(qū)動(dòng) 389
11.1.3 實(shí)現(xiàn)鼠標(biāo)驅(qū)動(dòng) 398
11.2 硬盤驅(qū)動(dòng)程序 403
11.2.1 硬盤設(shè)備初探 403
11.2.2 完善硬盤驅(qū)動(dòng)程序 418
第 12章 進(jìn)程管理 428
12.1 進(jìn)程管理單元功能概述 428
12.2 多核處理器 429
12.2.1 超線程技術(shù)與多核技術(shù)概述 429
12.2.2 多核處理器間的IPI通信機(jī)制介紹 434
12.2.3 讓我們的系統(tǒng)支持多核 437
12.3 進(jìn)程調(diào)度器 464
12.3.1 Linux進(jìn)程調(diào)度器簡(jiǎn)介 465
12.3.2 墻上時(shí)鐘與定時(shí)器 468
12.3.3 內(nèi)核定時(shí)器 479
12.3.4 實(shí)現(xiàn)進(jìn)程調(diào)度功能 486
12.4 內(nèi)核同步方法 498
12.4.1 原子變量 498
12.4.2 信號(hào)量 499
12.4.3 完善自旋鎖 501
12.5 完善進(jìn)程管理單元 503
12.5.1 完善PCB與處理器運(yùn)行環(huán)境 503
12.5.2 完善進(jìn)程調(diào)度器和AP處理器引導(dǎo)程序 508
12.5.3 關(guān)于線程 514
第 13章 文件系統(tǒng) 516
13.1 文件系統(tǒng)概述 516
13.2 解析FAT32文件系統(tǒng) 517
13.2.1 FAT32文件系統(tǒng)簡(jiǎn)介 517
13.2.2 通過(guò)實(shí)例深入解析FAT32文件系統(tǒng) 523
13.2.3 實(shí)現(xiàn)基于路徑名的文件系統(tǒng)檢索功能 532
13.3 虛擬文件系統(tǒng) 552
13.3.1 Linux VFS簡(jiǎn)介 552
13.3.2 實(shí)現(xiàn)VFS 554
第 14章 系統(tǒng)調(diào)用API庫(kù) 566
14.1 系統(tǒng)調(diào)用API結(jié)構(gòu) 566
14.2 基于POSIX規(guī)范實(shí)現(xiàn)系統(tǒng)調(diào)用API庫(kù) 567
14.2.1 POSIX規(guī)范下的系統(tǒng)調(diào)用API簡(jiǎn)介 567
14.2.2 升級(jí)系統(tǒng)調(diào)用模塊 568
14.2.3 基礎(chǔ)文件操作的系統(tǒng)調(diào)用API實(shí)現(xiàn) 574
14.2.4 進(jìn)程創(chuàng)建的系統(tǒng)調(diào)用API實(shí)現(xiàn) 599
14.2.5 內(nèi)存管理的基礎(chǔ)系統(tǒng)調(diào)用API實(shí)現(xiàn) 618
第 15章 Shell命令解析器及命令 626
15.1 Shell命令解析器 626
15.1.1 Shell命令解析器概述 626
15.1.2 實(shí)現(xiàn)Shell命令解析器 627
15.2 基礎(chǔ)命令 641
15.2.1 重啟命令reboot 641
15.2.2 工作目錄切換命令cd 642
15.2.3 目錄內(nèi)容顯示命令ls 645
15.2.4 文件查看命令cat 654
15.2.5 程序執(zhí)行命令exec 655
第 16章 一個(gè)彩蛋 665
附錄 術(shù)語(yǔ)表 676
參考資料 679