Linux 內核設計的藝術-圖解 Linux 操作系統架構設計與實現, 2/e Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(第2版) (华章原创精品)

新設計團隊

無法訂購

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

相關主題

商品描述

<內容簡介>

新設計團隊編著的《Linux內核設計的藝術(圖解Linux操作系統架構設計與實現原理第2版)》的第1版廣獲好評,版權被中國台灣和美國兩家大型出版社引進,第2版根據讀者的反饋和作者對操作系統的最新研究成果對第1版進行了大幅優化和重寫,使其內容質量更上一層樓。本書在眾多關於linux內核的書中獨樹一幟,它在世界範圍內首次提出並闡述了操作系統設計的核心指導思想——主奴機制,這是所有操作系統研究者的一筆寶貴財富。它也是一本能真正引導我們較為容易地、極為透徹地理解linux內核的經典之作,也可能是當前唯一能從本質上指引我們去設計和開發擁有自主知識產權的操作系統的著作。
    《Linux內核設計的藝術(圖解Linux操作系統架構設計與實現原理第2版)》的最大特點是它的寫作方式和內容組織方式與同類書完全不同。它在深刻地分析了傳統講解方法的利弊之後,破舊立新,從認知學的角度開創了一種全新的方式。以操作系統的真實運行過程為主線,結合真實的內核源代碼、300餘幅精確的內核運行時序圖和具有點睛之妙的文字說明,對操作系統從開機加電到系統完全準備就緒,及運行用戶程序的整個過程進行了系統而完整地分析,深刻地揭示了其間每一個動作的設計意圖和實現原理,完美地再現了操作系統設計者的設計思路。閱讀本書就如同跟隨著操作系統設計者一起去思考,我們會在閱讀的過程中發現linux內核設計的精妙,會發現原來處處都「暗藏玄機」,哪怕是一行很短的代碼。
    本書在所有細節上都力求完美。為了保證知識的準確性,操作系統運行過程中的每個動作都經過了嚴格的考證;為了讓我們真正理解linux內核的原理,它突破傳統,以linux的真實運行過程為主線進行講解;為了做到真正易於理解,創新性地使用了圖解的方式,精心繪製了300餘幅分辨率600dpi的時序圖,圖中表現的運行時結構和狀態與操作系統實際運行時的真實狀態完全吻合;為了提高閱讀體驗,本書採用了雙色印刷,以便於我們更清楚地觀察每一幅圖中的細節。

<目錄>

前言
第1章 從開機加電到執行
  main函數之前的過程1
  1.1 啟動bios,準備實模式下的中斷向量表和中斷服務程序1
  1.1.1 bios的啟動原理2
  1.1.2 bios 在內存中加載中斷向量表和中斷服務程序3
  1.2 加載操作系統內核程序併為保護模式做準備5
  1.2.1 加載第一部分內核代碼——引導程序(bootsect)5
  1.2.2 加載第二部分內核代碼——setup7
  1.2.3 加載第三部分內核代碼——system模塊13
  1.3 開始向32位模式轉變,為main函數的調用做準備17
  1.3.1 關中斷並將system移動到內存地址起始位置0x0000017
  1.3.2 設置中斷描述符表和全局描述符表19
  1.3.3 打開a20,實現32位尋址21
  1.3.4 為保護模式下執行head.s做準備23
  1.3.5 head.s開始執行26
  1.4 本章小結44
第2章 設備環境初始化及激活進程045
  2.1 設置根設備、硬盤46
  2.2 規劃物理內存格局,設置緩衝區、虛擬盤、主內存46
  2.3 設置虛擬盤空間並初始化48
  2.4 內存管理結構mem_map初始化50
  2.5 異常處理類中斷服務程序掛接51
  2.6 初始化塊設備請求項結構57
  2.7 與建立人機交互界面相關的外設的中斷服務程序掛接59
  2.7.1 對串行口進行設置59
  2.7.2 對顯示器進行設置60
  2.7.3 對鍵盤進行設置61
  2.8 開機啟動時間設置63
  2.9 初始化進程065
  2.9.1 初始化進程068
  2.9.2 設置時鐘中斷71
  2.9.3 設置系統調用總入口71
  2.10 初始化緩衝區管理結構73
  2.11 初始化硬盤75
  2.12 初始化軟盤77
  2.13 開啟中斷78
  2.14 進程0由0特權級翻轉到3特權級,成為真正的進程78
  2.15 本章小結80
第3章 進程1的創建及執行81
  3.1 進程1的創建81
  3.1.1 進程0創建進程181
  3.1.2 在task[64]中為進程1申請一個空閑位置並獲取進程號87
  3.1.3 調用copy_process函數89
  3.1.4 設置進程1的分頁管理94
  3.1.5 進程1共享進程0的文件99
  3.1.6 設置進程1在gdt中的表項99
  3.1.7 進程1處於就緒態100
  3.2 內核第一次做進程調度103
  3.3 輪轉到進程1執行107

  3.3.1 進程1為安裝硬盤文件系統做準備109
  3.3.2 進程1格式化虛擬盤並更換根設備為虛擬盤135
  3.3.3 進程1在根設備上加載根文件系統138
  3.4 本章小結151
