幫助中心 | 我的帳號 | 關於我們

Linux內核設計與實現(原書第3版典藏版)

  • 作者:(美)羅伯特·洛夫|責編:姚蕾|譯者:陳莉君//康華
  • 出版社:機械工業
  • ISBN:9787111748793
  • 出版日期:2024/04/01
  • 裝幀:平裝
  • 頁數:332
人民幣:RMB 89 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書詳細描述了Linux內核的設計與實現。內核代碼的編寫者、開發者以及程序開發人員都可以通過閱讀本書受益,他們可以更好理解操作系統原理,並將其應用在自己的編碼中以提高效率和生產率。
    本書詳細描述了Linux內核的主要子系統和特點,包括Linux內核的設計、實現和介面。從理論到實踐涵蓋了Linux內核的方方面面,可以滿足讀者的各種興趣和需求。
    作者是一位Linux內核核心開發人員,他分享了在開發Linux 2.6內核過程中頗具價值的知識和經驗。本書的主題包括進程管理、進程調度、時間管理和定時器、系統調用介面、內存定址、內存管理和頁緩存、VFS、內核同步、移植性相關的問題以及調試技術。同時本書也涵蓋了Linux 2.6內核中頗具特色的內容,包括CFS調度程序、搶佔式內核、塊I/O層以及/O調度程序。
    本書新增內容包括:
    增加一章專門描述內核數據結構。
    詳細描述中斷處理程序和下半部機制。
    擴充虛擬內存和內存分配的內容。
    調試Linux內核的技巧。
    內核同步和鎖機制的深度描述。
    提交內核補丁以及參與Linux內核社區的建設性建議。

作者介紹
(美)羅伯特·洛夫|責編:姚蕾|譯者:陳莉君//康華

目錄
譯者序
序言
前言
第3版致謝
作者簡介
第1章  Linux內核簡介
  1.1  UNIX的歷史
  1.2  追尋Linus足跡:Linux簡介
  1.3  操作系統和內核簡介
  1.4  Linux內核和傳統UNIX內核的
比較
  1.5  Linux內核版本
  1.6  Linux內核開發者社區
  1.7  小結
第2章  從內核出發
  2.1  獲取內核源碼
    2.1.1  使用Git
    2.1.2  安裝內核源代碼
    2.1.3  使用補丁
  2.2  內核源碼樹
  2.3  編譯內核
    2.3.1  配置內核
    2.3.2  減少編譯的垃圾信息
    2.3.3  衍生多個編譯作業
    2.3.4  安裝新內核
  2.4  內核開發的特點
    2.4.1  無libc庫抑或無標準頭文件
    2.4.2  GNU C
    2.4.3  沒有內存保護機制
    2.4.4  不要輕易在內核中使用浮點數
    2.4.5  容積小而固定的棧
    2.4.6  同步和併發
    2.4.7  可移植性的重要性
  2.5  小結
第3章  進程管理
  3.1  進程
  3.2  進程描述符及任務結構
    3.2.1  分配進程描述符
    3.2.2  進程描述符的存放
    3.2.3  進程狀態
    3.2.4  設置當前進程狀態
    3.2.5  進程上下文
    3.2.6  進程家族樹
  3.3  進程創建
    3.3.1  寫時拷貝
    3.3.2  fork()
    3.3.3  vfork()
  3.4  線程在Linux中的實現
    3.4.1  創建線程
    3.4.2  內核線程

  3.5  進程終結
    3.5.1  刪除進程描述符
    3.5.2  孤兒進程造成的進退維谷
  3.6  小結
第4章  進程調度
  4.1  多任務
  4.2  Linux 的進程調度
  4.3  策略
    4.3.1  I/O消耗型和處理器消耗型的
