UNIX xv6 內核源碼深入剖析
高聯雄
買這商品的人也買了...
-
$580$493 -
$680$537 -
$474$450 -
$1,750$1,663 -
$539$512 -
$534$507 -
$534$507 -
$659$626 -
$539Vue.js 設計與實現
-
$403C語言編程思想與方法
-
$1,019計算機體系結構:量化研究方法, 6/e
-
$1,500$1,425 -
$534$507 -
$588$559 -
$714$678 -
$620$484 -
$750$585 -
$450$351 -
$534$507 -
$948$901 -
$505穿越作業系統迷霧:從零實現作業系統
-
$594$564 -
$1,010Linux 核心完全註釋
-
$580$458 -
$800$600
相關主題
商品描述
本書對UNIX xv6的源碼進行了深入剖析和詳細註解,同時配合大量實例與圖表,對每個模塊先提煉關鍵數據結構和核心方法,再結合源碼分析其工作機制,讓讀者明白其原理及具體實現,以求理論和實踐能力同步提升,為深入理解操作系統原理乃至進一步研究學習Linux和Android等類UNIX系統內核打下堅實基礎。 本書第1章對xv6進行概述;第2章介紹xv6操作系統結構;第3章介紹xv6開發、測試和運行的軟件環境;第4章簡要介紹x86電腦組成原理;第5章介紹x86的實模式與保護模式;第6章深入分析xv6的啟動;第7~10章介紹xv6的虛擬空間管理、中斷與系統調用、鎖以及進程管理,第11、12章介紹xv6的文件系統;第13章介紹exec()函數、管道與字符串的實現;第14章介紹xv6的多處理器支持;第15章介紹字符設備驅動;第16章介紹用戶進程的初始化、API和Shell的實現。 本書適合操作系統初、中級學習者,系統程序員,嵌入式系統開發者以及對UNIX和Linux等類UNIX內核感興趣的讀者。
目錄大綱
目錄
第1章 xv6概述
1.1 xv6的前身UNIX
1.1.1 UNIX發展簡史
1.1.2 UNIX家族
1.2 xv6的誕生
1.3 xv6的源碼與文檔
第2章 xv6操作系統結構
2.1 xv6體系結構
2.1.1 硬件與內核
2.1.2 界面
2.1.3 內核態與用戶態
2.2 進程管理
2.3 虛擬內存、文件與I/O設備驅動
2.4 系統調用、API與內核函數
2.4.1 系統調用
2.4.2 API
2.4.3 內核函數
第3章 xv6的軟件環境
3.1 xv6的C語言技巧
3.1.1 static
3.1.2 inline
3.1.3 函數指針
3.1.4 函數指針示例
3.1.5 雙重指針
3.2 AT&T匯編與內聯匯編
3.2.1 AT&T匯編
3.2.2 GCC內聯匯編
3.3 函數調用與堆棧
3.3.1 棧幀、寄存器慣例與調用約定
3.3.2 棧幀示例1
3.3.3 棧幀示例2
3.3.4 匯編語言中調用C語言函數
3.3.5 C語言函數調用匯編語言函數
3.4 xv6編譯、調試與鏈接
3.4.1 gcc命令
3.4.2 make命令
3.4.3 xv6的Makefile文件
3.4.4 gdb命令
3.4.5 ELF文件結構
3.4.6 使用ld命令鏈接xv6
3.5 Bochs與QEMU模擬器
3.5.1 Bochs模擬器
3.5.2 Bochs模擬器的配置
3.5.3 QEMU模擬器選項及內核調試
第4章 x86電腦組成原理
4.1 電腦系統
4.2 電腦硬件系統
4.2.1 硬件組成
4.2.2 總線
4.3 CPU
4.3.1 Cache與指令部件
4.3.2 MMU與BIU
4.3.3 寄存器組
4.4 內存
4.5 中斷系統
4.5.1 中斷
4.5.2 中斷控制器與中斷處理程序
4.6 I/O埠與外設
4.6.1 I/O埠與埠尋址
4.6.2 控制器與I/O設備
第5章 x86實模式與保護模式
5.1 x86的地址與工作模式
5.1.1 地址的概念
5.1.2 16位實模式
5.1.3 32位保護模式
5.2 A20地址線
5.3 保護模式與段寄存器
5.3.1 分段機制
5.3.2 邏輯地址轉換為線性地址
5.3.3 段選擇符
5.3.4 段寄存器
5.3.5 xv6的段選擇符和段寄存器的設定
5.4 描述符
5.4.1 描述符格式
5.4.2 非系統描述符
5.4.3 系統描述符
5.4.4 xv6中的描述符
5.5 描述符表、TSS與特權等級保護
5.5.1 描述符表
5.5.2 TSS與任務切換
5.5.3 系統地址寄存器
5.5.4 段的特權等級保護
5.6 xv6的段管理
5.6.1 實模式下的段
5.6.2 保護模式引導階段的GDT
5.6.3 內核的GDT
5.6.4 IDT
5.6.5 TSS與TR
5.7 保護模式分頁機制
5.7.1 控制寄存器
5.7.2 分頁機制
5.7.3 CR3、頁目錄項與頁表項的格式
5.7.4 虛擬地址與物理地址的轉換
5.8 xv6的地址空間
第6章 xv6的啟動
6.1 概述
6.1.1 引導扇區與啟動流程
6.1.2 啟動過程的地址空間設置
6.1.3 啟動過程的堆棧
6.2 BP的引導
6.2.1 BP從實模式進入保護模式
6.2.2 進入32位模式
6.2.3 調用bootmain()函數
6.2.4 BP加載內核映像文件
6.3 BP進入內核
6.3.1 內核入口地址
6.3.2 內核的進入
6.4 BP的初始化
6.4.1 運行主函數
6.4.2 啟動AP
6.5 AP的進入與初始化
6.5.1 AP的進入
6.5.2 AP的初始化
第7章 虛擬空間管理
7.1 虛擬地址空間佈局與映射
7.1.1 虛擬地址空間及佈局
7.1.2 內核空間映射
7.1.3 內核的幾個特殊地址
7.2 空間初始化、分配與釋放
7.2.1 空閑幀管理
7.2.2 內核頁面分配
7.2.3 內存初始化
7.2.4 空間釋放
7.3 內核虛擬空間管理
7.3.1 內核虛擬空間分配、構建與切換
7.3.2 頁面映射與頁表查找
7.4 用戶空間管理
7.4.1 初始進程的用戶空間
7.4.2 用戶空間加載
7.4.3 用戶空間復制
7.4.4 用戶空間切換
7.4.5 用戶空間分配與釋放
第8章 中斷與系統調用
8.1 xv6中斷處理
8.1.1 IDT初始化
8.1.2 xv6中斷號
8.1.3 中斷向量數組與中斷向量
8.1.4 中斷響應與中斷返回
8.1.5 中斷處理程序
8.2 系統調用
8.2.1 系統調用函數
8.2.2 系統調用函數的實現
8.2.3 系統調用分派
8.2.4 函數指針數組與系統函數
8.2.5 提取調用參數
8.2.6 系統調用示例
8.3 驅動程序
8.4 中斷與系統調用及內核堆棧
8.4.1 中斷與系統調用處理過程
8.4.2 中斷的內核堆棧
第9章 鎖
9.1 自旋鎖
9.1.1 自旋鎖的概念
9.1.2 自旋鎖的實現
9.2 睡眠鎖
9.2.1 睡眠鎖的概念
9.2.2 睡眠鎖的實現
9.3 內核的死鎖
第10章 進程管理
10.1 進程的基本概念
10.1.1 進程的概念
10.1.2 進程的狀態與生命周期
10.1.3 進程的上下文
10.1.4 處理器結構體、當前處理器與當前進程
10.2 進程的切換
10.2.1 上下文切換原理
10.2.2 切換函數的定義
10.2.3 切換函數的實現
10.2.4 切換函數的詳細解釋
10.2.5 上下文切換與陷阱幀
10.3 進程調度與進程表
10.3.1 進程的調度
10.3.2 進程表
10.4 進程的生成、退出與等待
10.4.1 進程的生成、退出與等待示例
10.4.2 創建子進程
10.4.3 進程退出與等待
10.5 進程的睡眠與喚醒
10.5.1 條件同步
10.5.2 空等問題
10.5.3 喚醒丟失問題
10.5.4 睡眠與喚醒函數的實現
10.6 進程讓出與殺死進程
10.7 系統的初始進程
10.7.1 初始進程的建立
10.7.2 切換入初始進程
第11章 文件系統
11.1 概述
11.1.1 文件系統的功能
11.1.2 文件系統的分層
11.1.3 磁盤佈局
11.2 磁盤層
11.2.1 磁盤初始化
11.2.2 磁盤中斷處理
11.2.3 磁盤讀寫
11.3 塊緩存層
11.3.1 緩沖塊結構體
11.3.2 塊緩存及其初始化
11.3.3 緩沖塊讀取
11.3.4 緩沖塊寫入與釋放
11.3.5 緩沖塊的使用
11.4 日誌層
11.4.1 事務與日誌
11.4.2 日誌
11.4.3 日誌的靜態函數
11.4.4 日誌的對外接口
11.4.5 事務的操作與實現
11.5 磁盤塊管理
11.6 i節點
11.6.1 磁盤i節點
11.6.2 i節點及其鎖
11.6.3 icache初始化與i節點更新
11.6.4 i節點的分配、獲取、復制與釋放
11.6.5 i節點的映射、截斷、狀態與讀寫
11.7 目錄層
11.7.1 目錄項
11.7.2 目錄項查找
11.7.3 目錄項鏈接
11.7.4 通過路徑查找i節點
第12章 文件描述符與系統調用
12.1 文件描述符層
12.1.1 文件結構體
12.1.2 文件表及其初始化
12.1.3 文件分配、文件指針復制與關閉
12.1.4 文件狀態與文件讀寫
12.2 系統調用層
12.2.1 文件系統調用
12.2.2 鏈接與刪除鏈接
12.2.3 文件創建
12.2.4 文件打開
12.2.5 文件讀寫
12.2.6 管道
12.2.7 載入執行
第13章 exec()函數、管道與字符串
13.1 exec()函數
13.1.1 內核函數exec()
13.1.2 系統調用函數exec()
13.2 管道
13.2.1 管道結構體
13.2.2 管道的分配、關閉與讀寫
13.2.3 管道系統調用函數
13.3 字符串
第14章 多處理器
14.1 多處理器系統架構
14.2 多處理器配置的數據結構
14.2.1 多處理器環境與內存佈局
14.2.2 mp結構體
14.2.3 MP配置表頭
14.2.4 MP配置表表項
14.3 LAPIC
14.3.1 LAPIC的結構
14.3.2 LAPIC的寄存器
14.3.3 LAPIC ID與版本
14.3.4 ICR與AP啟動
14.3.5 LAPIC計時器
14.3.6 偽中斷
14.3.7 LVT與ICR
14.3.8 EOI與TPR
14.3.9 LAPIC可接收的中斷源
14.4 I/O APIC
14.4.1 I/O APIC寄存器
14.4.2 I/O APIC寄存器訪問
14.4.3 I/O APIC初始化與中斷打開
第15章 字符設備驅動
15.1 鍵盤
15.1.1 鍵盤埠
15.1.2 掃描碼
15.1.3 中斷處理與驅動
15.2 控制台
15.2.1 控制台與文件讀寫
15.2.2 控制台輸入
15.2.3 控制台輸出
15.2.4 標準文件初始化
15.3 控制台輸出示例
15.4 串口通信
15.4.1 UART硬件
15.4.2 UART埠
15.4.3 UART初始化
15.4.4 UART輸入輸出與中斷處理
第16章 初始進程、API與Shell
16.1 初始進程
16.1.1 載入初始用戶程序
16.1.2 初始用戶程序init
16.2 API
16.2.1 API的定義和實現
16.2.2 接口函數使用示例
16.3 Shell
16.3.1 Shell概述
16.3.2 程序sh的主要功能
16.4 命令結構體及其構造與運行
16.4.1 命令
16.4.2 載入執行命令
16.4.3 重定向命令
16.4.4 管道命令
16.4.5 並列命令
16.4.6 後台命令
16.5 輸入字符串的解析
16.5.1 命令解析
16.5.2 行解析
16.5.3 管道命令解析
16.5.4 重定向命令解析
16.5.5 塊解析函數
16.5.6 載入執行命令解析
16.5.7 提取操作符
參考文獻
附錄A 縮略語與術語