程序員進階之路:緩存、網絡、內存與案例

鄧中華

  • 出版商: 電子工業
  • 出版日期: 2024-05-01
  • 售價: $828
  • 貴賓價: 9.5$787
  • 語言: 簡體中文
  • 頁數: 328
  • ISBN: 7121476436
  • ISBN-13: 9787121476433
  • 立即出貨

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

商品描述

本書主要講解電腦系統中核心的技術知識,涵蓋緩存、內存屏障、無鎖編程、網絡基礎、TCP/UDP、埠復用、網絡收發包流程、物理內存、虛擬內存等內容。本書還分享了實際工作中可能出現的技術難題及解決方案供讀者借鑒。為了使讀者輕松、快速地理解書中晦澀難懂的技術知識,本書作者精心繪制了大量的流程圖、結構圖。為了使讀者更好地理解Linux內核源碼,本書還提供了大量經過註釋的Linux內核源碼供讀者下載。通過閱讀本書,讀者可以輕松、快速地掌握這些技術知識,並通過源碼和書中配圖加強對相關知識的理解。

目錄大綱


第1章 緩存 1
1.1 存儲體系結構 1
1.2 緩存一致性協議 4
1.2.1 MESI協議 4
1.2.2 MOESI協議 8
1.2.3 MESIF協議 9
1.3 寫緩存區和無效隊列 9
1.3.1 寫緩沖區的作用 11
1.3.2 無效隊列的作用 11
1.4 內存屏障 11
1.4.1 讀寫屏障 12
1.4.2 單向屏障 12
1.5 x86-TSO 13
1.6 CPU黑盒測試 15
1.6.1 測試核心內是否存在Store Buffer 15
1.6.2 測試轉發(Store Forwarding)是否生效 17
1.6.3 測試StoreStore是否亂序執行 18
1.6.4 測試LoadLoad是否亂序執行 19
1.6.5 測試LoadStore是否亂序執行 19
1.6.6 測試StoreLoad是否亂序執行 20
1.7 CAS原理 20
1.8 原子操作 22
1.8.1 互斥鎖 23
1.8.2 自旋鎖 23
1.8.3 C++原子變量 25
1.8.4 C++內存順序 26
1.9 無鎖隊列 31
1.9.1 設計思路 31
1.9.2 實現細節 32
第2章 網絡 36
2.1 網絡分層 36
2.2 網絡接口層(以太網) 37
2.3 網絡層(IP、ICMP) 39
2.3.1 IP 39
2.3.2 ICMP 43
2.4 套接字編程 47
2.4.1 套接字 47
2.4.2 函數 47
2.4.3 多路復用 49
2.5 虛擬網卡 54
2.5.1 Tun設備 54
2.5.2 創建代碼 55
2.6 網絡抓包 56
2.6.1 tcpdump 56
2.6.2 Wireshark 59
2.7 網絡工具 61
2.7.1 ethtool工具 61
2.7.2 ifconfig工具 65
2.7.3 ip工具 66
2.7.4 nc工具 66
2.8 網卡的特性(Feature) 67
2.8.1 LRO 67
2.8.2 GRO 67
2.8.3 TSO 68
2.8.4 GSO 68
2.9 網絡棧的擴展(Scaling) 69
2.9.1 RSS 69
2.9.2 RPS 71
2.9.3 RFS 72
2.9.4 XPS 73
2.10 硬中斷的負載均衡 74
2.10.1 硬中斷的CPU親和性 74
2.10.2 irqbalance功能 75
第3章 TCP 76
3.1 協議體 76
3.2 有限狀態機 81
3.2.1 netstat 82
3.2.2 ss 82
3.3 準備階段 83
3.4 握手階段 84
3.4.1 三次握手 84
3.4.2 初始化序列號 88
3.5 連接階段 89
3.5.1 重傳機制 90
3.5.2 確認機制 93
3.5.3 亂序恢復機制 94
3.5.4 保活機制 95
3.6 流量控制 97
3.6.1 滑動窗口 97
3.6.2 流量控制過程 99
3.6.3 零窗口 100
3.7 擁塞控制 101
3.7.1 擁塞控制算法 101
3.7.2 CUBIC 102
3.8 揮手階段 109
3.8.1 四次揮手 109
3.8.2 三次揮手 112
3.8.3 同時揮手 113
3.8.4 關閉函數 114
第4章 UDP 117
4.1 協議體 117
4.2 特點 119
4.2.1 無連接性 119
4.2.2 不可靠性 122
4.2.3 面向報文 122
4.2.4 最大交付 124
4.2.5 最小開銷 125
4.3 應用場景 125
4.4 可靠性保障 126
4.4.1 ACK 126
4.4.2 FEC 126
第5章 埠 128
5.1 問題 128
5.2 地址和埠復用的總結 128
5.2.1 兩個選項均關閉 129
5.2.2 僅開啟一個選項 129
5.2.3 僅開啟地址復用選項 130
5.2.4 開啟埠復用選項 131
5.3 地址復用的應用場景 132
5.4 埠復用的應用場景 133
5.4.1 單工作線程 133
5.4.2 多工作線程 137
5.5 TCP和UDP綁定同一埠 138
第6章 收包 139
6.1 網卡的準備過程 139
6.1.1 網卡驅動的加載 140
6.1.2 網卡驅動的初始化 141
6.1.3 啟用網卡 143
6.2 收包過程總覽 145
6.3 網絡接口層 148
6.3.1 網卡收到數據包 149
6.3.2 內核收到硬中斷 149
6.3.3 內核收到軟中斷 150
6.3.4 清理接收隊列 152
6.3.5 GRO 158
6.3.6 RPS 159
6.3.7 數據包進入協議棧之前 161
6.4 網絡層(IP) 168
6.4.1 網絡協議棧入口 169
6.4.2 數據包的流向 171
6.4.3 數據包的轉發 172
6.4.4 數據包進入傳輸層之前 173
6.5 傳輸層(UDP) 174
6.5.1 UDP協議入口 175
6.5.2 數據包的特殊處理 176
6.5.3 將數據包放入接收隊列 178
6.5.4 喚醒等待數據的進程/線程 179
6.6 套接字層 183
6.6.1 創建套接字 183
6.6.2 綁定套接字 188
6.6.3 讀取套接字 189
第7章 發包 195
7.1 發包流程總覽 195
7.2 套接字層 198
7.2.1 send/sendto函數(用戶態) 198
7.2.2 send/sendto系統調用(內核態) 199
7.2.3 選擇發送函數 200
7.2.4 將消息對象遞交到傳輸層 201
7.3 傳輸層(UDP) 202
7.3.1 處理消息對象 203
7.3.2 處理數據包(struct sk_buff) 211
7.4 網絡層(IP) 212
7.4.1 IP層入口函數 213
7.4.2 IPv4的發送函數 214
7.4.3 執行BPF程序 214
7.4.4 數據包的分片 215
7.4.5 將數據包發給鄰居子系統 216
7.5 鄰居子系統 217
7.5.1 確定發送路徑 219
7.5.2 快速發送路徑 220
7.5.3 慢速發送路徑 222
7.6 網絡接口層 225
7.6.1 網絡接口層入口 226
7.6.2 內核選擇發送隊列 229
7.6.3 運行排隊規則 233
7.6.4 將數據包遞交到網卡驅動 235
7.6.5 網卡驅動發包 236
7.6.6 軟中斷處理過程 240
7.6.7 網卡發送完成 241
第8章 內存 244
8.1 物理內存 244
8.1.1 物理內存模型 244
8.1.2 物理內存架構 250
8.1.3 物理內存節點 253
8.1.4 物理內存區域 256
8.1.5 物理內存頁 261
8.1.6 物理內存佈局 266
8.1.7 物理內存硬件 269
8.2 虛擬內存 270
8.2.1 虛擬內存佈局 270
8.2.2 虛擬內存空間 279
8.2.3 虛擬內存區域 288
8.2.4 虛擬內存申請 290
8.3 內存映射 301
8.3.1 正向映射 301
8.3.2 反向映射 307
第9章 案例 310
9.1 偽內存泄漏排查 310
9.1.1 背景 310
9.1.2 分析 310
9.1.3 定位 311
9.2 周期性事故處理 312
9.2.1 背景 312
9.2.2 猜想(大膽假設) 312
9.2.3 定位(小心求證) 313
9.2.4 總結 316