進程
    4.3.2  進程優先順序
    4.3.3  時間片
    4.3.4  調度策略的活動
  4.4  Linux調度演算法
    4.4.1  調度器類
    4.4.2  UNIX 系統中的進程調度
    4.4.3  公平調度
  4.5  Linux調度的實現
    4.5.1  時間記賬
    4.5.2  進程選擇
    4.5.3  調度器入口
    4.5.4  睡眠和喚醒
  4.6  搶佔和上下文切換
    4.6.1  用戶搶佔
    4.6.2  內核搶佔
  4.7  實時調度策略
  4.8  與調度相關的系統調用
    4.8.1  與調度策略和優先順序相關的
系統調用
    4.8.2  與處理器綁定有關的系統調用
    4.8.3  放棄處理器時間
  4.9  小結
第5章  系統調用
  5.1  與內核通信
  5.2  API、POSIX和C庫
  5.3  系統調用
    5.3.1  系統調用號
    5.3.2  系統調用的性能
  5.4  系統調用處理程序
    5.4.1  指定恰當的系統調用
    5.4.2  參數傳遞
  5.5  系統調用的實現
    5.5.1  實現系統調用
    5.5.2  參數驗證
  5.6  系統調用上下文
    5.6.1  綁定一個系統調用的最後步驟
    5.6.2  從用戶空間訪問系統調用
    5.6.3  為什麼不通過系統調用的
方式實現
  5.7  小結

第6章  內核數據結構
  6.1  鏈表
    6.1.1  單向鏈表和雙向鏈表
    6.1.2  環形鏈表
    6.1.3  沿鏈表移動
    6.1.4  Linux 內核中的實現
    6.1.5  操作鏈表
    6.1.6  遍歷鏈表
  6.2  隊列
    6.2.1  kfifo
    6.2.2  創建隊列
    6.2.3  推入隊列數據
    6.2.4  摘取隊列數據
    6.2.5  獲取隊列長度
    6.2.6  重置和撤銷隊列
    6.2.7  隊列使用舉例
  6.3  映射
    6.3.1  初始化一個idr
    6.3.2  分配一個新的UID
    6.3.3  查找UID
    6.3.4  刪除UID
    6.3.5  撤銷idr
  6.4  二叉樹
    6.4.1  二叉搜索樹
    6.4.2  自平衡二叉搜索樹
  6.5  數據結構以及選擇
  6.6  演算法複雜度
    6.6.1  演算法
    6.6.2  大o 符號
    6.6.3  大θ符號
    6.6.4  時間複雜度
  6.7  小結
第7章  中斷和中斷處理
  7.1  中斷
  7.2  中斷處理程序
  7.3  上半部與下半部的對比
  7.4  註冊中斷處理程序
    7.4.1  中斷處理程序標誌
    7.4.2  一個中斷例子
    7.4.3  釋放中斷處理程序
  7.5  編寫中斷處理程序
    7.5.1  共享的中斷處理程序
    7.5.2  中斷處理程序實例
  7.6  中斷上下文
  7.7  中斷處理機制的實現
  7.8  /proc/interrupts
  7.9  中斷控制
    7.9.1  禁止和激活中斷
    7.9.2  禁止指定中斷線
    7.9.3  中斷系統的狀態

  7.10  小結
第8章  下半部和推后執行的
工作
  8.1  下半部
    8.1.1  為什麼要用下半部
    8.1.2  下半部的環境
  8.2  軟中斷
    8.2.1  軟中斷的實現
    8.2.2  使用軟中斷
  8.3  tas
    8.3.1  tasklet的實現
    8.3.2  使用tasklet
    8.3.3  老的BH機制
  8.4  工作隊列
    8.4.1  工作隊列的實現
    8.4.2  使用工作隊列
    8.4.3  老的任務隊列機制
  8.5  下半部機制的選擇
  8.6  在下半部之間加鎖
  8.7  禁止下半部
  8.8  小結
第9章  內核同步介紹
  9.1  臨界區和競爭條件
    9.1.1  為什麼我們需要保護
    9.1.2  單個變數
  9.2  加鎖
    9.2.1  造成併發執行的原因
    9.2.2  了解要保護些什麼
  9.3  死鎖
  9.4  爭用和擴展性
  9.5  小結
