Linux內核設計的藝術

Linux內核設計的藝術 pdf epub mobi txt 電子書 下載 2025

新設計團隊
圖書標籤:
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
本書導讀
前言
第1章 從開機加電到執行main函數之前的過程1
1.1 啓動BIOS,準備實模式下的中斷嚮量錶和中斷服務程序1
1.1.1 BIOS的啓動原理2
1.1.2 BIOS在內存中加載中斷嚮量錶和中斷服務程序3
1.2 加載操作係統內核程序並為保護模式做準備4
1.2.1 加載第一部分代碼—引導程序(bootsect)5
1.2.2 加載第二部分代碼—setup7
1.2.3 加載第三部分代碼—system模塊12
1.3 開始嚮32位模式轉變,為main函數的調用做準備16
1.3.1 關中斷並將system移動到內存地址起始位置0x0000016
1.3.2 設置中斷描述符錶和全局描述符錶18
1.3.3 打開A20,實現32位尋址20
1.3.4 為在保護模式下執行head.s做準備21
1.3.5 head.s開始執行24
1.4 本章小結41
第2章 從main到怠速42
2.1 開中斷之前的準備工作43
2.1.1 復製根設備號和硬盤參數錶 44
2.1.2 物理內存規劃格局45
2.1.3 虛擬盤設置與初始化46
2.1.4 內存管理結構mem_map初始化47
2.1.5 異常處理類中斷服務程序掛接48
2.1.6 初始化塊設備請求項結構50
2.1.7 與建立人機交互界麵相關的外設的中斷服務程序掛接52
2.1.8 開機啓動時間設置55
2.1.9 係統開始激活進程056
2.1.10 進程相關事務初始化設置57
2.1.11 時鍾中斷設置59
2.1.12 係統調用服務程序掛接59
2.1.13 初始化緩衝區管理結構61
2.1.14 初始化硬盤63
2.1.15 初始化軟盤65
2.1.16 開中斷66
2.2 進程創建的最基本動作67
2.2.1 操作係統為進程0創建進程1做準備67
2.2.2 在進程槽中為進程1 申請一個空閑位置並獲取進程號71
2.2.3 復製進程信息之前,先將一些數據壓棧73
2.2.4 初步設置進程1管理結構74
2.2.5 進程0創建進程1的過程中發生時鍾中斷76
2.2.6 從時鍾中斷返迴78
2.2.7 調整進程1管理結構79
2.2.8 設置進程1的綫性地址空間及物理頁麵81
2.2.9 繼續調整進程1管理結構84
2.2.10 操作係統如何區分進程0和進程187
2.2.11 進程0準備切換到進程189
2.2.12 係統切換到進程1執行90
2.3 加載根文件係統92
2.3.1 進程1如何開始執行96
2.3.2 進程1開始執行98
2.3.3 進程1開始以數據塊的形式操作硬盤99
2.3.4 將找到的緩衝塊與請求項掛接101
2.3.5 將請求項與硬盤處理函數掛接104
2.3.6 進行硬盤讀盤前的準備工作105
2.3.7 給硬盤下達讀盤指令106
2.3.8 進程1由於等待讀盤操作掛起107
2.3.9 係統切換到進程0執行109
2.3.10 進程0的執行過程110
2.3.11 進程0執行過程中發生硬盤中斷111
2.3.12 硬盤中斷服務程序響應後,進程0繼續執行113
2.3.13 再次響應硬盤中斷並喚醒進程1114
2.3.14 讀盤操作完成後,進程1繼續執行116
2.3.15 進程1繼續設置硬盤管理結構117
2.3.16 進程1獲取軟盤超級塊,為加載根文件係統做準備118
2.3.17 進程1備份超級塊數據119
2.3.18 進程1將根文件係統從軟盤拷貝到虛擬盤120
2.3.19 進程1開始加載根文件係統122
2.3.20 進程1準備加載根文件係統超級塊123
2.3.21 進程1加載根文件係統超級塊124
2.3.22 進程1繼續加載根文件係統126
2.3.23 進程1準備讀取根目錄i節點127
2.3.24 進程1加載根目錄i節點128
2.3.25 進程1結束加載根文件係統的過程129
2.4 打開終端設備文件及復製文件句柄131
2.4.1 進程1與內核文件錶掛接,為打開文件做準備133
2.4.2 確定打開操作的起點135
2.4.3 獲得枝梢i節點—dev目錄文件的i節點136
2.4.4 確定dev目錄文件i節點為枝梢i節點137
2.4.5 繼續返迴枝梢i節點138
2.4.6 查找tty0文件的i節點138
2.4.7 將tty0設備文件的i節點返迴給sys_open係統調用 139
2.4.8 分析tty0文件i節點140
2.4.9 設置文件管理結構並返迴給用戶進程141
2.4.10 進程1復製tty0文件句柄142
2.4.11 進程1繼續復製tty0文件句柄144
2.5 創建進程2145
2.5.1 進程1準備創建進程2145
2.5.2 復製進程2管理結構並進行調整146
2.5.3 設置進程2的頁目錄項並復製進程2的頁錶146
2.5.4 調整進程2管理結構中與文件有關的內容146
2.5.5 進程1執行過程中發生時鍾中斷148
2.5.6 進程1從時鍾中斷返迴,準備切換到進程2150
2.6 進程1等待進程2退齣150
2.6.1 進程1查找它自己的子進程151
2.6.2 對進程2的狀態進行處理151
2.6.3 切換到進程2執行153
2.7 shell程序的加載154
2.7.1 進程2開始執行156
2.7.2 為打開/etc/rc文件做準備156
2.7.3 進程2打開“/etc/rc”配置文件157
2.7.4 通過壓棧為加載shell文件做準備158
2.7.5 為參數和環境變量設置做準備159
2.7.6 得到shell文件的i節點160
2.7.7 為加載參數和環境變量做準備161
2.7.8 根據i節點,對shell文件進行檢測162
2.7.9 檢測shell文件頭163
2.7.10 備份文件頭並進行分析163
2.7.11 對shell文件進行進一步分析165
2.7.12 拷貝參數和環境變量166
2.7.13 調整進程2的管理結構167
2.7.14 繼續調整進程2管理結構168
2.7.15 釋放進程2繼承的頁麵169
2.7.16 檢測協處理器170
2.7.17 調整shell程序所在的綫性空間地址171
2.7.18 為shell程序準備參數和環境變量172
2.7.19 繼續調整進程2管理結構173
2.7.20 調整EIP,使其指嚮shell程序入口地址173
2.7.21 shell程序執行引發缺頁中斷175
2.7.22 缺頁中斷中shell程序加載前的檢測175
2.7.23 為即將載入的內容申請頁麵177
2.7.24 將shell程序載入新獲得的頁麵177
2.7.25 根據shell程序的情況,調整頁麵的內容178
2.7.26 將綫性地址空間與程序所在的物理頁麵對應179
2.8 係統實現怠速180
2.8.1 shell進程準備創建update進程180
2.8.2 進程2開始執行/etc/rc文件181
2.8.3 準備加載update進程181
2.8.4 update進程的作用182
2.8.5 shell程序檢測“/etc/rc”文件183
2.8.6 shell進程退齣184
2.8.7 shell進程退齣善後處理185
2.8.8 進程1清理shell進程管理結構187
2.8.9 係統開始重建shell190
2.8.10 shell進程為何不會再次退齣192
2.9 小結194
第3章 安裝文件係統195
3.1 獲取硬盤設備號196
3.1.1 用戶發齣安裝硬盤文件係統指令196
3.1.2 從分析路徑開始,準備查找hd1設備的掛接點197
3.1.3 以根目錄i節點為依托,得到dev目錄文件的i節點197
3.1.4 從dev目錄文件中找到代錶hd1設備文件的目錄項198
3.1.5 得到hd1設備文件的i節點號199
3.1.6 釋放dev目錄文件的相關內容200
3.1.7 得到hd1設備文件的i節點200
3.1.8 獲得hd1設備的設備號200
3.1.9 釋放hd1設備文件的i節點201
3.2 獲取虛擬盤上的掛接點202
3.3 得到hd1設備文件的超級塊202
3.3.1 準備讀取hd1設備文件超級塊203
3.3.2 為hd1設備文件的超級塊找到存儲位置203
3.3.3 初始化空閑超級塊並加鎖203
3.3.4 從硬盤獲得hd1設備文件的超級塊204
3.3.5 加載邏輯塊位圖和i節點位圖205
3.4 將hd1設備文件與mnt目錄文件的i節點掛接206
3.5 小結207
第4章 文件操作208
4.1 打開文件211
4.1.1 用戶程序調用open庫函數産生軟中斷212
4.1.2 建立用戶進程與文件管理錶的關係213
4.1.3 從硬盤上獲取helloc.txt文件的i節點214
4.1.4 將helloc.txt文件與文件管理錶相掛接226
4.2 讀文件227
4.2.1 為按照用戶要求讀入文件做準備228
4.2.2 確定要讀入的數據塊的位置230
4.2.3 將指定的數據塊從硬盤讀入到高速緩衝塊233
4.2.4 將數據拷貝到用戶指定的內存234
4.3 新建文件237
4.3.1 查找路徑“/mnt/user/hello.txt”238
4.3.2 為hello.txt文件新建一個i節點240
4.3.3 為hello.txt文件新建目錄項242
4.3.4 完成hello.txt新建操作並返迴給用戶進程245
4.4 寫文件246
4.4.1 文件寫入前的準備工作248
4.4.2 確定hello.txt文件的寫入位置249
4.4.3 為數據的寫入申請緩衝塊252
4.4.4 將指定的寫入數據從用戶數據區拷貝到緩衝塊253
4.4.5 數據同步到硬盤的方法1255
4.4.6 將文件寫入硬盤的情況2257
4.5 修改文件260
4.5.1 對文件的當前操作指針進行重定位261
4.5.2 對文件進行修改261
4.6 關閉文件263
4.6.1 當前進程與文件管理錶“脫鈎”264
4.6.2 將文件管理錶中hello.txt對應的引用次數減1265
4.6.3 hello.txt文件與文件管理錶“脫鈎”266
4.7 刪除文件268
4.7.1 係統準備刪除hello.txt文件268
4.7.2 刪除hello.txt文件在硬盤上對應的數據和i節點270
4.7.3 對hello.txt文件所在的user目錄做處理275
4.8 本章小結275
第5章 用戶進程與內存管理277
5.1 用戶進程的創建277
5.1.1 為創建進程str1準備條件277
5.1.2 為str1進程管理結構找到存儲空間279
5.1.3 復製str1進程管理結構281
5.1.4 確定str1進程在綫性空間中的位置282
5.1.5 復製str1進程頁錶並設置其對應的頁目錄項283
5.1.6 調整str1進程中與文件相關的結構285
5.1.7 建立str1進程與全局描述符錶GDT的關聯286
5.1.8 將str1進程設為就緒態287
5.2 為用戶進程str1的加載做準備288
5.2.1 為str1進程加載自身對應的程序做準備288
5.2.2 讀取str1可執行文件的i節點並統計參數和環境變量289
5.2.3 讀取str1可執行文件的文件頭290
5.2.4 對str1可執行程序文件頭進行分析291
5.2.5 拷貝str1可執行程序的參數和環境變量292
5.2.6 調整str1進程管理結構中可執行程序對應的i節點292
5.2.7 繼續調整str1進程管理結構—文件和信號相關的字段293
5.2.8 釋放str1進程的頁錶294
5.2.9 重新設置str1的程序代碼段和數據段295
5.2.10 創建環境變量和參數指針錶296
5.2.11 繼續根據str1可執行程序情況調整str1進程管理結構297
5.2.12 設置str1可執行程序的棧指針和eip值297
5.3 對缺頁中斷的處理298
5.3.1 産生缺頁中斷並由操作係統響應298
5.3.2 為str1程序申請一個內存頁麵299
5.3.3 將str1程序加載到新分配的頁麵中300
5.3.4 檢測是否需要對頁麵剩餘空間清0300
5.3.5 將str1程序占用的物理內存地址與str1進程的綫性地址空間對應301
5.3.6 不斷通過缺頁中斷加載str1程序的全部內容301
5.3.7 str1程序需要壓棧302
5.3.8 str1程序第一次調用foo程序壓棧302
5.3.9 str1程序第二次壓棧,産生缺頁中斷302
5.3.10 處理str1程序第二次壓棧産生的缺頁中斷302
5.3.11 str1程序繼續執行,反復壓棧並産生缺頁中斷303
5.3.12 str1程序運行結束後清棧303
5.4 str1用戶進程的退齣305
5.4.1 str1進程準備退齣305
5.4.2 釋放str1程序所占頁麵305
5.4.3 解除str1程序與文件有關的內容並給父進程發信號306
5.4.4 str1程序退齣後執行進程調度307
5.5 多個用戶進程“同時”運行308
5.5.1 依次創建str1、str2和str3進程308
5.5.2 str1進程壓棧的執行效果309
5.5.3 str1運行過程中産生時鍾中斷並切換到str2執行309
5.5.4 str2執行過程遇到時鍾中斷切換到str3執行310
5.5.5 三個程序執行一段時間後在主內存的分布格局311
5.6 進程的調度與切換311
5.6.1 str1剛被shell創建並處於就緒態311
5.6.2 shell進程將自己掛起,然後準備切換到str1執行311
5.6.3 準備切換到str1進程執行312
5.6.4 str1執行時發生時鍾中斷314
5.6.5 時鍾中斷遞減str1運行的時間片315
5.6.6 str1執行一段時間後掛起,shell進程新建str2進程315
5.6.7 str2運行期間發生時鍾中斷316
5.6.8 係統切換到str1程序執行317
5.7 內核的分頁318
5.7.1 為設置內核的頁目錄錶和頁錶做準備—所占空間清0318
5.7.2 設置內核對應的頁目錄項和頁錶項的內容319
5.7.3 設置內核對應的全局描述符錶GDT320
5.8 頁寫保護321
5.8.1 進程A和進程B共享頁麵321
5.8.2 進程A準備進行壓棧操作322
5.8.3 進程A的壓棧動作引發頁寫保護322
5.8.4 將進程A的頁錶指嚮新申請的頁麵323
5.8.5 拷貝原頁麵內容到進程A新申請的頁麵324
5.8.6 進程B準備操作共享頁麵325
5.8.7 假設進程B先執行壓棧操作的情況325
5.9 小結326
第6章 多個進程“同時”操作一個文件327
6.1 三個進程操作同一個文件327
6.1.1 進程A執行,hello.txt文件被打開328
6.1.2 進程A讀取hello.txt文件並由於等待硬盤中斷而被係統掛起328
6.1.3 進程B準備打開hello.txt文件330
6.1.4 係統準備為進程B獲取hello.txt文件的i節點332
6.1.5 係統找到hello.txt文件已經載入的i節點333
6.1.6 係統準備為進程B從硬盤上讀取hello.txt文件334
6.1.7 係統找到瞭正在操作的緩衝塊,將進程B掛起335
6.1.8 係統再次切換到進程0執行337
6.1.9 進程C啓動並打開hello.txt文件337
6.1.10 進程C也由於等待緩衝塊解鎖而被係統掛起338
6.1.11 緩衝塊解鎖後先喚醒進程C339
6.1.12 係統將進程B設為就緒狀態340
6.1.13 係統將指定數據寫入緩衝塊341
6.1.14 寫入完成後,進程C繼續執行341
6.1.15 進程C準備切換到進程B342
6.1.16 進程C切換到進程B執行,進程B喚醒進程A342
6.1.17 進程B不斷執行,直到時間片減為0後切換到進程A執行343
6.1.18 進程A、B、C退齣,寫入數據由update進程同步344
6.2 緩衝區與外設的數據同步344
6.2.1 係統不斷為進程A嚮緩衝區寫入數據346
6.2.2 繼續執行引發緩衝塊數據需要同步346
6.2.3 將緩衝區中的數據同步到硬盤上347
6.2.4 進程A由於等待空閑請求項而被係統掛起349
6.2.5 進程B開始執行350
6.2.6 進程B也被掛起351
6.2.7 進程C開始執行並隨後被掛起352
6.2.8 進程A和進程C均被喚醒352
6.2.9 進程B切換到進程A執行354
6.3 小結356
第7章 IPC問題358
7.1 管道機製358
7.1.1 為管道文件在文件管理錶中申請空閑項360
7.1.2 為管道文件與進程建立聯係創造條件360
7.1.3 創建管道文件i節點361
7.1.4 將管道文件i節點與文件管理錶建立聯係362
7.1.5 將管道文件句柄返迴給用戶進程363
7.1.6 讀管道進程開始操作管道文件363
7.1.7 寫管道進程嚮管道中寫入數據364
7.1.8 寫管道進程繼續嚮管道寫入數據366
7.1.9 寫管道進程已將管道空間寫滿366
7.1.10 寫管道進程掛起366
7.1.11 讀管道進程從管道中讀齣數據367
7.1.12 讀管道進程繼續執行,不斷從管道中讀齣數據369
7.1.13 讀管道進程執行中發生時鍾中斷369
7.1.14 讀管道進程執行過程中再次發生時鍾中斷370
7.1.15 讀管道進程切換到寫管道進程執行371
7.1.16 寫管道進程掛起切換到讀管道進程執行371
7.1.17 讀管道進程繼續執行,直到把管道中的數據讀完372
7.1.18 讀取完成後,讀進程掛起,寫進程繼續執行373
7.2 信號機製374
7.2.1 processig進程開始執行376
7.2.2 processig進程進入可中斷等待狀態377
7.2.3 sendsig進程開始執行並嚮processig進程發信號379
7.2.4 係統檢測當前進程接收到信號並準備處理381
7.2.5 係統檢測信號處理函數指針掛接是否正常382
7.2.6 調整processig進程的內核棧結構,使之先執行信號處理函數383
7.2.7 信號對進程執行狀態的影響386
7.3 小結393
第8章 操作係統的設計指導思想395
8.1 運行一個最簡單的程序,看操作係統為程序運行做瞭哪些工作395
8.2 操作係統的設計指導思想—主奴機製398
8.2.1 主奴機製中的進程及進程創建機製399
8.2.2 操作係統在內存管理中的主奴機製400
8.2.3 操作係統在文件係統中體現的主奴機製401
8.3 實現主奴機製的三種關鍵技術402
8.3.1 保護和分頁402
8.3.2 特權級405
8.3.3 中斷405
8.4 建立主奴機製的決定性因素—先機407
8.5 軟件和硬件的關係:主機與進程、外設與文件408
8.5.1 非用戶進程—進程0、進程1、shell進程408
8.5.2 文件與數據存儲409
8.6 父子進程共享頁麵414
8.7 操作係統的全局中斷與進程的局部中斷—信號414
8.8 小結415
結束語415
“新設計團隊”簡介416
附錄 搭建Linux 0.11係統環境421
· · · · · · (收起)

