一個64位操作系統的設計與實現(第2版)

田宇

  • 出版商: 人民郵電
  • 出版日期: 2026-06-01
  • 定價: $1,019
  • 售價: $1,018
  • 語言: 簡體中文
  • 頁數: 779
  • ISBN: 7115690014
  • ISBN-13: 9787115690012
  • 相關分類: Operating-system
  • 下單後立即進貨 (約4週~6週)

  • 一個64位操作系統的設計與實現(第2版)-preview-1
一個64位操作系統的設計與實現(第2版)-preview-1

相關主題

商品描述

本書講述了一個64位多核操作系統的自制過程。首先從虛擬平臺構築起一個基礎框架,隨後移植到物理平臺中進行升級、完善與優化。為了凸顯64位多核操作系統的特點,物理平臺選用搭載Intel Core i7處理器的筆記本電腦和臺式計算機。與此同時,本書還將Linux 內核的源碼精髓、諸多官方白皮書以及多款常用協議濃縮於其中,使讀者在看完本書後能夠學以致用,達到理論聯系實際的目的。

全書共16章,第1~2章講述操作系統的基本概念和開發操作系統所需具備的知識;第3~5章快速構建起一個操作系統模型;第6~16章對操作系統模型進行升級、優化和完善。

讀者讀完此書後,不僅可以掌握Intel 處理器IA-32e 體系結構的主要特點,還能熟悉代碼級的Linux內核核心功能實現。

本書既適合在校學習理論知識的初學者,又適合在職工作的軟件工程師或有一定基礎的業余愛好者。

作者簡介

田宇,Linux內核愛好者,曾在多家大中型軟件公司從事軟件開發工作,參與過多款高端嵌入式產品的開發研制,主要負責Linux內核和驅動的研發,以及開源操作系統環境的深度定制。

目錄大綱

第 一部分 操作系統相關知識及環境搭建

第 1 章 操作系統整體概述 ............................ 2

1.1 什麼是操作系統 ....................................... 2

1.2 操作系統的結構 ....................................... 2

1.3 編寫操作系統所需的知識 ........................ 4

1.4 本書操作系統簡介 ................................... 6

第 2章 環境搭建及基礎知識介紹 ............... 7

2.1 開發環境介紹 ........................................... 7

2.1.1 編譯環境 ....................................... 8

2.1.2 運行環境 ....................................... 9

2.1.3 調試環境 ...................................... 12

2.2 匯編語言 .................................................. 17

2.2.1 AT&T匯編語言格式與Intel匯編語言格式 .............................. 17

2.2.2 使用匯編語言調用C語言的函數 .............................................. 19

2.3 C 語言 ...................................................... 22

2.3.1 GNU C 內嵌匯編語言 .................. 22

2.3.2 GNU C 語言對標準C 語言的擴展 .............................................. 26

第二部分 初級篇

第3 章 UEFI 引導程序 ................................. 32

3.1 UEFI 與BIOS 概述 .................................. 32

3.1.1 UEFI 與BIOS 的結構組成 ........... 32

3.1.2 UEFI 與BIOS 的啟動流程 ........... 33

3.1.3 UEFI 取代BIOS 的原因 .............. 35

3.2 編寫一個UEFI 程序 ................................ 36

3.2.1 搭建TianoCore EDK2 開發環境 ............................................. 37

3.2.2 編譯執行UEFI Shell(包括創建GPT 分區) ......................... 38

3.2.3 GPT 磁盤布局 .............................. 50

3.2.4 ESP(EFI 系統分區) ................. 54

3.2.5 編寫一個Hello World 程序 ......... 57

3.2.6 UEFI 鏡像 .................................... 60

3.2.7 UEFI 系統表 ................................ 61

3.2.8 UEFI 調用約定與協議 ................. 66

3.3 逐步實現UEFI 引導程序 ........................ 70

3.3.1 配置圖形設備的顯示模式 ........... 70

3.3.2 獲取可用物理內存 ....................... 78

3.3.3 從存儲介質讀取文件 ................... 82

3.3.4 UEFI 環境中的x64 處理器平臺 ............................................. 90

3.3.5 實現系統內核的引導啟動 ........... 93

第4 章 內核層 .............................................. 103

4.1 內核執行頭程序 .................................... 103

4.1.1 什麼是內核執行頭程序 ............. 103

4.1.2 編寫一個內核執行頭程序 ......... 104

4.2 內核主程序 ............................................ 108

4.3 屏幕顯示 ................................................ 111

4.3.1 在屏幕上顯示色彩 ..................... 111

4.3.2 在屏幕上顯示LOG ................... 113

4.4 系統異常 ................................................ 127

4.4.1 異常的分類 ................................ 127

4.4.2 系統異常處理(一) ................. 128

4.4.3 系統異常處理(二) ................. 136