第10章  內核同步方法
  10.1  原子操作
    10.1.1  原子整數操作
    10.1.2  64位原子操作
    10.1.3  原子位操作
  10.2  自旋鎖
    10.2.1  自旋鎖方法
    10.2.2  其他針對自旋鎖的操作
    10.2.3  自旋鎖和下半部
  10.3  讀-寫自旋鎖
  10.4  信號量
    10.4.1  計數信號量和二值信號量
    10.4.2  創建和初始化信號量
    10.4.3  使用信號量
  10.5  讀-寫信號量
  10.6  互斥體
    10.6.1  信號量和互斥體
    10.6.2  自旋鎖和互斥體
  10.7  完成變數

  10.8  BLK:大內核鎖
  10.9  順序鎖
  10.10  禁止搶佔
  10.11  順序和屏障
  10.12  小結
第11章  定時器和時間管理
  11.1  內核中的時間概念
  11.2  節拍率:Hz
    11.2.1  理想的Hz值
    11.2.2  高Hz的優勢
    11.2.3  高Hz的劣勢
  11.3  jiffies
    11.3.1  jiffies的內部表示
    11.3.2  jiffies 的迴繞
    11.3.3  用戶空間和Hz
  11.4  硬時鐘和定時器
    11.4.1  實時時鐘
    11.4.2  系統定時器
  11.5  時鐘中斷處理程序
  11.6  實際時間
  11.7  定時器
    11.7.1  使用定時器
    11.7.2  定時器競爭條件
    11.7.3  實現定時器
  11.8  延遲執行
    11.8.1  忙等待
    11.8.2  短延遲
    11.8.3  schedule_timeout()
  11.9  小結
第12章  內存管理
  12.1  頁
  12.2  區
  12.3  獲得頁
    12.3.1  獲得填充為0的頁
    12.3.2  釋放頁
  12.4  kmalloc()
    12.4.1  gfp_mask標誌
    12.4.2  kfree()
  12.5  vmalloc()
  12.6  slab層
    12.6.1  slab層的設計
    12.6.2  slab分配器的介面
  12.7  在棧上的靜態分配
    12.7.1  單頁內核棧
    12.7.2  在棧上光明正大地工作
  12.8  高端內存的映射
    12.8.1  永久映射
    12.8.2  臨時映射
  12.9  每個CPU的分配
  12.10  新的每個CPU介面

    12.10.1  編譯時的每個CPU數據
    12.10.2  運行時的每個CPU數據
  12.11  使用每個CPU數據的原因
  12.12  分配函數的選擇
  12.13  小結
第13章  虛擬文件系統
  13.1  通用文件系統介面
  13.2  文件系統抽象層
  13.3  UNIX文件系統
  13.4  VFS 對象及其數據結構
  13.5  超級塊對象
  13.6  超級塊操作
  13.7  索引節點對象
  13.8  索引節點操作
  13.9  目錄項對象
    13.9.1  目錄項狀態
    13.9.2  目錄項緩存
  13.10  目錄項操作
  13.11  文件對象
  13.12  文件操作
  13.13  和文件系統相關的數據結構
  13.14  和進程相關的數據結構
  13.15  小結
第14章  塊I/O層
  14.1  剖析一個塊設備
  14.2  緩衝區和緩衝區頭
  14.3  bio結構體
    14.3.1  I/O向量
    14.3.2  新老方法對比
  14.4  請求隊列
  14.5  I/O調度程序
    14.5.1  I/O調度程序的工作
    14.5.2  Linus 電梯
    14.5.3  最終期限I/O調度程序
    14.5.4  預測I/O調度程序
    14.5.5  完全公正的排隊I/O調度
程序
    14.5.6  空操作的I/O調度程序
    14.5.7  I/O調度程序的選擇
  14.6  小結
第15章  進程地址空間
  15.1  地址空間
  15.2  內存描述符
    15.2.1  分配內存描述符
    15.2.2  撤銷內存描述符
    15.2.3  mm_struct 與內核線程
  15.3  虛擬內存區域
    15.3.1  VMA標誌
    15.3.2  VMA 操作
    15.3.3  內存區域的樹型結構和內存

