Linux 內核設計與實現(原書第3版·典藏版) Linux Kernel Development, 3/e

Robert Love

  • 出版商: 機械工業
  • 出版日期: 2024-04-01
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 348
  • 裝訂: 平裝
  • ISBN: 7111748794
  • ISBN-13: 9787111748793
  • 相關分類: Linux
  • 立即出貨 (庫存 < 4)

買這商品的人也買了...

相關主題

商品描述

本書基於Linux 2.6.34核心詳細介紹了Linux核心系統,
涵蓋了從核心核心系統的應用到核心設計與實現等各方面內容。
主要內容包括:進程管理、進程調度、時間管理和定時器、系統呼叫介面、記憶體尋址、記憶體管理和頁快取、VFS、核心同步以及調試技術等。
同時本書也涵蓋了Linux 2.6核心中頗具特色的內容,
包括CFS調度程序、搶佔式核心、區塊I/O層以及I/O調度程序等。
本書採用理論與實務結合的路線,能夠帶領讀者快速走進Linux核心世界,真正開發核心程式碼。

目錄大綱

目錄
譯者序
序 言
前 言
第3版致謝
作者簡
第1章 Linux核心簡介1
1.1 UNIX的歷史1
1.2 追尋Linus足跡:Linux簡介2
1.3 作業系統與核心簡介3
1.4 Linux核心與傳統UNIX核心的比較5
1.5 Linux核心版本7
1.6 Linux核心開發者社群8
1.7 小結8
第2章 從核心出發10
2.1 取得核心原始碼10
2.1.1 使用Git10
2.1.2 安裝核心原始碼10
2.1.3 使用補丁11
2.2 核心源碼樹11
2.3 編譯內核12
2.3.1 配置內核12
2.3.2 減少編譯的垃圾訊息14
2.3.3 衍生多個編譯作業 14
2.3.4 安裝新核心14
2.4 內核開發的特點15
2.4.1 無libc庫抑或無標準頭檔15
2.4.2 GNU C16
2.4.3 沒有記憶體保護機制18
2.4.4 不要輕易在核心中使用浮點數18
2.4.5 容積小而固定的棧18
2.4.6 同步和並發18
2.4.7 可移植性的重要性19
2.5 小結19
第3章 進程管理20
3.1 進程20
3.2 進程描述符及任務結構 21
3.2.1 分配進程描述符22
3.2.2 進程描述符的存放23
3.2.3 進程狀態23
3.2.4 設定目前進程狀態25
3.2.5 進程上下文25
3.2.6 進程家族樹25
3.3 進程創建26
3.3.1 寫時拷貝27
3.3.2 fork()27
3.3.3 vfork()28
3.4 線程在Linux中的實作28
3.4.1 創建線程29
3.4.2 核心執行緒30
3.5 進程終結31
3.5.1 刪除進程描述符32
3.5.2 孤兒進程造成的進退維谷32
3.6 小結34
第4章 進程調度35
4.1 多任務35
4.2 Linux 的進程調度36
4.3 策略36
4.3.1 I/O消耗型和處理器消耗型的進程36
4.3.2 進程優先權37
4.3.3 時間片38
4.3.4 調度策略的活動38
4.4 Linux調度演算法39
4.4.1 調度器類別39
4.4.2 UNIX 系統中的進程調度40
4.4.3 公平調度41
4.5 Linux調度的實現42
4.5.1 時間記帳42
4.5.2 進程選擇44
4.5.3 調度器入口48
4.5.4 睡眠與喚醒49
4.6 搶佔和上下文切換51
4.6.1 用戶搶佔53
4.6.2 核心搶佔53
4.7 即時調度策略54
4.8 與調度相關的系統呼叫54
4.8.1 與調度策略和優先權相關的系統呼叫55
4.8.2 與處理器綁定有關的系統呼叫55
4.8.3 放棄處理器時間56
4.9 小結56
第5章 系統呼叫57
5.1 與核心通訊57
5.2 API、POSIX和C庫57
5.3 系統呼叫58
5.3.1 系統呼叫號碼59
5.3.2 系統呼叫的效能59
5.4 系統呼叫處理程序60
5.4.1 指定適當的系統呼叫60
5.4.2 參數傳遞60
5.5 系統呼叫的實作61
5.5.1 實作系統呼叫61
5.5.2 參數驗證62
5.6 系統呼叫上下文64
5.6.1 綁定一個系統呼叫的最後步驟65
5.6.2 從用戶空間存取系統呼叫67
5.6.3 為什麼不透過系統呼叫的方式實現68
5.7 小結68
第6章 內核資料結構69
6.1 鍊錶69
6.1.1 單向鍊錶與雙向鍊錶69
6.1.2 環形鍊錶70
6.1.3 沿鍊錶移動71
6.1.4 Linux 核心中的實作71
6.1.5 操作鍊錶73
6.1.6 遍歷鍊錶75
6.2 隊列78
6.2.1 kfifo79
6.2.2 創建隊列79
6.2.3 推入隊列資料79
6.2.4 摘取隊列資料80
6.2.5 取得佇列長度80
6.2.6 重置和撤銷佇列80
6.2.7 隊列使用舉例 81
6.3 映射 81
6.3.1 初始化一個idr82
6.3.2 分配一個新的UID82
6.3.3 查找UID83
6.3.4 刪除UID84
6.3.5 撤銷idr84
6.4 二元樹84
6.4.1 二元搜尋樹84
6.4.2 自平衡二元搜尋樹 85
6.5 資料結構以及選擇 87
6.6 演算法複雜度88
6.6.1 演算法88
6.6.2 大o 符號88
6.6.3 大θ符號89
6.6.4 時間複雜度89
6.7 小結 90
第7章 中斷與中斷處理91
7.1 中斷91
7.2 中斷處理程序92
7.3 上半部與下半部的對比93
7.4 註冊中斷處理程序93
7.4.1 中斷處理程序標誌94
7.4.2 一個中斷範例95
7.4.3 釋放中斷處理程序95
7.5 編寫中斷處理程序96
7.5.1 共享的中斷處理程序97
7.5.2 中斷處理程序實例97
7.6 中斷上下文99
7.7 中斷處理機制的實作100
7.8 /proc/interrupts102
7.9 中斷控制103
7.9.1 禁止和激活中斷103
7.9.2 禁止指定中斷線105
7.9.3 中斷系統的狀態105
7.10 小結106
第8章 下半部和推後執行的工作107
8.1 下半部107
8.1.1 為什麼要用下半部108
8.1.2 下半部的環境108
8.2 軟中斷110
8.2.1 軟中斷的實作111
8.2.2 使用軟中斷113
8.3 tas