4.5 初級內存管理單元 ................................ 149

4.5.1 獲得物理內存信息 ..................... 149

4.5.2 計算可用物理內存頁數 ............. 151

4.5.3 分配可用物理內存頁 ................. 153

4.6 中斷處理 ............................................... 169

4.6.1 8259A ......................................... 169

4.6.2 觸發一個中斷 ............................ 176

4.7 鍵盤驅動 ............................................... 180

4.7.1 簡述鍵盤功能 ............................ 180

4.7.2 實現鍵盤中斷捕獲函數 ............. 181

4.8 進程管理 ............................................... 182

4.8.1 簡述進程管理模塊 ..................... 183

4.8.2 進程控制結構體 ........................ 183

4.8.3 init 進程 ..................................... 190

第5 章 應用層 .............................................. 199

5.1 跳轉到應用層 ........................................ 199

5.2 實現系統調用API ................................. 209

5.3 實現一個系統調用處理函數 ................. 214

第三部分 高級篇

第6 章 處理器體系結構 ............................. 218

6.1 基礎功能與新特性 ................................ 218

6.1.1 運行模式 .................................... 218

6.1.2 通用寄存器 ................................ 219

6.1.3 CPUID 指令 ............................... 220

6.1.4 標誌寄存器EFLAGS ................ 221

6.1.5 控制寄存器 ................................ 223

6.1.6 MSR 寄存器組 ........................... 227

6.1.7 浮點計算與向量計算 ................. 227

6.2 地址空間 ............................................... 228

6.2.1 虛擬地址 .................................... 229

6.2.2 物理地址 .................................... 229

6.3 實模式 ................................................... 229

6.3.1 實模式概述 ................................ 230

6.3.2 實模式的段尋址方式 ................. 230

6.3.3 實模式的中斷向量表 ................. 231

6.4 保護模式 ............................................... 231

6.4.1 保護模式概述 ............................ 232

6.4.2 保護模式的段管理機制 ............. 236

6.4.3 保護模式的中斷/異常處理機制 ........................................... 243

6.4.4 保護模式的頁管理機制 ............. 246

6.4.5 保護模式的地址轉換過程 ......... 254

6.5 IA-32e 模式 ........................................... 256

6.5.1 IA-32e 模式概述 ........................ 256

6.5.2 IA-32e 模式的段管理機制 ......... 258

6.5.3 IA-32e 模式的中斷/異常處理機制 ........................................... 264

6.5.4 IA-32e 模式的頁管理機制 ......... 264

6.5.5 IA-32e 模式的地址轉換過程 ..... 267

6.6 從實模式進入保護模式再到IA-32e模式 ....................................................... 269

6.6.1 從實模式進入保護模式 ............. 269

6.6.2 從保護模式進入IA-32e 模式 .... 273

6.6.3 從Loader 跳轉到內核程序 ........ 276

第7 章 內核主程序 ..................................... 279

7.1 內核主程序功能概述 ............................ 279

7.2 操作系統的Makefile 編譯腳本 ............ 279

7.3 操作系統的Kernel.lds 鏈接腳本 .......... 283

7.4 操作系統的線性地址空間劃分 ............. 286

7.5 獲得處理器的固件信息 ........................ 288

第8 章 高級內存管理單元......................... 294

8.1 SLAB 內存池 ........................................ 294

8.1.1 SLAB 內存池概述及相關結構體定義 ................................ 295

8.1.2 SLAB 內存池的創建與銷毀 ...... 296

8.1.3 SLAB 內存池中對象的分配與回收 ....................................... 299

8.2 基於SLAB 內存池技術的通用內存管理單元 ............................................... 305

8.2.1 通用內存管理單元的初始化函數slab_init ...................... 305

8.2.2 通用內存的分配函數kmalloc ................................... 309

8.2.3 通用內存的回收函數kfree ..... 314

8.3 調整物理頁管理功能 ............................. 318

8.3.1 內存管理單元結構及相關函數調整 .................................... 318

8.3.2 調整alloc_pages 函數 .......... 320

8.3.3 創建free_pages 函數 ............ 324

8.4 頁表初始化 ............................................ 328

8.4.1 頁表重新初始化 ......................... 328

8.4.2 幀緩存區地址重映射 ................. 331

第9 章 高級中斷處理單元 ......................... 334

9.1 APIC 概述 .............................................. 334

9.2 Local APIC ............................................ 335

9.2.1 Local APIC 的基礎信息 ............. 335

9.2.2 Local APIC 整體結構及各功能描述 .................................... 340

9.3 I/O APIC ................................................ 350

9.3.1 I/O APIC 控制器的基礎信息 ..... 350

9.3.2 I/O APIC 整體結構及各引腳功能 ............................................ 353

9.4 中斷控制器的模式選擇與初始化 .......... 355

9.4.1 中斷模式 .................................... 356