區域的鏈表結構
    15.3.4  實際使用中的內存區域
  15.4  操作內存區域
    15.4.1  find_vma()
    15.4.2  find_vma_prev()
    15.4.3  find_vma_intersection()
  15.5  mmap()和do_mmap():創建地址
區間
  15.6  munmap()和do_munmap():刪除
地址區間
  15.7  頁表
  15.8  小結
第16章  頁高速緩存和頁回寫
  16.1  緩存手段
    16.1.1  寫緩存
    16.1.2  緩存回收
  16.2  Linux 頁高速緩存
    16.2.1  address_space對象
    16.2.2  address_space 操作
    16.2.3  基樹
    16.2.4  以前的頁散列表
  16.3  緩衝區高速緩存
  16.4  flusher線程
    16.4.1  膝上型電腦模式
    16.4.2  歷史上的bdflush、kupdated和pdflush
    16.4.3  避免擁塞的方法:使用多線程
  16.5  小結
第17章  設備與模塊
  17.1  設備類型
  17.2  模塊
    17.2.1  Hello,World
    17.2.2  構建模塊
    17.2.3  安裝模塊
    17.2.4  產生模塊依賴性
    17.2.5  載入模塊
    17.2.6  管理配置選項
    17.2.7  模塊參數
    17.2.8  導出符號表
  17.3  設備模型
    17.3.1  kobject
    17.3.2  ktype
    17.3.3  kset
    17.3.4  kobject、ktype和kset的相互關係
    17.3.5  管理和操作kobject
    17.3.6  引用計數
  17.4  sysfs
    17.4.1  sysfs中添加和刪除kobject
    17.4.2  向sysfs中添加文件
    17.4.3  內核事件層
  17.5  小結

第18章  調試
  18.1  準備開始
  18.2  內核中的bug
  18.3  通過列印來調試
    18.3.1  健壯性
    18.3.2  日誌等級
    18.3.3  記錄緩衝區
    18.3.4  syslogd和klogd
    18.3.5  從printf()到printk()的轉換
  18.4  oops
    18.4.1  ksymoops
    18.4.2  kallsyms
  18.5  內核調試配置選項
  18.6  引發bug並列印信息
  18.7  神奇的系統請求鍵
  18.8  內核調試器的傳奇
    18.8.1  gdb
    18.8.2  kgdb
  18.9  探測系統
    18.9.1  用UID作為選擇條件
    18.9.2  使用條件變數
    18.9.3  使用統計量
    18.9.4  重複頻率限制
  18.10  用二分查找法找出引發罪惡的變更
  18.11  使用Git進行二分搜索
  18.12  當所有的努力都失敗時:社區
  18.13  小結
第19章  可移植性
  19.1  可移植操作系統
  19.2  Linux移植史
  19.3  字長和數據類型
    19.3.1  不透明類型
    19.3.2  指定數據類型
    19.3.3  長度明確的數據類型
    19.3.4  char型的符號問題
  19.4  數據對齊
    19.4.1  避免對齊引發的問題
    19.4.2  非標準類型的對齊
    19.4.3  結構體填補
  19.5  位元組順序
  19.6  時間
  19.7  頁長度
  19.8  處理器排序
  19.9  SMP、內核搶佔、高端內存
  19.10  小結
第20章  補丁、開發和社區
  20.1  社區
  20.2  Linux編碼風格
    20.2.1  縮進
    20.2.2  switch 語句

    20.2.3  空格
    20.2.4  花括弧
    20.2.5  每行代碼的長度
    20.2.6  命名規範
    20.2.7  函數
    20.2.8  註釋
    20.2.9  typedef
    20.2.10  多用現成的東西
    20.2.11  在源碼中減少使用ifdef
    20.2.12  結構初始化
    20.2.13  代碼的事後修正
  20.3  管理系統
  20.4  提交錯誤報告
  20.5  補丁
    20.5.1  創建補丁
    20.5.2  用Git創建補丁
    20.5.3  提交補丁
  20.6  小結

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032