Linux内核设计的艺术
Linux內核設計的藝術這本書是我認為對Linux內核描述非常優秀的書籍。書籍中描述了內核啟動的流程,內核運行的機理,內存管理,進程管理等等。
#書籍目錄
第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
#獲取書籍pdf
微信公眾號回復 「 Linux內核設計的藝術 」。
留言分享一段自己的校招經歷,我選 3 位讀者贈送實體書籍。截止明天晚上 20:00。
想拿實體書籍的,請用心評論~
? 回復「?籃球的大肚子」進入技術群聊
回復「1024」獲取1000G學習資料
總結
以上是生活随笔為你收集整理的Linux内核设计的艺术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 波士顿房价数据集——随机森林
- 下一篇: [Linux源码分析]内存管理