第4章 進程2的創建及執行152
  4.1 打開終端設備文件及複製文件句柄152
  4.1.1 打開標準輸入設備文件152
  4.1.2 打開標準輸出、標準錯誤輸出設備文件166
  4.2 進程1創建進程2並切換到進程2執行169
  4.3 加載shell程序178
  4.3.1 關閉標準輸入設備文件,打開rc文件178
  4.3.2 檢測shell文件181
  4.3.3 為shell程序的執行做準備186
  4.3.4 執行shell程序192
  4.4 系統實現怠速196
  4.4.1 創建update進程196
  4.4.2 切換到shell進程執行198
  4.4.3 重建shell204
  4.5 本章小結205
第5章 文件操作206
  5.1 安裝文件系統206
  5.1.1 獲取外設的超級塊206
  5.1.2 確定根文件系統的掛接點209
  5.1.3 將超級塊與根文件系統掛接210
  5.2 打開文件211
  5.2.1 將進程的*filp[20]與file_table[64]掛接212
  5.2.2 獲取文件i節點213
  5.2.3 將文件i節點與file_table[64]掛接223
  5.3 讀文件224
  5.3.1 確定數據塊在外設中的位置224
  5.3.2 將數據塊讀入緩衝塊228
  5.3.3 將緩衝塊中的數據複製到進程空間228
  5.4 新建文件230
  5.4.1 查找文件230
  5.4.2 新建文件i節點231
  5.4.3 新建文件目錄項233
  5.5 寫文件238
  5.5.1 確定文件的寫入位置238
  5.5.2 申請緩衝塊241
  5.5.3 將指定的數據從進程空間複製到緩衝塊241
  5.5.4 數據同步到外設的兩種方法242
  5.6 修改文件245
  5.6.1 重定位文件的當前操作指針246
  5.6.2 修改文件246
  5.7 關閉文件248
  5.7.1 當前進程的filp與file_table[64]脫鉤248
  5.7.2 文件i節點被釋放249
  5.8 刪除文件250
  5.8.1 對文件的刪除條件進行檢查251
  5.8.2 進行具體的刪除工作252

  5.9 本章小結255
第6章 用戶進程與內存管理256
  6.1 線性地址的保護256
  6.1.1 進程線性地址空間的格局256
  6.1.2 段基址、段限長、gdt、ldt、特權級257
  6.2 分頁260
  6.2.1 線性地址映射到物理地址260
  6.2.2 進程執行時分頁261
  6.2.3 進程共享頁面267
  6.2.4 內核分頁270
  6.3 一個用戶進程從創建到退出的完整過程273
  6.3.1 創建str1進程273
  6.3.2 str1進程加載的準備工作285
  6.3.3 str1進程的運行、加載289
  6.3.4 str1進程的退出296
  6.4 多個用戶進程同時運行299
  6.4.1 進程調度299
  6.4.2 頁寫保護303
  6.5 本章小結309
第7章 緩衝區和多進程操作文件310
  7.1 緩衝區的作用310
  7.2 緩衝區的總體結構311
  7.3 b_dev、b_blocknr及request的作用312
  7.3.1 保證進程與緩衝塊數據交互的正確性312
  7.3.2 讓數據在緩衝區中停留的時間盡可能長320
  7.4 uptodate和dirt的作用325
  7.4.1 b_uptodate的作用326
  7.4.2 b_dirt的作用331
  7.4.3 i_uptodate、i_dirt和s_dirt的作用334
  7.5 count、 lock、wait、request的作用336
  7.5.1 b_count的作用336
  7.5.2 i_count的作用338
  7.5.3 b_lock、*b_wait的作用341
  7.5.4 i_lock、i_wait、s_lock、*s_wait的作用344
  7.5.5 補充request的作用347
  7.6 實例1:關於緩衝塊的進程等待隊列349
  7.7 總體來看緩衝塊和請求項370
  7.8 實例2:多進程操作文件的綜合實例373
  7.9 本章小結388
第8章 進程間通信389
  8.1 管道機制389
  8.1.1 管道的創建過程391
  8.1.2 管道的操作396
  8.2 信號機制410
  8.2.1 信號的使用412
  8.2.2 信號對進程執行狀態的影響422
  8.3 本章小結431
第9章 操作系統的設計指導思想432
  9.1 運行一個最簡單的程序,看操作系統為程序運行做了哪些工作432
  9.2 操作系統的設計指導思想——主奴機制434

  9.2.1 主奴機制中的進程及進程創建機制435
  9.2.2 操作系統的設計如何體現主奴機制436
  9.3 實現主奴機制的三種關鍵技術438
  9.3.1 保護和分頁438
  9.3.2 特權級440
  9.3.3 中斷441
  9.4 建立主奴機制的決定性因素——先機443
  9.5 軟件和硬件的關係444
  9.5.1 非用戶進程——進程0、進程1、shell進程444
  9.5.2 文件與數據存儲445
  9.6 父子進程共享頁面450
  9.7 操作系統的全局中斷與進程的局部中斷——信號450
  9.8 本章小結451
結束語452
「新設計團隊」簡介453