具體描述

關於Linux內核的書已經不計其數,但這本書卻是獨樹一幟的,它的內容代錶著Linux內核研究成果的世界頂尖級水平,它在世界範圍內首次提齣並闡述瞭操作係統設計的核心指導思想——主奴機製,這是所有操作係統研究者的一筆寶貴財富。本書可能也代錶著同類圖書的頂尖水平,是一本真正能引導我們較為容易地、極為透徹地理解Linux內核的經典之作,也可能是當前唯一能從本質上指引我們去設計和開發擁有自主知識産權的操作係統的著作。它的齣版也許會成為Linux內核研究領域的一個裏程碑事件。

本書的最大特點是它的寫作方式和內容組織方式,與同類書完全不同。它在深刻地分析瞭傳統講解方法的利弊之後,破舊立新,從認知學的角度開創瞭一種全新的方式。以操作係統的真實運行過程為主綫,結閤真實的內核源代碼、349幅精確的內核運行時序圖和具有點睛之妙的文字說明,對操作係統從開機加電到係統完全準備就緒的整個過程進行瞭係統而完整地分析,深刻地揭示瞭其間每一個動作的設計意圖和實現原理,完美地再現瞭操作係統設計者的設計思路。閱讀本書就如同跟隨著操作係統設計者一起去思考,我們會在閱讀的過程中發現Linux內核設計的精妙,會發現原來處處都“暗藏玄機”,哪怕是一行很短的代碼。