9.4.2 Local APIC 控制器的初始化 ..... 359

9.4.3 I/O APIC 控制器的初始化 ......... 366

9.5 高級中斷處理功能 ................................ 371

9.5.1 Linux 的中斷處理機制概述 ....... 371

9.5.2 實現中斷上半部處理功能 ......... 374

第 10 章 設備驅動程序 ............................... 378

10.1 鍵盤和鼠標驅動程序 ........................... 378

10.1.1 Intel 8042 控制器 ................... 378

10.1.2 完善鍵盤驅動程序 ................. 385

10.1.3 實現鼠標驅動程序 ................. 394

10.2 串口驅動程序 ...................................... 399

10.2.1 串口設備概述 ......................... 399

10.2.2 讓printk 函數支持串口輸出 ........................................ 404

10.3 PCI-Express 總線初探 ......................... 408

10.3.1 PCI 兼容配置空間頭(類型0) .............................. 408

10.3.2 PCI 電源管理功能 .................. 414

10.3.3 MSI 功能(可選) ................. 416

10.3.4 MSI-X 功能(可選) ............. 419

10.4 硬盤驅動程序 ...................................... 421

10.4.1 硬盤設備初探 ........................ 422

10.4.2 完善硬盤驅動程序 ................. 467

10.5 高級的NVMe ...................................... 476

10.5.1 控制器寄存器 ........................ 477

10.5.2 提交隊列項 ............................ 486

10.5.3 完成隊列項 ............................ 491

10.5.4 管理員命令組 ........................ 496

10.5.5 NVM 命令組 .......................... 510

10.5.6 NVMe 設備主控器初始化代碼 ........................................ 514

10.5.7 NVMe 設備標識獲取代碼 ..... 521

10.5.8 NVMe 設備I/O 隊列創建代碼 ........................................ 525

10.5.9 NVMe 設備扇區數據訪問代碼 ........................................ 529

第 11 章 進程管理 ........................................ 533

11.1 進程管理單元功能概述 ....................... 533

11.2 多核處理器 .......................................... 535

11.2.1 超線程技術與多核技術概述 ........................................ 535

11.2.2 多核處理器間的IPI 通信機制介紹 ................................ 539

11.2.3 讓我們的系統支持多核 ......... 542

11.3 進程調度器 .......................................... 573

11.3.1 Linux 進程調度器簡介........... 574

11.3.2 墻上時鐘與定時器 ................. 577

11.3.3 內核定時器 ............................ 589

11.4 內核同步方法 ...................................... 609

11.4.1 原子變量 ................................ 610

11.4.2 信號量 .................................... 611

11.4.3 完善自旋鎖 ............................ 613

11.5 完善進程管理單元 .............................. 615

11.5.1 完善進程控制結構體與處理器運行環境 ............................ 615

11.5.2 完善進程調度器和應用處理器引導程序 ............................ 621

11.5.3 關於線程 ................................ 627

第 12 章 文件系統 ....................................... 629

12.1 文件系統概述 ...................................... 629

12.2 解析FAT32 文件系統 ......................... 630

12.2.1 FAT32 文件系統簡介 ............ 631

12.2.2 通過實例深入解析FAT32文件系統 ................................ 636

12.2.3 實現基於路徑名的文件系統檢索功能 ................................ 645

12.3 虛擬文件系統 ...................................... 666

12.3.1 Linux 虛擬文件系統簡介 ....... 666

12.3.2 實現虛擬文件系統 ................. 667

第 13 章 系統調用API 庫 .......................... 680

13.1 系統調用API 結構 .............................. 680

13.2 基於POSIX 規範實現系統調用API 庫 .................................................. 681

13.2.1 POSIX 規範下的系統調用API 簡介 ................................. 681

13.2.2 升級系統調用模塊 ................. 682

13.2.3 基礎文件操作的系統調用API 實現 ................................. 688

13.2.4 進程創建的系統調用API實現 ........................................ 713

13.2.5 內存管理的基礎系統調用API 實現 ................................. 731

第 14 章 Shell 命令解析器及命令 ............ 740

14.1 Shell 命令解析器 ................................. 740

14.1.1 Shell 命令解析器概述 ............ 740

14.1.2 實現Shell 命令解析器 ........... 741

14.2 基礎命令 .............................................. 756

14.2.1 重啟命令reboot .................. 756

14.2.2 工作目錄切換命令cd ........... 757

14.2.3 目錄內容顯示命令ls ........... 760

14.2.4 文件查看命令cat ................. 769

14.2.5 程序執行命令exec .............. 770

第 15 章 一個彩蛋——內核棧反向跟蹤技術 ...................... 圖靈社區下載

第 16 章 又一個彩蛋——模塊的動態加載 .......................圖靈社區下載

術語表 ....................................圖靈社區下載

參考文獻............................................. 圖靈社區下載