導航:首頁 > 編程系統 > linuxkfifoapi

linuxkfifoapi

發布時間:2024-04-02 13:46:17

① Linux內核設計與實現的目錄

譯者序
序言
前言
作者簡介
第1章Linux內核簡介1
1.1Unix的歷史1
1.2追尋Linus足跡:Linux簡介2
1.3操作系統和內核簡介3
1.4Linux內核和傳統Unix內核的比較5
1.5Linux內核版本7
1.6Linux內核開發者社區8
1.7小結8
第2章從內核出發10
2.1獲取內核源碼10
2.1.1使用Git10
2.1.1安裝內核源代碼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.2GNU 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.2fork()27
3.3.3vfork()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.2Linux 的進程調度36
4.3策略36
4.3.1I/O消耗型和處理器消耗型的進程36
4.3.2進程優先順序37
4.3.3時間片38
4.3.4調度策略的活動38
4.4Linux調度演算法39
4.4.1調度器類39
4.4.2Unix 系統中的進程調度40
4.4.3公平調度41
4.5Linux調度的實現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.2API、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.4Linux 內核中的實現71
6.1.5操作鏈表73
6.1.6遍歷鏈表75
6.2隊列78
6.2.1kfifo79
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.3tasklet114
8.3.1tasklet的實現114
8.3.2使用tasklet116
8.3.3老的BH機制119
8.4工作隊列120
8.4.1工作隊列的實現121
8.4.2使用工作隊列124
8.4.3老的任務隊列機制126
8.5下半部機制的選擇127
8.6在下半部之間加鎖128
8.7禁止下半部128
8.8小結129
第9章內核同步介紹131
9.1臨界區和競爭條件131
9.1.1為什麼我們需要保護132
9.1.2單個變數133
9.2加鎖134
9.2.1造成並發執行的原因135
9.2.2了解要保護些什麼136
9.3死鎖137
9.4爭用和擴展性138
9.5小結140
第10章內核同步方法141
10.1原子操作141
10.1.1原子整數操作142
10.1.264位原子操作144
10.1.3原子位操作145
10.2自旋鎖147
10.2.1自旋鎖方法148
10.2.2其他針對自旋鎖的操作149
10.2.3自旋鎖和下半部150
10.3讀-寫自旋鎖150
10.4信號量152
10.4.1計數信號量和二值信號量153
10.4.2創建和初始化信號量154
10.4.3使用信號量154
10.5讀-寫信號量155
10.6互斥體156
10.6.1信號量和互斥體158
10.6.2自旋鎖和互斥體158
10.7完成變數158
10.8BLK:大內核鎖159
10.9順序鎖160
10.10禁止搶佔161
10.11順序和屏障162
10.12小結165
第11章定時器和時間管理166
11.1內核中的時間概念166
11.2節拍率:HZ167
11.2.1理想的HZ值168
11.2.2高HZ的優勢169
11.2.3高HZ的劣勢169
11.3jiffies170
11.3.1jiffies的內部表示171
11.3.2jiffies 的回繞172
11.3.3用戶空間和HZ173
11.4硬時鍾和定時器174
11.4.1實時時鍾174
11.4.2系統定時器174
11.5時鍾中斷處理程序174
11.6實際時間176
11.7定時器178
11.7.1使用定時器178
11.7.2定時器競爭條件180
11.7.3實現定時器180
11.8延遲執行181
11.8.1忙等待181
11.8.2短延遲182
11.8.3schele_timeout()183
11.9小結185
第12章內存管理186
12.1頁186
12.2區187
12.3獲得頁189
12.3.1獲得填充為0的頁190
12.3.2釋放頁191
12.4kmalloc()191
12.4.1gfp_mask標志192
12.4.2kfree()195
12.5vmalloc()196
12.6slab層197
12.6.1slab層的設計198
12.6.2slab分配器的介面200
12.7在棧上的靜態分配203
12.7.1單頁內核棧203
12.7.2在棧上光明正大地工作203
12.8高端內存的映射204
12.8.1永久映射204
12.8.2臨時映射204
12.9每個CPU的分配20512.10新的每個CPU介面206
12.10.1編譯時的每個CPU數據206
12.10.2運行時的每個CPU數據207
12.11使用每個CPU數據的原因208
12.12分配函數的選擇209
12.13小結209
第13章虛擬文件系統210
13.1通用文件系統介面210
13.2文件系統抽象層211
13.3Unix文件系統212
13.4VFS 對象及其數據結構213
13.5超級塊對象214
13.6超級塊操作215
13.7索引節點對象217
13.8索引節點操作219
13.9目錄項對象222
13.9.1目錄項狀態222
13.9.2目錄項緩存223
13.10目錄項操作224
13.11文件對象225
13.12文件操作226
13.13和文件系統相關的數據結構230
13.14和進程相關的數據結構232
13.15小結233
第14章塊I/O層234
14.1剖析一個塊設備234
14.2緩沖區和緩沖區頭235
14.3bio結構體237
14.3.1I/O向量238
14.3.2新老方法對比239
14.4請求隊列240
14.5I/O調度程序240
14.5.1I/O調度程序的工作241
14.5.2Linus 電梯241
14.5.3最終期限I/O調度程序242
14.5.4預測I/O調度程序244
14.5.5完全公正的排隊I/O調度程序244
14.5.6空操作的I/O調度程序245
14.5.7I/O調度程序的選擇245
14.6小結246
第15章進程地址空間247
15.1地址空間247
15.2內存描述符248
15.2.1分配內存描述符249
15.2.2撤銷內存描述符250
15.2.3mm_struct 與內核線程250
15.3虛擬內存區域251
15.3.1VMA標志251
15.3.2VMA 操作253
15.3.3內存區域的樹型結構和內存區域的鏈表結構254
15.3.4實際使用中的內存區域254
15.4操作內存區域255
15.4.1find_vma()256
15.4.2find_vma_prev()257
15.4.3find_vma_intersection()257
15.5mmap()和do_mmap():創建地址區間258
15.6mummap()和do_mummap():刪除地址區間259
15.7頁表260
15.8小結261
第16章頁高速緩存和頁回寫262
16.1緩存手段262
16.1.1寫緩存262
16.1.2緩存回收263
16.2Linux 頁高速緩存264
16.2.1address_space對象264
16.2.2address_space 操作266
16.2.3基樹267
16.2.4以前的頁散列表268
16.3緩沖區高速緩存268
16.4flusher線程268
16.4.1膝上型計算機模式270
16.4.2歷史上的bdflush、kupdated 和pdflush270
16.4.3避免擁塞的方法:使用多線程271
16.5小結271
第17章設備與模塊273
17.1設備類型273
17.2模塊274
17.2.1Hello,World274
17.2.2構建模塊275
17.2.3安裝模塊277
17.2.4產生模塊依賴性277
17.2.5載入模塊278
17.2.6管理配置選項279
17.2.7模塊參數280
17.2.8導出符號表282
17.3設備模型283
17.3.1kobject283
17.3.2ktype284
17.3.3kset285
17.3.4kobject、ktype和kset的相互關系285
17.3.5管理和操作kobject286
17.3.6引用計數287
17.4sysfs288
17.4.1sysfs中添加和刪除kobject 290
17.4.2向sysfs中添加文件291
17.4.3內核事件層293
17.5小結294
第18章調試295
18.1准備開始295
18.2內核中的bug296
18.3通過列印來調試296
18.3.1健壯性296
18.3.2日誌等級297
18.3.3記錄緩沖區298
18.3.4syslogd和klogd298
18.3.5從printf()到printk()的轉換298
18.4oops298
18.4.1ksymoops300
18.4.2kallsyms300
18.5內核調試配置選項301
18.6引發bug並列印信息301
18.7神奇的系統請求鍵302
18.8內核調試器的傳奇303
18.8.1gdb303
18.8.2kgdb304
18.9探測系統304
18.9.1用UID作為選擇條件304
18.9.2使用條件變數305
18.9.3使用統計量305
18.9.4重復頻率限制305
18.10用二分查找法找出引發罪惡的變更306
18.11使用Git進行二分搜索307
18.12當所有的努力都失敗時:社區308
18.13小結308
第19章可移植性309
19.1可移植操作系統309
19.2Linux移植史310
19.3字長和數據類型311
19.3.1不透明類型313
19.3.2指定數據類型314
19.3.3長度明確的類型314
19.3.4char型的符號問題315
19.4數據對齊315
19.4.1避免對齊引發的問題316
19.4.2非標准類型的對齊316
19.4.3結構體填補316
19.5位元組順序318
19.6時間319
19.7頁長度320
19.8處理器排序320
19.9SMP、內核搶占、高端內存321
19.10小結321
第20章補丁、開發和社區322
20.1社區322
20.2Linux編碼風格322
20.2.1縮進323
20.2.2switch 語句323
20.2.3空格324
20.2.4花括弧325
20.2.5每行代碼的長度326
20.2.6命名規范326
20.2.7函數326
20.2.8注釋326
20.2.9typedef327
20.2.10多用現成的東西328
20.2.11在源碼中減少使用ifdef328
20.2.12結構初始化328
20.2.13代碼的事後修正329
20.3管理系統329
20.4提交錯誤報告329
20.5補丁330
20.5.1創建補丁330
20.5.2用Git創建補丁331
20.5.3提交補丁331
20.6小結332
參考資料333

閱讀全文

與linuxkfifoapi相關的資料

熱點內容
力控轉發數據客戶端模式如何建立 瀏覽:200
怎麼樣讓自己的網站不被別人看到 瀏覽:711
編程擴展效果如何 瀏覽:335
榮耀暢玩手環同步qq 瀏覽:475
怎麼向sql中添加資料庫 瀏覽:596
錄歌失敗重啟app什麼意思 瀏覽:522
壓縮文件包怎麼在微信發送 瀏覽:432
mysql資料庫怎麼插入時間值 瀏覽:191
微信視頻不能轉發朋友圈 瀏覽:596
影視後期的app有哪些 瀏覽:956
電子保單數據出錯什麼意思 瀏覽:368
如何以文件下載音樂 瀏覽:438
計算機網路章節練習 瀏覽:999
單片機的外部中斷程序 瀏覽:48
表格批量更名找不到指定文件 瀏覽:869
js的elseif 瀏覽:584
3dmaxvray視頻教程 瀏覽:905
imgtool工具中文版 瀏覽:539
java幫助文件在哪裡 瀏覽:965
win10切換輸入語言 瀏覽:696

友情鏈接