本書在所有細節上都力求完美。為瞭保證知識的準確性,操作係統運行過程中的每個動作都經過瞭嚴格的考證;為瞭讓我們真正理解Linux內核的原理,它突破傳統,以Linux的真實運行過程為主綫進行講解;為瞭做到真正易於理解,創新性地使用瞭圖解的方式,精心繪製瞭349幅分辨率600dpi的時序圖,圖中錶現的運行時結構和狀態與操作係統實際運行時的真實狀態完全吻閤;為瞭提高閱讀體驗,本書采用瞭雙色印刷,以便於我們更清楚地觀察每一幅圖中的細節。

用戶評價

評分

##我覺得吧,沒深度,可以作為入門的資料書。

評分

評分

評分

天朝特色內核思想-主奴機製...

評分

##我覺得吧,沒深度,可以作為入門的資料書。

評分

##我覺得吧,沒深度,可以作為入門的資料書。

評分

評分

##作為一本係統講解0.11內核設計的書,也算是差強人意,首先書是由很多人寫得,水平不一,有人對於內核理解還不夠深刻,還有寫錯的地方。不過作為國內對於內核講解的書,值得肯定。我個人是作為內核剖析的參考書來看的,對於理解有幫助。書裏最自以為豪的圖解部分,有些沒有什麼用,總體來說值得肯定

評分

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有